@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/sync.d.ts
CHANGED
|
@@ -30,5 +30,10 @@
|
|
|
30
30
|
* sub-50ms steady state. Keep changes here surgical.
|
|
31
31
|
*/
|
|
32
32
|
import { Command } from 'commander';
|
|
33
|
+
/**
|
|
34
|
+
* Attach the resource-selector flag family to the sync command.
|
|
35
|
+
* Exported for testing flag registration in sync.test.ts.
|
|
36
|
+
*/
|
|
37
|
+
export declare function addSelectorOptions(cmd: Command): Command;
|
|
33
38
|
/** Register the `agents sync` command. */
|
|
34
39
|
export declare function registerSyncCommand(program: Command): void;
|
package/dist/commands/sync.js
CHANGED
|
@@ -30,10 +30,11 @@
|
|
|
30
30
|
* sub-50ms steady state. Keep changes here surgical.
|
|
31
31
|
*/
|
|
32
32
|
import * as path from 'path';
|
|
33
|
+
import { Option } from 'commander';
|
|
33
34
|
import chalk from 'chalk';
|
|
34
35
|
import { resolveSyncPassphraseFromEnv } from '../lib/secrets/sync-passphrase.js';
|
|
35
36
|
import { agentLabel, resolveAgentName, MANAGED_AGENT_IDS, isAgentHardDeprecated, hardDeprecationError } from '../lib/agents.js';
|
|
36
|
-
import { isVersionInstalled, syncResourcesToVersion, parseAgentSpec, resolveVersion, resolveVersionAlias, listInstalledVersions, getAvailableResources, getActuallySyncedResources, getProjectOnlyResources, getNewResources, hasNewResources, promptResourceSelection, promptNewResourceSelection,
|
|
37
|
+
import { isVersionInstalled, syncResourcesToVersion, parseAgentSpec, resolveVersion, resolveVersionAlias, listInstalledVersions, getAvailableResources, getActuallySyncedResources, getProjectOnlyResources, getNewResources, hasNewResources, promptResourceSelection, promptNewResourceSelection, buildSelection, mergeRepoScopedSelections, listRepoNames, getVersionHomePath, } from '../lib/versions.js';
|
|
37
38
|
import { capableAgents } from '../lib/capabilities.js';
|
|
38
39
|
import { parseHookManifest, registerHooksToSettings } from '../lib/hooks.js';
|
|
39
40
|
import { compileRulesForProject } from '../lib/rules/compile.js';
|
|
@@ -48,13 +49,94 @@ import { getSystemAgentsDir, getUserAgentsDir, getEnabledExtraRepos } from '../l
|
|
|
48
49
|
function emitJson(payload) {
|
|
49
50
|
console.log(JSON.stringify(payload));
|
|
50
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Translate per-kind CLI flags into a `ResourceSelection` for `buildSelection`.
|
|
54
|
+
* Returns `undefined` when no kind flag was given (caller should use full sync).
|
|
55
|
+
*
|
|
56
|
+
* Each kind has a singular primary flag and a hidden plural alias; both carry
|
|
57
|
+
* the same value. `true` = bare flag (all names for that kind), `string[]` =
|
|
58
|
+
* explicit name filter, `undefined` = flag not used.
|
|
59
|
+
*
|
|
60
|
+
* --rule / --rules / --memory all map to the `memory` key (always `'all'` —
|
|
61
|
+
* the composed file is recompiled from every layer, individual names ignored).
|
|
62
|
+
*/
|
|
63
|
+
function parseKindSelection(opts) {
|
|
64
|
+
function resolve(singular, plural) {
|
|
65
|
+
const val = singular ?? plural;
|
|
66
|
+
if (val === undefined)
|
|
67
|
+
return undefined;
|
|
68
|
+
return val === true ? 'all' : val;
|
|
69
|
+
}
|
|
70
|
+
const plugins = resolve(opts.plugin, opts.plugins);
|
|
71
|
+
const commands = resolve(opts.command, opts.commands);
|
|
72
|
+
const skills = resolve(opts.skill, opts.skills);
|
|
73
|
+
const hooks = resolve(opts.hook, opts.hooks);
|
|
74
|
+
const subagents = resolve(opts.subagent, opts.subagents);
|
|
75
|
+
const permissions = resolve(opts.permission, opts.permissions);
|
|
76
|
+
const mcp = resolve(opts.mcp, opts.mcps);
|
|
77
|
+
const workflows = resolve(opts.workflow, opts.workflows);
|
|
78
|
+
// --rule/--rules/--memory all enable a full memory recompile (no name filter).
|
|
79
|
+
const memory = (opts.rule || opts.rules || opts.memory) ? 'all' : undefined;
|
|
80
|
+
const anySet = [plugins, commands, skills, hooks, subagents, permissions, mcp, workflows, memory]
|
|
81
|
+
.some(v => v !== undefined);
|
|
82
|
+
if (!anySet)
|
|
83
|
+
return undefined;
|
|
84
|
+
const sel = {};
|
|
85
|
+
if (plugins)
|
|
86
|
+
sel.plugins = plugins;
|
|
87
|
+
if (commands)
|
|
88
|
+
sel.commands = commands;
|
|
89
|
+
if (skills)
|
|
90
|
+
sel.skills = skills;
|
|
91
|
+
if (hooks)
|
|
92
|
+
sel.hooks = hooks;
|
|
93
|
+
if (subagents)
|
|
94
|
+
sel.subagents = subagents;
|
|
95
|
+
if (permissions)
|
|
96
|
+
sel.permissions = permissions;
|
|
97
|
+
if (mcp)
|
|
98
|
+
sel.mcp = mcp;
|
|
99
|
+
if (workflows)
|
|
100
|
+
sel.workflows = workflows;
|
|
101
|
+
if (memory)
|
|
102
|
+
sel.memory = memory;
|
|
103
|
+
return sel;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Attach the resource-selector flag family to the sync command.
|
|
107
|
+
* Exported for testing flag registration in sync.test.ts.
|
|
108
|
+
*/
|
|
109
|
+
export function addSelectorOptions(cmd) {
|
|
110
|
+
const kindCollector = (val, prev) => {
|
|
111
|
+
const names = val.split(',').map((s) => s.trim()).filter(Boolean);
|
|
112
|
+
const base = Array.isArray(prev) ? prev : [];
|
|
113
|
+
return [...base, ...names];
|
|
114
|
+
};
|
|
115
|
+
function addKindPair(singular, plural, desc) {
|
|
116
|
+
cmd.addOption(new Option(`--${singular} [names]`, desc).argParser(kindCollector));
|
|
117
|
+
cmd.addOption(new Option(`--${plural} [names]`, `Alias of --${singular}`).argParser(kindCollector).hideHelp());
|
|
118
|
+
}
|
|
119
|
+
addKindPair('plugin', 'plugins', 'Sync only plugins (bare = all; comma-separated names to filter)');
|
|
120
|
+
addKindPair('command', 'commands', 'Sync only commands (bare = all; comma-separated names to filter)');
|
|
121
|
+
addKindPair('skill', 'skills', 'Sync only skills (bare = all; comma-separated names to filter)');
|
|
122
|
+
addKindPair('hook', 'hooks', 'Sync only hooks (bare = all; comma-separated names to filter)');
|
|
123
|
+
addKindPair('subagent', 'subagents', 'Sync only subagents (bare = all; comma-separated names to filter)');
|
|
124
|
+
addKindPair('permission', 'permissions', 'Sync only permissions (bare = all; comma-separated names to filter)');
|
|
125
|
+
addKindPair('mcp', 'mcps', 'Sync only MCP servers (bare = all; comma-separated names to filter)');
|
|
126
|
+
addKindPair('workflow', 'workflows', 'Sync only workflows (bare = all; comma-separated names to filter)');
|
|
127
|
+
cmd.addOption(new Option('--rule [names]', 'Sync only the rules/memory file (maps to the "memory" key — the whole file is always recompiled, individual names are not filtered)').argParser(kindCollector));
|
|
128
|
+
cmd.addOption(new Option('--rules [names]', 'Alias of --rule').argParser(kindCollector).hideHelp());
|
|
129
|
+
cmd.addOption(new Option('--memory', 'Sync only the rules/memory file (alias of --rule with no name filter)'));
|
|
130
|
+
cmd.addOption(new Option('--version <spec>', 'Agent version or selector: @latest, @oldest, @pinned (= @default), @all, or a concrete x.y.z. "all" targets every installed version non-interactively.'));
|
|
131
|
+
return cmd;
|
|
132
|
+
}
|
|
51
133
|
/** Register the `agents sync` command. */
|
|
52
134
|
export function registerSyncCommand(program) {
|
|
53
|
-
addHostOption(program.command('sync [agentSpec] [repo]'))
|
|
135
|
+
const cmd = addHostOption(program.command('sync [agentSpec] [repo]'))
|
|
54
136
|
.summary('Make this machine current, or sync resources into one agent')
|
|
55
|
-
.description('With an [agentSpec], syncs resources (commands, skills, hooks, rules, MCPs, plugins, etc.) into that installed agent version — previews changes and lets you pick. e.g. "claude", "claude@2.1.142", a selector: @latest / @oldest / @pinned (= @default), or @all for every installed version.\n\nAppend a [repo] (or pass --repo) to scope the sync to a single DotAgent repo — system / user / project / <alias>. e.g. "agents sync claude@all system" reconciles only the system repo\'s resources into every installed Claude.\n\nGive a DotAgent repo name ALONE — "agents sync system" / "agents sync user" / "agents sync <alias>" — to git-sync that one repo:
|
|
137
|
+
.description('With an [agentSpec], syncs resources (commands, skills, hooks, rules, MCPs, plugins, etc.) into that installed agent version — previews changes and lets you pick. e.g. "claude", "claude@2.1.142", a selector: @latest / @oldest / @pinned (= @default), or @all for every installed version.\n\nAppend a [repo] (or pass --repo) to scope the sync to a single DotAgent repo — system / user / project / <alias>. e.g. "agents sync claude@all system" reconciles only the system repo\'s resources into every installed Claude.\n\nGive a DotAgent repo name ALONE — "agents sync system" / "agents sync user" / "agents sync <alias>" — to git-sync that one repo: git pull --rebase against origin when the tree is clean; when it is dirty, fast-forward anyway if no incoming path is uncommitted, else refuse and name what collided. The user repo and extra aliases also push local commits up; the system repo is a pull-only mirror.\n\nWith NO agent, runs the umbrella verb: fetch the config repos then reconcile them into every installed agent. Secrets are opt-in — add --secrets to pull secret bundles. Session transcripts are queryable live via "agents sessions --host <machine>", or moved with "agents sessions export/import". Also: --cloud (fetch only), --local (reconcile only).')
|
|
56
138
|
.option('--agent <agent>', 'Agent identifier (legacy form; prefer the positional spec)')
|
|
57
|
-
.option('--agent-version <version>', 'Version to sync into (legacy form; prefer "agent@version")')
|
|
139
|
+
.option('--agent-version <version>', 'Version to sync into (legacy form; prefer "agent@version" or --version)')
|
|
58
140
|
.option('--repo <name>', 'Scope the sync to a single DotAgent repo: system / user / project / <alias> (also accepted as a positional)')
|
|
59
141
|
.option('--project-dir <path>', 'Path to project-level .agents/ directory containing project-scoped resources')
|
|
60
142
|
.option('--cwd <path>', 'Working directory for discovering project manifest and resources')
|
|
@@ -62,6 +144,8 @@ export function registerSyncCommand(program) {
|
|
|
62
144
|
.option('-y, --yes', 'Skip the interactive preview and auto-sync all detected resources', false)
|
|
63
145
|
.option('--force', 'Re-sync even if no changes are detected since the last sync', false)
|
|
64
146
|
.option('--quiet', 'Suppress all output (exit code indicates success)', false)
|
|
147
|
+
.option('--dry-run', 'Show what would be synced without making any changes', false)
|
|
148
|
+
.option('--allow-exec-surfaces', 'Allow syncing plugin exec surfaces (scripts, binaries) — off by default for safety', false)
|
|
65
149
|
.option('--json', 'Emit machine-readable JSON (also accepted so fleet fan-out via --host all can parse each peer)', false)
|
|
66
150
|
// Umbrella verb (no agent given): make this machine current.
|
|
67
151
|
.option('--repos', 'Umbrella: git-pull ~/.agents + enabled ~/.agents-* extras', false)
|
|
@@ -71,6 +155,9 @@ export function registerSyncCommand(program) {
|
|
|
71
155
|
.action(async (agentSpec, repo, opts) => {
|
|
72
156
|
await runSync(agentSpec, repo, opts);
|
|
73
157
|
});
|
|
158
|
+
// Per-kind resource selectors + --version. Registered after the main flags so
|
|
159
|
+
// help output groups the positional/repo/agent flags first.
|
|
160
|
+
addSelectorOptions(cmd);
|
|
74
161
|
}
|
|
75
162
|
/**
|
|
76
163
|
* Resolve a DotAgent repo name to its git working directory + whether local
|
|
@@ -90,9 +177,10 @@ function resolveRepoGitTarget(repo) {
|
|
|
90
177
|
return null;
|
|
91
178
|
}
|
|
92
179
|
/**
|
|
93
|
-
* `agents sync <repo>` — git-sync a single DotAgent repo:
|
|
94
|
-
* tree
|
|
95
|
-
*
|
|
180
|
+
* `agents sync <repo>` — git-sync a single DotAgent repo: pull --rebase against
|
|
181
|
+
* origin on a clean tree; on a dirty one, fast-forward anyway when no incoming
|
|
182
|
+
* path is uncommitted, else refuse naming the collision. Pushes local commits
|
|
183
|
+
* for user-owned repos. Delegates the git work to `syncRepoGit`.
|
|
96
184
|
*/
|
|
97
185
|
async function runRepoGitSync(repo, quiet, outLog, errLog, json = false) {
|
|
98
186
|
const target = resolveRepoGitTarget(repo);
|
|
@@ -219,7 +307,7 @@ async function runInteractiveReconcile(opts, outLog, errLog) {
|
|
|
219
307
|
const version = resolveVersion(agentId, cwd) || listInstalledVersions(agentId).slice(-1)[0];
|
|
220
308
|
if (!version)
|
|
221
309
|
continue;
|
|
222
|
-
const result = syncResourcesToVersion(agentId, version, selection, { cwd });
|
|
310
|
+
const result = syncResourcesToVersion(agentId, version, selection, { cwd, prune: true });
|
|
223
311
|
printSyncDetail(result, agentId, version, cwd);
|
|
224
312
|
if (result.hooks && hookCapable.has(agentId) && Object.keys(hookManifest).length > 0) {
|
|
225
313
|
registerHooksToSettings(agentId, getVersionHomePath(agentId, version), hookManifest);
|
|
@@ -336,7 +424,13 @@ async function runSync(agentSpec, repoArg, opts) {
|
|
|
336
424
|
// user-owned repos. This is distinct from the [repo] resource-scoping arg
|
|
337
425
|
// below, and it precedes agent-spec parsing because repo names like
|
|
338
426
|
// "system"/"user" would otherwise fail parseAgentSpec.
|
|
427
|
+
//
|
|
428
|
+
// DEPRECATED: prefer `agents repo sync <name>` — this positional form will be
|
|
429
|
+
// removed in a future release.
|
|
339
430
|
if (agentSpec && !opts.agent && !repoArg && listRepoNames().includes(agentSpec)) {
|
|
431
|
+
if (!quiet && !json) {
|
|
432
|
+
console.error(chalk.yellow(`Warning: 'agents sync ${agentSpec}' is deprecated. Use: agents repo sync ${agentSpec}`));
|
|
433
|
+
}
|
|
340
434
|
await runRepoGitSync(agentSpec, quiet, outLog, errLog, json);
|
|
341
435
|
return;
|
|
342
436
|
}
|
|
@@ -359,6 +453,10 @@ async function runSync(agentSpec, repoArg, opts) {
|
|
|
359
453
|
if (agentSpec.includes('@'))
|
|
360
454
|
selector = parsed.version;
|
|
361
455
|
}
|
|
456
|
+
// --version flag beats any @selector from the positional.
|
|
457
|
+
// Strip a leading @ so '--version @latest' and '--version latest' both work.
|
|
458
|
+
if (opts.version)
|
|
459
|
+
selector = opts.version.replace(/^@/, '');
|
|
362
460
|
// Repo scope: --repo flag wins over the positional. Validate against the
|
|
363
461
|
// known DotAgent repos so a typo fails loudly instead of syncing nothing.
|
|
364
462
|
const repoScope = opts.repo || repoArg;
|
|
@@ -407,9 +505,20 @@ async function runSync(agentSpec, repoArg, opts) {
|
|
|
407
505
|
const projectDir = opts.projectDir;
|
|
408
506
|
const cwd = opts.cwd || process.cwd();
|
|
409
507
|
const force = !!opts.force;
|
|
508
|
+
// Promote to @all when no version can be resolved and multiple are installed.
|
|
509
|
+
// Replaces the old "no default version pinned" error: bare `agents sync claude`
|
|
510
|
+
// with multiple installed versions and no pinned default now syncs them all.
|
|
511
|
+
if (!selector && !version && !opts.agentVersion) {
|
|
512
|
+
const pinned = resolveVersion(agentId, opts.cwd || process.cwd());
|
|
513
|
+
if (!pinned) {
|
|
514
|
+
const installed = listInstalledVersions(agentId);
|
|
515
|
+
if (installed.length > 1)
|
|
516
|
+
selector = 'all';
|
|
517
|
+
}
|
|
518
|
+
}
|
|
410
519
|
// ---------- 2a. @all: reconcile every installed version of this agent ----------
|
|
411
520
|
// Non-interactive by design — fanning an interactive preview across N
|
|
412
|
-
// versions is unusable. Honors
|
|
521
|
+
// versions is unusable. Honors optional repo scope and per-kind flags.
|
|
413
522
|
if (selector === 'all') {
|
|
414
523
|
const installed = listInstalledVersions(agentId);
|
|
415
524
|
if (installed.length === 0) {
|
|
@@ -421,23 +530,45 @@ async function runSync(agentSpec, repoArg, opts) {
|
|
|
421
530
|
process.exitCode = 1;
|
|
422
531
|
return;
|
|
423
532
|
}
|
|
533
|
+
const kindFilter = parseKindSelection(opts);
|
|
424
534
|
let selection;
|
|
425
|
-
if (repoScope) {
|
|
426
|
-
selection =
|
|
535
|
+
if (repoScope || kindFilter) {
|
|
536
|
+
selection = buildSelection(repoScope ? [`${repoScope}:*`] : [], kindFilter ?? undefined, cwd);
|
|
427
537
|
if (Object.keys(selection).length === 0) {
|
|
428
538
|
if (json)
|
|
429
539
|
emitJson({ ok: true, mode: 'agent-all', agent: agentId, repo: repoScope, versions: [], note: 'nothing to sync' });
|
|
430
540
|
else
|
|
431
|
-
outLog(chalk.gray(`Nothing from repo '${repoScope}'
|
|
541
|
+
outLog(chalk.gray(`Nothing to sync${repoScope ? ` from repo '${repoScope}'` : ''}.`));
|
|
432
542
|
return;
|
|
433
543
|
}
|
|
434
544
|
}
|
|
435
545
|
const scopeLabel = repoScope ? chalk.gray(` (repo: ${repoScope})`) : '';
|
|
436
546
|
if (!json)
|
|
437
547
|
outLog(chalk.cyan(`Syncing ${installed.length} ${agentLabel(agentId)} version(s)${scopeLabel}.`));
|
|
548
|
+
if (opts.dryRun) {
|
|
549
|
+
if (!quiet && !json) {
|
|
550
|
+
console.log(chalk.cyan(`Dry run — would sync ${agentLabel(agentId)} (${installed.length} version(s))${scopeLabel}:`));
|
|
551
|
+
if (selection) {
|
|
552
|
+
for (const [k, v] of Object.entries(selection)) {
|
|
553
|
+
const names = v === 'all' ? chalk.gray('(all)') : v.join(', ');
|
|
554
|
+
console.log(chalk.gray(` ${k}: ${names}`));
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
console.log(chalk.gray(' (all resources)'));
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
if (json)
|
|
562
|
+
emitJson({ ok: true, mode: 'dry-run', agent: agentId, repo: repoScope, versions: installed, selection: selection ?? 'all' });
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
438
565
|
const versions = [];
|
|
439
566
|
for (const v of installed) {
|
|
440
|
-
|
|
567
|
+
// A repo scope makes @all a full reconcile of that repo → prune resources
|
|
568
|
+
// it no longer provides. Bare @all (no repo) leaves selection undefined
|
|
569
|
+
// and falls through to the full-sync orphan sweep, so prune is a no-op
|
|
570
|
+
// there (it requires a caller selection).
|
|
571
|
+
const result = syncResourcesToVersion(agentId, v, selection, { projectDir, cwd, force, prune: !!repoScope, allowExecSurfaces: !!opts.allowExecSurfaces });
|
|
441
572
|
versions.push({ version: v, result });
|
|
442
573
|
if (!quiet && !json)
|
|
443
574
|
printSyncDetail(result, agentId, v, cwd);
|
|
@@ -459,6 +590,7 @@ async function runSync(agentSpec, repoArg, opts) {
|
|
|
459
590
|
subagents: result.subagents,
|
|
460
591
|
plugins: result.plugins,
|
|
461
592
|
workflows: result.workflows,
|
|
593
|
+
pruned: result.pruned,
|
|
462
594
|
})),
|
|
463
595
|
});
|
|
464
596
|
}
|
|
@@ -489,17 +621,19 @@ async function runSync(agentSpec, repoArg, opts) {
|
|
|
489
621
|
return;
|
|
490
622
|
}
|
|
491
623
|
else {
|
|
624
|
+
// Multiple installed, no default — promoted to @all before reaching here.
|
|
625
|
+
// This branch is a safety net for unexpected flow; normal callers won't hit it.
|
|
492
626
|
failJson({
|
|
493
627
|
mode: 'agent',
|
|
494
628
|
agent: agentId,
|
|
495
629
|
error: `No default ${agentLabel(agentId)} version pinned.`,
|
|
496
630
|
installed,
|
|
631
|
+
hint: `Use agents sync ${agentId}@all to sync every installed version, or agents sync ${agentId}@latest for the newest.`,
|
|
497
632
|
});
|
|
498
633
|
if (!json) {
|
|
499
|
-
errLog(chalk.red(`No default ${agentLabel(agentId)} version pinned
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
}
|
|
634
|
+
errLog(chalk.red(`No default ${agentLabel(agentId)} version pinned.`));
|
|
635
|
+
errLog(chalk.gray(` Sync all: agents sync ${agentId}@all`));
|
|
636
|
+
errLog(chalk.gray(` Sync newest: agents sync ${agentId}@latest`));
|
|
503
637
|
}
|
|
504
638
|
process.exitCode = 1;
|
|
505
639
|
return;
|
|
@@ -530,11 +664,12 @@ async function runSync(agentSpec, repoArg, opts) {
|
|
|
530
664
|
runLaunchMode(agentId, version, cwd, quiet, json);
|
|
531
665
|
return;
|
|
532
666
|
}
|
|
533
|
-
// ---------- 3b. Repo-scoped single-version sync ----------
|
|
534
|
-
// An explicit --repo / positional repo
|
|
535
|
-
// interactive preview and reconcile
|
|
536
|
-
|
|
537
|
-
|
|
667
|
+
// ---------- 3b. Repo-scoped or kind-filtered single-version sync ----------
|
|
668
|
+
// An explicit --repo / positional repo, or any per-kind flag, is a targeted
|
|
669
|
+
// request: skip the interactive preview and reconcile only the specified scope.
|
|
670
|
+
const kindFilter = parseKindSelection(opts);
|
|
671
|
+
if (repoScope || kindFilter) {
|
|
672
|
+
const scoped = buildSelection(repoScope ? [`${repoScope}:*`] : [], kindFilter ?? undefined, cwd);
|
|
538
673
|
if (Object.keys(scoped).length === 0) {
|
|
539
674
|
if (json) {
|
|
540
675
|
emitJson({
|
|
@@ -542,16 +677,28 @@ async function runSync(agentSpec, repoArg, opts) {
|
|
|
542
677
|
mode: 'agent',
|
|
543
678
|
agent: agentId,
|
|
544
679
|
version,
|
|
545
|
-
repo: repoScope,
|
|
680
|
+
...(repoScope !== undefined ? { repo: repoScope } : {}),
|
|
546
681
|
note: 'nothing to sync',
|
|
547
682
|
});
|
|
548
683
|
}
|
|
549
684
|
else {
|
|
550
|
-
outLog(chalk.gray(`Nothing from repo '${repoScope}'
|
|
685
|
+
outLog(chalk.gray(`Nothing to sync${repoScope ? ` from repo '${repoScope}'` : ''} into ${agentLabel(agentId)}@${version}.`));
|
|
686
|
+
}
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
689
|
+
if (opts.dryRun) {
|
|
690
|
+
if (!quiet && !json) {
|
|
691
|
+
console.log(chalk.cyan(`Dry run — would sync into ${agentLabel(agentId)}@${version}${repoScope ? ` (repo: ${repoScope})` : ''}:`));
|
|
692
|
+
for (const [k, v] of Object.entries(scoped)) {
|
|
693
|
+
const names = v === 'all' ? chalk.gray('(all)') : v.join(', ');
|
|
694
|
+
console.log(chalk.gray(` ${k}: ${names}`));
|
|
695
|
+
}
|
|
551
696
|
}
|
|
697
|
+
if (json)
|
|
698
|
+
emitJson({ ok: true, mode: 'dry-run', agent: agentId, version, repo: repoScope, selection: scoped });
|
|
552
699
|
return;
|
|
553
700
|
}
|
|
554
|
-
const result = syncResourcesToVersion(agentId, version, scoped, { projectDir, cwd, force });
|
|
701
|
+
const result = syncResourcesToVersion(agentId, version, scoped, { projectDir, cwd, force, prune: !!repoScope, allowExecSurfaces: !!opts.allowExecSurfaces });
|
|
555
702
|
if (json) {
|
|
556
703
|
emitJson(agentSyncJson(agentId, version, result, repoScope));
|
|
557
704
|
}
|
|
@@ -606,7 +753,24 @@ async function runSync(agentSpec, repoArg, opts) {
|
|
|
606
753
|
}
|
|
607
754
|
}
|
|
608
755
|
// ---------- 5. Run sync ----------
|
|
609
|
-
|
|
756
|
+
if (opts.dryRun) {
|
|
757
|
+
if (!quiet && !json) {
|
|
758
|
+
console.log(chalk.cyan(`Dry run — would sync into ${agentLabel(agentId)}@${version}${repoScope ? ` (repo: ${repoScope})` : ''}:`));
|
|
759
|
+
if (selection) {
|
|
760
|
+
for (const [k, v] of Object.entries(selection)) {
|
|
761
|
+
const names = v === 'all' ? chalk.gray('(all)') : v.join(', ');
|
|
762
|
+
console.log(chalk.gray(` ${k}: ${names}`));
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
else {
|
|
766
|
+
console.log(chalk.gray(' (all resources)'));
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
if (json)
|
|
770
|
+
emitJson({ ok: true, mode: 'dry-run', agent: agentId, version, repo: repoScope, selection: selection ?? 'all' });
|
|
771
|
+
return;
|
|
772
|
+
}
|
|
773
|
+
const result = syncResourcesToVersion(agentId, version, selection, { projectDir, cwd, force, allowExecSurfaces: !!opts.allowExecSurfaces });
|
|
610
774
|
// Compile project-scope rules into the workspace itself so each agent's
|
|
611
775
|
// native loader picks up cwd/<INSTRUCTIONS_FILE>. projectDir is the
|
|
612
776
|
// .agents/ directory; the workspace root is its parent.
|
|
@@ -661,6 +825,7 @@ function agentSyncJson(agent, version, result, repo) {
|
|
|
661
825
|
plugins: result.plugins,
|
|
662
826
|
workflows: result.workflows,
|
|
663
827
|
projectSkipped: result.projectSkipped,
|
|
828
|
+
pruned: result.pruned,
|
|
664
829
|
};
|
|
665
830
|
}
|
|
666
831
|
function anyResources(r) {
|
|
@@ -694,22 +859,37 @@ function printSyncDetail(result, agent, version, cwd) {
|
|
|
694
859
|
if (result.workflows.length > 0)
|
|
695
860
|
lines.push({ kind: 'workflows', items: result.workflows });
|
|
696
861
|
const kept = formatKeptProjectResources(result.projectSkipped);
|
|
697
|
-
|
|
862
|
+
// Removals from source-deleted resources (RUSH-2438). Rendered even when
|
|
863
|
+
// nothing was added, so a reconcile that only pruned still reports it.
|
|
864
|
+
const prunedLines = Object.entries(result.pruned)
|
|
865
|
+
.filter(([, names]) => names.length > 0)
|
|
866
|
+
.map(([kind, names]) => ({ kind, items: names }));
|
|
867
|
+
if (lines.length === 0 && prunedLines.length === 0) {
|
|
698
868
|
console.log(chalk.gray(`Already in sync — ${agentLabel(agent)}@${version}`));
|
|
699
869
|
if (kept)
|
|
700
870
|
console.log(chalk.gray(kept));
|
|
701
871
|
return;
|
|
702
872
|
}
|
|
703
|
-
console.log(chalk.green(`Synced to ${agentLabel(agent)}@${version}:`));
|
|
704
|
-
const kindWidth = Math.max(...lines.map(l => l.kind.length));
|
|
705
873
|
const PREVIEW = 5;
|
|
706
|
-
|
|
707
|
-
const padded =
|
|
874
|
+
const printKindLine = (label, items, width, color) => {
|
|
875
|
+
const padded = label.padEnd(width);
|
|
708
876
|
const sorted = [...items].sort((a, b) => a.localeCompare(b));
|
|
709
877
|
const preview = sorted.slice(0, PREVIEW).join(', ');
|
|
710
878
|
const more = sorted.length > PREVIEW ? chalk.gray(`, +${sorted.length - PREVIEW} more`) : '';
|
|
711
|
-
const count =
|
|
879
|
+
const count = color(`(${sorted.length})`.padStart(5));
|
|
712
880
|
console.log(` ${chalk.bold(padded)} ${count} ${chalk.gray(preview)}${more}`);
|
|
881
|
+
};
|
|
882
|
+
if (lines.length > 0) {
|
|
883
|
+
console.log(chalk.green(`Synced to ${agentLabel(agent)}@${version}:`));
|
|
884
|
+
const kindWidth = Math.max(...lines.map(l => l.kind.length));
|
|
885
|
+
for (const { kind, items } of lines)
|
|
886
|
+
printKindLine(kind, items, kindWidth, chalk.cyan);
|
|
887
|
+
}
|
|
888
|
+
if (prunedLines.length > 0) {
|
|
889
|
+
console.log(chalk.yellow(`Pruned from ${agentLabel(agent)}@${version} (removed from source):`));
|
|
890
|
+
const kindWidth = Math.max(...prunedLines.map(l => l.kind.length));
|
|
891
|
+
for (const { kind, items } of prunedLines)
|
|
892
|
+
printKindLine(kind, items, kindWidth, chalk.yellow);
|
|
713
893
|
}
|
|
714
894
|
if (kept)
|
|
715
895
|
console.log(chalk.gray(kept));
|
package/dist/commands/teams.d.ts
CHANGED
|
@@ -87,6 +87,19 @@ export declare function decideTeamMessageRoute(status: AgentStatus, hasMessage:
|
|
|
87
87
|
* owning this worktree.
|
|
88
88
|
*/
|
|
89
89
|
export declare function tearDownOrphanWorktree(mgr: AgentManager, baseCwd: string, name: string): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* The blocking message when `teams add` is pointed at a stale checkout. Pure so
|
|
92
|
+
* the guidance is pinned by tests (mirrors `remoteCwdOnAddError`): it MUST name
|
|
93
|
+
* how far behind, tell the caller to sync with remote main, and mention `--confirm`
|
|
94
|
+
* as the override.
|
|
95
|
+
*/
|
|
96
|
+
export declare function staleRepoError(params: {
|
|
97
|
+
team: string;
|
|
98
|
+
where: string;
|
|
99
|
+
behind: number;
|
|
100
|
+
base: string;
|
|
101
|
+
sync: string;
|
|
102
|
+
}): string;
|
|
90
103
|
/**
|
|
91
104
|
* Register the generic cloud dispatcher — staged cloud teammates get
|
|
92
105
|
* dispatched when their --after deps resolve, using repo/branch stored on
|