Skip to content

Agent commands in the existing pairux CLI; remove the separate package - #114

Merged
ralyodio merged 1 commit into
masterfrom
fix/merge-agent-cli-into-pairux
Sep 24, 2026
Merged

ralyodio merged 1 commit into
masterfrom
fix/merge-agent-cli-into-pairux

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

#113 shipped the agent commands as a separate npm package (@profullstack/pairux, bin pairux). That was a mistake: pairux already exists as the launcher the installers put on PATH, versioned with the app. This moves the commands into it and removes the separate package.

How it works now

  • pairux join ABC123, pairux listen, pairux say ... and the other agent commands go through the existing launcher, which already hands every argument it doesn't handle itself to the desktop app (the same path pairux daemon uses).
  • The desktop main process spots an agent command in argv, runs it headless and exits with its code. It opens no window or tray and skips the single-instance lock, so a running PairUX window isn't affected.
  • install.sh (macOS + Linux): the help text lists the agent commands. Arguments already pass through via exec "$APP_BIN" "$@".
  • install.ps1: agent commands run in the console through a pipe instead of start, so output shows up and the script waits for the command to finish.
  • Removed: packages/cli, its lockfile importer and vitest project. Docs, README and llms.txt now point at pairux from the installer.

Checks

  • desktop: 724 tests pass, including 23 agent-cli tests. Typecheck and lint clean.
  • web: typecheck and lint clean.
  • electron-vite build succeeds and the bundle contains the agent client.
  • Not tested: running a packaged binary end to end. This dev box can't start Electron (missing libatk).

Ships to desktop users with the next tag (v0.11.1). @profullstack/pairux gets unpublished from npm.

🤖 Generated with Claude Code

…e package

`pairux` already exists: the installers put a launcher on PATH (update,
uninstall, daemon, --version) that hands everything else to the desktop app.
The agent commands now ride that same path instead of a second npm binary
that collided with it and carried its own version.

- apps/desktop/src/main/agent-cli: login/logout/whoami/join/listen/say/who/
  status/leave, run headless by the main process (no window, no tray, no
  single-instance hand-off) and exit with the command's code.
- install.sh (macOS + Linux) and install.ps1: help lists the agent commands;
  Windows runs them in the console through a pipe instead of `start`.
- Removed packages/cli, its lockfile importer and vitest project; docs,
  README and llms.txt point at `pairux` from the installer.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

47 finding(s)

HIGH/CRITICAL: 4 | MEDIUM: 27 | LOW: 16

Severity Rule Location
HIGH sh-eval-expansion .githooks/pre-commit:33
HIGH js-electron-node-integration apps/desktop/src/main/window.ts:49
HIGH sh-unquoted-expansion-destructive apps/installer/scripts/install.sh:715
HIGH sh-unquoted-expansion-destructive apps/installer/scripts/install.sh:917
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:691
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:820
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:822
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:1078
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:1080
MEDIUM sh-remote-script-execution apps/livekit/setup-livekit-server.sh:93
MEDIUM sh-remote-script-execution apps/turn/deploy-droplet.sh:62
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:48
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:73
MEDIUM js-unescaped-html-sink apps/web/src/app/c/[handle]/page.tsx:192
MEDIUM js-open-redirect apps/web/src/app/cli/authorize/consent.tsx:66
MEDIUM js-unescaped-html-sink apps/web/src/app/l/[joinCode]/page.tsx:129
MEDIUM js-unescaped-html-sink apps/web/src/app/l/[joinCode]/page.tsx:213
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:142
MEDIUM js-unescaped-html-sink apps/web/src/app/live/page.tsx:145
MEDIUM js-unescaped-html-sink apps/web/src/app/page.tsx:122
MEDIUM js-unescaped-html-sink apps/web/src/app/pricing/page.tsx:284
MEDIUM js-open-redirect apps/web/src/app/pricing/UpgradeButton.tsx:50
MEDIUM js-unescaped-html-sink apps/web/src/app/u/[username]/page.tsx:282
MEDIUM js-open-redirect apps/web/src/hooks/useDesktopHandoff.ts:24
MEDIUM redos-nested-quantifier apps/web/src/lib/deliverable.ts:11
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:124
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:393
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:396
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:405
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:608
MEDIUM sql-template-interpolation packages/ai-core/src/prompts.ts:36
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:138
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:139
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:340
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:341
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:371
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:372
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:383
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:397
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:398
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:405
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:415
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:416
LOW secret-generic-credential apps/livekit/fly.toml:12
LOW secret-generic-credential apps/turn/fly.toml:11
LOW secret-generic-credential docs/API.md:747
LOW secret-generic-credential docs/API.md:753

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit de273d0 into master Sep 24, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant