@phnx-labs/agents-cli 1.22.39 → 1.22.41
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 +316 -0
- package/README.md +116 -70
- package/dist/bin/agents +0 -0
- package/dist/bootstrap.js +45 -27
- package/dist/browser.js +2 -2
- package/dist/cli/command-registry.d.ts +135 -0
- package/dist/cli/command-registry.js +259 -0
- package/dist/commands/accounts.d.ts +20 -0
- package/dist/commands/accounts.js +186 -25
- package/dist/commands/apply.d.ts +3 -3
- package/dist/commands/apply.js +20 -63
- package/dist/commands/browser.d.ts +15 -0
- package/dist/commands/browser.js +318 -131
- package/dist/commands/budget.d.ts +7 -6
- package/dist/commands/budget.js +8 -7
- package/dist/commands/cloud.js +17 -20
- package/dist/commands/commands.js +1 -1
- package/dist/commands/computer-actions.d.ts +1 -35
- package/dist/commands/computer-actions.js +13 -181
- package/dist/commands/computer.d.ts +28 -3
- package/dist/commands/computer.js +93 -65
- package/dist/commands/config.js +16 -3
- package/dist/commands/cost.d.ts +2 -1
- package/dist/commands/cost.js +7 -6
- package/dist/commands/daemon.js +151 -4
- package/dist/commands/detach.js +1 -1
- package/dist/commands/doctor.js +19 -11
- package/dist/commands/events.js +1 -1
- package/dist/commands/exec.d.ts +2 -50
- package/dist/commands/exec.js +160 -215
- package/dist/commands/factory.js +1 -1
- package/dist/commands/feed.d.ts +2 -2
- package/dist/commands/feed.js +12 -23
- package/dist/commands/fleet-capture.js +25 -27
- package/dist/commands/focus.d.ts +2 -3
- package/dist/commands/focus.js +34 -9
- package/dist/commands/go.js +15 -5
- package/dist/commands/harness.d.ts +3 -3
- package/dist/commands/harness.js +53 -5
- package/dist/commands/hooks.js +1 -1
- package/dist/commands/import.js +2 -2
- package/dist/commands/insights.d.ts +5 -5
- package/dist/commands/insights.js +15 -9
- package/dist/commands/inspect.d.ts +2 -3
- package/dist/commands/inspect.js +4 -16
- package/dist/commands/logs.d.ts +2 -2
- package/dist/commands/logs.js +9 -9
- package/dist/commands/mcp.js +2 -2
- package/dist/commands/memory.js +1 -1
- package/dist/commands/message.d.ts +1 -1
- package/dist/commands/message.js +7 -7
- package/dist/commands/mine.d.ts +11 -8
- package/dist/commands/mine.js +11 -10
- package/dist/commands/models.js +1 -1
- package/dist/commands/modes.js +1 -1
- package/dist/commands/monitors.js +23 -6
- package/dist/commands/output.d.ts +7 -6
- package/dist/commands/output.js +11 -10
- package/dist/commands/packages.js +4 -4
- package/dist/commands/perf.js +1 -1
- package/dist/commands/permissions.js +49 -32
- package/dist/commands/plugins.d.ts +1 -1
- package/dist/commands/plugins.js +3 -3
- package/dist/commands/profiles.d.ts +6 -9
- package/dist/commands/profiles.js +8 -321
- package/dist/commands/projects.d.ts +9 -0
- package/dist/commands/projects.js +140 -8
- package/dist/commands/prune.js +5 -13
- package/dist/commands/refresh-rules.js +1 -1
- package/dist/commands/repo.d.ts +5 -7
- package/dist/commands/repo.js +34 -18
- package/dist/commands/resource-view.js +4 -0
- package/dist/commands/resume.d.ts +11 -7
- package/dist/commands/resume.js +82 -98
- package/dist/commands/route.d.ts +12 -0
- package/dist/commands/route.js +261 -0
- package/dist/commands/routines.d.ts +2 -3
- package/dist/commands/routines.js +120 -145
- package/dist/commands/rules.js +1 -1
- package/dist/commands/run-account-picker.d.ts +1 -1
- package/dist/commands/run-account-picker.js +2 -2
- package/dist/commands/run-broadcast.d.ts +21 -0
- package/dist/commands/run-broadcast.js +89 -0
- package/dist/commands/run-cloud.js +1 -1
- package/dist/commands/secrets-vault.d.ts +10 -0
- package/dist/commands/{login.js → secrets-vault.js} +34 -14
- package/dist/commands/secrets.d.ts +4 -4
- package/dist/commands/secrets.js +158 -159
- package/dist/commands/sessions-backfill.js +1 -1
- package/dist/commands/sessions-browser.d.ts +1 -1
- package/dist/commands/sessions-browser.js +9 -5
- package/dist/commands/sessions-export.js +2 -2
- package/dist/commands/sessions-inject.js +4 -5
- package/dist/commands/sessions-migrate.js +16 -27
- package/dist/commands/sessions-picker.d.ts +14 -0
- package/dist/commands/sessions-picker.js +209 -13
- package/dist/commands/sessions-resume.d.ts +7 -3
- package/dist/commands/sessions-resume.js +81 -33
- package/dist/commands/sessions-share.d.ts +25 -0
- package/dist/commands/sessions-share.js +166 -0
- package/dist/commands/sessions-stats.js +2 -2
- package/dist/commands/sessions.d.ts +75 -68
- package/dist/commands/sessions.js +144 -180
- package/dist/commands/setup-browser.js +1 -1
- package/dist/commands/setup-computer.js +1 -1
- package/dist/commands/setup-fleet.js +3 -0
- package/dist/commands/setup-mine.d.ts +7 -3
- package/dist/commands/setup-mine.js +13 -8
- package/dist/commands/setup-preferences.js +2 -2
- package/dist/commands/setup-secrets.js +2 -2
- package/dist/commands/setup-watchdog.js +2 -2
- package/dist/commands/setup.js +7 -2
- package/dist/commands/share.d.ts +65 -0
- package/dist/commands/share.js +253 -20
- package/dist/commands/skills.js +3 -3
- package/dist/commands/snapshot.d.ts +2 -2
- package/dist/commands/snapshot.js +9 -9
- package/dist/commands/ssh.d.ts +1 -1
- package/dist/commands/ssh.js +186 -64
- package/dist/commands/subagents.js +1 -1
- package/dist/commands/sync.js +24 -9
- package/dist/commands/teams.d.ts +2 -2
- package/dist/commands/teams.js +9 -18
- package/dist/commands/tmux.js +5 -1
- package/dist/commands/trash.js +1 -1
- package/dist/commands/usage.d.ts +1 -1
- package/dist/commands/usage.js +2 -2
- package/dist/commands/utils.d.ts +4 -14
- package/dist/commands/utils.js +6 -27
- package/dist/commands/versions.js +2 -2
- package/dist/commands/view.d.ts +9 -77
- package/dist/commands/view.js +23 -8
- package/dist/commands/watchdog.js +1 -1
- package/dist/commands/webhook.js +25 -34
- package/dist/commands/workflows.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/account-capabilities.d.ts +39 -0
- package/dist/lib/account-capabilities.js +59 -0
- package/dist/lib/account-catalog.js +1 -1
- package/dist/lib/account-registry.d.ts +66 -0
- package/dist/lib/account-registry.js +151 -5
- package/dist/lib/{rotate.d.ts → accounting/rotate.d.ts} +4 -4
- package/dist/lib/{rotate.js → accounting/rotate.js} +8 -8
- package/dist/lib/{usage.d.ts → accounting/usage.d.ts} +4 -4
- package/dist/lib/{usage.js → accounting/usage.js} +11 -11
- package/dist/lib/agent-spec/provider.js +1 -1
- package/dist/lib/agents.d.ts +72 -4
- package/dist/lib/agents.js +231 -199
- package/dist/lib/answer-router.d.ts +2 -2
- package/dist/lib/ask-classifier.d.ts +1 -1
- package/dist/lib/ask-classifier.js +1 -1
- package/dist/lib/audit/log.js +1 -1
- package/dist/lib/auth-health.d.ts +1 -1
- package/dist/lib/auth-health.js +2 -2
- package/dist/lib/brand.js +1 -1
- package/dist/lib/browser/caller-identity.d.ts +28 -0
- package/dist/lib/browser/caller-identity.js +156 -0
- package/dist/lib/browser/cdp.js +5 -1
- package/dist/lib/browser/chrome.js +12 -1
- package/dist/lib/browser/drivers/ssh.d.ts +1 -1
- package/dist/lib/browser/drivers/ssh.js +3 -2
- package/dist/lib/browser/hygiene.d.ts +10 -2
- package/dist/lib/browser/hygiene.js +7 -4
- package/dist/lib/browser/ipc.d.ts +22 -2
- package/dist/lib/browser/ipc.js +185 -21
- package/dist/lib/browser/profiles.d.ts +69 -5
- package/dist/lib/browser/profiles.js +135 -13
- package/dist/lib/browser/remote-control.d.ts +2 -2
- package/dist/lib/browser/remote-control.js +3 -3
- package/dist/lib/browser/runtime-state.d.ts +79 -0
- package/dist/lib/browser/runtime-state.js +119 -1
- package/dist/lib/browser/service.d.ts +137 -2
- package/dist/lib/browser/service.js +492 -54
- package/dist/lib/browser/sessions-list.d.ts +2 -1
- package/dist/lib/browser/sessions-list.js +4 -13
- package/dist/lib/browser/types.d.ts +19 -1
- package/dist/lib/budget/config.js +1 -1
- package/dist/lib/budget/ledger.js +1 -1
- package/dist/lib/byok-usage.js +1 -1
- package/dist/lib/capabilities.js +3 -15
- package/dist/lib/catchup.d.ts +1 -1
- package/dist/lib/catchup.js +1 -1
- package/dist/lib/cloud/dispatch.js +1 -1
- package/dist/lib/cloud/host.d.ts +3 -3
- package/dist/lib/cloud/host.js +5 -5
- package/dist/lib/cloud/rush.d.ts +9 -21
- package/dist/lib/cloud/rush.js +33 -120
- package/dist/lib/cloud/types.d.ts +2 -2
- package/dist/lib/commands.js +3 -13
- package/dist/lib/computer/actions.d.ts +36 -0
- package/dist/lib/computer/actions.js +162 -0
- package/dist/lib/computer/dispatch.d.ts +2 -2
- package/dist/lib/computer/dispatch.js +2 -2
- package/dist/lib/computer/sessions-list.d.ts +3 -3
- package/dist/lib/computer/sessions-list.js +2 -2
- package/dist/lib/config-keys.d.ts +2 -1
- package/dist/lib/config-keys.js +8 -4
- package/dist/lib/config-machine-keys.d.ts +4 -2
- package/dist/lib/config-machine-keys.js +5 -2
- package/dist/lib/crabbox/lease.js +9 -1
- package/dist/lib/crabbox/runtimes.d.ts +32 -7
- package/dist/lib/crabbox/runtimes.js +72 -30
- package/dist/lib/{daemon.d.ts → daemon/daemon.d.ts} +59 -1
- package/dist/lib/{daemon.js → daemon/daemon.js} +237 -49
- package/dist/lib/daemon-services.d.ts +1 -1
- package/dist/lib/daemon-services.js +5 -0
- package/dist/lib/daemon-ticks.d.ts +25 -0
- package/dist/lib/daemon-ticks.js +31 -1
- package/dist/lib/daemon-webhooks.d.ts +104 -0
- package/dist/lib/daemon-webhooks.js +215 -0
- package/dist/lib/device-config.d.ts +85 -75
- package/dist/lib/device-config.js +280 -142
- package/dist/lib/devices/config-migration.d.ts +29 -34
- package/dist/lib/devices/config-migration.js +209 -130
- package/dist/lib/devices/connect.d.ts +2 -2
- package/dist/lib/devices/connect.js +2 -2
- package/dist/lib/devices/discovery-policy.d.ts +30 -0
- package/dist/lib/devices/discovery-policy.js +101 -0
- package/dist/lib/devices/fleet-inventory.js +8 -3
- package/dist/lib/devices/harness-inventory.d.ts +1 -1
- package/dist/lib/devices/harness-inventory.js +12 -3
- package/dist/lib/devices/known-hosts.js +1 -1
- package/dist/lib/devices/pool.d.ts +10 -5
- package/dist/lib/devices/pool.js +5 -7
- package/dist/lib/devices/registry.d.ts +1 -1
- package/dist/lib/devices/registry.js +1 -1
- package/dist/lib/devices/resolve-profile.d.ts +2 -2
- package/dist/lib/devices/resolve-profile.js +2 -2
- package/dist/lib/devices/resolve-target.d.ts +1 -1
- package/dist/lib/devices/resolve-target.js +4 -4
- package/dist/lib/devices/self-host.d.ts +1 -1
- package/dist/lib/devices/self-host.js +3 -3
- package/dist/lib/devices/ssh-config.d.ts +1 -1
- package/dist/lib/devices/stats-cache.js +1 -1
- package/dist/lib/devices/sync.d.ts +3 -1
- package/dist/lib/devices/sync.js +3 -3
- package/dist/lib/doctor-diff.js +4 -4
- package/dist/lib/drift-sync.js +2 -2
- package/dist/lib/drift.js +2 -2
- package/dist/lib/event-families.d.ts +1 -1
- package/dist/lib/event-stream.d.ts +1 -1
- package/dist/lib/event-stream.js +2 -2
- package/dist/lib/events-ingest.js +2 -2
- package/dist/lib/exec.d.ts +4 -4
- package/dist/lib/exec.js +11 -11
- package/dist/lib/factory/snapshot.d.ts +1 -1
- package/dist/lib/factory/snapshot.js +1 -1
- package/dist/lib/{activity.d.ts → feed/activity.d.ts} +1 -1
- package/dist/lib/{activity.js → feed/activity.js} +7 -7
- package/dist/lib/{events.d.ts → feed/events.d.ts} +2 -2
- package/dist/lib/{events.js → feed/events.js} +5 -5
- package/dist/lib/{feed.js → feed/feed.js} +4 -4
- package/dist/lib/feed-outcome.d.ts +1 -1
- package/dist/lib/feed-policy.d.ts +1 -1
- package/dist/lib/feed-policy.js +1 -1
- package/dist/lib/feed-post.d.ts +1 -1
- package/dist/lib/feed-post.js +1 -1
- package/dist/lib/feed-ranking.d.ts +1 -1
- package/dist/lib/fleet/apply.d.ts +0 -6
- package/dist/lib/fleet/apply.js +18 -45
- package/dist/lib/fleet/auth-sync.d.ts +16 -35
- package/dist/lib/fleet/auth-sync.js +16 -75
- package/dist/lib/fleet/capture.js +8 -6
- package/dist/lib/fleet/manifest.js +23 -11
- package/dist/lib/fleet/types.d.ts +19 -7
- package/dist/lib/fleet-cache.d.ts +1 -1
- package/dist/lib/fleet-cache.js +1 -1
- package/dist/lib/format.d.ts +19 -0
- package/dist/lib/format.js +44 -1
- package/dist/lib/friction-heuristics.d.ts +1 -1
- package/dist/lib/git.d.ts +24 -1
- package/dist/lib/git.js +82 -38
- package/dist/lib/heal.js +3 -3
- package/dist/lib/hooks.d.ts +18 -0
- package/dist/lib/hooks.js +113 -1
- package/dist/lib/hosts/credentials.d.ts +30 -10
- package/dist/lib/hosts/credentials.js +38 -26
- package/dist/lib/hosts/dispatch.d.ts +3 -3
- package/dist/lib/hosts/dispatch.js +3 -3
- package/dist/lib/hosts/option.d.ts +3 -3
- package/dist/lib/hosts/option.js +7 -8
- package/dist/lib/hosts/passthrough.d.ts +17 -17
- package/dist/lib/hosts/passthrough.js +67 -50
- package/dist/lib/hosts/providers/devices.d.ts +1 -1
- package/dist/lib/hosts/providers/devices.js +1 -1
- package/dist/lib/hosts/reconcile.d.ts +1 -1
- package/dist/lib/hosts/reconcile.js +1 -1
- package/dist/lib/hosts/reconnect.d.ts +1 -1
- package/dist/lib/hosts/reconnect.js +2 -2
- package/dist/lib/hosts/registry.d.ts +5 -5
- package/dist/lib/hosts/registry.js +5 -5
- package/dist/lib/hosts/remote-cmd.d.ts +10 -10
- package/dist/lib/hosts/remote-cmd.js +25 -18
- package/dist/lib/hosts/remote-os.d.ts +4 -4
- package/dist/lib/hosts/remote-os.js +4 -4
- package/dist/lib/hosts/remote-session-id.d.ts +2 -2
- package/dist/lib/hosts/remote-session-id.js +2 -2
- package/dist/lib/hosts/routing-flag.d.ts +3 -3
- package/dist/lib/hosts/routing-flag.js +4 -5
- package/dist/lib/hosts/run-target.d.ts +4 -4
- package/dist/lib/hosts/run-target.js +4 -4
- package/dist/lib/hosts/session-index.d.ts +2 -2
- package/dist/lib/hosts/session-index.js +1 -1
- package/dist/lib/hosts/session-marker.d.ts +1 -1
- package/dist/lib/hosts/session-marker.js +1 -1
- package/dist/lib/hosts/types.d.ts +2 -2
- package/dist/lib/hosts/types.js +2 -2
- package/dist/lib/import.js +1 -1
- package/dist/lib/{migrate.d.ts → installations/migrate.d.ts} +13 -1
- package/dist/lib/{migrate.js → installations/migrate.js} +160 -40
- package/dist/lib/installations/resolve.js +1 -1
- package/dist/lib/installations/strategies.js +1 -1
- package/dist/lib/installations/update.js +2 -2
- package/dist/lib/{versions.d.ts → installations/versions.d.ts} +12 -3
- package/dist/lib/{versions.js → installations/versions.js} +51 -31
- package/dist/lib/isolation-boundary-report.js +1 -1
- package/dist/lib/linear-projects.d.ts +28 -0
- package/dist/lib/linear-projects.js +30 -0
- package/dist/lib/loop.js +1 -1
- package/dist/lib/mailbox-gc.js +1 -1
- package/dist/lib/mailbox.js +1 -1
- package/dist/lib/mcp-registry.d.ts +62 -0
- package/dist/lib/mcp-registry.js +177 -0
- package/dist/lib/mcp.d.ts +5 -0
- package/dist/lib/mcp.js +124 -307
- 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/install-menubar.d.ts +7 -0
- package/dist/lib/menubar/install-menubar.js +24 -6
- package/dist/lib/menubar/snapshot.d.ts +7 -0
- package/dist/lib/menubar/snapshot.js +8 -6
- package/dist/lib/models.js +1 -1
- package/dist/lib/monitors/config.d.ts +12 -0
- package/dist/lib/monitors/config.js +3 -0
- package/dist/lib/monitors/dispatch.js +26 -5
- package/dist/lib/monitors/engine.js +10 -0
- package/dist/lib/monitors/sources/webhook.d.ts +1 -1
- package/dist/lib/monitors/state.d.ts +42 -0
- package/dist/lib/monitors/state.js +30 -0
- package/dist/lib/notify.d.ts +1 -1
- package/dist/lib/observe-aliases.d.ts +3 -3
- package/dist/lib/observe-aliases.js +3 -21
- package/dist/lib/output/git-output.js +2 -2
- package/dist/lib/overdue.d.ts +1 -1
- package/dist/lib/overdue.js +1 -1
- package/dist/lib/permissions-registry.d.ts +65 -0
- package/dist/lib/permissions-registry.js +599 -0
- package/dist/lib/permissions.d.ts +24 -13
- package/dist/lib/permissions.js +52 -271
- package/dist/lib/picker.d.ts +16 -0
- package/dist/lib/picker.js +33 -3
- package/dist/lib/placement.d.ts +1 -1
- package/dist/lib/placement.js +4 -4
- package/dist/lib/platform/paths.d.ts +8 -0
- package/dist/lib/platform/paths.js +11 -0
- package/dist/lib/platform/posixpath.js +3 -3
- package/dist/lib/{plugin-marketplace.d.ts → plugins/plugin-marketplace.d.ts} +1 -1
- package/dist/lib/{plugin-marketplace.js → plugins/plugin-marketplace.js} +2 -2
- package/dist/lib/{plugins.d.ts → plugins/plugins.d.ts} +1 -1
- package/dist/lib/{plugins.js → plugins/plugins.js} +7 -7
- package/dist/lib/{skills.d.ts → plugins/skills.d.ts} +1 -1
- package/dist/lib/{skills.js → plugins/skills.js} +7 -7
- package/dist/lib/pricing/cost.d.ts +1 -1
- package/dist/lib/pricing/cost.js +1 -1
- package/dist/lib/profiles-presets.d.ts +1 -1
- package/dist/lib/profiles-presets.js +1 -1
- package/dist/lib/profiles.js +2 -2
- package/dist/lib/project-import.js +4 -1
- package/dist/lib/project-key.js +7 -0
- package/dist/lib/project-launch.d.ts +1 -1
- package/dist/lib/project-launch.js +3 -3
- package/dist/lib/project-pull.d.ts +128 -0
- package/dist/lib/project-pull.js +384 -0
- package/dist/lib/project-root.d.ts +2 -2
- package/dist/lib/project-root.js +2 -2
- package/dist/lib/project-status.js +1 -1
- package/dist/lib/projects.d.ts +23 -0
- package/dist/lib/projects.js +29 -6
- package/dist/lib/refresh.d.ts +12 -1
- package/dist/lib/refresh.js +16 -9
- package/dist/lib/registry.d.ts +9 -2
- package/dist/lib/registry.js +11 -4
- package/dist/lib/resources.d.ts +2 -2
- package/dist/lib/resources.js +2 -2
- package/dist/lib/routers.d.ts +81 -0
- package/dist/lib/routers.js +153 -0
- package/dist/lib/routine-context.d.ts +1 -0
- package/dist/lib/routine-context.js +7 -2
- package/dist/lib/routine-notify-owner.d.ts +1 -1
- package/dist/lib/routine-notify.d.ts +1 -1
- package/dist/lib/routine-notify.js +1 -1
- package/dist/lib/routine-process-cleanup.d.ts +1 -1
- package/dist/lib/routine-readiness.d.ts +1 -1
- package/dist/lib/routine-readiness.js +11 -4
- package/dist/lib/routines-placement.d.ts +12 -2
- package/dist/lib/routines-placement.js +20 -3
- package/dist/lib/routines-project.d.ts +1 -1
- package/dist/lib/routines-project.js +1 -1
- package/dist/lib/rules/compile.d.ts +1 -0
- package/dist/lib/rules/compile.js +10 -2
- package/dist/lib/rules/rules.js +1 -1
- package/dist/lib/run-notify.js +1 -1
- package/dist/lib/runner.d.ts +80 -2
- package/dist/lib/runner.js +261 -67
- package/dist/lib/sandbox.d.ts +1 -1
- package/dist/lib/scheduler.d.ts +1 -1
- package/dist/lib/scheduler.js +1 -1
- package/dist/lib/{routines.d.ts → scheduling/routines.d.ts} +54 -9
- package/dist/lib/{routines.js → scheduling/routines.js} +173 -14
- 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.js +2 -2
- package/dist/lib/secrets/audit.js +1 -1
- package/dist/lib/secrets/bundles.d.ts +4 -4
- package/dist/lib/secrets/bundles.js +8 -8
- package/dist/lib/secrets/headless.d.ts +16 -0
- package/dist/lib/secrets/headless.js +21 -0
- package/dist/lib/secrets/index.js +1 -1
- package/dist/lib/secrets/list-filter.d.ts +1 -1
- package/dist/lib/secrets/list-filter.js +2 -2
- package/dist/lib/secrets/push.d.ts +1 -1
- package/dist/lib/secrets/push.js +10 -12
- package/dist/lib/secrets/remote.d.ts +21 -17
- package/dist/lib/secrets/remote.js +39 -23
- package/dist/lib/secrets/vault.js +2 -2
- package/dist/lib/self-heal/checks/shadowing.js +1 -1
- package/dist/lib/self-heal/checks/shims.js +1 -1
- package/dist/lib/self-update.d.ts +39 -4
- package/dist/lib/self-update.js +78 -25
- package/dist/lib/serve/control.d.ts +1 -1
- package/dist/lib/serve/control.js +4 -4
- package/dist/lib/serve/data.d.ts +1 -1
- package/dist/lib/serve/data.js +1 -1
- package/dist/lib/serve/stream.js +1 -1
- package/dist/lib/service-manifest.d.ts +29 -0
- package/dist/lib/service-manifest.js +80 -0
- package/dist/lib/session/active.d.ts +59 -7
- package/dist/lib/session/active.js +158 -17
- package/dist/lib/session/bash-command.js +1 -1
- package/dist/lib/session/claude-accounts.d.ts +1 -1
- package/dist/lib/session/claude-accounts.js +1 -1
- package/dist/lib/session/db.d.ts +10 -2
- package/dist/lib/session/db.js +25 -6
- package/dist/lib/session/discover.d.ts +77 -0
- package/dist/lib/session/discover.js +130 -25
- package/dist/lib/session/fork.js +1 -1
- package/dist/lib/session/inject.d.ts +1 -1
- package/dist/lib/session/insights.d.ts +1 -1
- package/dist/lib/session/insights.js +1 -1
- package/dist/lib/session/live-metadata.d.ts +15 -0
- package/dist/lib/session/live-metadata.js +76 -0
- package/dist/lib/session/migrate-targets.d.ts +1 -1
- package/dist/lib/session/recovery.d.ts +1 -1
- package/dist/lib/session/recovery.js +2 -2
- package/dist/lib/session/remote-active.d.ts +10 -1
- package/dist/lib/session/remote-active.js +8 -3
- package/dist/lib/session/remote-bundle.d.ts +1 -1
- package/dist/lib/session/remote-bundle.js +2 -2
- package/dist/lib/session/remote-list.d.ts +15 -4
- package/dist/lib/session/remote-list.js +40 -3
- package/dist/lib/session/remote.d.ts +5 -5
- package/dist/lib/session/remote.js +13 -17
- package/dist/lib/session/resume-command.d.ts +3 -2
- package/dist/lib/session/resume-command.js +4 -3
- package/dist/lib/session/resume-owner.d.ts +3 -3
- package/dist/lib/session/resume-owner.js +3 -3
- package/dist/lib/session/session-cache.d.ts +12 -0
- package/dist/lib/session/session-cache.js +2 -0
- package/dist/lib/session/share-html.d.ts +55 -0
- package/dist/lib/session/share-html.js +319 -0
- package/dist/lib/session/shell-programs.js +1 -1
- package/dist/lib/session/state.js +5 -5
- package/dist/lib/session/team-filter.d.ts +1 -1
- package/dist/lib/session/team-filter.js +1 -1
- package/dist/lib/session/types.d.ts +3 -3
- package/dist/lib/session/width.d.ts +2 -2
- package/dist/lib/session/width.js +2 -2
- package/dist/lib/settings-manifest.d.ts +2 -0
- package/dist/lib/settings-manifest.js +81 -3
- package/dist/lib/share/delete.d.ts +21 -0
- package/dist/lib/share/delete.js +42 -0
- package/dist/lib/share/publish.d.ts +120 -0
- package/dist/lib/share/publish.js +243 -18
- package/dist/lib/share/worker-template.js +172 -9
- package/dist/lib/shims.js +35 -7
- package/dist/lib/smart-launch.d.ts +4 -4
- package/dist/lib/smart-launch.js +6 -4
- package/dist/lib/snapshot.d.ts +4 -4
- package/dist/lib/snapshot.js +2 -2
- package/dist/lib/ssh-exec.d.ts +1 -1
- package/dist/lib/ssh-exec.js +2 -2
- package/dist/lib/ssh-tunnel.d.ts +10 -10
- package/dist/lib/ssh-tunnel.js +12 -12
- package/dist/lib/staleness/checkers/hooks.d.ts +1 -1
- package/dist/lib/staleness/checkers/hooks.js +1 -1
- package/dist/lib/staleness/detectors/permissions.js +0 -23
- package/dist/lib/staleness/detectors/plugins.js +1 -1
- package/dist/lib/staleness/fingerprint.js +1 -1
- package/dist/lib/staleness/layers.d.ts +1 -1
- package/dist/lib/staleness/layers.js +1 -1
- package/dist/lib/staleness/writers/mcp.js +3 -1
- package/dist/lib/staleness/writers/plugins.js +1 -1
- package/dist/lib/staleness/writers/types.d.ts +8 -0
- package/dist/lib/startup/command-registry.d.ts +6 -147
- package/dist/lib/startup/command-registry.js +40 -303
- package/dist/lib/startup/dev-build.d.ts +0 -21
- package/dist/lib/startup/dev-build.js +29 -8
- package/dist/lib/state.d.ts +19 -1
- package/dist/lib/state.js +120 -51
- package/dist/lib/subagents.js +1 -1
- package/dist/lib/sync-status.js +1 -1
- package/dist/lib/sync-umbrella.d.ts +6 -1
- package/dist/lib/sync-umbrella.js +9 -4
- package/dist/lib/teams/agents.js +2 -2
- package/dist/lib/teams/registry.js +1 -1
- package/dist/lib/terminal/backends/vscodium-agent.js +1 -1
- package/dist/lib/terminal/engine.js +1 -1
- package/dist/lib/terminal/index.d.ts +4 -0
- package/dist/lib/terminal/index.js +3 -0
- package/dist/lib/terminal/inject.d.ts +2 -2
- package/dist/lib/terminal/inject.js +2 -2
- package/dist/lib/terminal/transport.js +1 -1
- package/dist/lib/tmux/index.d.ts +1 -1
- package/dist/lib/tmux/index.js +1 -1
- package/dist/lib/tmux/session.d.ts +21 -5
- package/dist/lib/tmux/session.js +76 -22
- package/dist/lib/triggers/handlers.d.ts +38 -3
- package/dist/lib/triggers/handlers.js +58 -7
- package/dist/lib/triggers/webhook.d.ts +113 -5
- package/dist/lib/triggers/webhook.js +223 -44
- package/dist/lib/types.d.ts +19 -7
- package/dist/lib/usage-fleet.d.ts +1 -1
- package/dist/lib/usage-fleet.js +1 -1
- package/dist/lib/usage-refresh.d.ts +1 -1
- package/dist/lib/usage-refresh.js +3 -3
- package/dist/lib/version-duplicates.js +2 -2
- package/dist/lib/view-types.d.ts +56 -0
- package/dist/lib/view-types.js +1 -0
- package/dist/lib/watchdog/rotate.d.ts +2 -2
- package/dist/lib/watchdog/rotate.js +3 -3
- package/dist/lib/watchdog/runner.d.ts +2 -3
- package/dist/lib/watchdog/runner.js +3 -4
- package/dist/lib/workflows.js +1 -1
- package/dist/lib/wrap.d.ts +33 -0
- package/dist/lib/wrap.js +70 -0
- package/package.json +2 -1
- package/scripts/postinstall.js +2 -2
- package/dist/commands/bench.d.ts +0 -2
- package/dist/commands/bench.js +0 -101
- package/dist/commands/cp.d.ts +0 -84
- package/dist/commands/cp.js +0 -231
- package/dist/commands/login.d.ts +0 -2
- package/dist/lib/resources/commands.d.ts +0 -46
- package/dist/lib/resources/commands.js +0 -211
- package/dist/lib/resources/hooks.d.ts +0 -16
- package/dist/lib/resources/hooks.js +0 -153
- package/dist/lib/resources/mcp.d.ts +0 -34
- package/dist/lib/resources/mcp.js +0 -250
- package/dist/lib/resources/memory.d.ts +0 -15
- package/dist/lib/resources/memory.js +0 -46
- package/dist/lib/resources/permissions.d.ts +0 -13
- package/dist/lib/resources/permissions.js +0 -202
- package/dist/lib/resources/rules.d.ts +0 -46
- package/dist/lib/resources/rules.js +0 -179
- package/dist/lib/resources/skills.d.ts +0 -37
- package/dist/lib/resources/skills.js +0 -247
- package/dist/lib/resources/subagents.d.ts +0 -46
- package/dist/lib/resources/subagents.js +0 -202
- /package/dist/lib/{feed.d.ts → feed/feed.d.ts} +0 -0
package/dist/lib/agents.js
CHANGED
|
@@ -22,8 +22,10 @@ import { execFileShellSpec } from './platform/index.js';
|
|
|
22
22
|
import { latestFileMtimeMs } from './fs-walk.js';
|
|
23
23
|
import { damerauLevenshtein } from './fuzzy.js';
|
|
24
24
|
import { getCacheDir, getVersionsDir, getShimsDir, getHistoryDir, getCliVersionCachePath } from './state.js';
|
|
25
|
-
import { resolveVersion, getVersionHomePath, getBinaryPath } from './versions.js';
|
|
25
|
+
import { resolveVersion, getVersionHomePath, getBinaryPath } from './installations/versions.js';
|
|
26
26
|
import { supports } from './capabilities.js';
|
|
27
|
+
import { MCP_TARGETS } from './mcp-registry.js';
|
|
28
|
+
import { VERSION_RE } from './agent-spec/primitives.js';
|
|
27
29
|
const execFileAsync = promisify(execFile);
|
|
28
30
|
const HOME = os.homedir();
|
|
29
31
|
/**
|
|
@@ -239,6 +241,14 @@ export const AGENTS = {
|
|
|
239
241
|
claude: {
|
|
240
242
|
id: 'claude',
|
|
241
243
|
name: 'Claude',
|
|
244
|
+
sessionDir: ['.claude', 'projects'],
|
|
245
|
+
sessionFileExt: '.jsonl',
|
|
246
|
+
versionStdoutMatch: 'semver',
|
|
247
|
+
unmanagedBinary: 'path',
|
|
248
|
+
mcpRegister: 'cli',
|
|
249
|
+
mcpAddHttp: 'transport',
|
|
250
|
+
mcpAddStdio: 'scope',
|
|
251
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
242
252
|
color: 'magenta',
|
|
243
253
|
cliCommand: 'claude',
|
|
244
254
|
npmPackage: '@anthropic-ai/claude-code',
|
|
@@ -263,6 +273,14 @@ export const AGENTS = {
|
|
|
263
273
|
codex: {
|
|
264
274
|
id: 'codex',
|
|
265
275
|
name: 'Codex',
|
|
276
|
+
sessionDir: ['.codex', 'sessions'],
|
|
277
|
+
sessionFileExt: '.jsonl',
|
|
278
|
+
versionStdoutMatch: 'semver',
|
|
279
|
+
unmanagedBinary: 'path',
|
|
280
|
+
mcpRegister: 'cli',
|
|
281
|
+
mcpAddHttp: 'url',
|
|
282
|
+
mcpAddStdio: 'simple',
|
|
283
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
266
284
|
color: 'green',
|
|
267
285
|
cliCommand: 'codex',
|
|
268
286
|
npmPackage: '@openai/codex',
|
|
@@ -284,6 +302,14 @@ export const AGENTS = {
|
|
|
284
302
|
gemini: {
|
|
285
303
|
id: 'gemini',
|
|
286
304
|
name: 'Gemini',
|
|
305
|
+
sessionDir: ['.gemini', 'tmp'],
|
|
306
|
+
sessionFileExt: '.json',
|
|
307
|
+
versionStdoutMatch: 'semver',
|
|
308
|
+
unmanagedBinary: 'path',
|
|
309
|
+
mcpRegister: 'cli',
|
|
310
|
+
mcpAddHttp: 'transport',
|
|
311
|
+
mcpAddStdio: 'simple',
|
|
312
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
287
313
|
color: 'blue',
|
|
288
314
|
cliCommand: 'gemini',
|
|
289
315
|
npmPackage: '@google/gemini-cli',
|
|
@@ -316,6 +342,14 @@ export const AGENTS = {
|
|
|
316
342
|
cursor: {
|
|
317
343
|
id: 'cursor',
|
|
318
344
|
name: 'Cursor',
|
|
345
|
+
sessionDir: null,
|
|
346
|
+
sessionFileExt: null,
|
|
347
|
+
versionStdoutMatch: 'semver',
|
|
348
|
+
unmanagedBinary: 'path',
|
|
349
|
+
mcpRegister: 'cli',
|
|
350
|
+
mcpAddHttp: 'transport',
|
|
351
|
+
mcpAddStdio: 'simple',
|
|
352
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
319
353
|
color: 'cyan',
|
|
320
354
|
cliCommand: 'cursor-agent',
|
|
321
355
|
npmPackage: '',
|
|
@@ -351,6 +385,14 @@ export const AGENTS = {
|
|
|
351
385
|
opencode: {
|
|
352
386
|
id: 'opencode',
|
|
353
387
|
name: 'OpenCode',
|
|
388
|
+
sessionDir: null,
|
|
389
|
+
sessionFileExt: null,
|
|
390
|
+
versionStdoutMatch: 'semver',
|
|
391
|
+
unmanagedBinary: 'path',
|
|
392
|
+
mcpRegister: 'cli',
|
|
393
|
+
mcpAddHttp: 'transport',
|
|
394
|
+
mcpAddStdio: 'simple',
|
|
395
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
354
396
|
color: 'yellowBright',
|
|
355
397
|
cliCommand: 'opencode',
|
|
356
398
|
npmPackage: 'opencode-ai',
|
|
@@ -380,6 +422,14 @@ export const AGENTS = {
|
|
|
380
422
|
pi: {
|
|
381
423
|
id: 'pi',
|
|
382
424
|
name: 'Pi',
|
|
425
|
+
sessionDir: null,
|
|
426
|
+
sessionFileExt: null,
|
|
427
|
+
versionStdoutMatch: 'semver',
|
|
428
|
+
unmanagedBinary: 'path',
|
|
429
|
+
mcpRegister: 'cli',
|
|
430
|
+
mcpAddHttp: 'transport',
|
|
431
|
+
mcpAddStdio: 'simple',
|
|
432
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
383
433
|
color: 'magenta',
|
|
384
434
|
cliCommand: 'omp',
|
|
385
435
|
npmPackage: '@oh-my-pi/pi-coding-agent',
|
|
@@ -411,6 +461,14 @@ export const AGENTS = {
|
|
|
411
461
|
openclaw: {
|
|
412
462
|
id: 'openclaw',
|
|
413
463
|
name: 'OpenClaw',
|
|
464
|
+
sessionDir: null,
|
|
465
|
+
sessionFileExt: null,
|
|
466
|
+
versionStdoutMatch: 'openclaw',
|
|
467
|
+
unmanagedBinary: 'path',
|
|
468
|
+
mcpRegister: 'cli',
|
|
469
|
+
mcpAddHttp: 'transport',
|
|
470
|
+
mcpAddStdio: 'simple',
|
|
471
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
414
472
|
color: 'redBright',
|
|
415
473
|
cliCommand: 'openclaw',
|
|
416
474
|
npmPackage: 'openclaw',
|
|
@@ -443,6 +501,14 @@ export const AGENTS = {
|
|
|
443
501
|
copilot: {
|
|
444
502
|
id: 'copilot',
|
|
445
503
|
name: 'Copilot',
|
|
504
|
+
sessionDir: ['.copilot', 'session-state'],
|
|
505
|
+
sessionFileExt: '.jsonl',
|
|
506
|
+
versionStdoutMatch: 'semver',
|
|
507
|
+
unmanagedBinary: 'path',
|
|
508
|
+
mcpRegister: 'cli',
|
|
509
|
+
mcpAddHttp: 'transport',
|
|
510
|
+
mcpAddStdio: 'simple',
|
|
511
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
446
512
|
color: 'whiteBright',
|
|
447
513
|
cliCommand: 'copilot',
|
|
448
514
|
npmPackage: '@github/copilot',
|
|
@@ -470,6 +536,14 @@ export const AGENTS = {
|
|
|
470
536
|
amp: {
|
|
471
537
|
id: 'amp',
|
|
472
538
|
name: 'Amp',
|
|
539
|
+
sessionDir: null,
|
|
540
|
+
sessionFileExt: null,
|
|
541
|
+
versionStdoutMatch: 'semver',
|
|
542
|
+
unmanagedBinary: 'path',
|
|
543
|
+
mcpRegister: 'cli',
|
|
544
|
+
mcpAddHttp: 'transport',
|
|
545
|
+
mcpAddStdio: 'simple',
|
|
546
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
473
547
|
color: 'blueBright',
|
|
474
548
|
cliCommand: 'amp',
|
|
475
549
|
npmPackage: '@sourcegraph/amp',
|
|
@@ -488,6 +562,14 @@ export const AGENTS = {
|
|
|
488
562
|
kiro: {
|
|
489
563
|
id: 'kiro',
|
|
490
564
|
name: 'Kiro',
|
|
565
|
+
sessionDir: null,
|
|
566
|
+
sessionFileExt: null,
|
|
567
|
+
versionStdoutMatch: 'semver',
|
|
568
|
+
unmanagedBinary: 'path',
|
|
569
|
+
mcpRegister: 'cli',
|
|
570
|
+
mcpAddHttp: 'transport',
|
|
571
|
+
mcpAddStdio: 'simple',
|
|
572
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
491
573
|
color: 'greenBright',
|
|
492
574
|
cliCommand: 'kiro-cli',
|
|
493
575
|
npmPackage: '',
|
|
@@ -513,6 +595,14 @@ export const AGENTS = {
|
|
|
513
595
|
goose: {
|
|
514
596
|
id: 'goose',
|
|
515
597
|
name: 'Goose',
|
|
598
|
+
sessionDir: null,
|
|
599
|
+
sessionFileExt: null,
|
|
600
|
+
versionStdoutMatch: 'semver',
|
|
601
|
+
unmanagedBinary: 'path',
|
|
602
|
+
mcpRegister: 'cli',
|
|
603
|
+
mcpAddHttp: 'transport',
|
|
604
|
+
mcpAddStdio: 'simple',
|
|
605
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
516
606
|
color: 'magentaBright',
|
|
517
607
|
cliCommand: 'goose',
|
|
518
608
|
npmPackage: '',
|
|
@@ -534,13 +624,14 @@ export const AGENTS = {
|
|
|
534
624
|
supportsHooks: true,
|
|
535
625
|
// Plugins: Open Plugins under ~/.agents/plugins/<name>/ (same layout as
|
|
536
626
|
// agents-cli source). Version isolation copies into versionHome/.agents/plugins/.
|
|
537
|
-
// Workflows sync as Goose recipe YAML
|
|
627
|
+
// Workflows sync as Goose recipe YAML. Permissions are NOT supported:
|
|
628
|
+
// permission.yaml gates whole tools, so canonical rules cannot round-trip.
|
|
538
629
|
// Commands: a Goose slash command is a recipe YAML under
|
|
539
630
|
// ~/.config/goose/commands/<name>.yaml, registered in ~/.config/goose/config.yaml
|
|
540
631
|
// under `slash_commands: [{ command, recipe_path }]` (see goose-commands.ts).
|
|
541
632
|
// Subagents: recipe YAML named agents under ~/.config/goose/agents/<name>.yaml
|
|
542
633
|
// (goose auto-discovers and delegates to them by name in autonomous mode).
|
|
543
|
-
capabilities: { hooks: { since: '1.34.0' }, mcp: true, mcpHttp: false, mcpHeaders: false, allowlist:
|
|
634
|
+
capabilities: { hooks: { since: '1.34.0' }, mcp: true, mcpHttp: false, mcpHeaders: false, allowlist: false, skills: { since: '1.25.0' }, commands: true, plugins: true, subagents: true, rules: { file: 'AGENTS.md' }, workflows: true, memory: false, modes: ['edit'], interactiveRepl: true },
|
|
544
635
|
},
|
|
545
636
|
// Google Antigravity CLI (`agy`) — official replacement for Gemini CLI as of IO 2026.
|
|
546
637
|
// configDir nests inside `~/.gemini/` since agy shares the parent dir with the Gemini
|
|
@@ -554,6 +645,14 @@ export const AGENTS = {
|
|
|
554
645
|
antigravity: {
|
|
555
646
|
id: 'antigravity',
|
|
556
647
|
name: 'Antigravity',
|
|
648
|
+
sessionDir: null,
|
|
649
|
+
sessionFileExt: null,
|
|
650
|
+
versionStdoutMatch: 'semver',
|
|
651
|
+
unmanagedBinary: 'path',
|
|
652
|
+
mcpRegister: 'cli',
|
|
653
|
+
mcpAddHttp: 'transport',
|
|
654
|
+
mcpAddStdio: 'simple',
|
|
655
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
557
656
|
color: 'blueBright',
|
|
558
657
|
cliCommand: 'agy',
|
|
559
658
|
npmPackage: '',
|
|
@@ -582,6 +681,14 @@ export const AGENTS = {
|
|
|
582
681
|
grok: {
|
|
583
682
|
id: 'grok',
|
|
584
683
|
name: 'Grok',
|
|
684
|
+
sessionDir: ['.grok', 'sessions'],
|
|
685
|
+
sessionFileExt: '.json',
|
|
686
|
+
versionStdoutMatch: 'semver',
|
|
687
|
+
unmanagedBinary: 'grok-downloads',
|
|
688
|
+
mcpRegister: 'cli',
|
|
689
|
+
mcpAddHttp: 'transport',
|
|
690
|
+
mcpAddStdio: 'simple',
|
|
691
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
585
692
|
color: 'cyanBright',
|
|
586
693
|
cliCommand: 'grok',
|
|
587
694
|
npmPackage: '',
|
|
@@ -631,6 +738,14 @@ export const AGENTS = {
|
|
|
631
738
|
kimi: {
|
|
632
739
|
id: 'kimi',
|
|
633
740
|
name: 'Kimi',
|
|
741
|
+
sessionDir: null,
|
|
742
|
+
sessionFileExt: null,
|
|
743
|
+
versionStdoutMatch: 'semver',
|
|
744
|
+
unmanagedBinary: 'path',
|
|
745
|
+
mcpRegister: 'cli',
|
|
746
|
+
mcpAddHttp: 'transport',
|
|
747
|
+
mcpAddStdio: 'simple',
|
|
748
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
634
749
|
color: 'magentaBright',
|
|
635
750
|
cliCommand: 'kimi',
|
|
636
751
|
npmPackage: '@moonshot-ai/kimi-code',
|
|
@@ -717,6 +832,14 @@ export const AGENTS = {
|
|
|
717
832
|
droid: {
|
|
718
833
|
id: 'droid',
|
|
719
834
|
name: 'Droid',
|
|
835
|
+
sessionDir: ['.factory', 'sessions'],
|
|
836
|
+
sessionFileExt: '.jsonl',
|
|
837
|
+
versionStdoutMatch: 'semver',
|
|
838
|
+
unmanagedBinary: 'path',
|
|
839
|
+
mcpRegister: 'cli',
|
|
840
|
+
mcpAddHttp: 'transport',
|
|
841
|
+
mcpAddStdio: 'simple',
|
|
842
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
720
843
|
color: 'yellowBright',
|
|
721
844
|
cliCommand: 'droid',
|
|
722
845
|
npmPackage: '',
|
|
@@ -760,6 +883,14 @@ export const AGENTS = {
|
|
|
760
883
|
hermes: {
|
|
761
884
|
id: 'hermes',
|
|
762
885
|
name: 'Hermes',
|
|
886
|
+
sessionDir: null,
|
|
887
|
+
sessionFileExt: null,
|
|
888
|
+
versionStdoutMatch: 'semver',
|
|
889
|
+
unmanagedBinary: 'path',
|
|
890
|
+
mcpRegister: 'config',
|
|
891
|
+
mcpAddHttp: 'transport',
|
|
892
|
+
mcpAddStdio: 'simple',
|
|
893
|
+
mcpConfigWrite: 'yaml-mcp_servers',
|
|
763
894
|
color: 'cyanBright',
|
|
764
895
|
cliCommand: 'hermes',
|
|
765
896
|
npmPackage: '',
|
|
@@ -817,6 +948,14 @@ export const AGENTS = {
|
|
|
817
948
|
muse: {
|
|
818
949
|
id: 'muse',
|
|
819
950
|
name: 'Muse',
|
|
951
|
+
sessionDir: ['.local', 'share', 'muse', 'sessions'],
|
|
952
|
+
sessionFileExt: '.jsonl',
|
|
953
|
+
versionStdoutMatch: 'semver',
|
|
954
|
+
unmanagedBinary: 'path',
|
|
955
|
+
mcpRegister: 'cli',
|
|
956
|
+
mcpAddHttp: 'transport',
|
|
957
|
+
mcpAddStdio: 'simple',
|
|
958
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
820
959
|
color: 'blueBright',
|
|
821
960
|
cliCommand: 'muse',
|
|
822
961
|
npmPackage: '',
|
|
@@ -886,6 +1025,14 @@ export const AGENTS = {
|
|
|
886
1025
|
warp: {
|
|
887
1026
|
id: 'warp',
|
|
888
1027
|
name: 'Warp',
|
|
1028
|
+
sessionDir: null,
|
|
1029
|
+
sessionFileExt: null,
|
|
1030
|
+
versionStdoutMatch: 'semver',
|
|
1031
|
+
unmanagedBinary: 'path',
|
|
1032
|
+
mcpRegister: 'cli',
|
|
1033
|
+
mcpAddHttp: 'transport',
|
|
1034
|
+
mcpAddStdio: 'simple',
|
|
1035
|
+
mcpConfigWrite: 'json-mcpServers',
|
|
889
1036
|
color: 'blueBright',
|
|
890
1037
|
cliCommand: 'warp',
|
|
891
1038
|
npmPackage: '',
|
|
@@ -948,7 +1095,9 @@ export const ALL_AGENT_IDS = Object.keys(AGENTS);
|
|
|
948
1095
|
export const ROUTINE_AGENT_COMMANDS = {
|
|
949
1096
|
claude: ['claude', '-p', '--verbose', '{prompt}', '--output-format', 'stream-json', '--permission-mode', 'plan'],
|
|
950
1097
|
codex: ['codex', 'exec', '{prompt}', '--json'],
|
|
951
|
-
|
|
1098
|
+
// gemini is hard-deprecated (Antigravity replaced it) — no routine target. A
|
|
1099
|
+
// legacy gemini routine now fails validateJob loud instead of firing a
|
|
1100
|
+
// retired backend; the id survives only for reading old sessions/config.
|
|
952
1101
|
cursor: ['cursor-agent', '-p', '{prompt}', '--output-format', 'stream-json'],
|
|
953
1102
|
kimi: ['kimi', '--prompt', '{prompt}', '--output-format', 'stream-json'],
|
|
954
1103
|
droid: ['droid', 'exec', '{prompt}', '-o', 'stream-json'],
|
|
@@ -987,7 +1136,9 @@ export function isSelfUpdatingAgent(agent) {
|
|
|
987
1136
|
return !cfg.npmPackage && !!cfg.installScript && !cfg.installScript.includes('VERSION');
|
|
988
1137
|
}
|
|
989
1138
|
export function isAgentHardDeprecated(agent) {
|
|
990
|
-
|
|
1139
|
+
// Tolerate ids outside the registry (legacy YAML, test fixtures): an unknown
|
|
1140
|
+
// agent is not hard-deprecated — its own validation rejects it elsewhere.
|
|
1141
|
+
return AGENTS[agent]?.deprecated?.hard === true;
|
|
991
1142
|
}
|
|
992
1143
|
// Capability-filtered agent lists used to live here as `*_CAPABLE_AGENTS`
|
|
993
1144
|
// constants. They were a frequent source of silent-skip bugs (e.g. grok
|
|
@@ -1044,14 +1195,11 @@ async function getCachedVersionForBinary(agentId, binaryPath) {
|
|
|
1044
1195
|
let version = null;
|
|
1045
1196
|
try {
|
|
1046
1197
|
const { stdout } = await execFileAsync(agent.cliCommand, ['--version'], { timeout: 3000 });
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
const match = stdout.match(/(\d+\.\d+\.\d+)/);
|
|
1053
|
-
version = match ? match[1] : stdout.trim();
|
|
1054
|
-
}
|
|
1198
|
+
const versionRe = agent.versionStdoutMatch === 'openclaw'
|
|
1199
|
+
? /openclaw\/(\d+\.\d+\.\d+)/
|
|
1200
|
+
: /(\d+\.\d+\.\d+)/;
|
|
1201
|
+
const match = stdout.match(versionRe);
|
|
1202
|
+
version = match ? match[1] : stdout.trim();
|
|
1055
1203
|
}
|
|
1056
1204
|
catch {
|
|
1057
1205
|
/* version command failed */
|
|
@@ -1122,8 +1270,9 @@ export async function getCliState(agentId) {
|
|
|
1122
1270
|
*/
|
|
1123
1271
|
export async function getUnmanagedCliState(agentId) {
|
|
1124
1272
|
const agent = AGENTS[agentId];
|
|
1125
|
-
//
|
|
1126
|
-
|
|
1273
|
+
// Grok (and any future harness with unmanagedBinary: 'grok-downloads')
|
|
1274
|
+
// keeps versioned binaries under ~/.grok/downloads/, not on PATH.
|
|
1275
|
+
if (agent.unmanagedBinary === 'grok-downloads') {
|
|
1127
1276
|
const grokBin = resolveGrokBinary();
|
|
1128
1277
|
if (!grokBin) {
|
|
1129
1278
|
return { installed: false, version: null, path: null };
|
|
@@ -1158,19 +1307,10 @@ export async function getAllCliStates() {
|
|
|
1158
1307
|
}
|
|
1159
1308
|
/**
|
|
1160
1309
|
* Agents that `agents setup` probes for pre-existing native installations
|
|
1161
|
-
* (i.e., a config dir present before agents-cli took over).
|
|
1162
|
-
*
|
|
1163
|
-
* wired into `getSessionDir`.
|
|
1310
|
+
* (i.e., a config dir present before agents-cli took over). Derived from
|
|
1311
|
+
* `sessionDir` so a new harness cannot be walkable yet missing from setup.
|
|
1164
1312
|
*/
|
|
1165
|
-
export const UNMANAGED_DETECTION_CANDIDATES = [
|
|
1166
|
-
'claude',
|
|
1167
|
-
'codex',
|
|
1168
|
-
'gemini',
|
|
1169
|
-
'grok',
|
|
1170
|
-
'copilot',
|
|
1171
|
-
'droid',
|
|
1172
|
-
'muse',
|
|
1173
|
-
];
|
|
1313
|
+
export const UNMANAGED_DETECTION_CANDIDATES = ALL_AGENT_IDS.filter((id) => AGENTS[id].sessionDir !== null);
|
|
1174
1314
|
/**
|
|
1175
1315
|
* Detect existing agent installations that are NOT yet managed by agents-cli.
|
|
1176
1316
|
* Returns agents whose config dir exists as a real directory (not a symlink).
|
|
@@ -2233,45 +2373,12 @@ function writeLastActiveCacheFile(cache, cachePath) {
|
|
|
2233
2373
|
}
|
|
2234
2374
|
/** Return the root directory where the agent stores session files, or null if unknown. */
|
|
2235
2375
|
function getSessionDir(agentId, base) {
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
return path.join(base, '.claude', 'projects');
|
|
2239
|
-
case 'codex':
|
|
2240
|
-
return path.join(base, '.codex', 'sessions');
|
|
2241
|
-
case 'gemini':
|
|
2242
|
-
return path.join(base, '.gemini', 'tmp');
|
|
2243
|
-
case 'grok':
|
|
2244
|
-
return path.join(base, '.grok', 'sessions');
|
|
2245
|
-
case 'copilot':
|
|
2246
|
-
// Copilot persists sessions at ~/.copilot/session-state/<id>/events.jsonl.
|
|
2247
|
-
// The events.jsonl is the canonical NDJSON event stream per session.
|
|
2248
|
-
return path.join(base, '.copilot', 'session-state');
|
|
2249
|
-
case 'droid':
|
|
2250
|
-
return path.join(base, '.factory', 'sessions');
|
|
2251
|
-
case 'muse':
|
|
2252
|
-
// Muse sessions live under XDG data, not the config dir:
|
|
2253
|
-
// ~/.local/share/muse/sessions/YYYY/MM/DD/<uuid>/session.jsonl
|
|
2254
|
-
return path.join(base, '.local', 'share', 'muse', 'sessions');
|
|
2255
|
-
default:
|
|
2256
|
-
return null;
|
|
2257
|
-
}
|
|
2376
|
+
const rel = AGENTS[agentId].sessionDir;
|
|
2377
|
+
return rel ? path.join(base, ...rel) : null;
|
|
2258
2378
|
}
|
|
2259
2379
|
/** Return the file extension used for session files by the given agent. */
|
|
2260
2380
|
function getSessionExtension(agentId) {
|
|
2261
|
-
|
|
2262
|
-
case 'claude':
|
|
2263
|
-
case 'codex':
|
|
2264
|
-
case 'copilot':
|
|
2265
|
-
case 'droid':
|
|
2266
|
-
case 'muse':
|
|
2267
|
-
return '.jsonl';
|
|
2268
|
-
case 'gemini':
|
|
2269
|
-
return '.json';
|
|
2270
|
-
case 'grok':
|
|
2271
|
-
return '.json'; // sessions contain summary.json, events.jsonl, etc.
|
|
2272
|
-
default:
|
|
2273
|
-
return null;
|
|
2274
|
-
}
|
|
2381
|
+
return AGENTS[agentId].sessionFileExt;
|
|
2275
2382
|
}
|
|
2276
2383
|
/**
|
|
2277
2384
|
* Quick count of session files for an agent (without full DB scan).
|
|
@@ -2350,7 +2457,7 @@ export async function registerMcp(agentId, name, command, scope = 'user', transp
|
|
|
2350
2457
|
if (transport === 'http' && options?.headers && Object.keys(options.headers).length > 0 && !supports(agentId, 'mcpHeaders').ok) {
|
|
2351
2458
|
return { success: false, error: 'skipped: HTTP MCP headers are only supported for Claude registration' };
|
|
2352
2459
|
}
|
|
2353
|
-
if (
|
|
2460
|
+
if (agent.mcpRegister === 'config') {
|
|
2354
2461
|
try {
|
|
2355
2462
|
writeMcpToConfig(agentId, name, command, scope, transport, options?.home);
|
|
2356
2463
|
return { success: true };
|
|
@@ -2367,7 +2474,7 @@ export async function registerMcp(agentId, name, command, scope = 'user', transp
|
|
|
2367
2474
|
const bin = options?.binary || agent.cliCommand;
|
|
2368
2475
|
let args;
|
|
2369
2476
|
if (transport === 'http') {
|
|
2370
|
-
if (
|
|
2477
|
+
if (agent.mcpAddHttp === 'url') {
|
|
2371
2478
|
args = ['mcp', 'add', name, '--url', command];
|
|
2372
2479
|
}
|
|
2373
2480
|
else {
|
|
@@ -2375,7 +2482,7 @@ export async function registerMcp(agentId, name, command, scope = 'user', transp
|
|
|
2375
2482
|
args = ['mcp', 'add', '--transport', 'http', '--scope', scope, name, command, ...headerArgs];
|
|
2376
2483
|
}
|
|
2377
2484
|
}
|
|
2378
|
-
else if (
|
|
2485
|
+
else if (agent.mcpAddStdio === 'scope') {
|
|
2379
2486
|
const commandArgs = splitCommandLine(command);
|
|
2380
2487
|
args = ['mcp', 'add', '--transport', transport, '--scope', scope, name, '--', ...commandArgs];
|
|
2381
2488
|
}
|
|
@@ -2404,7 +2511,7 @@ export async function unregisterMcp(agentId, name, options) {
|
|
|
2404
2511
|
if (!supports(agentId, 'mcp').ok) {
|
|
2405
2512
|
return { success: false, error: 'Agent does not support MCP' };
|
|
2406
2513
|
}
|
|
2407
|
-
if (
|
|
2514
|
+
if (agent.mcpRegister === 'config') {
|
|
2408
2515
|
try {
|
|
2409
2516
|
removeMcpFromConfig(agentId, name, options?.home);
|
|
2410
2517
|
return { success: true };
|
|
@@ -2514,7 +2621,7 @@ function readJsonConfig(configPath) {
|
|
|
2514
2621
|
function writeMcpToConfig(agentId, name, command, scope, transport, home) {
|
|
2515
2622
|
const configPath = scopedMcpConfigPath(agentId, scope, home);
|
|
2516
2623
|
const entry = mcpEntryFromCommand(command, transport);
|
|
2517
|
-
if (agentId === '
|
|
2624
|
+
if (AGENTS[agentId].mcpConfigWrite === 'yaml-mcp_servers') {
|
|
2518
2625
|
const config = readYamlConfig(configPath);
|
|
2519
2626
|
if (!config.mcp_servers || typeof config.mcp_servers !== 'object' || Array.isArray(config.mcp_servers)) {
|
|
2520
2627
|
config.mcp_servers = {};
|
|
@@ -2536,7 +2643,7 @@ function removeMcpFromConfig(agentId, name, home) {
|
|
|
2536
2643
|
const configPath = userMcpConfigPath(agentId, home);
|
|
2537
2644
|
if (!fs.existsSync(configPath))
|
|
2538
2645
|
return;
|
|
2539
|
-
if (agentId === '
|
|
2646
|
+
if (AGENTS[agentId].mcpConfigWrite === 'yaml-mcp_servers') {
|
|
2540
2647
|
const config = readYamlConfig(configPath);
|
|
2541
2648
|
const servers = config.mcp_servers;
|
|
2542
2649
|
if (servers && typeof servers === 'object' && !Array.isArray(servers)) {
|
|
@@ -2576,8 +2683,13 @@ function extractNpmVersion(args) {
|
|
|
2576
2683
|
/**
|
|
2577
2684
|
* Strip JSON comments for JSONC parsing.
|
|
2578
2685
|
* Only removes comments outside of strings.
|
|
2686
|
+
*
|
|
2687
|
+
* Exported because the MCP writer needs the SAME parser the reader uses: a
|
|
2688
|
+
* naive `//`-to-end-of-line regex eats the `//` inside
|
|
2689
|
+
* `"$schema": "https://opencode.ai/config.json"`, which every opencode-generated
|
|
2690
|
+
* config carries.
|
|
2579
2691
|
*/
|
|
2580
|
-
function stripJsonComments(content) {
|
|
2692
|
+
export function stripJsonComments(content) {
|
|
2581
2693
|
let result = '';
|
|
2582
2694
|
let inString = false;
|
|
2583
2695
|
let escape = false;
|
|
@@ -2723,142 +2835,33 @@ function parseMcpFromOpenCodeConfig(configPath) {
|
|
|
2723
2835
|
}
|
|
2724
2836
|
/**
|
|
2725
2837
|
* Get user-scoped MCP config path for an agent.
|
|
2838
|
+
*
|
|
2839
|
+
* All three MCP path resolvers read `MCP_TARGETS`, so the file the writer
|
|
2840
|
+
* targets, the file the parser reads, and the file the staleness detector
|
|
2841
|
+
* watches cannot drift apart. An agent with no MCP target (the hard-deprecated
|
|
2842
|
+
* `gemini`) keeps the historical settings.json default so old configs still
|
|
2843
|
+
* parse.
|
|
2726
2844
|
*/
|
|
2727
2845
|
export function getUserMcpConfigPath(agentId) {
|
|
2728
|
-
|
|
2729
|
-
switch (agentId) {
|
|
2730
|
-
case 'claude':
|
|
2731
|
-
// Claude user-scoped MCPs are in ~/.claude.json (global user config)
|
|
2732
|
-
return path.join(HOME, '.claude.json');
|
|
2733
|
-
case 'codex':
|
|
2734
|
-
// Codex uses TOML config
|
|
2735
|
-
return path.join(agent.configDir, 'config.toml');
|
|
2736
|
-
case 'opencode':
|
|
2737
|
-
// OpenCode loads ~/.config/opencode/opencode.jsonc (not ~/.opencode/)
|
|
2738
|
-
return path.join(HOME, '.config', 'opencode', 'opencode.jsonc');
|
|
2739
|
-
case 'cursor':
|
|
2740
|
-
// Cursor uses mcp.json
|
|
2741
|
-
return path.join(agent.configDir, 'mcp.json');
|
|
2742
|
-
case 'openclaw':
|
|
2743
|
-
// OpenClaw uses openclaw.json
|
|
2744
|
-
return path.join(agent.configDir, 'openclaw.json');
|
|
2745
|
-
case 'copilot':
|
|
2746
|
-
// GitHub Copilot CLI uses mcp-config.json (matches versioned + project paths)
|
|
2747
|
-
return path.join(agent.configDir, 'mcp-config.json');
|
|
2748
|
-
case 'antigravity':
|
|
2749
|
-
// agy uses mcp_config.json inside its nested config dir (~/.gemini/antigravity-cli/)
|
|
2750
|
-
return path.join(agent.configDir, 'mcp_config.json');
|
|
2751
|
-
case 'grok':
|
|
2752
|
-
// grok mcp.json — exact field schema verified at first install
|
|
2753
|
-
return path.join(agent.configDir, 'mcp.json');
|
|
2754
|
-
case 'droid':
|
|
2755
|
-
// Factory AI Droid stores MCPs in ~/.factory/mcp.json
|
|
2756
|
-
return path.join(agent.configDir, 'mcp.json');
|
|
2757
|
-
case 'hermes':
|
|
2758
|
-
return path.join(agent.configDir, 'config.yaml');
|
|
2759
|
-
case 'pi':
|
|
2760
|
-
// omp reads user-scope MCP from ~/.omp/agent/.mcp.json (Claude schema).
|
|
2761
|
-
return path.join(agent.configDir, '.mcp.json');
|
|
2762
|
-
case 'muse':
|
|
2763
|
-
// Muse Code: MCP lives in ~/.config/muse/settings.json under mcp_servers.
|
|
2764
|
-
return path.join(agent.configDir, 'settings.json');
|
|
2765
|
-
case 'warp':
|
|
2766
|
-
// Oz reads user-scope MCP from ~/.warp/.mcp.json (Claude schema).
|
|
2767
|
-
return path.join(agent.configDir, '.mcp.json');
|
|
2768
|
-
default:
|
|
2769
|
-
// Gemini and others use settings.json
|
|
2770
|
-
return path.join(agent.configDir, 'settings.json');
|
|
2771
|
-
}
|
|
2846
|
+
return getMcpConfigPathForHome(agentId, HOME);
|
|
2772
2847
|
}
|
|
2773
2848
|
/**
|
|
2774
2849
|
* Get MCP config path for a specific HOME directory (used for version-managed agents).
|
|
2775
2850
|
*/
|
|
2776
2851
|
export function getMcpConfigPathForHome(agentId, home) {
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2781
|
-
return path.join(home, '.codex', 'config.toml');
|
|
2782
|
-
case 'opencode':
|
|
2783
|
-
return path.join(home, '.config', 'opencode', 'opencode.jsonc');
|
|
2784
|
-
case 'cursor':
|
|
2785
|
-
return path.join(home, '.cursor', 'mcp.json');
|
|
2786
|
-
case 'openclaw':
|
|
2787
|
-
return path.join(home, '.openclaw', 'openclaw.json');
|
|
2788
|
-
case 'copilot':
|
|
2789
|
-
return path.join(home, '.copilot', 'mcp-config.json');
|
|
2790
|
-
case 'amp':
|
|
2791
|
-
return path.join(home, '.config', 'amp', 'settings.json');
|
|
2792
|
-
case 'kiro':
|
|
2793
|
-
return path.join(home, '.kiro', 'settings', 'mcp.json');
|
|
2794
|
-
case 'goose':
|
|
2795
|
-
return path.join(home, '.config', 'goose', 'config.yaml');
|
|
2796
|
-
case 'antigravity':
|
|
2797
|
-
return path.join(home, '.gemini', 'antigravity-cli', 'mcp_config.json');
|
|
2798
|
-
case 'grok':
|
|
2799
|
-
return path.join(home, '.grok', 'config.toml');
|
|
2800
|
-
case 'droid':
|
|
2801
|
-
return path.join(home, '.factory', 'mcp.json');
|
|
2802
|
-
case 'hermes':
|
|
2803
|
-
return path.join(home, '.hermes', 'config.yaml');
|
|
2804
|
-
case 'pi':
|
|
2805
|
-
return path.join(home, '.omp', 'agent', '.mcp.json');
|
|
2806
|
-
case 'muse':
|
|
2807
|
-
return path.join(home, '.config', 'muse', 'settings.json');
|
|
2808
|
-
case 'warp':
|
|
2809
|
-
return path.join(home, '.warp', '.mcp.json');
|
|
2810
|
-
default:
|
|
2811
|
-
return path.join(home, agentConfigDirName(agentId), 'settings.json');
|
|
2812
|
-
}
|
|
2852
|
+
const target = MCP_TARGETS[agentId];
|
|
2853
|
+
if (target)
|
|
2854
|
+
return target.home(home);
|
|
2855
|
+
return path.join(home, agentConfigDirName(agentId), 'settings.json');
|
|
2813
2856
|
}
|
|
2814
2857
|
/**
|
|
2815
2858
|
* Get project-scoped MCP config path for an agent.
|
|
2816
2859
|
*/
|
|
2817
2860
|
export function getProjectMcpConfigPath(agentId, cwd = process.cwd()) {
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
case 'codex':
|
|
2823
|
-
return path.join(cwd, `.${agentId}`, 'config.toml');
|
|
2824
|
-
case 'opencode':
|
|
2825
|
-
// Project config is opencode.jsonc at project root (not .opencode/)
|
|
2826
|
-
return path.join(cwd, 'opencode.jsonc');
|
|
2827
|
-
case 'cursor':
|
|
2828
|
-
return path.join(cwd, `.${agentId}`, 'mcp.json');
|
|
2829
|
-
case 'openclaw':
|
|
2830
|
-
return path.join(cwd, `.${agentId}`, 'openclaw.json');
|
|
2831
|
-
case 'gemini':
|
|
2832
|
-
return path.join(cwd, `.${agentId}`, 'settings.json');
|
|
2833
|
-
case 'copilot':
|
|
2834
|
-
return path.join(cwd, '.copilot', 'mcp-config.json');
|
|
2835
|
-
case 'amp':
|
|
2836
|
-
return path.join(cwd, '.amp', 'settings.json');
|
|
2837
|
-
case 'kiro':
|
|
2838
|
-
return path.join(cwd, '.kiro', 'settings', 'mcp.json');
|
|
2839
|
-
case 'goose':
|
|
2840
|
-
return path.join(cwd, '.goose', 'config.yaml');
|
|
2841
|
-
case 'antigravity':
|
|
2842
|
-
return path.join(cwd, '.gemini', 'antigravity-cli', 'mcp_config.json');
|
|
2843
|
-
case 'grok':
|
|
2844
|
-
return path.join(cwd, '.grok', 'config.toml');
|
|
2845
|
-
case 'droid':
|
|
2846
|
-
return path.join(cwd, '.factory', 'mcp.json');
|
|
2847
|
-
case 'hermes':
|
|
2848
|
-
return path.join(cwd, '.hermes', 'config.yaml');
|
|
2849
|
-
case 'pi':
|
|
2850
|
-
// omp reads project MCP from <root>/.mcp.json (Claude-compatible).
|
|
2851
|
-
return path.join(cwd, '.mcp.json');
|
|
2852
|
-
case 'muse':
|
|
2853
|
-
// Muse project MCP rides the same settings schema under .muse/settings.json
|
|
2854
|
-
// when present; otherwise fall back to the user settings path.
|
|
2855
|
-
return path.join(cwd, '.muse', 'settings.json');
|
|
2856
|
-
case 'warp':
|
|
2857
|
-
// Oz reads project MCP from <root>/.warp/.mcp.json (Claude schema).
|
|
2858
|
-
return path.join(cwd, '.warp', '.mcp.json');
|
|
2859
|
-
default:
|
|
2860
|
-
return path.join(cwd, `.${agentId}`, 'settings.json');
|
|
2861
|
-
}
|
|
2861
|
+
const target = MCP_TARGETS[agentId];
|
|
2862
|
+
if (target)
|
|
2863
|
+
return target.project(cwd);
|
|
2864
|
+
return path.join(cwd, `.${agentId}`, 'settings.json');
|
|
2862
2865
|
}
|
|
2863
2866
|
/**
|
|
2864
2867
|
* Parse MCP servers from OpenClaw's JSON config.
|
|
@@ -2902,16 +2905,22 @@ function parseMcpFromOpenClawConfig(configPath) {
|
|
|
2902
2905
|
* Parse MCP config based on agent type.
|
|
2903
2906
|
*/
|
|
2904
2907
|
export function parseMcpConfig(agentId, configPath) {
|
|
2905
|
-
|
|
2906
|
-
|
|
2908
|
+
// Dispatch on the registry's declared format, not the agent id, so the parser
|
|
2909
|
+
// can never disagree with the writer about a file's serialization -- grok's
|
|
2910
|
+
// TOML config was previously read as JSON and always came back empty.
|
|
2911
|
+
switch (MCP_TARGETS[agentId]?.format) {
|
|
2912
|
+
case 'toml':
|
|
2907
2913
|
return parseMcpFromTomlConfig(configPath);
|
|
2908
|
-
case 'opencode':
|
|
2914
|
+
case 'opencode-jsonc':
|
|
2909
2915
|
return parseMcpFromOpenCodeConfig(configPath);
|
|
2910
|
-
case 'openclaw':
|
|
2916
|
+
case 'openclaw-json':
|
|
2911
2917
|
return parseMcpFromOpenClawConfig(configPath);
|
|
2912
|
-
case '
|
|
2918
|
+
case 'yaml':
|
|
2913
2919
|
return parseMcpFromYamlConfig(configPath);
|
|
2914
2920
|
default:
|
|
2921
|
+
// claude-json / antigravity-json / muse-json all live in a JSON object;
|
|
2922
|
+
// parseMcpFromJsonConfig accepts mcpServers | mcp_servers | mcp. Agents
|
|
2923
|
+
// with no declared format fall here too, matching prior behavior.
|
|
2915
2924
|
return parseMcpFromJsonConfig(configPath);
|
|
2916
2925
|
}
|
|
2917
2926
|
}
|
|
@@ -3035,6 +3044,29 @@ export function resolveAgentName(input) {
|
|
|
3035
3044
|
export function isAgentName(input) {
|
|
3036
3045
|
return resolveAgentName(input) !== null;
|
|
3037
3046
|
}
|
|
3047
|
+
/**
|
|
3048
|
+
* Split a CLI-provided `<agent>[@<version>]` spec into its bare agent id and
|
|
3049
|
+
* optional exact version token, the same way `agents run` does
|
|
3050
|
+
* (commands/exec.ts parses its positional with a plain `split('@')`) — NOT the
|
|
3051
|
+
* agent-spec qualifier engine (`@latest`/`@all`), which enumerates installed
|
|
3052
|
+
* versions for read/diagnostic commands, not a single launch target. Returns an
|
|
3053
|
+
* error message rather than throwing so callers decide exit-vs-continue.
|
|
3054
|
+
*/
|
|
3055
|
+
export function parseAgentVersionSpec(raw) {
|
|
3056
|
+
const parts = raw.split('@');
|
|
3057
|
+
if (parts.length > 2) {
|
|
3058
|
+
return { error: `Invalid agent spec '${raw}': at most one '@version' is allowed` };
|
|
3059
|
+
}
|
|
3060
|
+
const [rawAgent, rawVersion] = parts;
|
|
3061
|
+
const agent = resolveAgentName(rawAgent);
|
|
3062
|
+
if (!agent) {
|
|
3063
|
+
return { error: `Unknown agent, profile, or workflow: ${rawAgent}. See \`agents list\` for the installed harnesses.` };
|
|
3064
|
+
}
|
|
3065
|
+
if (rawVersion !== undefined && (rawVersion === '' || !VERSION_RE.test(rawVersion))) {
|
|
3066
|
+
return { error: `Invalid version '${rawVersion}' in '${raw}'` };
|
|
3067
|
+
}
|
|
3068
|
+
return { agent, ...(rawVersion ? { version: rawVersion } : {}) };
|
|
3069
|
+
}
|
|
3038
3070
|
/**
|
|
3039
3071
|
* Build the deprecation notice lines for an agent, or null if it isn't
|
|
3040
3072
|
* deprecated. Split from the printer so tests can assert the content without
|