@phnx-labs/agents-cli 1.22.34 → 1.22.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +672 -2
- package/README.md +82 -35
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.d.ts +15 -0
- package/dist/bootstrap.js +1211 -0
- package/dist/commands/accounts.d.ts +4 -11
- package/dist/commands/accounts.js +159 -27
- package/dist/commands/attach.js +17 -4
- package/dist/commands/audit.d.ts +8 -8
- package/dist/commands/audit.js +57 -47
- package/dist/commands/browser.js +15 -11
- package/dist/commands/cloud.js +1 -1
- package/dist/commands/commands.js +0 -11
- package/dist/commands/computer-actions.js +33 -0
- package/dist/commands/computer-sessions-picker.d.ts +21 -0
- package/dist/commands/computer-sessions-picker.js +141 -0
- package/dist/commands/computer.d.ts +16 -0
- package/dist/commands/computer.js +37 -0
- package/dist/commands/config.d.ts +17 -0
- package/dist/commands/config.js +401 -0
- package/dist/commands/cp.d.ts +84 -0
- package/dist/commands/cp.js +231 -0
- package/dist/commands/daemon.js +243 -14
- package/dist/commands/detach-core.d.ts +1 -1
- package/dist/commands/detach-core.js +12 -2
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +64 -5
- package/dist/commands/events.d.ts +24 -12
- package/dist/commands/events.js +144 -28
- package/dist/commands/exec.js +85 -41
- package/dist/commands/feed.d.ts +1 -1
- package/dist/commands/feed.js +16 -8
- package/dist/commands/focus.d.ts +33 -1
- package/dist/commands/focus.js +177 -17
- package/dist/commands/funnel.d.ts +1 -1
- package/dist/commands/go.js +9 -8
- package/dist/commands/harness-wizard.d.ts +1 -0
- package/dist/commands/harness-wizard.js +18 -20
- package/dist/commands/harness.d.ts +2 -0
- package/dist/commands/harness.js +59 -26
- package/dist/commands/hooks.js +0 -11
- package/dist/commands/inspect.d.ts +94 -1
- package/dist/commands/inspect.js +866 -40
- package/dist/commands/lease.d.ts +4 -4
- package/dist/commands/lease.js +6 -6
- package/dist/commands/login.js +0 -13
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +2 -2
- package/dist/commands/mcp.js +7 -2
- package/dist/commands/memory.js +7 -2
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +37 -6
- package/dist/commands/models.js +4 -0
- package/dist/commands/monitors.d.ts +0 -1
- package/dist/commands/monitors.js +199 -16
- package/dist/commands/open.d.ts +18 -0
- package/dist/commands/open.js +57 -0
- package/dist/commands/packages.js +2 -107
- package/dist/commands/plugins.js +6 -3
- package/dist/commands/profiles.d.ts +1 -0
- package/dist/commands/profiles.js +16 -160
- package/dist/commands/projects.d.ts +28 -0
- package/dist/commands/projects.js +125 -5
- package/dist/commands/reconnect.js +9 -3
- package/dist/commands/repo.js +42 -1
- package/dist/commands/resource-view.d.ts +17 -0
- package/dist/commands/resource-view.js +36 -14
- package/dist/commands/resume.js +9 -2
- package/dist/commands/routines.d.ts +0 -2
- package/dist/commands/routines.js +473 -289
- package/dist/commands/secrets.js +52 -9
- package/dist/commands/sessions-export.d.ts +47 -0
- package/dist/commands/sessions-export.js +116 -6
- package/dist/commands/sessions-import.d.ts +17 -0
- package/dist/commands/sessions-import.js +114 -6
- package/dist/commands/sessions-migrate.d.ts +27 -0
- package/dist/commands/sessions-migrate.js +50 -9
- package/dist/commands/sessions-picker.js +23 -4
- package/dist/commands/sessions-resume.d.ts +5 -3
- package/dist/commands/sessions-resume.js +30 -8
- package/dist/commands/sessions-watch.d.ts +2 -0
- package/dist/commands/sessions-watch.js +53 -0
- package/dist/commands/sessions.d.ts +66 -3
- package/dist/commands/sessions.js +298 -47
- package/dist/commands/set.d.ts +1 -1
- package/dist/commands/set.js +2 -2
- package/dist/commands/setup-browser.js +2 -2
- package/dist/commands/setup-mine.js +0 -1
- package/dist/commands/setup-preferences.js +1 -1
- package/dist/commands/setup-share.js +34 -4
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.js +26 -0
- package/dist/commands/share.d.ts +85 -0
- package/dist/commands/share.js +379 -8
- package/dist/commands/skills.js +0 -11
- package/dist/commands/snapshot.js +1 -1
- package/dist/commands/ssh.d.ts +18 -0
- package/dist/commands/ssh.js +549 -210
- package/dist/commands/sync.d.ts +5 -0
- package/dist/commands/sync.js +212 -32
- package/dist/commands/teams.d.ts +13 -0
- package/dist/commands/teams.js +187 -30
- package/dist/commands/tickets.d.ts +2 -0
- package/dist/commands/tickets.js +43 -0
- package/dist/commands/update.js +2 -4
- package/dist/commands/usage.js +5 -3
- package/dist/commands/versions.js +11 -5
- package/dist/commands/view.js +15 -7
- package/dist/commands/webhook.d.ts +2 -2
- package/dist/commands/webhook.js +7 -7
- package/dist/index.d.ts +18 -2
- package/dist/index.js +53 -1264
- package/dist/lib/account-catalog.d.ts +18 -0
- package/dist/lib/account-catalog.js +38 -0
- package/dist/lib/account-provider-registry.d.ts +18 -0
- package/dist/lib/account-provider-registry.js +59 -0
- package/dist/lib/account-registry.d.ts +40 -0
- package/dist/lib/account-registry.js +239 -0
- package/dist/lib/account-schema.d.ts +44 -0
- package/dist/lib/account-schema.js +91 -0
- package/dist/lib/account-state-service.d.ts +21 -0
- package/dist/lib/account-state-service.js +60 -0
- package/dist/lib/activity.d.ts +1 -1
- package/dist/lib/activity.js +8 -1
- package/dist/lib/add-dir.d.ts +80 -0
- package/dist/lib/add-dir.js +241 -0
- package/dist/lib/agent-cli-commands.d.ts +11 -0
- package/dist/lib/agent-cli-commands.js +30 -0
- package/dist/lib/agents.js +44 -36
- package/dist/lib/answer-router.js +1 -1
- package/dist/lib/audit/log.d.ts +10 -27
- package/dist/lib/audit/log.js +20 -33
- package/dist/lib/auth-health.d.ts +9 -2
- package/dist/lib/auth-health.js +42 -9
- package/dist/lib/auto-pull-worker.js +7 -3
- package/dist/lib/auto-pull.d.ts +44 -3
- package/dist/lib/auto-pull.js +88 -5
- package/dist/lib/binary-shadow.d.ts +28 -0
- package/dist/lib/binary-shadow.js +121 -0
- package/dist/lib/brand.js +9 -3
- package/dist/lib/browser/ipc.d.ts +30 -0
- package/dist/lib/browser/ipc.js +81 -4
- package/dist/lib/browser/profiles.d.ts +3 -2
- package/dist/lib/browser/profiles.js +65 -22
- package/dist/lib/browser/service.d.ts +4 -0
- package/dist/lib/browser/service.js +30 -3
- package/dist/lib/browser/sessions-list.d.ts +22 -2
- package/dist/lib/browser/sessions-list.js +54 -6
- package/dist/lib/browser/stream.d.ts +2 -0
- package/dist/lib/browser/stream.js +1 -0
- package/dist/lib/browser/types.d.ts +19 -0
- package/dist/lib/byok-usage.d.ts +9 -2
- package/dist/lib/byok-usage.js +133 -31
- package/dist/lib/cli-entry.d.ts +11 -0
- package/dist/lib/cli-entry.js +46 -0
- package/dist/lib/cloud/host.d.ts +1 -1
- package/dist/lib/cloud/host.js +2 -2
- package/dist/lib/cloud/registry.js +1 -1
- package/dist/lib/cloud/types.d.ts +1 -1
- package/dist/lib/codex-policy.d.ts +9 -1
- package/dist/lib/codex-policy.js +17 -2
- package/dist/lib/commands.d.ts +2 -0
- package/dist/lib/commands.js +2 -0
- package/dist/lib/computer/sessions-list.d.ts +150 -0
- package/dist/lib/computer/sessions-list.js +363 -0
- package/dist/lib/config-keys.d.ts +86 -0
- package/dist/lib/config-keys.js +193 -0
- package/dist/lib/config-machine-keys.d.ts +12 -0
- package/dist/lib/config-machine-keys.js +17 -0
- package/dist/lib/config-transfer.js +3 -4
- package/dist/lib/crabbox/cli.d.ts +2 -2
- package/dist/lib/crabbox/cli.js +3 -3
- package/dist/lib/daemon-health.d.ts +22 -0
- package/dist/lib/daemon-health.js +33 -3
- package/dist/lib/daemon-services.d.ts +50 -0
- package/dist/lib/daemon-services.js +147 -0
- package/dist/lib/daemon-ticks.d.ts +35 -66
- package/dist/lib/daemon-ticks.js +77 -159
- package/dist/lib/daemon.d.ts +72 -4
- package/dist/lib/daemon.js +792 -202
- package/dist/lib/deeplink/register.d.ts +49 -0
- package/dist/lib/deeplink/register.js +253 -0
- package/dist/lib/deeplink/url.d.ts +34 -0
- package/dist/lib/deeplink/url.js +78 -0
- package/dist/lib/device-config.d.ts +124 -29
- package/dist/lib/device-config.js +346 -141
- package/dist/lib/devices/config-migration.d.ts +42 -0
- package/dist/lib/devices/config-migration.js +203 -0
- package/dist/lib/devices/connect.js +14 -7
- package/dist/lib/devices/doctor-findings.d.ts +4 -1
- package/dist/lib/devices/doctor-findings.js +20 -1
- package/dist/lib/devices/harness-inventory.d.ts +11 -2
- package/dist/lib/devices/harness-inventory.js +0 -0
- package/dist/lib/devices/health.d.ts +1 -1
- package/dist/lib/devices/health.js +1 -1
- package/dist/lib/devices/pending.d.ts +22 -1
- package/dist/lib/devices/pending.js +67 -2
- package/dist/lib/devices/registry.d.ts +0 -25
- package/dist/lib/devices/registry.js +2 -83
- package/dist/lib/devices/resolve-profile.d.ts +20 -0
- package/dist/lib/devices/resolve-profile.js +44 -0
- package/dist/lib/devices/rollout-verify.d.ts +101 -0
- package/dist/lib/devices/rollout-verify.js +193 -0
- package/dist/lib/devices/ssh-config.js +10 -6
- package/dist/lib/event-families.d.ts +28 -0
- package/dist/lib/event-families.js +159 -0
- package/dist/lib/event-stream.d.ts +9 -1
- package/dist/lib/event-stream.js +26 -9
- package/dist/lib/events.d.ts +9 -1
- package/dist/lib/events.js +21 -6
- package/dist/lib/exec.d.ts +30 -0
- package/dist/lib/exec.js +220 -122
- package/dist/lib/feed-broadcast.d.ts +25 -0
- package/dist/lib/feed-broadcast.js +33 -0
- package/dist/lib/feed.d.ts +1 -1
- package/dist/lib/feed.js +12 -2
- package/dist/lib/fleet/capture.js +15 -0
- package/dist/lib/fleet/manifest.js +9 -0
- package/dist/lib/fleet/types.d.ts +9 -0
- package/dist/lib/fleet-status.js +10 -8
- package/dist/lib/git.d.ts +20 -6
- package/dist/lib/git.js +121 -17
- package/dist/lib/hosts/dispatch.d.ts +8 -3
- package/dist/lib/hosts/dispatch.js +29 -3
- package/dist/lib/hosts/logs.d.ts +2 -2
- package/dist/lib/hosts/logs.js +2 -2
- package/dist/lib/hosts/option.js +1 -1
- package/dist/lib/hosts/passthrough.d.ts +2 -3
- package/dist/lib/hosts/passthrough.js +10 -24
- package/dist/lib/hosts/progress.js +2 -2
- package/dist/lib/hosts/providers/devices.d.ts +3 -3
- package/dist/lib/hosts/providers/devices.js +18 -12
- package/dist/lib/hosts/ready.d.ts +5 -1
- package/dist/lib/hosts/ready.js +9 -3
- package/dist/lib/hosts/reconcile.d.ts +2 -2
- package/dist/lib/hosts/reconcile.js +2 -2
- package/dist/lib/hosts/registry.js +14 -9
- package/dist/lib/hosts/remote-cmd.js +1 -1
- package/dist/lib/hosts/remote-os.d.ts +9 -6
- package/dist/lib/hosts/remote-os.js +13 -6
- package/dist/lib/hosts/routing-flag.d.ts +23 -0
- package/dist/lib/hosts/routing-flag.js +41 -0
- package/dist/lib/hosts/run-target.js +1 -1
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/tasks.d.ts +6 -6
- package/dist/lib/hosts/tasks.js +4 -4
- package/dist/lib/hosts/types.js +1 -2
- package/dist/lib/installations/resolve.js +2 -8
- package/dist/lib/isolation-boundary-report.js +0 -1
- package/dist/lib/linear-cache.d.ts +7 -0
- package/dist/lib/linear-cache.js +31 -4
- package/dist/lib/linear-project-counts.d.ts +1 -1
- package/dist/lib/linear-project-counts.js +2 -3
- package/dist/lib/linear-projects.js +1 -1
- package/dist/lib/loop.d.ts +2 -2
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-target.d.ts +1 -1
- package/dist/lib/mailbox-target.js +1 -1
- package/dist/lib/manifest.js +7 -4
- package/dist/lib/menubar/MenubarHelper.app/Contents/CodeResources +0 -0
- package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
- package/dist/lib/menubar/snapshot.d.ts +3 -2
- package/dist/lib/menubar/snapshot.js +6 -2
- package/dist/lib/migrate-fold.d.ts +33 -0
- package/dist/lib/migrate-fold.js +130 -0
- package/dist/lib/migrate.d.ts +34 -34
- package/dist/lib/migrate.js +106 -128
- package/dist/lib/model-tier-overrides.d.ts +1 -1
- package/dist/lib/model-tier-overrides.js +15 -2
- package/dist/lib/monitors/config.d.ts +17 -3
- package/dist/lib/monitors/config.js +52 -18
- package/dist/lib/monitors/engine.d.ts +32 -1
- package/dist/lib/monitors/engine.js +94 -11
- package/dist/lib/monitors/fingerprint.d.ts +46 -0
- package/dist/lib/monitors/fingerprint.js +100 -0
- package/dist/lib/monitors/remote.d.ts +47 -0
- package/dist/lib/monitors/remote.js +81 -0
- package/dist/lib/monitors/state.d.ts +39 -0
- package/dist/lib/monitors/state.js +56 -0
- package/dist/lib/onepassword.d.ts +17 -0
- package/dist/lib/onepassword.js +52 -22
- package/dist/lib/open-url.js +1 -1
- package/dist/lib/picker.d.ts +14 -2
- package/dist/lib/picker.js +35 -13
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +1 -1
- package/dist/lib/pr-land-detach.d.ts +32 -0
- package/dist/lib/pr-land-detach.js +79 -0
- package/dist/lib/profiles-presets.js +13 -0
- package/dist/lib/profiles.d.ts +2 -0
- package/dist/lib/profiles.js +44 -1
- package/dist/lib/project-focus.d.ts +1 -1
- package/dist/lib/project-focus.js +1 -1
- package/dist/lib/project-key.d.ts +17 -0
- package/dist/lib/project-key.js +26 -0
- package/dist/lib/project-probe.d.ts +4 -1
- package/dist/lib/project-probe.js +5 -4
- package/dist/lib/project-resources.js +2 -18
- package/dist/lib/project-root.d.ts +16 -0
- package/dist/lib/project-root.js +20 -2
- package/dist/lib/projects.d.ts +20 -1
- package/dist/lib/projects.js +78 -1
- package/dist/lib/refresh-coordinator.d.ts +24 -0
- package/dist/lib/refresh-coordinator.js +52 -0
- package/dist/lib/registry.d.ts +2 -2
- package/dist/lib/registry.js +1 -1
- package/dist/lib/resource-aliases.d.ts +13 -0
- package/dist/lib/resource-aliases.js +26 -0
- package/dist/lib/resources/types.d.ts +1 -1
- package/dist/lib/resources.d.ts +16 -0
- package/dist/lib/resources.js +66 -10
- package/dist/lib/rotate.d.ts +3 -4
- package/dist/lib/rotate.js +4 -5
- package/dist/lib/routine-activation.d.ts +22 -2
- package/dist/lib/routine-activation.js +63 -16
- package/dist/lib/routine-context.d.ts +9 -2
- package/dist/lib/routine-context.js +21 -6
- package/dist/lib/routines-project.d.ts +58 -48
- package/dist/lib/routines-project.js +190 -159
- package/dist/lib/routines.d.ts +41 -6
- package/dist/lib/routines.js +92 -34
- package/dist/lib/run-defaults.d.ts +5 -0
- package/dist/lib/run-defaults.js +11 -1
- package/dist/lib/runner.d.ts +10 -8
- package/dist/lib/runner.js +122 -39
- package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
- package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
- package/dist/lib/secrets/agent.d.ts +10 -3
- package/dist/lib/secrets/agent.js +43 -8
- package/dist/lib/secrets/bundles.d.ts +1 -0
- package/dist/lib/secrets/bundles.js +92 -80
- package/dist/lib/secrets/index.js +32 -9
- package/dist/lib/secrets/install-helper.d.ts +4 -4
- package/dist/lib/secrets/install-helper.js +4 -4
- package/dist/lib/secrets/push.d.ts +40 -6
- package/dist/lib/secrets/push.js +58 -11
- package/dist/lib/secrets/read-backoff.d.ts +1 -1
- package/dist/lib/secrets/read-backoff.js +1 -1
- package/dist/lib/secrets/remote.d.ts +24 -0
- package/dist/lib/secrets/remote.js +54 -4
- package/dist/lib/self-update.d.ts +108 -0
- package/dist/lib/self-update.js +276 -1
- package/dist/lib/session/active.d.ts +89 -5
- package/dist/lib/session/active.js +165 -10
- package/dist/lib/session/actor-sidecar.d.ts +1 -1
- package/dist/lib/session/actor-sidecar.js +2 -1
- package/dist/lib/session/db.d.ts +176 -2
- package/dist/lib/session/db.js +484 -17
- package/dist/lib/session/discover.js +27 -4
- package/dist/lib/session/hook-sessions.js +2 -2
- package/dist/lib/session/host-link.d.ts +2 -2
- package/dist/lib/session/host-link.js +2 -2
- package/dist/lib/session/pid-registry.d.ts +21 -0
- package/dist/lib/session/pid-registry.js +57 -0
- package/dist/lib/session/remote-active.js +15 -1
- package/dist/lib/session/remote.js +2 -2
- package/dist/lib/session/session-cache.d.ts +14 -7
- package/dist/lib/session/session-cache.js +51 -9
- package/dist/lib/session/state.d.ts +2 -2
- package/dist/lib/session/state.js +1 -1
- package/dist/lib/session/sync/config.d.ts +10 -10
- package/dist/lib/session/sync/config.js +10 -10
- package/dist/lib/session/sync/r2.d.ts +34 -0
- package/dist/lib/session/sync/r2.js +123 -0
- package/dist/lib/session/throughput.d.ts +1 -1
- package/dist/lib/session/throughput.js +1 -1
- package/dist/lib/session/types.d.ts +23 -1
- package/dist/lib/session/types.js +15 -0
- package/dist/lib/session/viewing-in.d.ts +1 -1
- package/dist/lib/session/viewing-in.js +1 -1
- package/dist/lib/session/watch.d.ts +101 -0
- package/dist/lib/session/watch.js +242 -0
- package/dist/lib/share/config.d.ts +4 -0
- package/dist/lib/share/config.js +1 -0
- package/dist/lib/share/delete.d.ts +93 -0
- package/dist/lib/share/delete.js +127 -0
- package/dist/lib/share/provision.d.ts +38 -0
- package/dist/lib/share/provision.js +50 -0
- package/dist/lib/share/publish.d.ts +40 -1
- package/dist/lib/share/publish.js +116 -3
- package/dist/lib/share/worker-template.js +71 -6
- package/dist/lib/shims.d.ts +17 -3
- package/dist/lib/shims.js +136 -27
- package/dist/lib/signin-badge.js +3 -2
- package/dist/lib/skills.js +2 -0
- package/dist/lib/smart-launch.d.ts +8 -8
- package/dist/lib/smart-launch.js +80 -59
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +1 -1
- package/dist/lib/staleness/prune.d.ts +88 -0
- package/dist/lib/staleness/prune.js +69 -0
- package/dist/lib/staleness/registry.d.ts +1 -1
- package/dist/lib/staleness/writers/commands.js +34 -2
- package/dist/lib/staleness/writers/hooks.js +16 -0
- package/dist/lib/staleness/writers/kinds.d.ts +6 -0
- package/dist/lib/staleness/writers/skills.js +19 -0
- package/dist/lib/staleness/writers/subagents.d.ts +2 -3
- package/dist/lib/staleness/writers/subagents.js +0 -4
- package/dist/lib/staleness/writers/types.d.ts +32 -0
- package/dist/lib/startup/command-registry.d.ts +6 -12
- package/dist/lib/startup/command-registry.js +14 -31
- package/dist/lib/startup/dev-build.d.ts +10 -0
- package/dist/lib/startup/dev-build.js +13 -1
- package/dist/lib/startup/spellcheck.d.ts +18 -0
- package/dist/lib/startup/spellcheck.js +45 -0
- package/dist/lib/state.d.ts +36 -9
- package/dist/lib/state.js +96 -46
- package/dist/lib/subagents-registry.d.ts +0 -7
- package/dist/lib/subagents-registry.js +38 -65
- package/dist/lib/subagents.d.ts +0 -33
- package/dist/lib/subagents.js +0 -75
- package/dist/lib/sync-umbrella.js +1 -1
- package/dist/lib/teams/agents.d.ts +41 -1
- package/dist/lib/teams/agents.js +187 -9
- package/dist/lib/teams/api.d.ts +11 -1
- package/dist/lib/teams/api.js +11 -2
- package/dist/lib/teams/delivery.d.ts +41 -0
- package/dist/lib/teams/delivery.js +60 -0
- package/dist/lib/teams/registry.d.ts +14 -0
- package/dist/lib/teams/registry.js +51 -1
- package/dist/lib/teams/remoteWorktree.d.ts +19 -0
- package/dist/lib/teams/remoteWorktree.js +29 -0
- package/dist/lib/teams/scheduler.d.ts +1 -1
- package/dist/lib/teams/scheduler.js +1 -1
- package/dist/lib/teams/worktree.d.ts +24 -0
- package/dist/lib/teams/worktree.js +42 -0
- package/dist/lib/terminal/backends/vscodium-agent.d.ts +10 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +16 -5
- package/dist/lib/terminal/engine.d.ts +4 -0
- package/dist/lib/terminal/engine.js +8 -2
- package/dist/lib/terminal/types.d.ts +21 -2
- package/dist/lib/testdata/refresh-coordinator-worker.d.ts +1 -0
- package/dist/lib/testdata/refresh-coordinator-worker.js +23 -0
- package/dist/lib/tickets/list.d.ts +53 -0
- package/dist/lib/tickets/list.js +153 -0
- package/dist/lib/tmux/orphan-reap.d.ts +320 -0
- package/dist/lib/tmux/orphan-reap.js +644 -0
- package/dist/lib/tmux/session.d.ts +68 -3
- package/dist/lib/tmux/session.js +95 -5
- package/dist/lib/triggers/handlers.d.ts +20 -0
- package/dist/lib/triggers/handlers.js +6 -1
- package/dist/lib/types.d.ts +46 -34
- package/dist/lib/usage-fleet.d.ts +32 -0
- package/dist/lib/usage-fleet.js +125 -0
- package/dist/lib/usage-refresh.d.ts +3 -3
- package/dist/lib/usage-refresh.js +19 -16
- package/dist/lib/usage.d.ts +51 -47
- package/dist/lib/usage.js +145 -153
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/versions.d.ts +56 -13
- package/dist/lib/versions.js +195 -45
- package/dist/lib/watchdog/log.d.ts +1 -1
- package/dist/lib/watchdog/log.js +3 -3
- package/dist/lib/watchdog/rotate.d.ts +6 -6
- package/dist/lib/watchdog/rotate.js +6 -6
- package/dist/lib/workflows.d.ts +1 -1
- package/dist/lib/yaml-io.d.ts +47 -0
- package/dist/lib/yaml-io.js +55 -0
- package/package.json +2 -1
- package/scripts/install-helper.js +2 -2
- package/scripts/postinstall.js +23 -20
- package/dist/commands/defaults.d.ts +0 -7
- package/dist/commands/defaults.js +0 -107
- package/dist/commands/export.d.ts +0 -11
- package/dist/commands/export.js +0 -215
- package/dist/commands/helper.d.ts +0 -12
- package/dist/commands/helper.js +0 -87
- package/dist/commands/hosts.d.ts +0 -11
- package/dist/commands/hosts.js +0 -330
- package/dist/commands/lock.d.ts +0 -12
- package/dist/commands/lock.js +0 -70
- package/dist/commands/pull.d.ts +0 -17
- package/dist/commands/pull.js +0 -39
- package/dist/commands/push.d.ts +0 -14
- package/dist/commands/push.js +0 -30
- package/dist/commands/wallet.d.ts +0 -20
- package/dist/commands/wallet.js +0 -216
- package/dist/commands/worktree.d.ts +0 -19
- package/dist/commands/worktree.js +0 -272
- package/dist/lib/account-labels.d.ts +0 -24
- package/dist/lib/account-labels.js +0 -72
- package/dist/lib/auto-dispatch-linear.d.ts +0 -18
- package/dist/lib/auto-dispatch-linear.js +0 -107
- package/dist/lib/auto-dispatch-provider.d.ts +0 -10
- package/dist/lib/auto-dispatch-provider.js +0 -30
- package/dist/lib/auto-dispatch.d.ts +0 -93
- package/dist/lib/auto-dispatch.js +0 -128
- package/dist/lib/export.d.ts +0 -72
- package/dist/lib/export.js +0 -269
- package/dist/lib/lock.d.ts +0 -93
- package/dist/lib/lock.js +0 -207
- package/dist/lib/wallet/index.d.ts +0 -78
- package/dist/lib/wallet/index.js +0 -253
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { parseAgentsUrl } from '../lib/deeplink/url.js';
|
|
3
|
+
import { registerAgentsUrlScheme, unregisterAgentsUrlScheme, agentsUrlSchemeStatus, } from '../lib/deeplink/register.js';
|
|
4
|
+
export function registerOpenCommand(program) {
|
|
5
|
+
const open = program
|
|
6
|
+
.command('open [url]')
|
|
7
|
+
.description('Resume a session from an agents:// deep link, or register/unregister/status the OS URL-scheme handler.')
|
|
8
|
+
.action(async (url) => {
|
|
9
|
+
if (!url) {
|
|
10
|
+
open.help();
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
await handleUrl(url);
|
|
14
|
+
});
|
|
15
|
+
open
|
|
16
|
+
.command('register')
|
|
17
|
+
.description('Register the agents:// URL scheme with the OS so artifact links resume sessions (idempotent).')
|
|
18
|
+
.action(() => {
|
|
19
|
+
const status = registerAgentsUrlScheme();
|
|
20
|
+
if (status.registered) {
|
|
21
|
+
console.log(chalk.green('agents:// scheme registered.') + chalk.gray(` ${status.detail}`));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
console.log(chalk.yellow('Could not register the agents:// scheme.') + chalk.gray(` ${status.detail}`));
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
open
|
|
29
|
+
.command('unregister')
|
|
30
|
+
.description('Remove the agents:// URL scheme handler.')
|
|
31
|
+
.action(() => {
|
|
32
|
+
const status = unregisterAgentsUrlScheme();
|
|
33
|
+
console.log(chalk.gray(status.detail));
|
|
34
|
+
});
|
|
35
|
+
open
|
|
36
|
+
.command('status')
|
|
37
|
+
.description('Report whether the agents:// URL scheme handler is registered.')
|
|
38
|
+
.action(() => {
|
|
39
|
+
const status = agentsUrlSchemeStatus();
|
|
40
|
+
const label = status.registered ? chalk.green('registered') : chalk.yellow('not registered');
|
|
41
|
+
console.log(`agents:// handler: ${label} ${chalk.gray(`(${status.platform})`)}`);
|
|
42
|
+
console.log(chalk.gray(` ${status.detail}`));
|
|
43
|
+
if (!status.registered)
|
|
44
|
+
process.exitCode = 1;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async function handleUrl(url) {
|
|
48
|
+
const parsed = parseAgentsUrl(url);
|
|
49
|
+
if ('error' in parsed) {
|
|
50
|
+
console.error(chalk.red(`Not a valid agents:// link: ${parsed.error}`));
|
|
51
|
+
process.exitCode = 2;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Lazy-import the resume dispatcher so `register`/`status` stay cold-start cheap.
|
|
55
|
+
const { dispatchSessionLifecycleInPlace } = await import('./sessions-resume.js');
|
|
56
|
+
await dispatchSessionLifecycleInPlace(parsed.id, parsed.host ? [parsed.host] : []);
|
|
57
|
+
}
|
|
@@ -6,15 +6,13 @@
|
|
|
6
6
|
* hooks from configured registries or GitHub sources.
|
|
7
7
|
*/
|
|
8
8
|
import * as fs from 'fs';
|
|
9
|
-
import * as path from 'path';
|
|
10
9
|
import chalk from 'chalk';
|
|
11
10
|
import ora from 'ora';
|
|
12
|
-
import { getAgentsDir, getEnabledExtraRepos } from '../lib/state.js';
|
|
13
11
|
import { AGENTS, getAllCliStates, agentLabel, } from '../lib/agents.js';
|
|
14
12
|
import { capableAgents } from '../lib/capabilities.js';
|
|
15
13
|
import { DEFAULT_REGISTRIES } from '../lib/types.js';
|
|
16
|
-
import { getRegistries, setRegistry, removeRegistry, search as searchRegistries, resolvePackage, validatedNpmSpec, validatedPyPISpec,
|
|
17
|
-
import { cloneRepo
|
|
14
|
+
import { getRegistries, setRegistry, removeRegistry, search as searchRegistries, resolvePackage, validatedNpmSpec, validatedPyPISpec, verifySkillIntegrity, } from '../lib/registry.js';
|
|
15
|
+
import { cloneRepo } from '../lib/git.js';
|
|
18
16
|
import { discoverCommands, resolveCommandSource, installCommand, installCommandCentrally, } from '../lib/commands.js';
|
|
19
17
|
import { discoverSkillsFromRepo, installSkill, installSkillCentrally, } from '../lib/skills.js';
|
|
20
18
|
import { discoverHooksFromRepo, installHooks, installHooksCentrally, } from '../lib/hooks.js';
|
|
@@ -328,109 +326,6 @@ When to use:
|
|
|
328
326
|
}
|
|
329
327
|
});
|
|
330
328
|
// ==========================================================================
|
|
331
|
-
// PUBLISH COMMAND (self-hosted, git-index skill registry)
|
|
332
|
-
// ==========================================================================
|
|
333
|
-
program
|
|
334
|
-
.command('publish')
|
|
335
|
-
.description('Generate a skills-index.json for a git repo and push it, making its skills discoverable via agents search/install')
|
|
336
|
-
.option('--repo <alias>', 'Publish an extra repo added via `agents repo add` (default: your ~/.agents repo)')
|
|
337
|
-
.option('--name <name>', 'Registry name to suggest in the output (default: the repo name)')
|
|
338
|
-
.option('--branch <branch>', 'Branch to push the index to and reference in the raw URL (default: the repo\'s current branch)')
|
|
339
|
-
.option('--dry-run', 'Write the index and print the URL without committing or pushing')
|
|
340
|
-
.addHelpText('after', `
|
|
341
|
-
Publish walks a repo's skills/ directory, records a sha256 of every SKILL.md,
|
|
342
|
-
and writes skills-index.json at the repo root — a flat index that 'agents search'
|
|
343
|
-
and 'agents install' can consume directly from raw.githubusercontent.com. No
|
|
344
|
-
hosted infrastructure: the index is just a file committed to your GitHub repo.
|
|
345
|
-
|
|
346
|
-
Examples:
|
|
347
|
-
# Publish your ~/.agents repo's skills
|
|
348
|
-
agents publish
|
|
349
|
-
|
|
350
|
-
# Publish an extra repo added via 'agents repo add'
|
|
351
|
-
agents publish --repo team-skills
|
|
352
|
-
|
|
353
|
-
# Preview the index without pushing
|
|
354
|
-
agents publish --dry-run
|
|
355
|
-
|
|
356
|
-
After publishing, share the printed 'agents registry add skill ...' command so
|
|
357
|
-
others can search and install your skills. Installs verify each SKILL.md against
|
|
358
|
-
the sha256 in the index and abort on mismatch.
|
|
359
|
-
`)
|
|
360
|
-
.action(async (options) => {
|
|
361
|
-
// Resolve the target repo: an extra repo by alias, else the primary ~/.agents repo.
|
|
362
|
-
let repoDir;
|
|
363
|
-
if (options.repo) {
|
|
364
|
-
const extra = getEnabledExtraRepos().find((r) => r.alias === options.repo);
|
|
365
|
-
if (!extra) {
|
|
366
|
-
console.log(chalk.red(`No enabled extra repo aliased '${options.repo}'.`));
|
|
367
|
-
console.log(chalk.gray('Add one with: agents repo add <source> --as <alias>'));
|
|
368
|
-
process.exit(1);
|
|
369
|
-
}
|
|
370
|
-
repoDir = extra.dir;
|
|
371
|
-
}
|
|
372
|
-
else {
|
|
373
|
-
repoDir = getAgentsDir();
|
|
374
|
-
}
|
|
375
|
-
if (!isGitRepo(repoDir)) {
|
|
376
|
-
console.log(chalk.red(`${repoDir} is not a git repository.`));
|
|
377
|
-
console.log(chalk.gray('publish commits + pushes the index, so the repo needs a GitHub remote.'));
|
|
378
|
-
process.exit(1);
|
|
379
|
-
}
|
|
380
|
-
const remoteUrl = await getRemoteUrl(repoDir);
|
|
381
|
-
const repoSlug = remoteUrl ? parseOwnerRepoFromRemote(remoteUrl) : null;
|
|
382
|
-
if (!repoSlug) {
|
|
383
|
-
console.log(chalk.red(`Could not resolve an 'owner/repo' from the git remote of ${repoDir}.`));
|
|
384
|
-
console.log(chalk.gray(` Remote: ${remoteUrl || '(none)'} — publish needs a GitHub origin.`));
|
|
385
|
-
process.exit(1);
|
|
386
|
-
}
|
|
387
|
-
const spinner = ora('Building skills index...').start();
|
|
388
|
-
const index = buildSkillIndex(repoDir, repoSlug, { generatedAt: new Date().toISOString() });
|
|
389
|
-
spinner.stop();
|
|
390
|
-
if (index.skills.length === 0) {
|
|
391
|
-
console.log(chalk.yellow(`No skills found under ${repoDir}/skills.`));
|
|
392
|
-
console.log(chalk.gray('Add a skill (a directory with a SKILL.md) and re-run publish.'));
|
|
393
|
-
process.exit(1);
|
|
394
|
-
}
|
|
395
|
-
const indexPath = path.join(repoDir, 'skills-index.json');
|
|
396
|
-
fs.writeFileSync(indexPath, JSON.stringify(index, null, 2) + '\n', 'utf-8');
|
|
397
|
-
console.log(chalk.bold(`\nIndexed ${index.skills.length} skill(s) into skills-index.json:`));
|
|
398
|
-
for (const s of index.skills) {
|
|
399
|
-
console.log(` ${chalk.cyan(s.name)} ${chalk.gray(`sha256:${s.sha256?.slice(0, 12)}…`)}`);
|
|
400
|
-
}
|
|
401
|
-
// The branch the URL references must be the branch the index actually
|
|
402
|
-
// lands on. In a real push that's whatever commitAndPush reports back
|
|
403
|
-
// (the requested --branch, else the checked-out branch); in a dry run we
|
|
404
|
-
// resolve it the same way without pushing.
|
|
405
|
-
let urlBranch;
|
|
406
|
-
if (options.dryRun) {
|
|
407
|
-
urlBranch = options.branch || (await getCurrentBranch(repoDir));
|
|
408
|
-
console.log(chalk.gray(`\nDry run — wrote ${indexPath} but did not commit or push.`));
|
|
409
|
-
}
|
|
410
|
-
else {
|
|
411
|
-
const pushSpinner = ora('Committing and pushing skills-index.json...').start();
|
|
412
|
-
const result = await commitAndPush(repoDir, 'chore: update skills-index.json (agents publish)', options.branch);
|
|
413
|
-
if (!result.success) {
|
|
414
|
-
pushSpinner.fail(`Push failed: ${result.error}`);
|
|
415
|
-
console.log(chalk.gray('The index was written locally — commit and push it manually to publish.'));
|
|
416
|
-
process.exit(1);
|
|
417
|
-
}
|
|
418
|
-
// commitAndPush always reports the pushed branch on success; the `??`
|
|
419
|
-
// only satisfies the optional return type, it is not a behavior path.
|
|
420
|
-
urlBranch = result.branch ?? (await getCurrentBranch(repoDir));
|
|
421
|
-
pushSpinner.succeed(`Pushed skills-index.json to ${urlBranch}`);
|
|
422
|
-
}
|
|
423
|
-
const rawUrl = `https://raw.githubusercontent.com/${repoSlug}/${urlBranch}/skills-index.json`;
|
|
424
|
-
const registryName = options.name || repoSlug.split('/')[1] || 'my-skills';
|
|
425
|
-
console.log(chalk.bold('\nPublished. Share these with anyone who wants your skills:\n'));
|
|
426
|
-
console.log(chalk.gray(' Index URL:'));
|
|
427
|
-
console.log(` ${rawUrl}`);
|
|
428
|
-
console.log(chalk.gray('\n Register + search + install:'));
|
|
429
|
-
console.log(` ${chalk.green(`agents registry add skill ${registryName} ${rawUrl}`)}`);
|
|
430
|
-
console.log(` ${chalk.green(`agents search ${index.skills[0].name} --type skill`)}`);
|
|
431
|
-
console.log(` ${chalk.green(`agents install skill:${index.skills[0].name} --agents claude,codex,cursor`)}`);
|
|
432
|
-
});
|
|
433
|
-
// ==========================================================================
|
|
434
329
|
// INSTALL COMMAND (unified package installation)
|
|
435
330
|
// ==========================================================================
|
|
436
331
|
program
|
package/dist/commands/plugins.js
CHANGED
|
@@ -282,10 +282,11 @@ Examples:
|
|
|
282
282
|
}
|
|
283
283
|
console.log();
|
|
284
284
|
});
|
|
285
|
-
// agents
|
|
285
|
+
// Deprecated: superseded by `agents sync --plugin <name>`. Kept as a warned,
|
|
286
|
+
// functional alias so old muscle-memory and scripts don't break.
|
|
286
287
|
pluginsCmd
|
|
287
|
-
.command('sync <name> [agent]')
|
|
288
|
-
.description('
|
|
288
|
+
.command('sync <name> [agent]', { hidden: true })
|
|
289
|
+
.description('Deprecated — use `agents sync --plugin <name>` instead.')
|
|
289
290
|
.option('--allow-exec-surfaces', 'Enable the plugin even when it ships hooks/, .mcp.json, bin/, scripts/, settings.json, or permissions/')
|
|
290
291
|
.addHelpText('after', `
|
|
291
292
|
Examples:
|
|
@@ -302,6 +303,8 @@ Examples:
|
|
|
302
303
|
agents plugins sync hivemind claude --allow-exec-surfaces
|
|
303
304
|
`)
|
|
304
305
|
.action(async (name, agentArg, options) => {
|
|
306
|
+
console.warn(chalk.yellow('`agents plugins sync` is deprecated — use `agents sync --plugin` instead:'));
|
|
307
|
+
console.warn(chalk.gray(` agents sync --plugin ${name}`));
|
|
305
308
|
const plugin = getPlugin(name);
|
|
306
309
|
if (!plugin) {
|
|
307
310
|
console.log(chalk.red(`Plugin '${name}' not found`));
|
|
@@ -16,9 +16,8 @@ import { parseBundleValue, secretsKeychainItem } from '../lib/secrets/index.js';
|
|
|
16
16
|
import { readBundle } from '../lib/secrets/bundles.js';
|
|
17
17
|
import { isInteractiveTerminal } from './utils.js';
|
|
18
18
|
import { getAgentsInvocation } from '../lib/daemon.js';
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { listInstalledVersions, syncResourcesToVersion } from '../lib/versions.js';
|
|
19
|
+
import { ALL_AGENT_IDS } from '../lib/agents.js';
|
|
20
|
+
import { findAccount } from '../lib/account-registry.js';
|
|
22
21
|
/**
|
|
23
22
|
* Pure helper: builds a Profile from collected wizard inputs. Extracted so the
|
|
24
23
|
* shape of preset->profile mapping for the `create` wizard is unit-testable
|
|
@@ -159,6 +158,9 @@ export async function applyFromSecrets(profile, spec, explicitAuthProvider, opts
|
|
|
159
158
|
*/
|
|
160
159
|
export async function addProfile(name, opts, label = 'Profile') {
|
|
161
160
|
validateProfileName(name);
|
|
161
|
+
const account = opts.account ? findAccount(opts.account) : null;
|
|
162
|
+
if (opts.account && !account)
|
|
163
|
+
throw new Error(`Unknown account '${opts.account}'.`);
|
|
162
164
|
if (profileExists(name) && !opts.force) {
|
|
163
165
|
throw new Error(`${label} '${name}' already exists. Use --force to overwrite.`);
|
|
164
166
|
}
|
|
@@ -190,6 +192,10 @@ export async function addProfile(name, opts, label = 'Profile') {
|
|
|
190
192
|
provider: opts.authProvider,
|
|
191
193
|
authEnvVar,
|
|
192
194
|
});
|
|
195
|
+
if (account) {
|
|
196
|
+
profile.account = account.id;
|
|
197
|
+
profile.provider = account.provider;
|
|
198
|
+
}
|
|
193
199
|
if (opts.fromSecrets)
|
|
194
200
|
await applyFromSecrets(profile, opts.fromSecrets, opts.authProvider);
|
|
195
201
|
writeProfile(profile);
|
|
@@ -204,10 +210,14 @@ export async function addProfile(name, opts, label = 'Profile') {
|
|
|
204
210
|
throw new Error(`No preset '${presetName}'.\nAvailable presets: ${listPresets().map((p) => p.name).join(', ')}\n` +
|
|
205
211
|
'Or build a custom harness: --host <agent> --model <id>.');
|
|
206
212
|
}
|
|
207
|
-
if (!opts.fromSecrets && !preset.authOptional) {
|
|
213
|
+
if (!account && !opts.fromSecrets && !preset.authOptional) {
|
|
208
214
|
await ensureProviderToken(preset.provider, preset.signupUrl, opts.keyStdin);
|
|
209
215
|
}
|
|
210
216
|
const profile = profileFromPreset(name, preset, opts.version);
|
|
217
|
+
if (account) {
|
|
218
|
+
profile.account = account.id;
|
|
219
|
+
profile.provider = account.provider;
|
|
220
|
+
}
|
|
211
221
|
if (opts.fromSecrets)
|
|
212
222
|
await applyFromSecrets(profile, opts.fromSecrets, opts.authProvider);
|
|
213
223
|
writeProfile(profile);
|
|
@@ -221,141 +231,8 @@ function renderProfileRow(p) {
|
|
|
221
231
|
const provider = p.provider || (p.auth?.keychainItem?.split('.')[1]) || '-';
|
|
222
232
|
return `${chalk.cyan(p.name.padEnd(16))} ${host.padEnd(14)} ${provider.padEnd(12)} ${chalk.gray(model)}`;
|
|
223
233
|
}
|
|
224
|
-
function splitList(value) {
|
|
225
|
-
if (value === undefined)
|
|
226
|
-
return undefined;
|
|
227
|
-
return value.split(',').map((part) => part.trim()).filter(Boolean);
|
|
228
|
-
}
|
|
229
|
-
function buildResourceProfileFromOptions(existing, opts) {
|
|
230
|
-
const next = { ...(existing ?? {}) };
|
|
231
|
-
if (opts.description !== undefined)
|
|
232
|
-
next.description = opts.description || undefined;
|
|
233
|
-
const keys = ['commands', 'skills', 'hooks', 'subagents', 'plugins', 'workflows', 'permissions', 'mcp'];
|
|
234
|
-
for (const key of keys) {
|
|
235
|
-
const parsed = splitList(opts[key]);
|
|
236
|
-
if (parsed !== undefined)
|
|
237
|
-
next[key] = parsed;
|
|
238
|
-
}
|
|
239
|
-
const secrets = splitList(opts.secrets);
|
|
240
|
-
if (secrets !== undefined)
|
|
241
|
-
next.secrets = secrets;
|
|
242
|
-
if (opts.rules !== undefined)
|
|
243
|
-
next.rules = opts.rules || undefined;
|
|
244
|
-
return next;
|
|
245
|
-
}
|
|
246
|
-
function printResourceProfile(name, preset, activeName) {
|
|
247
|
-
const activeMark = activeName === name ? '*' : ' ';
|
|
248
|
-
const description = preset.description ? ` ${chalk.gray(preset.description)}` : '';
|
|
249
|
-
console.log(`${activeMark} ${chalk.cyan(name)}${description}`);
|
|
250
|
-
}
|
|
251
|
-
function syncInstalledVersionsForActiveProfile(cwd) {
|
|
252
|
-
let synced = 0;
|
|
253
|
-
for (const agent of Object.keys(AGENTS)) {
|
|
254
|
-
for (const version of listInstalledVersions(agent)) {
|
|
255
|
-
syncResourcesToVersion(agent, version, undefined, { cwd, force: true });
|
|
256
|
-
synced++;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
return synced;
|
|
260
|
-
}
|
|
261
|
-
function registerResourceProfileCommands(program) {
|
|
262
|
-
const cmd = program
|
|
263
|
-
.command('profile')
|
|
264
|
-
.description('Activate top-level resource profiles across commands, skills, hooks, rules, MCP, permissions, and secrets.');
|
|
265
|
-
cmd
|
|
266
|
-
.command('list')
|
|
267
|
-
.alias('ls')
|
|
268
|
-
.description('List top-level resource profiles')
|
|
269
|
-
.action(() => {
|
|
270
|
-
const names = listResourceProfileNames();
|
|
271
|
-
if (names.length === 0) {
|
|
272
|
-
console.log(chalk.gray('No resource profiles configured.'));
|
|
273
|
-
console.log(chalk.gray('Try: agents profile set work --skills user:code-review --secrets work'));
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
const active = getActiveResourceProfileName();
|
|
277
|
-
for (const name of names) {
|
|
278
|
-
printResourceProfile(name, getResourceProfilePreset(name), active);
|
|
279
|
-
}
|
|
280
|
-
});
|
|
281
|
-
cmd
|
|
282
|
-
.command('status')
|
|
283
|
-
.description('Show the active top-level resource profile')
|
|
284
|
-
.action(() => {
|
|
285
|
-
const active = getActiveResourceProfileName();
|
|
286
|
-
if (!active) {
|
|
287
|
-
console.log(chalk.gray('No resource profile active.'));
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
const preset = getResourceProfilePreset(active);
|
|
291
|
-
console.log(chalk.bold(active));
|
|
292
|
-
if (!preset) {
|
|
293
|
-
console.log(chalk.red('Configured active profile is missing from profiles.presets.'));
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
if (preset.description)
|
|
297
|
-
console.log(chalk.gray(preset.description));
|
|
298
|
-
for (const [key, value] of Object.entries(preset)) {
|
|
299
|
-
if (key === 'description')
|
|
300
|
-
continue;
|
|
301
|
-
console.log(`${key}: ${Array.isArray(value) ? value.join(', ') : value}`);
|
|
302
|
-
}
|
|
303
|
-
});
|
|
304
|
-
cmd
|
|
305
|
-
.command('set <name>')
|
|
306
|
-
.alias('define')
|
|
307
|
-
.description('Create or update a top-level resource profile')
|
|
308
|
-
.option('--description <text>', 'Free-form description')
|
|
309
|
-
.option('--commands <patterns>', 'Comma-separated command selectors, e.g. system:commit,user:*')
|
|
310
|
-
.option('--skills <patterns>', 'Comma-separated skill selectors')
|
|
311
|
-
.option('--hooks <patterns>', 'Comma-separated hook selectors')
|
|
312
|
-
.option('--subagents <patterns>', 'Comma-separated subagent selectors')
|
|
313
|
-
.option('--plugins <patterns>', 'Comma-separated plugin selectors')
|
|
314
|
-
.option('--workflows <patterns>', 'Comma-separated workflow selectors')
|
|
315
|
-
.option('--permissions <patterns>', 'Comma-separated permission group selectors')
|
|
316
|
-
.option('--mcp <patterns>', 'Comma-separated MCP server selectors')
|
|
317
|
-
.option('--rules <preset>', 'Rules preset to compose while active')
|
|
318
|
-
.option('--secrets <names>', 'Comma-separated secrets bundles, or "*"')
|
|
319
|
-
.action((name, opts) => {
|
|
320
|
-
try {
|
|
321
|
-
validateResourceProfileName(name);
|
|
322
|
-
const preset = buildResourceProfileFromOptions(getResourceProfilePreset(name), opts);
|
|
323
|
-
upsertResourceProfilePreset(name, preset);
|
|
324
|
-
console.log(chalk.green(`Profile '${name}' saved.`));
|
|
325
|
-
}
|
|
326
|
-
catch (err) {
|
|
327
|
-
console.error(chalk.red(err.message));
|
|
328
|
-
process.exit(1);
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
cmd
|
|
332
|
-
.command('use <name>')
|
|
333
|
-
.description('Activate a top-level resource profile and reconcile installed versions')
|
|
334
|
-
.action((name) => {
|
|
335
|
-
try {
|
|
336
|
-
setActiveResourceProfile(name);
|
|
337
|
-
const synced = syncInstalledVersionsForActiveProfile(process.cwd());
|
|
338
|
-
console.log(chalk.green(`Profile '${name}' active.`));
|
|
339
|
-
console.log(chalk.gray(`Reconciled ${synced} installed version${synced === 1 ? '' : 's'}.`));
|
|
340
|
-
}
|
|
341
|
-
catch (err) {
|
|
342
|
-
console.error(chalk.red(err.message));
|
|
343
|
-
process.exit(1);
|
|
344
|
-
}
|
|
345
|
-
});
|
|
346
|
-
cmd
|
|
347
|
-
.command('clear')
|
|
348
|
-
.description('Clear the active top-level resource profile and reconcile installed versions')
|
|
349
|
-
.action(() => {
|
|
350
|
-
setActiveResourceProfile(null);
|
|
351
|
-
const synced = syncInstalledVersionsForActiveProfile(process.cwd());
|
|
352
|
-
console.log(chalk.green('Resource profile cleared.'));
|
|
353
|
-
console.log(chalk.gray(`Reconciled ${synced} installed version${synced === 1 ? '' : 's'}.`));
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
234
|
/** Register the `agents profiles` command tree. */
|
|
357
235
|
export function registerProfilesCommands(program) {
|
|
358
|
-
registerResourceProfileCommands(program);
|
|
359
236
|
const cmd = program
|
|
360
237
|
.command('profiles')
|
|
361
238
|
.description('Named bundles of (host CLI, endpoint, model, auth) — run Kimi/DeepSeek/Qwen/etc through Claude Code without a proxy.')
|
|
@@ -427,28 +304,6 @@ Examples:
|
|
|
427
304
|
# Fully remove the OpenRouter key from Keychain
|
|
428
305
|
agents profiles logout openrouter
|
|
429
306
|
`);
|
|
430
|
-
cmd
|
|
431
|
-
.command('use <name>')
|
|
432
|
-
.description('Alias for `agents profile use <name>`')
|
|
433
|
-
.action((name) => {
|
|
434
|
-
try {
|
|
435
|
-
setActiveResourceProfile(name);
|
|
436
|
-
const synced = syncInstalledVersionsForActiveProfile(process.cwd());
|
|
437
|
-
console.log(chalk.green(`Profile '${name}' active.`));
|
|
438
|
-
console.log(chalk.gray(`Reconciled ${synced} installed version${synced === 1 ? '' : 's'}.`));
|
|
439
|
-
}
|
|
440
|
-
catch (err) {
|
|
441
|
-
console.error(chalk.red(err.message));
|
|
442
|
-
process.exit(1);
|
|
443
|
-
}
|
|
444
|
-
});
|
|
445
|
-
cmd
|
|
446
|
-
.command('status')
|
|
447
|
-
.description('Alias for `agents profile status`')
|
|
448
|
-
.action(() => {
|
|
449
|
-
const active = getActiveResourceProfileName();
|
|
450
|
-
console.log(active ? active : chalk.gray('No resource profile active.'));
|
|
451
|
-
});
|
|
452
307
|
cmd
|
|
453
308
|
.command('list')
|
|
454
309
|
.alias('ls')
|
|
@@ -609,6 +464,7 @@ Examples:
|
|
|
609
464
|
.description('Add a profile. If <name> matches a built-in preset, the preset is applied. Prompts for API key (once per provider).')
|
|
610
465
|
.option('--preset <preset>', 'Use a named preset (defaults to <name> if a preset by that name exists)')
|
|
611
466
|
.option('--version <version>', 'Pin the host CLI version (e.g., 2.1.113)')
|
|
467
|
+
.option('--account <name>', 'Attach an existing durable credential account')
|
|
612
468
|
.option('--key-stdin', 'Read API key from stdin instead of prompting (for scripts/CI)')
|
|
613
469
|
.option('--force', 'Overwrite an existing profile with the same name')
|
|
614
470
|
.addHelpText('after', '\nTo build a custom harness from a host CLI + model in one shot, use `agents harness add`.\n')
|
|
@@ -617,7 +473,7 @@ Examples:
|
|
|
617
473
|
// device routing (see lib/hosts/passthrough.ts). The host+model one-shot
|
|
618
474
|
// lives on `agents harness add`, which owns its own `--host`.
|
|
619
475
|
try {
|
|
620
|
-
await addProfile(name, { preset: opts.preset, version: opts.version, keyStdin: opts.keyStdin, force: opts.force }, 'Profile');
|
|
476
|
+
await addProfile(name, { preset: opts.preset, version: opts.version, account: opts.account, keyStdin: opts.keyStdin, force: opts.force }, 'Profile');
|
|
621
477
|
}
|
|
622
478
|
catch (err) {
|
|
623
479
|
console.error(chalk.red(err.message));
|
|
@@ -8,9 +8,18 @@
|
|
|
8
8
|
* lifecycle state, plan completion, open PRs, and tickets in flight.
|
|
9
9
|
*/
|
|
10
10
|
import type { Command } from 'commander';
|
|
11
|
+
import { type ProjectRepo } from '../lib/projects.js';
|
|
11
12
|
import { type LinearMilestone } from '../lib/linear-project-counts.js';
|
|
12
13
|
/** Recursion guard: a peer answering a probe fan-out never re-fans-out itself. */
|
|
13
14
|
export declare const PROJECTS_NO_FANOUT_ENV = "AGENTS_PROJECTS_LOCAL";
|
|
15
|
+
/**
|
|
16
|
+
* Render `agents projects for-cwd`'s output for a resolved (or absent)
|
|
17
|
+
* project name — `--json` always prints `{"name": ...}` even on no match, so
|
|
18
|
+
* a scripted caller can distinguish "ran and found nothing" from a crash;
|
|
19
|
+
* the plain-text form prints nothing on no match. Returns '' when nothing
|
|
20
|
+
* should be printed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatForCwdOutput(name: string | undefined, json: boolean): string;
|
|
14
23
|
/**
|
|
15
24
|
* One compact trailing note for peers that didn't answer the `--fleet`
|
|
16
25
|
* fan-out — unreachable, running an agents-cli too old to carry `projects
|
|
@@ -28,6 +37,25 @@ export declare function formatFleetSkippedNote(skipped: string[]): string;
|
|
|
28
37
|
* expected answer here (`undefined`), not something to report.
|
|
29
38
|
*/
|
|
30
39
|
export declare function originSlug(cwd: string): string | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Turn a `--dir` / `--add-dir` value into a `repos[]` row.
|
|
42
|
+
*
|
|
43
|
+
* The slug comes from the DIRECTORY'S OWN origin remote, never from its path:
|
|
44
|
+
* a checkout at `~/src/github.com/muqsitnawaz/agents-cli` whose origin is
|
|
45
|
+
* `phnx-labs/agents-cli` must record the remote it actually pushes to. Pass
|
|
46
|
+
* `slugOverride` for a directory with no origin (a vendored tree, a fresh
|
|
47
|
+
* `git init`).
|
|
48
|
+
*
|
|
49
|
+
* The stored `path` is left for `writeProjectDef` to normalize home-relative,
|
|
50
|
+
* so the same definition re-roots on every machine.
|
|
51
|
+
*/
|
|
52
|
+
export declare function projectRepoFromDir(dir: string, slugOverride?: string): {
|
|
53
|
+
ok: true;
|
|
54
|
+
repo: ProjectRepo;
|
|
55
|
+
} | {
|
|
56
|
+
ok: false;
|
|
57
|
+
error: string;
|
|
58
|
+
};
|
|
31
59
|
/** One `projects list` row, pre-render. */
|
|
32
60
|
export interface ProjectListRow {
|
|
33
61
|
name: string;
|