@phnx-labs/agents-cli 1.22.39 → 1.22.41
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 +316 -0
- package/README.md +116 -70
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.js +45 -27
- package/dist/browser.js +2 -2
- package/dist/cli/command-registry.d.ts +135 -0
- package/dist/cli/command-registry.js +259 -0
- package/dist/commands/accounts.d.ts +20 -0
- package/dist/commands/accounts.js +186 -25
- package/dist/commands/apply.d.ts +3 -3
- package/dist/commands/apply.js +20 -63
- package/dist/commands/browser.d.ts +15 -0
- package/dist/commands/browser.js +318 -131
- package/dist/commands/budget.d.ts +7 -6
- package/dist/commands/budget.js +8 -7
- package/dist/commands/cloud.js +17 -20
- package/dist/commands/commands.js +1 -1
- package/dist/commands/computer-actions.d.ts +1 -35
- package/dist/commands/computer-actions.js +13 -181
- package/dist/commands/computer.d.ts +28 -3
- package/dist/commands/computer.js +93 -65
- package/dist/commands/config.js +16 -3
- package/dist/commands/cost.d.ts +2 -1
- package/dist/commands/cost.js +7 -6
- package/dist/commands/daemon.js +151 -4
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +19 -11
- package/dist/commands/events.js +1 -1
- package/dist/commands/exec.d.ts +2 -50
- package/dist/commands/exec.js +160 -215
- package/dist/commands/factory.js +1 -1
- package/dist/commands/feed.d.ts +2 -2
- package/dist/commands/feed.js +12 -23
- package/dist/commands/fleet-capture.js +25 -27
- package/dist/commands/focus.d.ts +2 -3
- package/dist/commands/focus.js +34 -9
- package/dist/commands/go.js +15 -5
- package/dist/commands/harness.d.ts +3 -3
- package/dist/commands/harness.js +53 -5
- package/dist/commands/hooks.js +1 -1
- package/dist/commands/import.js +2 -2
- package/dist/commands/insights.d.ts +5 -5
- package/dist/commands/insights.js +15 -9
- package/dist/commands/inspect.d.ts +2 -3
- package/dist/commands/inspect.js +4 -16
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +9 -9
- package/dist/commands/mcp.js +2 -2
- package/dist/commands/memory.js +1 -1
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +7 -7
- package/dist/commands/mine.d.ts +11 -8
- package/dist/commands/mine.js +11 -10
- package/dist/commands/models.js +1 -1
- package/dist/commands/modes.js +1 -1
- package/dist/commands/monitors.js +23 -6
- package/dist/commands/output.d.ts +7 -6
- package/dist/commands/output.js +11 -10
- package/dist/commands/packages.js +4 -4
- package/dist/commands/perf.js +1 -1
- package/dist/commands/permissions.js +49 -32
- package/dist/commands/plugins.d.ts +1 -1
- package/dist/commands/plugins.js +3 -3
- package/dist/commands/profiles.d.ts +6 -9
- package/dist/commands/profiles.js +8 -321
- package/dist/commands/projects.d.ts +9 -0
- package/dist/commands/projects.js +140 -8
- package/dist/commands/prune.js +5 -13
- package/dist/commands/refresh-rules.js +1 -1
- package/dist/commands/repo.d.ts +5 -7
- package/dist/commands/repo.js +34 -18
- package/dist/commands/resource-view.js +4 -0
- package/dist/commands/resume.d.ts +11 -7
- package/dist/commands/resume.js +82 -98
- package/dist/commands/route.d.ts +12 -0
- package/dist/commands/route.js +261 -0
- package/dist/commands/routines.d.ts +2 -3
- package/dist/commands/routines.js +120 -145
- package/dist/commands/rules.js +1 -1
- package/dist/commands/run-account-picker.d.ts +1 -1
- package/dist/commands/run-account-picker.js +2 -2
- package/dist/commands/run-broadcast.d.ts +21 -0
- package/dist/commands/run-broadcast.js +89 -0
- package/dist/commands/run-cloud.js +1 -1
- package/dist/commands/secrets-vault.d.ts +10 -0
- package/dist/commands/{login.js → secrets-vault.js} +34 -14
- package/dist/commands/secrets.d.ts +4 -4
- package/dist/commands/secrets.js +158 -159
- package/dist/commands/sessions-backfill.js +1 -1
- package/dist/commands/sessions-browser.d.ts +1 -1
- package/dist/commands/sessions-browser.js +9 -5
- package/dist/commands/sessions-export.js +2 -2
- package/dist/commands/sessions-inject.js +4 -5
- package/dist/commands/sessions-migrate.js +16 -27
- package/dist/commands/sessions-picker.d.ts +14 -0
- package/dist/commands/sessions-picker.js +209 -13
- package/dist/commands/sessions-resume.d.ts +7 -3
- package/dist/commands/sessions-resume.js +81 -33
- package/dist/commands/sessions-share.d.ts +25 -0
- package/dist/commands/sessions-share.js +166 -0
- package/dist/commands/sessions-stats.js +2 -2
- package/dist/commands/sessions.d.ts +75 -68
- package/dist/commands/sessions.js +144 -180
- package/dist/commands/setup-browser.js +1 -1
- package/dist/commands/setup-computer.js +1 -1
- package/dist/commands/setup-fleet.js +3 -0
- package/dist/commands/setup-mine.d.ts +7 -3
- package/dist/commands/setup-mine.js +13 -8
- package/dist/commands/setup-preferences.js +2 -2
- package/dist/commands/setup-secrets.js +2 -2
- package/dist/commands/setup-watchdog.js +2 -2
- package/dist/commands/setup.js +7 -2
- package/dist/commands/share.d.ts +65 -0
- package/dist/commands/share.js +253 -20
- package/dist/commands/skills.js +3 -3
- package/dist/commands/snapshot.d.ts +2 -2
- package/dist/commands/snapshot.js +9 -9
- package/dist/commands/ssh.d.ts +1 -1
- package/dist/commands/ssh.js +186 -64
- package/dist/commands/subagents.js +1 -1
- package/dist/commands/sync.js +24 -9
- package/dist/commands/teams.d.ts +2 -2
- package/dist/commands/teams.js +9 -18
- package/dist/commands/tmux.js +5 -1
- package/dist/commands/trash.js +1 -1
- package/dist/commands/usage.d.ts +1 -1
- package/dist/commands/usage.js +2 -2
- package/dist/commands/utils.d.ts +4 -14
- package/dist/commands/utils.js +6 -27
- package/dist/commands/versions.js +2 -2
- package/dist/commands/view.d.ts +9 -77
- package/dist/commands/view.js +23 -8
- package/dist/commands/watchdog.js +1 -1
- package/dist/commands/webhook.js +25 -34
- package/dist/commands/workflows.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/account-capabilities.d.ts +39 -0
- package/dist/lib/account-capabilities.js +59 -0
- package/dist/lib/account-catalog.js +1 -1
- package/dist/lib/account-registry.d.ts +66 -0
- package/dist/lib/account-registry.js +151 -5
- package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
- package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
- package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
- package/dist/lib/{usage.js → accounting/usage.js} +11 -11
- package/dist/lib/agent-spec/provider.js +1 -1
- package/dist/lib/agents.d.ts +72 -4
- package/dist/lib/agents.js +231 -199
- package/dist/lib/answer-router.d.ts +2 -2
- package/dist/lib/ask-classifier.d.ts +1 -1
- package/dist/lib/ask-classifier.js +1 -1
- package/dist/lib/audit/log.js +1 -1
- package/dist/lib/auth-health.d.ts +1 -1
- package/dist/lib/auth-health.js +2 -2
- package/dist/lib/brand.js +1 -1
- package/dist/lib/browser/caller-identity.d.ts +28 -0
- package/dist/lib/browser/caller-identity.js +156 -0
- package/dist/lib/browser/cdp.js +5 -1
- package/dist/lib/browser/chrome.js +12 -1
- package/dist/lib/browser/drivers/ssh.d.ts +1 -1
- package/dist/lib/browser/drivers/ssh.js +3 -2
- package/dist/lib/browser/hygiene.d.ts +10 -2
- package/dist/lib/browser/hygiene.js +7 -4
- package/dist/lib/browser/ipc.d.ts +22 -2
- package/dist/lib/browser/ipc.js +185 -21
- package/dist/lib/browser/profiles.d.ts +69 -5
- package/dist/lib/browser/profiles.js +135 -13
- package/dist/lib/browser/remote-control.d.ts +2 -2
- package/dist/lib/browser/remote-control.js +3 -3
- package/dist/lib/browser/runtime-state.d.ts +79 -0
- package/dist/lib/browser/runtime-state.js +119 -1
- package/dist/lib/browser/service.d.ts +137 -2
- package/dist/lib/browser/service.js +492 -54
- package/dist/lib/browser/sessions-list.d.ts +2 -1
- package/dist/lib/browser/sessions-list.js +4 -13
- package/dist/lib/browser/types.d.ts +19 -1
- package/dist/lib/budget/config.js +1 -1
- package/dist/lib/budget/ledger.js +1 -1
- package/dist/lib/byok-usage.js +1 -1
- package/dist/lib/capabilities.js +3 -15
- package/dist/lib/catchup.d.ts +1 -1
- package/dist/lib/catchup.js +1 -1
- package/dist/lib/cloud/dispatch.js +1 -1
- package/dist/lib/cloud/host.d.ts +3 -3
- package/dist/lib/cloud/host.js +5 -5
- package/dist/lib/cloud/rush.d.ts +9 -21
- package/dist/lib/cloud/rush.js +33 -120
- package/dist/lib/cloud/types.d.ts +2 -2
- package/dist/lib/commands.js +3 -13
- package/dist/lib/computer/actions.d.ts +36 -0
- package/dist/lib/computer/actions.js +162 -0
- package/dist/lib/computer/dispatch.d.ts +2 -2
- package/dist/lib/computer/dispatch.js +2 -2
- package/dist/lib/computer/sessions-list.d.ts +3 -3
- package/dist/lib/computer/sessions-list.js +2 -2
- package/dist/lib/config-keys.d.ts +2 -1
- package/dist/lib/config-keys.js +8 -4
- package/dist/lib/config-machine-keys.d.ts +4 -2
- package/dist/lib/config-machine-keys.js +5 -2
- package/dist/lib/crabbox/lease.js +9 -1
- package/dist/lib/crabbox/runtimes.d.ts +32 -7
- package/dist/lib/crabbox/runtimes.js +72 -30
- package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
- package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
- package/dist/lib/daemon-services.d.ts +1 -1
- package/dist/lib/daemon-services.js +5 -0
- package/dist/lib/daemon-ticks.d.ts +25 -0
- package/dist/lib/daemon-ticks.js +31 -1
- package/dist/lib/daemon-webhooks.d.ts +104 -0
- package/dist/lib/daemon-webhooks.js +215 -0
- package/dist/lib/device-config.d.ts +85 -75
- package/dist/lib/device-config.js +280 -142
- package/dist/lib/devices/config-migration.d.ts +29 -34
- package/dist/lib/devices/config-migration.js +209 -130
- package/dist/lib/devices/connect.d.ts +2 -2
- package/dist/lib/devices/connect.js +2 -2
- package/dist/lib/devices/discovery-policy.d.ts +30 -0
- package/dist/lib/devices/discovery-policy.js +101 -0
- package/dist/lib/devices/fleet-inventory.js +8 -3
- package/dist/lib/devices/harness-inventory.d.ts +1 -1
- package/dist/lib/devices/harness-inventory.js +12 -3
- package/dist/lib/devices/known-hosts.js +1 -1
- package/dist/lib/devices/pool.d.ts +10 -5
- package/dist/lib/devices/pool.js +5 -7
- package/dist/lib/devices/registry.d.ts +1 -1
- package/dist/lib/devices/registry.js +1 -1
- package/dist/lib/devices/resolve-profile.d.ts +2 -2
- package/dist/lib/devices/resolve-profile.js +2 -2
- package/dist/lib/devices/resolve-target.d.ts +1 -1
- package/dist/lib/devices/resolve-target.js +4 -4
- package/dist/lib/devices/self-host.d.ts +1 -1
- package/dist/lib/devices/self-host.js +3 -3
- package/dist/lib/devices/ssh-config.d.ts +1 -1
- package/dist/lib/devices/stats-cache.js +1 -1
- package/dist/lib/devices/sync.d.ts +3 -1
- package/dist/lib/devices/sync.js +3 -3
- package/dist/lib/doctor-diff.js +4 -4
- package/dist/lib/drift-sync.js +2 -2
- package/dist/lib/drift.js +2 -2
- package/dist/lib/event-families.d.ts +1 -1
- package/dist/lib/event-stream.d.ts +1 -1
- package/dist/lib/event-stream.js +2 -2
- package/dist/lib/events-ingest.js +2 -2
- package/dist/lib/exec.d.ts +4 -4
- package/dist/lib/exec.js +11 -11
- package/dist/lib/factory/snapshot.d.ts +1 -1
- package/dist/lib/factory/snapshot.js +1 -1
- package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
- package/dist/lib/{activity.js → feed/activity.js} +7 -7
- package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
- package/dist/lib/{events.js → feed/events.js} +5 -5
- package/dist/lib/{feed.js → feed/feed.js} +4 -4
- package/dist/lib/feed-outcome.d.ts +1 -1
- package/dist/lib/feed-policy.d.ts +1 -1
- package/dist/lib/feed-policy.js +1 -1
- package/dist/lib/feed-post.d.ts +1 -1
- package/dist/lib/feed-post.js +1 -1
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -6
- package/dist/lib/fleet/apply.js +18 -45
- package/dist/lib/fleet/auth-sync.d.ts +16 -35
- package/dist/lib/fleet/auth-sync.js +16 -75
- package/dist/lib/fleet/capture.js +8 -6
- package/dist/lib/fleet/manifest.js +23 -11
- package/dist/lib/fleet/types.d.ts +19 -7
- package/dist/lib/fleet-cache.d.ts +1 -1
- package/dist/lib/fleet-cache.js +1 -1
- package/dist/lib/format.d.ts +19 -0
- package/dist/lib/format.js +44 -1
- package/dist/lib/friction-heuristics.d.ts +1 -1
- package/dist/lib/git.d.ts +24 -1
- package/dist/lib/git.js +82 -38
- package/dist/lib/heal.js +3 -3
- package/dist/lib/hooks.d.ts +18 -0
- package/dist/lib/hooks.js +113 -1
- package/dist/lib/hosts/credentials.d.ts +30 -10
- package/dist/lib/hosts/credentials.js +38 -26
- package/dist/lib/hosts/dispatch.d.ts +3 -3
- package/dist/lib/hosts/dispatch.js +3 -3
- package/dist/lib/hosts/option.d.ts +3 -3
- package/dist/lib/hosts/option.js +7 -8
- package/dist/lib/hosts/passthrough.d.ts +17 -17
- package/dist/lib/hosts/passthrough.js +67 -50
- package/dist/lib/hosts/providers/devices.d.ts +1 -1
- package/dist/lib/hosts/providers/devices.js +1 -1
- package/dist/lib/hosts/reconcile.d.ts +1 -1
- package/dist/lib/hosts/reconcile.js +1 -1
- package/dist/lib/hosts/reconnect.d.ts +1 -1
- package/dist/lib/hosts/reconnect.js +2 -2
- package/dist/lib/hosts/registry.d.ts +5 -5
- package/dist/lib/hosts/registry.js +5 -5
- package/dist/lib/hosts/remote-cmd.d.ts +10 -10
- package/dist/lib/hosts/remote-cmd.js +25 -18
- package/dist/lib/hosts/remote-os.d.ts +4 -4
- package/dist/lib/hosts/remote-os.js +4 -4
- package/dist/lib/hosts/remote-session-id.d.ts +2 -2
- package/dist/lib/hosts/remote-session-id.js +2 -2
- package/dist/lib/hosts/routing-flag.d.ts +3 -3
- package/dist/lib/hosts/routing-flag.js +4 -5
- package/dist/lib/hosts/run-target.d.ts +4 -4
- package/dist/lib/hosts/run-target.js +4 -4
- package/dist/lib/hosts/session-index.d.ts +2 -2
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/session-marker.d.ts +1 -1
- package/dist/lib/hosts/session-marker.js +1 -1
- package/dist/lib/hosts/types.d.ts +2 -2
- package/dist/lib/hosts/types.js +2 -2
- package/dist/lib/import.js +1 -1
- package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +13 -1
- package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
- package/dist/lib/installations/resolve.js +1 -1
- package/dist/lib/installations/strategies.js +1 -1
- package/dist/lib/installations/update.js +2 -2
- package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
- package/dist/lib/{versions.js → installations/versions.js} +51 -31
- package/dist/lib/isolation-boundary-report.js +1 -1
- package/dist/lib/linear-projects.d.ts +28 -0
- package/dist/lib/linear-projects.js +30 -0
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-gc.js +1 -1
- package/dist/lib/mailbox.js +1 -1
- package/dist/lib/mcp-registry.d.ts +62 -0
- package/dist/lib/mcp-registry.js +177 -0
- package/dist/lib/mcp.d.ts +5 -0
- package/dist/lib/mcp.js +124 -307
- 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.d.ts +7 -0
- package/dist/lib/menubar/install-menubar.js +24 -6
- package/dist/lib/menubar/snapshot.d.ts +7 -0
- package/dist/lib/menubar/snapshot.js +8 -6
- package/dist/lib/models.js +1 -1
- package/dist/lib/monitors/config.d.ts +12 -0
- package/dist/lib/monitors/config.js +3 -0
- package/dist/lib/monitors/dispatch.js +26 -5
- package/dist/lib/monitors/engine.js +10 -0
- package/dist/lib/monitors/sources/webhook.d.ts +1 -1
- package/dist/lib/monitors/state.d.ts +42 -0
- package/dist/lib/monitors/state.js +30 -0
- package/dist/lib/notify.d.ts +1 -1
- package/dist/lib/observe-aliases.d.ts +3 -3
- package/dist/lib/observe-aliases.js +3 -21
- package/dist/lib/output/git-output.js +2 -2
- package/dist/lib/overdue.d.ts +1 -1
- package/dist/lib/overdue.js +1 -1
- package/dist/lib/permissions-registry.d.ts +65 -0
- package/dist/lib/permissions-registry.js +599 -0
- package/dist/lib/permissions.d.ts +24 -13
- package/dist/lib/permissions.js +52 -271
- package/dist/lib/picker.d.ts +16 -0
- package/dist/lib/picker.js +33 -3
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +4 -4
- package/dist/lib/platform/paths.d.ts +8 -0
- package/dist/lib/platform/paths.js +11 -0
- package/dist/lib/platform/posixpath.js +3 -3
- package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
- package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
- package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
- package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
- package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
- package/dist/lib/{skills.js → plugins/skills.js} +7 -7
- package/dist/lib/pricing/cost.d.ts +1 -1
- package/dist/lib/pricing/cost.js +1 -1
- package/dist/lib/profiles-presets.d.ts +1 -1
- package/dist/lib/profiles-presets.js +1 -1
- package/dist/lib/profiles.js +2 -2
- package/dist/lib/project-import.js +4 -1
- package/dist/lib/project-key.js +7 -0
- package/dist/lib/project-launch.d.ts +1 -1
- package/dist/lib/project-launch.js +3 -3
- package/dist/lib/project-pull.d.ts +128 -0
- package/dist/lib/project-pull.js +384 -0
- package/dist/lib/project-root.d.ts +2 -2
- package/dist/lib/project-root.js +2 -2
- package/dist/lib/project-status.js +1 -1
- package/dist/lib/projects.d.ts +23 -0
- package/dist/lib/projects.js +29 -6
- package/dist/lib/refresh.d.ts +12 -1
- package/dist/lib/refresh.js +16 -9
- package/dist/lib/registry.d.ts +9 -2
- package/dist/lib/registry.js +11 -4
- package/dist/lib/resources.d.ts +2 -2
- package/dist/lib/resources.js +2 -2
- package/dist/lib/routers.d.ts +81 -0
- package/dist/lib/routers.js +153 -0
- package/dist/lib/routine-context.d.ts +1 -0
- package/dist/lib/routine-context.js +7 -2
- package/dist/lib/routine-notify-owner.d.ts +1 -1
- package/dist/lib/routine-notify.d.ts +1 -1
- package/dist/lib/routine-notify.js +1 -1
- package/dist/lib/routine-process-cleanup.d.ts +1 -1
- package/dist/lib/routine-readiness.d.ts +1 -1
- package/dist/lib/routine-readiness.js +11 -4
- package/dist/lib/routines-placement.d.ts +12 -2
- package/dist/lib/routines-placement.js +20 -3
- package/dist/lib/routines-project.d.ts +1 -1
- package/dist/lib/routines-project.js +1 -1
- package/dist/lib/rules/compile.d.ts +1 -0
- package/dist/lib/rules/compile.js +10 -2
- package/dist/lib/rules/rules.js +1 -1
- package/dist/lib/run-notify.js +1 -1
- package/dist/lib/runner.d.ts +80 -2
- package/dist/lib/runner.js +261 -67
- package/dist/lib/sandbox.d.ts +1 -1
- package/dist/lib/scheduler.d.ts +1 -1
- package/dist/lib/scheduler.js +1 -1
- package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
- package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
- 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 +2 -2
- package/dist/lib/secrets/audit.js +1 -1
- package/dist/lib/secrets/bundles.d.ts +4 -4
- package/dist/lib/secrets/bundles.js +8 -8
- package/dist/lib/secrets/headless.d.ts +16 -0
- package/dist/lib/secrets/headless.js +21 -0
- package/dist/lib/secrets/index.js +1 -1
- package/dist/lib/secrets/list-filter.d.ts +1 -1
- package/dist/lib/secrets/list-filter.js +2 -2
- package/dist/lib/secrets/push.d.ts +1 -1
- package/dist/lib/secrets/push.js +10 -12
- package/dist/lib/secrets/remote.d.ts +21 -17
- package/dist/lib/secrets/remote.js +39 -23
- package/dist/lib/secrets/vault.js +2 -2
- package/dist/lib/self-heal/checks/shadowing.js +1 -1
- package/dist/lib/self-heal/checks/shims.js +1 -1
- package/dist/lib/self-update.d.ts +39 -4
- package/dist/lib/self-update.js +78 -25
- package/dist/lib/serve/control.d.ts +1 -1
- package/dist/lib/serve/control.js +4 -4
- package/dist/lib/serve/data.d.ts +1 -1
- package/dist/lib/serve/data.js +1 -1
- package/dist/lib/serve/stream.js +1 -1
- package/dist/lib/service-manifest.d.ts +29 -0
- package/dist/lib/service-manifest.js +80 -0
- package/dist/lib/session/active.d.ts +59 -7
- package/dist/lib/session/active.js +158 -17
- package/dist/lib/session/bash-command.js +1 -1
- package/dist/lib/session/claude-accounts.d.ts +1 -1
- package/dist/lib/session/claude-accounts.js +1 -1
- package/dist/lib/session/db.d.ts +10 -2
- package/dist/lib/session/db.js +25 -6
- package/dist/lib/session/discover.d.ts +77 -0
- package/dist/lib/session/discover.js +130 -25
- package/dist/lib/session/fork.js +1 -1
- package/dist/lib/session/inject.d.ts +1 -1
- package/dist/lib/session/insights.d.ts +1 -1
- package/dist/lib/session/insights.js +1 -1
- package/dist/lib/session/live-metadata.d.ts +15 -0
- package/dist/lib/session/live-metadata.js +76 -0
- package/dist/lib/session/migrate-targets.d.ts +1 -1
- package/dist/lib/session/recovery.d.ts +1 -1
- package/dist/lib/session/recovery.js +2 -2
- package/dist/lib/session/remote-active.d.ts +10 -1
- package/dist/lib/session/remote-active.js +8 -3
- package/dist/lib/session/remote-bundle.d.ts +1 -1
- package/dist/lib/session/remote-bundle.js +2 -2
- package/dist/lib/session/remote-list.d.ts +15 -4
- package/dist/lib/session/remote-list.js +40 -3
- package/dist/lib/session/remote.d.ts +5 -5
- package/dist/lib/session/remote.js +13 -17
- package/dist/lib/session/resume-command.d.ts +3 -2
- package/dist/lib/session/resume-command.js +4 -3
- package/dist/lib/session/resume-owner.d.ts +3 -3
- package/dist/lib/session/resume-owner.js +3 -3
- package/dist/lib/session/session-cache.d.ts +12 -0
- package/dist/lib/session/session-cache.js +2 -0
- package/dist/lib/session/share-html.d.ts +55 -0
- package/dist/lib/session/share-html.js +319 -0
- package/dist/lib/session/shell-programs.js +1 -1
- package/dist/lib/session/state.js +5 -5
- package/dist/lib/session/team-filter.d.ts +1 -1
- package/dist/lib/session/team-filter.js +1 -1
- package/dist/lib/session/types.d.ts +3 -3
- package/dist/lib/session/width.d.ts +2 -2
- package/dist/lib/session/width.js +2 -2
- package/dist/lib/settings-manifest.d.ts +2 -0
- package/dist/lib/settings-manifest.js +81 -3
- package/dist/lib/share/delete.d.ts +21 -0
- package/dist/lib/share/delete.js +42 -0
- package/dist/lib/share/publish.d.ts +120 -0
- package/dist/lib/share/publish.js +243 -18
- package/dist/lib/share/worker-template.js +172 -9
- package/dist/lib/shims.js +35 -7
- package/dist/lib/smart-launch.d.ts +4 -4
- package/dist/lib/smart-launch.js +6 -4
- package/dist/lib/snapshot.d.ts +4 -4
- package/dist/lib/snapshot.js +2 -2
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +2 -2
- package/dist/lib/ssh-tunnel.d.ts +10 -10
- package/dist/lib/ssh-tunnel.js +12 -12
- package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
- package/dist/lib/staleness/checkers/hooks.js +1 -1
- package/dist/lib/staleness/detectors/permissions.js +0 -23
- package/dist/lib/staleness/detectors/plugins.js +1 -1
- package/dist/lib/staleness/fingerprint.js +1 -1
- package/dist/lib/staleness/layers.d.ts +1 -1
- package/dist/lib/staleness/layers.js +1 -1
- package/dist/lib/staleness/writers/mcp.js +3 -1
- package/dist/lib/staleness/writers/plugins.js +1 -1
- package/dist/lib/staleness/writers/types.d.ts +8 -0
- package/dist/lib/startup/command-registry.d.ts +6 -147
- package/dist/lib/startup/command-registry.js +40 -303
- package/dist/lib/startup/dev-build.d.ts +0 -21
- package/dist/lib/startup/dev-build.js +29 -8
- package/dist/lib/state.d.ts +19 -1
- package/dist/lib/state.js +120 -51
- package/dist/lib/subagents.js +1 -1
- package/dist/lib/sync-status.js +1 -1
- package/dist/lib/sync-umbrella.d.ts +6 -1
- package/dist/lib/sync-umbrella.js +9 -4
- package/dist/lib/teams/agents.js +2 -2
- package/dist/lib/teams/registry.js +1 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
- package/dist/lib/terminal/engine.js +1 -1
- package/dist/lib/terminal/index.d.ts +4 -0
- package/dist/lib/terminal/index.js +3 -0
- package/dist/lib/terminal/inject.d.ts +2 -2
- package/dist/lib/terminal/inject.js +2 -2
- package/dist/lib/terminal/transport.js +1 -1
- package/dist/lib/tmux/index.d.ts +1 -1
- package/dist/lib/tmux/index.js +1 -1
- package/dist/lib/tmux/session.d.ts +21 -5
- package/dist/lib/tmux/session.js +76 -22
- package/dist/lib/triggers/handlers.d.ts +38 -3
- package/dist/lib/triggers/handlers.js +58 -7
- package/dist/lib/triggers/webhook.d.ts +113 -5
- package/dist/lib/triggers/webhook.js +223 -44
- package/dist/lib/types.d.ts +19 -7
- package/dist/lib/usage-fleet.d.ts +1 -1
- package/dist/lib/usage-fleet.js +1 -1
- package/dist/lib/usage-refresh.d.ts +1 -1
- package/dist/lib/usage-refresh.js +3 -3
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/view-types.d.ts +56 -0
- package/dist/lib/view-types.js +1 -0
- package/dist/lib/watchdog/rotate.d.ts +2 -2
- package/dist/lib/watchdog/rotate.js +3 -3
- package/dist/lib/watchdog/runner.d.ts +2 -3
- package/dist/lib/watchdog/runner.js +3 -4
- package/dist/lib/workflows.js +1 -1
- package/dist/lib/wrap.d.ts +33 -0
- package/dist/lib/wrap.js +70 -0
- package/package.json +2 -1
- package/scripts/postinstall.js +2 -2
- package/dist/commands/bench.d.ts +0 -2
- package/dist/commands/bench.js +0 -101
- package/dist/commands/cp.d.ts +0 -84
- package/dist/commands/cp.js +0 -231
- package/dist/commands/login.d.ts +0 -2
- package/dist/lib/resources/commands.d.ts +0 -46
- package/dist/lib/resources/commands.js +0 -211
- package/dist/lib/resources/hooks.d.ts +0 -16
- package/dist/lib/resources/hooks.js +0 -153
- package/dist/lib/resources/mcp.d.ts +0 -34
- package/dist/lib/resources/mcp.js +0 -250
- package/dist/lib/resources/memory.d.ts +0 -15
- package/dist/lib/resources/memory.js +0 -46
- package/dist/lib/resources/permissions.d.ts +0 -13
- package/dist/lib/resources/permissions.js +0 -202
- package/dist/lib/resources/rules.d.ts +0 -46
- package/dist/lib/resources/rules.js +0 -179
- package/dist/lib/resources/skills.d.ts +0 -37
- package/dist/lib/resources/skills.js +0 -247
- package/dist/lib/resources/subagents.d.ts +0 -46
- package/dist/lib/resources/subagents.js +0 -202
- /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
package/dist/bootstrap.js
CHANGED
|
@@ -53,18 +53,18 @@ if (IS_DEV_BUILD) {
|
|
|
53
53
|
// Command registration is lazy: instead of statically importing every command
|
|
54
54
|
// module on each invocation (which loaded the whole ~50-module tree before the
|
|
55
55
|
// first byte of output), the registry maps a command name to a thunk that
|
|
56
|
-
// imports only what that command needs. See src/
|
|
56
|
+
// imports only what that command needs. See src/cli/command-registry.ts.
|
|
57
57
|
// Individual load* registrars are not imported here — registerEagerForRequest
|
|
58
58
|
// and the lazy path pull them via COMMAND_LOADERS. The full-tree
|
|
59
59
|
// registerAllEagerCommands path was removed (RUSH-2329): unknown/typo commands
|
|
60
60
|
// spellcheck against KNOWN_TOP_LEVEL_COMMANDS and register only the corrected
|
|
61
61
|
// name.
|
|
62
|
-
import { COMMAND_LOADERS, LAZY_COMMAND_NAMES, KNOWN_TOP_LEVEL_COMMANDS, RETIRED_TOP_LEVEL_COMMANDS, } from './
|
|
62
|
+
import { COMMAND_LOADERS, LAZY_COMMAND_NAMES, KNOWN_TOP_LEVEL_COMMANDS, RETIRED_TOP_LEVEL_COMMANDS, } from './cli/command-registry.js';
|
|
63
63
|
import { closestTopLevelCommand } from './lib/startup/spellcheck.js';
|
|
64
64
|
import { applyGlobalHelpConventions } from './lib/help.js';
|
|
65
65
|
import { renderWhatsNew } from './lib/whats-new.js';
|
|
66
66
|
import { getCliLaunch } from './lib/cli-entry.js';
|
|
67
|
-
import { emit, emitFriction, redactArgs } from './lib/events.js';
|
|
67
|
+
import { emit, emitFriction, redactArgs } from './lib/feed/events.js';
|
|
68
68
|
import { stampProvenance } from './lib/event-provenance.js';
|
|
69
69
|
import { die } from './lib/format.js';
|
|
70
70
|
// Leaf (zero imports). Gates the dynamic passthrough import so the ~187ms
|
|
@@ -244,7 +244,7 @@ Packages:
|
|
|
244
244
|
|
|
245
245
|
Run and dispatch:
|
|
246
246
|
run <agent|profile> [prompt] Run an agent. Omit prompt for interactive mode.
|
|
247
|
-
config Configure run defaults, project root, and
|
|
247
|
+
config Configure run defaults, project root, device options, and spend caps (config budget)
|
|
248
248
|
teams Coordinate multiple agents on shared work
|
|
249
249
|
routines Run agents on a cron schedule (scheduler auto-starts)
|
|
250
250
|
daemon Runtime status/control for the always-on daemon (secrets broker, browser IPC, scheduler)
|
|
@@ -258,22 +258,21 @@ Run and dispatch:
|
|
|
258
258
|
|
|
259
259
|
Observe (read the fleet — no store merge; aliases point at the real readers):
|
|
260
260
|
feed / inbox Needs-you inbox (open blocks waiting on you)
|
|
261
|
-
|
|
262
|
-
roster Live agents (= sessions --active)
|
|
261
|
+
sessions --active Live agents (who is running right now)
|
|
263
262
|
events Unified ops + activity event trail
|
|
264
263
|
audit Tamper-evident run-dispatch log (not events)
|
|
265
|
-
snapshot One-process inventory + active sessions poll
|
|
266
264
|
status Sync/drift only (not the live fleet snapshot)
|
|
265
|
+
devices snapshot One-process inventory + active sessions poll
|
|
267
266
|
|
|
268
|
-
Credentials
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
267
|
+
Credentials:
|
|
268
|
+
harness Custom (host CLI + model + auth) harnesses; replaces former profiles command
|
|
269
|
+
secrets Keychain-backed env bundles; synced vault: secrets vault unlock|lock
|
|
270
|
+
accounts Provider credentials + native OAuth logout
|
|
272
271
|
|
|
273
272
|
Diagnostics:
|
|
274
273
|
doctor [agent[@version]] Diagnose CLI availability, sync status, and resource divergence; --check for the CI drift gate
|
|
275
274
|
usage [agent] Show rate-limit and quota usage per agent
|
|
276
|
-
insights How work looks — behaviour (default)
|
|
275
|
+
insights How work looks — behaviour (default), mix, cost, and output
|
|
277
276
|
perf Latency rollups (hooks, commands, runs) from the disposable perf warehouse
|
|
278
277
|
|
|
279
278
|
Config sync:
|
|
@@ -337,7 +336,7 @@ async function showWhatsNew(fromVersion, toVersion) {
|
|
|
337
336
|
const UPDATE_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
338
337
|
import { getUpdateCheckPath, getMigratedSentinelPath, getUserAgentsDir, getRuntimeStateDir } from './lib/state.js';
|
|
339
338
|
import { resolveBrandName, disabledCommandsForActiveBrand } from './lib/brand.js';
|
|
340
|
-
import { readUpdateCache, saveUpdateCheck, dismissUpdateVersion, shouldPromptUpgrade, resolveMultiInstallInventory, remediateStaleAgentsCliInstalls, resolveRunningPackageRoot, } from './lib/self-update.js';
|
|
339
|
+
import { readUpdateCache, saveUpdateCheck, dismissUpdateVersion, shouldPromptUpgrade, resolveMultiInstallInventory, remediateStaleAgentsCliInstalls, resolveRunningPackageRoot, manualUninstallCommand, } from './lib/self-update.js';
|
|
341
340
|
const UPDATE_CHECK_FILE = getUpdateCheckPath();
|
|
342
341
|
// Beside the existing update-check cache (RUSH-2324): short-TTL memo of the
|
|
343
342
|
// multi-install PATH scan so every ordinary CLI invocation does not re-walk
|
|
@@ -386,7 +385,19 @@ function maybeWarnMultiInstall() {
|
|
|
386
385
|
for (const info of inventory) {
|
|
387
386
|
console.error(chalk.gray(` ${info.packageRoot} ${info.version} (${info.note})`));
|
|
388
387
|
}
|
|
389
|
-
|
|
388
|
+
// RUSH-2705/2713: only advertise `agents doctor --fix` for copies it will
|
|
389
|
+
// really delete. A duplicate --fix won't auto-purge (a healthy >=1.22.30 peer,
|
|
390
|
+
// OR a pre-1.22.30 copy left alone only because no fixed peer exists — the
|
|
391
|
+
// latter is genuinely vulnerable, not healthy) makes --fix a remedy that
|
|
392
|
+
// no-ops forever — name the manual removal command instead.
|
|
393
|
+
const peers = inventory.filter((info) => !info.running);
|
|
394
|
+
console.error(chalk.gray('Upgrades apply to the running copy.'));
|
|
395
|
+
if (peers.some((info) => info.autoPurgeable)) {
|
|
396
|
+
console.error(chalk.gray('Purge npx-cache / legacy / pre-1.22.30 copies with: agents doctor --fix'));
|
|
397
|
+
}
|
|
398
|
+
for (const peer of peers.filter((info) => !info.autoPurgeable)) {
|
|
399
|
+
console.error(chalk.gray(`Remove the ${peer.version} copy at ${peer.packageRoot} with: ${manualUninstallCommand(peer.packageRoot)}`));
|
|
400
|
+
}
|
|
390
401
|
try {
|
|
391
402
|
fs.mkdirSync(path.dirname(sentinel), { recursive: true });
|
|
392
403
|
fs.writeFileSync(sentinel, key);
|
|
@@ -789,6 +800,13 @@ async function runUpgrade(version, options) {
|
|
|
789
800
|
if (purge.failed.length > 0) {
|
|
790
801
|
console.log(chalk.yellow(`Could not purge ${purge.failed.length} stale install${purge.failed.length === 1 ? '' : 's'}; re-run agents doctor --fix.`));
|
|
791
802
|
}
|
|
803
|
+
// RUSH-2705/2713: duplicates --fix won't auto-purge (a healthy
|
|
804
|
+
// >=1.22.30 peer, or a pre-1.22.30 copy with no fixed peer to fall back
|
|
805
|
+
// to — not healthy) — name the command that removes them instead of
|
|
806
|
+
// leaving a silent nag behind.
|
|
807
|
+
for (const u of purge.unresolved) {
|
|
808
|
+
console.log(chalk.gray(`Duplicate ${u.version} at ${u.packageRoot} left in place; remove it with: ${u.manualRemoveCommand}`));
|
|
809
|
+
}
|
|
792
810
|
}
|
|
793
811
|
catch {
|
|
794
812
|
/* best-effort; upgrade already succeeded */
|
|
@@ -879,14 +897,14 @@ program.on('command:*', (operands) => {
|
|
|
879
897
|
if (minDist === 1 && closest && !RETIRED_TOP_LEVEL_COMMANDS.has(unknown)) {
|
|
880
898
|
const args = process.argv.slice(2);
|
|
881
899
|
args[0] = closest;
|
|
882
|
-
// The typo'd name was unknown, so the top-level --
|
|
900
|
+
// The typo'd name was unknown, so the top-level --device router (which ran
|
|
883
901
|
// before commander parsing, against the ORIGINAL name) could not have
|
|
884
902
|
// routed it - it correctly fell through to reach this handler at all
|
|
885
903
|
// (that fallthrough is this ticket's own fix). But falling through to a
|
|
886
904
|
// plain local re-parse means a routing flag on a corrected REAL
|
|
887
|
-
// host-routable command (e.g. `docto --
|
|
905
|
+
// host-routable command (e.g. `docto --device box`, corrected to `doctor`)
|
|
888
906
|
// silently ran LOCALLY instead of remotely, with no error - worse than
|
|
889
|
-
// the loud "does not support --
|
|
907
|
+
// the loud "does not support --device" this ticket replaced. Re-run the
|
|
890
908
|
// router with the CORRECTED name before falling through to local parse;
|
|
891
909
|
// it already no-ops when no routing flag is present. RUSH-2022 review r2.
|
|
892
910
|
void (async () => {
|
|
@@ -947,11 +965,11 @@ const helpOrVersionRequested = passedArgs.some((arg) => arg === '--help' || arg
|
|
|
947
965
|
// the unbranded CLI, so all of this is a no-op there.
|
|
948
966
|
const brandDisabled = disabledCommandsForActiveBrand();
|
|
949
967
|
const requestedIsDisabled = requestedCommand !== undefined && brandDisabled.has(requestedCommand);
|
|
950
|
-
// `--
|
|
968
|
+
// `--device` passthrough: run this invocation on a remote machine over SSH instead
|
|
951
969
|
// of locally. Handled before any local command registration / update check /
|
|
952
970
|
// background sync — a remote run needs none of that. Only the allowlisted
|
|
953
971
|
// read-only + config + teams commands route here; `run`/`sessions` are absent
|
|
954
|
-
// from the table and fall through to their own richer `--
|
|
972
|
+
// from the table and fall through to their own richer `--device` handling below.
|
|
955
973
|
// `--help`/`--version` stay local (docs must work without a reachable host).
|
|
956
974
|
//
|
|
957
975
|
// RUSH-2374: gate the dynamic import on a routing flag actually being present.
|
|
@@ -1010,7 +1028,7 @@ else if (requestedIsUnknown && requestedCommand) {
|
|
|
1010
1028
|
closest &&
|
|
1011
1029
|
!requestedIsDisabled &&
|
|
1012
1030
|
!RETIRED_TOP_LEVEL_COMMANDS.has(requestedCommand)) {
|
|
1013
|
-
// Auto-correct: register ONLY the corrected command, then re-route --
|
|
1031
|
+
// Auto-correct: register ONLY the corrected command, then re-route --device
|
|
1014
1032
|
// and reparse under the real name (RUSH-2329 + RUSH-2022 review r2).
|
|
1015
1033
|
passedArgs[0] = closest;
|
|
1016
1034
|
// Keep process.argv in sync for the command:* safety-net and any code that
|
|
@@ -1121,7 +1139,7 @@ if (!firstRun &&
|
|
|
1121
1139
|
// Skipped for --help/--version (RUSH-2454): same pure-docs gate as fold, the
|
|
1122
1140
|
// update check, background sync, ensureInitialized, and the menu-bar self-heal.
|
|
1123
1141
|
// The sentinel check itself is pure fs and does not load migrate.js — only a
|
|
1124
|
-
// missing/stale sentinel pays for `await import('./lib/migrate.js')` (which
|
|
1142
|
+
// missing/stale sentinel pays for `await import('./lib/installations/migrate.js')` (which
|
|
1125
1143
|
// pulls the hosts/routine/teams/daemon/menubar graph).
|
|
1126
1144
|
if (process.env.AGENTS_SKIP_MIGRATION !== '1' && !helpOrVersionRequested) {
|
|
1127
1145
|
try {
|
|
@@ -1130,7 +1148,7 @@ if (process.env.AGENTS_SKIP_MIGRATION !== '1' && !helpOrVersionRequested) {
|
|
|
1130
1148
|
// Bumping the suffix re-runs migrations for every user; binary releases that
|
|
1131
1149
|
// don't change the schema must NOT re-run (they would destroy user content
|
|
1132
1150
|
// when migration steps overlap with user-authored paths). See issue #20.
|
|
1133
|
-
const sentinelValue = '
|
|
1151
|
+
const sentinelValue = 'v21';
|
|
1134
1152
|
let needRun = true;
|
|
1135
1153
|
try {
|
|
1136
1154
|
if (fs.existsSync(sentinel) && fs.readFileSync(sentinel, 'utf-8').trim() === sentinelValue) {
|
|
@@ -1139,7 +1157,7 @@ if (process.env.AGENTS_SKIP_MIGRATION !== '1' && !helpOrVersionRequested) {
|
|
|
1139
1157
|
}
|
|
1140
1158
|
catch { /* best-effort — fall through to run */ }
|
|
1141
1159
|
if (needRun) {
|
|
1142
|
-
const { runMigration } = await import('./lib/migrate.js');
|
|
1160
|
+
const { runMigration } = await import('./lib/installations/migrate.js');
|
|
1143
1161
|
await runMigration();
|
|
1144
1162
|
try {
|
|
1145
1163
|
fs.mkdirSync(path.dirname(sentinel), { recursive: true });
|
|
@@ -1199,10 +1217,10 @@ catch (err) {
|
|
|
1199
1217
|
console.error(err.message);
|
|
1200
1218
|
process.exit(1);
|
|
1201
1219
|
}
|
|
1202
|
-
// A --
|
|
1203
|
-
// It carries an actionable message (switch to key auth);
|
|
1204
|
-
// handling it here covers every resolveHost caller (run,
|
|
1205
|
-
// secrets --
|
|
1220
|
+
// A --device targeting a password-auth device throws this from resolveHost.
|
|
1221
|
+
// It carries an actionable message (switch to key auth / enroll as a host);
|
|
1222
|
+
// handling it here covers every resolveHost caller (run, hosts check/rm,
|
|
1223
|
+
// secrets --device) at the source instead of a catch at each call site.
|
|
1206
1224
|
if (err.name === 'DeviceOffloadUnsupportedError') {
|
|
1207
1225
|
console.error(err.message);
|
|
1208
1226
|
process.exit(1);
|
package/dist/browser.js
CHANGED
|
@@ -3,8 +3,8 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { registerBrowserSubcommands } from './commands/browser.js';
|
|
4
4
|
import { maybeRunStandaloneOnHost } from './lib/hosts/passthrough.js';
|
|
5
5
|
async function main() {
|
|
6
|
-
// `browser … --
|
|
7
|
-
// `agents browser … --
|
|
6
|
+
// `browser … --device <box>` routes to a remote over SSH, exactly like
|
|
7
|
+
// `agents browser … --device <box>` does through index.ts. Standalone-only:
|
|
8
8
|
// this binary never enters index.ts, so without this the flag was dropped.
|
|
9
9
|
if (await maybeRunStandaloneOnHost('browser')) {
|
|
10
10
|
process.exit(process.exitCode ?? 0);
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy command registry.
|
|
3
|
+
*
|
|
4
|
+
* The CLI entry point (src/index.ts) used to statically import every command
|
|
5
|
+
* module and call its `registerXCommand(program)` on every invocation. That
|
|
6
|
+
* loaded the entire command tree (~50 modules) before the first line of output,
|
|
7
|
+
* dominating cold-start latency.
|
|
8
|
+
*
|
|
9
|
+
* This module maps each user-typed top-level command name to a thunk that
|
|
10
|
+
* dynamically imports ONLY the module(s) that command needs. Fast commands
|
|
11
|
+
* (`--version`, `view`, ...) now pay for just the one module they use; the full
|
|
12
|
+
* tree is loaded only on the rare slow paths (unknown-command spellcheck, bare
|
|
13
|
+
* help) via `registerAllEagerCommands` in src/index.ts.
|
|
14
|
+
*
|
|
15
|
+
* Parity is non-negotiable: the name -> loader map below mirrors exactly which
|
|
16
|
+
* module registers which top-level command on `main`. Multi-command modules
|
|
17
|
+
* (versions, packages) map several names to the same loader; `prune` needs BOTH
|
|
18
|
+
* versions (which creates `prune <specs...>`) and prune.js (which attaches the
|
|
19
|
+
* `cleanup` subcommand to it), in that order — see commands/prune.ts.
|
|
20
|
+
*/
|
|
21
|
+
import { Command } from 'commander';
|
|
22
|
+
export { KNOWN_TOP_LEVEL_COMMANDS, RETIRED_TOP_LEVEL_COMMANDS } from '../lib/startup/command-registry.js';
|
|
23
|
+
/** A function that registers one or more commands onto the root program. */
|
|
24
|
+
export type Registrar = (program: Command) => void;
|
|
25
|
+
/** A thunk that dynamically imports a command module and returns its registrar. */
|
|
26
|
+
export type ModuleLoader = () => Promise<Registrar>;
|
|
27
|
+
export declare const loadView: ModuleLoader;
|
|
28
|
+
export declare const loadInspect: ModuleLoader;
|
|
29
|
+
export declare const loadFeedback: ModuleLoader;
|
|
30
|
+
export declare const loadCommands: ModuleLoader;
|
|
31
|
+
export declare const loadHooks: ModuleLoader;
|
|
32
|
+
export declare const loadSkills: ModuleLoader;
|
|
33
|
+
export declare const loadRules: ModuleLoader;
|
|
34
|
+
export declare const loadMemory: ModuleLoader;
|
|
35
|
+
export declare const loadPermissions: ModuleLoader;
|
|
36
|
+
export declare const loadMcp: ModuleLoader;
|
|
37
|
+
export declare const loadCli: ModuleLoader;
|
|
38
|
+
export declare const loadSubagents: ModuleLoader;
|
|
39
|
+
export declare const loadPlugins: ModuleLoader;
|
|
40
|
+
export declare const loadWorkflows: ModuleLoader;
|
|
41
|
+
export declare const loadVersions: ModuleLoader;
|
|
42
|
+
export declare const loadUpdate: ModuleLoader;
|
|
43
|
+
export declare const loadImport: ModuleLoader;
|
|
44
|
+
export declare const loadPackages: ModuleLoader;
|
|
45
|
+
export declare const loadRoutines: ModuleLoader;
|
|
46
|
+
export declare const loadMonitors: ModuleLoader;
|
|
47
|
+
export declare const loadProjects: ModuleLoader;
|
|
48
|
+
export declare const loadRun: ModuleLoader;
|
|
49
|
+
export declare const loadOpen: ModuleLoader;
|
|
50
|
+
export declare const loadReconnect: ModuleLoader;
|
|
51
|
+
export declare const loadFork: ModuleLoader;
|
|
52
|
+
export declare const loadConfig: ModuleLoader;
|
|
53
|
+
export declare const loadModels: ModuleLoader;
|
|
54
|
+
export declare const loadModes: ModuleLoader;
|
|
55
|
+
export declare const loadPrune: ModuleLoader;
|
|
56
|
+
export declare const loadTrash: ModuleLoader;
|
|
57
|
+
export declare const loadRestore: ModuleLoader;
|
|
58
|
+
export declare const loadDoctor: ModuleLoader;
|
|
59
|
+
export declare const loadApply: ModuleLoader;
|
|
60
|
+
export declare const loadStatus: ModuleLoader;
|
|
61
|
+
export declare const loadRoute: ModuleLoader;
|
|
62
|
+
export declare const loadHarness: ModuleLoader;
|
|
63
|
+
export declare const loadSecrets: ModuleLoader;
|
|
64
|
+
export declare const loadMenubar: ModuleLoader;
|
|
65
|
+
export declare const loadBeta: ModuleLoader;
|
|
66
|
+
export declare const loadSync: ModuleLoader;
|
|
67
|
+
export declare const loadRefreshRules: ModuleLoader;
|
|
68
|
+
export declare const loadFactory: ModuleLoader;
|
|
69
|
+
export declare const loadUsage: ModuleLoader;
|
|
70
|
+
export declare const loadInsights: ModuleLoader;
|
|
71
|
+
export declare const loadPerf: ModuleLoader;
|
|
72
|
+
export declare const loadTrends: ModuleLoader;
|
|
73
|
+
export declare const loadAlias: ModuleLoader;
|
|
74
|
+
export declare const loadPty: ModuleLoader;
|
|
75
|
+
export declare const loadTmux: ModuleLoader;
|
|
76
|
+
export declare const loadWatchdog: ModuleLoader;
|
|
77
|
+
export declare const loadBrowser: ModuleLoader;
|
|
78
|
+
export declare const loadComputer: ModuleLoader;
|
|
79
|
+
export declare const loadLogs: ModuleLoader;
|
|
80
|
+
export declare const loadEvents: ModuleLoader;
|
|
81
|
+
export declare const loadSsh: ModuleLoader;
|
|
82
|
+
export declare const loadRepo: ModuleLoader;
|
|
83
|
+
export declare const loadSetup: ModuleLoader;
|
|
84
|
+
export declare const loadUninstall: ModuleLoader;
|
|
85
|
+
export declare const loadUpgrade: ModuleLoader;
|
|
86
|
+
export declare const loadSessions: ModuleLoader;
|
|
87
|
+
export declare const loadTeams: ModuleLoader;
|
|
88
|
+
export declare const loadTickets: ModuleLoader;
|
|
89
|
+
export declare const loadCloud: ModuleLoader;
|
|
90
|
+
export declare const loadMessage: ModuleLoader;
|
|
91
|
+
export declare const loadSend: ModuleLoader;
|
|
92
|
+
export declare const loadFeed: ModuleLoader;
|
|
93
|
+
export declare const loadMailboxes: ModuleLoader;
|
|
94
|
+
export declare const loadServe: ModuleLoader;
|
|
95
|
+
export declare const loadArtifacts: ModuleLoader;
|
|
96
|
+
export declare const loadAudit: ModuleLoader;
|
|
97
|
+
export declare const loadWebhooks: ModuleLoader;
|
|
98
|
+
export declare const loadHumans: ModuleLoader;
|
|
99
|
+
export declare const loadAccounts: ModuleLoader;
|
|
100
|
+
export declare const loadDaemon: ModuleLoader;
|
|
101
|
+
/**
|
|
102
|
+
* Commands whose modules pull in the SQLite-backed session/cloud stack. They are
|
|
103
|
+
* registered AFTER `applyGlobalHelpConventions` (mirroring main's order: help
|
|
104
|
+
* conventions at module top-level, lazy registration just before parse), so they
|
|
105
|
+
* inherit the root's custom help formatter rather than getting the per-command
|
|
106
|
+
* recursive pass. Keeping that ordering preserves their `--help` output exactly.
|
|
107
|
+
*/
|
|
108
|
+
export declare const LAZY_COMMAND_NAMES: ReadonlySet<string>;
|
|
109
|
+
/**
|
|
110
|
+
* User-typed top-level command name -> ordered list of module loaders to run.
|
|
111
|
+
*
|
|
112
|
+
* Most names map to a single loader. The exceptions encode real coupling on main:
|
|
113
|
+
* - `add`/`use`/`list`/`remove`/`rm`/`purge` all come from the versions module.
|
|
114
|
+
* - `registry`/`search`/`install` all come from the packages module.
|
|
115
|
+
* - `trash` and `restore` are separate registrars in the trash module.
|
|
116
|
+
* - `prune` needs versions FIRST (it creates `prune <specs...>`) then prune.js
|
|
117
|
+
* (which finds that command and attaches the `cleanup` subcommand).
|
|
118
|
+
*
|
|
119
|
+
* Inline deprecated aliases (memory/perms/exec/jobs/cron) and the inline
|
|
120
|
+
* `upgrade` command are NOT here — they are closures over entry-point state and
|
|
121
|
+
* are handled directly in src/index.ts.
|
|
122
|
+
*/
|
|
123
|
+
export declare const COMMAND_LOADERS: Record<string, ModuleLoader[]>;
|
|
124
|
+
/**
|
|
125
|
+
* Register every module in {@link COMMAND_LOADERS} onto one fresh program and
|
|
126
|
+
* return it — the full public command tree, deduped by loader identity so a
|
|
127
|
+
* loader mapped to several names (e.g. `add`/`use`/`list` -> versions) runs once.
|
|
128
|
+
*
|
|
129
|
+
* Off the hot path only: the command-index generator (`scripts/gen-command-index.ts`)
|
|
130
|
+
* and the tests build the tree from this. Startup never calls it — src/index.ts
|
|
131
|
+
* registers just the one requested command via `registerEagerForRequest`. The
|
|
132
|
+
* inline aliases/tombstones ({@link INLINE_COMMAND_NAMES}) are NOT included: they
|
|
133
|
+
* are closures over entry-point state that src/index.ts registers directly.
|
|
134
|
+
*/
|
|
135
|
+
export declare function buildFullCommandTree(): Promise<Command>;
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy command registry.
|
|
3
|
+
*
|
|
4
|
+
* The CLI entry point (src/index.ts) used to statically import every command
|
|
5
|
+
* module and call its `registerXCommand(program)` on every invocation. That
|
|
6
|
+
* loaded the entire command tree (~50 modules) before the first line of output,
|
|
7
|
+
* dominating cold-start latency.
|
|
8
|
+
*
|
|
9
|
+
* This module maps each user-typed top-level command name to a thunk that
|
|
10
|
+
* dynamically imports ONLY the module(s) that command needs. Fast commands
|
|
11
|
+
* (`--version`, `view`, ...) now pay for just the one module they use; the full
|
|
12
|
+
* tree is loaded only on the rare slow paths (unknown-command spellcheck, bare
|
|
13
|
+
* help) via `registerAllEagerCommands` in src/index.ts.
|
|
14
|
+
*
|
|
15
|
+
* Parity is non-negotiable: the name -> loader map below mirrors exactly which
|
|
16
|
+
* module registers which top-level command on `main`. Multi-command modules
|
|
17
|
+
* (versions, packages) map several names to the same loader; `prune` needs BOTH
|
|
18
|
+
* versions (which creates `prune <specs...>`) and prune.js (which attaches the
|
|
19
|
+
* `cleanup` subcommand to it), in that order — see commands/prune.ts.
|
|
20
|
+
*/
|
|
21
|
+
import { Command } from 'commander';
|
|
22
|
+
import { readFileSync } from 'node:fs';
|
|
23
|
+
import { fileURLToPath } from 'node:url';
|
|
24
|
+
import { configureRootCommand } from '../lib/startup/root-command.js';
|
|
25
|
+
export { KNOWN_TOP_LEVEL_COMMANDS, RETIRED_TOP_LEVEL_COMMANDS } from '../lib/startup/command-registry.js';
|
|
26
|
+
// One loader per command module. Each dynamically imports the module and hands
|
|
27
|
+
// back its register function. Kept as named consts so src/index.ts can compose
|
|
28
|
+
// them into the exact main-branch registration order for the slow path.
|
|
29
|
+
export const loadView = async () => (await import('../commands/view.js')).registerViewCommand;
|
|
30
|
+
export const loadInspect = async () => (await import('../commands/inspect.js')).registerInspectCommand;
|
|
31
|
+
export const loadFeedback = async () => (await import('../commands/feedback.js')).registerFeedbackCommand;
|
|
32
|
+
export const loadCommands = async () => (await import('../commands/commands.js')).registerCommandsCommands;
|
|
33
|
+
export const loadHooks = async () => (await import('../commands/hooks.js')).registerHooksCommands;
|
|
34
|
+
export const loadSkills = async () => (await import('../commands/skills.js')).registerSkillsCommands;
|
|
35
|
+
export const loadRules = async () => (await import('../commands/rules.js')).registerRulesCommands;
|
|
36
|
+
export const loadMemory = async () => (await import('../commands/memory.js')).registerMemoryCommands;
|
|
37
|
+
export const loadPermissions = async () => (await import('../commands/permissions.js')).registerPermissionsCommands;
|
|
38
|
+
export const loadMcp = async () => (await import('../commands/mcp.js')).registerMcpCommands;
|
|
39
|
+
export const loadCli = async () => (await import('../commands/cli.js')).registerCliCommands;
|
|
40
|
+
export const loadSubagents = async () => (await import('../commands/subagents.js')).registerSubagentsCommands;
|
|
41
|
+
export const loadPlugins = async () => (await import('../commands/plugins.js')).registerPluginsCommands;
|
|
42
|
+
export const loadWorkflows = async () => (await import('../commands/workflows.js')).registerWorkflowsCommands;
|
|
43
|
+
export const loadVersions = async () => (await import('../commands/versions.js')).registerVersionsCommands;
|
|
44
|
+
export const loadUpdate = async () => (await import('../commands/update.js')).registerUpdateCommand;
|
|
45
|
+
export const loadImport = async () => (await import('../commands/import.js')).registerImportCommand;
|
|
46
|
+
export const loadPackages = async () => (await import('../commands/packages.js')).registerPackagesCommands;
|
|
47
|
+
export const loadRoutines = async () => (await import('../commands/routines.js')).registerRoutinesCommands;
|
|
48
|
+
export const loadMonitors = async () => (await import('../commands/monitors.js')).registerMonitorsCommands;
|
|
49
|
+
export const loadProjects = async () => (await import('../commands/projects.js')).registerProjectsCommands;
|
|
50
|
+
export const loadRun = async () => (await import('../commands/exec.js')).registerRunCommand;
|
|
51
|
+
export const loadOpen = async () => (await import('../commands/open.js')).registerOpenCommand;
|
|
52
|
+
export const loadReconnect = async () => (await import('../commands/reconnect.js')).registerReconnectCommand;
|
|
53
|
+
export const loadFork = async () => (await import('../commands/fork.js')).registerForkCommand;
|
|
54
|
+
export const loadConfig = async () => (await import('../commands/config.js')).registerConfigCommand;
|
|
55
|
+
export const loadModels = async () => (await import('../commands/models.js')).registerModelsCommand;
|
|
56
|
+
export const loadModes = async () => (await import('../commands/modes.js')).registerModesCommand;
|
|
57
|
+
export const loadPrune = async () => (await import('../commands/prune.js')).registerPruneCommand;
|
|
58
|
+
export const loadTrash = async () => (await import('../commands/trash.js')).registerTrashCommands;
|
|
59
|
+
export const loadRestore = async () => (await import('../commands/trash.js')).registerRestoreCommand;
|
|
60
|
+
export const loadDoctor = async () => (await import('../commands/doctor.js')).registerDoctorCommand;
|
|
61
|
+
export const loadApply = async () => (await import('../commands/apply.js')).registerApplyCommand;
|
|
62
|
+
export const loadStatus = async () => (await import('../commands/status.js')).registerStatusCommand;
|
|
63
|
+
export const loadRoute = async () => (await import('../commands/route.js')).registerRouteCommands;
|
|
64
|
+
export const loadHarness = async () => (await import('../commands/harness.js')).registerHarnessCommands;
|
|
65
|
+
export const loadSecrets = async () => (await import('../commands/secrets.js')).registerSecretsCommands;
|
|
66
|
+
export const loadMenubar = async () => (await import('../commands/menubar.js')).registerMenubarCommands;
|
|
67
|
+
export const loadBeta = async () => (await import('../commands/beta.js')).registerBetaCommands;
|
|
68
|
+
export const loadSync = async () => (await import('../commands/sync.js')).registerSyncCommand;
|
|
69
|
+
export const loadRefreshRules = async () => (await import('../commands/refresh-rules.js')).registerRefreshRulesCommand;
|
|
70
|
+
export const loadFactory = async () => (await import('../commands/factory.js')).registerFactoryCommands;
|
|
71
|
+
export const loadUsage = async () => (await import('../commands/usage.js')).registerUsageCommand;
|
|
72
|
+
export const loadInsights = async () => (await import('../commands/insights.js')).registerInsightsCommand;
|
|
73
|
+
export const loadPerf = async () => (await import('../commands/perf.js')).registerPerfCommand;
|
|
74
|
+
// Thin deprecated alias of `agents insights mix` — no second mix implementation.
|
|
75
|
+
export const loadTrends = async () => (await import('../commands/trends.js')).registerTrendsCommand;
|
|
76
|
+
export const loadAlias = async () => (await import('../commands/alias.js')).registerAliasCommand;
|
|
77
|
+
export const loadPty = async () => (await import('../commands/pty.js')).registerPtyCommands;
|
|
78
|
+
export const loadTmux = async () => (await import('../commands/tmux.js')).registerTmuxCommands;
|
|
79
|
+
export const loadWatchdog = async () => (await import('../commands/watchdog.js')).registerWatchdogCommand;
|
|
80
|
+
export const loadBrowser = async () => (await import('../commands/browser.js')).registerBrowserCommand;
|
|
81
|
+
export const loadComputer = async () => (await import('../commands/computer.js')).registerComputerCommand;
|
|
82
|
+
export const loadLogs = async () => (await import('../commands/logs.js')).registerLogsCommand;
|
|
83
|
+
export const loadEvents = async () => (await import('../commands/events.js')).registerEventsCommand;
|
|
84
|
+
export const loadSsh = async () => (await import('../commands/ssh.js')).registerSshCommands;
|
|
85
|
+
export const loadRepo = async () => (await import('../commands/repo.js')).registerRepoCommands;
|
|
86
|
+
export const loadSetup = async () => (await import('../commands/setup.js')).registerSetupCommand;
|
|
87
|
+
export const loadUninstall = async () => (await import('../commands/uninstall.js')).registerUninstallCommands;
|
|
88
|
+
export const loadUpgrade = async () => (await import('../commands/upgrade.js')).registerUpgradeCommand;
|
|
89
|
+
export const loadSessions = async () => (await import('../commands/sessions.js')).registerSessionsCommands;
|
|
90
|
+
export const loadTeams = async () => (await import('../commands/teams.js')).registerTeamsCommands;
|
|
91
|
+
export const loadTickets = async () => (await import('../commands/tickets.js')).registerTicketsCommand;
|
|
92
|
+
export const loadCloud = async () => (await import('../commands/cloud.js')).registerCloudCommands;
|
|
93
|
+
export const loadMessage = async () => (await import('../commands/message.js')).registerMessageCommand;
|
|
94
|
+
export const loadSend = async () => (await import('../commands/send.js')).registerSendCommand;
|
|
95
|
+
export const loadFeed = async () => (await import('../commands/feed.js')).registerFeedCommand;
|
|
96
|
+
export const loadMailboxes = async () => (await import('../commands/mailboxes.js')).registerMailboxesCommand;
|
|
97
|
+
export const loadServe = async () => (await import('../commands/serve.js')).registerServeCommand;
|
|
98
|
+
// Registers the `artifacts` group (with `share` + `setup` under it) AND the
|
|
99
|
+
// top-level `unshare` alias — see commands/artifacts.ts.
|
|
100
|
+
export const loadArtifacts = async () => (await import('../commands/artifacts.js')).registerArtifactsCommands;
|
|
101
|
+
export const loadAudit = async () => (await import('../commands/audit.js')).registerAuditCommands;
|
|
102
|
+
export const loadWebhooks = async () => (await import('../commands/webhook.js')).registerWebhooksCommand;
|
|
103
|
+
export const loadHumans = async () => (await import('../commands/humans.js')).registerHumansCommands;
|
|
104
|
+
export const loadAccounts = async () => (await import('../commands/accounts.js')).registerAccountsCommand;
|
|
105
|
+
export const loadDaemon = async () => (await import('../commands/daemon.js')).registerDaemonCommand;
|
|
106
|
+
/**
|
|
107
|
+
* Commands whose modules pull in the SQLite-backed session/cloud stack. They are
|
|
108
|
+
* registered AFTER `applyGlobalHelpConventions` (mirroring main's order: help
|
|
109
|
+
* conventions at module top-level, lazy registration just before parse), so they
|
|
110
|
+
* inherit the root's custom help formatter rather than getting the per-command
|
|
111
|
+
* recursive pass. Keeping that ordering preserves their `--help` output exactly.
|
|
112
|
+
*/
|
|
113
|
+
// `roster` was a sessions --active alias — removed; use sessions --active.
|
|
114
|
+
export const LAZY_COMMAND_NAMES = new Set([
|
|
115
|
+
'sessions',
|
|
116
|
+
'reconnect',
|
|
117
|
+
'teams',
|
|
118
|
+
'cloud',
|
|
119
|
+
'message',
|
|
120
|
+
'serve',
|
|
121
|
+
]);
|
|
122
|
+
/**
|
|
123
|
+
* User-typed top-level command name -> ordered list of module loaders to run.
|
|
124
|
+
*
|
|
125
|
+
* Most names map to a single loader. The exceptions encode real coupling on main:
|
|
126
|
+
* - `add`/`use`/`list`/`remove`/`rm`/`purge` all come from the versions module.
|
|
127
|
+
* - `registry`/`search`/`install` all come from the packages module.
|
|
128
|
+
* - `trash` and `restore` are separate registrars in the trash module.
|
|
129
|
+
* - `prune` needs versions FIRST (it creates `prune <specs...>`) then prune.js
|
|
130
|
+
* (which finds that command and attaches the `cleanup` subcommand).
|
|
131
|
+
*
|
|
132
|
+
* Inline deprecated aliases (memory/perms/exec/jobs/cron) and the inline
|
|
133
|
+
* `upgrade` command are NOT here — they are closures over entry-point state and
|
|
134
|
+
* are handled directly in src/index.ts.
|
|
135
|
+
*/
|
|
136
|
+
export const COMMAND_LOADERS = {
|
|
137
|
+
accounts: [loadAccounts],
|
|
138
|
+
view: [loadView],
|
|
139
|
+
inspect: [loadInspect],
|
|
140
|
+
feedback: [loadFeedback],
|
|
141
|
+
commands: [loadCommands],
|
|
142
|
+
hooks: [loadHooks],
|
|
143
|
+
skills: [loadSkills],
|
|
144
|
+
rules: [loadRules],
|
|
145
|
+
memory: [loadMemory],
|
|
146
|
+
permissions: [loadPermissions],
|
|
147
|
+
mcp: [loadMcp],
|
|
148
|
+
clis: [loadCli],
|
|
149
|
+
subagents: [loadSubagents],
|
|
150
|
+
plugins: [loadPlugins],
|
|
151
|
+
workflows: [loadWorkflows],
|
|
152
|
+
add: [loadVersions],
|
|
153
|
+
use: [loadVersions],
|
|
154
|
+
list: [loadVersions],
|
|
155
|
+
remove: [loadVersions],
|
|
156
|
+
rm: [loadVersions],
|
|
157
|
+
purge: [loadVersions],
|
|
158
|
+
update: [loadUpdate],
|
|
159
|
+
prune: [loadVersions, loadPrune],
|
|
160
|
+
import: [loadImport],
|
|
161
|
+
registry: [loadPackages],
|
|
162
|
+
search: [loadPackages],
|
|
163
|
+
install: [loadPackages],
|
|
164
|
+
routines: [loadRoutines],
|
|
165
|
+
monitors: [loadMonitors],
|
|
166
|
+
projects: [loadProjects],
|
|
167
|
+
run: [loadRun],
|
|
168
|
+
open: [loadOpen],
|
|
169
|
+
reconnect: [loadReconnect],
|
|
170
|
+
fork: [loadFork],
|
|
171
|
+
config: [loadConfig],
|
|
172
|
+
models: [loadModels],
|
|
173
|
+
modes: [loadModes],
|
|
174
|
+
trash: [loadTrash],
|
|
175
|
+
restore: [loadRestore],
|
|
176
|
+
doctor: [loadDoctor],
|
|
177
|
+
apply: [loadApply],
|
|
178
|
+
status: [loadStatus],
|
|
179
|
+
route: [loadRoute],
|
|
180
|
+
harness: [loadHarness],
|
|
181
|
+
harnesses: [loadHarness],
|
|
182
|
+
secrets: [loadSecrets],
|
|
183
|
+
menubar: [loadMenubar],
|
|
184
|
+
beta: [loadBeta],
|
|
185
|
+
sync: [loadSync],
|
|
186
|
+
'refresh-rules': [loadRefreshRules],
|
|
187
|
+
factory: [loadFactory],
|
|
188
|
+
usage: [loadUsage],
|
|
189
|
+
insights: [loadInsights],
|
|
190
|
+
perf: [loadPerf],
|
|
191
|
+
trends: [loadTrends],
|
|
192
|
+
alias: [loadAlias],
|
|
193
|
+
pty: [loadPty],
|
|
194
|
+
tmux: [loadTmux],
|
|
195
|
+
watchdog: [loadWatchdog],
|
|
196
|
+
browser: [loadBrowser],
|
|
197
|
+
computer: [loadComputer],
|
|
198
|
+
logs: [loadLogs],
|
|
199
|
+
events: [loadEvents],
|
|
200
|
+
ssh: [loadSsh],
|
|
201
|
+
devices: [loadSsh],
|
|
202
|
+
// `fleet` is a commander alias of `devices` (see commands/ssh.ts); list it so
|
|
203
|
+
// lazy registration loads the devices tree when the user types `agents fleet`.
|
|
204
|
+
fleet: [loadSsh],
|
|
205
|
+
// `repos` is the canonical command name; `repo` remains a convenience alias
|
|
206
|
+
// (see commands/repo.ts). List both so lazy registration loads the tree
|
|
207
|
+
// whichever the user types.
|
|
208
|
+
repos: [loadRepo],
|
|
209
|
+
repo: [loadRepo],
|
|
210
|
+
setup: [loadSetup],
|
|
211
|
+
uninstall: [loadUninstall],
|
|
212
|
+
upgrade: [loadUpgrade],
|
|
213
|
+
sessions: [loadSessions],
|
|
214
|
+
teams: [loadTeams],
|
|
215
|
+
tickets: [loadTickets],
|
|
216
|
+
cloud: [loadCloud],
|
|
217
|
+
message: [loadMessage],
|
|
218
|
+
send: [loadSend],
|
|
219
|
+
notify: [loadSend],
|
|
220
|
+
feed: [loadFeed],
|
|
221
|
+
// Observe-umbrella alias of feed (the `timeline` alias was removed in RUSH-2692).
|
|
222
|
+
inbox: [loadFeed],
|
|
223
|
+
mailboxes: [loadMailboxes],
|
|
224
|
+
mailbox: [loadMailboxes],
|
|
225
|
+
serve: [loadServe],
|
|
226
|
+
artifacts: [loadArtifacts],
|
|
227
|
+
// `unshare` is a top-level convenience alias of `artifacts share delete` (see
|
|
228
|
+
// commands/share.ts) — same module, registered as its own program.command().
|
|
229
|
+
unshare: [loadArtifacts],
|
|
230
|
+
audit: [loadAudit],
|
|
231
|
+
webhooks: [loadWebhooks],
|
|
232
|
+
humans: [loadHumans],
|
|
233
|
+
daemon: [loadDaemon],
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* Register every module in {@link COMMAND_LOADERS} onto one fresh program and
|
|
237
|
+
* return it — the full public command tree, deduped by loader identity so a
|
|
238
|
+
* loader mapped to several names (e.g. `add`/`use`/`list` -> versions) runs once.
|
|
239
|
+
*
|
|
240
|
+
* Off the hot path only: the command-index generator (`scripts/gen-command-index.ts`)
|
|
241
|
+
* and the tests build the tree from this. Startup never calls it — src/index.ts
|
|
242
|
+
* registers just the one requested command via `registerEagerForRequest`. The
|
|
243
|
+
* inline aliases/tombstones ({@link INLINE_COMMAND_NAMES}) are NOT included: they
|
|
244
|
+
* are closures over entry-point state that src/index.ts registers directly.
|
|
245
|
+
*/
|
|
246
|
+
export async function buildFullCommandTree() {
|
|
247
|
+
const packageJson = JSON.parse(readFileSync(fileURLToPath(new URL('../../package.json', import.meta.url)), 'utf8'));
|
|
248
|
+
const program = configureRootCommand(new Command(), 'agents', packageJson.version);
|
|
249
|
+
const done = new Set();
|
|
250
|
+
for (const loaders of Object.values(COMMAND_LOADERS)) {
|
|
251
|
+
for (const loader of loaders) {
|
|
252
|
+
if (done.has(loader))
|
|
253
|
+
continue;
|
|
254
|
+
done.add(loader);
|
|
255
|
+
(await loader())(program);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return program;
|
|
259
|
+
}
|
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
|
+
import type { AgentId } from '../lib/types.js';
|
|
3
|
+
import { type Profile } from '../lib/profiles.js';
|
|
4
|
+
type AttachTarget = {
|
|
5
|
+
kind: 'installation';
|
|
6
|
+
agent: AgentId;
|
|
7
|
+
version: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'device-agent';
|
|
10
|
+
agent: AgentId;
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'profile';
|
|
13
|
+
profile: Profile;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Classify + validate an attach target, rejecting a typo BEFORE any binding is
|
|
17
|
+
* written: it must be an existing custom-harness profile, an installed
|
|
18
|
+
* `agent@version`, or a known harness id.
|
|
19
|
+
*/
|
|
20
|
+
export declare function classifyAttachTarget(target: string): AttachTarget;
|
|
2
21
|
export declare function parseBundleKey(raw: string): {
|
|
3
22
|
bundle: string;
|
|
4
23
|
key: string;
|
|
5
24
|
};
|
|
6
25
|
export declare function registerAccountsCommand(program: Command): void;
|
|
26
|
+
export {};
|