@phnx-labs/agents-cli 1.22.35 → 1.22.38
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 +708 -2
- package/README.md +83 -43
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.d.ts +15 -0
- package/dist/bootstrap.js +1212 -0
- package/dist/commands/accounts.d.ts +4 -11
- package/dist/commands/accounts.js +159 -27
- package/dist/commands/artifacts-setup.d.ts +53 -0
- package/dist/commands/artifacts-setup.js +161 -0
- package/dist/commands/artifacts.d.ts +18 -0
- package/dist/commands/artifacts.js +58 -0
- 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 +17 -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 +86 -42
- 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 +71 -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/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.d.ts +5 -0
- package/dist/commands/setup.js +31 -5
- package/dist/commands/share.d.ts +87 -7
- package/dist/commands/share.js +320 -58
- 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/hygiene.d.ts +90 -0
- package/dist/lib/browser/hygiene.js +146 -0
- package/dist/lib/browser/ipc.d.ts +30 -0
- package/dist/lib/browser/ipc.js +93 -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 +79 -1
- package/dist/lib/browser/service.js +231 -14
- 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 +63 -1
- 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/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 +219 -121
- 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 +21 -7
- package/dist/lib/git.js +122 -18
- 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-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 +44 -7
- 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/analytics.js +1 -1
- package/dist/lib/share/capture.d.ts +1 -1
- package/dist/lib/share/capture.js +3 -3
- package/dist/lib/share/config.d.ts +6 -2
- package/dist/lib/share/config.js +6 -5
- package/dist/lib/share/delete.js +3 -3
- package/dist/lib/share/provision.d.ts +38 -0
- package/dist/lib/share/provision.js +51 -1
- package/dist/lib/share/publish.d.ts +40 -1
- package/dist/lib/share/publish.js +119 -6
- package/dist/lib/share/worker-template.d.ts +12 -1
- package/dist/lib/share/worker-template.js +83 -7
- package/dist/lib/shims.d.ts +17 -3
- package/dist/lib/shims.js +98 -26
- 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 +16 -14
- package/dist/lib/startup/command-registry.js +26 -37
- 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 +316 -0
- package/dist/lib/tmux/orphan-reap.js +638 -0
- package/dist/lib/tmux/session.d.ts +68 -3
- package/dist/lib/tmux/session.js +96 -5
- package/dist/lib/triggers/handlers.d.ts +20 -0
- package/dist/lib/triggers/handlers.js +16 -1
- package/dist/lib/triggers/webhook.js +10 -0
- package/dist/lib/types.d.ts +47 -35
- 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/set.d.ts +0 -15
- package/dist/commands/set.js +0 -79
- package/dist/commands/setup-share.d.ts +0 -17
- package/dist/commands/setup-share.js +0 -85
- 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
package/dist/commands/hosts.js
DELETED
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents hosts` — register and inspect agent hosts (machines you offload runs to).
|
|
3
|
-
*
|
|
4
|
-
* The registry is a thin overlay: ssh-config hosts are dispatchable with zero
|
|
5
|
-
* registration (connection details stay in ~/.ssh/config); enrollment only adds
|
|
6
|
-
* capability metadata or bootstraps agents-cli, plus inline (non-ssh-config)
|
|
7
|
-
* hosts. Dispatch itself is `agents run --host <name>` (see commands/exec.ts).
|
|
8
|
-
*/
|
|
9
|
-
import chalk from 'chalk';
|
|
10
|
-
import { terminalWidth, truncateToWidth, stringWidth } from '../lib/session/width.js';
|
|
11
|
-
import { checkbox, confirm } from '@inquirer/prompts';
|
|
12
|
-
import { isInteractiveTerminal } from './utils.js';
|
|
13
|
-
import { assertValidSshTarget } from '../lib/ssh-exec.js';
|
|
14
|
-
import { getProvider, listAllHosts, resolveHost } from '../lib/hosts/registry.js';
|
|
15
|
-
import { getDevice } from '../lib/devices/registry.js';
|
|
16
|
-
import { hostIdentityArgs, sshTargetFor } from '../lib/hosts/types.js';
|
|
17
|
-
import { listSshConfigHosts, listKnownHosts, isSshConfigHost } from '../lib/hosts/ssh-config.js';
|
|
18
|
-
import { probeHost, remoteAgentsVersion, bootstrapAgentsCli, localCliVersion, } from '../lib/hosts/ready.js';
|
|
19
|
-
import { resolveRemoteOsSync } from '../lib/hosts/remote-os.js';
|
|
20
|
-
import { listTasks, loadTask, findTaskByName, findTaskBySessionId, resolveTaskRef } from '../lib/hosts/tasks.js';
|
|
21
|
-
import { reconcileRunningTasks } from '../lib/hosts/reconcile.js';
|
|
22
|
-
import { showHostTaskLog } from '../lib/hosts/logs.js';
|
|
23
|
-
import { stopDispatchedTask } from '../lib/hosts/dispatch.js';
|
|
24
|
-
/** Parse `user@host` or `host` into its pieces. */
|
|
25
|
-
function parseTarget(target) {
|
|
26
|
-
const at = target.indexOf('@');
|
|
27
|
-
if (at === -1)
|
|
28
|
-
return { address: target };
|
|
29
|
-
return { user: target.slice(0, at), address: target.slice(at + 1) };
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Bootstrap/verify agents-cli on a freshly-enrolled host (best-effort, prompts).
|
|
33
|
-
* Callers that just probed the host pass the result through to avoid a second,
|
|
34
|
-
* redundant `uname` round-trip; otherwise we probe here.
|
|
35
|
-
*/
|
|
36
|
-
async function maybeBootstrap(target, hostName, probe = probeHost(target, resolveRemoteOsSync(hostName))) {
|
|
37
|
-
if (!probe.reachable) {
|
|
38
|
-
console.log(chalk.yellow(` Not reachable over SSH yet — skipping bootstrap. Fix key auth, then: agents hosts check ${hostName}`));
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
// Prefer the OS the probe just observed; fall back to the registry hint.
|
|
42
|
-
const os = probe.os ?? resolveRemoteOsSync(hostName);
|
|
43
|
-
const remoteVer = remoteAgentsVersion(target, os);
|
|
44
|
-
const localVer = localCliVersion();
|
|
45
|
-
if (!remoteVer) {
|
|
46
|
-
// Non-TTY: this is a best-effort bootstrap prompt, so report and return
|
|
47
|
-
// instead of hanging on confirm() in a headless/piped shell.
|
|
48
|
-
if (!isInteractiveTerminal()) {
|
|
49
|
-
console.log(chalk.gray(` agents-cli not found on ${hostName} — install it there, then: agents hosts check ${hostName}`));
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const ok = await confirm({ message: ` agents-cli not found on ${hostName}. Install ${localVer ? `v${localVer}` : 'latest'} now?`, default: true });
|
|
53
|
-
if (ok) {
|
|
54
|
-
console.log(chalk.gray(' Installing agents-cli on the host…'));
|
|
55
|
-
const r = bootstrapAgentsCli(target, localVer, os);
|
|
56
|
-
console.log(r.ok ? chalk.green(' Installed.') : chalk.red(` Install failed:\n${r.output}`));
|
|
57
|
-
}
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
const remoteClean = remoteVer.replace(/^v/, '');
|
|
61
|
-
if (localVer && remoteClean !== localVer) {
|
|
62
|
-
if (!isInteractiveTerminal()) {
|
|
63
|
-
console.log(chalk.gray(` ${hostName} has agents-cli ${remoteClean}, you have ${localVer} — versions differ; upgrade the host to match when convenient.`));
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
const ok = await confirm({ message: ` ${hostName} has agents-cli ${remoteClean}, you have ${localVer}. Upgrade to match?`, default: false });
|
|
67
|
-
if (ok) {
|
|
68
|
-
const r = bootstrapAgentsCli(target, localVer, os);
|
|
69
|
-
console.log(r.ok ? chalk.green(' Upgraded.') : chalk.red(` Upgrade failed:\n${r.output}`));
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
async function registerHost(spec) {
|
|
74
|
-
const provider = getProvider('local');
|
|
75
|
-
await provider.register(spec);
|
|
76
|
-
}
|
|
77
|
-
async function doAdd(name, target, opts) {
|
|
78
|
-
// No name + no target → interactive scan of ssh sources.
|
|
79
|
-
if (!name && !target) {
|
|
80
|
-
const existing = new Set((await listAllHosts()).filter((h) => h.enrolled).map((h) => h.name));
|
|
81
|
-
const candidates = [...new Set([...listSshConfigHosts(), ...listKnownHosts()])].filter((c) => !existing.has(c));
|
|
82
|
-
if (candidates.length === 0) {
|
|
83
|
-
console.log(chalk.yellow('No SSH hosts found in ~/.ssh/config or ~/.ssh/known_hosts. Add one explicitly: agents hosts add <name> <user@host>'));
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
const picked = await checkbox({
|
|
87
|
-
message: 'Select hosts to enroll (connection details come from ~/.ssh/config)',
|
|
88
|
-
choices: candidates.map((c) => ({ value: c, name: c })),
|
|
89
|
-
});
|
|
90
|
-
for (const c of picked) {
|
|
91
|
-
// The ssh target is the candidate name itself either way: ssh resolves it
|
|
92
|
-
// for ssh-config hosts, and it's a reachable hostname for known_hosts ones.
|
|
93
|
-
const source = isSshConfigHost(c) ? 'ssh-config' : 'inline';
|
|
94
|
-
const probe = probeHost(c);
|
|
95
|
-
await registerHost({ name: c, provider: 'local', source, ...(source === 'inline' ? { address: c } : {}), os: probe.os, caps: opts.cap });
|
|
96
|
-
console.log(chalk.green(`Enrolled ${c}`) + chalk.gray(` (${source}${probe.os ? `, ${probe.os}` : ''})`));
|
|
97
|
-
if (opts.enroll !== false)
|
|
98
|
-
await maybeBootstrap(c, c, probe);
|
|
99
|
-
}
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
if (!name) {
|
|
103
|
-
console.log(chalk.red('Usage: agents hosts add <name> [user@host]'));
|
|
104
|
-
process.exitCode = 1;
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
let spec;
|
|
108
|
-
let sshTarget = '';
|
|
109
|
-
if (target) {
|
|
110
|
-
assertValidSshTarget(target);
|
|
111
|
-
const { address, user } = parseTarget(target);
|
|
112
|
-
spec = { name, provider: 'local', source: 'inline', address, user, caps: opts.cap, os: opts.os };
|
|
113
|
-
sshTarget = target;
|
|
114
|
-
}
|
|
115
|
-
else if (isSshConfigHost(name)) {
|
|
116
|
-
spec = { name, provider: 'local', source: 'ssh-config', caps: opts.cap, os: opts.os };
|
|
117
|
-
sshTarget = name;
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
// A registered device enrolls with no target — connection details come from
|
|
121
|
-
// the device profile. The main reason to enroll one at all is the overlay
|
|
122
|
-
// metadata (capability tags); plain dispatch already works via the devices
|
|
123
|
-
// provider.
|
|
124
|
-
const device = await getDevice(name);
|
|
125
|
-
if (device && device.auth.method !== 'password') {
|
|
126
|
-
const address = device.address.dnsName ?? device.address.ip;
|
|
127
|
-
if (address) {
|
|
128
|
-
spec = {
|
|
129
|
-
name,
|
|
130
|
-
provider: 'local',
|
|
131
|
-
source: 'inline',
|
|
132
|
-
address,
|
|
133
|
-
user: device.user,
|
|
134
|
-
caps: opts.cap,
|
|
135
|
-
os: opts.os ?? (device.platform !== 'unknown' ? device.platform : undefined),
|
|
136
|
-
};
|
|
137
|
-
sshTarget = device.user ? `${device.user}@${address}` : address;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
if (!spec) {
|
|
141
|
-
if (device?.auth.method === 'password') {
|
|
142
|
-
console.log(chalk.red(`Device "${name}" uses password auth — dispatch needs key auth. Switch it first: agents devices set ${name} --auth key`));
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
console.log(chalk.red(`"${name}" is not in ~/.ssh/config or the devices registry. Pass a target: agents hosts add ${name} <user@host>`));
|
|
146
|
-
}
|
|
147
|
-
process.exitCode = 1;
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
const probe = probeHost(sshTarget);
|
|
152
|
-
if (!spec.os && probe.os)
|
|
153
|
-
spec.os = probe.os;
|
|
154
|
-
await registerHost(spec);
|
|
155
|
-
console.log(chalk.green(`Enrolled ${name}`) + chalk.gray(` (${spec.source}${spec.os ? `, ${spec.os}` : ''}${spec.caps?.length ? `, caps: ${spec.caps.join(',')}` : ''})`));
|
|
156
|
-
if (opts.enroll !== false)
|
|
157
|
-
await maybeBootstrap(sshTarget, name, probe);
|
|
158
|
-
}
|
|
159
|
-
async function doList(json) {
|
|
160
|
-
const hosts = await listAllHosts();
|
|
161
|
-
if (json) {
|
|
162
|
-
console.log(JSON.stringify(hosts, null, 2));
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
if (hosts.length === 0) {
|
|
166
|
-
console.log(chalk.gray('No hosts. Enroll one: agents hosts add <name> <user@host> (or just: agents hosts add)'));
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
console.log(chalk.bold('NAME').padEnd(20) + chalk.bold('SOURCE').padEnd(13) + chalk.bold('TARGET').padEnd(28) + chalk.bold('CAPS'));
|
|
170
|
-
for (const h of hosts) {
|
|
171
|
-
const tgt = h.source === 'ssh-config' ? chalk.gray('(ssh-config)') : `${h.user ? h.user + '@' : ''}${h.address ?? ''}`;
|
|
172
|
-
// Cap TARGET at its column so a long user@host can't shove CAPS out of alignment.
|
|
173
|
-
const tgtW = stringWidth(tgt);
|
|
174
|
-
const tgtCol = tgtW > 28 ? truncateToWidth(tgt, 28) : tgt + ' '.repeat(28 - tgtW);
|
|
175
|
-
// Devices surface their registry as SOURCE (they're synced, not enrolled here).
|
|
176
|
-
const source = h.provider === 'devices' ? 'devices' : h.source;
|
|
177
|
-
const mark = h.dispatchable === false
|
|
178
|
-
? chalk.yellow(' ·password-auth (no dispatch)')
|
|
179
|
-
: h.enrolled ? '' : chalk.gray(' ·available');
|
|
180
|
-
console.log(h.name.padEnd(20) + source.padEnd(13) + tgtCol + (h.caps?.join(',') ?? '') + mark);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
async function doCheck(name) {
|
|
184
|
-
const host = await resolveHost(name);
|
|
185
|
-
if (!host) {
|
|
186
|
-
console.log(chalk.red(`Unknown host "${name}". Known: ${(await listAllHosts()).map((h) => h.name).join(', ') || '(none)'}`));
|
|
187
|
-
process.exitCode = 1;
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
const target = sshTargetFor(host);
|
|
191
|
-
const os = host.os ?? resolveRemoteOsSync(name);
|
|
192
|
-
process.stdout.write(`Probing ${chalk.cyan(name)} (${target})… `);
|
|
193
|
-
const identityArgs = hostIdentityArgs(host);
|
|
194
|
-
const probe = probeHost(target, os, identityArgs);
|
|
195
|
-
if (!probe.reachable) {
|
|
196
|
-
console.log(chalk.red('unreachable'));
|
|
197
|
-
process.exitCode = 1;
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
console.log(chalk.green('reachable') + chalk.gray(probe.os ? ` · ${probe.os}` : ''));
|
|
201
|
-
const ver = remoteAgentsVersion(target, probe.os ?? os, identityArgs);
|
|
202
|
-
console.log(` agents-cli: ${ver ? chalk.green(ver) : chalk.yellow('not installed')}`);
|
|
203
|
-
}
|
|
204
|
-
async function doRemove(name) {
|
|
205
|
-
const host = await resolveHost(name);
|
|
206
|
-
if (!host || !host.enrolled) {
|
|
207
|
-
console.log(chalk.yellow(`"${name}" is not enrolled (nothing to remove).`));
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
if (host.provider === 'devices') {
|
|
211
|
-
// The devices registry owns this entry — hosts remove would silently no-op.
|
|
212
|
-
console.log(chalk.yellow(`"${name}" comes from the devices registry. Remove it there: agents devices rm ${name}`));
|
|
213
|
-
process.exitCode = 1;
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
await getProvider('local').remove(name);
|
|
217
|
-
console.log(chalk.green(`Removed ${name}`));
|
|
218
|
-
}
|
|
219
|
-
async function doPs(json) {
|
|
220
|
-
// Heal any 'running' record whose local follower died (dropped connection,
|
|
221
|
-
// laptop sleep) against the remote `.exit` before listing, so `ps` never shows
|
|
222
|
-
// a finished run stuck at 'running'.
|
|
223
|
-
const tasks = reconcileRunningTasks(listTasks());
|
|
224
|
-
if (json) {
|
|
225
|
-
console.log(JSON.stringify(tasks, null, 2));
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
if (tasks.length === 0) {
|
|
229
|
-
console.log(chalk.gray('No host tasks yet. Dispatch one: agents run <agent> "<task>" --host <name>'));
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
const cols = terminalWidth();
|
|
233
|
-
console.log(chalk.bold('ID').padEnd(11) + chalk.bold('NAME').padEnd(16) + chalk.bold('HOST').padEnd(16) + chalk.bold('AGENT').padEnd(10) + chalk.bold('STATUS').padEnd(11) + chalk.bold('PROMPT'));
|
|
234
|
-
for (const t of tasks) {
|
|
235
|
-
const status = t.status === 'completed' ? chalk.green(t.status) : t.status === 'failed' ? chalk.red(t.status) : chalk.yellow(t.status);
|
|
236
|
-
const nameCol = truncateToWidth(t.name ?? chalk.gray('-'), 15).padEnd(16);
|
|
237
|
-
// Prompt fills the remaining width instead of a fixed 50-char byte slice (98-char rows).
|
|
238
|
-
const promptCol = truncateToWidth(t.prompt, Math.max(12, cols - (11 + 16 + 16 + 10 + 11)));
|
|
239
|
-
console.log(t.id.padEnd(11) + nameCol + t.host.padEnd(16) + t.agent.padEnd(10) + status.padEnd(11) + promptCol);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
async function doLogs(ref, follow, full) {
|
|
243
|
-
// Resolve the ref as a task id first, then fall back to a `--name` handle so
|
|
244
|
-
// `agents hosts logs <name>` works, not just the opaque id.
|
|
245
|
-
const id = loadTask(ref) ? ref : (findTaskByName(ref)?.id ?? findTaskBySessionId(ref)?.id ?? ref);
|
|
246
|
-
const res = await showHostTaskLog(id, follow, full);
|
|
247
|
-
if (!res.found) {
|
|
248
|
-
console.log(chalk.red(`Unknown task "${ref}".`));
|
|
249
|
-
process.exitCode = 1;
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
if (res.exitCode !== undefined)
|
|
253
|
-
process.exitCode = res.exitCode;
|
|
254
|
-
}
|
|
255
|
-
async function doStop(ref) {
|
|
256
|
-
// Heal first so we don't try to kill a process that already exited.
|
|
257
|
-
const current = resolveTaskRef(ref);
|
|
258
|
-
if (!current) {
|
|
259
|
-
console.log(chalk.red(`Unknown task "${ref}".`));
|
|
260
|
-
process.exitCode = 1;
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
const task = reconcileRunningTasks([current])[0] ?? current;
|
|
264
|
-
if (task.status !== 'running') {
|
|
265
|
-
console.log(chalk.gray(`Task ${task.id} is already ${task.status}` + (task.exitCode !== undefined ? ` (exit ${task.exitCode})` : '') + '.'));
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
try {
|
|
269
|
-
const stopped = stopDispatchedTask(task);
|
|
270
|
-
const statusColor = stopped.status === 'completed' ? chalk.green : chalk.yellow;
|
|
271
|
-
const exitNote = stopped.exitCode === 143
|
|
272
|
-
? 'exit 143 / SIGTERM'
|
|
273
|
-
: stopped.exitCode !== undefined
|
|
274
|
-
? `exit ${stopped.exitCode}`
|
|
275
|
-
: stopped.status;
|
|
276
|
-
console.log(chalk.green(`Stopped ${stopped.id}`) +
|
|
277
|
-
chalk.gray(` on ${stopped.host}`) +
|
|
278
|
-
' ' + statusColor(stopped.status) +
|
|
279
|
-
chalk.gray(` (${exitNote})`));
|
|
280
|
-
console.log(chalk.gray(`Logs: agents hosts logs ${stopped.id}`));
|
|
281
|
-
}
|
|
282
|
-
catch (err) {
|
|
283
|
-
console.error(chalk.red(err?.message ?? err));
|
|
284
|
-
process.exitCode = 1;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
/** Register the `agents hosts` command tree. */
|
|
288
|
-
export function registerHostsCommand(program) {
|
|
289
|
-
const hosts = program
|
|
290
|
-
.command('hosts')
|
|
291
|
-
.description('Register and inspect agent hosts (machines you offload runs to with `agents run --host <name>`).');
|
|
292
|
-
hosts
|
|
293
|
-
.command('add [name] [target]')
|
|
294
|
-
.description('Enroll a host. With no args, pick from ~/.ssh/config + known_hosts. `target` is user@host for hosts not in ssh config.')
|
|
295
|
-
.option('--cap <cap...>', 'Capability tag(s) for routing (e.g. --cap gpu)')
|
|
296
|
-
.option('--os <os>', 'Override detected OS label')
|
|
297
|
-
.option('--no-enroll', 'Register only — skip the remote agents-cli bootstrap/version check')
|
|
298
|
-
.action((name, target, opts) => doAdd(name, target, opts));
|
|
299
|
-
hosts
|
|
300
|
-
.command('list')
|
|
301
|
-
.alias('ls')
|
|
302
|
-
.description('List enrolled + ssh-config hosts (metadata only, no probing).')
|
|
303
|
-
.option('--json', 'Output JSON')
|
|
304
|
-
.action((opts) => doList(!!opts.json));
|
|
305
|
-
hosts
|
|
306
|
-
.command('check <name>')
|
|
307
|
-
.description('Probe one host: reachable? agents-cli version?')
|
|
308
|
-
.action((name) => doCheck(name));
|
|
309
|
-
hosts
|
|
310
|
-
.command('remove <name>')
|
|
311
|
-
.alias('rm')
|
|
312
|
-
.description('Remove a host from the registry (does not touch ~/.ssh/config).')
|
|
313
|
-
.action((name) => doRemove(name));
|
|
314
|
-
hosts
|
|
315
|
-
.command('ps')
|
|
316
|
-
.description('List dispatched host tasks.')
|
|
317
|
-
.option('--json', 'Output JSON')
|
|
318
|
-
.action((opts) => doPs(!!opts.json));
|
|
319
|
-
hosts
|
|
320
|
-
.command('logs <id>')
|
|
321
|
-
.description('Show a host task’s concise summary; --full for the raw log, -f to follow a running one.')
|
|
322
|
-
.option('-f, --follow', 'Follow live output')
|
|
323
|
-
.option('-m, --full', 'Show the full raw combined-stdout log instead of the concise summary')
|
|
324
|
-
.action((id, opts) => doLogs(id, !!opts.follow, !!opts.full));
|
|
325
|
-
hosts
|
|
326
|
-
.command('stop <id>')
|
|
327
|
-
.alias('kill')
|
|
328
|
-
.description('Terminate a running host task from this machine (SIGTERM process group; marks failed/143).')
|
|
329
|
-
.action((id) => doStop(id));
|
|
330
|
-
}
|
package/dist/commands/lock.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents lock` — write a deterministic `agents.lock` for the resolved resource
|
|
3
|
-
* set at the project root; `agents lock --frozen` verifies the live resources
|
|
4
|
-
* match that lock EXACTLY and fails closed (non-zero exit + a clear diff) on any
|
|
5
|
-
* drift. The reproducible-CI slice of governance #337.
|
|
6
|
-
*
|
|
7
|
-
* This is OFF the default path: normal `agents add` / `agents sync` never touch
|
|
8
|
-
* the lock. Generation and verification only run when this command is invoked.
|
|
9
|
-
*/
|
|
10
|
-
import { Command } from 'commander';
|
|
11
|
-
/** Register the `agents lock` command. */
|
|
12
|
-
export declare function registerLockCommand(program: Command): void;
|
package/dist/commands/lock.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents lock` — write a deterministic `agents.lock` for the resolved resource
|
|
3
|
-
* set at the project root; `agents lock --frozen` verifies the live resources
|
|
4
|
-
* match that lock EXACTLY and fails closed (non-zero exit + a clear diff) on any
|
|
5
|
-
* drift. The reproducible-CI slice of governance #337.
|
|
6
|
-
*
|
|
7
|
-
* This is OFF the default path: normal `agents add` / `agents sync` never touch
|
|
8
|
-
* the lock. Generation and verification only run when this command is invoked.
|
|
9
|
-
*/
|
|
10
|
-
import chalk from 'chalk';
|
|
11
|
-
import { enumerateLockSources, buildLock, writeLock, readLock, verifyLock, lockDiffIsClean, resolveProjectRoot, LOCK_FILENAME, } from '../lib/lock.js';
|
|
12
|
-
/** Register the `agents lock` command. */
|
|
13
|
-
export function registerLockCommand(program) {
|
|
14
|
-
program
|
|
15
|
-
.command('lock')
|
|
16
|
-
.summary('Write or verify agents.lock — a SHA-256 manifest of resolved resources')
|
|
17
|
-
.description('Capture a deterministic SHA-256 per resolved resource file (commands, skills, hooks, rules, mcp, permissions, subagents — project > user > system > extras) into an agents.lock at the project root.\n\n' +
|
|
18
|
-
'Run bare to (re)generate the lock. Pass --frozen to VERIFY the live resolved resources match an existing agents.lock exactly — it exits non-zero with an added/removed/changed diff on any mismatch, and errors if no lock exists yet. That is the reproducible-CI gate; normal installs and syncs are unaffected.')
|
|
19
|
-
.option('--cwd <path>', 'Working directory to resolve resources and the project root from')
|
|
20
|
-
.option('--frozen', 'Verify resolved resources match agents.lock exactly; fail (non-zero) on any drift', false)
|
|
21
|
-
.action((opts) => {
|
|
22
|
-
runLock(opts);
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
function runLock(opts) {
|
|
26
|
-
const cwd = opts.cwd || process.cwd();
|
|
27
|
-
const projectRoot = resolveProjectRoot(cwd);
|
|
28
|
-
const sources = enumerateLockSources(cwd);
|
|
29
|
-
if (opts.frozen) {
|
|
30
|
-
verifyFrozen(projectRoot, sources);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const lock = buildLock(sources);
|
|
34
|
-
const written = writeLock(projectRoot, lock);
|
|
35
|
-
const count = Object.keys(lock.resources).length;
|
|
36
|
-
console.log(chalk.green(`Wrote ${LOCK_FILENAME}`) +
|
|
37
|
-
chalk.gray(` — ${count} resource file(s) → ${written}`));
|
|
38
|
-
}
|
|
39
|
-
function verifyFrozen(projectRoot, sources) {
|
|
40
|
-
let existing;
|
|
41
|
-
try {
|
|
42
|
-
existing = readLock(projectRoot);
|
|
43
|
-
}
|
|
44
|
-
catch (e) {
|
|
45
|
-
console.error(chalk.red(`agents lock --frozen: ${e.message}`));
|
|
46
|
-
process.exitCode = 1;
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (!existing) {
|
|
50
|
-
console.error(chalk.red(`No ${LOCK_FILENAME} at ${projectRoot}.`));
|
|
51
|
-
console.error(chalk.gray('Generate one first: agents lock'));
|
|
52
|
-
process.exitCode = 1;
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const diff = verifyLock(existing, sources);
|
|
56
|
-
if (lockDiffIsClean(diff)) {
|
|
57
|
-
const count = Object.keys(existing.resources).length;
|
|
58
|
-
console.log(chalk.green(`✓ ${count} resource file(s) match ${LOCK_FILENAME}`));
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
console.error(chalk.red(`✗ resources drifted from ${LOCK_FILENAME}:`));
|
|
62
|
-
for (const key of diff.changed)
|
|
63
|
-
console.error(chalk.yellow(` changed ${key}`));
|
|
64
|
-
for (const key of diff.added)
|
|
65
|
-
console.error(chalk.yellow(` added ${key}`));
|
|
66
|
-
for (const key of diff.removed)
|
|
67
|
-
console.error(chalk.yellow(` removed ${key}`));
|
|
68
|
-
console.error(chalk.gray('Re-lock once the change is intended: agents lock'));
|
|
69
|
-
process.exitCode = 1;
|
|
70
|
-
}
|
package/dist/commands/pull.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Removed `agents pull` command.
|
|
3
|
-
*
|
|
4
|
-
* `agents pull` was a god-command bundling git fetch+ff with local
|
|
5
|
-
* materialization (install CLIs, register MCP, sync resources, register hooks,
|
|
6
|
-
* etc.). It is replaced by the explicit split:
|
|
7
|
-
*
|
|
8
|
-
* - `agents repo pull <alias>` — git fetch+ff on system / user / extra
|
|
9
|
-
* - `agents sync [--local] [agent]` — re-materialize installed version homes
|
|
10
|
-
* - `agents setup` — first-time bootstrap
|
|
11
|
-
*
|
|
12
|
-
* The command is kept registered so old muscle-memory invocations get a clear
|
|
13
|
-
* redirect instead of an "unknown command" error.
|
|
14
|
-
*/
|
|
15
|
-
import type { Command } from 'commander';
|
|
16
|
-
/** Register the deprecated `agents pull` command as a hard-error redirect. */
|
|
17
|
-
export declare function registerPullCommand(program: Command): void;
|
package/dist/commands/pull.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Removed `agents pull` command.
|
|
3
|
-
*
|
|
4
|
-
* `agents pull` was a god-command bundling git fetch+ff with local
|
|
5
|
-
* materialization (install CLIs, register MCP, sync resources, register hooks,
|
|
6
|
-
* etc.). It is replaced by the explicit split:
|
|
7
|
-
*
|
|
8
|
-
* - `agents repo pull <alias>` — git fetch+ff on system / user / extra
|
|
9
|
-
* - `agents sync [--local] [agent]` — re-materialize installed version homes
|
|
10
|
-
* - `agents setup` — first-time bootstrap
|
|
11
|
-
*
|
|
12
|
-
* The command is kept registered so old muscle-memory invocations get a clear
|
|
13
|
-
* redirect instead of an "unknown command" error.
|
|
14
|
-
*/
|
|
15
|
-
import { setHelpSections } from '../lib/help.js';
|
|
16
|
-
const REDIRECT = 'agents-cli: "agents pull" was removed.\n' +
|
|
17
|
-
' Git pull a repo: agents repo pull <alias> (system | user | <extra>)\n' +
|
|
18
|
-
' Re-materialize: agents sync --local (all agents; or: agents sync <agent>)\n' +
|
|
19
|
-
' First-time setup: agents setup\n\n';
|
|
20
|
-
/** Register the deprecated `agents pull` command as a hard-error redirect. */
|
|
21
|
-
export function registerPullCommand(program) {
|
|
22
|
-
const pullCmd = program
|
|
23
|
-
.command('pull [agent]')
|
|
24
|
-
.description('Removed. See `agents repo pull` + `agents sync`.')
|
|
25
|
-
.option('-y, --yes', '(no-op)')
|
|
26
|
-
.option('--skip-clis', '(no-op)');
|
|
27
|
-
setHelpSections(pullCmd, {
|
|
28
|
-
notes: `
|
|
29
|
-
Removed. Equivalents:
|
|
30
|
-
agents repo pull <alias> git pull (system | user | extra)
|
|
31
|
-
agents sync --local re-materialize version homes (or: agents sync <agent>)
|
|
32
|
-
agents setup first-time bootstrap
|
|
33
|
-
`,
|
|
34
|
-
});
|
|
35
|
-
pullCmd.action(() => {
|
|
36
|
-
process.stderr.write(REDIRECT);
|
|
37
|
-
process.exit(2);
|
|
38
|
-
});
|
|
39
|
-
}
|
package/dist/commands/push.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Removed `agents push` command.
|
|
3
|
-
*
|
|
4
|
-
* `agents push` was previously the inverse of the god-command `agents pull` —
|
|
5
|
-
* it pushed local commits in `~/.agents/` upstream. It is replaced by the
|
|
6
|
-
* explicit `agents repo push <alias>` so the target repo is named, matching
|
|
7
|
-
* the post-split `agents repo pull` shape.
|
|
8
|
-
*
|
|
9
|
-
* Kept registered so muscle-memory invocations (including `agents push --help`)
|
|
10
|
-
* land on a clear redirect instead of cascading to the top-level help.
|
|
11
|
-
*/
|
|
12
|
-
import type { Command } from 'commander';
|
|
13
|
-
/** Register the deprecated `agents push` command as a hard-error redirect. */
|
|
14
|
-
export declare function registerPushCommand(program: Command): void;
|
package/dist/commands/push.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Removed `agents push` command.
|
|
3
|
-
*
|
|
4
|
-
* `agents push` was previously the inverse of the god-command `agents pull` —
|
|
5
|
-
* it pushed local commits in `~/.agents/` upstream. It is replaced by the
|
|
6
|
-
* explicit `agents repo push <alias>` so the target repo is named, matching
|
|
7
|
-
* the post-split `agents repo pull` shape.
|
|
8
|
-
*
|
|
9
|
-
* Kept registered so muscle-memory invocations (including `agents push --help`)
|
|
10
|
-
* land on a clear redirect instead of cascading to the top-level help.
|
|
11
|
-
*/
|
|
12
|
-
import { setHelpSections } from '../lib/help.js';
|
|
13
|
-
const REDIRECT = 'agents-cli: "agents push" was removed.\n' +
|
|
14
|
-
' Git push a repo: agents repo push <alias> (system | user | <extra>)\n\n';
|
|
15
|
-
/** Register the deprecated `agents push` command as a hard-error redirect. */
|
|
16
|
-
export function registerPushCommand(program) {
|
|
17
|
-
const pushCmd = program
|
|
18
|
-
.command('push [alias]')
|
|
19
|
-
.description('Removed. See `agents repo push`.');
|
|
20
|
-
setHelpSections(pushCmd, {
|
|
21
|
-
notes: `
|
|
22
|
-
Removed. Equivalent:
|
|
23
|
-
agents repo push <alias> git push (system | user | extra)
|
|
24
|
-
`,
|
|
25
|
-
});
|
|
26
|
-
pushCmd.action(() => {
|
|
27
|
-
process.stderr.write(REDIRECT);
|
|
28
|
-
process.exit(2);
|
|
29
|
-
});
|
|
30
|
-
}
|
package/dist/commands/set.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents set` — ergonomic top-level setter for per-agent/version run defaults.
|
|
3
|
-
*
|
|
4
|
-
* `agents set claude@2.1.220 --model opus-5` pins the default model (and/or
|
|
5
|
-
* mode) that `agents run` uses for that agent version. It reads and writes the
|
|
6
|
-
* same store as `agents defaults run set` (agents.yaml -> run.defaults), so the
|
|
7
|
-
* two stay consistent — `set` is just the short front door.
|
|
8
|
-
*
|
|
9
|
-
* agents set # list every configured default
|
|
10
|
-
* agents set claude@2.1.220 # show the default for one version
|
|
11
|
-
* agents set claude@2.1.220 --model opus-5
|
|
12
|
-
* agents set 'claude:*' --mode auto --model opus
|
|
13
|
-
*/
|
|
14
|
-
import type { Command } from 'commander';
|
|
15
|
-
export declare function registerSetCommand(program: Command): void;
|
package/dist/commands/set.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents set` — ergonomic top-level setter for per-agent/version run defaults.
|
|
3
|
-
*
|
|
4
|
-
* `agents set claude@2.1.220 --model opus-5` pins the default model (and/or
|
|
5
|
-
* mode) that `agents run` uses for that agent version. It reads and writes the
|
|
6
|
-
* same store as `agents defaults run set` (agents.yaml -> run.defaults), so the
|
|
7
|
-
* two stay consistent — `set` is just the short front door.
|
|
8
|
-
*
|
|
9
|
-
* agents set # list every configured default
|
|
10
|
-
* agents set claude@2.1.220 # show the default for one version
|
|
11
|
-
* agents set claude@2.1.220 --model opus-5
|
|
12
|
-
* agents set 'claude:*' --mode auto --model opus
|
|
13
|
-
*/
|
|
14
|
-
import chalk from 'chalk';
|
|
15
|
-
import { setHelpSections } from '../lib/help.js';
|
|
16
|
-
import { formatRunDefaultEntry, listRunDefaults, parseRunDefaultSelector, setRunDefault, } from '../lib/run-defaults.js';
|
|
17
|
-
export function registerSetCommand(program) {
|
|
18
|
-
const set = program
|
|
19
|
-
.command('set [selector]')
|
|
20
|
-
.description('Set the default model/mode an agent version uses for `agents run`')
|
|
21
|
-
.option('--model <model>', 'Default model or model alias, forwarded via --model')
|
|
22
|
-
.option('--mode <mode>', "Default mode: plan, edit, auto, skip. 'full' accepted as alias for skip.")
|
|
23
|
-
.action((selector, options) => {
|
|
24
|
-
try {
|
|
25
|
-
const hasFlags = options.model !== undefined || options.mode !== undefined;
|
|
26
|
-
if (!selector) {
|
|
27
|
-
if (hasFlags) {
|
|
28
|
-
throw new Error('Selector is required when passing --model/--mode. Example: agents set claude@2.1.220 --model opus-5');
|
|
29
|
-
}
|
|
30
|
-
const entries = listRunDefaults();
|
|
31
|
-
if (entries.length === 0) {
|
|
32
|
-
console.log(chalk.gray('No agent defaults configured.'));
|
|
33
|
-
console.log(chalk.gray('Set one with: agents set claude@2.1.220 --model opus-5'));
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
console.log(chalk.bold('Agent Defaults\n'));
|
|
37
|
-
for (const entry of entries) {
|
|
38
|
-
console.log(` ${formatRunDefaultEntry(entry)}`);
|
|
39
|
-
}
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
if (!hasFlags) {
|
|
43
|
-
const parsed = parseRunDefaultSelector(selector);
|
|
44
|
-
const entry = listRunDefaults().find((e) => e.selector === parsed.selector);
|
|
45
|
-
if (!entry || (!entry.defaults.mode && !entry.defaults.model)) {
|
|
46
|
-
console.log(chalk.gray(`No default set for ${parsed.selector}.`));
|
|
47
|
-
console.log(chalk.gray(`Set one with: agents set ${selector} --model <model>`));
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
console.log(` ${formatRunDefaultEntry(entry)}`);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
const entry = setRunDefault(selector, {
|
|
54
|
-
...(options.mode !== undefined ? { mode: options.mode } : {}),
|
|
55
|
-
...(options.model !== undefined ? { model: options.model } : {}),
|
|
56
|
-
});
|
|
57
|
-
console.log(chalk.green('Set default:'));
|
|
58
|
-
console.log(` ${formatRunDefaultEntry(entry)}`);
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
console.error(chalk.red(err.message));
|
|
62
|
-
process.exit(1);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
setHelpSections(set, {
|
|
66
|
-
examples: `
|
|
67
|
-
agents set claude@2.1.220 --model opus-5
|
|
68
|
-
agents set 'claude:*' --mode auto --model opus
|
|
69
|
-
agents set claude@2.1.220
|
|
70
|
-
agents set
|
|
71
|
-
`,
|
|
72
|
-
notes: `
|
|
73
|
-
Selectors use <agent>@<version> or <agent>:<version>; * matches all versions.
|
|
74
|
-
Exact selectors override wildcard selectors field by field.
|
|
75
|
-
Writes the same store as 'agents defaults run set'. Explicit flags on
|
|
76
|
-
'agents run' always win over configured defaults.
|
|
77
|
-
`,
|
|
78
|
-
});
|
|
79
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents setup share` — interactive wizard to configure the `agents share`
|
|
3
|
-
* endpoint (Cloudflare R2 + Worker). A friendly front door over the existing
|
|
4
|
-
* `agents share setup` (provision) and `agents share join` flows, reusing their
|
|
5
|
-
* exact logic so there is a single source of truth for provisioning.
|
|
6
|
-
*
|
|
7
|
-
* Idempotent: re-running shows the current endpoint and offers to reconfigure.
|
|
8
|
-
*/
|
|
9
|
-
import type { Command } from 'commander';
|
|
10
|
-
/**
|
|
11
|
-
* Interactive share setup. Returns true if the user configured (or already had)
|
|
12
|
-
* an endpoint, false if they skipped. Never throws on user cancel — callers
|
|
13
|
-
* (the `agents setup` hub) rely on that to keep the fresh-machine flow going.
|
|
14
|
-
*/
|
|
15
|
-
export declare function runShareWizard(): Promise<boolean>;
|
|
16
|
-
/** Register `agents setup share` under the parent `setup` command. */
|
|
17
|
-
export declare function registerSetupShareCommand(setupCmd: Command): void;
|