@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/lib/state.js
CHANGED
|
@@ -26,6 +26,7 @@ import * as fs from 'fs';
|
|
|
26
26
|
import * as path from 'path';
|
|
27
27
|
import * as os from 'os';
|
|
28
28
|
import * as yaml from 'yaml';
|
|
29
|
+
import { stringifyDoc } from './yaml-io.js';
|
|
29
30
|
import { execFileSync } from 'child_process';
|
|
30
31
|
import { ensureLockTarget, atomicWriteFileSync, withFileLock } from './fs-atomic.js';
|
|
31
32
|
import { DEFAULT_SYSTEM_REPO, systemRepoSlug } from './types.js';
|
|
@@ -78,6 +79,11 @@ const SYSTEM_PLUGINS_DIR = path.join(SYSTEM_AGENTS_DIR, 'plugins');
|
|
|
78
79
|
// Unioned under user routines by listJobs()/readJob() so a routine shipped here
|
|
79
80
|
// fires for every install, while a user routine of the same name overrides it.
|
|
80
81
|
const SYSTEM_ROUTINES_DIR = path.join(SYSTEM_AGENTS_DIR, 'routines');
|
|
82
|
+
// Built-in monitors shipped in the system repo (gh:phnx-labs/.agents-system).
|
|
83
|
+
// Unioned under user monitors by listMonitors()/readMonitor() so a monitor
|
|
84
|
+
// shipped here is available on every install, while a user monitor of the same
|
|
85
|
+
// name overrides it (a built-in with no `enabled:` field stays opt-in).
|
|
86
|
+
const SYSTEM_MONITORS_DIR = path.join(SYSTEM_AGENTS_DIR, 'monitors');
|
|
81
87
|
const SYSTEM_WEBHOOKS_DIR = path.join(SYSTEM_AGENTS_DIR, 'webhooks');
|
|
82
88
|
const SYSTEM_PROMPTCUTS_FILE = path.join(SYSTEM_AGENTS_DIR, 'hooks', 'promptcuts.yaml');
|
|
83
89
|
const SYSTEM_MCP_CONFIG_FILE = path.join(SYSTEM_AGENTS_DIR, 'mcp.json');
|
|
@@ -97,6 +103,9 @@ const TEAMS_DIR = path.join(USER_AGENTS_DIR, 'teams');
|
|
|
97
103
|
// Named project definitions (the layer above the --project convention). Sibling
|
|
98
104
|
// of ROUTINES_DIR/TEAMS_DIR: hand-editable YAML, synced across machines by push/pull.
|
|
99
105
|
const PROJECTS_DIR = path.join(USER_AGENTS_DIR, 'projects');
|
|
106
|
+
// Daemon service toggles and persistent daemon config. Top-level config/definitions
|
|
107
|
+
// dir like routines/webhooks; runtime state (pid/heartbeat/logs) stays in .cache.
|
|
108
|
+
const DAEMON_CONFIG_DIR = path.join(USER_AGENTS_DIR, 'daemon');
|
|
100
109
|
// History bucket (durable).
|
|
101
110
|
const SESSIONS_DIR = path.join(HISTORY_DIR, 'sessions');
|
|
102
111
|
const SESSIONS_DB_PATH = path.join(SESSIONS_DIR, 'sessions.db');
|
|
@@ -154,7 +163,7 @@ const USER_PROMPTCUTS_FILE = path.join(USER_AGENTS_DIR, 'hooks', 'promptcuts.yam
|
|
|
154
163
|
* Header prepended to every agents.yaml the CLI writes (central and per-device
|
|
155
164
|
* docs). Carries the yaml-language-server schema hint so editors validate the
|
|
156
165
|
* file against `schema/agents-yaml.schema.json`. Exported so
|
|
157
|
-
* `lib/
|
|
166
|
+
* `lib/devices/config-migration.ts` rewrites a device doc with the same header.
|
|
158
167
|
*/
|
|
159
168
|
export const META_HEADER = `# agents-cli metadata
|
|
160
169
|
# Auto-generated - do not edit manually
|
|
@@ -411,6 +420,8 @@ export function getPackagesDir() { return PACKAGES_DIR; }
|
|
|
411
420
|
export function getRoutinesDir() { return process.env.AGENTS_ROUTINES_DIR ?? ROUTINES_DIR; }
|
|
412
421
|
/** Path to named project definitions (~/.agents/projects/). */
|
|
413
422
|
export function getProjectsDir() { return process.env.AGENTS_PROJECTS_DIR ?? PROJECTS_DIR; }
|
|
423
|
+
/** Path to daemon config directory (~/.agents/daemon/). Holds service toggles. */
|
|
424
|
+
export function getDaemonConfigDir() { return process.env.AGENTS_DAEMON_CONFIG_DIR ?? DAEMON_CONFIG_DIR; }
|
|
414
425
|
/**
|
|
415
426
|
* Path to webhook handler YAML definitions (~/.agents/webhooks/). Handlers are
|
|
416
427
|
* one-off triggers for agents/workflows/commands/routines, layered the same way
|
|
@@ -435,12 +446,12 @@ export function getSystemWebhooksDir() { return process.env.AGENTS_SYSTEM_WEBHOO
|
|
|
435
446
|
* or null when no project `.agents/` is found by walking up from cwd.
|
|
436
447
|
*
|
|
437
448
|
* Project routines participate in `list`/`view` for inspection always. Daemon
|
|
438
|
-
* firing requires
|
|
439
|
-
*
|
|
440
|
-
*
|
|
441
|
-
*
|
|
442
|
-
*
|
|
443
|
-
*
|
|
449
|
+
* firing requires `agents routines enable <name>`, which materialises the
|
|
450
|
+
* routine into the user layer with `source:` provenance (so the daemon, which
|
|
451
|
+
* loads user + system only, can see it) and turns on the device flag in one
|
|
452
|
+
* step. Enablement lives solely in `meta.deviceRoutines`; a project YAML's own
|
|
453
|
+
* `enabled:` field never turns firing on, so a cloned repo cannot auto-run.
|
|
454
|
+
* See `lib/routines-project.ts`.
|
|
444
455
|
*/
|
|
445
456
|
export function getProjectRoutinesDir(cwd = process.cwd()) {
|
|
446
457
|
const projectAgentsDir = getProjectAgentsDir(cwd);
|
|
@@ -462,7 +473,17 @@ export function getProjectWebhooksDir(cwd = process.cwd()) {
|
|
|
462
473
|
/** Path to routine execution logs (~/.agents/.history/runs/). */
|
|
463
474
|
export function getRunsDir() { return RUNS_DIR; }
|
|
464
475
|
/** Path to monitor YAML definitions (~/.agents/monitors/). */
|
|
465
|
-
export function getMonitorsDir() { return MONITORS_DIR; }
|
|
476
|
+
export function getMonitorsDir() { return process.env.AGENTS_MONITORS_DIR ?? MONITORS_DIR; }
|
|
477
|
+
/**
|
|
478
|
+
* Path to built-in monitor definitions shipped in the system repo
|
|
479
|
+
* (`~/.agents/.system/monitors/`). Unioned under the user monitors dir by
|
|
480
|
+
* listMonitors()/readMonitor(): a monitor shipped here is available on every
|
|
481
|
+
* install, and a user monitor of the same name overrides it. A built-in with no
|
|
482
|
+
* `enabled:` field is opt-in — it stays disabled until the user enables it,
|
|
483
|
+
* which materializes a user copy (writes never touch this pull-only mirror). The
|
|
484
|
+
* directory need not exist.
|
|
485
|
+
*/
|
|
486
|
+
export function getSystemMonitorsDir() { return process.env.AGENTS_SYSTEM_MONITORS_DIR ?? SYSTEM_MONITORS_DIR; }
|
|
466
487
|
/** Path to the durable per-monitor state-diff store + fire history
|
|
467
488
|
* (~/.agents/.history/monitors/). */
|
|
468
489
|
export function getMonitorsHistoryDir() { return MONITORS_HISTORY_DIR; }
|
|
@@ -543,10 +564,10 @@ function getDevicesDir() {
|
|
|
543
564
|
export function getDevicesRegistryPath() { return path.join(getDevicesDir(), 'registry.json'); }
|
|
544
565
|
/** Path to the device ignore-list — tailscale node names the user dismissed, so auto-discovery never re-suggests them. Per-machine, same dir as the registry. */
|
|
545
566
|
export function getDevicesIgnoredPath() { return path.join(getDevicesDir(), 'ignored.json'); }
|
|
546
|
-
/** Path to the device auto-launch preference file — which registered devices are eligible/preferred for
|
|
567
|
+
/** Path to the LEGACY device auto-launch preference file — which registered devices are eligible/preferred for the ext's auto-host selection. Superseded by the central `fleet.devices.<name>.config` block; only lib/devices/config-migration.ts still reads it (to fold + remove it). */
|
|
547
568
|
export function getDevicesAutoLaunchPath() { return path.join(getDevicesDir(), 'auto-launch.json'); }
|
|
548
569
|
/** Dir of "pending device" sentinels (~/.agents/.cache/state/devices-pending/) — one empty-ish file per newly-discovered, not-yet-approved tailnet node. Written by the daemon probe, read by the menu-bar helper (mirrors the attention sentinel dir). */
|
|
549
|
-
export function getDevicesPendingDir() { return path.join(
|
|
570
|
+
export function getDevicesPendingDir() { return path.join(getRuntimeStateDir(), 'devices-pending'); }
|
|
550
571
|
/** Path to cloud dispatch cache (~/.agents/.cache/cloud/). */
|
|
551
572
|
export function getCloudDir() { return CLOUD_DIR; }
|
|
552
573
|
/** Path to terminal session metadata (~/.agents/.cache/terminals/). */
|
|
@@ -575,8 +596,23 @@ export function getPerfDir() {
|
|
|
575
596
|
export function getPerfDbPath() { return path.join(getPerfDir(), 'perf.db'); }
|
|
576
597
|
/** Path to the hook-shim NDJSON spool drained into perf.db on open. */
|
|
577
598
|
export function getPerfSpoolPath() { return path.join(getPerfDir(), 'spool.jsonl'); }
|
|
578
|
-
/**
|
|
579
|
-
|
|
599
|
+
/**
|
|
600
|
+
* Path to per-process runtime state (~/.agents/.cache/state/).
|
|
601
|
+
*
|
|
602
|
+
* `AGENTS_STATE_DIR` redirects it in tests — the same test-isolation escape
|
|
603
|
+
* hatch as `AGENTS_DEVICES_DIR` / `AGENTS_LOGS_DIR`, and resolved at call time
|
|
604
|
+
* for the same reason (a suite pins it after this module is imported).
|
|
605
|
+
*
|
|
606
|
+
* Without it the suite writes into the operator's LIVE state. Concretely: the
|
|
607
|
+
* device registry and ignore-list already redirect via `AGENTS_DEVICES_DIR`, so
|
|
608
|
+
* under test both read empty — and any code path reaching
|
|
609
|
+
* `reconcilePendingSentinels` then computed "every tailnet node is new" and
|
|
610
|
+
* wrote those sentinels into the real `devices-pending/`, which is exactly what
|
|
611
|
+
* the menu bar renders. Running the suite on a dev machine surfaced all 20
|
|
612
|
+
* tailnet nodes as NEW DEVICES, including registered and explicitly ignored
|
|
613
|
+
* ones, and looked like the operator's ignore list had been lost.
|
|
614
|
+
*/
|
|
615
|
+
export function getRuntimeStateDir() { return process.env.AGENTS_STATE_DIR ?? RUNTIME_STATE_DIR; }
|
|
580
616
|
/** Path to companion-extension scratch (~/.agents/.cache/companion/). */
|
|
581
617
|
export function getCompanionDir() { return COMPANION_CACHE_DIR; }
|
|
582
618
|
/** Path to browser runtime data — chrome-data, pids (~/.agents/.cache/browser/). */
|
|
@@ -787,9 +823,10 @@ function writeIfChanged(filePath, content) {
|
|
|
787
823
|
/**
|
|
788
824
|
* Partition the in-memory Meta across three files by sync-domain:
|
|
789
825
|
* - central `~/.agents/agents.yaml` — portable, everything else
|
|
790
|
-
* (including the user-scope `config:` block
|
|
826
|
+
* (including the user-scope `config:` block and the per-device
|
|
827
|
+
* operator config under `fleet.devices.<name>.config`)
|
|
791
828
|
* - device `~/.agents/devices/<machine>/agents.yaml` — `agents:` pins +
|
|
792
|
-
* `
|
|
829
|
+
* `routines:` (all per-machine)
|
|
793
830
|
* - history `~/.agents/.history/version-resources.json` — `versions:` (machine-local)
|
|
794
831
|
* All callers funnel through writeMeta → here, so nothing else changes. Empty
|
|
795
832
|
* `agents:` / `versions:` are not written (no empty committed files).
|
|
@@ -810,10 +847,11 @@ const META_KEY_SCOPE = {
|
|
|
810
847
|
agents: 'device',
|
|
811
848
|
isolatedAgents: 'device',
|
|
812
849
|
versions: 'device',
|
|
813
|
-
defaultBrowserProfile: 'device',
|
|
814
|
-
deviceConfig: 'device',
|
|
815
850
|
deviceRoutines: 'device',
|
|
851
|
+
deviceConfig: 'device',
|
|
852
|
+
deviceBrowser: 'device',
|
|
816
853
|
// Central — synced via agents.yaml.
|
|
854
|
+
accounts: 'central',
|
|
817
855
|
run: 'central',
|
|
818
856
|
model: 'central',
|
|
819
857
|
watchdog: 'central',
|
|
@@ -825,7 +863,7 @@ const META_KEY_SCOPE = {
|
|
|
825
863
|
registries: 'central',
|
|
826
864
|
profiles: 'central',
|
|
827
865
|
source: 'central',
|
|
828
|
-
projectRoot: '
|
|
866
|
+
projectRoot: 'device',
|
|
829
867
|
extraRepos: 'central',
|
|
830
868
|
brands: 'central',
|
|
831
869
|
actors: 'central',
|
|
@@ -837,7 +875,6 @@ const META_KEY_SCOPE = {
|
|
|
837
875
|
fleet: 'central',
|
|
838
876
|
share: 'central',
|
|
839
877
|
notify: 'central',
|
|
840
|
-
routines: 'central',
|
|
841
878
|
};
|
|
842
879
|
/**
|
|
843
880
|
* Every key this version models (central + device). serializeCentral deletes an
|
|
@@ -903,14 +940,16 @@ function serializeCentral(central) {
|
|
|
903
940
|
if (!changed)
|
|
904
941
|
return existing;
|
|
905
942
|
// Everything cleared → header only (never leave a flow `{}` behind).
|
|
906
|
-
// Otherwise
|
|
907
|
-
//
|
|
908
|
-
// instead of a `- teams` block list)
|
|
909
|
-
//
|
|
910
|
-
|
|
943
|
+
// Otherwise stringifyDoc: it still normalizes a legacy flow root (`{}`) to
|
|
944
|
+
// block, so edited nodes do not render flow (`disabledCommands: [ teams ]`
|
|
945
|
+
// instead of a `- teams` block list), but it no longer forces block on a
|
|
946
|
+
// normal document — that flattened committed flow sequences and made this
|
|
947
|
+
// writer disagree with feed.ts/activity.ts/migrate.ts on the same file
|
|
948
|
+
// (RUSH-2505). parseDocument still preserves comments + key ordering.
|
|
949
|
+
return isEmpty ? META_HEADER : stringifyDoc(doc);
|
|
911
950
|
}
|
|
912
951
|
function writeMetaUnlocked(meta) {
|
|
913
|
-
const { agents, isolatedAgents, versions,
|
|
952
|
+
const { agents, isolatedAgents, versions, deviceRoutines, deviceConfig, deviceBrowser, projectRoot, ...central } = meta;
|
|
914
953
|
// Write the machine-local files FIRST, then strip central — so a crash mid-write
|
|
915
954
|
// never removes pins/versions from central before they're persisted elsewhere.
|
|
916
955
|
const devicePath = getDeviceMetaPath();
|
|
@@ -920,26 +959,32 @@ function writeMetaUnlocked(meta) {
|
|
|
920
959
|
// central doc that syncs — otherwise another machine inherits a pointer to a copy
|
|
921
960
|
// it does not have.
|
|
922
961
|
const hasIsolatedAgents = !!isolatedAgents && Object.keys(isolatedAgents).length > 0;
|
|
923
|
-
const hasDefaultBrowser = !!defaultBrowserProfile;
|
|
924
|
-
// Device-scope config (`maxAgents`, `schedulerEnabled`, …) is per-machine, so it
|
|
925
|
-
// rides the device doc under `config:` — never the central doc that syncs.
|
|
926
|
-
const hasDeviceConfig = !!deviceConfig && Object.keys(deviceConfig).length > 0;
|
|
927
962
|
const hasDeviceRoutines = Array.isArray(deviceRoutines);
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
963
|
+
// Machine-visibility operator config. Lives here rather than in the synced
|
|
964
|
+
// central file because nothing off-box reads it — and because
|
|
965
|
+
// browser.remote-control is a consent flag that must not propagate on pull.
|
|
966
|
+
const hasDeviceConfig = !!deviceConfig && Object.keys(deviceConfig).length > 0;
|
|
967
|
+
const hasDeviceBrowser = !!deviceBrowser && Object.keys(deviceBrowser).length > 0;
|
|
968
|
+
// An inferred local filesystem path — machine state, never fleet policy.
|
|
969
|
+
const hasProjectRoot = typeof projectRoot === 'string' && projectRoot.length > 0;
|
|
970
|
+
if (hasAgents || hasIsolatedAgents || hasDeviceRoutines || hasDeviceConfig || hasDeviceBrowser || hasProjectRoot) {
|
|
971
|
+
// Device-local doc carries `agents:` pins and `routines:` — per-machine and
|
|
972
|
+
// must never land in central agents.yaml (which syncs). Operator config
|
|
973
|
+
// used to ride this doc under `config:`; it now lives centrally under
|
|
974
|
+
// `fleet.devices.<name>.config` (see lib/device-config.ts).
|
|
932
975
|
const deviceDoc = {};
|
|
933
976
|
if (hasAgents)
|
|
934
977
|
deviceDoc.agents = agents;
|
|
935
978
|
if (hasIsolatedAgents)
|
|
936
979
|
deviceDoc.isolatedAgents = isolatedAgents;
|
|
937
|
-
if (hasDefaultBrowser)
|
|
938
|
-
deviceDoc.defaultBrowserProfile = defaultBrowserProfile;
|
|
939
|
-
if (hasDeviceConfig)
|
|
940
|
-
deviceDoc.config = deviceConfig;
|
|
941
980
|
if (hasDeviceRoutines)
|
|
942
981
|
deviceDoc.routines = deviceRoutines;
|
|
982
|
+
if (hasDeviceConfig)
|
|
983
|
+
deviceDoc.config = deviceConfig;
|
|
984
|
+
if (hasDeviceBrowser)
|
|
985
|
+
deviceDoc.browser = deviceBrowser;
|
|
986
|
+
if (hasProjectRoot)
|
|
987
|
+
deviceDoc.projectRoot = projectRoot;
|
|
943
988
|
fs.mkdirSync(path.dirname(devicePath), { recursive: true });
|
|
944
989
|
writeIfChanged(devicePath, META_HEADER + yaml.stringify(deviceDoc));
|
|
945
990
|
}
|
|
@@ -963,14 +1008,15 @@ function writeMetaUnlocked(meta) {
|
|
|
963
1008
|
* - `agents:` and `isolatedAgents:` from the device file (device wins; the union
|
|
964
1009
|
* both preserves the one-level merge and self-heals a pre-migration central that
|
|
965
1010
|
* still has pins)
|
|
966
|
-
* - `
|
|
967
|
-
*
|
|
968
|
-
* - `config:` from the device file into `deviceConfig` (device is the sole
|
|
969
|
-
* source for device-scope config, same routing as `defaultBrowserProfile`;
|
|
970
|
-
* the in-memory field is named `deviceConfig` so it can never collide with
|
|
971
|
-
* the user-scope `config:` central carries)
|
|
1011
|
+
* - `routines:` from the device file into `deviceRoutines` (device-local
|
|
1012
|
+
* routine activation)
|
|
972
1013
|
* - `versions:` from the history JSON (wholesale replace; falls back to
|
|
973
1014
|
* whatever central carried when the history file doesn't exist yet)
|
|
1015
|
+
*
|
|
1016
|
+
* (Device operator config is NOT overlaid here: it lives centrally under
|
|
1017
|
+
* `fleet.devices.<name>.config` — see lib/device-config.ts. The legacy
|
|
1018
|
+
* `config:`/`defaultBrowserProfile:` keys in a device doc are folded into the
|
|
1019
|
+
* central block by lib/devices/config-migration.ts.)
|
|
974
1020
|
*/
|
|
975
1021
|
function overlayMachineLocal(meta) {
|
|
976
1022
|
const devicePath = getDeviceMetaPath();
|
|
@@ -985,10 +1031,14 @@ function overlayMachineLocal(meta) {
|
|
|
985
1031
|
meta.agents = { ...meta.agents, ...dm.agents };
|
|
986
1032
|
if (dm?.isolatedAgents)
|
|
987
1033
|
meta.isolatedAgents = { ...meta.isolatedAgents, ...dm.isolatedAgents };
|
|
988
|
-
if (dm?.
|
|
989
|
-
meta.
|
|
990
|
-
if (dm?.
|
|
991
|
-
meta.
|
|
1034
|
+
if (typeof dm?.projectRoot === 'string')
|
|
1035
|
+
meta.projectRoot = dm.projectRoot;
|
|
1036
|
+
if (dm?.browser && typeof dm.browser === 'object' && !Array.isArray(dm.browser)) {
|
|
1037
|
+
meta.deviceBrowser = { ...meta.deviceBrowser, ...dm.browser };
|
|
1038
|
+
}
|
|
1039
|
+
if (dm?.config && typeof dm.config === 'object' && !Array.isArray(dm.config)) {
|
|
1040
|
+
meta.deviceConfig = { ...meta.deviceConfig, ...dm.config };
|
|
1041
|
+
}
|
|
992
1042
|
if (dm && Object.prototype.hasOwnProperty.call(dm, 'routines')) {
|
|
993
1043
|
if (!Array.isArray(dm.routines) || dm.routines.some((name) => typeof name !== 'string')) {
|
|
994
1044
|
throw new Error(`Device config corrupted at ${devicePath}: routines must be a string list.`);
|
|
@@ -27,15 +27,8 @@ export interface SubagentTarget {
|
|
|
27
27
|
names(dir: string): string[];
|
|
28
28
|
/** On-disk paths subagent `name` occupies (for removal / soft-delete). */
|
|
29
29
|
occupied(dir: string, name: string): OccupiedEntry[];
|
|
30
|
-
/** Cross-item files this target owns outside any one subagent's occupied paths. */
|
|
31
|
-
finalizeOccupied?(dir: string): OccupiedEntry[];
|
|
32
30
|
/** Rich metadata for `name`; `null` skips it from the listing. */
|
|
33
31
|
read(dir: string, name: string): SubagentMeta | null;
|
|
34
|
-
/** Optional post-sync pass over the just-synced subagents (Kimi's parent index). */
|
|
35
|
-
finalize?(dir: string, synced: Array<{
|
|
36
|
-
name: string;
|
|
37
|
-
path: string;
|
|
38
|
-
}>): void;
|
|
39
32
|
}
|
|
40
33
|
/**
|
|
41
34
|
* Copy every file in `src` into `dest` (created if missing), applying
|
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
* every current agent, so most entries are a single call:
|
|
15
15
|
*
|
|
16
16
|
* - `flatFile` one `<name><ext>` file, body from a `transform` fn.
|
|
17
|
-
* (claude, grok, droid, codex, opencode, copilot,
|
|
18
|
-
* cursor, kiro, goose)
|
|
17
|
+
* (claude, grok, pi, droid, codex, opencode, copilot,
|
|
18
|
+
* cursor, kiro, goose, kimi)
|
|
19
19
|
* - `dirFile` a `<name>/` directory holding one generated `<file>`.
|
|
20
20
|
* (antigravity: `<name>/agent.md`)
|
|
21
21
|
* - `dirCopy` copy the whole source directory to `<name>/`, applying
|
|
22
22
|
* renames, detected by a `marker` file. (openclaw)
|
|
23
23
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
24
|
+
* Every agent now uses a builder; there are no bespoke handlers left. Legacy
|
|
25
|
+
* on-disk layouts are folded once by `lib/migrate.ts`, never by a target --
|
|
26
|
+
* a target describes the CURRENT shape and nothing else.
|
|
27
27
|
*
|
|
28
28
|
* The per-agent `transform`/metadata parsers are the escape hatch: they live in
|
|
29
29
|
* `subagents.ts` and are referenced by the table, so the generic engine has zero
|
|
@@ -31,11 +31,12 @@
|
|
|
31
31
|
*/
|
|
32
32
|
import * as fs from 'fs';
|
|
33
33
|
import * as path from 'path';
|
|
34
|
+
import * as TOML from 'smol-toml';
|
|
34
35
|
import * as yaml from 'yaml';
|
|
35
36
|
import { safeJoin } from './paths.js';
|
|
36
|
-
import { parseSubagentFrontmatter, transformSubagentForClaude, transformSubagentForCodex, transformSubagentForCopilot, transformSubagentForCursor, transformSubagentForDroid, transformSubagentForGoose, transformSubagentForKiro, transformSubagentForOpenCode, transformSubagentForAntigravity,
|
|
37
|
+
import { parseSubagentFrontmatter, transformSubagentForClaude, transformSubagentForCodex, transformSubagentForCopilot, transformSubagentForCursor, transformSubagentForDroid, transformSubagentForGoose, transformSubagentForKiro, transformSubagentForOpenCode, transformSubagentForAntigravity, } from './subagents.js';
|
|
37
38
|
// ── metadata readers (the per-format escape hatch) ───────────────────────────
|
|
38
|
-
/** Frontmatter, skipping files that lack a valid block (claude/grok/droid
|
|
39
|
+
/** Frontmatter, skipping files that lack a valid block (claude/grok/droid). */
|
|
39
40
|
function metaFrontmatterSkip(filePath) {
|
|
40
41
|
return parseSubagentFrontmatter(filePath);
|
|
41
42
|
}
|
|
@@ -63,6 +64,24 @@ function metaGooseYaml(filePath, name) {
|
|
|
63
64
|
return null;
|
|
64
65
|
}
|
|
65
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Codex custom-agent TOML: name / description / model (optional).
|
|
69
|
+
* Codex writes no YAML frontmatter — without this reader, `flatFile.read`
|
|
70
|
+
* drops every installed `.toml` and `agents subagents list` reports codex
|
|
71
|
+
* targets as `missing` even when the files are present and Codex loads them.
|
|
72
|
+
*/
|
|
73
|
+
function metaToml(filePath, name) {
|
|
74
|
+
try {
|
|
75
|
+
const cfg = TOML.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
76
|
+
const tomlName = typeof cfg.name === 'string' ? cfg.name : '';
|
|
77
|
+
const description = typeof cfg.description === 'string' ? cfg.description : '';
|
|
78
|
+
const model = typeof cfg.model === 'string' ? cfg.model : undefined;
|
|
79
|
+
return { name: tomlName || name, description, model };
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
66
85
|
// ── shared fs primitive ──────────────────────────────────────────────────────
|
|
67
86
|
/**
|
|
68
87
|
* Copy every file in `src` into `dest` (created if missing), applying
|
|
@@ -187,61 +206,6 @@ function dirCopy(opts) {
|
|
|
187
206
|
},
|
|
188
207
|
};
|
|
189
208
|
}
|
|
190
|
-
/**
|
|
191
|
-
* Kimi (genuinely bespoke): each subagent is a `<name>.yaml` + sibling
|
|
192
|
-
* `<name>.system.md`, and a managed `_agents-cli.yaml` parent lists them all for
|
|
193
|
-
* `kimi --agent-file`. The parent index is a cross-item concern, so it is built
|
|
194
|
-
* in `finalize`, not per-item.
|
|
195
|
-
*/
|
|
196
|
-
const kimiTarget = {
|
|
197
|
-
dir: (home) => path.join(home, '.kimi-code', 'agents'),
|
|
198
|
-
write(dir, sub) {
|
|
199
|
-
writeKimiSubagentFiles(dir, sub.path, sub.name);
|
|
200
|
-
},
|
|
201
|
-
names(dir) {
|
|
202
|
-
if (!fs.existsSync(dir))
|
|
203
|
-
return [];
|
|
204
|
-
// The parent is `_agents-cli.yaml` (underscore-prefixed, reserved).
|
|
205
|
-
return fs
|
|
206
|
-
.readdirSync(dir)
|
|
207
|
-
.filter((f) => f.endsWith('.yaml') && !f.startsWith('_'))
|
|
208
|
-
.map((f) => f.slice(0, -'.yaml'.length));
|
|
209
|
-
},
|
|
210
|
-
occupied(dir, name) {
|
|
211
|
-
return [
|
|
212
|
-
{ path: safeJoin(dir, `${name}.yaml`), kind: 'file' },
|
|
213
|
-
{ path: safeJoin(dir, `${name}.system.md`), kind: 'file' },
|
|
214
|
-
];
|
|
215
|
-
},
|
|
216
|
-
finalizeOccupied(dir) {
|
|
217
|
-
return [{ path: safeJoin(dir, KIMI_SUBAGENTS_PARENT_FILE), kind: 'file' }];
|
|
218
|
-
},
|
|
219
|
-
read(dir, name) {
|
|
220
|
-
const yamlPath = path.join(dir, `${name}.yaml`);
|
|
221
|
-
if (!fs.existsSync(yamlPath) || !fs.statSync(yamlPath).isFile())
|
|
222
|
-
return null;
|
|
223
|
-
let description = '';
|
|
224
|
-
try {
|
|
225
|
-
const parsed = yaml.parse(fs.readFileSync(yamlPath, 'utf-8'));
|
|
226
|
-
description = parsed?.agent?.description ?? '';
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
/* leave description empty */
|
|
230
|
-
}
|
|
231
|
-
const files = [`${name}.yaml`];
|
|
232
|
-
const promptFile = `${name}.system.md`;
|
|
233
|
-
if (fs.existsSync(path.join(dir, promptFile)))
|
|
234
|
-
files.push(promptFile);
|
|
235
|
-
return { frontmatter: { name, description }, files, path: yamlPath };
|
|
236
|
-
},
|
|
237
|
-
finalize(dir, synced) {
|
|
238
|
-
const entries = synced.map((sub) => {
|
|
239
|
-
const fm = parseSubagentFrontmatter(path.join(sub.path, 'AGENT.md'));
|
|
240
|
-
return { name: sub.name, description: fm?.description ?? sub.name, relativePath: `./${sub.name}.yaml` };
|
|
241
|
-
});
|
|
242
|
-
fs.writeFileSync(safeJoin(dir, KIMI_SUBAGENTS_PARENT_FILE), buildKimiSubagentsParentYaml(entries));
|
|
243
|
-
},
|
|
244
|
-
};
|
|
245
209
|
// ── the registry ─────────────────────────────────────────────────────────────
|
|
246
210
|
/**
|
|
247
211
|
* Single source of truth for how each subagents-capable agent stores subagents.
|
|
@@ -257,7 +221,12 @@ export const SUBAGENT_TARGETS = {
|
|
|
257
221
|
pi: flatFile({ subdir: ['.omp', 'agent', 'agents'], ext: '.md', transform: transformSubagentForClaude, readMeta: metaFrontmatterFallback }),
|
|
258
222
|
droid: flatFile({ subdir: ['.factory', 'droids'], ext: '.md', transform: transformSubagentForDroid }),
|
|
259
223
|
// Bespoke frontmatter/format, still one flat file.
|
|
260
|
-
codex: flatFile({
|
|
224
|
+
codex: flatFile({
|
|
225
|
+
subdir: ['.codex', 'agents'],
|
|
226
|
+
ext: '.toml',
|
|
227
|
+
transform: transformSubagentForCodex,
|
|
228
|
+
readMeta: metaToml,
|
|
229
|
+
}),
|
|
261
230
|
opencode: flatFile({
|
|
262
231
|
subdir: ['.config', 'opencode', 'agents'],
|
|
263
232
|
ext: '.md',
|
|
@@ -295,8 +264,12 @@ export const SUBAGENT_TARGETS = {
|
|
|
295
264
|
transform: transformSubagentForAntigravity,
|
|
296
265
|
}),
|
|
297
266
|
openclaw: dirCopy({ subdir: ['.openclaw'], marker: 'AGENTS.md', rename: { 'AGENT.md': 'AGENTS.md' } }),
|
|
298
|
-
//
|
|
299
|
-
kimi
|
|
267
|
+
// Kimi discovers Claude-shaped agent markdown from its brand home's `agents/`
|
|
268
|
+
// dir (`USER_BRAND_DIRS = ["agents"]`, kimi-code >= 0.29.0). Frontmatter
|
|
269
|
+
// name/description + body, kebab-case name -- the same shape as claude/grok.
|
|
270
|
+
// The pre-markdown files agents-cli used to write here are swept once by
|
|
271
|
+
// `migrateKimiSubagentsToMarkdown` (lib/migrate.ts), not by this target.
|
|
272
|
+
kimi: flatFile({ subdir: ['.kimi-code', 'agents'], ext: '.md', transform: transformSubagentForClaude, readMeta: metaFrontmatterFallback }),
|
|
300
273
|
};
|
|
301
274
|
/** The registry entry for `agent`, or undefined if it stores no subagents. */
|
|
302
275
|
export function subagentTarget(agent) {
|
package/dist/lib/subagents.d.ts
CHANGED
|
@@ -97,39 +97,6 @@ export declare function transformSubagentForAntigravity(subagentDir: string): st
|
|
|
97
97
|
* https://opencode.ai/docs/agents/
|
|
98
98
|
*/
|
|
99
99
|
export declare function transformSubagentForOpenCode(subagentDir: string): string;
|
|
100
|
-
/** Managed parent agent file for Kimi (underscore prefix avoids clobbering a user subagent named agents-cli). */
|
|
101
|
-
export declare const KIMI_SUBAGENTS_PARENT_FILE = "_agents-cli.yaml";
|
|
102
|
-
export interface KimiSubagentFiles {
|
|
103
|
-
/** Agent YAML content (uses system_prompt_path, not inline system_prompt). */
|
|
104
|
-
yaml: string;
|
|
105
|
-
/** Markdown body written next to the YAML and referenced by system_prompt_path. */
|
|
106
|
-
systemPrompt: string;
|
|
107
|
-
/** Sibling prompt filename, e.g. `reviewer.system.md`. */
|
|
108
|
-
systemPromptFileName: string;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Transform a subagent into Kimi Code agent files.
|
|
112
|
-
*
|
|
113
|
-
* Kimi's schema (agentspec) only accepts `system_prompt_path` (path relative to
|
|
114
|
-
* the agent YAML) — there is no inline `system_prompt` key. We write:
|
|
115
|
-
* ~/.kimi-code/agents/<name>.yaml — agent YAML
|
|
116
|
-
* ~/.kimi-code/agents/<name>.system.md — system prompt body
|
|
117
|
-
* plus a managed parent `_agents-cli.yaml` that lists them under agent.subagents
|
|
118
|
-
* for `kimi --agent-file …/_agents-cli.yaml`.
|
|
119
|
-
* https://moonshotai.github.io/kimi-cli/en/customization/agents.html
|
|
120
|
-
*/
|
|
121
|
-
export declare function transformSubagentForKimi(subagentDir: string, fileBaseName: string): KimiSubagentFiles;
|
|
122
|
-
/**
|
|
123
|
-
* Build the managed parent agent YAML that declares all installed subagents
|
|
124
|
-
* so `kimi --agent-file ~/.kimi-code/agents/_agents-cli.yaml` can launch them.
|
|
125
|
-
*/
|
|
126
|
-
export declare function buildKimiSubagentsParentYaml(entries: Array<{
|
|
127
|
-
name: string;
|
|
128
|
-
description: string;
|
|
129
|
-
relativePath: string;
|
|
130
|
-
}>): string;
|
|
131
|
-
/** Write a Kimi subagent YAML + sibling system-prompt md into agentsDir. */
|
|
132
|
-
export declare function writeKimiSubagentFiles(agentsDir: string, subagentDir: string, name: string): void;
|
|
133
100
|
/**
|
|
134
101
|
* Transform a subagent into a Codex custom-agent TOML file.
|
|
135
102
|
*
|
package/dist/lib/subagents.js
CHANGED
|
@@ -356,81 +356,6 @@ export function transformSubagentForOpenCode(subagentDir) {
|
|
|
356
356
|
}
|
|
357
357
|
return `---\n${yaml.stringify(fm).trim()}\n---\n\n${systemPrompt}\n`;
|
|
358
358
|
}
|
|
359
|
-
/** Managed parent agent file for Kimi (underscore prefix avoids clobbering a user subagent named agents-cli). */
|
|
360
|
-
export const KIMI_SUBAGENTS_PARENT_FILE = '_agents-cli.yaml';
|
|
361
|
-
/**
|
|
362
|
-
* Transform a subagent into Kimi Code agent files.
|
|
363
|
-
*
|
|
364
|
-
* Kimi's schema (agentspec) only accepts `system_prompt_path` (path relative to
|
|
365
|
-
* the agent YAML) — there is no inline `system_prompt` key. We write:
|
|
366
|
-
* ~/.kimi-code/agents/<name>.yaml — agent YAML
|
|
367
|
-
* ~/.kimi-code/agents/<name>.system.md — system prompt body
|
|
368
|
-
* plus a managed parent `_agents-cli.yaml` that lists them under agent.subagents
|
|
369
|
-
* for `kimi --agent-file …/_agents-cli.yaml`.
|
|
370
|
-
* https://moonshotai.github.io/kimi-cli/en/customization/agents.html
|
|
371
|
-
*/
|
|
372
|
-
export function transformSubagentForKimi(subagentDir, fileBaseName) {
|
|
373
|
-
const agentMd = path.join(subagentDir, 'AGENT.md');
|
|
374
|
-
const frontmatter = parseSubagentFrontmatter(agentMd);
|
|
375
|
-
const body = getSubagentBody(agentMd);
|
|
376
|
-
if (!frontmatter) {
|
|
377
|
-
throw new Error(`Invalid AGENT.md in ${subagentDir}`);
|
|
378
|
-
}
|
|
379
|
-
let systemPrompt = body.trim();
|
|
380
|
-
const files = fs.readdirSync(subagentDir)
|
|
381
|
-
.filter(f => f.endsWith('.md') && f !== 'AGENT.md')
|
|
382
|
-
.sort();
|
|
383
|
-
for (const file of files) {
|
|
384
|
-
const content = fs.readFileSync(path.join(subagentDir, file), 'utf-8').trim();
|
|
385
|
-
const sectionName = file.replace('.md', '');
|
|
386
|
-
const title = sectionName.charAt(0).toUpperCase() + sectionName.slice(1).toLowerCase();
|
|
387
|
-
systemPrompt += `\n\n## ${title}\n\n${content}`;
|
|
388
|
-
}
|
|
389
|
-
const systemPromptFileName = `${fileBaseName}.system.md`;
|
|
390
|
-
const doc = {
|
|
391
|
-
version: 1,
|
|
392
|
-
agent: {
|
|
393
|
-
extend: 'default',
|
|
394
|
-
name: frontmatter.name,
|
|
395
|
-
description: frontmatter.description,
|
|
396
|
-
system_prompt_path: `./${systemPromptFileName}`,
|
|
397
|
-
},
|
|
398
|
-
};
|
|
399
|
-
if (frontmatter.model) {
|
|
400
|
-
doc.agent.model = frontmatter.model;
|
|
401
|
-
}
|
|
402
|
-
return {
|
|
403
|
-
yaml: yaml.stringify(doc),
|
|
404
|
-
systemPrompt,
|
|
405
|
-
systemPromptFileName,
|
|
406
|
-
};
|
|
407
|
-
}
|
|
408
|
-
/**
|
|
409
|
-
* Build the managed parent agent YAML that declares all installed subagents
|
|
410
|
-
* so `kimi --agent-file ~/.kimi-code/agents/_agents-cli.yaml` can launch them.
|
|
411
|
-
*/
|
|
412
|
-
export function buildKimiSubagentsParentYaml(entries) {
|
|
413
|
-
const subagents = {};
|
|
414
|
-
for (const e of entries) {
|
|
415
|
-
subagents[e.name] = { path: e.relativePath, description: e.description };
|
|
416
|
-
}
|
|
417
|
-
return yaml.stringify({
|
|
418
|
-
version: 1,
|
|
419
|
-
agent: {
|
|
420
|
-
extend: 'default',
|
|
421
|
-
name: 'agents-cli',
|
|
422
|
-
description: 'Managed parent agent listing agents-cli synced subagents',
|
|
423
|
-
subagents,
|
|
424
|
-
},
|
|
425
|
-
});
|
|
426
|
-
}
|
|
427
|
-
/** Write a Kimi subagent YAML + sibling system-prompt md into agentsDir. */
|
|
428
|
-
export function writeKimiSubagentFiles(agentsDir, subagentDir, name) {
|
|
429
|
-
const { yaml: yml, systemPrompt, systemPromptFileName } = transformSubagentForKimi(subagentDir, name);
|
|
430
|
-
fs.mkdirSync(agentsDir, { recursive: true });
|
|
431
|
-
fs.writeFileSync(safeJoin(agentsDir, `${name}.yaml`), yml);
|
|
432
|
-
fs.writeFileSync(safeJoin(agentsDir, systemPromptFileName), systemPrompt);
|
|
433
|
-
}
|
|
434
359
|
/**
|
|
435
360
|
* Transform a subagent into a Codex custom-agent TOML file.
|
|
436
361
|
*
|
|
@@ -120,7 +120,7 @@ export async function runUmbrellaSync(args) {
|
|
|
120
120
|
const { reconcilePendingSentinels } = await import('./devices/pending.js');
|
|
121
121
|
const dev = await runDeviceSync({ soft: true, mode: 'refresh' });
|
|
122
122
|
if (dev.ok)
|
|
123
|
-
reconcilePendingSentinels(dev.pending);
|
|
123
|
+
await reconcilePendingSentinels(dev.pending);
|
|
124
124
|
result.devices = { synced: dev.synced, pending: dev.pending.length, skipped: !dev.ok };
|
|
125
125
|
if (dev.ok) {
|
|
126
126
|
log(`devices: ${dev.synced} refreshed${dev.pending.length ? `, ${dev.pending.length} new pending` : ''}`);
|
|
@@ -193,6 +193,7 @@ export declare class AgentProcess {
|
|
|
193
193
|
cloudBranch: string | null;
|
|
194
194
|
worktreeName: string | null;
|
|
195
195
|
worktreePath: string | null;
|
|
196
|
+
project: string | null;
|
|
196
197
|
hostName: string | null;
|
|
197
198
|
hostTarget: string | null;
|
|
198
199
|
hostIdentityFile: string | null;
|
|
@@ -304,6 +305,26 @@ export declare class AgentProcess {
|
|
|
304
305
|
*/
|
|
305
306
|
private capEventsCache;
|
|
306
307
|
saveMeta(): Promise<void>;
|
|
308
|
+
/**
|
|
309
|
+
* Rename an unreadable meta.json out of the way so it stops silently
|
|
310
|
+
* masquerading as "no record" (RUSH-2429). Before saveMeta() wrote atomically,
|
|
311
|
+
* a process killed mid-write left a truncated, unparseable meta.json that
|
|
312
|
+
* loadFromDisk() returned null for -- indistinguishable from ENOENT -- so
|
|
313
|
+
* retention (loadExistingAgents/rescanFromDisk) never reaped it and
|
|
314
|
+
* isWorktreeClaimed() (which reads meta.json directly, not through this
|
|
315
|
+
* method) failed CLOSED on it forever: it scans every record and answers
|
|
316
|
+
* "claimed" for every worktree name in every team the first time it cannot
|
|
317
|
+
* read one. Quarantining removes meta.json so the NEXT read of this record
|
|
318
|
+
* sees ENOENT (genuinely absent) instead of "unreadable" -- that is what lets
|
|
319
|
+
* isWorktreeClaimed's fail-closed guard recover once the corrupt record is
|
|
320
|
+
* gone, without weakening the guard itself for a record that is still
|
|
321
|
+
* present-but-unreadable at decision time.
|
|
322
|
+
*
|
|
323
|
+
* Best-effort: if the rename itself fails (e.g. EACCES on the directory),
|
|
324
|
+
* the record is left in place and the fail-closed guard keeps protecting
|
|
325
|
+
* worktree removal -- quarantine only ever ADDS a recovery path.
|
|
326
|
+
*/
|
|
327
|
+
private static quarantineCorruptMeta;
|
|
307
328
|
static loadFromDisk(agentId: string, baseDir?: string | null): Promise<AgentProcess | null>;
|
|
308
329
|
isProcessAlive(): boolean;
|
|
309
330
|
/**
|
|
@@ -478,7 +499,7 @@ export declare class AgentManager {
|
|
|
478
499
|
* asymmetry, not defensive coding: the caller acts destructively on `false`.
|
|
479
500
|
*/
|
|
480
501
|
isWorktreeClaimed(worktreeName: string): Promise<boolean>;
|
|
481
|
-
spawn(taskName: string, agentType: AgentType, prompt: string, cwd?: string | null, mode?: Mode | null, effort?: EffortLevel, parentSessionId?: string | null, workspaceDir?: string | null, version?: string | null, name?: string | null, after?: string[], model?: string | null, envOverrides?: Record<string, string> | null, taskType?: TaskType | null, cloudProvider?: string | null, cloudSessionId?: string | null, cloudRepo?: string | null, cloudBranch?: string | null, worktreeName?: string | null, worktreePath?: string | null, profileName?: string | null, hostName?: string | null, hostTarget?: string | null, repoPath?: string | null): Promise<AgentProcess>;
|
|
502
|
+
spawn(taskName: string, agentType: AgentType, prompt: string, cwd?: string | null, mode?: Mode | null, effort?: EffortLevel, parentSessionId?: string | null, workspaceDir?: string | null, version?: string | null, name?: string | null, after?: string[], model?: string | null, envOverrides?: Record<string, string> | null, taskType?: TaskType | null, cloudProvider?: string | null, cloudSessionId?: string | null, cloudRepo?: string | null, cloudBranch?: string | null, worktreeName?: string | null, worktreePath?: string | null, profileName?: string | null, hostName?: string | null, hostTarget?: string | null, repoPath?: string | null, project?: string | null): Promise<AgentProcess>;
|
|
482
503
|
/**
|
|
483
504
|
* Resume a STOPPED teammate (completed / failed / stopped) by re-entering its
|
|
484
505
|
* own session with `message` as the next user turn. Re-launches through the
|
|
@@ -613,6 +634,25 @@ export declare class AgentManager {
|
|
|
613
634
|
*/
|
|
614
635
|
listCompleted(): Promise<AgentProcess[]>;
|
|
615
636
|
listByTask(taskName: string): Promise<AgentProcess[]>;
|
|
637
|
+
/**
|
|
638
|
+
* Terminal removal of every teammate record for a team (RUSH-2450).
|
|
639
|
+
*
|
|
640
|
+
* `teams disband` used to delete log dirs and the registry entry, but left
|
|
641
|
+
* the in-memory AgentProcess cache intact. A concurrent `teams start --watch`
|
|
642
|
+
* supervisor then re-persisted those records via saveMeta, so a second
|
|
643
|
+
* disband still found N logs to clear and `teams start` could re-launch
|
|
644
|
+
* PENDING work that had already merged.
|
|
645
|
+
*
|
|
646
|
+
* This drops every matching record from the manager map AND removes its
|
|
647
|
+
* durable state. With `keepLogs`, only `meta.json` is removed so the
|
|
648
|
+
* teammate is no longer discoverable/startable while stdout/stderr logs
|
|
649
|
+
* remain for postmortem.
|
|
650
|
+
*
|
|
651
|
+
* Returns the agent_ids that were purged.
|
|
652
|
+
*/
|
|
653
|
+
purgeByTask(taskName: string, opts?: {
|
|
654
|
+
keepLogs?: boolean;
|
|
655
|
+
}): Promise<string[]>;
|
|
616
656
|
listByParentSession(parentSessionId: string): Promise<AgentProcess[]>;
|
|
617
657
|
stopByTask(taskName: string): Promise<{
|
|
618
658
|
stopped: string[];
|