@phnx-labs/agents-cli 1.12.0 → 1.14.2
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 +7 -1
- package/README.md +308 -297
- package/dist/commands/alias.d.ts +11 -0
- package/dist/commands/alias.js +117 -0
- package/dist/commands/beta.d.ts +2 -0
- package/dist/commands/beta.js +53 -0
- package/dist/commands/cloud.d.ts +10 -0
- package/dist/commands/cloud.js +408 -0
- package/dist/commands/commands.d.ts +9 -1
- package/dist/commands/commands.js +24 -172
- package/dist/commands/daemon.d.ts +8 -1
- package/dist/commands/daemon.js +13 -5
- package/dist/commands/doctor.d.ts +15 -0
- package/dist/commands/doctor.js +132 -0
- package/dist/commands/drive.d.ts +8 -1
- package/dist/commands/drive.js +20 -3
- package/dist/commands/exec.d.ts +8 -1
- package/dist/commands/exec.js +207 -20
- package/dist/commands/factory.d.ts +19 -0
- package/dist/commands/factory.js +71 -0
- package/dist/commands/fork.d.ts +8 -1
- package/dist/commands/fork.js +11 -4
- package/dist/commands/hooks.d.ts +9 -1
- package/dist/commands/hooks.js +30 -182
- package/dist/commands/init.d.ts +15 -1
- package/dist/commands/init.js +168 -74
- package/dist/commands/mcp.d.ts +9 -1
- package/dist/commands/mcp.js +11 -7
- package/dist/commands/models.d.ts +8 -1
- package/dist/commands/models.js +45 -6
- package/dist/commands/packages.d.ts +8 -1
- package/dist/commands/packages.js +13 -7
- package/dist/commands/permissions.d.ts +9 -1
- package/dist/commands/permissions.js +3 -3
- package/dist/commands/plugins.d.ts +8 -1
- package/dist/commands/plugins.js +13 -2
- package/dist/commands/profiles.d.ts +11 -0
- package/dist/commands/profiles.js +291 -0
- package/dist/commands/prune.d.ts +22 -0
- package/dist/commands/prune.js +191 -0
- package/dist/commands/pty.d.ts +1 -1
- package/dist/commands/pty.js +2 -1
- package/dist/commands/pull.d.ts +8 -1
- package/dist/commands/pull.js +93 -129
- package/dist/commands/refresh-memory.d.ts +7 -1
- package/dist/commands/refresh-memory.js +7 -1
- package/dist/commands/repo.d.ts +15 -0
- package/dist/commands/repo.js +570 -0
- package/dist/commands/resource-view.d.ts +10 -3
- package/dist/commands/resource-view.js +18 -5
- package/dist/commands/routines.d.ts +8 -1
- package/dist/commands/routines.js +17 -4
- package/dist/commands/rules.d.ts +9 -1
- package/dist/commands/rules.js +16 -11
- package/dist/commands/secrets.d.ts +10 -0
- package/dist/commands/secrets.js +518 -0
- package/dist/commands/sessions-picker.d.ts +2 -1
- package/dist/commands/sessions-picker.js +88 -11
- package/dist/commands/sessions-tail.d.ts +19 -0
- package/dist/commands/sessions-tail.js +235 -0
- package/dist/commands/sessions.d.ts +2 -1
- package/dist/commands/sessions.js +288 -7
- package/dist/commands/skills.d.ts +9 -1
- package/dist/commands/skills.js +28 -178
- package/dist/commands/status.d.ts +7 -1
- package/dist/commands/status.js +7 -1
- package/dist/commands/subagents.d.ts +8 -1
- package/dist/commands/subagents.js +11 -1
- package/dist/commands/sync.d.ts +8 -1
- package/dist/commands/sync.js +8 -1
- package/dist/commands/teams-picker.d.ts +4 -1
- package/dist/commands/teams-picker.js +55 -3
- package/dist/commands/teams.d.ts +15 -1
- package/dist/commands/teams.js +323 -69
- package/dist/commands/usage.d.ts +11 -0
- package/dist/commands/usage.js +60 -0
- package/dist/commands/utils.d.ts +6 -1
- package/dist/commands/utils.js +6 -1
- package/dist/commands/versions.d.ts +8 -1
- package/dist/commands/versions.js +4 -3
- package/dist/commands/view.d.ts +47 -2
- package/dist/commands/view.js +353 -20
- package/dist/index.d.ts +7 -2
- package/dist/index.js +205 -38
- package/dist/lib/acp/client.d.ts +31 -0
- package/dist/lib/acp/client.js +117 -0
- package/dist/lib/acp/harnesses.d.ts +26 -0
- package/dist/lib/acp/harnesses.js +65 -0
- package/dist/lib/acp/run.d.ts +18 -0
- package/dist/lib/acp/run.js +39 -0
- package/dist/lib/agents.d.ts +74 -2
- package/dist/lib/agents.js +207 -23
- package/dist/lib/artifact-actions.d.ts +8 -4
- package/dist/lib/artifact-actions.js +8 -6
- package/dist/lib/auto-pull-worker.d.ts +11 -0
- package/dist/lib/auto-pull-worker.js +121 -0
- package/dist/lib/auto-pull.d.ts +31 -0
- package/dist/lib/auto-pull.js +97 -0
- package/dist/lib/beta.d.ts +23 -0
- package/dist/lib/beta.js +90 -0
- package/dist/lib/capabilities.d.ts +29 -0
- package/dist/lib/capabilities.js +74 -0
- package/dist/lib/cloud/codex.d.ts +25 -0
- package/dist/lib/cloud/codex.js +250 -0
- package/dist/lib/cloud/factory.d.ts +31 -0
- package/dist/lib/cloud/factory.js +53 -0
- package/dist/lib/cloud/registry.d.ts +15 -0
- package/dist/lib/cloud/registry.js +67 -0
- package/dist/lib/cloud/rush.d.ts +75 -0
- package/dist/lib/cloud/rush.js +438 -0
- package/dist/lib/cloud/store.d.ts +22 -0
- package/dist/lib/cloud/store.js +115 -0
- package/dist/lib/cloud/stream.d.ts +23 -0
- package/dist/lib/cloud/stream.js +194 -0
- package/dist/lib/cloud/types.d.ts +205 -0
- package/dist/lib/cloud/types.js +34 -0
- package/dist/lib/command-skills.d.ts +20 -0
- package/dist/lib/command-skills.js +142 -0
- package/dist/lib/commands.d.ts +22 -2
- package/dist/lib/commands.js +51 -11
- package/dist/lib/convert.d.ts +10 -1
- package/dist/lib/convert.js +9 -1
- package/dist/lib/daemon.d.ts +21 -1
- package/dist/lib/daemon.js +97 -4
- package/dist/lib/drive-sync.d.ts +18 -1
- package/dist/lib/drive-sync.js +57 -15
- package/dist/lib/exec.d.ts +25 -5
- package/dist/lib/exec.js +72 -27
- package/dist/lib/fs-walk.d.ts +2 -0
- package/dist/lib/fs-walk.js +40 -0
- package/dist/lib/fuzzy.d.ts +53 -0
- package/dist/lib/fuzzy.js +72 -0
- package/dist/lib/gemini-settings.d.ts +4 -0
- package/dist/lib/gemini-settings.js +33 -0
- package/dist/lib/git.d.ts +12 -2
- package/dist/lib/git.js +17 -6
- package/dist/lib/help.d.ts +20 -1
- package/dist/lib/help.js +45 -6
- package/dist/lib/hooks/match.d.ts +32 -0
- package/dist/lib/hooks/match.js +120 -0
- package/dist/lib/hooks.d.ts +17 -4
- package/dist/lib/hooks.js +191 -21
- package/dist/lib/manifest.d.ts +6 -1
- package/dist/lib/manifest.js +15 -4
- package/dist/lib/markdown.d.ts +0 -1
- package/dist/lib/markdown.js +6 -1
- package/dist/lib/mcp.d.ts +0 -1
- package/dist/lib/mcp.js +29 -33
- package/dist/lib/memory-compile.d.ts +13 -3
- package/dist/lib/memory-compile.js +31 -9
- package/dist/lib/memory.d.ts +14 -7
- package/dist/lib/memory.js +67 -38
- package/dist/lib/migrate.d.ts +8 -0
- package/dist/lib/migrate.js +85 -0
- package/dist/lib/models.d.ts +25 -11
- package/dist/lib/models.js +405 -16
- package/dist/lib/onepassword.d.ts +63 -0
- package/dist/lib/onepassword.js +186 -0
- package/dist/lib/paths.d.ts +8 -0
- package/dist/lib/paths.js +20 -0
- package/dist/lib/permissions.d.ts +24 -2
- package/dist/lib/permissions.js +117 -48
- package/dist/lib/picker.d.ts +10 -1
- package/dist/lib/picker.js +15 -1
- package/dist/lib/plugins.d.ts +7 -1
- package/dist/lib/plugins.js +10 -1
- package/dist/lib/profiles-presets.d.ts +24 -0
- package/dist/lib/profiles-presets.js +103 -0
- package/dist/lib/profiles.d.ts +69 -0
- package/dist/lib/profiles.js +144 -0
- package/dist/lib/pty-client.d.ts +1 -1
- package/dist/lib/pty-client.js +0 -1
- package/dist/lib/pty-server.d.ts +16 -2
- package/dist/lib/pty-server.js +92 -3
- package/dist/lib/registry.d.ts +23 -3
- package/dist/lib/registry.js +153 -8
- package/dist/lib/resources.d.ts +28 -1
- package/dist/lib/resources.js +79 -1
- package/dist/lib/rotate.d.ts +89 -0
- package/dist/lib/rotate.js +327 -0
- package/dist/lib/routines.d.ts +29 -1
- package/dist/lib/routines.js +32 -5
- package/dist/lib/runner.d.ts +14 -1
- package/dist/lib/runner.js +22 -3
- package/dist/lib/sandbox.d.ts +16 -1
- package/dist/lib/sandbox.js +39 -16
- package/dist/lib/scheduler.d.ts +8 -1
- package/dist/lib/scheduler.js +8 -1
- package/dist/lib/secrets/AgentsKeychain.app/Contents/CodeResources +0 -0
- package/dist/lib/secrets/AgentsKeychain.app/Contents/Info.plist +22 -0
- package/dist/lib/secrets/AgentsKeychain.app/Contents/MacOS/AgentsKeychain +0 -0
- package/dist/lib/secrets/AgentsKeychain.app/Contents/_CodeSignature/CodeResources +123 -0
- package/dist/lib/secrets/AgentsKeychain.app/Contents/embedded.provisionprofile +0 -0
- package/dist/lib/secrets/bundles.d.ts +39 -0
- package/dist/lib/secrets/bundles.js +189 -0
- package/dist/lib/secrets/index.d.ts +55 -0
- package/dist/lib/secrets/index.js +211 -0
- package/dist/lib/secrets/profiles.d.ts +10 -0
- package/dist/lib/secrets/profiles.js +13 -0
- package/dist/lib/session/active.d.ts +43 -0
- package/dist/lib/session/active.js +392 -0
- package/dist/lib/session/artifacts.d.ts +16 -0
- package/dist/lib/session/artifacts.js +95 -0
- package/dist/lib/session/cloud.d.ts +30 -0
- package/dist/lib/session/cloud.js +121 -0
- package/dist/lib/session/db.d.ts +23 -2
- package/dist/lib/session/db.js +76 -12
- package/dist/lib/session/discover.d.ts +19 -4
- package/dist/lib/session/discover.js +344 -48
- package/dist/lib/session/parse.d.ts +28 -1
- package/dist/lib/session/parse.js +267 -9
- package/dist/lib/session/prompt.d.ts +9 -1
- package/dist/lib/session/prompt.js +17 -3
- package/dist/lib/session/render.d.ts +13 -1
- package/dist/lib/session/render.js +20 -1
- package/dist/lib/session/team-filter.d.ts +9 -1
- package/dist/lib/session/team-filter.js +11 -2
- package/dist/lib/session/types.d.ts +24 -2
- package/dist/lib/session/types.js +10 -2
- package/dist/lib/shims.d.ts +93 -5
- package/dist/lib/shims.js +380 -67
- package/dist/lib/skills.d.ts +27 -2
- package/dist/lib/skills.js +127 -65
- package/dist/lib/sqlite.d.ts +43 -0
- package/dist/lib/sqlite.js +94 -0
- package/dist/lib/state.d.ts +114 -22
- package/dist/lib/state.js +323 -138
- package/dist/lib/subagents.d.ts +9 -1
- package/dist/lib/subagents.js +70 -63
- package/dist/lib/sync-manifest.d.ts +81 -0
- package/dist/lib/sync-manifest.js +450 -0
- package/dist/lib/teams/agents.d.ts +103 -5
- package/dist/lib/teams/agents.js +414 -91
- package/dist/lib/teams/api.d.ts +26 -3
- package/dist/lib/teams/api.js +63 -3
- package/dist/lib/teams/debug.d.ts +6 -1
- package/dist/lib/teams/debug.js +6 -1
- package/dist/lib/teams/file_ops.d.ts +7 -1
- package/dist/lib/teams/file_ops.js +7 -1
- package/dist/lib/teams/index.d.ts +15 -0
- package/dist/lib/teams/index.js +14 -0
- package/dist/lib/teams/parsers.d.ts +4 -1
- package/dist/lib/teams/parsers.js +11 -1
- package/dist/lib/teams/persistence.d.ts +15 -1
- package/dist/lib/teams/persistence.js +102 -20
- package/dist/lib/teams/registry.d.ts +12 -1
- package/dist/lib/teams/registry.js +116 -33
- package/dist/lib/teams/summarizer.d.ts +15 -1
- package/dist/lib/teams/summarizer.js +14 -1
- package/dist/lib/teams/supervisor.d.ts +48 -0
- package/dist/lib/teams/supervisor.js +73 -0
- package/dist/lib/template.d.ts +8 -6
- package/dist/lib/template.js +8 -6
- package/dist/lib/types.d.ts +147 -8
- package/dist/lib/types.js +26 -3
- package/dist/lib/usage.d.ts +48 -1
- package/dist/lib/usage.js +97 -16
- package/dist/lib/version-duplicates.d.ts +21 -0
- package/dist/lib/version-duplicates.js +90 -0
- package/dist/lib/versions.d.ts +39 -4
- package/dist/lib/versions.js +401 -111
- package/package.json +33 -18
- package/scripts/postinstall.js +126 -30
- package/dist/commands/__tests__/sessions.test.d.ts +0 -2
- package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
- package/dist/commands/__tests__/sessions.test.js +0 -636
- package/dist/commands/__tests__/sessions.test.js.map +0 -1
- package/dist/commands/commands.d.ts.map +0 -1
- package/dist/commands/commands.js.map +0 -1
- package/dist/commands/daemon.d.ts.map +0 -1
- package/dist/commands/daemon.js.map +0 -1
- package/dist/commands/drive.d.ts.map +0 -1
- package/dist/commands/drive.js.map +0 -1
- package/dist/commands/exec.d.ts.map +0 -1
- package/dist/commands/exec.js.map +0 -1
- package/dist/commands/fork.d.ts.map +0 -1
- package/dist/commands/fork.js.map +0 -1
- package/dist/commands/hooks.d.ts.map +0 -1
- package/dist/commands/hooks.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/mcp.d.ts.map +0 -1
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/models.d.ts.map +0 -1
- package/dist/commands/models.js.map +0 -1
- package/dist/commands/packages.d.ts.map +0 -1
- package/dist/commands/packages.js.map +0 -1
- package/dist/commands/permissions.d.ts.map +0 -1
- package/dist/commands/permissions.js.map +0 -1
- package/dist/commands/plugins.d.ts.map +0 -1
- package/dist/commands/plugins.js.map +0 -1
- package/dist/commands/pty.d.ts.map +0 -1
- package/dist/commands/pty.js.map +0 -1
- package/dist/commands/pull.d.ts.map +0 -1
- package/dist/commands/pull.js.map +0 -1
- package/dist/commands/push.d.ts +0 -3
- package/dist/commands/push.d.ts.map +0 -1
- package/dist/commands/push.js +0 -180
- package/dist/commands/push.js.map +0 -1
- package/dist/commands/refresh-memory.d.ts.map +0 -1
- package/dist/commands/refresh-memory.js.map +0 -1
- package/dist/commands/resource-view.d.ts.map +0 -1
- package/dist/commands/resource-view.js.map +0 -1
- package/dist/commands/routines.d.ts.map +0 -1
- package/dist/commands/routines.js.map +0 -1
- package/dist/commands/rules.d.ts.map +0 -1
- package/dist/commands/rules.js.map +0 -1
- package/dist/commands/sessions-picker.d.ts.map +0 -1
- package/dist/commands/sessions-picker.js.map +0 -1
- package/dist/commands/sessions.d.ts.map +0 -1
- package/dist/commands/sessions.js.map +0 -1
- package/dist/commands/skills.d.ts.map +0 -1
- package/dist/commands/skills.js.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/subagents.d.ts.map +0 -1
- package/dist/commands/subagents.js.map +0 -1
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/teams-picker.d.ts.map +0 -1
- package/dist/commands/teams-picker.js.map +0 -1
- package/dist/commands/teams.d.ts.map +0 -1
- package/dist/commands/teams.js.map +0 -1
- package/dist/commands/utils.d.ts.map +0 -1
- package/dist/commands/utils.js.map +0 -1
- package/dist/commands/versions.d.ts.map +0 -1
- package/dist/commands/versions.js.map +0 -1
- package/dist/commands/view.d.ts.map +0 -1
- package/dist/commands/view.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
- package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
- package/dist/lib/__tests__/bugfixes.test.js +0 -192
- package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
- package/dist/lib/__tests__/exec.test.d.ts +0 -2
- package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
- package/dist/lib/__tests__/exec.test.js +0 -446
- package/dist/lib/__tests__/exec.test.js.map +0 -1
- package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
- package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
- package/dist/lib/__tests__/git-sync.test.js +0 -138
- package/dist/lib/__tests__/git-sync.test.js.map +0 -1
- package/dist/lib/__tests__/hooks.test.d.ts +0 -2
- package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
- package/dist/lib/__tests__/hooks.test.js +0 -203
- package/dist/lib/__tests__/hooks.test.js.map +0 -1
- package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
- package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
- package/dist/lib/__tests__/memory-compile.test.js +0 -95
- package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
- package/dist/lib/__tests__/models.test.d.ts +0 -2
- package/dist/lib/__tests__/models.test.d.ts.map +0 -1
- package/dist/lib/__tests__/models.test.js +0 -184
- package/dist/lib/__tests__/models.test.js.map +0 -1
- package/dist/lib/__tests__/usage.test.d.ts +0 -2
- package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
- package/dist/lib/__tests__/usage.test.js +0 -218
- package/dist/lib/__tests__/usage.test.js.map +0 -1
- package/dist/lib/agents.d.ts.map +0 -1
- package/dist/lib/agents.js.map +0 -1
- package/dist/lib/artifact-actions.d.ts.map +0 -1
- package/dist/lib/artifact-actions.js.map +0 -1
- package/dist/lib/commands.d.ts.map +0 -1
- package/dist/lib/commands.js.map +0 -1
- package/dist/lib/convert.d.ts.map +0 -1
- package/dist/lib/convert.js.map +0 -1
- package/dist/lib/daemon.d.ts.map +0 -1
- package/dist/lib/daemon.js.map +0 -1
- package/dist/lib/drive-sync.d.ts.map +0 -1
- package/dist/lib/drive-sync.js.map +0 -1
- package/dist/lib/exec.d.ts.map +0 -1
- package/dist/lib/exec.js.map +0 -1
- package/dist/lib/factory.d.ts +0 -57
- package/dist/lib/factory.d.ts.map +0 -1
- package/dist/lib/factory.js +0 -110
- package/dist/lib/factory.js.map +0 -1
- package/dist/lib/git.d.ts.map +0 -1
- package/dist/lib/git.js.map +0 -1
- package/dist/lib/help.d.ts.map +0 -1
- package/dist/lib/help.js.map +0 -1
- package/dist/lib/hooks.d.ts.map +0 -1
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/manifest.d.ts.map +0 -1
- package/dist/lib/manifest.js.map +0 -1
- package/dist/lib/markdown.d.ts.map +0 -1
- package/dist/lib/markdown.js.map +0 -1
- package/dist/lib/mcp.d.ts.map +0 -1
- package/dist/lib/mcp.js.map +0 -1
- package/dist/lib/memory-compile.d.ts.map +0 -1
- package/dist/lib/memory-compile.js.map +0 -1
- package/dist/lib/memory.d.ts.map +0 -1
- package/dist/lib/memory.js.map +0 -1
- package/dist/lib/models.d.ts.map +0 -1
- package/dist/lib/models.js.map +0 -1
- package/dist/lib/permissions.d.ts.map +0 -1
- package/dist/lib/permissions.js.map +0 -1
- package/dist/lib/picker.d.ts.map +0 -1
- package/dist/lib/picker.js.map +0 -1
- package/dist/lib/plugins.d.ts.map +0 -1
- package/dist/lib/plugins.js.map +0 -1
- package/dist/lib/pty-client.d.ts.map +0 -1
- package/dist/lib/pty-client.js.map +0 -1
- package/dist/lib/pty-server.d.ts.map +0 -1
- package/dist/lib/pty-server.js.map +0 -1
- package/dist/lib/registry.d.ts.map +0 -1
- package/dist/lib/registry.js.map +0 -1
- package/dist/lib/resources.d.ts.map +0 -1
- package/dist/lib/resources.js.map +0 -1
- package/dist/lib/routines.d.ts.map +0 -1
- package/dist/lib/routines.js.map +0 -1
- package/dist/lib/runner.d.ts.map +0 -1
- package/dist/lib/runner.js.map +0 -1
- package/dist/lib/sandbox.d.ts.map +0 -1
- package/dist/lib/sandbox.js.map +0 -1
- package/dist/lib/scheduler.d.ts.map +0 -1
- package/dist/lib/scheduler.js.map +0 -1
- package/dist/lib/session/__tests__/db.test.d.ts +0 -2
- package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/db.test.js +0 -54
- package/dist/lib/session/__tests__/db.test.js.map +0 -1
- package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
- package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/discover.test.js +0 -63
- package/dist/lib/session/__tests__/discover.test.js.map +0 -1
- package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
- package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/prompt.test.js +0 -44
- package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
- package/dist/lib/session/__tests__/render.test.d.ts +0 -2
- package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/render.test.js +0 -602
- package/dist/lib/session/__tests__/render.test.js.map +0 -1
- package/dist/lib/session/db.d.ts.map +0 -1
- package/dist/lib/session/db.js.map +0 -1
- package/dist/lib/session/discover.d.ts.map +0 -1
- package/dist/lib/session/discover.js.map +0 -1
- package/dist/lib/session/parse.d.ts.map +0 -1
- package/dist/lib/session/parse.js.map +0 -1
- package/dist/lib/session/prompt.d.ts.map +0 -1
- package/dist/lib/session/prompt.js.map +0 -1
- package/dist/lib/session/prompt.test.d.ts +0 -2
- package/dist/lib/session/prompt.test.d.ts.map +0 -1
- package/dist/lib/session/prompt.test.js +0 -57
- package/dist/lib/session/prompt.test.js.map +0 -1
- package/dist/lib/session/render.d.ts.map +0 -1
- package/dist/lib/session/render.js.map +0 -1
- package/dist/lib/session/team-filter.d.ts.map +0 -1
- package/dist/lib/session/team-filter.js.map +0 -1
- package/dist/lib/session/team-filter.test.d.ts +0 -2
- package/dist/lib/session/team-filter.test.d.ts.map +0 -1
- package/dist/lib/session/team-filter.test.js +0 -157
- package/dist/lib/session/team-filter.test.js.map +0 -1
- package/dist/lib/session/types.d.ts.map +0 -1
- package/dist/lib/session/types.js.map +0 -1
- package/dist/lib/shims.d.ts.map +0 -1
- package/dist/lib/shims.js.map +0 -1
- package/dist/lib/skills.d.ts.map +0 -1
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/state.d.ts.map +0 -1
- package/dist/lib/state.js.map +0 -1
- package/dist/lib/subagents.d.ts.map +0 -1
- package/dist/lib/subagents.js.map +0 -1
- package/dist/lib/teams/agents.d.ts.map +0 -1
- package/dist/lib/teams/agents.js.map +0 -1
- package/dist/lib/teams/api.d.ts.map +0 -1
- package/dist/lib/teams/api.js.map +0 -1
- package/dist/lib/teams/cloud.d.ts +0 -11
- package/dist/lib/teams/cloud.d.ts.map +0 -1
- package/dist/lib/teams/cloud.js +0 -169
- package/dist/lib/teams/cloud.js.map +0 -1
- package/dist/lib/teams/debug.d.ts.map +0 -1
- package/dist/lib/teams/debug.js.map +0 -1
- package/dist/lib/teams/file_ops.d.ts.map +0 -1
- package/dist/lib/teams/file_ops.js.map +0 -1
- package/dist/lib/teams/parsers.d.ts.map +0 -1
- package/dist/lib/teams/parsers.js.map +0 -1
- package/dist/lib/teams/persistence.d.ts.map +0 -1
- package/dist/lib/teams/persistence.js.map +0 -1
- package/dist/lib/teams/ralph.d.ts +0 -8
- package/dist/lib/teams/ralph.d.ts.map +0 -1
- package/dist/lib/teams/ralph.js +0 -59
- package/dist/lib/teams/ralph.js.map +0 -1
- package/dist/lib/teams/registry.d.ts.map +0 -1
- package/dist/lib/teams/registry.js.map +0 -1
- package/dist/lib/teams/summarizer.d.ts.map +0 -1
- package/dist/lib/teams/summarizer.js.map +0 -1
- package/dist/lib/template.d.ts.map +0 -1
- package/dist/lib/template.js.map +0 -1
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/usage.d.ts.map +0 -1
- package/dist/lib/usage.js.map +0 -1
- package/dist/lib/versions.d.ts.map +0 -1
- package/dist/lib/versions.js.map +0 -1
- package/scripts/rebuild-sqlite.sh +0 -46
package/dist/lib/agents.js
CHANGED
|
@@ -1,17 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Core agent configuration and detection module.
|
|
3
|
+
*
|
|
4
|
+
* Defines the canonical registry of all supported AI coding agents (Claude, Codex,
|
|
5
|
+
* Gemini, Cursor, OpenCode, OpenClaw, Copilot, Amp, Kiro, Goose, Roo) with their
|
|
6
|
+
* CLI commands, config paths, capability flags, and MCP integration points.
|
|
7
|
+
*
|
|
8
|
+
* Provides functions for detecting installed CLIs, resolving version-managed binaries,
|
|
9
|
+
* reading account/auth info, and managing MCP server registrations across agents.
|
|
10
|
+
*/
|
|
11
|
+
import { execFile } from 'child_process';
|
|
2
12
|
import { promisify } from 'util';
|
|
3
13
|
import * as fs from 'fs';
|
|
4
14
|
import * as path from 'path';
|
|
5
15
|
import * as os from 'os';
|
|
6
16
|
import * as TOML from 'smol-toml';
|
|
7
17
|
import chalk from 'chalk';
|
|
8
|
-
import { walkForFiles } from './
|
|
9
|
-
import { getVersionsDir, getShimsDir } from './state.js';
|
|
18
|
+
import { walkForFiles } from './fs-walk.js';
|
|
19
|
+
import { getVersionsDir, getShimsDir, getAgentsDir } from './state.js';
|
|
10
20
|
import { resolveVersion, getVersionHomePath, getBinaryPath } from './versions.js';
|
|
11
|
-
|
|
21
|
+
import { loadClaudeOauth } from './usage.js';
|
|
22
|
+
const execFileAsync = promisify(execFile);
|
|
12
23
|
const HOME = os.homedir();
|
|
24
|
+
/**
|
|
25
|
+
* Minimum Codex CLI version that supports hooks.
|
|
26
|
+
* Mirrored on `AGENTS.codex.capabilities.hooks.since` -- kept exported for
|
|
27
|
+
* legacy import sites that haven't migrated to `supports()` yet.
|
|
28
|
+
*/
|
|
13
29
|
export const CODEX_HOOKS_MIN_VERSION = '0.116.0';
|
|
14
|
-
|
|
30
|
+
/** Minimum Gemini CLI version that supports the hooks system (v0.26.0, Jan 2026). */
|
|
31
|
+
export const GEMINI_HOOKS_MIN_VERSION = '0.26.0';
|
|
32
|
+
const CLI_VERSION_CACHE_PATH = path.join(getAgentsDir(), '.cli-version-cache.json');
|
|
15
33
|
let cliVersionCache = null;
|
|
16
34
|
function loadCliVersionCache() {
|
|
17
35
|
if (cliVersionCache)
|
|
@@ -38,7 +56,7 @@ function saveCliVersionCache() {
|
|
|
38
56
|
/* best-effort cache persist */
|
|
39
57
|
}
|
|
40
58
|
}
|
|
41
|
-
/** Synchronous PATH search
|
|
59
|
+
/** Synchronous PATH search -- no subprocess. Returns first matching binary path. */
|
|
42
60
|
function findInPath(command) {
|
|
43
61
|
const pathEnv = process.env.PATH || '';
|
|
44
62
|
const pathExt = process.platform === 'win32' ? (process.env.PATHEXT || '').split(';') : [''];
|
|
@@ -59,6 +77,67 @@ function findInPath(command) {
|
|
|
59
77
|
}
|
|
60
78
|
return null;
|
|
61
79
|
}
|
|
80
|
+
function splitCommandLine(command) {
|
|
81
|
+
const args = [];
|
|
82
|
+
let current = '';
|
|
83
|
+
let quote = null;
|
|
84
|
+
let tokenStarted = false;
|
|
85
|
+
for (let i = 0; i < command.length; i++) {
|
|
86
|
+
const char = command[i];
|
|
87
|
+
if (quote) {
|
|
88
|
+
if (char === quote) {
|
|
89
|
+
quote = null;
|
|
90
|
+
tokenStarted = true;
|
|
91
|
+
}
|
|
92
|
+
else if (char === '\\' && quote === '"' && i + 1 < command.length) {
|
|
93
|
+
current += command[++i];
|
|
94
|
+
tokenStarted = true;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
current += char;
|
|
98
|
+
tokenStarted = true;
|
|
99
|
+
}
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (char === '"' || char === "'") {
|
|
103
|
+
quote = char;
|
|
104
|
+
tokenStarted = true;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (/\s/.test(char)) {
|
|
108
|
+
if (tokenStarted) {
|
|
109
|
+
args.push(current);
|
|
110
|
+
current = '';
|
|
111
|
+
tokenStarted = false;
|
|
112
|
+
}
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (char === '\\' && i + 1 < command.length) {
|
|
116
|
+
current += command[++i];
|
|
117
|
+
tokenStarted = true;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
current += char;
|
|
121
|
+
tokenStarted = true;
|
|
122
|
+
}
|
|
123
|
+
if (quote) {
|
|
124
|
+
throw new Error('Unterminated quote in MCP command');
|
|
125
|
+
}
|
|
126
|
+
if (tokenStarted) {
|
|
127
|
+
args.push(current);
|
|
128
|
+
}
|
|
129
|
+
if (args.length === 0) {
|
|
130
|
+
throw new Error('MCP command is required');
|
|
131
|
+
}
|
|
132
|
+
return args;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Master registry of all supported agents keyed by AgentId.
|
|
136
|
+
*
|
|
137
|
+
* Each entry defines the agent's CLI command, npm package, config directory layout,
|
|
138
|
+
* instructions file name, slash-command format, and capability flags. This is the
|
|
139
|
+
* single source of truth for agent metadata consumed throughout the codebase.
|
|
140
|
+
*/
|
|
62
141
|
export const AGENTS = {
|
|
63
142
|
claude: {
|
|
64
143
|
id: 'claude',
|
|
@@ -78,6 +157,7 @@ export const AGENTS = {
|
|
|
78
157
|
supportsHooks: true,
|
|
79
158
|
capabilities: { hooks: true, mcp: true, allowlist: true, skills: true, commands: true, plugins: true, memoryImports: true },
|
|
80
159
|
},
|
|
160
|
+
// codex hooks: gated to >= 0.116.0 (introduced [features] codex_hooks flag).
|
|
81
161
|
codex: {
|
|
82
162
|
id: 'codex',
|
|
83
163
|
name: 'Codex',
|
|
@@ -93,7 +173,7 @@ export const AGENTS = {
|
|
|
93
173
|
format: 'markdown',
|
|
94
174
|
variableSyntax: '$ARGUMENTS',
|
|
95
175
|
supportsHooks: true,
|
|
96
|
-
capabilities: { hooks:
|
|
176
|
+
capabilities: { hooks: { since: '0.116.0' }, mcp: true, allowlist: false, skills: true, commands: { until: '0.117.0' }, plugins: false },
|
|
97
177
|
},
|
|
98
178
|
gemini: {
|
|
99
179
|
id: 'gemini',
|
|
@@ -111,7 +191,8 @@ export const AGENTS = {
|
|
|
111
191
|
variableSyntax: '{{args}}',
|
|
112
192
|
supportsHooks: true,
|
|
113
193
|
nativeAgentsSkillsDir: true,
|
|
114
|
-
|
|
194
|
+
// gemini hooks: shipped in v0.26.0 (Jan 2026); older binaries silently ignore the `hooks` key.
|
|
195
|
+
capabilities: { hooks: { since: '0.26.0' }, mcp: true, allowlist: false, skills: true, commands: true, plugins: false, memoryImports: true },
|
|
115
196
|
},
|
|
116
197
|
cursor: {
|
|
117
198
|
id: 'cursor',
|
|
@@ -254,12 +335,18 @@ export const AGENTS = {
|
|
|
254
335
|
capabilities: { hooks: false, mcp: true, allowlist: false, skills: true, commands: true, plugins: false },
|
|
255
336
|
},
|
|
256
337
|
};
|
|
338
|
+
/** All registered agent IDs derived from the AGENTS registry. */
|
|
257
339
|
export const ALL_AGENT_IDS = Object.keys(AGENTS);
|
|
340
|
+
/** Agents that support MCP (Model Context Protocol) server integration. */
|
|
258
341
|
export const MCP_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.mcp);
|
|
342
|
+
/** Agents that support skills (SKILL.md + rules/ bundles). */
|
|
259
343
|
export const SKILLS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.skills);
|
|
344
|
+
/** Agents that support file-based slash commands. */
|
|
260
345
|
export const COMMANDS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.commands);
|
|
261
|
-
|
|
262
|
-
export const
|
|
346
|
+
/** Agents that support event hooks (pre/post lifecycle callbacks). */
|
|
347
|
+
export const HOOKS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.hooks !== false);
|
|
348
|
+
/** Agents that support the plugin system. */
|
|
349
|
+
export const PLUGINS_CAPABLE_AGENTS = ALL_AGENT_IDS.filter((id) => AGENTS[id].capabilities.plugins !== false);
|
|
263
350
|
/** Get the chalk color function for an agent. Works for any AgentId or SessionAgentId. */
|
|
264
351
|
export function colorAgent(agentId) {
|
|
265
352
|
const agent = AGENTS[agentId];
|
|
@@ -274,10 +361,12 @@ export function agentLabel(agentId) {
|
|
|
274
361
|
return agentId;
|
|
275
362
|
return chalk[agent.color](agent.name);
|
|
276
363
|
}
|
|
364
|
+
/** Check whether the given agent's CLI binary is present on PATH. */
|
|
277
365
|
export async function isCliInstalled(agentId) {
|
|
278
366
|
const agent = AGENTS[agentId];
|
|
279
367
|
return findInPath(agent.cliCommand) !== null;
|
|
280
368
|
}
|
|
369
|
+
/** Return the installed CLI version for the given agent, or null if not found. */
|
|
281
370
|
export async function getCliVersion(agentId) {
|
|
282
371
|
const agent = AGENTS[agentId];
|
|
283
372
|
const binaryPath = findInPath(agent.cliCommand);
|
|
@@ -285,6 +374,7 @@ export async function getCliVersion(agentId) {
|
|
|
285
374
|
return null;
|
|
286
375
|
return getCachedVersionForBinary(agentId, binaryPath);
|
|
287
376
|
}
|
|
377
|
+
/** Return the absolute path to the agent's CLI binary on PATH, or null. */
|
|
288
378
|
export async function getCliPath(agentId) {
|
|
289
379
|
return findInPath(AGENTS[agentId].cliCommand);
|
|
290
380
|
}
|
|
@@ -306,7 +396,7 @@ async function getCachedVersionForBinary(agentId, binaryPath) {
|
|
|
306
396
|
const agent = AGENTS[agentId];
|
|
307
397
|
let version = null;
|
|
308
398
|
try {
|
|
309
|
-
const { stdout } = await
|
|
399
|
+
const { stdout } = await execFileAsync(agent.cliCommand, ['--version'], { timeout: 3000 });
|
|
310
400
|
if (agentId === 'openclaw') {
|
|
311
401
|
const match = stdout.match(/openclaw\/(\d+\.\d+\.\d+)/);
|
|
312
402
|
version = match ? match[1] : stdout.trim();
|
|
@@ -324,6 +414,11 @@ async function getCachedVersionForBinary(agentId, binaryPath) {
|
|
|
324
414
|
saveCliVersionCache();
|
|
325
415
|
return version;
|
|
326
416
|
}
|
|
417
|
+
/**
|
|
418
|
+
* Resolve the full CLI state for an agent: whether it is installed, its version,
|
|
419
|
+
* and the path to the binary. Checks version-managed installs first, then falls
|
|
420
|
+
* back to a plain PATH lookup.
|
|
421
|
+
*/
|
|
327
422
|
export async function getCliState(agentId) {
|
|
328
423
|
// Fast path: if version-managed, derive state from filesystem (no subprocesses)
|
|
329
424
|
const agent = AGENTS[agentId];
|
|
@@ -369,6 +464,7 @@ export async function getCliState(agentId) {
|
|
|
369
464
|
path: binaryPath,
|
|
370
465
|
};
|
|
371
466
|
}
|
|
467
|
+
/** Resolve CLI state for all registered agents in parallel. */
|
|
372
468
|
export async function getAllCliStates() {
|
|
373
469
|
const states = {};
|
|
374
470
|
const results = await Promise.all(ALL_AGENT_IDS.map(async (agentId) => ({
|
|
@@ -380,26 +476,56 @@ export async function getAllCliStates() {
|
|
|
380
476
|
}
|
|
381
477
|
return states;
|
|
382
478
|
}
|
|
479
|
+
/** Check whether the agent's config directory exists on disk. */
|
|
383
480
|
export function isConfigured(agentId) {
|
|
384
481
|
const agent = AGENTS[agentId];
|
|
385
482
|
return fs.existsSync(agent.configDir);
|
|
386
483
|
}
|
|
484
|
+
/**
|
|
485
|
+
* Detect existing agent installations that are NOT yet managed by agents-cli.
|
|
486
|
+
* Returns agents whose config dir exists as a real directory (not a symlink).
|
|
487
|
+
*/
|
|
488
|
+
export async function getUnmanagedAgentInstalls() {
|
|
489
|
+
const unmanaged = [];
|
|
490
|
+
const candidates = ['claude', 'codex', 'gemini'];
|
|
491
|
+
for (const agentId of candidates) {
|
|
492
|
+
const agent = AGENTS[agentId];
|
|
493
|
+
try {
|
|
494
|
+
const stat = fs.lstatSync(agent.configDir);
|
|
495
|
+
if (stat.isDirectory() && !stat.isSymbolicLink()) {
|
|
496
|
+
const version = await getCliVersion(agentId);
|
|
497
|
+
unmanaged.push({ agentId, configDir: agent.configDir, version });
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
catch {
|
|
501
|
+
// Config dir doesn't exist
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
return unmanaged;
|
|
505
|
+
}
|
|
506
|
+
/** Create the agent's slash-commands directory if it does not exist. */
|
|
387
507
|
export function ensureCommandsDir(agentId) {
|
|
388
508
|
const agent = AGENTS[agentId];
|
|
389
509
|
if (!fs.existsSync(agent.commandsDir)) {
|
|
390
510
|
fs.mkdirSync(agent.commandsDir, { recursive: true });
|
|
391
511
|
}
|
|
392
512
|
}
|
|
513
|
+
/** Create the agent's skills directory if it does not exist. */
|
|
393
514
|
export function ensureSkillsDir(agentId) {
|
|
394
515
|
const agent = AGENTS[agentId];
|
|
395
516
|
if (!fs.existsSync(agent.skillsDir)) {
|
|
396
517
|
fs.mkdirSync(agent.skillsDir, { recursive: true });
|
|
397
518
|
}
|
|
398
519
|
}
|
|
520
|
+
/** Return the email address associated with the agent's auth config, or null. */
|
|
399
521
|
export async function getAccountEmail(agentId, home) {
|
|
400
522
|
const info = await getAccountInfo(agentId, home);
|
|
401
523
|
return info.email;
|
|
402
524
|
}
|
|
525
|
+
/**
|
|
526
|
+
* Extract full account information (identity, plan, usage status, credits) from
|
|
527
|
+
* the agent's local auth/config files. Supports Claude, Codex, and Gemini.
|
|
528
|
+
*/
|
|
403
529
|
export async function getAccountInfo(agentId, home) {
|
|
404
530
|
const base = home || os.homedir();
|
|
405
531
|
const empty = {
|
|
@@ -441,10 +567,17 @@ export async function getAccountInfo(agentId, home) {
|
|
|
441
567
|
]);
|
|
442
568
|
const usageKey = buildIdentityKey(agentId, [['org', organizationId]]);
|
|
443
569
|
let plan = null;
|
|
444
|
-
|
|
570
|
+
const keychainOauth = await loadClaudeOauth(home);
|
|
571
|
+
if (keychainOauth?.subscriptionType) {
|
|
572
|
+
plan = keychainOauth.subscriptionType.charAt(0).toUpperCase()
|
|
573
|
+
+ keychainOauth.subscriptionType.slice(1);
|
|
574
|
+
}
|
|
575
|
+
else if (oa?.billingType === 'stripe_subscription') {
|
|
445
576
|
plan = 'Pro';
|
|
446
|
-
|
|
577
|
+
}
|
|
578
|
+
else if (oa?.billingType) {
|
|
447
579
|
plan = oa.billingType;
|
|
580
|
+
}
|
|
448
581
|
let usageStatus = null;
|
|
449
582
|
const reason = data.cachedExtraUsageDisabledReason;
|
|
450
583
|
if (reason === 'out_of_credits')
|
|
@@ -529,6 +662,7 @@ export async function getAccountInfo(agentId, home) {
|
|
|
529
662
|
return { ...empty, lastActive };
|
|
530
663
|
}
|
|
531
664
|
}
|
|
665
|
+
/** Determine when the agent was last used by checking session file mtimes, falling back to config mtime. */
|
|
532
666
|
function resolveLastActive(agentId, base, configPath) {
|
|
533
667
|
const sessionDir = getSessionDir(agentId, base);
|
|
534
668
|
const sessionExt = getSessionExtension(agentId);
|
|
@@ -547,6 +681,7 @@ function resolveLastActive(agentId, base, configPath) {
|
|
|
547
681
|
return null;
|
|
548
682
|
}
|
|
549
683
|
}
|
|
684
|
+
/** Return the root directory where the agent stores session files, or null if unknown. */
|
|
550
685
|
function getSessionDir(agentId, base) {
|
|
551
686
|
switch (agentId) {
|
|
552
687
|
case 'claude':
|
|
@@ -559,6 +694,7 @@ function getSessionDir(agentId, base) {
|
|
|
559
694
|
return null;
|
|
560
695
|
}
|
|
561
696
|
}
|
|
697
|
+
/** Return the file extension used for session files by the given agent. */
|
|
562
698
|
function getSessionExtension(agentId) {
|
|
563
699
|
switch (agentId) {
|
|
564
700
|
case 'claude':
|
|
@@ -570,6 +706,36 @@ function getSessionExtension(agentId) {
|
|
|
570
706
|
return null;
|
|
571
707
|
}
|
|
572
708
|
}
|
|
709
|
+
/**
|
|
710
|
+
* Quick count of session files for an agent (without full DB scan).
|
|
711
|
+
* Used during init to show approximate session count to user.
|
|
712
|
+
*/
|
|
713
|
+
export function countSessionFiles(agentId) {
|
|
714
|
+
const sessionDir = getSessionDir(agentId, HOME);
|
|
715
|
+
const ext = getSessionExtension(agentId);
|
|
716
|
+
if (!sessionDir || !ext || !fs.existsSync(sessionDir))
|
|
717
|
+
return 0;
|
|
718
|
+
let count = 0;
|
|
719
|
+
const walk = (dir) => {
|
|
720
|
+
try {
|
|
721
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
722
|
+
for (const entry of entries) {
|
|
723
|
+
if (entry.isDirectory()) {
|
|
724
|
+
walk(path.join(dir, entry.name));
|
|
725
|
+
}
|
|
726
|
+
else if (entry.isFile() && entry.name.endsWith(ext)) {
|
|
727
|
+
count++;
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
catch {
|
|
732
|
+
// Permission denied or other error
|
|
733
|
+
}
|
|
734
|
+
};
|
|
735
|
+
walk(sessionDir);
|
|
736
|
+
return count;
|
|
737
|
+
}
|
|
738
|
+
/** Walk a directory for files matching the extension and return the mtime of the most recent one. */
|
|
573
739
|
function getLatestFileMtime(dir, ext) {
|
|
574
740
|
if (!fs.existsSync(dir))
|
|
575
741
|
return null;
|
|
@@ -583,6 +749,7 @@ function getLatestFileMtime(dir, ext) {
|
|
|
583
749
|
return null;
|
|
584
750
|
}
|
|
585
751
|
}
|
|
752
|
+
/** Decode the payload section of a JWT token without verifying its signature. */
|
|
586
753
|
function decodeJwtPayload(token) {
|
|
587
754
|
const payload = token.split('.')[1];
|
|
588
755
|
if (!payload)
|
|
@@ -594,6 +761,7 @@ function decodeJwtPayload(token) {
|
|
|
594
761
|
return null;
|
|
595
762
|
}
|
|
596
763
|
}
|
|
764
|
+
/** Extract the default organization ID from a Codex/OpenAI auth claim. */
|
|
597
765
|
function getCodexDefaultOrgId(authClaim) {
|
|
598
766
|
const organizations = authClaim?.organizations;
|
|
599
767
|
if (!Array.isArray(organizations))
|
|
@@ -601,12 +769,14 @@ function getCodexDefaultOrgId(authClaim) {
|
|
|
601
769
|
const first = organizations[0];
|
|
602
770
|
return typeof first?.id === 'string' ? first.id : null;
|
|
603
771
|
}
|
|
772
|
+
/** Trim and normalize an identity string, returning null for empty or non-string values. */
|
|
604
773
|
function normalizeIdentityPart(value) {
|
|
605
774
|
if (typeof value !== 'string')
|
|
606
775
|
return null;
|
|
607
776
|
const trimmed = value.trim();
|
|
608
777
|
return trimmed || null;
|
|
609
778
|
}
|
|
779
|
+
/** Build a composite identity key like "claude:account=abc:org=xyz" from labeled parts. */
|
|
610
780
|
function buildIdentityKey(agentId, parts) {
|
|
611
781
|
const encoded = parts
|
|
612
782
|
.filter(([, value]) => value)
|
|
@@ -615,13 +785,14 @@ function buildIdentityKey(agentId, parts) {
|
|
|
615
785
|
return null;
|
|
616
786
|
return `${agentId}:${encoded.join(':')}`;
|
|
617
787
|
}
|
|
788
|
+
/** Check whether a named MCP server is registered with the agent's CLI. */
|
|
618
789
|
export async function isMcpRegistered(agentId, mcpName) {
|
|
619
790
|
const agent = AGENTS[agentId];
|
|
620
791
|
if (!agent.capabilities.mcp || !(await isCliInstalled(agentId))) {
|
|
621
792
|
return false;
|
|
622
793
|
}
|
|
623
794
|
try {
|
|
624
|
-
const { stdout } = await
|
|
795
|
+
const { stdout } = await execFileAsync(agent.cliCommand, ['mcp', 'list']);
|
|
625
796
|
return stdout.toLowerCase().includes(mcpName.toLowerCase());
|
|
626
797
|
}
|
|
627
798
|
catch {
|
|
@@ -629,6 +800,7 @@ export async function isMcpRegistered(agentId, mcpName) {
|
|
|
629
800
|
return false;
|
|
630
801
|
}
|
|
631
802
|
}
|
|
803
|
+
/** Register an MCP server with an agent's CLI via `mcp add`. */
|
|
632
804
|
export async function registerMcp(agentId, name, command, scope = 'user', transport = 'stdio', options) {
|
|
633
805
|
const agent = AGENTS[agentId];
|
|
634
806
|
if (!agent.capabilities.mcp) {
|
|
@@ -640,22 +812,24 @@ export async function registerMcp(agentId, name, command, scope = 'user', transp
|
|
|
640
812
|
try {
|
|
641
813
|
// Use explicit binary path when provided (bypasses shim for version-managed agents)
|
|
642
814
|
const bin = options?.binary || agent.cliCommand;
|
|
643
|
-
let
|
|
815
|
+
let args;
|
|
816
|
+
const commandArgs = splitCommandLine(command);
|
|
644
817
|
if (agentId === 'claude') {
|
|
645
|
-
|
|
818
|
+
args = ['mcp', 'add', '--transport', transport, '--scope', scope, name, '--', ...commandArgs];
|
|
646
819
|
}
|
|
647
820
|
else {
|
|
648
|
-
|
|
821
|
+
args = ['mcp', 'add', name, '--', ...commandArgs];
|
|
649
822
|
}
|
|
650
823
|
// When home is specified, override HOME so MCP config writes to the version's config dir
|
|
651
824
|
const env = options?.home ? { ...process.env, HOME: options.home } : undefined;
|
|
652
|
-
await
|
|
825
|
+
await execFileAsync(bin, args, env ? { env } : undefined);
|
|
653
826
|
return { success: true };
|
|
654
827
|
}
|
|
655
828
|
catch (err) {
|
|
656
829
|
return { success: false, error: err.message };
|
|
657
830
|
}
|
|
658
831
|
}
|
|
832
|
+
/** Unregister (remove) a named MCP server from an agent's CLI config. */
|
|
659
833
|
export async function unregisterMcp(agentId, name, options) {
|
|
660
834
|
const agent = AGENTS[agentId];
|
|
661
835
|
if (!agent.capabilities.mcp) {
|
|
@@ -667,13 +841,17 @@ export async function unregisterMcp(agentId, name, options) {
|
|
|
667
841
|
try {
|
|
668
842
|
const bin = options?.binary || agent.cliCommand;
|
|
669
843
|
const env = options?.home ? { ...process.env, HOME: options.home } : undefined;
|
|
670
|
-
await
|
|
844
|
+
await execFileAsync(bin, ['mcp', 'remove', name], env ? { env } : undefined);
|
|
671
845
|
return { success: true };
|
|
672
846
|
}
|
|
673
847
|
catch (err) {
|
|
674
848
|
return { success: false, error: err.message };
|
|
675
849
|
}
|
|
676
850
|
}
|
|
851
|
+
/**
|
|
852
|
+
* Register an MCP server across multiple agent targets, including both direct
|
|
853
|
+
* (non-version-managed) agents and specific version-managed installs.
|
|
854
|
+
*/
|
|
677
855
|
export async function registerMcpToTargets(targets, name, command, scope = 'user', transport = 'stdio') {
|
|
678
856
|
const results = [];
|
|
679
857
|
for (const agentId of targets.directAgents) {
|
|
@@ -691,6 +869,10 @@ export async function registerMcpToTargets(targets, name, command, scope = 'user
|
|
|
691
869
|
}
|
|
692
870
|
return results;
|
|
693
871
|
}
|
|
872
|
+
/**
|
|
873
|
+
* Unregister an MCP server from multiple agent targets, including both direct
|
|
874
|
+
* agents and specific version-managed installs.
|
|
875
|
+
*/
|
|
694
876
|
export async function unregisterMcpFromTargets(targets, name) {
|
|
695
877
|
const results = [];
|
|
696
878
|
for (const agentId of targets.directAgents) {
|
|
@@ -710,8 +892,8 @@ export async function unregisterMcpFromTargets(targets, name) {
|
|
|
710
892
|
}
|
|
711
893
|
/**
|
|
712
894
|
* Extract version from npm package specification.
|
|
713
|
-
* Examples: @
|
|
714
|
-
* @
|
|
895
|
+
* Examples: @scope/package@latest -> latest
|
|
896
|
+
* @scope/package@1.2.3 -> 1.2.3
|
|
715
897
|
* some-package -> undefined
|
|
716
898
|
*/
|
|
717
899
|
function extractNpmVersion(args) {
|
|
@@ -1043,7 +1225,7 @@ export function listInstalledMcpsWithScope(agentId, cwd = process.cwd(), options
|
|
|
1043
1225
|
}
|
|
1044
1226
|
return results;
|
|
1045
1227
|
}
|
|
1046
|
-
|
|
1228
|
+
/** Map of agent name aliases and shorthand identifiers to canonical AgentId values. */
|
|
1047
1229
|
export const AGENT_NAME_ALIASES = {
|
|
1048
1230
|
claude: 'claude',
|
|
1049
1231
|
'claude-code': 'claude',
|
|
@@ -1076,13 +1258,15 @@ export const AGENT_NAME_ALIASES = {
|
|
|
1076
1258
|
'roo-code': 'roo',
|
|
1077
1259
|
roocode: 'roo',
|
|
1078
1260
|
};
|
|
1261
|
+
/** Resolve a user-provided agent name (alias, shorthand, or canonical) to its AgentId. */
|
|
1079
1262
|
export function resolveAgentName(input) {
|
|
1080
1263
|
return AGENT_NAME_ALIASES[input.toLowerCase()] || null;
|
|
1081
1264
|
}
|
|
1265
|
+
/** Check whether the input string matches any known agent name or alias. */
|
|
1082
1266
|
export function isAgentName(input) {
|
|
1083
1267
|
return resolveAgentName(input) !== null;
|
|
1084
1268
|
}
|
|
1269
|
+
/** Format an error message for an unrecognized agent name, listing valid options. */
|
|
1085
1270
|
export function formatAgentError(agentName, validAgents = ALL_AGENT_IDS) {
|
|
1086
1271
|
return `Unknown agent '${agentName}'. Valid agents: ${validAgents.join(', ')}`;
|
|
1087
1272
|
}
|
|
1088
|
-
//# sourceMappingURL=agents.js.map
|
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Artifact action types and validation
|
|
3
|
-
* Ported from agents/halo/cli/pkg/config
|
|
2
|
+
* Artifact action types and validation.
|
|
3
|
+
* Ported from agents/halo/cli/pkg/config.
|
|
4
|
+
*
|
|
5
|
+
* Artifact actions map tool invocations to artifact labels, allowing agents to
|
|
6
|
+
* trigger tools automatically when specific artifacts are produced.
|
|
4
7
|
*/
|
|
8
|
+
/** A single action that binds a tool invocation to matching artifact labels. */
|
|
5
9
|
export interface ArtifactAction {
|
|
6
10
|
tool: string;
|
|
7
11
|
label: string;
|
|
8
12
|
matches?: string[];
|
|
9
13
|
input?: Record<string, string>;
|
|
10
14
|
}
|
|
15
|
+
/** Agent-level configuration block containing artifact action definitions. */
|
|
11
16
|
export interface AgentArtifactConfig {
|
|
12
17
|
artifact_actions?: ArtifactAction[];
|
|
13
18
|
}
|
|
14
19
|
/**
|
|
15
|
-
* Validate artifact actions configuration
|
|
20
|
+
* Validate artifact actions configuration.
|
|
16
21
|
* @param actions - List of artifact actions to validate
|
|
17
22
|
* @param httpToolNames - Set of tool names defined in http_tools section
|
|
18
23
|
* @param applicationTools - Set of valid application tool names
|
|
19
24
|
* @returns Array of validation errors (empty if valid)
|
|
20
25
|
*/
|
|
21
26
|
export declare function validateArtifactActions(actions: ArtifactAction[], httpToolNames: Set<string>, applicationTools: Set<string>): string[];
|
|
22
|
-
//# sourceMappingURL=artifact-actions.d.ts.map
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Artifact action types and validation
|
|
3
|
-
* Ported from agents/halo/cli/pkg/config
|
|
2
|
+
* Artifact action types and validation.
|
|
3
|
+
* Ported from agents/halo/cli/pkg/config.
|
|
4
|
+
*
|
|
5
|
+
* Artifact actions map tool invocations to artifact labels, allowing agents to
|
|
6
|
+
* trigger tools automatically when specific artifacts are produced.
|
|
4
7
|
*/
|
|
5
8
|
/**
|
|
6
|
-
* Validate artifact actions configuration
|
|
9
|
+
* Validate artifact actions configuration.
|
|
7
10
|
* @param actions - List of artifact actions to validate
|
|
8
11
|
* @param httpToolNames - Set of tool names defined in http_tools section
|
|
9
12
|
* @param applicationTools - Set of valid application tool names
|
|
@@ -38,8 +41,8 @@ export function validateArtifactActions(actions, httpToolNames, applicationTools
|
|
|
38
41
|
return errors;
|
|
39
42
|
}
|
|
40
43
|
/**
|
|
41
|
-
* Validate template string uses only allowed patterns
|
|
42
|
-
* Only allows {{artifact.X}} and {{preflight.X}} patterns
|
|
44
|
+
* Validate template string uses only allowed patterns.
|
|
45
|
+
* Only allows {{artifact.X}} and {{preflight.X}} patterns.
|
|
43
46
|
*/
|
|
44
47
|
function validateTemplate(tmpl) {
|
|
45
48
|
const re = /\{\{(\w+)\.(\w+)\}\}/g;
|
|
@@ -52,4 +55,3 @@ function validateTemplate(tmpl) {
|
|
|
52
55
|
}
|
|
53
56
|
return null;
|
|
54
57
|
}
|
|
55
|
-
//# sourceMappingURL=artifact-actions.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detached worker entry point for background sync. See auto-pull.ts for the public API.
|
|
3
|
+
*
|
|
4
|
+
* For the system repo: fast-forward pull (safe — repo is read-only locally).
|
|
5
|
+
* For the user repo + enabled extras: `git fetch` + write a status marker the foreground
|
|
6
|
+
* CLI surfaces on its next invocation.
|
|
7
|
+
*
|
|
8
|
+
* Per-repo lock files at ~/.agents-system/.fetch/<alias>.lock prevent concurrent fetches.
|
|
9
|
+
* Lock mtime under 5 min => skip (another invocation already in flight).
|
|
10
|
+
*/
|
|
11
|
+
export {};
|