@phnx-labs/agents-cli 1.12.0 → 1.14.1
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 +293 -300
- 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 +511 -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 +79 -0
- package/dist/lib/rotate.js +285 -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
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alias command -- create top-level shim binaries that expand to `agents <subcommand>`.
|
|
3
|
+
*
|
|
4
|
+
* Generates executable scripts in ~/.agents/shims/ (already on PATH from the
|
|
5
|
+
* standard agents-cli install). Running `teams` becomes equivalent to
|
|
6
|
+
* `agents teams`. Aliases are tracked in ~/.agents/aliases.json so we can
|
|
7
|
+
* list, regenerate, or remove them without scanning the shims directory
|
|
8
|
+
* (which also holds agent CLI shims like claude/codex/gemini).
|
|
9
|
+
*/
|
|
10
|
+
import type { Command } from 'commander';
|
|
11
|
+
export declare function registerAliasCommand(program: Command): void;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { getAgentsDir } from '../lib/state.js';
|
|
5
|
+
import { getShimsDir } from '../lib/shims.js';
|
|
6
|
+
import { ALL_AGENT_IDS, AGENTS } from '../lib/agents.js';
|
|
7
|
+
const ALIASES_FILE = path.join(getAgentsDir(), 'aliases.json');
|
|
8
|
+
/** Names that would clobber an agent CLI shim or the `agents` binary itself. */
|
|
9
|
+
function reservedNames() {
|
|
10
|
+
const reserved = new Set(['agents']);
|
|
11
|
+
for (const id of ALL_AGENT_IDS)
|
|
12
|
+
reserved.add(AGENTS[id].cliCommand);
|
|
13
|
+
return reserved;
|
|
14
|
+
}
|
|
15
|
+
function readAliases() {
|
|
16
|
+
if (!fs.existsSync(ALIASES_FILE))
|
|
17
|
+
return {};
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(fs.readFileSync(ALIASES_FILE, 'utf-8'));
|
|
20
|
+
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function writeAliases(map) {
|
|
27
|
+
fs.mkdirSync(path.dirname(ALIASES_FILE), { recursive: true });
|
|
28
|
+
fs.writeFileSync(ALIASES_FILE, JSON.stringify(map, null, 2) + '\n', 'utf-8');
|
|
29
|
+
}
|
|
30
|
+
function shimPath(name) {
|
|
31
|
+
return path.join(getShimsDir(), name);
|
|
32
|
+
}
|
|
33
|
+
function generateAliasShim(name, expansion) {
|
|
34
|
+
return `#!/bin/bash
|
|
35
|
+
# Auto-generated by agents-cli - do not edit
|
|
36
|
+
# Alias shim: ${name} -> agents ${expansion}
|
|
37
|
+
exec agents ${expansion} "$@"
|
|
38
|
+
`;
|
|
39
|
+
}
|
|
40
|
+
function isAliasShim(filePath) {
|
|
41
|
+
try {
|
|
42
|
+
const head = fs.readFileSync(filePath, 'utf-8').slice(0, 200);
|
|
43
|
+
return head.includes('# Alias shim:');
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function registerAliasCommand(program) {
|
|
50
|
+
const cmd = program
|
|
51
|
+
.command('alias')
|
|
52
|
+
.description('Create shorthand binaries that expand to `agents <subcommand>`');
|
|
53
|
+
cmd
|
|
54
|
+
.command('add <name> [expansion...]')
|
|
55
|
+
.description('Create an alias shim. If expansion is omitted, defaults to <name>.')
|
|
56
|
+
.action((name, expansion) => {
|
|
57
|
+
const expanded = expansion.length > 0 ? expansion.join(' ') : name;
|
|
58
|
+
if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {
|
|
59
|
+
console.error(chalk.red(`Invalid alias name "${name}". Use letters, digits, _ or -.`));
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
if (reservedNames().has(name)) {
|
|
63
|
+
console.error(chalk.red(`"${name}" is reserved (collides with an agent CLI or the agents binary).`));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const target = shimPath(name);
|
|
67
|
+
if (fs.existsSync(target) && !isAliasShim(target)) {
|
|
68
|
+
console.error(chalk.red(`Refusing to overwrite ${target} -- not an agents-cli alias shim.`));
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
fs.mkdirSync(getShimsDir(), { recursive: true });
|
|
72
|
+
fs.writeFileSync(target, generateAliasShim(name, expanded), 'utf-8');
|
|
73
|
+
fs.chmodSync(target, 0o755);
|
|
74
|
+
const map = readAliases();
|
|
75
|
+
map[name] = expanded;
|
|
76
|
+
writeAliases(map);
|
|
77
|
+
console.log(`${chalk.green('Created')} alias ${chalk.bold(name)} -> ${chalk.dim(`agents ${expanded}`)}`);
|
|
78
|
+
});
|
|
79
|
+
cmd
|
|
80
|
+
.command('remove <name>')
|
|
81
|
+
.alias('rm')
|
|
82
|
+
.description('Delete an alias shim')
|
|
83
|
+
.action((name) => {
|
|
84
|
+
const map = readAliases();
|
|
85
|
+
const target = shimPath(name);
|
|
86
|
+
if (!(name in map) && !fs.existsSync(target)) {
|
|
87
|
+
console.error(chalk.red(`No alias named "${name}".`));
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
if (fs.existsSync(target)) {
|
|
91
|
+
if (!isAliasShim(target)) {
|
|
92
|
+
console.error(chalk.red(`Refusing to delete ${target} -- not an agents-cli alias shim.`));
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
fs.unlinkSync(target);
|
|
96
|
+
}
|
|
97
|
+
delete map[name];
|
|
98
|
+
writeAliases(map);
|
|
99
|
+
console.log(`${chalk.yellow('Removed')} alias ${chalk.bold(name)}`);
|
|
100
|
+
});
|
|
101
|
+
cmd
|
|
102
|
+
.command('list')
|
|
103
|
+
.alias('ls')
|
|
104
|
+
.description('Show installed aliases')
|
|
105
|
+
.action(() => {
|
|
106
|
+
const map = readAliases();
|
|
107
|
+
const entries = Object.entries(map);
|
|
108
|
+
if (entries.length === 0) {
|
|
109
|
+
console.log(chalk.gray('No aliases. Try: agents alias add teams'));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const width = entries.reduce((max, [n]) => Math.max(max, n.length), 0);
|
|
113
|
+
for (const [name, expansion] of entries) {
|
|
114
|
+
console.log(` ${chalk.bold(name.padEnd(width))} ${chalk.dim('->')} agents ${expansion}`);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { ALL_BETA_FEATURES, getBetaConfigLocation, getEnabledBetaFeatures, setBetaEnabled, } from '../lib/beta.js';
|
|
3
|
+
function parseFeatures(values) {
|
|
4
|
+
const valid = new Set(ALL_BETA_FEATURES);
|
|
5
|
+
const invalid = values.filter((value) => !valid.has(value));
|
|
6
|
+
if (invalid.length > 0) {
|
|
7
|
+
console.error(chalk.red(`Unknown beta feature: ${invalid.join(', ')}`));
|
|
8
|
+
console.error(chalk.gray(`Valid features: ${ALL_BETA_FEATURES.join(', ')}`));
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
return values;
|
|
12
|
+
}
|
|
13
|
+
export function registerBetaCommands(program) {
|
|
14
|
+
const beta = program
|
|
15
|
+
.command('beta')
|
|
16
|
+
.description('Enable or disable preview features like drive and factory.')
|
|
17
|
+
.addHelpText('after', `
|
|
18
|
+
Examples:
|
|
19
|
+
agents beta list
|
|
20
|
+
agents beta enable drive factory
|
|
21
|
+
agents beta disable drive
|
|
22
|
+
`);
|
|
23
|
+
beta
|
|
24
|
+
.command('list')
|
|
25
|
+
.description('Show available beta features and whether they are enabled.')
|
|
26
|
+
.action(() => {
|
|
27
|
+
const enabled = new Set(getEnabledBetaFeatures());
|
|
28
|
+
const location = getBetaConfigLocation();
|
|
29
|
+
console.log(chalk.bold('Beta Features'));
|
|
30
|
+
for (const feature of ALL_BETA_FEATURES) {
|
|
31
|
+
const state = enabled.has(feature) ? chalk.green('enabled') : chalk.gray('disabled');
|
|
32
|
+
console.log(` ${feature.padEnd(8)} ${state}`);
|
|
33
|
+
}
|
|
34
|
+
console.log('');
|
|
35
|
+
console.log(chalk.gray(`Config: ${location.path}`));
|
|
36
|
+
});
|
|
37
|
+
beta
|
|
38
|
+
.command('enable <features...>')
|
|
39
|
+
.description('Enable one or more beta features.')
|
|
40
|
+
.action((features) => {
|
|
41
|
+
const result = setBetaEnabled(parseFeatures(features), true);
|
|
42
|
+
console.log(chalk.green(`Enabled: ${features.join(', ')}`));
|
|
43
|
+
console.log(chalk.gray(`Saved to ${result.path}`));
|
|
44
|
+
});
|
|
45
|
+
beta
|
|
46
|
+
.command('disable <features...>')
|
|
47
|
+
.description('Disable one or more beta features.')
|
|
48
|
+
.action((features) => {
|
|
49
|
+
const result = setBetaEnabled(parseFeatures(features), false);
|
|
50
|
+
console.log(chalk.green(`Disabled: ${features.join(', ')}`));
|
|
51
|
+
console.log(chalk.gray(`Saved to ${result.path}`));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud dispatch commands for running agent tasks on remote infrastructure.
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified CLI for dispatching, monitoring, and managing tasks
|
|
5
|
+
* across multiple cloud providers (Rush Cloud, Codex Cloud, Factory/Droid).
|
|
6
|
+
* All tasks are tracked locally in a SQLite database for cross-provider listing.
|
|
7
|
+
*/
|
|
8
|
+
import type { Command } from 'commander';
|
|
9
|
+
/** Register the `agents cloud` command tree (run, list, status, logs, cancel, message, providers). */
|
|
10
|
+
export declare function registerCloudCommands(program: Command): void;
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { resolveProvider, getAllProviders, getDefaultProviderId } from '../lib/cloud/registry.js';
|
|
5
|
+
import { insertTask, updateTaskStatus, getTaskById, listTasks as listStoredTasks, listActiveTasks } from '../lib/cloud/store.js';
|
|
6
|
+
import { renderStream } from '../lib/cloud/stream.js';
|
|
7
|
+
/** Print an error message to stderr and exit. */
|
|
8
|
+
function die(msg, code = 1) {
|
|
9
|
+
console.error(chalk.red(msg));
|
|
10
|
+
process.exit(code);
|
|
11
|
+
}
|
|
12
|
+
/** Format an ISO timestamp as a human-readable relative time string. */
|
|
13
|
+
function relTime(iso) {
|
|
14
|
+
const secs = Math.floor((Date.now() - new Date(iso).getTime()) / 1000);
|
|
15
|
+
if (secs < 10)
|
|
16
|
+
return 'just now';
|
|
17
|
+
if (secs < 60)
|
|
18
|
+
return `${secs}s ago`;
|
|
19
|
+
if (secs < 3600)
|
|
20
|
+
return `${Math.floor(secs / 60)} minutes ago`;
|
|
21
|
+
if (secs < 86400)
|
|
22
|
+
return `${Math.floor(secs / 3600)} hours ago`;
|
|
23
|
+
return `${Math.floor(secs / 86400)} days ago`;
|
|
24
|
+
}
|
|
25
|
+
function truncate(s, n) {
|
|
26
|
+
if (s.length <= n)
|
|
27
|
+
return s;
|
|
28
|
+
return s.slice(0, n - 1) + '...';
|
|
29
|
+
}
|
|
30
|
+
/** Return a chalk color function appropriate for the given task status. */
|
|
31
|
+
function statusColor(status) {
|
|
32
|
+
switch (status) {
|
|
33
|
+
case 'queued':
|
|
34
|
+
case 'allocating': return chalk.blue;
|
|
35
|
+
case 'running': return chalk.yellow;
|
|
36
|
+
case 'completed': return chalk.green;
|
|
37
|
+
case 'input_required': return chalk.magenta;
|
|
38
|
+
case 'failed': return chalk.red;
|
|
39
|
+
case 'cancelled': return chalk.gray;
|
|
40
|
+
default: return chalk.white;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function isJsonMode(opts) {
|
|
44
|
+
return Boolean(opts.json) || !process.stdout.isTTY;
|
|
45
|
+
}
|
|
46
|
+
/** Register the `agents cloud` command tree (run, list, status, logs, cancel, message, providers). */
|
|
47
|
+
export function registerCloudCommands(program) {
|
|
48
|
+
const cloud = program
|
|
49
|
+
.command('cloud', { hidden: true })
|
|
50
|
+
.description('Dispatch and manage cloud agent tasks across providers (Rush Cloud, Codex Cloud, Factory).')
|
|
51
|
+
.addHelpText('after', `
|
|
52
|
+
Providers:
|
|
53
|
+
rush Rush Cloud — dispatches against a GitHub repo + branch
|
|
54
|
+
codex Codex Cloud — runs in a pre-built Codex environment
|
|
55
|
+
factory Factory pods — Droid + computer-use targets
|
|
56
|
+
|
|
57
|
+
Examples:
|
|
58
|
+
# Dispatch a quick fix to Rush Cloud and stream the output
|
|
59
|
+
agents cloud run "fix the flaky e2e in apps/web/tests/checkout.spec.ts" --provider rush --repo getrush/rush --branch main
|
|
60
|
+
|
|
61
|
+
# Fire-and-forget (returns the task id, no streaming)
|
|
62
|
+
agents cloud run "bump tailwind to v4 and fix the breaks" --provider rush --repo getrush/rush --no-follow
|
|
63
|
+
|
|
64
|
+
# Multi-repo dispatch: touch both rush and rush-extension in one task
|
|
65
|
+
agents cloud run "rename POST /v1/charge -> /v2/charge across server + extension" --provider rush --repo getrush/rush --repo getrush/rush-extension
|
|
66
|
+
|
|
67
|
+
# Codex Cloud against a saved environment
|
|
68
|
+
agents cloud run "add pytest fixtures for the new billing module" --provider codex --env env_a1b2c3 --agent codex --timeout 30m
|
|
69
|
+
|
|
70
|
+
# Factory pod targeting a specific computer (Droid)
|
|
71
|
+
agents cloud run "QA the new onboarding flow end-to-end" --provider factory --computer mac-mini-1 --agent droid
|
|
72
|
+
|
|
73
|
+
# See every cloud task you've dispatched (most recent first)
|
|
74
|
+
agents cloud list
|
|
75
|
+
|
|
76
|
+
# Inspect a specific task
|
|
77
|
+
agents cloud status tsk_4f2a91
|
|
78
|
+
|
|
79
|
+
# Live-tail logs for a running task
|
|
80
|
+
agents cloud logs tsk_4f2a91
|
|
81
|
+
|
|
82
|
+
# Send a follow-up while the task is in needs-review
|
|
83
|
+
agents cloud message tsk_4f2a91 "Looks good — also update the OpenAPI spec"
|
|
84
|
+
|
|
85
|
+
# Cancel a runaway task
|
|
86
|
+
agents cloud cancel tsk_4f2a91
|
|
87
|
+
|
|
88
|
+
# See which providers are signed in and ready
|
|
89
|
+
agents cloud providers
|
|
90
|
+
`);
|
|
91
|
+
// ── agents cloud run ──────────────────────────────────────────────────
|
|
92
|
+
cloud
|
|
93
|
+
.command('run [prompt]')
|
|
94
|
+
.description('Dispatch a task to a cloud agent.')
|
|
95
|
+
.option('--provider <id>', 'Cloud backend: rush, codex, factory')
|
|
96
|
+
.option('--agent <name>', 'Agent to run: claude, codex, droid')
|
|
97
|
+
.option('--repo <owner/repo>', 'GitHub repository. Repeatable for multi-repo dispatch (Rush Cloud only).', (value, previous) => {
|
|
98
|
+
const acc = Array.isArray(previous) ? previous : [];
|
|
99
|
+
acc.push(value);
|
|
100
|
+
return acc;
|
|
101
|
+
})
|
|
102
|
+
.option('--branch <name>', 'Target git branch')
|
|
103
|
+
.option('-p, --prompt <text>', 'Inline prompt (alternative to positional argument)')
|
|
104
|
+
.option('--timeout <duration>', 'Kill after duration (e.g., 30m, 2h)')
|
|
105
|
+
.option('--model <model>', 'Model override')
|
|
106
|
+
.option('--env <id>', 'Codex Cloud environment ID')
|
|
107
|
+
.option('--computer <name>', 'Factory/Droid computer target')
|
|
108
|
+
.option('--mode <mode>', 'Execution mode (e.g., plan, edit, full)')
|
|
109
|
+
.option('--json', 'Structured JSON output')
|
|
110
|
+
.option('--no-follow', 'Dispatch and exit without streaming output')
|
|
111
|
+
.addHelpText('after', `
|
|
112
|
+
Examples:
|
|
113
|
+
# Rush Cloud
|
|
114
|
+
agents cloud run "fix the flaky test" --provider rush --repo user/repo
|
|
115
|
+
agents cloud run task.md --provider rush --repo org/project --agent codex
|
|
116
|
+
|
|
117
|
+
# Rush Cloud — multi-repo (clones each into /workspace/<owner>/<name>/)
|
|
118
|
+
agents cloud run "refactor shared logger" --provider rush --repo user/rush --repo user/agents
|
|
119
|
+
|
|
120
|
+
# Codex Cloud
|
|
121
|
+
agents cloud run "add auth tests" --provider codex --env env_abc123
|
|
122
|
+
|
|
123
|
+
# Default provider (set in ~/.agents-system/agents.yaml)
|
|
124
|
+
agents cloud run "refactor auth module" --repo user/repo
|
|
125
|
+
`)
|
|
126
|
+
.action(async (positionalPrompt, options) => {
|
|
127
|
+
const json = isJsonMode(options);
|
|
128
|
+
// Resolve prompt: --prompt flag, positional arg, or file
|
|
129
|
+
let prompt = options.prompt || positionalPrompt;
|
|
130
|
+
if (!prompt)
|
|
131
|
+
die('Prompt is required. Pass it as an argument or with --prompt.');
|
|
132
|
+
// If prompt is a file path, read it and tell the user
|
|
133
|
+
if (fs.existsSync(prompt) && fs.statSync(prompt).isFile()) {
|
|
134
|
+
const filePath = prompt;
|
|
135
|
+
const stat = fs.statSync(filePath);
|
|
136
|
+
const sizeKB = (stat.size / 1024).toFixed(1);
|
|
137
|
+
prompt = fs.readFileSync(filePath, 'utf-8').trim();
|
|
138
|
+
if (process.stderr.isTTY) {
|
|
139
|
+
process.stderr.write(chalk.dim(`Reading prompt from ${filePath} (${sizeKB} KB)\n`));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const provider = resolveProvider(options.provider);
|
|
143
|
+
// --repo is repeatable: commander gives us an array via our collector.
|
|
144
|
+
// A single --repo value arrives as a one-element array; keep the legacy
|
|
145
|
+
// singular `repo` field in sync so providers that only know that field
|
|
146
|
+
// still dispatch correctly.
|
|
147
|
+
const repoValues = Array.isArray(options.repo)
|
|
148
|
+
? options.repo
|
|
149
|
+
: options.repo
|
|
150
|
+
? [options.repo]
|
|
151
|
+
: [];
|
|
152
|
+
const dispatchOptions = {
|
|
153
|
+
prompt,
|
|
154
|
+
agent: options.agent,
|
|
155
|
+
repo: repoValues[0],
|
|
156
|
+
repos: repoValues.length > 0 ? repoValues : undefined,
|
|
157
|
+
branch: options.branch,
|
|
158
|
+
timeout: options.timeout,
|
|
159
|
+
model: options.model,
|
|
160
|
+
providerOptions: {},
|
|
161
|
+
};
|
|
162
|
+
if (options.env)
|
|
163
|
+
dispatchOptions.providerOptions.env = options.env;
|
|
164
|
+
if (options.computer)
|
|
165
|
+
dispatchOptions.providerOptions.computer = options.computer;
|
|
166
|
+
if (options.mode)
|
|
167
|
+
dispatchOptions.providerOptions.mode = options.mode;
|
|
168
|
+
// Dispatch
|
|
169
|
+
const spinner = ora({ text: `Dispatching to ${provider.name}...`, stream: process.stderr }).start();
|
|
170
|
+
let task;
|
|
171
|
+
try {
|
|
172
|
+
task = await provider.dispatch(dispatchOptions);
|
|
173
|
+
spinner.succeed(`Task ${task.id} dispatched to ${provider.name}`);
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
spinner.fail('Dispatch failed');
|
|
177
|
+
die(err.message);
|
|
178
|
+
}
|
|
179
|
+
// Persist locally
|
|
180
|
+
insertTask(task);
|
|
181
|
+
if (json) {
|
|
182
|
+
process.stdout.write(JSON.stringify(task) + '\n');
|
|
183
|
+
}
|
|
184
|
+
// Stream output unless --no-follow
|
|
185
|
+
if (options.follow === false)
|
|
186
|
+
return;
|
|
187
|
+
try {
|
|
188
|
+
const result = await renderStream(provider.stream(task.id), { json });
|
|
189
|
+
updateTaskStatus(task.id, result.status, {
|
|
190
|
+
summary: result.summary,
|
|
191
|
+
prUrl: result.prUrl,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
// Stream disconnect is OK — task keeps running
|
|
196
|
+
process.stderr.write(chalk.dim(`\nStream disconnected. Task ${task.id} continues running.\n`));
|
|
197
|
+
process.stderr.write(chalk.dim(`Check status: agents cloud status ${task.id}\n`));
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
// ── agents cloud list ─────────────────────────────────────────────────
|
|
201
|
+
cloud
|
|
202
|
+
.command('list')
|
|
203
|
+
.description('List cloud tasks.')
|
|
204
|
+
.option('--provider <id>', 'Filter by provider')
|
|
205
|
+
.option('--status <status>', 'Filter by status')
|
|
206
|
+
.option('--limit <n>', 'Max results', '20')
|
|
207
|
+
.option('--json', 'JSON output')
|
|
208
|
+
.action(async (options) => {
|
|
209
|
+
const json = isJsonMode(options);
|
|
210
|
+
const providerId = options.provider;
|
|
211
|
+
const status = options.status;
|
|
212
|
+
const limit = parseInt(options.limit, 10) || 20;
|
|
213
|
+
// Auto-refresh tasks still in transient states (queued, allocating, running, input_required).
|
|
214
|
+
// Groups by provider to minimise resolver calls, refreshes each via provider.status().
|
|
215
|
+
const activeTasks = listActiveTasks();
|
|
216
|
+
if (activeTasks.length > 0) {
|
|
217
|
+
const byProvider = new Map();
|
|
218
|
+
for (const t of activeTasks) {
|
|
219
|
+
if (providerId && t.provider !== providerId)
|
|
220
|
+
continue;
|
|
221
|
+
let ids = byProvider.get(t.provider);
|
|
222
|
+
if (!ids) {
|
|
223
|
+
ids = [];
|
|
224
|
+
byProvider.set(t.provider, ids);
|
|
225
|
+
}
|
|
226
|
+
ids.push(t.id);
|
|
227
|
+
}
|
|
228
|
+
const refreshJobs = [];
|
|
229
|
+
for (const [pid, ids] of byProvider) {
|
|
230
|
+
try {
|
|
231
|
+
const provider = resolveProvider(pid);
|
|
232
|
+
for (const id of ids) {
|
|
233
|
+
refreshJobs.push(provider.status(id)
|
|
234
|
+
.then((fresh) => { insertTask(fresh); })
|
|
235
|
+
.catch(() => { }));
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
// provider not configured — skip
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (refreshJobs.length > 0) {
|
|
243
|
+
await Promise.allSettled(refreshJobs);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const tasks = listStoredTasks({ provider: providerId, status, limit });
|
|
247
|
+
if (json) {
|
|
248
|
+
process.stdout.write(JSON.stringify(tasks, null, 2) + '\n');
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (tasks.length === 0) {
|
|
252
|
+
console.log(chalk.dim('No cloud tasks found.'));
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
// Table header
|
|
256
|
+
const header = [
|
|
257
|
+
chalk.dim('ID'.padEnd(14)),
|
|
258
|
+
chalk.dim('Provider'.padEnd(10)),
|
|
259
|
+
chalk.dim('Status'.padEnd(16)),
|
|
260
|
+
chalk.dim('Agent'.padEnd(8)),
|
|
261
|
+
chalk.dim('Prompt'.padEnd(40)),
|
|
262
|
+
chalk.dim('When'),
|
|
263
|
+
].join(' ');
|
|
264
|
+
console.log(header);
|
|
265
|
+
console.log(chalk.dim('-'.repeat(100)));
|
|
266
|
+
for (const t of tasks) {
|
|
267
|
+
const row = [
|
|
268
|
+
t.id.slice(0, 12).padEnd(14),
|
|
269
|
+
t.provider.padEnd(10),
|
|
270
|
+
statusColor(t.status)(t.status.padEnd(16)),
|
|
271
|
+
(t.agent ?? '-').padEnd(8),
|
|
272
|
+
truncate(t.prompt.replace(/\n/g, ' '), 40).padEnd(40),
|
|
273
|
+
chalk.dim(relTime(t.createdAt)),
|
|
274
|
+
].join(' ');
|
|
275
|
+
console.log(row);
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
// ── agents cloud status ───────────────────────────────────────────────
|
|
279
|
+
cloud
|
|
280
|
+
.command('status <id>')
|
|
281
|
+
.description('Show task detail and latest status.')
|
|
282
|
+
.option('--json', 'JSON output')
|
|
283
|
+
.action(async (id, options) => {
|
|
284
|
+
const json = isJsonMode(options);
|
|
285
|
+
// Try local first, then remote
|
|
286
|
+
let task = getTaskById(id);
|
|
287
|
+
const providerId = task?.provider;
|
|
288
|
+
if (providerId) {
|
|
289
|
+
try {
|
|
290
|
+
const provider = resolveProvider(providerId);
|
|
291
|
+
task = await provider.status(id);
|
|
292
|
+
insertTask(task);
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
// Fall back to local cache
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (!task)
|
|
299
|
+
die(`Task ${id} not found.`);
|
|
300
|
+
if (json) {
|
|
301
|
+
process.stdout.write(JSON.stringify(task, null, 2) + '\n');
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
console.log(`${chalk.bold('Task')} ${task.id}`);
|
|
305
|
+
console.log(` ${chalk.dim('Provider:')} ${task.provider}`);
|
|
306
|
+
console.log(` ${chalk.dim('Status:')} ${statusColor(task.status)(task.status)}`);
|
|
307
|
+
if (task.agent)
|
|
308
|
+
console.log(` ${chalk.dim('Agent:')} ${task.agent}`);
|
|
309
|
+
if (task.repo)
|
|
310
|
+
console.log(` ${chalk.dim('Repo:')} ${task.repo}`);
|
|
311
|
+
if (task.branch)
|
|
312
|
+
console.log(` ${chalk.dim('Branch:')} ${task.branch}`);
|
|
313
|
+
if (task.prUrl)
|
|
314
|
+
console.log(` ${chalk.dim('PR:')} ${task.prUrl}`);
|
|
315
|
+
console.log(` ${chalk.dim('Prompt:')} ${truncate(task.prompt.replace(/\n/g, ' '), 80)}`);
|
|
316
|
+
console.log(` ${chalk.dim('Created:')} ${relTime(task.createdAt)}`);
|
|
317
|
+
if (task.summary) {
|
|
318
|
+
console.log(` ${chalk.dim('Summary:')} ${truncate(task.summary.replace(/\n/g, ' '), 120)}`);
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
// ── agents cloud logs ─────────────────────────────────────────────────
|
|
322
|
+
cloud
|
|
323
|
+
.command('logs <id>')
|
|
324
|
+
.description('Stream live output from a cloud task.')
|
|
325
|
+
.option('-f, --follow', 'Follow output (default for running tasks)', true)
|
|
326
|
+
.option('--json', 'JSON event stream')
|
|
327
|
+
.action(async (id, options) => {
|
|
328
|
+
const json = isJsonMode(options);
|
|
329
|
+
const task = getTaskById(id);
|
|
330
|
+
if (!task)
|
|
331
|
+
die(`Task ${id} not found locally. Run 'agents cloud list' first.`);
|
|
332
|
+
const provider = resolveProvider(task.provider);
|
|
333
|
+
try {
|
|
334
|
+
const result = await renderStream(provider.stream(id), { json });
|
|
335
|
+
updateTaskStatus(id, result.status, {
|
|
336
|
+
summary: result.summary,
|
|
337
|
+
prUrl: result.prUrl,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
catch (err) {
|
|
341
|
+
process.stderr.write(chalk.dim(`\nStream ended. ${err.message}\n`));
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
// ── agents cloud cancel ───────────────────────────────────────────────
|
|
345
|
+
cloud
|
|
346
|
+
.command('cancel <id>')
|
|
347
|
+
.description('Cancel a running cloud task.')
|
|
348
|
+
.action(async (id) => {
|
|
349
|
+
const task = getTaskById(id);
|
|
350
|
+
if (!task)
|
|
351
|
+
die(`Task ${id} not found.`);
|
|
352
|
+
const provider = resolveProvider(task.provider);
|
|
353
|
+
try {
|
|
354
|
+
await provider.cancel(id);
|
|
355
|
+
updateTaskStatus(id, 'cancelled');
|
|
356
|
+
console.log(chalk.green(`Task ${id} cancelled.`));
|
|
357
|
+
}
|
|
358
|
+
catch (err) {
|
|
359
|
+
die(err.message);
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
// ── agents cloud message ──────────────────────────────────────────────
|
|
363
|
+
cloud
|
|
364
|
+
.command('message <id> <text>')
|
|
365
|
+
.description('Send a follow-up message to a finished or needs-review task.')
|
|
366
|
+
.action(async (id, text) => {
|
|
367
|
+
const task = getTaskById(id);
|
|
368
|
+
if (!task)
|
|
369
|
+
die(`Task ${id} not found.`);
|
|
370
|
+
const provider = resolveProvider(task.provider);
|
|
371
|
+
try {
|
|
372
|
+
await provider.message(id, text);
|
|
373
|
+
updateTaskStatus(id, 'running');
|
|
374
|
+
console.log(chalk.green(`Message sent to task ${id}. Agent is continuing.`));
|
|
375
|
+
}
|
|
376
|
+
catch (err) {
|
|
377
|
+
die(err.message);
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
// ── agents cloud providers ────────────────────────────────────────────
|
|
381
|
+
cloud
|
|
382
|
+
.command('providers')
|
|
383
|
+
.description('List available cloud providers and their status.')
|
|
384
|
+
.option('--json', 'JSON output')
|
|
385
|
+
.action((options) => {
|
|
386
|
+
const json = isJsonMode(options);
|
|
387
|
+
const providers = getAllProviders();
|
|
388
|
+
const defaultId = getDefaultProviderId();
|
|
389
|
+
if (json) {
|
|
390
|
+
const data = providers.map((p) => ({
|
|
391
|
+
id: p.id,
|
|
392
|
+
name: p.name,
|
|
393
|
+
available: p.capabilities().available,
|
|
394
|
+
default: p.id === defaultId,
|
|
395
|
+
}));
|
|
396
|
+
process.stdout.write(JSON.stringify(data, null, 2) + '\n');
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
console.log(chalk.bold('Cloud Providers\n'));
|
|
400
|
+
for (const p of providers) {
|
|
401
|
+
const available = p.capabilities().available;
|
|
402
|
+
const isDefault = p.id === defaultId;
|
|
403
|
+
const status = available ? chalk.green('ready') : chalk.dim('not configured');
|
|
404
|
+
const defaultTag = isDefault ? chalk.cyan(' (default)') : '';
|
|
405
|
+
console.log(` ${p.id.padEnd(12)} ${p.name.padEnd(20)} ${status}${defaultTag}`);
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slash command management for extending agents with custom markdown commands.
|
|
3
|
+
*
|
|
4
|
+
* Implements `agents commands` -- list, add, remove, sync, prune, and view
|
|
5
|
+
* markdown files that agents invoke mid-session as slash commands. Central
|
|
6
|
+
* storage lives in ~/.agents/commands/ and commands are synced to individual
|
|
7
|
+
* version homes (with TOML conversion for Gemini).
|
|
8
|
+
*/
|
|
1
9
|
import type { Command } from 'commander';
|
|
10
|
+
/** Register the `agents commands` command tree (list, add, remove, sync, prune, view). */
|
|
2
11
|
export declare function registerCommandsCommands(program: Command): void;
|
|
3
|
-
//# sourceMappingURL=commands.d.ts.map
|