@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/commands/models.js
CHANGED
|
@@ -1,8 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model catalog inspection command.
|
|
3
|
+
*
|
|
4
|
+
* Registers the hidden `agents models` command for listing models
|
|
5
|
+
* supported by installed agent versions. Extracts model catalogs from
|
|
6
|
+
* each agent's CLI bundle and displays IDs, aliases, and metadata.
|
|
7
|
+
*/
|
|
1
8
|
import chalk from 'chalk';
|
|
9
|
+
import * as fs from 'fs';
|
|
2
10
|
import { resolveAgentName, formatAgentError, agentLabel, } from '../lib/agents.js';
|
|
3
|
-
import { listInstalledVersions, getGlobalDefault, resolveVersion } from '../lib/versions.js';
|
|
11
|
+
import { listInstalledVersions, getGlobalDefault, resolveVersion, resolveVersionAlias } from '../lib/versions.js';
|
|
4
12
|
import { getModelCatalog, locateModelSource } from '../lib/models.js';
|
|
5
|
-
const MODEL_CAPABLE_AGENTS = ['claude', 'codex'];
|
|
13
|
+
const MODEL_CAPABLE_AGENTS = ['claude', 'codex', 'gemini', 'opencode', 'cursor', 'openclaw'];
|
|
14
|
+
/**
|
|
15
|
+
* Agents that don't necessarily install under ~/.agents/versions (cursor ships
|
|
16
|
+
* via a curl script). For these, fall back to the PATH binary and synthesize
|
|
17
|
+
* a version label from the install path so cache keys stay stable.
|
|
18
|
+
*/
|
|
19
|
+
const PATH_ONLY_AGENTS = new Set(['cursor']);
|
|
20
|
+
/** Derive a version label from the PATH-installed binary location for agents without managed versions. */
|
|
21
|
+
function fallbackPathVersion(agent) {
|
|
22
|
+
const src = locateModelSource(agent, 'unresolved');
|
|
23
|
+
if (!src)
|
|
24
|
+
return null;
|
|
25
|
+
let real = src.path;
|
|
26
|
+
try {
|
|
27
|
+
real = fs.realpathSync(src.path);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
/* keep symlink path */
|
|
31
|
+
}
|
|
32
|
+
const m = real.match(/\/versions\/([^/]+)\//);
|
|
33
|
+
return m ? m[1] : 'installed';
|
|
34
|
+
}
|
|
35
|
+
/** Register the hidden `agents models` command. */
|
|
6
36
|
export function registerModelsCommand(program) {
|
|
7
37
|
program
|
|
8
38
|
.command('models [agentSpec]', { hidden: true })
|
|
@@ -32,11 +62,15 @@ export function registerModelsCommand(program) {
|
|
|
32
62
|
}
|
|
33
63
|
});
|
|
34
64
|
}
|
|
65
|
+
/** Resolve the agent spec into one or more (agent, version) pairs to inspect. */
|
|
35
66
|
async function resolveTargets(agentSpec) {
|
|
36
67
|
if (!agentSpec) {
|
|
37
68
|
const targets = [];
|
|
38
69
|
for (const agent of MODEL_CAPABLE_AGENTS) {
|
|
39
|
-
|
|
70
|
+
let version = getGlobalDefault(agent) || (listInstalledVersions(agent)[0] ?? null);
|
|
71
|
+
if (!version && PATH_ONLY_AGENTS.has(agent)) {
|
|
72
|
+
version = fallbackPathVersion(agent);
|
|
73
|
+
}
|
|
40
74
|
if (version)
|
|
41
75
|
targets.push({ agent, version, isDefault: true });
|
|
42
76
|
}
|
|
@@ -63,13 +97,18 @@ async function resolveTargets(agentSpec) {
|
|
|
63
97
|
isDefault: v === getGlobalDefault(agent),
|
|
64
98
|
}));
|
|
65
99
|
}
|
|
66
|
-
const
|
|
100
|
+
const aliasedVersion = resolveVersionAlias(agent, versionSpec);
|
|
101
|
+
let version = aliasedVersion || resolveVersion(agent, process.cwd()) || getGlobalDefault(agent);
|
|
102
|
+
if (!version && PATH_ONLY_AGENTS.has(agent)) {
|
|
103
|
+
version = fallbackPathVersion(agent);
|
|
104
|
+
}
|
|
67
105
|
if (!version) {
|
|
68
106
|
console.error(chalk.red(`No version of ${agent} is installed. Try \`agents add ${agent}@latest\`.`));
|
|
69
107
|
return [];
|
|
70
108
|
}
|
|
71
109
|
return [{ agent, version, isDefault: version === getGlobalDefault(agent) }];
|
|
72
110
|
}
|
|
111
|
+
/** Print the model catalog for a single agent version with optional cloud/reasoning details. */
|
|
73
112
|
function printCatalog(agent, version, isDefault, options) {
|
|
74
113
|
const tag = isDefault ? chalk.gray(' (default)') : '';
|
|
75
114
|
const header = `${agentLabel(agent)} ${chalk.bold(version)}${tag}`;
|
|
@@ -77,7 +116,7 @@ function printCatalog(agent, version, isDefault, options) {
|
|
|
77
116
|
const src = locateModelSource(agent, version);
|
|
78
117
|
if (!src) {
|
|
79
118
|
console.log(chalk.yellow(` Could not locate model source for ${agent}@${version}.`));
|
|
80
|
-
console.log(chalk.gray(` Expected the agent's CLI bundle or native binary under ~/.agents/versions/${agent}/${version}/.`));
|
|
119
|
+
console.log(chalk.gray(` Expected the agent's CLI bundle or native binary under ~/.agents-system/versions/${agent}/${version}/.`));
|
|
81
120
|
return;
|
|
82
121
|
}
|
|
83
122
|
const catalog = getModelCatalog(agent, version);
|
|
@@ -125,7 +164,7 @@ function printCatalog(agent, version, isDefault, options) {
|
|
|
125
164
|
}
|
|
126
165
|
}
|
|
127
166
|
}
|
|
167
|
+
/** Abbreviate a path by replacing the home directory with ~. */
|
|
128
168
|
function shortPath(p) {
|
|
129
169
|
return p.replace(process.env.HOME || '~', '~');
|
|
130
170
|
}
|
|
131
|
-
//# sourceMappingURL=models.js.map
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package registry and installation commands.
|
|
3
|
+
*
|
|
4
|
+
* Registers `agents registry`, `agents search`, and `agents install`
|
|
5
|
+
* for discovering and installing MCP servers, skills, commands, and
|
|
6
|
+
* hooks from configured registries or GitHub sources.
|
|
7
|
+
*/
|
|
1
8
|
import type { Command } from 'commander';
|
|
9
|
+
/** Register the `agents registry`, `agents search`, and `agents install` commands. */
|
|
2
10
|
export declare function registerPackagesCommands(program: Command): void;
|
|
3
|
-
//# sourceMappingURL=packages.d.ts.map
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package registry and installation commands.
|
|
3
|
+
*
|
|
4
|
+
* Registers `agents registry`, `agents search`, and `agents install`
|
|
5
|
+
* for discovering and installing MCP servers, skills, commands, and
|
|
6
|
+
* hooks from configured registries or GitHub sources.
|
|
7
|
+
*/
|
|
1
8
|
import chalk from 'chalk';
|
|
2
9
|
import ora from 'ora';
|
|
3
10
|
import { AGENTS, ALL_AGENT_IDS, MCP_CAPABLE_AGENTS, getAllCliStates, registerMcpToTargets, agentLabel, } from '../lib/agents.js';
|
|
@@ -10,9 +17,11 @@ import { discoverHooksFromRepo, installHooks, installHooksCentrally, } from '../
|
|
|
10
17
|
import { listInstalledVersions, resolveInstalledAgentTargets, resolveConfiguredAgentTargets, syncResourcesToVersion, } from '../lib/versions.js';
|
|
11
18
|
import { isInteractiveTerminal, isPromptCancelled, requireDestructiveArg, requireInteractiveSelection, } from './utils.js';
|
|
12
19
|
import { itemPicker } from '../lib/picker.js';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Picker fallback for `registry enable/config [name]`.
|
|
22
|
+
* Returns the picked name, or null if the user cancels. In non-TTY shells,
|
|
23
|
+
* hard-fails with a clear reminder of the positional form.
|
|
24
|
+
*/
|
|
16
25
|
async function pickRegistryName(type, verb, pred) {
|
|
17
26
|
const registries = getRegistries(type);
|
|
18
27
|
const entries = Object.entries(registries).filter(([, cfg]) => (pred ? pred(cfg) : true));
|
|
@@ -55,6 +64,7 @@ async function pickRegistryName(type, verb, pred) {
|
|
|
55
64
|
throw err;
|
|
56
65
|
}
|
|
57
66
|
}
|
|
67
|
+
/** Register the `agents registry`, `agents search`, and `agents install` commands. */
|
|
58
68
|
export function registerPackagesCommands(program) {
|
|
59
69
|
// ==========================================================================
|
|
60
70
|
// REGISTRY COMMANDS
|
|
@@ -265,9 +275,6 @@ When to use:
|
|
|
265
275
|
spinner.stop();
|
|
266
276
|
if (results.length === 0) {
|
|
267
277
|
console.log(chalk.yellow('\nNo packages found.'));
|
|
268
|
-
if (!options.type) {
|
|
269
|
-
console.log(chalk.gray('\nTip: skill registries not yet available. Use gh:user/repo for skills.'));
|
|
270
|
-
}
|
|
271
278
|
return;
|
|
272
279
|
}
|
|
273
280
|
console.log(chalk.bold(`Found ${results.length} packages`));
|
|
@@ -538,4 +545,3 @@ When to use:
|
|
|
538
545
|
}
|
|
539
546
|
});
|
|
540
547
|
}
|
|
541
|
-
//# sourceMappingURL=packages.js.map
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission management commands for controlling agent access boundaries.
|
|
3
|
+
*
|
|
4
|
+
* Implements `agents permissions` -- list, add, remove, and view permission
|
|
5
|
+
* sets (allow/deny rules for bash, tools, and filesystem). Supports importing
|
|
6
|
+
* from agent config files, GitHub repos, and YAML, with merge/replace
|
|
7
|
+
* semantics and multi-version targeting.
|
|
8
|
+
*/
|
|
1
9
|
import type { Command } from 'commander';
|
|
10
|
+
/** Register the `agents permissions` command tree (list, add, remove, view). */
|
|
2
11
|
export declare function registerPermissionsCommands(program: Command): void;
|
|
3
|
-
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -7,9 +7,10 @@ import { confirm, checkbox } from '@inquirer/prompts';
|
|
|
7
7
|
import { AGENTS, resolveAgentName, formatAgentError, agentLabel, } from '../lib/agents.js';
|
|
8
8
|
import { cloneRepo } from '../lib/git.js';
|
|
9
9
|
import { PERMISSIONS_CAPABLE_AGENTS, listInstalledPermissions, discoverPermissionsFromRepo, installPermissionSet, removePermissionSet, applyPermissionsToVersion, readAgentPermissions, exportPermissionsFromPath, getDefaultPermissionSet, computePermissionsDiff, mergePermissionSets, saveDefaultPermissionSet, } from '../lib/permissions.js';
|
|
10
|
-
import { listInstalledVersions, getGlobalDefault, getVersionHomePath, promptAgentVersionSelection, resolveAgentVersionTargets, } from '../lib/versions.js';
|
|
10
|
+
import { listInstalledVersions, getGlobalDefault, getVersionHomePath, promptAgentVersionSelection, resolveAgentVersionTargets, resolveVersionAlias, } from '../lib/versions.js';
|
|
11
11
|
import { recordVersionResources } from '../lib/state.js';
|
|
12
12
|
import { isPromptCancelled, isInteractiveTerminal, parseCommaSeparatedList, printWithPager, requireInteractiveSelection, } from './utils.js';
|
|
13
|
+
/** Register the `agents permissions` command tree (list, add, remove, view). */
|
|
13
14
|
export function registerPermissionsCommands(program) {
|
|
14
15
|
const permissionsCmd = program
|
|
15
16
|
.command('permissions')
|
|
@@ -106,12 +107,12 @@ When to use:
|
|
|
106
107
|
// Parse agent@version syntax
|
|
107
108
|
const parts = agentArg.split('@');
|
|
108
109
|
const agentName = parts[0];
|
|
109
|
-
const requestedVersion = parts[1] || null;
|
|
110
110
|
const agentId = resolveAgentName(agentName);
|
|
111
111
|
if (!agentId) {
|
|
112
112
|
console.log(chalk.red(formatAgentError(agentName, PERMISSIONS_CAPABLE_AGENTS)));
|
|
113
113
|
process.exit(1);
|
|
114
114
|
}
|
|
115
|
+
const requestedVersion = resolveVersionAlias(agentId, parts[1]) ?? null;
|
|
115
116
|
if (!PERMISSIONS_CAPABLE_AGENTS.includes(agentId)) {
|
|
116
117
|
console.log(chalk.yellow(`${AGENTS[agentId].name} does not support fine-grained permissions`));
|
|
117
118
|
return;
|
|
@@ -720,4 +721,3 @@ Examples:
|
|
|
720
721
|
// Note: This needs to be registered at the program level, not as a subcommand
|
|
721
722
|
// The actual deprecation message is shown in index.ts
|
|
722
723
|
}
|
|
723
|
-
//# sourceMappingURL=permissions.js.map
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin management commands.
|
|
3
|
+
*
|
|
4
|
+
* Registers the `agents plugins` command tree for listing, viewing,
|
|
5
|
+
* syncing, and removing plugin bundles (skills + hooks + permissions)
|
|
6
|
+
* stored in ~/.agents/plugins/.
|
|
7
|
+
*/
|
|
1
8
|
import type { Command } from 'commander';
|
|
9
|
+
/** Register the `agents plugins` command tree. */
|
|
2
10
|
export declare function registerPluginsCommands(program: Command): void;
|
|
3
|
-
//# sourceMappingURL=plugins.d.ts.map
|
package/dist/commands/plugins.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin management commands.
|
|
3
|
+
*
|
|
4
|
+
* Registers the `agents plugins` command tree for listing, viewing,
|
|
5
|
+
* syncing, and removing plugin bundles (skills + hooks + permissions)
|
|
6
|
+
* stored in ~/.agents/plugins/.
|
|
7
|
+
*/
|
|
1
8
|
import * as fs from 'fs';
|
|
2
9
|
import * as path from 'path';
|
|
3
10
|
import chalk from 'chalk';
|
|
@@ -9,6 +16,8 @@ import { isPromptCancelled, isInteractiveTerminal, requireDestructiveArg, requir
|
|
|
9
16
|
import { itemPicker } from '../lib/picker.js';
|
|
10
17
|
import { showResourceList, buildTargetsSection, } from './resource-view.js';
|
|
11
18
|
import { getPluginsDir } from '../lib/state.js';
|
|
19
|
+
import { safeJoin } from '../lib/paths.js';
|
|
20
|
+
/** Replace the home directory prefix with ~ for display. */
|
|
12
21
|
function formatPath(p) {
|
|
13
22
|
const home = process.env.HOME || '';
|
|
14
23
|
if (home && p.startsWith(home)) {
|
|
@@ -16,6 +25,7 @@ function formatPath(p) {
|
|
|
16
25
|
}
|
|
17
26
|
return p;
|
|
18
27
|
}
|
|
28
|
+
/** Register the `agents plugins` command tree. */
|
|
19
29
|
export function registerPluginsCommands(program) {
|
|
20
30
|
const pluginsCmd = program
|
|
21
31
|
.command('plugins')
|
|
@@ -257,7 +267,7 @@ Examples:
|
|
|
257
267
|
}
|
|
258
268
|
const name = nameArg;
|
|
259
269
|
const pluginsDir = path.join(process.env.HOME || '', '.agents', 'plugins');
|
|
260
|
-
const pluginRoot =
|
|
270
|
+
const pluginRoot = safeJoin(pluginsDir, name);
|
|
261
271
|
// Use discovered plugin when present; fall back to name+root if source is already gone
|
|
262
272
|
const plugin = getPlugin(name);
|
|
263
273
|
const resolvedRoot = plugin?.root || pluginRoot;
|
|
@@ -295,6 +305,7 @@ Examples:
|
|
|
295
305
|
}
|
|
296
306
|
});
|
|
297
307
|
}
|
|
308
|
+
/** Convert discovered plugins into rows suitable for the resource list view. */
|
|
298
309
|
function buildPluginRows(plugins) {
|
|
299
310
|
const rows = [];
|
|
300
311
|
// Cache version lists per agent once.
|
|
@@ -337,6 +348,7 @@ function buildPluginRows(plugins) {
|
|
|
337
348
|
});
|
|
338
349
|
return rows;
|
|
339
350
|
}
|
|
351
|
+
/** Build the multi-line detail pane shown when a plugin is selected in the picker. */
|
|
340
352
|
function formatPluginDetail(plugin, targets) {
|
|
341
353
|
const lines = [];
|
|
342
354
|
const title = plugin.manifest.version
|
|
@@ -379,4 +391,3 @@ function formatPluginDetail(plugin, targets) {
|
|
|
379
391
|
}
|
|
380
392
|
return lines.join('\n');
|
|
381
393
|
}
|
|
382
|
-
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profile management commands.
|
|
3
|
+
*
|
|
4
|
+
* Registers the `agents profiles` command tree for creating, viewing,
|
|
5
|
+
* and removing named bundles of (host CLI, endpoint, model, keychain auth).
|
|
6
|
+
* Profiles let users run non-default providers (Kimi, DeepSeek, Qwen, etc.)
|
|
7
|
+
* through a standard agent CLI with no local proxy.
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from 'commander';
|
|
10
|
+
/** Register the `agents profiles` command tree. */
|
|
11
|
+
export declare function registerProfilesCommands(program: Command): void;
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profile management commands.
|
|
3
|
+
*
|
|
4
|
+
* Registers the `agents profiles` command tree for creating, viewing,
|
|
5
|
+
* and removing named bundles of (host CLI, endpoint, model, keychain auth).
|
|
6
|
+
* Profiles let users run non-default providers (Kimi, DeepSeek, Qwen, etc.)
|
|
7
|
+
* through a standard agent CLI with no local proxy.
|
|
8
|
+
*/
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import { listProfiles, readProfile, writeProfile, deleteProfile, profileExists, profileFromPreset, getPresetForProfile, } from '../lib/profiles.js';
|
|
12
|
+
import { getPreset, listPresets } from '../lib/profiles-presets.js';
|
|
13
|
+
import { hasKeychainToken, keychainItemName, setKeychainToken, deleteKeychainToken, } from '../lib/secrets/profiles.js';
|
|
14
|
+
import { isInteractiveTerminal } from './utils.js';
|
|
15
|
+
/** Prompt the user for a secret value with masked input. Requires an interactive TTY. */
|
|
16
|
+
async function promptForSecret(message) {
|
|
17
|
+
if (!isInteractiveTerminal()) {
|
|
18
|
+
throw new Error('A secret is required but the shell is not interactive. Pipe the key via stdin (--key-stdin).');
|
|
19
|
+
}
|
|
20
|
+
const { password } = await import('@inquirer/prompts');
|
|
21
|
+
return await password({ message, mask: true });
|
|
22
|
+
}
|
|
23
|
+
/** Read all available data from stdin synchronously, trimmed. */
|
|
24
|
+
function readStdinSync() {
|
|
25
|
+
const chunks = [];
|
|
26
|
+
const buf = Buffer.alloc(65536);
|
|
27
|
+
while (true) {
|
|
28
|
+
let bytesRead;
|
|
29
|
+
try {
|
|
30
|
+
bytesRead = fs.readSync(0, buf, 0, buf.length, null);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
if (bytesRead === 0)
|
|
36
|
+
break;
|
|
37
|
+
chunks.push(Buffer.from(buf.subarray(0, bytesRead)));
|
|
38
|
+
}
|
|
39
|
+
return Buffer.concat(chunks).toString('utf-8').trim();
|
|
40
|
+
}
|
|
41
|
+
/** Ensure a provider API key exists in keychain, prompting or reading stdin if missing. */
|
|
42
|
+
async function ensureProviderToken(provider, signupUrl, fromStdin) {
|
|
43
|
+
const item = keychainItemName(provider);
|
|
44
|
+
if (hasKeychainToken(item)) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
let token;
|
|
48
|
+
if (fromStdin) {
|
|
49
|
+
token = readStdinSync();
|
|
50
|
+
if (!token) {
|
|
51
|
+
throw new Error('No key received on stdin.');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
const hint = signupUrl ? ` (get one at ${signupUrl})` : '';
|
|
56
|
+
token = await promptForSecret(`Enter API key for ${provider}${hint}`);
|
|
57
|
+
}
|
|
58
|
+
setKeychainToken(item, token);
|
|
59
|
+
console.log(chalk.green(`Stored in keychain: ${item}`));
|
|
60
|
+
}
|
|
61
|
+
/** Format a single profile as a table row for the `profiles list` output. */
|
|
62
|
+
function renderProfileRow(p) {
|
|
63
|
+
const host = p.host.version ? `${p.host.agent}@${p.host.version}` : p.host.agent;
|
|
64
|
+
const model = p.env.ANTHROPIC_MODEL || p.env.OPENAI_MODEL || p.env.GEMINI_MODEL || '-';
|
|
65
|
+
const provider = p.provider || (p.auth?.keychainItem?.split('.')[1]) || '-';
|
|
66
|
+
return `${chalk.cyan(p.name.padEnd(16))} ${host.padEnd(14)} ${provider.padEnd(12)} ${chalk.gray(model)}`;
|
|
67
|
+
}
|
|
68
|
+
/** Register the `agents profiles` command tree. */
|
|
69
|
+
export function registerProfilesCommands(program) {
|
|
70
|
+
const cmd = program
|
|
71
|
+
.command('profiles')
|
|
72
|
+
.description('Named bundles of (host CLI, endpoint, model, auth) — run Kimi/DeepSeek/Qwen/etc through Claude Code without a proxy.')
|
|
73
|
+
.addHelpText('after', `
|
|
74
|
+
A profile pins a host CLI (claude, codex, gemini, ...) to a non-default endpoint
|
|
75
|
+
and model, with a keychain-backed API key. Running 'agents run <profile>' spawns
|
|
76
|
+
the host CLI with the right env vars — no plaintext tokens, no local proxy.
|
|
77
|
+
|
|
78
|
+
Built-in presets (via OpenRouter, one shared key):
|
|
79
|
+
kimi Kimi K2.5 (top HumanEval, reasoning — interactive only)
|
|
80
|
+
kimi-chat Kimi K2 0905 (non-reasoning, print-safe)
|
|
81
|
+
minimax MiniMax M2.5 (top SWE-bench, reasoning)
|
|
82
|
+
glm GLM 5 (top Chatbot Arena among open-weight, reasoning)
|
|
83
|
+
qwen Qwen3 Coder Next (latest coding Qwen, print-safe)
|
|
84
|
+
deepseek DeepSeek Chat V3 (latest non-reasoning chat, print-safe)
|
|
85
|
+
|
|
86
|
+
Run 'agents profiles presets' for the full list with pricing and context sizes.
|
|
87
|
+
|
|
88
|
+
Typical flow:
|
|
89
|
+
agents profiles add kimi # prompts for OpenRouter key, stored in Keychain
|
|
90
|
+
agents run kimi "refactor this" # Claude Code UI, Kimi model responses
|
|
91
|
+
agents profiles add deepseek # reuses OpenRouter key, no re-prompt
|
|
92
|
+
|
|
93
|
+
Managing keys:
|
|
94
|
+
agents profiles login openrouter # rotate the key (shared across openrouter profiles)
|
|
95
|
+
agents profiles logout openrouter # remove from Keychain
|
|
96
|
+
|
|
97
|
+
Custom endpoints — drop a YAML file at ~/.agents/profiles/<name>.yml:
|
|
98
|
+
name: local-llama
|
|
99
|
+
host: { agent: claude }
|
|
100
|
+
env:
|
|
101
|
+
ANTHROPIC_BASE_URL: http://localhost:11434
|
|
102
|
+
ANTHROPIC_MODEL: llama-3.3-70b
|
|
103
|
+
auth:
|
|
104
|
+
envVar: ANTHROPIC_AUTH_TOKEN
|
|
105
|
+
keychainItem: agents-cli.ollama.token
|
|
106
|
+
|
|
107
|
+
Profiles store no secrets — safe to 'agents push' to a shared repo.
|
|
108
|
+
|
|
109
|
+
Examples:
|
|
110
|
+
# One-time: store the OpenRouter key (every preset reuses it)
|
|
111
|
+
agents profiles login openrouter
|
|
112
|
+
|
|
113
|
+
# Add Kimi (top HumanEval) and run it through the Claude Code UI
|
|
114
|
+
agents profiles add kimi
|
|
115
|
+
agents run kimi "refactor api/handlers/checkout.py to use async sqlalchemy"
|
|
116
|
+
|
|
117
|
+
# Add MiniMax for SWE-bench style fixes; reuses the same OpenRouter key
|
|
118
|
+
agents profiles add minimax
|
|
119
|
+
agents run minimax "investigate RUSH-2317 and patch the off-by-one in pagination"
|
|
120
|
+
|
|
121
|
+
# Add DeepSeek for cheap, fast non-reasoning work
|
|
122
|
+
agents profiles add deepseek
|
|
123
|
+
agents run deepseek "rename UserSession -> AuthSession across the codebase"
|
|
124
|
+
|
|
125
|
+
# See every profile and which provider it talks to
|
|
126
|
+
agents profiles list
|
|
127
|
+
|
|
128
|
+
# Browse the catalog (pricing, context sizes, reasoning vs print-safe)
|
|
129
|
+
agents profiles presets
|
|
130
|
+
|
|
131
|
+
# Rotate the OpenRouter key (every openrouter profile picks it up)
|
|
132
|
+
agents profiles login openrouter
|
|
133
|
+
|
|
134
|
+
# Drop a profile, keep the key in Keychain for the next one
|
|
135
|
+
agents profiles remove kimi
|
|
136
|
+
|
|
137
|
+
# Fully remove the OpenRouter key from Keychain
|
|
138
|
+
agents profiles logout openrouter
|
|
139
|
+
`);
|
|
140
|
+
cmd
|
|
141
|
+
.command('list')
|
|
142
|
+
.alias('ls')
|
|
143
|
+
.description('List configured profiles')
|
|
144
|
+
.action(() => {
|
|
145
|
+
const profiles = listProfiles();
|
|
146
|
+
if (profiles.length === 0) {
|
|
147
|
+
console.log(chalk.gray('No profiles configured.'));
|
|
148
|
+
console.log(chalk.gray('Try: agents profiles add kimi'));
|
|
149
|
+
console.log(chalk.gray(' agents profiles presets'));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
console.log(chalk.bold(`${'NAME'.padEnd(16)} ${'HOST'.padEnd(14)} ${'PROVIDER'.padEnd(12)} MODEL`));
|
|
153
|
+
for (const p of profiles) {
|
|
154
|
+
console.log(renderProfileRow(p));
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
cmd
|
|
158
|
+
.command('presets')
|
|
159
|
+
.description('List built-in presets (OpenRouter + direct providers)')
|
|
160
|
+
.action(() => {
|
|
161
|
+
const presets = listPresets();
|
|
162
|
+
console.log(chalk.bold(`${'NAME'.padEnd(14)} ${'PROVIDER'.padEnd(12)} DESCRIPTION`));
|
|
163
|
+
for (const p of presets) {
|
|
164
|
+
console.log(`${chalk.cyan(p.name.padEnd(14))} ${p.provider.padEnd(12)} ${chalk.gray(p.description)}`);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
cmd
|
|
168
|
+
.command('view <name>')
|
|
169
|
+
.alias('show')
|
|
170
|
+
.description('Show a profile (env, host, auth source, preset link)')
|
|
171
|
+
.action((name) => {
|
|
172
|
+
try {
|
|
173
|
+
const p = readProfile(name);
|
|
174
|
+
console.log(chalk.bold(p.name));
|
|
175
|
+
if (p.description)
|
|
176
|
+
console.log(chalk.gray(p.description));
|
|
177
|
+
console.log();
|
|
178
|
+
console.log(chalk.bold('Host:'), p.host.agent + (p.host.version ? `@${p.host.version}` : ''));
|
|
179
|
+
if (p.provider)
|
|
180
|
+
console.log(chalk.bold('Provider:'), p.provider);
|
|
181
|
+
if (p.preset)
|
|
182
|
+
console.log(chalk.bold('Preset:'), p.preset);
|
|
183
|
+
console.log();
|
|
184
|
+
console.log(chalk.bold('Env:'));
|
|
185
|
+
for (const [k, v] of Object.entries(p.env)) {
|
|
186
|
+
console.log(` ${k}=${v}`);
|
|
187
|
+
}
|
|
188
|
+
if (p.auth) {
|
|
189
|
+
console.log();
|
|
190
|
+
console.log(chalk.bold('Auth:'));
|
|
191
|
+
const tokenStatus = hasKeychainToken(p.auth.keychainItem) ? chalk.green('stored') : chalk.red('missing');
|
|
192
|
+
console.log(` ${p.auth.envVar} <- keychain:${p.auth.keychainItem} (${tokenStatus})`);
|
|
193
|
+
}
|
|
194
|
+
const preset = getPresetForProfile(p);
|
|
195
|
+
if (preset?.signupUrl) {
|
|
196
|
+
console.log();
|
|
197
|
+
console.log(chalk.gray(`Sign up: ${preset.signupUrl}`));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
console.error(chalk.red(err.message));
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
cmd
|
|
206
|
+
.command('add <name>')
|
|
207
|
+
.description('Add a profile. If <name> matches a built-in preset, the preset is applied. Prompts for API key (once per provider).')
|
|
208
|
+
.option('--preset <preset>', 'Use a named preset (defaults to <name> if a preset by that name exists)')
|
|
209
|
+
.option('--version <version>', 'Pin the host CLI version (e.g., 2.1.113)')
|
|
210
|
+
.option('--key-stdin', 'Read API key from stdin instead of prompting (for scripts/CI)')
|
|
211
|
+
.option('--force', 'Overwrite an existing profile with the same name')
|
|
212
|
+
.action(async (name, opts) => {
|
|
213
|
+
try {
|
|
214
|
+
if (profileExists(name) && !opts.force) {
|
|
215
|
+
console.error(chalk.red(`Profile '${name}' already exists. Use --force to overwrite.`));
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
const presetName = opts.preset || name;
|
|
219
|
+
const preset = getPreset(presetName);
|
|
220
|
+
if (!preset) {
|
|
221
|
+
console.error(chalk.red(`No preset '${presetName}'.`));
|
|
222
|
+
console.error(chalk.gray('Available presets: ' + listPresets().map((p) => p.name).join(', ')));
|
|
223
|
+
console.error(chalk.gray('Or pass --preset <name> to pick explicitly.'));
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
await ensureProviderToken(preset.provider, preset.signupUrl, opts.keyStdin);
|
|
227
|
+
const profile = profileFromPreset(name, preset, opts.version);
|
|
228
|
+
writeProfile(profile);
|
|
229
|
+
console.log(chalk.green(`Profile '${name}' added.`));
|
|
230
|
+
console.log(chalk.gray(`Try: agents run ${name} "hello"`));
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
console.error(chalk.red(err.message));
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
cmd
|
|
238
|
+
.command('remove <name>')
|
|
239
|
+
.alias('rm')
|
|
240
|
+
.description('Delete a profile (keychain token is kept — use `profiles logout <provider>` to remove)')
|
|
241
|
+
.action((name) => {
|
|
242
|
+
const existed = deleteProfile(name);
|
|
243
|
+
if (!existed) {
|
|
244
|
+
console.error(chalk.red(`Profile '${name}' not found.`));
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
console.log(chalk.green(`Profile '${name}' removed.`));
|
|
248
|
+
});
|
|
249
|
+
cmd
|
|
250
|
+
.command('login <provider>')
|
|
251
|
+
.description('Store or rotate the API key for a provider (e.g., openrouter). Shared across profiles using that provider.')
|
|
252
|
+
.option('--key-stdin', 'Read API key from stdin')
|
|
253
|
+
.action(async (provider, opts) => {
|
|
254
|
+
try {
|
|
255
|
+
const item = keychainItemName(provider);
|
|
256
|
+
let token;
|
|
257
|
+
if (opts.keyStdin) {
|
|
258
|
+
token = readStdinSync();
|
|
259
|
+
if (!token)
|
|
260
|
+
throw new Error('No key received on stdin.');
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
token = await promptForSecret(`Enter API key for ${provider}`);
|
|
264
|
+
}
|
|
265
|
+
setKeychainToken(item, token);
|
|
266
|
+
console.log(chalk.green(`Stored in keychain: ${item}`));
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
console.error(chalk.red(err.message));
|
|
270
|
+
process.exit(1);
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
cmd
|
|
274
|
+
.command('logout <provider>')
|
|
275
|
+
.description('Remove a stored provider key from keychain')
|
|
276
|
+
.action((provider) => {
|
|
277
|
+
try {
|
|
278
|
+
const item = keychainItemName(provider);
|
|
279
|
+
const existed = deleteKeychainToken(item);
|
|
280
|
+
if (!existed) {
|
|
281
|
+
console.error(chalk.yellow(`No keychain item '${item}' to remove.`));
|
|
282
|
+
process.exit(1);
|
|
283
|
+
}
|
|
284
|
+
console.log(chalk.green(`Removed keychain item: ${item}`));
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
console.error(chalk.red(err.message));
|
|
288
|
+
process.exit(1);
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level `agents prune` — destructive cleanup across the install.
|
|
3
|
+
*
|
|
4
|
+
* Two kinds of cleanup, one verb:
|
|
5
|
+
* - Resource orphans: command/skill/hook files inside a version home that no
|
|
6
|
+
* longer come from any source (deleted from ~/.agents/ but never reconciled
|
|
7
|
+
* into the version install).
|
|
8
|
+
* - Version duplicates: older installed versions of an agent that share an
|
|
9
|
+
* account with a newer installed version of the same agent (the older copy
|
|
10
|
+
* is redundant; the newer one is what's signed in and active).
|
|
11
|
+
*
|
|
12
|
+
* Sync (additive: copy missing/changed files into version homes) is no longer
|
|
13
|
+
* a user-facing verb — `syncResourcesToVersion` runs at agent launch and
|
|
14
|
+
* applies adds/updates automatically. Pruning, however, is destructive, so it
|
|
15
|
+
* stays explicit.
|
|
16
|
+
*
|
|
17
|
+
* Default scope: each agent's currently-pinned default version for orphan
|
|
18
|
+
* cleanup, plus the standard cross-agent version-dedup pass. Pass `--all`
|
|
19
|
+
* to widen orphan cleanup to every installed version.
|
|
20
|
+
*/
|
|
21
|
+
import type { Command } from 'commander';
|
|
22
|
+
export declare function registerPruneCommand(program: Command): void;
|