@phnx-labs/agents-cli 1.22.41 → 1.22.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -0
- package/README.md +10 -4
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.js +25 -7
- package/dist/cli/command-registry.d.ts +2 -3
- package/dist/cli/command-registry.js +4 -8
- package/dist/commands/accounts.d.ts +29 -0
- package/dist/commands/accounts.js +220 -29
- package/dist/commands/alias.d.ts +7 -4
- package/dist/commands/alias.js +34 -9
- package/dist/commands/auth.d.ts +9 -0
- package/dist/commands/auth.js +108 -0
- package/dist/commands/browser-sessions-picker.js +42 -62
- package/dist/commands/browser.js +30 -38
- package/dist/commands/computer-actions.d.ts +1 -1
- package/dist/commands/computer-actions.js +1 -1
- package/dist/commands/computer-sessions-picker.js +32 -55
- package/dist/commands/computer.d.ts +1 -1
- package/dist/commands/computer.js +22 -8
- package/dist/commands/daemon.js +1 -1
- package/dist/commands/doctor.d.ts +5 -3
- package/dist/commands/doctor.js +23 -8
- package/dist/commands/exec.js +3 -2
- package/dist/commands/feed.js +2 -31
- package/dist/commands/harness.js +3 -3
- package/dist/commands/hooks.js +1 -1
- package/dist/commands/import.js +1 -1
- package/dist/commands/insights.js +163 -85
- package/dist/commands/inspect.js +2 -2
- package/dist/commands/mine.js +1 -1
- package/dist/commands/monitors.js +1 -1
- package/dist/commands/org.d.ts +6 -0
- package/dist/commands/org.js +175 -0
- package/dist/commands/packages.js +1 -1
- package/dist/commands/profiles.js +2 -2
- package/dist/commands/prune.js +1 -1
- package/dist/commands/routines.js +44 -26
- package/dist/commands/run-account-picker.d.ts +19 -0
- package/dist/commands/run-account-picker.js +81 -0
- package/dist/commands/sessions-picker-factory.d.ts +40 -0
- package/dist/commands/sessions-picker-factory.js +67 -0
- package/dist/commands/sessions-picker.js +124 -122
- package/dist/commands/setup-browser.js +4 -4
- package/dist/commands/setup-mine.js +1 -1
- package/dist/commands/setup-preferences.js +2 -2
- package/dist/commands/setup.js +10 -4
- package/dist/commands/snapshot.d.ts +1 -1
- package/dist/commands/snapshot.js +4 -4
- package/dist/commands/status.d.ts +4 -2
- package/dist/commands/status.js +10 -7
- package/dist/commands/sync.d.ts +1 -0
- package/dist/commands/sync.js +30 -3
- package/dist/commands/versions.js +1 -1
- package/dist/commands/view.js +7 -1
- package/dist/commands/webhook.js +1 -1
- package/dist/lib/account-capabilities.d.ts +10 -0
- package/dist/lib/account-capabilities.js +34 -0
- package/dist/lib/accounting/rotate.d.ts +5 -3
- package/dist/lib/accounting/rotate.js +36 -7
- package/dist/lib/accounting/usage.d.ts +18 -4
- package/dist/lib/accounting/usage.js +138 -27
- package/dist/lib/agent-spec/agents.d.ts +584 -0
- package/dist/lib/agent-spec/agents.js +3127 -0
- package/dist/lib/agent-spec/provider.js +1 -1
- package/dist/lib/agents.d.ts +2 -584
- package/dist/lib/agents.js +2 -3127
- package/dist/lib/browser/drivers/local.d.ts +8 -2
- package/dist/lib/browser/drivers/local.js +8 -2
- package/dist/lib/browser/drivers/ssh.d.ts +8 -2
- package/dist/lib/browser/drivers/ssh.js +10 -4
- package/dist/lib/browser/hygiene.d.ts +1 -1
- package/dist/lib/browser/hygiene.js +5 -1
- package/dist/lib/browser/profiles.d.ts +74 -1
- package/dist/lib/browser/profiles.js +114 -5
- package/dist/lib/browser/runtime-state.d.ts +11 -5
- package/dist/lib/browser/runtime-state.js +13 -9
- package/dist/lib/browser/service.d.ts +68 -30
- package/dist/lib/browser/service.js +305 -194
- package/dist/lib/browser/types.d.ts +95 -3
- package/dist/lib/browser/types.js +51 -0
- package/dist/lib/catchup.js +1 -1
- package/dist/lib/cloud/rush.d.ts +0 -15
- package/dist/lib/cloud/rush.js +0 -35
- package/dist/lib/computer/actions.d.ts +1 -1
- package/dist/lib/computer/actions.js +1 -1
- package/dist/lib/{computer-rpc.js → computer/computer-rpc.js} +5 -5
- package/dist/lib/computer/dispatch.d.ts +1 -1
- package/dist/lib/computer/download.d.ts +1 -1
- package/dist/lib/computer/download.js +3 -3
- package/dist/lib/{ssh-tunnel.d.ts → computer/ssh-tunnel.d.ts} +1 -1
- package/dist/lib/{ssh-tunnel.js → computer/ssh-tunnel.js} +12 -12
- package/dist/lib/crabbox/runtimes.d.ts +6 -2
- package/dist/lib/crabbox/runtimes.js +21 -5
- package/dist/lib/daemon/daemon.js +87 -59
- package/dist/lib/{runner.d.ts → daemon/runner.d.ts} +28 -11
- package/dist/lib/{runner.js → daemon/runner.js} +143 -123
- package/dist/lib/devices/doctor-findings.d.ts +1 -1
- package/dist/lib/devices/doctor-findings.js +4 -4
- package/dist/lib/devices/fleet-inventory.js +1 -1
- package/dist/lib/devices/harness-inventory.js +1 -1
- package/dist/lib/devices/health-report.js +1 -1
- package/dist/lib/devices/registry.js +4 -22
- package/dist/lib/doctor-diff.d.ts +1 -1
- package/dist/lib/doctor-diff.js +1 -1
- package/dist/lib/drift-sync.d.ts +1 -1
- package/dist/lib/drift-sync.js +2 -2
- package/dist/lib/drift.d.ts +1 -1
- package/dist/lib/drift.js +1 -1
- package/dist/lib/entitlement.d.ts +31 -0
- package/dist/lib/entitlement.js +137 -0
- package/dist/lib/exec.js +52 -205
- package/dist/lib/feed/feed.js +2 -8
- package/dist/lib/format.d.ts +9 -0
- package/dist/lib/format.js +16 -0
- package/dist/lib/fs-atomic.d.ts +7 -0
- package/dist/lib/fs-atomic.js +9 -0
- package/dist/lib/github/pr-mergeable.d.ts +49 -0
- package/dist/lib/github/pr-mergeable.js +157 -0
- package/dist/lib/github/pr-verdict.d.ts +67 -0
- package/dist/lib/github/pr-verdict.js +72 -0
- package/dist/lib/harness/adapter.d.ts +161 -0
- package/dist/lib/harness/adapter.js +47 -0
- package/dist/lib/harness/adapters/claude.d.ts +2 -0
- package/dist/lib/harness/adapters/claude.js +110 -0
- package/dist/lib/harness/adapters/codex.d.ts +2 -0
- package/dist/lib/harness/adapters/codex.js +83 -0
- package/dist/lib/harness/adapters/copilot.d.ts +2 -0
- package/dist/lib/harness/adapters/copilot.js +23 -0
- package/dist/lib/harness/adapters/cursor.d.ts +2 -0
- package/dist/lib/harness/adapters/cursor.js +38 -0
- package/dist/lib/harness/adapters/droid.d.ts +2 -0
- package/dist/lib/harness/adapters/droid.js +17 -0
- package/dist/lib/harness/adapters/grok.d.ts +2 -0
- package/dist/lib/harness/adapters/grok.js +14 -0
- package/dist/lib/harness/adapters/kimi.d.ts +2 -0
- package/dist/lib/harness/adapters/kimi.js +49 -0
- package/dist/lib/harness/adapters/muse.d.ts +2 -0
- package/dist/lib/harness/adapters/muse.js +44 -0
- package/dist/lib/harness/adapters/opencode.d.ts +2 -0
- package/dist/lib/harness/adapters/opencode.js +14 -0
- package/dist/lib/harness/exec-config-version.d.ts +8 -0
- package/dist/lib/harness/exec-config-version.js +22 -0
- package/dist/lib/harness/index.d.ts +1 -0
- package/dist/lib/harness/index.js +34 -0
- package/dist/lib/{hooks.d.ts → hooks/install.d.ts} +1 -1
- package/dist/lib/{hooks.js → hooks/install.js} +11 -11
- package/dist/lib/hosts/passthrough.d.ts +10 -0
- package/dist/lib/hosts/passthrough.js +28 -6
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/import.js +1 -1
- package/dist/lib/installations/index.d.ts +4 -4
- package/dist/lib/installations/index.js +3 -4
- package/dist/lib/installations/migrate.js +6 -6
- package/dist/lib/{shims.d.ts → installations/shims.d.ts} +2 -2
- package/dist/lib/{shims.js → installations/shims.js} +13 -115
- package/dist/lib/installations/store.d.ts +141 -3
- package/dist/lib/installations/store.js +475 -5
- package/dist/lib/installations/versions.d.ts +40 -125
- package/dist/lib/installations/versions.js +57 -462
- package/dist/lib/isolation-boundary-report.d.ts +1 -1
- package/dist/lib/isolation-boundary-report.js +1 -1
- package/dist/lib/mailbox-gc.js +2 -3
- package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
- package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
- package/dist/lib/menubar/install-menubar.js +19 -8
- package/dist/lib/monitors/config.d.ts +2 -2
- package/dist/lib/monitors/config.js +3 -2
- package/dist/lib/monitors/dispatch.d.ts +1 -1
- package/dist/lib/monitors/dispatch.js +2 -2
- package/dist/lib/monitors/state.d.ts +1 -1
- package/dist/lib/origin-machine.d.ts +18 -0
- package/dist/lib/origin-machine.js +34 -0
- package/dist/lib/perf/db.js +1 -1
- package/dist/lib/perf/spool.js +1 -1
- package/dist/lib/plugins/plugins.js +1 -1
- package/dist/lib/plugins/skills.js +1 -1
- package/dist/lib/prix-account.d.ts +158 -0
- package/dist/lib/prix-account.js +214 -0
- package/dist/lib/profiles.d.ts +7 -0
- package/dist/lib/profiles.js +26 -1
- package/dist/lib/project-key.js +2 -2
- package/dist/lib/project-launch.js +1 -1
- package/dist/lib/refresh.js +2 -2
- package/dist/lib/resource-inventory.d.ts +1 -1
- package/dist/lib/resource-inventory.js +1 -1
- package/dist/lib/rules/rules.js +1 -1
- package/dist/lib/sandbox.d.ts +24 -0
- package/dist/lib/sandbox.js +101 -0
- package/dist/lib/scheduling/routines.d.ts +18 -9
- package/dist/lib/scheduling/routines.js +17 -9
- package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
- package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
- package/dist/lib/secrets/agent.js +9 -1
- package/dist/lib/secrets/index.js +1 -1
- package/dist/lib/secrets/list-filter.js +1 -1
- package/dist/lib/self-heal/checks/hook-runtime.js +1 -1
- package/dist/lib/self-heal/checks/path.js +1 -1
- package/dist/lib/self-heal/checks/shadowing.js +1 -1
- package/dist/lib/self-heal/checks/shims.js +1 -1
- package/dist/lib/service-manifest.d.ts +20 -0
- package/dist/lib/service-manifest.js +34 -0
- package/dist/lib/session/cloud.js +1 -1
- package/dist/lib/session/db.js +1 -1
- package/dist/lib/session/discover.d.ts +39 -0
- package/dist/lib/session/discover.js +3 -3
- package/dist/lib/session/fork.js +1 -1
- package/dist/lib/session/live-metadata.js +1 -1
- package/dist/lib/session/origin-machine.d.ts +1 -18
- package/dist/lib/session/origin-machine.js +4 -34
- package/dist/lib/session/parse.js +24 -42
- package/dist/lib/session/recovery.js +1 -1
- package/dist/lib/session/relative-time.d.ts +1 -44
- package/dist/lib/session/relative-time.js +4 -120
- package/dist/lib/session/remote-list.js +1 -1
- package/dist/lib/session/remote.js +2 -2
- package/dist/lib/session/short-id.d.ts +1 -17
- package/dist/lib/session/short-id.js +4 -20
- package/dist/lib/session/width.d.ts +1 -29
- package/dist/lib/session/width.js +4 -101
- package/dist/lib/snapshot.d.ts +2 -2
- package/dist/lib/snapshot.js +1 -1
- package/dist/lib/staleness/prune.d.ts +1 -1
- package/dist/lib/staleness/prune.js +1 -1
- package/dist/lib/staleness/writers/hooks.js +1 -1
- package/dist/lib/startup/command-registry.d.ts +4 -1
- package/dist/lib/startup/command-registry.js +12 -5
- package/dist/lib/teams/agents.js +2 -19
- package/dist/lib/teams/parsers.js +20 -26
- package/dist/lib/teams/placement-probe.js +1 -1
- package/dist/lib/teams/registry.js +2 -21
- package/dist/lib/teams/scheduler.js +1 -1
- package/dist/lib/text/relative-time.d.ts +44 -0
- package/dist/lib/text/relative-time.js +120 -0
- package/dist/lib/text/short-id.d.ts +17 -0
- package/dist/lib/text/short-id.js +20 -0
- package/dist/lib/text/width.d.ts +29 -0
- package/dist/lib/text/width.js +101 -0
- package/dist/lib/triggers/handlers.d.ts +7 -0
- package/dist/lib/triggers/handlers.js +9 -1
- package/dist/lib/triggers/webhook.d.ts +1 -0
- package/dist/lib/triggers/webhook.js +3 -2
- package/dist/lib/uninstall.js +1 -1
- package/dist/lib/version.d.ts +9 -2
- package/dist/lib/version.js +11 -9
- package/dist/lib/view-types.d.ts +4 -0
- package/package.json +1 -1
- package/dist/commands/tickets.d.ts +0 -2
- package/dist/commands/tickets.js +0 -43
- package/dist/lib/observe-aliases.d.ts +0 -30
- package/dist/lib/observe-aliases.js +0 -38
- package/dist/lib/tickets/list.d.ts +0 -53
- package/dist/lib/tickets/list.js +0 -153
- /package/dist/lib/{computer-rpc.d.ts → computer/computer-rpc.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,91 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.22.43
|
|
4
|
+
|
|
5
|
+
- **Rush Cloud no longer has a helper that reads the interactive Claude login (RUSH-2359 / incident #1767).** Dispatch already sends an email-only account manifest (SING-1b) and never uploaded a token; the leftover `readClaudeCredentialsBlob` still read Keychain / `.credentials.json` — the exact shape that captured a `claude setup-token` TTY banner as an Authorization header. That helper is deleted. `--lease` SING-1b detection now reads the wrapped rotating blob itself and ignores anything that is not `{ claudeAiOauth.accessToken }`. Source: `apps/cli/src/lib/cloud/rush.ts`, `apps/cli/src/lib/crabbox/runtimes.ts`.
|
|
6
|
+
|
|
7
|
+
- **fix: `agents sync <agent>` self-heals version pointers left aimed at an uninstalled version (RUSH-2471).** `removeVersion` reassigns the default and clears the `~/.<agent>` config symlink only when it removes the pointed-at version, so a version-home whose launch binary vanished by any other route — grok self-updating its per-version binary out from under the old dir, a manual delete, a half-finished install that seeded the home but never landed the binary — left the global default and/or the symlink resolving to a dead version. Because `agents use <agent>@<v>` sets the default and the symlink together, both dangled in lockstep once `<v>`'s binary went away: `agents sync <agent>` would print `Repointed <agent> config symlink …` and then still fail `<agent>@<v> is not installed`, because the version to sync is resolved from the raw global default. `agents sync <agent>` now repoints the global default, the isolated default, and the config symlink off any not-installed version before resolving — the default to the newest non-isolated installed version (never auto-promoting an isolated install), the symlink to the resolved default else the newest non-isolated installed version (the user's real `~/.<agent>` is never repointed at an isolated install). A pointer already on an installed version (a deliberate `agents use` choice), a real config directory, and isolated-only agents are left untouched. Source: `apps/cli/src/lib/installations/versions.ts`, `apps/cli/src/commands/sync.ts`.
|
|
8
|
+
|
|
9
|
+
- **Session preview groups metadata into verb-led rows (RUSH-2757, part 3).** `agents sessions preview` (and the picker pane) replaces the flat labeled block (`Prompt/Todos/Dirs/Repos/Changes/Artifacts/Skills/Plugins/Hooks/Links/Errors/Meta/Tools/Tests`) with five scannable verb rows in a fixed gutter — `Asked` (the originating prompt, quoted), `Doing` (checklist progress, team lineage, sub-agents), `Made` (file deltas, reads, artifacts, plan, PR), `Health` (errors + last test verdict, absent when clean), `Cost` (msgs, tokens, tool mix) — then `Latest` (the full wrapped last message, formerly `Last response:`) and one width-capped `Details ▸` fold (session id, skills, plugins, hooks, links, dirs, repos) that shows `… +N more` instead of wrapping and swamping the pane. Msgs/tokens/session-id move out of the header's third line into `Cost`/`Details`, so they render once. The metadata-only card (remote/unindexed sessions) uses the same rows. Source: `apps/cli/src/commands/sessions-picker.ts` (`formatCompactPreview`, `formatMetaOnlyBody`, `formatHeader`, `joinWidthCapped` — now ANSI-aware).
|
|
10
|
+
|
|
11
|
+
- **`pr-merge-on-green` can actually select a PR (RUSH-2848).** The built-in's poll ran `gh pr list --author @me` with no `--repo`, so `gh` inferred the repository from cwd; the daemon's cwd is not a git repo and every poll returned empty. The poll now walks registered project slugs (`~/.agents/projects/*.yaml`), canonicalizes renamed repos (`phnx-labs/agents-cli` → `phnx-labs/agi-cli`), and lists with `--repo`. Verdict matches `merge-guard.sh`: a formal GitHub `APPROVED` review **or** an APPROVE comment on THIS PR (carried-from citations do not count). Hidden `agents _internal mergeable-prs` prints `owner/repo#n` (cwd-independent). Source: `apps/cli/src/lib/github/pr-verdict.ts`, `apps/cli/src/lib/github/pr-mergeable.ts`. Companion: phnx-labs/.agents-system#347.
|
|
12
|
+
|
|
13
|
+
- **BREAKING: nest `agents status` under `agents sync status` (RUSH-2864).** `status` was the unified sync-drift report sitting as its own top-level command next to `sync`. It now lives as `agents sync status` (`--json` UnifiedSyncStatus contract and `--yes` reconcile unchanged). Top-level `agents status` is gone, not deprecated: it reports `unknown command`, and `status` is retired from distance-1 auto-correct. `agents sync <agent>` still treats the positional as an agent spec; `status` is reserved as the subcommand. `agents sync status --device` from a non-TTY does not inherit umbrella `--yes` (that flag is reconcile on this command, not "don't prompt"). Source: `apps/cli/src/commands/{status,sync}.ts`, `apps/cli/src/lib/hosts/passthrough.ts`, `apps/cli/src/lib/startup/command-registry.ts`.
|
|
14
|
+
|
|
15
|
+
- **Custom harnesses (deepseek, kimi-chat, glm, …) now work in routines and monitors, and their profiles survive fleet sync (RUSH-2930).** `agents routines add --agent deepseek` and `agents monitors add --run deepseek` used to refuse any name outside the native registry; both now accept a custom harness (`agents harness list`), and the daemon delegates the job to `agents run <name>` — the same path workflow jobs take — so the profile's host binary, model env, and provider auth resolve exactly as an interactive run. The profile pins its own host version and auth, so `@version` pins, balanced rotation, and account-env injection don't apply to these jobs. Separately, `agents harness add/fork/edit` and the legacy-auth migration stored the account's per-device **id** in the profile, while profiles sync fleet-wide via `agents repo push` — every synced custom harness then died on other machines with `Unknown account '<uuid>'`. The portable account **name** is stored now, and a profile with a dangling ref reports which harness is broken and the exact `agents harness edit <name> --account <name>` repair instead of the bare registry error. Source: `apps/cli/src/lib/daemon/runner.ts`, `apps/cli/src/lib/scheduling/routines.ts`, `apps/cli/src/lib/monitors/config.ts`, `apps/cli/src/commands/{routines,harness,profiles}.ts`, `apps/cli/src/lib/profiles.ts`.
|
|
16
|
+
|
|
17
|
+
- **BREAKING: remove the top-level `agents tickets` command (RUSH-2932).** Ticket reads go through `linear` (linear-cli) and `gh issue`. `agents tickets` reports `unknown command`, and `tickets` is retired from distance-1 auto-correct. AGI EXT now calls those CLIs directly. Source: `apps/cli/src/cli/command-registry.ts`, `apps/cli/src/lib/startup/command-registry.ts`, `apps/ext/src/vscode/tasks.vscode.ts`.
|
|
18
|
+
|
|
19
|
+
- **Expired cached usage windows read as unknown, not 0% (RUSH-2936).** A cached Claude usage window whose reset time had passed was zeroed but kept, so a frozen cache (Anthropic has been 429-ing `/api/oauth/usage` per account since ~Aug 5) rendered every account as `S: 0% (now) W: 0% (now)` with `usageStatus: "available"` — and balanced rotation kept dispatching into genuinely rate-limited accounts (RUSH-2858). `deserializeClaudeUsageSnapshot` now drops expired windows (the same rule the Grok collector already applied); an all-expired snapshot deserializes to null, the dead cache entry self-cleans, `agents view` renders `usage unavailable` plus the recorded throttle reason, and rotation falls back to the coarse cached status instead of trusting a fake 0%. Source: `apps/cli/src/lib/accounting/usage.ts`.
|
|
20
|
+
|
|
21
|
+
- **`agents doctor <agent>@<version>` no longer marks every missing resource critical (RUSH-2947).** Target mode's `computeVerdict` hardcoded `severity: 'critical'` for any `status: 'missing'` resource of any kind, while fleet mode's `FINDING_SEVERITY` — whose own docblock calls it "the single source of truth" — rates the same fact `warning` for everything except `missing-hook`/`missing-plugin`. A missing command, skill, permission, subagent, rule, or MCP entry now reads `warning` in target mode too, matching fleet mode; a missing hook or plugin stays `critical` in both. `computeVerdict` reads severity from `FINDING_SEVERITY` via a new `missingResourceSeverity(kind)` helper instead of re-hardcoding it. Source: `apps/cli/src/commands/doctor.ts`.
|
|
22
|
+
|
|
23
|
+
- **BREAKING: nest `agents alias` under `agents setup alias` (RUSH-2965).** Setting up a PATH shorthand is a setup action, not its own noun. `agents setup alias add/list/remove` keep the same shim behavior (`~/.agents/.cache/shims/` + `~/.agents/aliases.json`). Top-level `agents alias` is gone, not deprecated: it reports `unknown command`, and `alias` is retired from distance-1 auto-correct. Source: `apps/cli/src/commands/{alias,setup}.ts`, `apps/cli/src/lib/startup/command-registry.ts`.
|
|
24
|
+
|
|
25
|
+
- **Block service-manager registration under a redirected HOME on macOS/Linux (RUSH-2968).**
|
|
26
|
+
`launchctl` and `systemctl --user` are per-user-session and ignore `$HOME`, so a CLI
|
|
27
|
+
running under a sandbox/redirected HOME (including every vitest fork) still talked to
|
|
28
|
+
the user's real service manager. `service-manifest.ts` already namespaces the job
|
|
29
|
+
label, but that only changes the identifier — the registration still lands in real
|
|
30
|
+
`launchd`/`systemd` (measured: 89 dead `…sandbox-<hash>` services accumulated in one
|
|
31
|
+
user's real launchd from test runs, KeepAlive-retrying torn-down executables). Every
|
|
32
|
+
registration path now consults `serviceManagerRegistrationAllowed()` (false when
|
|
33
|
+
`isolatedHomeSuffix()` is non-null) and skips with a stated reason rather than
|
|
34
|
+
touching the real service manager: daemon `startDaemon`/`stopDaemon`, menubar
|
|
35
|
+
`restartMenubarLaunchAgent`/`disableMenubarService`, secrets
|
|
36
|
+
`retireLegacySecretsAgentService`, and `agents computer start`. A test seam
|
|
37
|
+
`AGENTS_SERVICE_MANAGER_ALLOW_REDIRECTED_HOME=1` lets the existing shim-based tests
|
|
38
|
+
continue to exercise the registration code path. Source:
|
|
39
|
+
`apps/cli/src/lib/service-manifest.ts`, `apps/cli/src/lib/daemon/daemon.ts`,
|
|
40
|
+
`apps/cli/src/lib/menubar/install-menubar.ts`, `apps/cli/src/lib/secrets/agent.ts`,
|
|
41
|
+
`apps/cli/src/commands/computer.ts`.
|
|
42
|
+
|
|
43
|
+
- **BREAKING: the top-level `agents inbox` command is removed — use `agents feed` (RUSH-2984).** `inbox` was a Phase-3 observe alias that re-parsed as `agents feed` (needs-you is already the feed default), the same leftover class as `timeline` (RUSH-2692). It is gone entirely, not deprecated: `agents inbox` now reports `unknown command`, and `inbox` is retired from distance-1 auto-correct. `agents feed` / `feed post` / `feed post --blocked` are unchanged. Source: `apps/cli/src/commands/feed.ts`, `apps/cli/src/lib/startup/command-registry.ts`, `apps/cli/src/bootstrap.ts`.
|
|
44
|
+
|
|
45
|
+
- `agents auth` and `agents org` now print a clean one-line error (and a structured `{"error"}` payload under `--json`) for signed-out, expired-token, and bad-input states, instead of dumping a raw Node stack trace.
|
|
46
|
+
|
|
47
|
+
- Fixed balanced Claude account rotation recording session-limit refusals until their stated reset, skipping those accounts, and surfacing `session-limited` in `agents view` instead of idle usage.
|
|
48
|
+
|
|
49
|
+
- Sandboxed monitor `--run` and routine children now inherit this host's GitHub CLI auth (RUSH-2860). A monitor fire recorded `ok` while the spawned child had no `~/.config/gh`, so `gh auth status` reported "not logged into any GitHub hosts" and the PR it was meant to act on stayed open. The routine sandbox overlay replaces `HOME` with a disposable dir, and `gh` was never linked into it. `prepareJobHome` now links the host's `gh` config dir into the overlay (and only that — `~/.agents` is deliberately not linked, since it holds the secrets master key and the encrypted store), `buildSpawnEnv` pins `GH_CONFIG_DIR` and forwards `GH_TOKEN`/`GITHUB_TOKEN`, and the runner refuses to launch when a routine's own `env:` overrides `GH_CONFIG_DIR` such that this host's gh auth would still be hidden — a regression tripwire rather than a runtime guarantee. Not covered on Windows, where `gh` stores config under `%AppData%\GitHub CLI`.
|
|
50
|
+
|
|
51
|
+
- **`agents webhooks` now advertises `/hooks/slack`.** The receiver has accepted signed
|
|
52
|
+
Slack deliveries since the Slack bridge landed, but `agents webhooks serve` and
|
|
53
|
+
`agents daemon webhooks list` still printed only `/hooks/github, /hooks/linear` — the
|
|
54
|
+
one URL you must paste into the Slack app was missing from the banner. The slash-command
|
|
55
|
+
ack now also says "replying in this channel", matching where the reply actually posts
|
|
56
|
+
(a slash command carries no thread). Source: `apps/cli/src/commands/webhook.ts`,
|
|
57
|
+
`apps/cli/src/commands/daemon.ts`, `apps/cli/src/lib/triggers/webhook.ts`.
|
|
58
|
+
|
|
59
|
+
- **Slack/webhook handlers that run an agent actually dispatch now.** A `run.agent` or
|
|
60
|
+
`run.workflow` webhook handler was gated by the *routine* activation manifest
|
|
61
|
+
(`~/.agents/devices/<machine>/agents.yaml`). A handler is not a routine, so its name
|
|
62
|
+
could never be a member — on any box that had materialized that manifest, every
|
|
63
|
+
delivery was recorded `skipped` with an empty allowlist (`can only run on: `) while the
|
|
64
|
+
receiver logged it as `fired`, and `agents routines enable <handler>` refuses the name,
|
|
65
|
+
so there was no way out. Verified live: a real HMAC-signed `/agents` slash command
|
|
66
|
+
reached the public receiver, acked 200, and started no agent. The job now carries
|
|
67
|
+
`dispatchedBy: 'webhook'`, the same escape RUSH-2681 gave monitors; a handler's
|
|
68
|
+
`routine:` delegate still keeps its gate.
|
|
69
|
+
- **`{{slack.response_url}}` is now available to handler prompts.** It was parsed off the
|
|
70
|
+
wire but never reached the `{{slack.*}}` namespace. Slack accepts a POST there for 30
|
|
71
|
+
minutes with no token and no channel membership, so it is the only reply that works
|
|
72
|
+
before the app has been invited to a channel — the shipped example handler now uses it.
|
|
73
|
+
Source: `apps/cli/src/lib/triggers/handlers.ts`, `apps/cli/src/lib/scheduling/routines.ts`.
|
|
74
|
+
|
|
75
|
+
## 1.22.42
|
|
76
|
+
|
|
77
|
+
- **Plan-tier gates for `agents accounts` and `agents insights` (RUSH-2424).** A new `apps/cli/src/lib/entitlement.ts` reads the live subscription tier from `GET /api/v1/billing/subscription?agent=agi-cli` (the session token in `~/.rush/user.yaml`), caches it on disk for 15 minutes, and stays offline-tolerant: a stale cache is honored over a failed network call, and no session file at all resolves straight to the free tier. `agents accounts add` / `name` / `attach` now cap registered accounts at 3 per harness on free, 10 on paid/admin — a 4th add on free refuses before any write (`free plan is capped at 3 claude accounts (3/3). agents upgrade — up to 10 per harness.`) and the 3rd prints a one-line notice. Downgrading a plan never deletes a credential: over-cap accounts fall out of `accounts switch`/`set-default` (excluded from `listSwitchableAccounts`) and are listed `dormant (upgrade to reactivate)` in `agents accounts`. `agents insights` keeps top-line counts, harness mix, `insights mix`, and `agents perf` free on every tier; the Friction / Friction-thrash / Dissatisfaction-corrections sections, grouping `--by account` (the default), and `--narrative` are paid — a gated section is replaced by the in-voice notice `Friction and account-split analysis are on the paid plan.` in both the text report and `--json` (a new `plan: {tierName, isPaid}` field, `groups: null` when the account breakdown is gated, and the friction/correction facet keys stripped per group otherwise). Source: `apps/cli/src/lib/entitlement.ts`, `apps/cli/src/commands/accounts.ts`, `apps/cli/src/commands/insights.ts`.
|
|
78
|
+
|
|
79
|
+
- **`--profile <name>` means the same profile in every browser command, and a profile's name never carries its endpoint (RUSH-2709).** `BrowserService.start` used to overwrite `BrowserProfile.name` with the composite `<profile>@<endpoint>` runtime key, so the key leaked into `profiles list`, `status`, `history`, and the feed, and six consumers each invented their own rule for turning one back into the other — which is why `status --profile default` could report "No browser tasks running" while that profile was running. The two concepts are now distinct types: `ProfileName` (user-facing, always bare), `EndpointName`, and a **branded** `ConnectionKey` built at exactly one site, so `connections.get(someProfileName)` — the original miss — no longer compiles. One rule, `keyBelongsToProfile`, replaces the four ad-hoc reconciliations in `status`, `stopProfile`, `findTask`, and `listProfileCacheDirs`, which also fixes a legacy `<name>.<n>` fork directory being matched by some of those paths and missed by others. `status` renders `comet-local (endpoint: endpoint-0, port 9222, pid …)` instead of the raw key, and `status --json` carries `name` (bare), `endpoint`, and `key` as separate fields. Source: `apps/cli/src/lib/browser/{types,service,profiles,runtime-state}.ts`, `apps/cli/src/lib/browser/drivers/{local,ssh}.ts`, `apps/cli/src/commands/browser.ts`, `apps/cli/docs/browser.md`.
|
|
80
|
+
|
|
81
|
+
- **`default` is now purely an alias, and the auto-detected browser profile is named `auto-chrome` (RUSH-2709).** `default` used to name BOTH a concrete auto-detected profile and the "whatever you configured" alias, and only `start` honored the alias (its own comment: "narrowly scoped … only here in `start`") — so `--profile default` reached one profile in `start` and a different one, or nothing, in `stop` / `status` / `navigate`. One resolver, `resolveProfileRef`, now serves every command. Nothing existing breaks: a `browser.profile` config value of `default` still resolves (to the auto-detected profile), a profile you literally named `default` still resolves to itself and outranks the alias, and a machine that already carries a `default` profile keeps using it — `ensureDefaultBrowserProfile` reuses and regenerates it in place rather than creating a second one, so a running browser and its on-disk runtime dirs are not orphaned. Source: `apps/cli/src/lib/browser/profiles.ts`, `apps/cli/src/commands/{browser,setup,setup-browser,setup-preferences}.ts`, `apps/cli/src/lib/installations/migrate.ts`.
|
|
82
|
+
|
|
83
|
+
- **`agents auth login/whoami/logout` and `agents org create/list/view/invite/members/role/remove/leave` — the account-layer client over the existing `api.prix.dev` backend.** `agents auth login` runs the already-shipped RFC 8628 device-code flow (`POST /api/v1/auth/device/authorization` + poll `/token`) and writes its own session file, separate from `rush login`'s `~/.rush/user.yaml` — so `agents auth logout` never signs you out of `rush`, while `agents auth whoami`/`agents org` fall back to a live `rush login` session automatically if you never ran `agents auth login`. `agents org` maps to the backend's `/api/v1/spaces` routes (not `/api/v1/orgs` — spaces already enforce the free-tier caps of 1 owned space / 3 members and can exist standalone). Every subcommand takes `--json`; `--space <id-or-slug>` is optional and defaults to your sole space. Source: `apps/cli/src/lib/prix-account.ts`, `apps/cli/src/commands/{auth,org}.ts`.
|
|
84
|
+
|
|
85
|
+
- **`agents accounts switch <harness> [account]` picks the default account for a harness.** Interactive mode reuses the run-account picker layout (usage %, headroom, signed-out / rate-limited) and writes the existing per-harness default — the same binding as `accounts set-default`, which balanced rotation already honors. Pass an account name to skip the picker; `--json` lists or reports the result. Native `accounts name` / `attach` now refuse an unsupported harness with a named reason (`kimi accounts can't be isolated by agents-cli yet (device-scoped login). Supported today: claude, codex, grok.`); provider `accounts add --provider` is unchanged. Source: `apps/cli/src/commands/accounts.ts`, `apps/cli/src/commands/run-account-picker.ts`, `apps/cli/src/lib/account-capabilities.ts`.
|
|
86
|
+
|
|
87
|
+
- **`agents browser navigate` now reuses a tab in Arc instead of refusing outright (#2786, #2778).** Arc crashes on `Target.createTarget`, so every navigate was answered with "use a Chromium-family browser" — which meant the document was never shown at all and callers fell back to a raw `open`, a new tab per call, i.e. exactly the tab-spam #2779 set out to end. Arc does expose page targets and does honor `Page.navigate` on them (measured against a live Arc: 33 targets, navigate reused one, tab count unchanged, no crash), so navigate now reuses in place, the same shape as the existing Electron branch. Reuse is narrow and non-destructive: only a tab ALREADY showing the requested URL, or an empty new-tab page, and a target another task owns is left alone. A reused tab is recorded as **borrowed** — the task drives it but never closes it, so a tab that was open before the task survives `done` (the rule `adoptTabShowing` states for unowned pages, kept here where reuse is unavoidable). When nothing is safe to reuse the actionable refusal stands. The `Target.createTarget` guard from #2778 is unchanged. Source: `apps/cli/src/lib/browser/service.ts`.
|
|
88
|
+
|
|
3
89
|
## 1.22.41
|
|
4
90
|
|
|
5
91
|
- **BREAKING: the top-level `agents timeline` command is removed — use `agents feed --filter updates` (RUSH-2692).** `timeline` was a pure alias of `agents feed --filter updates` (its own description said so), a second door to one stream against the CLI-surface convention of one owned noun with no duplicated surface. It is gone entirely, not deprecated: `agents timeline` now reports `unknown command`, and `timeline` is retired from distance-1 auto-correct so a stale invocation fails loudly instead of running a neighbouring command. `agents feed --filter updates` is unchanged, and the sibling observe aliases `agents inbox` and `agents roster` are unaffected. Source: `apps/cli/src/commands/feed.ts`, `apps/cli/src/lib/observe-aliases.ts`, `apps/cli/src/lib/startup/command-registry.ts`, `apps/cli/src/bootstrap.ts`.
|
package/README.md
CHANGED
|
@@ -39,7 +39,11 @@
|
|
|
39
39
|
<a href="https://docs.warp.dev/reference/cli" title="Warp Agent CLI (Oz)"><picture><source media="(prefers-color-scheme: dark)" srcset="assets/harnesses/warp.svg"><img src="assets/harnesses/warp-light.svg" height="32" alt="Warp Agent CLI" /></picture></a>
|
|
40
40
|
</p>
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
<p align="center">
|
|
43
|
+
<img src="assets/demos/hero.gif" alt="agents CLI: sessions across every agent and project, chaining agents in a Unix pipeline, dispatching to the cloud, and one team spread across machines" width="860" />
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
<p align="center"><a href="https://agi-cli.sh/demo.mp4">Watch the full 56-second demo</a></p>
|
|
43
47
|
|
|
44
48
|
## Quickstart
|
|
45
49
|
|
|
@@ -186,7 +190,7 @@ agents run claude@
|
|
|
186
190
|
agents run codex@ "review this branch"
|
|
187
191
|
```
|
|
188
192
|
|
|
189
|
-
`--strategy balanced` spreads work across available versions of the same agent -- useful when you have multiple accounts and want to avoid burning through one. When every account is rate-limited, the run exits nonzero naming each excluded account and the earliest window reset (use `--strategy pinned` to force the default) -- it never launches into an exhausted account.
|
|
193
|
+
`--strategy balanced` spreads work across available versions of the same agent -- useful when you have multiple accounts and want to avoid burning through one. When a Claude run reports a session limit, agents-cli records the stated reset time, shows `session-limited` in `agents view`, and excludes that account until the reset. When every account is rate-limited, the run exits nonzero naming each excluded account and the earliest window reset (use `--strategy pinned` to force the default) -- it never launches into an exhausted account.
|
|
190
194
|
|
|
191
195
|
### Don't care which harness? `agents run auto`
|
|
192
196
|
|
|
@@ -1006,15 +1010,17 @@ agents accounts add gateway --provider openrouter --auth api-key \
|
|
|
1006
1010
|
--from-secrets openrouter.ai:OPENROUTER_API_KEY # import from an existing secrets bundle
|
|
1007
1011
|
agents accounts add deepinfra --provider deepinfra --auth api-key
|
|
1008
1012
|
|
|
1013
|
+
agents accounts switch claude # picker: usage %, headroom, signed-out / rate-limited
|
|
1014
|
+
agents accounts switch claude work # skip the picker; same write as set-default
|
|
1009
1015
|
agents accounts set-default claude work # claude uses `work` when --account is omitted
|
|
1010
1016
|
agents accounts sync work --device yosemite-s0 # explicitly copy the bundle to a worker device
|
|
1011
1017
|
agents run claude --account work
|
|
1012
1018
|
agents harness add deepinfra --account deepinfra
|
|
1013
1019
|
```
|
|
1014
1020
|
|
|
1015
|
-
One provider account **is** one `agents secrets` bundle -- `agents accounts add` creates it with secrets policy `never`, so a background agent launch on that account never raises Touch ID. `agents accounts` (no subcommand) lists provider bundles next to harness-native signed-in identities so you see both kinds of credential together; `accounts list` / `inspect <name>` / `set-key <name>` (rotate) / `rename` / `remove` manage a bundle by its stable id, independent of its current label.
|
|
1021
|
+
One provider account **is** one `agents secrets` bundle -- `agents accounts add` creates it with secrets policy `never`, so a background agent launch on that account never raises Touch ID. `agents accounts` (no subcommand) lists provider bundles next to harness-native signed-in identities so you see both kinds of credential together; `accounts list` / `inspect <name>` / `set-key <name>` (rotate) / `rename` / `remove` manage a bundle by its stable id, independent of its current label. `accounts switch <harness>` is the fast picker over that default -- it writes the same binding as `set-default`, and balanced rotation already honors it.
|
|
1016
1022
|
|
|
1017
|
-
Harness-native OAuth logins (Claude Code's own `/login`, `codex login`, and so on) stay exactly where the harness put them -- agi-cli discovers and displays them but never copies, renames, or converts them into a provider bundle. `accounts sync <name> --device <device>` is the only way a provider account crosses machines, and it's explicit: nothing syncs automatically. Selection order for a run is explicit `--account`, then `accounts set-default` for that harness, then the harness's native/balanced account behavior.
|
|
1023
|
+
Harness-native OAuth logins (Claude Code's own `/login`, `codex login`, and so on) stay exactly where the harness put them -- agi-cli discovers and displays them but never copies, renames, or converts them into a provider bundle. Native `accounts name` / `attach` is only for harnesses agents-cli can isolate today (claude, codex, grok; muse when an email is present). A device-scoped login (kimi, droid, …) is refused with a named reason; provider `accounts add --provider` is unrestricted. `accounts sync <name> --device <device>` is the only way a provider account crosses machines, and it's explicit: nothing syncs automatically. Selection order for a run is explicit `--account`, then `accounts set-default` / `switch` for that harness, then the harness's native/balanced account behavior.
|
|
1018
1024
|
|
|
1019
1025
|
---
|
|
1020
1026
|
|
package/dist/bin/agents
CHANGED
|
Binary file
|
package/dist/bootstrap.js
CHANGED
|
@@ -256,12 +256,12 @@ Run and dispatch:
|
|
|
256
256
|
pty Drive interactive terminal programs (REPLs, TUIs) via a persistent PTY session
|
|
257
257
|
artifacts Publish what an agent made (plans, reports, visuals) to a shareable link
|
|
258
258
|
|
|
259
|
-
Observe (read the fleet — no store merge
|
|
260
|
-
feed
|
|
259
|
+
Observe (read the fleet — no store merge):
|
|
260
|
+
feed Needs-you inbox (open blocks waiting on you); agent posts = feed --filter updates
|
|
261
261
|
sessions --active Live agents (who is running right now)
|
|
262
262
|
events Unified ops + activity event trail
|
|
263
263
|
audit Tamper-evident run-dispatch log (not events)
|
|
264
|
-
status
|
|
264
|
+
sync status Sync/drift only (not the live fleet snapshot)
|
|
265
265
|
devices snapshot One-process inventory + active sessions poll
|
|
266
266
|
|
|
267
267
|
Credentials:
|
|
@@ -726,10 +726,13 @@ function registerHqTombstoneCommand(p) {
|
|
|
726
726
|
}
|
|
727
727
|
/**
|
|
728
728
|
* Hidden `agents _internal <sub>` namespace for machine-to-machine calls that
|
|
729
|
-
* are not user-facing.
|
|
730
|
-
* hooks (git-guard, rm-guard, …)
|
|
731
|
-
* before they exit 2
|
|
732
|
-
* cannot emit in-process.
|
|
729
|
+
* are not user-facing. Subcommands:
|
|
730
|
+
* - `friction` — shell guard hooks (git-guard, rm-guard, …) self-report a
|
|
731
|
+
* block into the event log before they exit 2; they run before any
|
|
732
|
+
* `agents` process exists, so they cannot emit in-process.
|
|
733
|
+
* - `mergeable-prs` — the `pr-merge-on-green` built-in poll. Prints
|
|
734
|
+
* `owner/repo#n` for this user's CI-green, non-author-approved open PRs
|
|
735
|
+
* (cwd-independent `--repo`). Empty stdout is a silent observation.
|
|
733
736
|
*/
|
|
734
737
|
function registerInternalCommand(p) {
|
|
735
738
|
const internal = p.command('_internal', { hidden: true });
|
|
@@ -749,6 +752,21 @@ function registerInternalCommand(p) {
|
|
|
749
752
|
});
|
|
750
753
|
process.exit(0);
|
|
751
754
|
});
|
|
755
|
+
internal
|
|
756
|
+
.command('mergeable-prs')
|
|
757
|
+
.description('Print owner/repo#n for CI-green, non-author-approved open PRs (pr-merge-on-green poll)')
|
|
758
|
+
.action(async () => {
|
|
759
|
+
try {
|
|
760
|
+
const { listMergeableRefs } = await import('./lib/github/pr-mergeable.js');
|
|
761
|
+
const refs = await listMergeableRefs();
|
|
762
|
+
if (refs)
|
|
763
|
+
process.stdout.write(`${refs}\n`);
|
|
764
|
+
}
|
|
765
|
+
catch {
|
|
766
|
+
// Empty observation — never write stderr (command.ts would treat it
|
|
767
|
+
// as the poll result and fire `mode: every` on the error text).
|
|
768
|
+
}
|
|
769
|
+
});
|
|
752
770
|
}
|
|
753
771
|
/** Runtime action for the shared `agents upgrade [version]` command definition. */
|
|
754
772
|
async function runUpgrade(version, options) {
|
|
@@ -57,7 +57,6 @@ export declare const loadTrash: ModuleLoader;
|
|
|
57
57
|
export declare const loadRestore: ModuleLoader;
|
|
58
58
|
export declare const loadDoctor: ModuleLoader;
|
|
59
59
|
export declare const loadApply: ModuleLoader;
|
|
60
|
-
export declare const loadStatus: ModuleLoader;
|
|
61
60
|
export declare const loadRoute: ModuleLoader;
|
|
62
61
|
export declare const loadHarness: ModuleLoader;
|
|
63
62
|
export declare const loadSecrets: ModuleLoader;
|
|
@@ -70,7 +69,6 @@ export declare const loadUsage: ModuleLoader;
|
|
|
70
69
|
export declare const loadInsights: ModuleLoader;
|
|
71
70
|
export declare const loadPerf: ModuleLoader;
|
|
72
71
|
export declare const loadTrends: ModuleLoader;
|
|
73
|
-
export declare const loadAlias: ModuleLoader;
|
|
74
72
|
export declare const loadPty: ModuleLoader;
|
|
75
73
|
export declare const loadTmux: ModuleLoader;
|
|
76
74
|
export declare const loadWatchdog: ModuleLoader;
|
|
@@ -85,7 +83,6 @@ export declare const loadUninstall: ModuleLoader;
|
|
|
85
83
|
export declare const loadUpgrade: ModuleLoader;
|
|
86
84
|
export declare const loadSessions: ModuleLoader;
|
|
87
85
|
export declare const loadTeams: ModuleLoader;
|
|
88
|
-
export declare const loadTickets: ModuleLoader;
|
|
89
86
|
export declare const loadCloud: ModuleLoader;
|
|
90
87
|
export declare const loadMessage: ModuleLoader;
|
|
91
88
|
export declare const loadSend: ModuleLoader;
|
|
@@ -98,6 +95,8 @@ export declare const loadWebhooks: ModuleLoader;
|
|
|
98
95
|
export declare const loadHumans: ModuleLoader;
|
|
99
96
|
export declare const loadAccounts: ModuleLoader;
|
|
100
97
|
export declare const loadDaemon: ModuleLoader;
|
|
98
|
+
export declare const loadAuth: ModuleLoader;
|
|
99
|
+
export declare const loadOrg: ModuleLoader;
|
|
101
100
|
/**
|
|
102
101
|
* Commands whose modules pull in the SQLite-backed session/cloud stack. They are
|
|
103
102
|
* registered AFTER `applyGlobalHelpConventions` (mirroring main's order: help
|
|
@@ -59,7 +59,6 @@ export const loadTrash = async () => (await import('../commands/trash.js')).regi
|
|
|
59
59
|
export const loadRestore = async () => (await import('../commands/trash.js')).registerRestoreCommand;
|
|
60
60
|
export const loadDoctor = async () => (await import('../commands/doctor.js')).registerDoctorCommand;
|
|
61
61
|
export const loadApply = async () => (await import('../commands/apply.js')).registerApplyCommand;
|
|
62
|
-
export const loadStatus = async () => (await import('../commands/status.js')).registerStatusCommand;
|
|
63
62
|
export const loadRoute = async () => (await import('../commands/route.js')).registerRouteCommands;
|
|
64
63
|
export const loadHarness = async () => (await import('../commands/harness.js')).registerHarnessCommands;
|
|
65
64
|
export const loadSecrets = async () => (await import('../commands/secrets.js')).registerSecretsCommands;
|
|
@@ -73,7 +72,6 @@ export const loadInsights = async () => (await import('../commands/insights.js')
|
|
|
73
72
|
export const loadPerf = async () => (await import('../commands/perf.js')).registerPerfCommand;
|
|
74
73
|
// Thin deprecated alias of `agents insights mix` — no second mix implementation.
|
|
75
74
|
export const loadTrends = async () => (await import('../commands/trends.js')).registerTrendsCommand;
|
|
76
|
-
export const loadAlias = async () => (await import('../commands/alias.js')).registerAliasCommand;
|
|
77
75
|
export const loadPty = async () => (await import('../commands/pty.js')).registerPtyCommands;
|
|
78
76
|
export const loadTmux = async () => (await import('../commands/tmux.js')).registerTmuxCommands;
|
|
79
77
|
export const loadWatchdog = async () => (await import('../commands/watchdog.js')).registerWatchdogCommand;
|
|
@@ -88,7 +86,6 @@ export const loadUninstall = async () => (await import('../commands/uninstall.js
|
|
|
88
86
|
export const loadUpgrade = async () => (await import('../commands/upgrade.js')).registerUpgradeCommand;
|
|
89
87
|
export const loadSessions = async () => (await import('../commands/sessions.js')).registerSessionsCommands;
|
|
90
88
|
export const loadTeams = async () => (await import('../commands/teams.js')).registerTeamsCommands;
|
|
91
|
-
export const loadTickets = async () => (await import('../commands/tickets.js')).registerTicketsCommand;
|
|
92
89
|
export const loadCloud = async () => (await import('../commands/cloud.js')).registerCloudCommands;
|
|
93
90
|
export const loadMessage = async () => (await import('../commands/message.js')).registerMessageCommand;
|
|
94
91
|
export const loadSend = async () => (await import('../commands/send.js')).registerSendCommand;
|
|
@@ -103,6 +100,8 @@ export const loadWebhooks = async () => (await import('../commands/webhook.js'))
|
|
|
103
100
|
export const loadHumans = async () => (await import('../commands/humans.js')).registerHumansCommands;
|
|
104
101
|
export const loadAccounts = async () => (await import('../commands/accounts.js')).registerAccountsCommand;
|
|
105
102
|
export const loadDaemon = async () => (await import('../commands/daemon.js')).registerDaemonCommand;
|
|
103
|
+
export const loadAuth = async () => (await import('../commands/auth.js')).registerAuthCommand;
|
|
104
|
+
export const loadOrg = async () => (await import('../commands/org.js')).registerOrgCommand;
|
|
106
105
|
/**
|
|
107
106
|
* Commands whose modules pull in the SQLite-backed session/cloud stack. They are
|
|
108
107
|
* registered AFTER `applyGlobalHelpConventions` (mirroring main's order: help
|
|
@@ -135,6 +134,8 @@ export const LAZY_COMMAND_NAMES = new Set([
|
|
|
135
134
|
*/
|
|
136
135
|
export const COMMAND_LOADERS = {
|
|
137
136
|
accounts: [loadAccounts],
|
|
137
|
+
auth: [loadAuth],
|
|
138
|
+
org: [loadOrg],
|
|
138
139
|
view: [loadView],
|
|
139
140
|
inspect: [loadInspect],
|
|
140
141
|
feedback: [loadFeedback],
|
|
@@ -175,7 +176,6 @@ export const COMMAND_LOADERS = {
|
|
|
175
176
|
restore: [loadRestore],
|
|
176
177
|
doctor: [loadDoctor],
|
|
177
178
|
apply: [loadApply],
|
|
178
|
-
status: [loadStatus],
|
|
179
179
|
route: [loadRoute],
|
|
180
180
|
harness: [loadHarness],
|
|
181
181
|
harnesses: [loadHarness],
|
|
@@ -189,7 +189,6 @@ export const COMMAND_LOADERS = {
|
|
|
189
189
|
insights: [loadInsights],
|
|
190
190
|
perf: [loadPerf],
|
|
191
191
|
trends: [loadTrends],
|
|
192
|
-
alias: [loadAlias],
|
|
193
192
|
pty: [loadPty],
|
|
194
193
|
tmux: [loadTmux],
|
|
195
194
|
watchdog: [loadWatchdog],
|
|
@@ -212,14 +211,11 @@ export const COMMAND_LOADERS = {
|
|
|
212
211
|
upgrade: [loadUpgrade],
|
|
213
212
|
sessions: [loadSessions],
|
|
214
213
|
teams: [loadTeams],
|
|
215
|
-
tickets: [loadTickets],
|
|
216
214
|
cloud: [loadCloud],
|
|
217
215
|
message: [loadMessage],
|
|
218
216
|
send: [loadSend],
|
|
219
217
|
notify: [loadSend],
|
|
220
218
|
feed: [loadFeed],
|
|
221
|
-
// Observe-umbrella alias of feed (the `timeline` alias was removed in RUSH-2692).
|
|
222
|
-
inbox: [loadFeed],
|
|
223
219
|
mailboxes: [loadMailboxes],
|
|
224
220
|
mailbox: [loadMailboxes],
|
|
225
221
|
serve: [loadServe],
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
import type { AgentId } from '../lib/types.js';
|
|
3
3
|
import { type Profile } from '../lib/profiles.js';
|
|
4
|
+
import { type UnifiedAccount } from '../lib/account-registry.js';
|
|
5
|
+
export declare function nativeIdentityFromSource(raw: string): Promise<{
|
|
6
|
+
agent: AgentId;
|
|
7
|
+
version: string;
|
|
8
|
+
identityKey: string;
|
|
9
|
+
identityLabel?: string;
|
|
10
|
+
scope: 'version' | 'device';
|
|
11
|
+
}>;
|
|
4
12
|
type AttachTarget = {
|
|
5
13
|
kind: 'installation';
|
|
6
14
|
agent: AgentId;
|
|
@@ -22,5 +30,26 @@ export declare function parseBundleKey(raw: string): {
|
|
|
22
30
|
bundle: string;
|
|
23
31
|
key: string;
|
|
24
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* Named accounts that `set-default` / `switch` can pin for this harness —
|
|
35
|
+
* capped to the caller's plan tier (RUSH-2424). Downgrading never deletes a
|
|
36
|
+
* credential: an over-cap account simply falls out of this list (see
|
|
37
|
+
* {@link dormantAccountsForHarness}) and stops being a switch/rotation target
|
|
38
|
+
* until the plan is upgraded.
|
|
39
|
+
*/
|
|
40
|
+
export declare function listSwitchableAccounts(agent: AgentId): Promise<UnifiedAccount[]>;
|
|
41
|
+
/** Accounts registered for this harness beyond the plan's cap — kept, never deleted, excluded from switch/rotation, reactivated by an upgrade. */
|
|
42
|
+
export declare function dormantAccountsForHarness(agent: AgentId): Promise<UnifiedAccount[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Pin the per-harness default. Shared by `accounts set-default` and `accounts switch`.
|
|
45
|
+
* Provider accounts must authenticate the harness; native accounts must belong to it.
|
|
46
|
+
*/
|
|
47
|
+
export declare function setDefaultAccount(agentRaw: string, name: string): {
|
|
48
|
+
agent: AgentId;
|
|
49
|
+
account: UnifiedAccount;
|
|
50
|
+
};
|
|
51
|
+
export declare function runAccountsSwitch(harness: string, accountName: string | undefined, opts: {
|
|
52
|
+
json: boolean;
|
|
53
|
+
}): Promise<void>;
|
|
25
54
|
export declare function registerAccountsCommand(program: Command): void;
|
|
26
55
|
export {};
|