@phnx-labs/agents-cli 1.22.35 → 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 +666 -2
- package/README.md +75 -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 +67 -0
- package/dist/commands/share.js +275 -12
- 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/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 +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-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/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 +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 +6 -12
- package/dist/lib/startup/command-registry.js +11 -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
package/scripts/postinstall.js
CHANGED
|
@@ -375,49 +375,52 @@ function retargetManagedLinksToNativeBin() {
|
|
|
375
375
|
}
|
|
376
376
|
|
|
377
377
|
/**
|
|
378
|
-
* Self-heal long-running processes onto the just-installed code (
|
|
378
|
+
* Self-heal long-running processes onto the just-installed code (darwin + linux).
|
|
379
379
|
*
|
|
380
380
|
* The root cause behind stale-behavior bugs is a daemon/broker that keeps
|
|
381
381
|
* running pre-upgrade code for days. An in-place `npm i -g` swaps the files but
|
|
382
382
|
* not the running processes — so we bounce them here, the one moment we know the
|
|
383
|
-
* code just changed.
|
|
384
|
-
* install
|
|
383
|
+
* code just changed. Always start (or restart) the supervised daemon so a fresh
|
|
384
|
+
* install gets launchd/systemd KeepAlive without waiting for routines add.
|
|
385
|
+
* Best-effort and non-fatal: a failure must never break the install. Skipped in
|
|
386
|
+
* CI and when AGENTS_NO_HEAL=1. Windows is out of scope (detached-only, no KeepAlive).
|
|
385
387
|
*/
|
|
386
388
|
async function healLongRunningProcesses() {
|
|
387
|
-
if (process.platform !== 'darwin') return;
|
|
389
|
+
if (process.platform !== 'darwin' && process.platform !== 'linux') return;
|
|
388
390
|
if (process.env.CI || process.env.AGENTS_NO_HEAL === '1') return;
|
|
389
391
|
|
|
390
392
|
// Retire the legacy standalone secrets-agent service FIRST (#416 step 2) so
|
|
391
393
|
// that when the daemon (re)starts below its coexistence guard sees no
|
|
392
394
|
// standalone broker and hosts the broker socket itself. No-op if no legacy
|
|
393
|
-
// plist is present; never blocks.
|
|
394
|
-
let retiredLegacyBroker = false;
|
|
395
|
+
// plist is present; never blocks. Darwin-only in practice (launchd service).
|
|
395
396
|
try {
|
|
396
397
|
const a = await import('../dist/lib/secrets/agent.js');
|
|
397
398
|
if (a.secretsAgentServiceInstalled?.()) {
|
|
398
399
|
a.retireLegacySecretsAgentService?.();
|
|
399
|
-
retiredLegacyBroker = true;
|
|
400
400
|
console.log(' Retired the standalone secrets-agent service — the daemon now hosts the broker.');
|
|
401
401
|
}
|
|
402
402
|
} catch { /* best effort */ }
|
|
403
403
|
|
|
404
|
-
//
|
|
405
|
-
//
|
|
406
|
-
// (
|
|
407
|
-
//
|
|
408
|
-
// socket has a host.
|
|
404
|
+
// Always (re)start so first install writes the LaunchAgent/systemd unit and
|
|
405
|
+
// upgrades bounce onto the new binary — but honor daemon.enabled for cold
|
|
406
|
+
// starts (SING-4a). If it was already running under a disable, stop and leave
|
|
407
|
+
// it down so upgrade does not resurrect a killed switch.
|
|
409
408
|
try {
|
|
410
409
|
const d = await import('../dist/lib/daemon.js');
|
|
411
|
-
|
|
410
|
+
const { isDaemonEnabled } = await import('../dist/lib/device-config.js');
|
|
411
|
+
const wasRunning = Boolean(d.isDaemonRunning?.());
|
|
412
|
+
const enabled = typeof isDaemonEnabled === 'function' ? isDaemonEnabled() : true;
|
|
413
|
+
if (wasRunning) {
|
|
412
414
|
d.stopDaemon?.();
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
415
|
+
if (enabled) {
|
|
416
|
+
d.startDaemon?.(AGENTS_BIN);
|
|
417
|
+
console.log(' Restarted the routines daemon onto this version.');
|
|
418
|
+
} else {
|
|
419
|
+
console.log(' Stopped the routines daemon (daemon.enabled=false — not restarted).');
|
|
420
|
+
}
|
|
421
|
+
} else if (enabled) {
|
|
419
422
|
d.startDaemon?.(AGENTS_BIN);
|
|
420
|
-
console.log(' Started the
|
|
423
|
+
console.log(' Started the always-on agents daemon.');
|
|
421
424
|
}
|
|
422
425
|
} catch { /* best effort */ }
|
|
423
426
|
}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Defaults command tree.
|
|
3
|
-
*
|
|
4
|
-
* `agents defaults run ...` manages selector-based defaults for `agents run`.
|
|
5
|
-
*/
|
|
6
|
-
import chalk from 'chalk';
|
|
7
|
-
import { setHelpSections } from '../lib/help.js';
|
|
8
|
-
import { formatRunDefaultEntry, listRunDefaults, setRunDefault, unsetRunDefault, } from '../lib/run-defaults.js';
|
|
9
|
-
import { getProjectRoot, setProjectRoot } from '../lib/project-root.js';
|
|
10
|
-
export function registerDefaultsCommands(program) {
|
|
11
|
-
const defaults = program
|
|
12
|
-
.command('defaults')
|
|
13
|
-
.description('Manage default options for agents-cli commands');
|
|
14
|
-
const run = defaults
|
|
15
|
-
.command('run')
|
|
16
|
-
.description('Manage selector-based defaults for `agents run`');
|
|
17
|
-
setHelpSections(run, {
|
|
18
|
-
examples: `
|
|
19
|
-
agents defaults run list
|
|
20
|
-
agents defaults run set 'claude:*' --mode auto --model opus
|
|
21
|
-
agents defaults run set claude@2.1.45 --mode plan --model sonnet
|
|
22
|
-
agents defaults run unset 'claude:*'
|
|
23
|
-
`,
|
|
24
|
-
notes: `
|
|
25
|
-
Selectors use <agent>:<version>. Use * for all versions of an agent.
|
|
26
|
-
Exact selectors override wildcard selectors field by field.
|
|
27
|
-
Explicit flags on agents run always win over configured defaults.
|
|
28
|
-
`,
|
|
29
|
-
});
|
|
30
|
-
run
|
|
31
|
-
.command('list')
|
|
32
|
-
.description('List configured run defaults')
|
|
33
|
-
.action(() => {
|
|
34
|
-
const entries = listRunDefaults();
|
|
35
|
-
if (entries.length === 0) {
|
|
36
|
-
console.log(chalk.gray('No run defaults configured.'));
|
|
37
|
-
console.log(chalk.gray("Set one with: agents defaults run set 'claude:*' --mode auto --model opus"));
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
console.log(chalk.bold('Run Defaults\n'));
|
|
41
|
-
for (const entry of entries) {
|
|
42
|
-
console.log(` ${formatRunDefaultEntry(entry)}`);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
run
|
|
46
|
-
.command('set <selector>')
|
|
47
|
-
.description('Set defaults for an agent/version selector')
|
|
48
|
-
.option('--mode <mode>', "Default mode: plan, edit, auto, skip. 'full' accepted as alias for skip.")
|
|
49
|
-
.option('--model <model>', 'Default model or model alias, forwarded via --model')
|
|
50
|
-
.option('--effort <effort>', 'Default reasoning effort: low, medium, high, xhigh, max, or auto')
|
|
51
|
-
.action((selector, options) => {
|
|
52
|
-
try {
|
|
53
|
-
const entry = setRunDefault(selector, {
|
|
54
|
-
...(options.mode !== undefined ? { mode: options.mode } : {}),
|
|
55
|
-
...(options.model !== undefined ? { model: options.model } : {}),
|
|
56
|
-
...(options.effort !== undefined ? { effort: options.effort } : {}),
|
|
57
|
-
});
|
|
58
|
-
console.log(chalk.green('Set run default:'));
|
|
59
|
-
console.log(` ${formatRunDefaultEntry(entry)}`);
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
console.error(chalk.red(err.message));
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
run
|
|
67
|
-
.command('unset <selector>')
|
|
68
|
-
.description('Remove defaults for an agent/version selector')
|
|
69
|
-
.action((selector) => {
|
|
70
|
-
try {
|
|
71
|
-
const removed = unsetRunDefault(selector);
|
|
72
|
-
if (removed) {
|
|
73
|
-
console.log(chalk.green(`Removed run default ${selector}`));
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
console.log(chalk.gray(`No run default matched ${selector}`));
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch (err) {
|
|
80
|
-
console.error(chalk.red(err.message));
|
|
81
|
-
process.exit(1);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
defaults
|
|
85
|
-
.command('project-root [path]')
|
|
86
|
-
.description('Show or set the projects root for `agents run --project` (auto-inferred when unset)')
|
|
87
|
-
.action((rootPath) => {
|
|
88
|
-
try {
|
|
89
|
-
if (!rootPath) {
|
|
90
|
-
const current = getProjectRoot();
|
|
91
|
-
if (current) {
|
|
92
|
-
console.log(`Projects root: ${chalk.white(current)}`);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
console.log(chalk.gray('Projects root not set — auto-inferred and cached on first `--project` use.'));
|
|
96
|
-
}
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
const stored = setProjectRoot(rootPath);
|
|
100
|
-
console.log(chalk.green(`Set projects root: ${stored}`));
|
|
101
|
-
}
|
|
102
|
-
catch (err) {
|
|
103
|
-
console.error(chalk.red(err.message));
|
|
104
|
-
process.exit(1);
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents export <agent>[@<version>]` — copy an isolated install's config out to the
|
|
3
|
-
* user's real `~/.<agent>`.
|
|
4
|
-
*
|
|
5
|
-
* The exit door for `--isolated`. Default is additive: your files are never modified,
|
|
6
|
-
* and anything that collides is written beside yours so you can diff and take what you
|
|
7
|
-
* want. A receipt records what came from the export, so "which of these are mine?" has
|
|
8
|
-
* an answer and the whole thing can be undone.
|
|
9
|
-
*/
|
|
10
|
-
import type { Command } from 'commander';
|
|
11
|
-
export declare function registerExportCommand(program: Command): void;
|
package/dist/commands/export.js
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { execFileSync } from 'child_process';
|
|
3
|
-
import { confirm, select } from '@inquirer/prompts';
|
|
4
|
-
import { AGENTS, agentLabel, formatAgentError, resolveAgentName } from '../lib/agents.js';
|
|
5
|
-
import { listInstalledVersions, isVersionIsolated } from '../lib/versions.js';
|
|
6
|
-
import { planExport, executeExport, CONFLICT_SUFFIX } from '../lib/export.js';
|
|
7
|
-
import { isInteractiveTerminal, isPromptCancelled } from './utils.js';
|
|
8
|
-
function isolatedVersions(agent) {
|
|
9
|
-
return listInstalledVersions(agent).filter((v) => isVersionIsolated(agent, v));
|
|
10
|
-
}
|
|
11
|
-
/** Explain a blocker in terms of what the user should do instead. */
|
|
12
|
-
function reportBlocker(plan) {
|
|
13
|
-
const label = agentLabel(plan.agent);
|
|
14
|
-
const b = plan.blocker;
|
|
15
|
-
switch (b.kind) {
|
|
16
|
-
case 'not-installed':
|
|
17
|
-
console.log(chalk.red(`${label}@${plan.version} is not installed.`));
|
|
18
|
-
console.log(chalk.gray(` Installed: ${listInstalledVersions(plan.agent).join(', ') || 'none'}`));
|
|
19
|
-
break;
|
|
20
|
-
case 'not-isolated':
|
|
21
|
-
console.log(chalk.yellow(`${label}@${plan.version} is not an isolated install.`));
|
|
22
|
-
console.log(chalk.gray(` A normal install's config already IS ${plan.dest} (adoption symlinks it),`));
|
|
23
|
-
console.log(chalk.gray(' so there is nothing to export. To un-adopt it, use: agents uninstall'));
|
|
24
|
-
break;
|
|
25
|
-
case 'no-config':
|
|
26
|
-
console.log(chalk.yellow(`${label}@${plan.version} has no config to export yet (${b.source} is empty).`));
|
|
27
|
-
console.log(chalk.gray(` Run it once first: agents run ${plan.agent}@${plan.version}`));
|
|
28
|
-
break;
|
|
29
|
-
case 'dest-adopted':
|
|
30
|
-
console.log(chalk.red(`${b.realPath} is managed by agents-cli (adopted by ${label}@${b.adoptedVersion}).`));
|
|
31
|
-
console.log(chalk.gray(' Exporting would write into that version\'s home, not your real config.'));
|
|
32
|
-
console.log(chalk.gray(` Release it first: agents uninstall (or agents remove ${plan.agent}@${b.adoptedVersion})`));
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/** Unified diff between the user's file and the incoming one, via git. */
|
|
37
|
-
function printDiff(existing, incoming) {
|
|
38
|
-
try {
|
|
39
|
-
execFileSync('git', ['diff', '--no-index', '--color', '--', existing, incoming], {
|
|
40
|
-
stdio: ['ignore', 'inherit', 'ignore'],
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
// git diff --no-index exits 1 when files differ; output already streamed.
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
function printPlan(plan, opts) {
|
|
48
|
-
const label = agentLabel(plan.agent);
|
|
49
|
-
console.log(chalk.bold(`Export ${label}@${plan.version} -> ${plan.dest} ${chalk.gray(`[${plan.mode}]`)}\n`));
|
|
50
|
-
console.log(` ${chalk.gray('from')} ${plan.source}`);
|
|
51
|
-
console.log(` ${chalk.gray('to')} ${plan.stagedPath ?? plan.dest}`);
|
|
52
|
-
console.log();
|
|
53
|
-
if (plan.mode === 'replace') {
|
|
54
|
-
console.log(chalk.yellow(` Replacing ${plan.dest} wholesale — ${plan.writes.length} file(s).`));
|
|
55
|
-
if (plan.backupPath)
|
|
56
|
-
console.log(chalk.gray(` Your current config moves to: ${plan.backupPath}`));
|
|
57
|
-
else if (plan.destKind === 'foreign-symlink') {
|
|
58
|
-
console.log(chalk.yellow(` ${plan.dest} is a symlink agents-cli does not own; it will be removed.`));
|
|
59
|
-
console.log(chalk.gray(' Its target is left untouched.'));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
else if (plan.mode === 'staged') {
|
|
63
|
-
console.log(chalk.gray(` Writing ${plan.writes.length} file(s) into ${plan.stagedPath}.`));
|
|
64
|
-
console.log(chalk.gray(' Nothing is activated — your config is untouched.'));
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
if (plan.writes.length > 0) {
|
|
68
|
-
console.log(chalk.green(` ${plan.writes.length} new file(s) will be added:`));
|
|
69
|
-
for (const w of plan.writes.slice(0, 15))
|
|
70
|
-
console.log(chalk.gray(` + ${w.rel}`));
|
|
71
|
-
if (plan.writes.length > 15)
|
|
72
|
-
console.log(chalk.gray(` + ${plan.writes.length - 15} more`));
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
console.log(chalk.gray(' No new files to add.'));
|
|
76
|
-
}
|
|
77
|
-
if (plan.conflicts.length > 0) {
|
|
78
|
-
console.log();
|
|
79
|
-
console.log(chalk.yellow(` ${plan.conflicts.length} file(s) you already have — YOURS ARE NOT MODIFIED.`));
|
|
80
|
-
console.log(chalk.gray(` The incoming version is written beside each as *${CONFLICT_SUFFIX}:`));
|
|
81
|
-
for (const c of plan.conflicts.slice(0, 15))
|
|
82
|
-
console.log(chalk.gray(` ~ ${c.rel}`));
|
|
83
|
-
if (plan.conflicts.length > 15)
|
|
84
|
-
console.log(chalk.gray(` ~ ${plan.conflicts.length - 15} more`));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
if (opts.diff && plan.conflicts.length > 0) {
|
|
88
|
-
for (const c of plan.conflicts) {
|
|
89
|
-
console.log(chalk.bold(`\n─── ${c.rel} ───`));
|
|
90
|
-
printDiff(c.existing, c.source);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
console.log(chalk.gray(`\n Receipt: ${plan.receiptPath}`));
|
|
94
|
-
}
|
|
95
|
-
export function registerExportCommand(program) {
|
|
96
|
-
program
|
|
97
|
-
.command('export <spec>')
|
|
98
|
-
.description('Copy an isolated install\'s config out to your real ~/.<agent>')
|
|
99
|
-
.option('--replace', 'Replace your config wholesale (yours is backed up) instead of merging')
|
|
100
|
-
.option('--staged', 'Write into ~/.<agent>/.agents-export-<ts>/ and activate nothing')
|
|
101
|
-
.option('--diff', 'Show a unified diff for each file you already have')
|
|
102
|
-
.option('--dry-run', 'Show what would change without writing anything')
|
|
103
|
-
.option('-y, --yes', 'Skip the confirmation prompt')
|
|
104
|
-
.addHelpText('after', `
|
|
105
|
-
Modes:
|
|
106
|
-
(default) merge — additive. Your files are NEVER modified. Anything that
|
|
107
|
-
collides is written beside yours as <name>${CONFLICT_SUFFIX}
|
|
108
|
-
so you can diff and take the parts you want.
|
|
109
|
-
--replace — the isolated config becomes ~/.<agent>; yours is moved to
|
|
110
|
-
backups/<agent>/<ts>. For promoting a sandbox wholesale.
|
|
111
|
-
--staged — dump the tree into ~/.<agent>/.agents-export-<ts>/ and
|
|
112
|
-
activate nothing. For inspecting first.
|
|
113
|
-
|
|
114
|
-
Every mode writes a receipt to ~/.<agent>/.agents-cli-export.json listing exactly
|
|
115
|
-
what came from the export — so you can tell your settings from the CLI's, and undo it.
|
|
116
|
-
|
|
117
|
-
Examples:
|
|
118
|
-
agents export codex --dry-run # see the plan
|
|
119
|
-
agents export codex --diff # ...and the deltas on colliding files
|
|
120
|
-
agents export codex # additive; nothing of yours changes
|
|
121
|
-
agents export codex@0.144.6 --replace # promote the sandbox wholesale
|
|
122
|
-
|
|
123
|
-
Note: file CONTENTS are never auto-merged. The TOML parser here does not preserve
|
|
124
|
-
comments, so merging keys would silently delete them. You get both files and a diff.
|
|
125
|
-
`)
|
|
126
|
-
.action(async (spec, options) => {
|
|
127
|
-
if (options.replace && options.staged) {
|
|
128
|
-
console.error(chalk.red('--replace and --staged are mutually exclusive; pass only one.'));
|
|
129
|
-
process.exit(1);
|
|
130
|
-
}
|
|
131
|
-
const mode = options.replace ? 'replace' : options.staged ? 'staged' : 'merge';
|
|
132
|
-
const [rawAgent, rawVersion] = spec.split('@');
|
|
133
|
-
const agent = resolveAgentName(rawAgent);
|
|
134
|
-
if (!agent) {
|
|
135
|
-
console.error(chalk.red(formatAgentError(rawAgent)));
|
|
136
|
-
process.exit(1);
|
|
137
|
-
}
|
|
138
|
-
let version = rawVersion;
|
|
139
|
-
if (!version) {
|
|
140
|
-
const candidates = isolatedVersions(agent);
|
|
141
|
-
if (candidates.length === 0) {
|
|
142
|
-
console.log(chalk.yellow(`No isolated ${agentLabel(agent)} installs to export.`));
|
|
143
|
-
console.log(chalk.gray(` Create one with: agents add ${agent}@<version> --isolated`));
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
if (candidates.length === 1) {
|
|
147
|
-
version = candidates[0];
|
|
148
|
-
}
|
|
149
|
-
else if (isInteractiveTerminal()) {
|
|
150
|
-
version = await select({
|
|
151
|
-
message: `Which isolated ${agentLabel(agent)} version?`,
|
|
152
|
-
choices: candidates.map((v) => ({ name: v, value: v })),
|
|
153
|
-
}).catch((err) => {
|
|
154
|
-
if (isPromptCancelled(err))
|
|
155
|
-
process.exit(130);
|
|
156
|
-
throw err;
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
console.error(chalk.red(`${agentLabel(agent)} has several isolated installs; name one.`));
|
|
161
|
-
console.error(chalk.gray(` ${candidates.map((v) => `agents export ${agent}@${v}`).join('\n ')}`));
|
|
162
|
-
process.exit(1);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
const timestamp = Date.now();
|
|
166
|
-
const plan = planExport(agent, version, timestamp, mode);
|
|
167
|
-
if (plan.blocker) {
|
|
168
|
-
reportBlocker(plan);
|
|
169
|
-
process.exit(1);
|
|
170
|
-
}
|
|
171
|
-
printPlan(plan, { diff: options.diff });
|
|
172
|
-
if (options.dryRun) {
|
|
173
|
-
console.log(chalk.gray('\nDry run — nothing was written.'));
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
// Only `--replace` can destroy anything, so it is the only mode that demands
|
|
177
|
-
// confirmation. merge and staged are additive by construction.
|
|
178
|
-
if (mode === 'replace' && !options.yes) {
|
|
179
|
-
if (!isInteractiveTerminal()) {
|
|
180
|
-
console.error(chalk.red('\nRefusing to replace your config without confirmation in a non-interactive shell.'));
|
|
181
|
-
console.error(chalk.gray(' Re-run with --yes once you have checked --dry-run.'));
|
|
182
|
-
process.exit(1);
|
|
183
|
-
}
|
|
184
|
-
const ok = await confirm({ message: `Replace ${plan.dest}?`, default: false }).catch((err) => {
|
|
185
|
-
if (isPromptCancelled(err))
|
|
186
|
-
process.exit(130);
|
|
187
|
-
throw err;
|
|
188
|
-
});
|
|
189
|
-
if (!ok) {
|
|
190
|
-
console.log(chalk.gray('Aborted.'));
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
const result = executeExport(plan, timestamp);
|
|
195
|
-
if (!result.exported) {
|
|
196
|
-
console.error(chalk.red(`Export failed: ${result.errors.join('; ')}`));
|
|
197
|
-
process.exit(1);
|
|
198
|
-
}
|
|
199
|
-
console.log();
|
|
200
|
-
if (result.written.length > 0)
|
|
201
|
-
console.log(chalk.green(`Added ${result.written.length} file(s) to ${result.dest}`));
|
|
202
|
-
if (result.conflicts.length > 0) {
|
|
203
|
-
console.log(chalk.yellow(`${result.conflicts.length} of your file(s) were left untouched; incoming copies written as *${CONFLICT_SUFFIX}`));
|
|
204
|
-
console.log(chalk.gray(` Compare them with: agents export ${agent}@${version} --diff --dry-run`));
|
|
205
|
-
}
|
|
206
|
-
if (result.backupPath)
|
|
207
|
-
console.log(chalk.gray(`Previous config kept at: ${result.backupPath}`));
|
|
208
|
-
if (result.stagedPath)
|
|
209
|
-
console.log(chalk.gray(`Staged (nothing activated): ${result.stagedPath}`));
|
|
210
|
-
console.log(chalk.gray(`Receipt: ${result.receiptPath}`));
|
|
211
|
-
if (mode !== 'staged') {
|
|
212
|
-
console.log(chalk.gray(` ${AGENTS[plan.agent].cliCommand} reads this config directly.`));
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents helper` -- install, inspect, and reinstall the signed macOS
|
|
3
|
-
* Keychain helper at the stable user path.
|
|
4
|
-
*
|
|
5
|
-
* The signed `Agents CLI.app` ships inside the npm package, but its keychain
|
|
6
|
-
* ACLs need a stable signature-pinned location to survive `npm i -g` and
|
|
7
|
-
* version bumps. This command copies it to
|
|
8
|
-
* `~/Library/Application Support/agents-cli/` once and lets users force a
|
|
9
|
-
* reinstall when the trusted-app ACL needs to be re-established.
|
|
10
|
-
*/
|
|
11
|
-
import type { Command } from 'commander';
|
|
12
|
-
export declare function registerHelperCommand(program: Command): void;
|
package/dist/commands/helper.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `agents helper` -- install, inspect, and reinstall the signed macOS
|
|
3
|
-
* Keychain helper at the stable user path.
|
|
4
|
-
*
|
|
5
|
-
* The signed `Agents CLI.app` ships inside the npm package, but its keychain
|
|
6
|
-
* ACLs need a stable signature-pinned location to survive `npm i -g` and
|
|
7
|
-
* version bumps. This command copies it to
|
|
8
|
-
* `~/Library/Application Support/agents-cli/` once and lets users force a
|
|
9
|
-
* reinstall when the trusted-app ACL needs to be re-established.
|
|
10
|
-
*/
|
|
11
|
-
import chalk from 'chalk';
|
|
12
|
-
import { ensureKeychainHelperInstalled, getKeychainHelperPath, getKeychainHelperStatus, } from '../lib/secrets/install-helper.js';
|
|
13
|
-
function requireDarwin() {
|
|
14
|
-
if (process.platform !== 'darwin') {
|
|
15
|
-
console.error(chalk.red('agents helper: macOS only.'));
|
|
16
|
-
process.exit(1);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export function registerHelperCommand(program) {
|
|
20
|
-
const cmd = program
|
|
21
|
-
.command('helper')
|
|
22
|
-
.description('Manage the signed macOS Keychain helper (.app) install');
|
|
23
|
-
cmd
|
|
24
|
-
.command('install')
|
|
25
|
-
.description('Copy the bundled .app to ~/Library/Application Support/agents-cli/')
|
|
26
|
-
.action(() => {
|
|
27
|
-
requireDarwin();
|
|
28
|
-
try {
|
|
29
|
-
ensureKeychainHelperInstalled({ forceReinstall: true });
|
|
30
|
-
}
|
|
31
|
-
catch (err) {
|
|
32
|
-
console.error(chalk.red(err.message || String(err)));
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
const s = getKeychainHelperStatus();
|
|
36
|
-
console.log(chalk.green('Installed:'), s.destination);
|
|
37
|
-
console.log(chalk.dim('codesign:'), s.codesignOk ? chalk.green('ok') : chalk.red(s.codesignOutput));
|
|
38
|
-
console.log(chalk.dim('spctl: '), s.spctlOk ? chalk.green('ok') : chalk.yellow(s.spctlOutput));
|
|
39
|
-
});
|
|
40
|
-
cmd
|
|
41
|
-
.command('update')
|
|
42
|
-
.description('Reinstall the .app, overwriting any existing copy (alias of install)')
|
|
43
|
-
.action(() => {
|
|
44
|
-
requireDarwin();
|
|
45
|
-
try {
|
|
46
|
-
ensureKeychainHelperInstalled({ forceReinstall: true });
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
console.error(chalk.red(err.message || String(err)));
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
52
|
-
const s = getKeychainHelperStatus();
|
|
53
|
-
console.log(chalk.green('Updated: '), s.destination);
|
|
54
|
-
console.log(chalk.dim('codesign:'), s.codesignOk ? chalk.green('ok') : chalk.red(s.codesignOutput));
|
|
55
|
-
console.log(chalk.dim('spctl: '), s.spctlOk ? chalk.green('ok') : chalk.yellow(s.spctlOutput));
|
|
56
|
-
});
|
|
57
|
-
cmd
|
|
58
|
-
.command('status')
|
|
59
|
-
.description('Show source, destination, codesign and notarization status')
|
|
60
|
-
.action(() => {
|
|
61
|
-
requireDarwin();
|
|
62
|
-
const s = getKeychainHelperStatus();
|
|
63
|
-
console.log(chalk.bold('Source: '), s.source ?? chalk.red('(not found)'));
|
|
64
|
-
console.log(chalk.bold('Destination:'), s.destination);
|
|
65
|
-
console.log(chalk.bold('Installed: '), s.installed ? chalk.green('yes') : chalk.yellow('no'));
|
|
66
|
-
if (s.installed) {
|
|
67
|
-
console.log(chalk.bold('codesign: '), s.codesignOk ? chalk.green('ok') : chalk.red(s.codesignOutput));
|
|
68
|
-
console.log(chalk.bold('spctl: '), s.spctlOk ? chalk.green('ok') : chalk.yellow(s.spctlOutput));
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
console.log(chalk.dim('Run `agents helper install` to copy the bundled .app to the destination.'));
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
cmd
|
|
75
|
-
.command('where')
|
|
76
|
-
.description('Print the absolute path to the installed helper executable')
|
|
77
|
-
.action(() => {
|
|
78
|
-
requireDarwin();
|
|
79
|
-
try {
|
|
80
|
-
console.log(getKeychainHelperPath());
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
console.error(chalk.red(err.message || String(err)));
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
}
|
package/dist/commands/hosts.d.ts
DELETED
|
@@ -1,11 +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 type { Command } from 'commander';
|
|
10
|
-
/** Register the `agents hosts` command tree. */
|
|
11
|
-
export declare function registerHostsCommand(program: Command): void;
|