@phnx-labs/agents-cli 1.22.34 → 1.22.37
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 +672 -2
- package/README.md +82 -35
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.d.ts +15 -0
- package/dist/bootstrap.js +1211 -0
- package/dist/commands/accounts.d.ts +4 -11
- package/dist/commands/accounts.js +159 -27
- package/dist/commands/attach.js +17 -4
- package/dist/commands/audit.d.ts +8 -8
- package/dist/commands/audit.js +57 -47
- package/dist/commands/browser.js +15 -11
- package/dist/commands/cloud.js +1 -1
- package/dist/commands/commands.js +0 -11
- package/dist/commands/computer-actions.js +33 -0
- package/dist/commands/computer-sessions-picker.d.ts +21 -0
- package/dist/commands/computer-sessions-picker.js +141 -0
- package/dist/commands/computer.d.ts +16 -0
- package/dist/commands/computer.js +37 -0
- package/dist/commands/config.d.ts +17 -0
- package/dist/commands/config.js +401 -0
- package/dist/commands/cp.d.ts +84 -0
- package/dist/commands/cp.js +231 -0
- package/dist/commands/daemon.js +243 -14
- package/dist/commands/detach-core.d.ts +1 -1
- package/dist/commands/detach-core.js +12 -2
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +64 -5
- package/dist/commands/events.d.ts +24 -12
- package/dist/commands/events.js +144 -28
- package/dist/commands/exec.js +85 -41
- package/dist/commands/feed.d.ts +1 -1
- package/dist/commands/feed.js +16 -8
- package/dist/commands/focus.d.ts +33 -1
- package/dist/commands/focus.js +177 -17
- package/dist/commands/funnel.d.ts +1 -1
- package/dist/commands/go.js +9 -8
- package/dist/commands/harness-wizard.d.ts +1 -0
- package/dist/commands/harness-wizard.js +18 -20
- package/dist/commands/harness.d.ts +2 -0
- package/dist/commands/harness.js +59 -26
- package/dist/commands/hooks.js +0 -11
- package/dist/commands/inspect.d.ts +94 -1
- package/dist/commands/inspect.js +866 -40
- package/dist/commands/lease.d.ts +4 -4
- package/dist/commands/lease.js +6 -6
- package/dist/commands/login.js +0 -13
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +2 -2
- package/dist/commands/mcp.js +7 -2
- package/dist/commands/memory.js +7 -2
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +37 -6
- package/dist/commands/models.js +4 -0
- package/dist/commands/monitors.d.ts +0 -1
- package/dist/commands/monitors.js +199 -16
- package/dist/commands/open.d.ts +18 -0
- package/dist/commands/open.js +57 -0
- package/dist/commands/packages.js +2 -107
- package/dist/commands/plugins.js +6 -3
- package/dist/commands/profiles.d.ts +1 -0
- package/dist/commands/profiles.js +16 -160
- package/dist/commands/projects.d.ts +28 -0
- package/dist/commands/projects.js +125 -5
- package/dist/commands/reconnect.js +9 -3
- package/dist/commands/repo.js +42 -1
- package/dist/commands/resource-view.d.ts +17 -0
- package/dist/commands/resource-view.js +36 -14
- package/dist/commands/resume.js +9 -2
- package/dist/commands/routines.d.ts +0 -2
- package/dist/commands/routines.js +473 -289
- package/dist/commands/secrets.js +52 -9
- package/dist/commands/sessions-export.d.ts +47 -0
- package/dist/commands/sessions-export.js +116 -6
- package/dist/commands/sessions-import.d.ts +17 -0
- package/dist/commands/sessions-import.js +114 -6
- package/dist/commands/sessions-migrate.d.ts +27 -0
- package/dist/commands/sessions-migrate.js +50 -9
- package/dist/commands/sessions-picker.js +23 -4
- package/dist/commands/sessions-resume.d.ts +5 -3
- package/dist/commands/sessions-resume.js +30 -8
- package/dist/commands/sessions-watch.d.ts +2 -0
- package/dist/commands/sessions-watch.js +53 -0
- package/dist/commands/sessions.d.ts +66 -3
- package/dist/commands/sessions.js +298 -47
- package/dist/commands/set.d.ts +1 -1
- package/dist/commands/set.js +2 -2
- package/dist/commands/setup-browser.js +2 -2
- package/dist/commands/setup-mine.js +0 -1
- package/dist/commands/setup-preferences.js +1 -1
- package/dist/commands/setup-share.js +34 -4
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.js +26 -0
- package/dist/commands/share.d.ts +85 -0
- package/dist/commands/share.js +379 -8
- package/dist/commands/skills.js +0 -11
- package/dist/commands/snapshot.js +1 -1
- package/dist/commands/ssh.d.ts +18 -0
- package/dist/commands/ssh.js +549 -210
- package/dist/commands/sync.d.ts +5 -0
- package/dist/commands/sync.js +212 -32
- package/dist/commands/teams.d.ts +13 -0
- package/dist/commands/teams.js +187 -30
- package/dist/commands/tickets.d.ts +2 -0
- package/dist/commands/tickets.js +43 -0
- package/dist/commands/update.js +2 -4
- package/dist/commands/usage.js +5 -3
- package/dist/commands/versions.js +11 -5
- package/dist/commands/view.js +15 -7
- package/dist/commands/webhook.d.ts +2 -2
- package/dist/commands/webhook.js +7 -7
- package/dist/index.d.ts +18 -2
- package/dist/index.js +53 -1264
- package/dist/lib/account-catalog.d.ts +18 -0
- package/dist/lib/account-catalog.js +38 -0
- package/dist/lib/account-provider-registry.d.ts +18 -0
- package/dist/lib/account-provider-registry.js +59 -0
- package/dist/lib/account-registry.d.ts +40 -0
- package/dist/lib/account-registry.js +239 -0
- package/dist/lib/account-schema.d.ts +44 -0
- package/dist/lib/account-schema.js +91 -0
- package/dist/lib/account-state-service.d.ts +21 -0
- package/dist/lib/account-state-service.js +60 -0
- package/dist/lib/activity.d.ts +1 -1
- package/dist/lib/activity.js +8 -1
- package/dist/lib/add-dir.d.ts +80 -0
- package/dist/lib/add-dir.js +241 -0
- package/dist/lib/agent-cli-commands.d.ts +11 -0
- package/dist/lib/agent-cli-commands.js +30 -0
- package/dist/lib/agents.js +44 -36
- package/dist/lib/answer-router.js +1 -1
- package/dist/lib/audit/log.d.ts +10 -27
- package/dist/lib/audit/log.js +20 -33
- package/dist/lib/auth-health.d.ts +9 -2
- package/dist/lib/auth-health.js +42 -9
- package/dist/lib/auto-pull-worker.js +7 -3
- package/dist/lib/auto-pull.d.ts +44 -3
- package/dist/lib/auto-pull.js +88 -5
- package/dist/lib/binary-shadow.d.ts +28 -0
- package/dist/lib/binary-shadow.js +121 -0
- package/dist/lib/brand.js +9 -3
- package/dist/lib/browser/ipc.d.ts +30 -0
- package/dist/lib/browser/ipc.js +81 -4
- package/dist/lib/browser/profiles.d.ts +3 -2
- package/dist/lib/browser/profiles.js +65 -22
- package/dist/lib/browser/service.d.ts +4 -0
- package/dist/lib/browser/service.js +30 -3
- package/dist/lib/browser/sessions-list.d.ts +22 -2
- package/dist/lib/browser/sessions-list.js +54 -6
- package/dist/lib/browser/stream.d.ts +2 -0
- package/dist/lib/browser/stream.js +1 -0
- package/dist/lib/browser/types.d.ts +19 -0
- package/dist/lib/byok-usage.d.ts +9 -2
- package/dist/lib/byok-usage.js +133 -31
- package/dist/lib/cli-entry.d.ts +11 -0
- package/dist/lib/cli-entry.js +46 -0
- package/dist/lib/cloud/host.d.ts +1 -1
- package/dist/lib/cloud/host.js +2 -2
- package/dist/lib/cloud/registry.js +1 -1
- package/dist/lib/cloud/types.d.ts +1 -1
- package/dist/lib/codex-policy.d.ts +9 -1
- package/dist/lib/codex-policy.js +17 -2
- package/dist/lib/commands.d.ts +2 -0
- package/dist/lib/commands.js +2 -0
- package/dist/lib/computer/sessions-list.d.ts +150 -0
- package/dist/lib/computer/sessions-list.js +363 -0
- package/dist/lib/config-keys.d.ts +86 -0
- package/dist/lib/config-keys.js +193 -0
- package/dist/lib/config-machine-keys.d.ts +12 -0
- package/dist/lib/config-machine-keys.js +17 -0
- package/dist/lib/config-transfer.js +3 -4
- package/dist/lib/crabbox/cli.d.ts +2 -2
- package/dist/lib/crabbox/cli.js +3 -3
- package/dist/lib/daemon-health.d.ts +22 -0
- package/dist/lib/daemon-health.js +33 -3
- package/dist/lib/daemon-services.d.ts +50 -0
- package/dist/lib/daemon-services.js +147 -0
- package/dist/lib/daemon-ticks.d.ts +35 -66
- package/dist/lib/daemon-ticks.js +77 -159
- package/dist/lib/daemon.d.ts +72 -4
- package/dist/lib/daemon.js +792 -202
- package/dist/lib/deeplink/register.d.ts +49 -0
- package/dist/lib/deeplink/register.js +253 -0
- package/dist/lib/deeplink/url.d.ts +34 -0
- package/dist/lib/deeplink/url.js +78 -0
- package/dist/lib/device-config.d.ts +124 -29
- package/dist/lib/device-config.js +346 -141
- package/dist/lib/devices/config-migration.d.ts +42 -0
- package/dist/lib/devices/config-migration.js +203 -0
- package/dist/lib/devices/connect.js +14 -7
- package/dist/lib/devices/doctor-findings.d.ts +4 -1
- package/dist/lib/devices/doctor-findings.js +20 -1
- package/dist/lib/devices/harness-inventory.d.ts +11 -2
- package/dist/lib/devices/harness-inventory.js +0 -0
- package/dist/lib/devices/health.d.ts +1 -1
- package/dist/lib/devices/health.js +1 -1
- package/dist/lib/devices/pending.d.ts +22 -1
- package/dist/lib/devices/pending.js +67 -2
- package/dist/lib/devices/registry.d.ts +0 -25
- package/dist/lib/devices/registry.js +2 -83
- package/dist/lib/devices/resolve-profile.d.ts +20 -0
- package/dist/lib/devices/resolve-profile.js +44 -0
- package/dist/lib/devices/rollout-verify.d.ts +101 -0
- package/dist/lib/devices/rollout-verify.js +193 -0
- package/dist/lib/devices/ssh-config.js +10 -6
- package/dist/lib/event-families.d.ts +28 -0
- package/dist/lib/event-families.js +159 -0
- package/dist/lib/event-stream.d.ts +9 -1
- package/dist/lib/event-stream.js +26 -9
- package/dist/lib/events.d.ts +9 -1
- package/dist/lib/events.js +21 -6
- package/dist/lib/exec.d.ts +30 -0
- package/dist/lib/exec.js +220 -122
- package/dist/lib/feed-broadcast.d.ts +25 -0
- package/dist/lib/feed-broadcast.js +33 -0
- package/dist/lib/feed.d.ts +1 -1
- package/dist/lib/feed.js +12 -2
- package/dist/lib/fleet/capture.js +15 -0
- package/dist/lib/fleet/manifest.js +9 -0
- package/dist/lib/fleet/types.d.ts +9 -0
- package/dist/lib/fleet-status.js +10 -8
- package/dist/lib/git.d.ts +20 -6
- package/dist/lib/git.js +121 -17
- package/dist/lib/hosts/dispatch.d.ts +8 -3
- package/dist/lib/hosts/dispatch.js +29 -3
- package/dist/lib/hosts/logs.d.ts +2 -2
- package/dist/lib/hosts/logs.js +2 -2
- package/dist/lib/hosts/option.js +1 -1
- package/dist/lib/hosts/passthrough.d.ts +2 -3
- package/dist/lib/hosts/passthrough.js +10 -24
- package/dist/lib/hosts/progress.js +2 -2
- package/dist/lib/hosts/providers/devices.d.ts +3 -3
- package/dist/lib/hosts/providers/devices.js +18 -12
- package/dist/lib/hosts/ready.d.ts +5 -1
- package/dist/lib/hosts/ready.js +9 -3
- package/dist/lib/hosts/reconcile.d.ts +2 -2
- package/dist/lib/hosts/reconcile.js +2 -2
- package/dist/lib/hosts/registry.js +14 -9
- package/dist/lib/hosts/remote-cmd.js +1 -1
- package/dist/lib/hosts/remote-os.d.ts +9 -6
- package/dist/lib/hosts/remote-os.js +13 -6
- package/dist/lib/hosts/routing-flag.d.ts +23 -0
- package/dist/lib/hosts/routing-flag.js +41 -0
- package/dist/lib/hosts/run-target.js +1 -1
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/tasks.d.ts +6 -6
- package/dist/lib/hosts/tasks.js +4 -4
- package/dist/lib/hosts/types.js +1 -2
- package/dist/lib/installations/resolve.js +2 -8
- package/dist/lib/isolation-boundary-report.js +0 -1
- package/dist/lib/linear-cache.d.ts +7 -0
- package/dist/lib/linear-cache.js +31 -4
- package/dist/lib/linear-project-counts.d.ts +1 -1
- package/dist/lib/linear-project-counts.js +2 -3
- package/dist/lib/linear-projects.js +1 -1
- package/dist/lib/loop.d.ts +2 -2
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-target.d.ts +1 -1
- package/dist/lib/mailbox-target.js +1 -1
- package/dist/lib/manifest.js +7 -4
- 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/snapshot.d.ts +3 -2
- package/dist/lib/menubar/snapshot.js +6 -2
- package/dist/lib/migrate-fold.d.ts +33 -0
- package/dist/lib/migrate-fold.js +130 -0
- package/dist/lib/migrate.d.ts +34 -34
- package/dist/lib/migrate.js +106 -128
- package/dist/lib/model-tier-overrides.d.ts +1 -1
- package/dist/lib/model-tier-overrides.js +15 -2
- package/dist/lib/monitors/config.d.ts +17 -3
- package/dist/lib/monitors/config.js +52 -18
- package/dist/lib/monitors/engine.d.ts +32 -1
- package/dist/lib/monitors/engine.js +94 -11
- package/dist/lib/monitors/fingerprint.d.ts +46 -0
- package/dist/lib/monitors/fingerprint.js +100 -0
- package/dist/lib/monitors/remote.d.ts +47 -0
- package/dist/lib/monitors/remote.js +81 -0
- package/dist/lib/monitors/state.d.ts +39 -0
- package/dist/lib/monitors/state.js +56 -0
- package/dist/lib/onepassword.d.ts +17 -0
- package/dist/lib/onepassword.js +52 -22
- package/dist/lib/open-url.js +1 -1
- package/dist/lib/picker.d.ts +14 -2
- package/dist/lib/picker.js +35 -13
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +1 -1
- package/dist/lib/pr-land-detach.d.ts +32 -0
- package/dist/lib/pr-land-detach.js +79 -0
- package/dist/lib/profiles-presets.js +13 -0
- package/dist/lib/profiles.d.ts +2 -0
- package/dist/lib/profiles.js +44 -1
- package/dist/lib/project-focus.d.ts +1 -1
- package/dist/lib/project-focus.js +1 -1
- package/dist/lib/project-key.d.ts +17 -0
- package/dist/lib/project-key.js +26 -0
- package/dist/lib/project-probe.d.ts +4 -1
- package/dist/lib/project-probe.js +5 -4
- package/dist/lib/project-resources.js +2 -18
- package/dist/lib/project-root.d.ts +16 -0
- package/dist/lib/project-root.js +20 -2
- package/dist/lib/projects.d.ts +20 -1
- package/dist/lib/projects.js +78 -1
- package/dist/lib/refresh-coordinator.d.ts +24 -0
- package/dist/lib/refresh-coordinator.js +52 -0
- package/dist/lib/registry.d.ts +2 -2
- package/dist/lib/registry.js +1 -1
- package/dist/lib/resource-aliases.d.ts +13 -0
- package/dist/lib/resource-aliases.js +26 -0
- package/dist/lib/resources/types.d.ts +1 -1
- package/dist/lib/resources.d.ts +16 -0
- package/dist/lib/resources.js +66 -10
- package/dist/lib/rotate.d.ts +3 -4
- package/dist/lib/rotate.js +4 -5
- package/dist/lib/routine-activation.d.ts +22 -2
- package/dist/lib/routine-activation.js +63 -16
- package/dist/lib/routine-context.d.ts +9 -2
- package/dist/lib/routine-context.js +21 -6
- package/dist/lib/routines-project.d.ts +58 -48
- package/dist/lib/routines-project.js +190 -159
- package/dist/lib/routines.d.ts +41 -6
- package/dist/lib/routines.js +92 -34
- package/dist/lib/run-defaults.d.ts +5 -0
- package/dist/lib/run-defaults.js +11 -1
- package/dist/lib/runner.d.ts +10 -8
- package/dist/lib/runner.js +122 -39
- 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.d.ts +10 -3
- package/dist/lib/secrets/agent.js +43 -8
- package/dist/lib/secrets/bundles.d.ts +1 -0
- package/dist/lib/secrets/bundles.js +92 -80
- package/dist/lib/secrets/index.js +32 -9
- package/dist/lib/secrets/install-helper.d.ts +4 -4
- package/dist/lib/secrets/install-helper.js +4 -4
- package/dist/lib/secrets/push.d.ts +40 -6
- package/dist/lib/secrets/push.js +58 -11
- package/dist/lib/secrets/read-backoff.d.ts +1 -1
- package/dist/lib/secrets/read-backoff.js +1 -1
- package/dist/lib/secrets/remote.d.ts +24 -0
- package/dist/lib/secrets/remote.js +54 -4
- package/dist/lib/self-update.d.ts +108 -0
- package/dist/lib/self-update.js +276 -1
- package/dist/lib/session/active.d.ts +89 -5
- package/dist/lib/session/active.js +165 -10
- package/dist/lib/session/actor-sidecar.d.ts +1 -1
- package/dist/lib/session/actor-sidecar.js +2 -1
- package/dist/lib/session/db.d.ts +176 -2
- package/dist/lib/session/db.js +484 -17
- package/dist/lib/session/discover.js +27 -4
- package/dist/lib/session/hook-sessions.js +2 -2
- package/dist/lib/session/host-link.d.ts +2 -2
- package/dist/lib/session/host-link.js +2 -2
- package/dist/lib/session/pid-registry.d.ts +21 -0
- package/dist/lib/session/pid-registry.js +57 -0
- package/dist/lib/session/remote-active.js +15 -1
- package/dist/lib/session/remote.js +2 -2
- package/dist/lib/session/session-cache.d.ts +14 -7
- package/dist/lib/session/session-cache.js +51 -9
- package/dist/lib/session/state.d.ts +2 -2
- package/dist/lib/session/state.js +1 -1
- package/dist/lib/session/sync/config.d.ts +10 -10
- package/dist/lib/session/sync/config.js +10 -10
- package/dist/lib/session/sync/r2.d.ts +34 -0
- package/dist/lib/session/sync/r2.js +123 -0
- package/dist/lib/session/throughput.d.ts +1 -1
- package/dist/lib/session/throughput.js +1 -1
- package/dist/lib/session/types.d.ts +23 -1
- package/dist/lib/session/types.js +15 -0
- package/dist/lib/session/viewing-in.d.ts +1 -1
- package/dist/lib/session/viewing-in.js +1 -1
- package/dist/lib/session/watch.d.ts +101 -0
- package/dist/lib/session/watch.js +242 -0
- package/dist/lib/share/config.d.ts +4 -0
- package/dist/lib/share/config.js +1 -0
- package/dist/lib/share/delete.d.ts +93 -0
- package/dist/lib/share/delete.js +127 -0
- package/dist/lib/share/provision.d.ts +38 -0
- package/dist/lib/share/provision.js +50 -0
- package/dist/lib/share/publish.d.ts +40 -1
- package/dist/lib/share/publish.js +116 -3
- package/dist/lib/share/worker-template.js +71 -6
- package/dist/lib/shims.d.ts +17 -3
- package/dist/lib/shims.js +136 -27
- package/dist/lib/signin-badge.js +3 -2
- package/dist/lib/skills.js +2 -0
- package/dist/lib/smart-launch.d.ts +8 -8
- package/dist/lib/smart-launch.js +80 -59
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +1 -1
- package/dist/lib/staleness/prune.d.ts +88 -0
- package/dist/lib/staleness/prune.js +69 -0
- package/dist/lib/staleness/registry.d.ts +1 -1
- package/dist/lib/staleness/writers/commands.js +34 -2
- package/dist/lib/staleness/writers/hooks.js +16 -0
- package/dist/lib/staleness/writers/kinds.d.ts +6 -0
- package/dist/lib/staleness/writers/skills.js +19 -0
- package/dist/lib/staleness/writers/subagents.d.ts +2 -3
- package/dist/lib/staleness/writers/subagents.js +0 -4
- package/dist/lib/staleness/writers/types.d.ts +32 -0
- package/dist/lib/startup/command-registry.d.ts +6 -12
- package/dist/lib/startup/command-registry.js +14 -31
- package/dist/lib/startup/dev-build.d.ts +10 -0
- package/dist/lib/startup/dev-build.js +13 -1
- package/dist/lib/startup/spellcheck.d.ts +18 -0
- package/dist/lib/startup/spellcheck.js +45 -0
- package/dist/lib/state.d.ts +36 -9
- package/dist/lib/state.js +96 -46
- package/dist/lib/subagents-registry.d.ts +0 -7
- package/dist/lib/subagents-registry.js +38 -65
- package/dist/lib/subagents.d.ts +0 -33
- package/dist/lib/subagents.js +0 -75
- package/dist/lib/sync-umbrella.js +1 -1
- package/dist/lib/teams/agents.d.ts +41 -1
- package/dist/lib/teams/agents.js +187 -9
- package/dist/lib/teams/api.d.ts +11 -1
- package/dist/lib/teams/api.js +11 -2
- package/dist/lib/teams/delivery.d.ts +41 -0
- package/dist/lib/teams/delivery.js +60 -0
- package/dist/lib/teams/registry.d.ts +14 -0
- package/dist/lib/teams/registry.js +51 -1
- package/dist/lib/teams/remoteWorktree.d.ts +19 -0
- package/dist/lib/teams/remoteWorktree.js +29 -0
- package/dist/lib/teams/scheduler.d.ts +1 -1
- package/dist/lib/teams/scheduler.js +1 -1
- package/dist/lib/teams/worktree.d.ts +24 -0
- package/dist/lib/teams/worktree.js +42 -0
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +10 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +16 -5
- package/dist/lib/terminal/engine.d.ts +4 -0
- package/dist/lib/terminal/engine.js +8 -2
- package/dist/lib/terminal/types.d.ts +21 -2
- package/dist/lib/testdata/refresh-coordinator-worker.d.ts +1 -0
- package/dist/lib/testdata/refresh-coordinator-worker.js +23 -0
- package/dist/lib/tickets/list.d.ts +53 -0
- package/dist/lib/tickets/list.js +153 -0
- package/dist/lib/tmux/orphan-reap.d.ts +320 -0
- package/dist/lib/tmux/orphan-reap.js +644 -0
- package/dist/lib/tmux/session.d.ts +68 -3
- package/dist/lib/tmux/session.js +95 -5
- package/dist/lib/triggers/handlers.d.ts +20 -0
- package/dist/lib/triggers/handlers.js +6 -1
- package/dist/lib/types.d.ts +46 -34
- package/dist/lib/usage-fleet.d.ts +32 -0
- package/dist/lib/usage-fleet.js +125 -0
- package/dist/lib/usage-refresh.d.ts +3 -3
- package/dist/lib/usage-refresh.js +19 -16
- package/dist/lib/usage.d.ts +51 -47
- package/dist/lib/usage.js +145 -153
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/versions.d.ts +56 -13
- package/dist/lib/versions.js +195 -45
- package/dist/lib/watchdog/log.d.ts +1 -1
- package/dist/lib/watchdog/log.js +3 -3
- package/dist/lib/watchdog/rotate.d.ts +6 -6
- package/dist/lib/watchdog/rotate.js +6 -6
- package/dist/lib/workflows.d.ts +1 -1
- package/dist/lib/yaml-io.d.ts +47 -0
- package/dist/lib/yaml-io.js +55 -0
- package/package.json +2 -1
- package/scripts/install-helper.js +2 -2
- package/scripts/postinstall.js +23 -20
- package/dist/commands/defaults.d.ts +0 -7
- package/dist/commands/defaults.js +0 -107
- package/dist/commands/export.d.ts +0 -11
- package/dist/commands/export.js +0 -215
- package/dist/commands/helper.d.ts +0 -12
- package/dist/commands/helper.js +0 -87
- package/dist/commands/hosts.d.ts +0 -11
- package/dist/commands/hosts.js +0 -330
- package/dist/commands/lock.d.ts +0 -12
- package/dist/commands/lock.js +0 -70
- package/dist/commands/pull.d.ts +0 -17
- package/dist/commands/pull.js +0 -39
- package/dist/commands/push.d.ts +0 -14
- package/dist/commands/push.js +0 -30
- package/dist/commands/wallet.d.ts +0 -20
- package/dist/commands/wallet.js +0 -216
- package/dist/commands/worktree.d.ts +0 -19
- package/dist/commands/worktree.js +0 -272
- package/dist/lib/account-labels.d.ts +0 -24
- package/dist/lib/account-labels.js +0 -72
- package/dist/lib/auto-dispatch-linear.d.ts +0 -18
- package/dist/lib/auto-dispatch-linear.js +0 -107
- package/dist/lib/auto-dispatch-provider.d.ts +0 -10
- package/dist/lib/auto-dispatch-provider.js +0 -30
- package/dist/lib/auto-dispatch.d.ts +0 -93
- package/dist/lib/auto-dispatch.js +0 -128
- package/dist/lib/export.d.ts +0 -72
- package/dist/lib/export.js +0 -269
- package/dist/lib/lock.d.ts +0 -93
- package/dist/lib/lock.js +0 -207
- package/dist/lib/wallet/index.d.ts +0 -78
- package/dist/lib/wallet/index.js +0 -253
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { getWriter, getDetector } from './registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Kinds prune reconciles. Restricted to the name-keyed file/dir resources whose
|
|
4
|
+
* writer implements `remove()`. Deliberately excluded, each with a reason:
|
|
5
|
+
* - hooks — a version-home hook script is coupled to a settings.json /
|
|
6
|
+
* hooks.json REGISTRATION. Pruning the last hook to zero would delete the
|
|
7
|
+
* script but must also GC its registration in the same pass, and that lands
|
|
8
|
+
* in `src/lib/hooks.ts` — a Windows-portable-path surface the CI windows leg
|
|
9
|
+
* gates on. Split to RUSH-2456 so this PR stays Linux-only-green; hook FILES
|
|
10
|
+
* are still reconciled by the in-write orphan sweep (versions.ts, gated on
|
|
11
|
+
* `hooksToSync > 0`).
|
|
12
|
+
* - rules / permissions — synced as a wholesale rewrite (one composed file /
|
|
13
|
+
* the full allowlist), so a removed rule or group already drops out.
|
|
14
|
+
* - plugins — carry their own reconciliation via `cleanOrphanedPluginSkills`.
|
|
15
|
+
* - mcp — registered through each agent's CLI/config, a separate removal path.
|
|
16
|
+
* - subagents / workflows — no clean per-name inverse yet (multi-agent index
|
|
17
|
+
* finalize; native workflow trees); tracked for a follow-up.
|
|
18
|
+
*/
|
|
19
|
+
export const PRUNABLE_KINDS = ['commands', 'skills'];
|
|
20
|
+
/** Names the manifest recorded as installed for a kind (source-name keyed). */
|
|
21
|
+
function manifestNames(manifest, kind) {
|
|
22
|
+
switch (kind) {
|
|
23
|
+
case 'commands': {
|
|
24
|
+
// Object keys are the source command names; writtenCommands carries any
|
|
25
|
+
// extra names the writer actually emitted (dual-write / command-skill).
|
|
26
|
+
const names = new Set(Object.keys(manifest.commands ?? {}));
|
|
27
|
+
for (const c of manifest.writtenCommands ?? [])
|
|
28
|
+
names.add(c);
|
|
29
|
+
return [...names];
|
|
30
|
+
}
|
|
31
|
+
case 'skills': return Object.keys(manifest.skills ?? {});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function emptyPruned() {
|
|
35
|
+
return { commands: [], skills: [] };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Remove resources that a prior sync installed and that are now gone from
|
|
39
|
+
* source, from one agent@version home. Deletes nothing when no manifest exists.
|
|
40
|
+
*/
|
|
41
|
+
export function pruneRemovedResources(input) {
|
|
42
|
+
const { agent, version, versionHome, cwd, previousManifest, sourceNames } = input;
|
|
43
|
+
if (!previousManifest) {
|
|
44
|
+
return { pruned: emptyPruned(), skippedNoManifest: true };
|
|
45
|
+
}
|
|
46
|
+
const pruned = emptyPruned();
|
|
47
|
+
for (const kind of PRUNABLE_KINDS) {
|
|
48
|
+
const writer = getWriter(kind, agent);
|
|
49
|
+
const detector = getDetector(kind, agent);
|
|
50
|
+
// No writer.remove (unsupported kind/agent) or no detector: nothing to do.
|
|
51
|
+
if (!writer?.remove || !detector)
|
|
52
|
+
continue;
|
|
53
|
+
const installed = manifestNames(previousManifest, kind);
|
|
54
|
+
if (installed.length === 0)
|
|
55
|
+
continue;
|
|
56
|
+
const stillInSource = new Set(sourceNames[kind]);
|
|
57
|
+
const materialized = new Set(detector.list({ version, versionHome, cwd }));
|
|
58
|
+
for (const name of installed) {
|
|
59
|
+
if (stillInSource.has(name))
|
|
60
|
+
continue; // still provided by some layer
|
|
61
|
+
if (!materialized.has(name))
|
|
62
|
+
continue; // already gone from the home
|
|
63
|
+
const result = writer.remove({ version, versionHome, name, cwd });
|
|
64
|
+
if (result.removed)
|
|
65
|
+
pruned[kind].push(name);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { pruned, skippedNoManifest: false };
|
|
69
|
+
}
|
|
@@ -5,7 +5,7 @@ import type { ResourceDetector } from './detectors/types.js';
|
|
|
5
5
|
import type { RulesSelection } from './writers/rules.js';
|
|
6
6
|
export type { ResourceKind } from './writers/kinds.js';
|
|
7
7
|
export { kindToCapability, ALL_RESOURCE_KINDS } from './writers/kinds.js';
|
|
8
|
-
export type { ResourceWriter, WriteArgs, WriteResult } from './writers/types.js';
|
|
8
|
+
export type { ResourceWriter, WriteArgs, WriteResult, RemoveArgs, RemoveResult } from './writers/types.js';
|
|
9
9
|
export type { ResourceDetector, DetectArgs } from './detectors/types.js';
|
|
10
10
|
export type { RulesSelection } from './writers/rules.js';
|
|
11
11
|
/** Per-kind selection payload. Most kinds are string[]; rules is special. */
|
|
@@ -25,8 +25,8 @@ import { supports } from '../../capabilities.js';
|
|
|
25
25
|
import { safeJoin } from '../../paths.js';
|
|
26
26
|
import { markdownToToml } from '../../convert.js';
|
|
27
27
|
import { commandAppliesTo, parseCommandMetadata } from '../../commands.js';
|
|
28
|
-
import { installCommandSkillToVersion, shouldAlsoInstallCommandAsSkill, shouldInstallCommandAsSkill, } from '../../command-skills.js';
|
|
29
|
-
import { installGooseCommandToVersion } from '../../goose-commands.js';
|
|
28
|
+
import { installCommandSkillToVersion, listCommandSkillsInVersion, removeCommandSkillFromVersion, shouldAlsoInstallCommandAsSkill, shouldInstallCommandAsSkill, } from '../../command-skills.js';
|
|
29
|
+
import { installGooseCommandToVersion, listGooseCommandsInVersion, removeGooseCommandFromVersion, } from '../../goose-commands.js';
|
|
30
30
|
import { resolveCommandSource, trustedSkillRoots } from './sources.js';
|
|
31
31
|
import { lazyAgentMap } from './lazy-map.js';
|
|
32
32
|
function buildCommandsWriter(agent) {
|
|
@@ -82,6 +82,38 @@ function buildCommandsWriter(agent) {
|
|
|
82
82
|
}
|
|
83
83
|
return { synced };
|
|
84
84
|
},
|
|
85
|
+
remove({ versionHome, name }) {
|
|
86
|
+
const agentConfig = AGENTS[agent];
|
|
87
|
+
const agentDir = path.join(versionHome, agentConfigDirName(agent));
|
|
88
|
+
let removed = false;
|
|
89
|
+
// Native command file (Claude, Codex <0.117, Grok, Cursor, …). The
|
|
90
|
+
// extension follows the agent's format, mirroring the write path above.
|
|
91
|
+
if (agentConfig.commandsSubdir) {
|
|
92
|
+
const ext = agentConfig.format === 'toml' ? '.toml' : '.md';
|
|
93
|
+
const nativeFile = safeJoin(path.join(agentDir, agentConfig.commandsSubdir), `${name}${ext}`);
|
|
94
|
+
try {
|
|
95
|
+
if (fs.existsSync(nativeFile) && fs.lstatSync(nativeFile).isFile()) {
|
|
96
|
+
fs.unlinkSync(nativeFile);
|
|
97
|
+
removed = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch { /* already gone / inaccessible */ }
|
|
101
|
+
}
|
|
102
|
+
// Command-as-skill dir (Codex >=0.117, Kimi; Cursor dual-write). Gated on
|
|
103
|
+
// it currently being a command-skill, and removeCommandSkillFromVersion
|
|
104
|
+
// re-checks the `agents_command` marker before deleting — so a real skill
|
|
105
|
+
// of the same name is never destroyed by a command prune.
|
|
106
|
+
if (listCommandSkillsInVersion(agentDir).includes(name)) {
|
|
107
|
+
if (removeCommandSkillFromVersion(agentDir, name).success)
|
|
108
|
+
removed = true;
|
|
109
|
+
}
|
|
110
|
+
// Goose recipe YAML + its slash_commands registry entry.
|
|
111
|
+
if (agent === 'goose' && listGooseCommandsInVersion(versionHome).includes(name)) {
|
|
112
|
+
if (removeGooseCommandFromVersion(versionHome, name).success)
|
|
113
|
+
removed = true;
|
|
114
|
+
}
|
|
115
|
+
return { removed };
|
|
116
|
+
},
|
|
85
117
|
};
|
|
86
118
|
}
|
|
87
119
|
// Built lazily on first access — see lazy-map.ts for the cycle rationale.
|
|
@@ -95,6 +95,22 @@ function buildHooksWriter(agent) {
|
|
|
95
95
|
}
|
|
96
96
|
return { synced };
|
|
97
97
|
},
|
|
98
|
+
remove({ versionHome, name }) {
|
|
99
|
+
// Delete the copied hook artifact from `{agentDir}/hooks/<name>`. Native
|
|
100
|
+
// settings.json/hooks.json registration is regenerated by the write path
|
|
101
|
+
// that runs alongside this prune (registerHooksToSettings above reads the
|
|
102
|
+
// remaining source manifest), so a removed hook drops out of both.
|
|
103
|
+
const agentDir = path.join(versionHome, agentConfigDirName(agent));
|
|
104
|
+
const hookTarget = safeJoin(path.join(agentDir, 'hooks'), name);
|
|
105
|
+
try {
|
|
106
|
+
if (fs.existsSync(hookTarget)) {
|
|
107
|
+
removePath(hookTarget);
|
|
108
|
+
return { removed: true };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch { /* already gone / inaccessible */ }
|
|
112
|
+
return { removed: false };
|
|
113
|
+
},
|
|
98
114
|
};
|
|
99
115
|
}
|
|
100
116
|
export const hooksWriters = lazyAgentMap(() => {
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
* Canonical list of resource kinds dispatched through the writer/detector
|
|
3
3
|
* registry. Each name is the capability name on AgentConfig — except
|
|
4
4
|
* "permissions", which maps to the legacy capability name "allowlist".
|
|
5
|
+
*
|
|
6
|
+
* NOTE: "rules" in this registry is the WRITER key for what ResourceSelection
|
|
7
|
+
* calls "memory". The --rule/--rules CLI flag therefore maps to the "memory"
|
|
8
|
+
* key in ResourceSelection, not to a key called "rules". The memory file is
|
|
9
|
+
* composed from all layers (not a per-repo artifact), so it is always set to
|
|
10
|
+
* 'all' rather than filtered by individual names.
|
|
5
11
|
*/
|
|
6
12
|
import type { CapabilityName } from '../../types.js';
|
|
7
13
|
export type ResourceKind = 'commands' | 'skills' | 'hooks' | 'rules' | 'mcp' | 'permissions' | 'subagents' | 'plugins' | 'workflows';
|
|
@@ -9,6 +9,7 @@ import * as path from 'path';
|
|
|
9
9
|
import { AGENTS, agentConfigDirName } from '../../agents.js';
|
|
10
10
|
import { capableAgents } from '../../capabilities.js';
|
|
11
11
|
import { safeJoin } from '../../paths.js';
|
|
12
|
+
import { listCommandSkillsInVersion } from '../../command-skills.js';
|
|
12
13
|
import { resolveSkillSource } from './sources.js';
|
|
13
14
|
import { lazyAgentMap } from './lazy-map.js';
|
|
14
15
|
const SKILL_COPY_IGNORE = new Set(['.DS_Store', '.git', '.gitignore', '.venv', '__pycache__', 'node_modules']);
|
|
@@ -66,6 +67,24 @@ function buildSkillsWriter(agent) {
|
|
|
66
67
|
}
|
|
67
68
|
return { synced };
|
|
68
69
|
},
|
|
70
|
+
remove({ versionHome, name }) {
|
|
71
|
+
const agentDir = path.join(versionHome, agentConfigDirName(agent));
|
|
72
|
+
// A command-installed-as-skill lives in the same skills/ dir but is owned
|
|
73
|
+
// by the commands writer's prune — never delete it from here, or a
|
|
74
|
+
// still-live converted command would vanish under a skill prune.
|
|
75
|
+
if (listCommandSkillsInVersion(agentDir).includes(name)) {
|
|
76
|
+
return { removed: false };
|
|
77
|
+
}
|
|
78
|
+
const destDir = safeJoin(path.join(agentDir, 'skills'), name);
|
|
79
|
+
try {
|
|
80
|
+
if (fs.existsSync(destDir) && fs.lstatSync(destDir).isDirectory()) {
|
|
81
|
+
removePath(destDir);
|
|
82
|
+
return { removed: true };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch { /* already gone / inaccessible */ }
|
|
86
|
+
return { removed: false };
|
|
87
|
+
},
|
|
69
88
|
};
|
|
70
89
|
}
|
|
71
90
|
export const skillsWriters = lazyAgentMap(() => {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Subagents writer. Every agent's on-disk layout (target dir, file/dir shape,
|
|
3
|
-
* transform
|
|
4
|
-
*
|
|
5
|
-
* the registry instead of a per-agent `else if` chain.
|
|
3
|
+
* transform) is declared once in the subagent registry; this writer is generic
|
|
4
|
+
* and iterates the registry instead of a per-agent `else if` chain.
|
|
6
5
|
*
|
|
7
6
|
* Source-side discovery is `listInstalledSubagents` from lib/subagents.ts —
|
|
8
7
|
* it reads user + system layers only (project layer excluded for the same
|
|
@@ -24,10 +24,6 @@ function buildSubagentsWriter(agent) {
|
|
|
24
24
|
}
|
|
25
25
|
catch { /* per-item sync failure: skip */ }
|
|
26
26
|
}
|
|
27
|
-
// Optional cross-item pass (e.g. Kimi's `_agents-cli.yaml` parent index).
|
|
28
|
-
if (target.finalize && synced.length > 0) {
|
|
29
|
-
target.finalize(dir, synced.map((name) => map.get(name)));
|
|
30
|
-
}
|
|
31
27
|
return { synced };
|
|
32
28
|
},
|
|
33
29
|
};
|
|
@@ -29,8 +29,40 @@ export interface WriteResult {
|
|
|
29
29
|
/** Names actually written. Empty array = write produced nothing (not an error). */
|
|
30
30
|
synced: string[];
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Inverse of a write: locate and delete the materialized artifact for one
|
|
34
|
+
* resource `name` from a version home. Used only by the manifest-bounded prune
|
|
35
|
+
* pass (RUSH-2438), which supplies names it has already proven were
|
|
36
|
+
* agents-installed and are gone from source — the writer just owns the layout
|
|
37
|
+
* knowledge (native file vs command-skill dir vs recipe) so prune never
|
|
38
|
+
* re-derives it.
|
|
39
|
+
*/
|
|
40
|
+
export interface RemoveArgs {
|
|
41
|
+
/** Agent version (e.g. "1.2.3"). */
|
|
42
|
+
version: string;
|
|
43
|
+
/** Absolute path to the version's home dir. */
|
|
44
|
+
versionHome: string;
|
|
45
|
+
/** Resource name to remove (no extension). */
|
|
46
|
+
name: string;
|
|
47
|
+
/** Current working directory — used by writers that consult project-layer state. */
|
|
48
|
+
cwd: string;
|
|
49
|
+
}
|
|
50
|
+
export interface RemoveResult {
|
|
51
|
+
/** True when an artifact owned by this writer was found and deleted. */
|
|
52
|
+
removed: boolean;
|
|
53
|
+
}
|
|
32
54
|
export interface ResourceWriter<Sel = string[]> {
|
|
33
55
|
readonly kind: ResourceKind;
|
|
34
56
|
readonly agent: AgentId;
|
|
35
57
|
write(args: WriteArgs<Sel>): WriteResult;
|
|
58
|
+
/**
|
|
59
|
+
* Optional inverse of `write` for the prune pass. Only the name-keyed
|
|
60
|
+
* file/dir kinds implement it (commands, skills, hooks); kinds whose sync is
|
|
61
|
+
* a wholesale rewrite (rules, permissions) or that carry their own
|
|
62
|
+
* reconciliation (plugins via cleanOrphanedPluginSkills) leave it undefined.
|
|
63
|
+
* Absence is not a silent skip: `pruneRemovedResources` only iterates
|
|
64
|
+
* `PRUNABLE_KINDS`, and a registry completeness test asserts every writer for
|
|
65
|
+
* those kinds implements `remove`.
|
|
66
|
+
*/
|
|
67
|
+
remove?(args: RemoveArgs): RemoveResult;
|
|
36
68
|
}
|
|
@@ -37,20 +37,19 @@ export declare const loadCli: ModuleLoader;
|
|
|
37
37
|
export declare const loadSubagents: ModuleLoader;
|
|
38
38
|
export declare const loadPlugins: ModuleLoader;
|
|
39
39
|
export declare const loadWorkflows: ModuleLoader;
|
|
40
|
-
export declare const loadWorktree: ModuleLoader;
|
|
41
40
|
export declare const loadVersions: ModuleLoader;
|
|
42
41
|
export declare const loadUpdate: ModuleLoader;
|
|
43
42
|
export declare const loadImport: ModuleLoader;
|
|
44
|
-
export declare const loadExport: ModuleLoader;
|
|
45
43
|
export declare const loadPackages: ModuleLoader;
|
|
46
44
|
export declare const loadRoutines: ModuleLoader;
|
|
47
45
|
export declare const loadMonitors: ModuleLoader;
|
|
48
46
|
export declare const loadProjects: ModuleLoader;
|
|
49
47
|
export declare const loadRun: ModuleLoader;
|
|
50
48
|
export declare const loadResume: ModuleLoader;
|
|
49
|
+
export declare const loadOpen: ModuleLoader;
|
|
51
50
|
export declare const loadReconnect: ModuleLoader;
|
|
52
51
|
export declare const loadFork: ModuleLoader;
|
|
53
|
-
export declare const
|
|
52
|
+
export declare const loadConfig: ModuleLoader;
|
|
54
53
|
export declare const loadSet: ModuleLoader;
|
|
55
54
|
export declare const loadModels: ModuleLoader;
|
|
56
55
|
export declare const loadModes: ModuleLoader;
|
|
@@ -65,12 +64,9 @@ export declare const loadProfiles: ModuleLoader;
|
|
|
65
64
|
export declare const loadHarness: ModuleLoader;
|
|
66
65
|
export declare const loadSecrets: ModuleLoader;
|
|
67
66
|
export declare const loadLogin: ModuleLoader;
|
|
68
|
-
export declare const loadWallet: ModuleLoader;
|
|
69
|
-
export declare const loadHelper: ModuleLoader;
|
|
70
67
|
export declare const loadMenubar: ModuleLoader;
|
|
71
68
|
export declare const loadBeta: ModuleLoader;
|
|
72
69
|
export declare const loadSync: ModuleLoader;
|
|
73
|
-
export declare const loadLock: ModuleLoader;
|
|
74
70
|
export declare const loadRefreshRules: ModuleLoader;
|
|
75
71
|
export declare const loadFactory: ModuleLoader;
|
|
76
72
|
export declare const loadUsage: ModuleLoader;
|
|
@@ -88,19 +84,16 @@ export declare const loadTmux: ModuleLoader;
|
|
|
88
84
|
export declare const loadWatchdog: ModuleLoader;
|
|
89
85
|
export declare const loadBrowser: ModuleLoader;
|
|
90
86
|
export declare const loadComputer: ModuleLoader;
|
|
91
|
-
export declare const loadHosts: ModuleLoader;
|
|
92
|
-
export declare const loadLease: ModuleLoader;
|
|
93
87
|
export declare const loadLogs: ModuleLoader;
|
|
94
88
|
export declare const loadEvents: ModuleLoader;
|
|
95
89
|
export declare const loadSsh: ModuleLoader;
|
|
96
|
-
export declare const loadPull: ModuleLoader;
|
|
97
|
-
export declare const loadPush: ModuleLoader;
|
|
98
90
|
export declare const loadRepo: ModuleLoader;
|
|
99
91
|
export declare const loadSetup: ModuleLoader;
|
|
100
92
|
export declare const loadUninstall: ModuleLoader;
|
|
101
93
|
export declare const loadUpgrade: ModuleLoader;
|
|
102
94
|
export declare const loadSessions: ModuleLoader;
|
|
103
95
|
export declare const loadTeams: ModuleLoader;
|
|
96
|
+
export declare const loadTickets: ModuleLoader;
|
|
104
97
|
export declare const loadCloud: ModuleLoader;
|
|
105
98
|
export declare const loadMessage: ModuleLoader;
|
|
106
99
|
export declare const loadSend: ModuleLoader;
|
|
@@ -109,11 +102,11 @@ export declare const loadMailboxes: ModuleLoader;
|
|
|
109
102
|
export declare const loadServe: ModuleLoader;
|
|
110
103
|
export declare const loadShare: ModuleLoader;
|
|
111
104
|
export declare const loadAudit: ModuleLoader;
|
|
112
|
-
export declare const
|
|
113
|
-
export declare const loadFunnel: ModuleLoader;
|
|
105
|
+
export declare const loadWebhooks: ModuleLoader;
|
|
114
106
|
export declare const loadHumans: ModuleLoader;
|
|
115
107
|
export declare const loadAccounts: ModuleLoader;
|
|
116
108
|
export declare const loadDaemon: ModuleLoader;
|
|
109
|
+
export declare const loadCp: ModuleLoader;
|
|
117
110
|
/**
|
|
118
111
|
* Commands whose modules pull in the SQLite-backed session/cloud stack. They are
|
|
119
112
|
* registered AFTER `applyGlobalHelpConventions` (mirroring main's order: help
|
|
@@ -150,6 +143,7 @@ export declare const COMMAND_LOADERS: Record<string, ModuleLoader[]>;
|
|
|
150
143
|
* registered command tree so a new command can never drift out of it.
|
|
151
144
|
*/
|
|
152
145
|
export declare const KNOWN_TOP_LEVEL_COMMANDS: ReadonlySet<string>;
|
|
146
|
+
export declare const RETIRED_TOP_LEVEL_COMMANDS: ReadonlySet<string>;
|
|
153
147
|
/** Whether `name` is a top-level command this CLI registers. See {@link KNOWN_TOP_LEVEL_COMMANDS}. */
|
|
154
148
|
export declare function isKnownTopLevelCommand(name: string): boolean;
|
|
155
149
|
/**
|
|
@@ -39,20 +39,19 @@ export const loadCli = async () => (await import('../../commands/cli.js')).regis
|
|
|
39
39
|
export const loadSubagents = async () => (await import('../../commands/subagents.js')).registerSubagentsCommands;
|
|
40
40
|
export const loadPlugins = async () => (await import('../../commands/plugins.js')).registerPluginsCommands;
|
|
41
41
|
export const loadWorkflows = async () => (await import('../../commands/workflows.js')).registerWorkflowsCommands;
|
|
42
|
-
export const loadWorktree = async () => (await import('../../commands/worktree.js')).registerWorktreeCommands;
|
|
43
42
|
export const loadVersions = async () => (await import('../../commands/versions.js')).registerVersionsCommands;
|
|
44
43
|
export const loadUpdate = async () => (await import('../../commands/update.js')).registerUpdateCommand;
|
|
45
44
|
export const loadImport = async () => (await import('../../commands/import.js')).registerImportCommand;
|
|
46
|
-
export const loadExport = async () => (await import('../../commands/export.js')).registerExportCommand;
|
|
47
45
|
export const loadPackages = async () => (await import('../../commands/packages.js')).registerPackagesCommands;
|
|
48
46
|
export const loadRoutines = async () => (await import('../../commands/routines.js')).registerRoutinesCommands;
|
|
49
47
|
export const loadMonitors = async () => (await import('../../commands/monitors.js')).registerMonitorsCommands;
|
|
50
48
|
export const loadProjects = async () => (await import('../../commands/projects.js')).registerProjectsCommands;
|
|
51
49
|
export const loadRun = async () => (await import('../../commands/exec.js')).registerRunCommand;
|
|
52
50
|
export const loadResume = async () => (await import('../../commands/resume.js')).registerResumeCommand;
|
|
51
|
+
export const loadOpen = async () => (await import('../../commands/open.js')).registerOpenCommand;
|
|
53
52
|
export const loadReconnect = async () => (await import('../../commands/reconnect.js')).registerReconnectCommand;
|
|
54
53
|
export const loadFork = async () => (await import('../../commands/fork.js')).registerForkCommand;
|
|
55
|
-
export const
|
|
54
|
+
export const loadConfig = async () => (await import('../../commands/config.js')).registerConfigCommand;
|
|
56
55
|
export const loadSet = async () => (await import('../../commands/set.js')).registerSetCommand;
|
|
57
56
|
export const loadModels = async () => (await import('../../commands/models.js')).registerModelsCommand;
|
|
58
57
|
export const loadModes = async () => (await import('../../commands/modes.js')).registerModesCommand;
|
|
@@ -67,12 +66,9 @@ export const loadProfiles = async () => (await import('../../commands/profiles.j
|
|
|
67
66
|
export const loadHarness = async () => (await import('../../commands/harness.js')).registerHarnessCommands;
|
|
68
67
|
export const loadSecrets = async () => (await import('../../commands/secrets.js')).registerSecretsCommands;
|
|
69
68
|
export const loadLogin = async () => (await import('../../commands/login.js')).registerLoginCommands;
|
|
70
|
-
export const loadWallet = async () => (await import('../../commands/wallet.js')).registerWalletCommands;
|
|
71
|
-
export const loadHelper = async () => (await import('../../commands/helper.js')).registerHelperCommand;
|
|
72
69
|
export const loadMenubar = async () => (await import('../../commands/menubar.js')).registerMenubarCommands;
|
|
73
70
|
export const loadBeta = async () => (await import('../../commands/beta.js')).registerBetaCommands;
|
|
74
71
|
export const loadSync = async () => (await import('../../commands/sync.js')).registerSyncCommand;
|
|
75
|
-
export const loadLock = async () => (await import('../../commands/lock.js')).registerLockCommand;
|
|
76
72
|
export const loadRefreshRules = async () => (await import('../../commands/refresh-rules.js')).registerRefreshRulesCommand;
|
|
77
73
|
export const loadFactory = async () => (await import('../../commands/factory.js')).registerFactoryCommands;
|
|
78
74
|
export const loadUsage = async () => (await import('../../commands/usage.js')).registerUsageCommand;
|
|
@@ -91,19 +87,16 @@ export const loadTmux = async () => (await import('../../commands/tmux.js')).reg
|
|
|
91
87
|
export const loadWatchdog = async () => (await import('../../commands/watchdog.js')).registerWatchdogCommand;
|
|
92
88
|
export const loadBrowser = async () => (await import('../../commands/browser.js')).registerBrowserCommand;
|
|
93
89
|
export const loadComputer = async () => (await import('../../commands/computer.js')).registerComputerCommand;
|
|
94
|
-
export const loadHosts = async () => (await import('../../commands/hosts.js')).registerHostsCommand;
|
|
95
|
-
export const loadLease = async () => (await import('../../commands/lease.js')).registerLeaseCommand;
|
|
96
90
|
export const loadLogs = async () => (await import('../../commands/logs.js')).registerLogsCommand;
|
|
97
91
|
export const loadEvents = async () => (await import('../../commands/events.js')).registerEventsCommand;
|
|
98
92
|
export const loadSsh = async () => (await import('../../commands/ssh.js')).registerSshCommands;
|
|
99
|
-
export const loadPull = async () => (await import('../../commands/pull.js')).registerPullCommand;
|
|
100
|
-
export const loadPush = async () => (await import('../../commands/push.js')).registerPushCommand;
|
|
101
93
|
export const loadRepo = async () => (await import('../../commands/repo.js')).registerRepoCommands;
|
|
102
94
|
export const loadSetup = async () => (await import('../../commands/setup.js')).registerSetupCommand;
|
|
103
95
|
export const loadUninstall = async () => (await import('../../commands/uninstall.js')).registerUninstallCommands;
|
|
104
96
|
export const loadUpgrade = async () => (await import('../../commands/upgrade.js')).registerUpgradeCommand;
|
|
105
97
|
export const loadSessions = async () => (await import('../../commands/sessions.js')).registerSessionsCommands;
|
|
106
98
|
export const loadTeams = async () => (await import('../../commands/teams.js')).registerTeamsCommands;
|
|
99
|
+
export const loadTickets = async () => (await import('../../commands/tickets.js')).registerTicketsCommand;
|
|
107
100
|
export const loadCloud = async () => (await import('../../commands/cloud.js')).registerCloudCommands;
|
|
108
101
|
export const loadMessage = async () => (await import('../../commands/message.js')).registerMessageCommand;
|
|
109
102
|
export const loadSend = async () => (await import('../../commands/send.js')).registerSendCommand;
|
|
@@ -112,11 +105,11 @@ export const loadMailboxes = async () => (await import('../../commands/mailboxes
|
|
|
112
105
|
export const loadServe = async () => (await import('../../commands/serve.js')).registerServeCommand;
|
|
113
106
|
export const loadShare = async () => (await import('../../commands/share.js')).registerShareCommands;
|
|
114
107
|
export const loadAudit = async () => (await import('../../commands/audit.js')).registerAuditCommands;
|
|
115
|
-
export const
|
|
116
|
-
export const loadFunnel = async () => (await import('../../commands/funnel.js')).registerFunnelCommand;
|
|
108
|
+
export const loadWebhooks = async () => (await import('../../commands/webhook.js')).registerWebhooksCommand;
|
|
117
109
|
export const loadHumans = async () => (await import('../../commands/humans.js')).registerHumansCommands;
|
|
118
110
|
export const loadAccounts = async () => (await import('../../commands/accounts.js')).registerAccountsCommand;
|
|
119
111
|
export const loadDaemon = async () => (await import('../../commands/daemon.js')).registerDaemonCommand;
|
|
112
|
+
export const loadCp = async () => (await import('../../commands/cp.js')).registerCpCommand;
|
|
120
113
|
/**
|
|
121
114
|
* Commands whose modules pull in the SQLite-backed session/cloud stack. They are
|
|
122
115
|
* registered AFTER `applyGlobalHelpConventions` (mirroring main's order: help
|
|
@@ -166,7 +159,6 @@ export const COMMAND_LOADERS = {
|
|
|
166
159
|
subagents: [loadSubagents],
|
|
167
160
|
plugins: [loadPlugins],
|
|
168
161
|
workflows: [loadWorkflows],
|
|
169
|
-
worktree: [loadWorktree],
|
|
170
162
|
add: [loadVersions],
|
|
171
163
|
use: [loadVersions],
|
|
172
164
|
list: [loadVersions],
|
|
@@ -176,23 +168,18 @@ export const COMMAND_LOADERS = {
|
|
|
176
168
|
update: [loadUpdate],
|
|
177
169
|
prune: [loadVersions, loadPrune],
|
|
178
170
|
import: [loadImport],
|
|
179
|
-
export: [loadExport],
|
|
180
171
|
registry: [loadPackages],
|
|
181
172
|
search: [loadPackages],
|
|
182
173
|
install: [loadPackages],
|
|
183
|
-
// packages.ts also registers `publish` at top level (commands/packages.ts:435).
|
|
184
|
-
// It was missing here, so `agents publish` only worked via the unknown-command
|
|
185
|
-
// fallback that registers the whole tree — and the --host router could not see
|
|
186
|
-
// it as a real command at all (RUSH-2022).
|
|
187
|
-
publish: [loadPackages],
|
|
188
174
|
routines: [loadRoutines],
|
|
189
175
|
monitors: [loadMonitors],
|
|
190
176
|
projects: [loadProjects],
|
|
191
177
|
run: [loadRun],
|
|
192
178
|
resume: [loadResume],
|
|
179
|
+
open: [loadOpen],
|
|
193
180
|
reconnect: [loadReconnect],
|
|
194
181
|
fork: [loadFork],
|
|
195
|
-
|
|
182
|
+
config: [loadConfig],
|
|
196
183
|
set: [loadSet],
|
|
197
184
|
models: [loadModels],
|
|
198
185
|
modes: [loadModes],
|
|
@@ -202,20 +189,15 @@ export const COMMAND_LOADERS = {
|
|
|
202
189
|
apply: [loadApply],
|
|
203
190
|
status: [loadStatus],
|
|
204
191
|
snapshot: [loadSnapshot],
|
|
205
|
-
profile: [loadProfiles],
|
|
206
192
|
profiles: [loadProfiles],
|
|
207
193
|
harness: [loadHarness],
|
|
208
194
|
harnesses: [loadHarness],
|
|
209
195
|
secrets: [loadSecrets],
|
|
210
196
|
login: [loadLogin],
|
|
211
197
|
logout: [loadLogin],
|
|
212
|
-
whoami: [loadLogin],
|
|
213
|
-
wallet: [loadWallet],
|
|
214
|
-
helper: [loadHelper],
|
|
215
198
|
menubar: [loadMenubar],
|
|
216
199
|
beta: [loadBeta],
|
|
217
200
|
sync: [loadSync],
|
|
218
|
-
lock: [loadLock],
|
|
219
201
|
'refresh-rules': [loadRefreshRules],
|
|
220
202
|
factory: [loadFactory],
|
|
221
203
|
usage: [loadUsage],
|
|
@@ -233,8 +215,6 @@ export const COMMAND_LOADERS = {
|
|
|
233
215
|
watchdog: [loadWatchdog],
|
|
234
216
|
browser: [loadBrowser],
|
|
235
217
|
computer: [loadComputer],
|
|
236
|
-
hosts: [loadHosts],
|
|
237
|
-
lease: [loadLease],
|
|
238
218
|
logs: [loadLogs],
|
|
239
219
|
events: [loadEvents],
|
|
240
220
|
ssh: [loadSsh],
|
|
@@ -242,8 +222,6 @@ export const COMMAND_LOADERS = {
|
|
|
242
222
|
// `fleet` is a commander alias of `devices` (see commands/ssh.ts); list it so
|
|
243
223
|
// lazy registration loads the devices tree when the user types `agents fleet`.
|
|
244
224
|
fleet: [loadSsh],
|
|
245
|
-
pull: [loadPull],
|
|
246
|
-
push: [loadPush],
|
|
247
225
|
// `repos` is the canonical command name; `repo` remains a convenience alias
|
|
248
226
|
// (see commands/repo.ts). List both so lazy registration loads the tree
|
|
249
227
|
// whichever the user types.
|
|
@@ -256,6 +234,7 @@ export const COMMAND_LOADERS = {
|
|
|
256
234
|
// Observe-umbrella alias of sessions --active (same lazy module).
|
|
257
235
|
roster: [loadSessions],
|
|
258
236
|
teams: [loadTeams],
|
|
237
|
+
tickets: [loadTickets],
|
|
259
238
|
cloud: [loadCloud],
|
|
260
239
|
message: [loadMessage],
|
|
261
240
|
send: [loadSend],
|
|
@@ -268,11 +247,14 @@ export const COMMAND_LOADERS = {
|
|
|
268
247
|
mailbox: [loadMailboxes],
|
|
269
248
|
serve: [loadServe],
|
|
270
249
|
share: [loadShare],
|
|
250
|
+
// `unshare` is a top-level convenience alias of `share delete` (see
|
|
251
|
+
// commands/share.ts) — same module, registered as its own program.command().
|
|
252
|
+
unshare: [loadShare],
|
|
271
253
|
audit: [loadAudit],
|
|
272
|
-
|
|
273
|
-
funnel: [loadFunnel],
|
|
254
|
+
webhooks: [loadWebhooks],
|
|
274
255
|
humans: [loadHumans],
|
|
275
256
|
daemon: [loadDaemon],
|
|
257
|
+
cp: [loadCp],
|
|
276
258
|
};
|
|
277
259
|
/**
|
|
278
260
|
* Top-level names that {@link COMMAND_LOADERS} does not carry because they are
|
|
@@ -306,6 +288,7 @@ export const KNOWN_TOP_LEVEL_COMMANDS = new Set([
|
|
|
306
288
|
...Object.keys(COMMAND_LOADERS),
|
|
307
289
|
...INLINE_COMMAND_NAMES,
|
|
308
290
|
]);
|
|
291
|
+
export const RETIRED_TOP_LEVEL_COMMANDS = new Set(['webhook']);
|
|
309
292
|
/** Whether `name` is a top-level command this CLI registers. See {@link KNOWN_TOP_LEVEL_COMMANDS}. */
|
|
310
293
|
export function isKnownTopLevelCommand(name) {
|
|
311
294
|
return KNOWN_TOP_LEVEL_COMMANDS.has(name);
|
|
@@ -19,4 +19,14 @@
|
|
|
19
19
|
* actually be the agents-cli package (its package.json `name`), not some
|
|
20
20
|
* unrelated ancestor that happens to be version-controlled.
|
|
21
21
|
*/
|
|
22
|
+
/**
|
|
23
|
+
* Whether a version string is the `0.0.0-dev.<sha>[-dirty]` stamp
|
|
24
|
+
* `scripts/install.sh` writes for a side-by-side dev install (`install.sh:61`).
|
|
25
|
+
*
|
|
26
|
+
* Split out from {@link detectDevBuild} because a caller holding only a version
|
|
27
|
+
* string — a fleet rollout reading `agents --version` off a remote box — cannot
|
|
28
|
+
* run signal 2 (it needs that machine's filesystem), and must not re-spell the
|
|
29
|
+
* stamp prefix.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isDevVersionStamp(version: string): boolean;
|
|
22
32
|
export declare function detectDevBuild(argv1: string, version: string): boolean;
|
|
@@ -21,8 +21,20 @@ import * as path from 'path';
|
|
|
21
21
|
* actually be the agents-cli package (its package.json `name`), not some
|
|
22
22
|
* unrelated ancestor that happens to be version-controlled.
|
|
23
23
|
*/
|
|
24
|
+
/**
|
|
25
|
+
* Whether a version string is the `0.0.0-dev.<sha>[-dirty]` stamp
|
|
26
|
+
* `scripts/install.sh` writes for a side-by-side dev install (`install.sh:61`).
|
|
27
|
+
*
|
|
28
|
+
* Split out from {@link detectDevBuild} because a caller holding only a version
|
|
29
|
+
* string — a fleet rollout reading `agents --version` off a remote box — cannot
|
|
30
|
+
* run signal 2 (it needs that machine's filesystem), and must not re-spell the
|
|
31
|
+
* stamp prefix.
|
|
32
|
+
*/
|
|
33
|
+
export function isDevVersionStamp(version) {
|
|
34
|
+
return version.startsWith('0.0.0-dev');
|
|
35
|
+
}
|
|
24
36
|
export function detectDevBuild(argv1, version) {
|
|
25
|
-
if (version
|
|
37
|
+
if (isDevVersionStamp(version))
|
|
26
38
|
return true;
|
|
27
39
|
try {
|
|
28
40
|
const cliPath = fs.realpathSync(argv1 || '');
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level command spellcheck (RUSH-2329).
|
|
3
|
+
*
|
|
4
|
+
* Candidates are plain strings from KNOWN_TOP_LEVEL_COMMANDS — never the live
|
|
5
|
+
* commander registry — so an unknown / typo'd invocation does not pay for
|
|
6
|
+
* registerAllEagerCommands (~250-330ms of dynamic import + module eval).
|
|
7
|
+
*/
|
|
8
|
+
/** Calculate the Levenshtein edit distance between two strings. */
|
|
9
|
+
export declare function levenshtein(a: string, b: string): number;
|
|
10
|
+
/**
|
|
11
|
+
* Closest top-level command name by Levenshtein distance.
|
|
12
|
+
* Iterates candidates in first-seen order so ties break the same way as the
|
|
13
|
+
* historical registerAllEagerCommands registration order (RUSH-2329).
|
|
14
|
+
*/
|
|
15
|
+
export declare function closestTopLevelCommand(unknown: string, candidates: Iterable<string>): {
|
|
16
|
+
closest: string | null;
|
|
17
|
+
minDist: number;
|
|
18
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level command spellcheck (RUSH-2329).
|
|
3
|
+
*
|
|
4
|
+
* Candidates are plain strings from KNOWN_TOP_LEVEL_COMMANDS — never the live
|
|
5
|
+
* commander registry — so an unknown / typo'd invocation does not pay for
|
|
6
|
+
* registerAllEagerCommands (~250-330ms of dynamic import + module eval).
|
|
7
|
+
*/
|
|
8
|
+
/** Calculate the Levenshtein edit distance between two strings. */
|
|
9
|
+
export function levenshtein(a, b) {
|
|
10
|
+
const m = a.length;
|
|
11
|
+
const n = b.length;
|
|
12
|
+
const dp = Array(m + 1)
|
|
13
|
+
.fill(null)
|
|
14
|
+
.map(() => Array(n + 1).fill(0));
|
|
15
|
+
for (let i = 0; i <= m; i++)
|
|
16
|
+
dp[i][0] = i;
|
|
17
|
+
for (let j = 0; j <= n; j++)
|
|
18
|
+
dp[0][j] = j;
|
|
19
|
+
for (let i = 1; i <= m; i++) {
|
|
20
|
+
for (let j = 1; j <= n; j++) {
|
|
21
|
+
dp[i][j] =
|
|
22
|
+
a[i - 1] === b[j - 1]
|
|
23
|
+
? dp[i - 1][j - 1]
|
|
24
|
+
: 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return dp[m][n];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Closest top-level command name by Levenshtein distance.
|
|
31
|
+
* Iterates candidates in first-seen order so ties break the same way as the
|
|
32
|
+
* historical registerAllEagerCommands registration order (RUSH-2329).
|
|
33
|
+
*/
|
|
34
|
+
export function closestTopLevelCommand(unknown, candidates) {
|
|
35
|
+
let closest = null;
|
|
36
|
+
let minDist = Infinity;
|
|
37
|
+
for (const cmd of candidates) {
|
|
38
|
+
const dist = levenshtein(unknown, cmd);
|
|
39
|
+
if (dist < minDist) {
|
|
40
|
+
minDist = dist;
|
|
41
|
+
closest = cmd;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return { closest, minDist };
|
|
45
|
+
}
|