@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/exec.js
CHANGED
|
@@ -1,31 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent execution command.
|
|
3
|
+
*
|
|
4
|
+
* Registers the `agents run` command which spawns agent CLIs interactively
|
|
5
|
+
* or headlessly. Supports profile resolution, version rotation, secrets
|
|
6
|
+
* injection, and multi-agent fallback chains for rate-limit resilience.
|
|
7
|
+
*/
|
|
1
8
|
import chalk from 'chalk';
|
|
2
9
|
import { buildExecCommand, parseExecEnv, execAgent, runWithFallback, AGENT_COMMANDS, } from '../lib/exec.js';
|
|
10
|
+
import { profileExists, resolveProfileForRun } from '../lib/profiles.js';
|
|
11
|
+
import { readBundle, resolveBundleEnv } from '../lib/secrets/bundles.js';
|
|
12
|
+
import { getConfiguredRunStrategy, normalizeRunStrategy, resolveRunVersion, RUN_STRATEGIES, } from '../lib/rotate.js';
|
|
13
|
+
import { resolveVersionAlias } from '../lib/versions.js';
|
|
3
14
|
const VALID_AGENTS = Object.keys(AGENT_COMMANDS);
|
|
15
|
+
/** Type guard that narrows a string to a known AgentId. */
|
|
4
16
|
function isValidAgent(agent) {
|
|
5
17
|
return VALID_AGENTS.includes(agent);
|
|
6
18
|
}
|
|
19
|
+
/** Build a one-line banner describing which version the strategy picked. */
|
|
20
|
+
function formatRotationBanner(result, verb = 'balanced') {
|
|
21
|
+
const { picked, healthy, excluded } = result;
|
|
22
|
+
const label = picked.email ? `${picked.email} · ${picked.agent}@${picked.version}` : `${picked.agent}@${picked.version}`;
|
|
23
|
+
const ratio = `${healthy.length} of ${healthy.length + excluded.length} healthy`;
|
|
24
|
+
return `[agents] ${verb} picked ${label} (${ratio})`;
|
|
25
|
+
}
|
|
26
|
+
/** Register the `agents run <agent> [prompt]` command. */
|
|
7
27
|
export function registerRunCommand(program) {
|
|
8
28
|
program
|
|
9
|
-
.command('run <agent>
|
|
10
|
-
.description('Execute an agent
|
|
29
|
+
.command('run <agent> [prompt]')
|
|
30
|
+
.description('Execute an agent. Pass a prompt for headless runs; omit it to launch the agent interactively.')
|
|
11
31
|
.option('-m, --mode <mode>', 'How much the agent can do: plan (read-only), edit (can write files), full (writes + all permissions)', 'plan')
|
|
12
32
|
.option('-e, --effort <effort>', 'Reasoning effort: low | medium | high | xhigh | max | auto (claude and codex only)', 'auto')
|
|
13
33
|
.option('--model <model>', 'Override the model directly (e.g., claude-opus-4-6)')
|
|
14
34
|
.option('--env <key=value>', 'Pass environment variable to the agent (repeatable, e.g., --env DEBUG=1 --env API_KEY=xyz)', (val, prev) => [...prev, val], [])
|
|
35
|
+
.option('--secrets <bundle>', 'Inject a secrets bundle (repeatable). Values resolve from macOS Keychain at run time. See `agents secrets`.', (val, prev) => [...prev, val], [])
|
|
15
36
|
.option('--cwd <dir>', 'Working directory for the agent (defaults to current directory)')
|
|
16
37
|
.option('--add-dir <dir>', 'Grant access to an additional directory outside the project (Claude only, repeatable)', (val, prev) => [...prev, val], [])
|
|
17
38
|
.option('--json', 'Stream events as JSON lines (for parsing by other tools)')
|
|
18
39
|
.option('--headless', 'Non-interactive mode (default for run)', true)
|
|
40
|
+
.option('-i, --interactive', 'Force interactive mode even when a prompt is provided')
|
|
19
41
|
.option('--session-id <id>', 'Resume a previous conversation (Claude only)')
|
|
20
42
|
.option('--verbose', 'Show detailed execution logs')
|
|
21
43
|
.option('--timeout <duration>', 'Kill the agent after this duration (e.g., 30m, 1h, 2h30m)')
|
|
22
44
|
.option('--fallback <agents>', 'Comma-separated agents to try on rate-limit failure. Each entry accepts an optional @version pin (e.g., codex@0.116.0,gemini). The primary runs first; if it exits with a rate-limit error, the next agent picks up via /continue handoff.')
|
|
45
|
+
.option('-b, --balanced', 'Shortcut for --strategy balanced. Ignored when @version is pinned.')
|
|
46
|
+
.option('--strategy <strategy>', 'Version/account selection strategy: pinned | available | balanced. Defaults to run.<agent>.strategy, then pinned. (Legacy `rotate` accepted as alias for `balanced`.)')
|
|
47
|
+
.option('--acp', 'Route through the Agent Client Protocol instead of direct exec. Supported for gemini, claude (via @zed-industries/claude-code-acp adapter). Unified event stream; emits ndjson when --json.')
|
|
23
48
|
.addHelpText('after', `
|
|
49
|
+
Modes:
|
|
50
|
+
With a prompt -> headless (pipes output, no TTY, exits when the agent finishes).
|
|
51
|
+
Without a prompt -> interactive (launches the agent's TUI; stdio is fully inherited).
|
|
52
|
+
|
|
53
|
+
Run strategy:
|
|
54
|
+
pinned Use the workspace/global pinned version from agents.yaml.
|
|
55
|
+
available Use the pinned version if it has usage available; otherwise switch
|
|
56
|
+
to another signed-in version with usage available.
|
|
57
|
+
balanced Distribute traffic across healthy accounts using weighted random
|
|
58
|
+
by remaining capacity — fresher accounts get more, near-exhausted
|
|
59
|
+
ones get less. Avoids bursting any single account.
|
|
60
|
+
Configure with run.<agent>.strategy in agents.yaml, or override with
|
|
61
|
+
--strategy. --balanced is kept as a shortcut for --strategy balanced.
|
|
62
|
+
Legacy "rotate" is accepted as an alias for "balanced".
|
|
63
|
+
Ignored when @version is pinned, when a profile is used, or with --fallback.
|
|
64
|
+
|
|
24
65
|
Examples:
|
|
25
|
-
#
|
|
26
|
-
agents run claude
|
|
66
|
+
# Interactive with the pinned default version
|
|
67
|
+
agents run claude
|
|
68
|
+
|
|
69
|
+
# Interactive, distribute load across healthy accounts
|
|
70
|
+
agents run claude --strategy balanced
|
|
71
|
+
|
|
72
|
+
# Headless, switch away from the pinned version when usage is unavailable
|
|
73
|
+
agents run claude "summarize recent git commits" --mode plan --strategy available
|
|
27
74
|
|
|
28
|
-
#
|
|
75
|
+
# Pin a specific version (rotation ignored)
|
|
29
76
|
agents run codex@0.116.0 "fix linting errors in src/" --mode edit
|
|
30
77
|
|
|
31
78
|
# Full autonomy with maximum reasoning for a complex task
|
|
@@ -40,20 +87,91 @@ Examples:
|
|
|
40
87
|
# Auto-fallback to codex then gemini if claude hits a rate limit
|
|
41
88
|
agents run claude "refactor auth module" --mode edit --fallback codex,gemini
|
|
42
89
|
|
|
90
|
+
# Inject a named secrets bundle (keychain-backed)
|
|
91
|
+
agents run claude "charge a test card" --secrets prod-stripe
|
|
92
|
+
|
|
43
93
|
# Pin fallback versions: primary claude@2.0.65, fallback codex@0.116.0 then gemini
|
|
44
94
|
agents run claude@2.0.65 "deep refactor" --fallback codex@0.116.0,gemini
|
|
45
|
-
|
|
46
|
-
Note: 'agents run' executes non-interactively (no TTY). To work interactively with
|
|
47
|
-
the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
|
|
48
95
|
`)
|
|
49
96
|
.action(async (agentSpec, prompt, options) => {
|
|
50
97
|
// Parse agent@version
|
|
51
|
-
const [
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
98
|
+
const [rawAgent, rawVersion] = agentSpec.split('@');
|
|
99
|
+
let agent;
|
|
100
|
+
let version = rawVersion || undefined;
|
|
101
|
+
let profileEnv;
|
|
102
|
+
let fromProfile = false;
|
|
103
|
+
if (isValidAgent(rawAgent)) {
|
|
104
|
+
agent = rawAgent;
|
|
105
|
+
}
|
|
106
|
+
else if (profileExists(rawAgent)) {
|
|
107
|
+
// Not a known agent id, but a profile by this name exists. Profiles
|
|
108
|
+
// bind (host agent, version, env overrides, keychain-backed auth)
|
|
109
|
+
// so Chinese models (Kimi, DeepSeek, Qwen, GLM) can run inside
|
|
110
|
+
// Claude Code without a local proxy.
|
|
111
|
+
try {
|
|
112
|
+
const resolved = resolveProfileForRun(rawAgent);
|
|
113
|
+
agent = resolved.agent;
|
|
114
|
+
if (!version)
|
|
115
|
+
version = resolved.version;
|
|
116
|
+
profileEnv = resolved.env;
|
|
117
|
+
fromProfile = true;
|
|
118
|
+
process.stderr.write(chalk.gray(`Resolved profile '${resolved.profileName}' -> ${agent}${version ? `@${version}` : ''}\n`));
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
console.error(chalk.red(err.message));
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.error(chalk.red(`Unknown agent: ${rawAgent}`));
|
|
127
|
+
console.error(chalk.gray(`Available agents: ${VALID_AGENTS.join(', ')}`));
|
|
128
|
+
console.error(chalk.gray(`Or add a profile: agents profiles add <name>`));
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
version = resolveVersionAlias(agent, version);
|
|
132
|
+
const cwd = options.cwd ?? process.cwd();
|
|
133
|
+
const configuredStrategy = getConfiguredRunStrategy(agent, cwd);
|
|
134
|
+
const explicitStrategy = options.strategy ? normalizeRunStrategy(options.strategy) : null;
|
|
135
|
+
if (options.strategy && !explicitStrategy) {
|
|
136
|
+
console.error(chalk.red(`Invalid strategy: ${options.strategy}. Use ${RUN_STRATEGIES.join(', ')}.`));
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
if (options.balanced && explicitStrategy && explicitStrategy !== 'balanced') {
|
|
140
|
+
console.error(chalk.red('--balanced conflicts with --strategy. Use one strategy override.'));
|
|
55
141
|
process.exit(1);
|
|
56
142
|
}
|
|
143
|
+
const strategy = options.balanced ? 'balanced' : explicitStrategy ?? configuredStrategy;
|
|
144
|
+
// Strategy only applies to bare agent invocations. Explicit @version,
|
|
145
|
+
// profiles, and fallback chains already define their execution target.
|
|
146
|
+
if (strategy !== 'pinned' || options.balanced || explicitStrategy) {
|
|
147
|
+
if (version) {
|
|
148
|
+
process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} ignored: version ${version} is pinned\n`));
|
|
149
|
+
}
|
|
150
|
+
else if (fromProfile) {
|
|
151
|
+
process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} ignored: profile pins its own version/auth\n`));
|
|
152
|
+
}
|
|
153
|
+
else if (options.fallback) {
|
|
154
|
+
process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} ignored: --fallback pins versions directly\n`));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
try {
|
|
158
|
+
const resolved = await resolveRunVersion(agent, strategy, cwd);
|
|
159
|
+
if (resolved.version) {
|
|
160
|
+
version = resolved.version;
|
|
161
|
+
if (resolved.rotation) {
|
|
162
|
+
const banner = formatRotationBanner(resolved.rotation, strategy);
|
|
163
|
+
process.stderr.write(chalk.gray(banner + '\n'));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} found no usable ${agent} version; falling back to defaults\n`));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
process.stderr.write(chalk.yellow(`[agents] strategy ${strategy} skipped: ${err.message}\n`));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
57
175
|
const mode = options.mode;
|
|
58
176
|
if (!['plan', 'edit', 'full'].includes(mode)) {
|
|
59
177
|
console.error(chalk.red(`Invalid mode: ${mode}. Use 'plan', 'edit', or 'full'`));
|
|
@@ -64,18 +182,40 @@ the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
|
|
|
64
182
|
console.error(chalk.red(`Invalid effort: ${effort}. Use 'low', 'medium', 'high', 'xhigh', 'max', or 'auto'`));
|
|
65
183
|
process.exit(1);
|
|
66
184
|
}
|
|
67
|
-
let
|
|
185
|
+
let userEnv;
|
|
68
186
|
try {
|
|
69
|
-
|
|
187
|
+
userEnv = parseExecEnv(options.env);
|
|
70
188
|
}
|
|
71
189
|
catch (err) {
|
|
72
190
|
console.error(chalk.red(err.message));
|
|
73
191
|
process.exit(1);
|
|
74
192
|
}
|
|
193
|
+
// Resolve --secrets bundles in flag order. Later bundles override earlier
|
|
194
|
+
// ones. Any resolution failure (missing keychain item, blocked exec ref)
|
|
195
|
+
// aborts before spawn so the agent never sees a partial env.
|
|
196
|
+
let secretsEnv = {};
|
|
197
|
+
for (const bundleName of options.secrets) {
|
|
198
|
+
try {
|
|
199
|
+
const bundle = readBundle(bundleName);
|
|
200
|
+
secretsEnv = { ...secretsEnv, ...resolveBundleEnv(bundle) };
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
console.error(chalk.red(err.message));
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Merge order (later wins): profile env < secrets bundles < --env K=V.
|
|
208
|
+
// Profile carries provider auth; secrets bundles carry user-defined
|
|
209
|
+
// values; --env is the per-invocation override.
|
|
210
|
+
const hasOverrides = profileEnv || options.secrets.length > 0 || userEnv;
|
|
211
|
+
const env = hasOverrides
|
|
212
|
+
? { ...(profileEnv ?? {}), ...secretsEnv, ...(userEnv ?? {}) }
|
|
213
|
+
: undefined;
|
|
75
214
|
const execOptions = {
|
|
76
215
|
agent,
|
|
77
216
|
version,
|
|
78
217
|
prompt,
|
|
218
|
+
interactive: options.interactive,
|
|
79
219
|
mode,
|
|
80
220
|
effort,
|
|
81
221
|
cwd: options.cwd,
|
|
@@ -88,8 +228,22 @@ the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
|
|
|
88
228
|
timeout: options.timeout,
|
|
89
229
|
env,
|
|
90
230
|
};
|
|
231
|
+
if (options.interactive) {
|
|
232
|
+
if (options.fallback) {
|
|
233
|
+
console.error(chalk.red('--interactive is not compatible with --fallback. Fallback only works for headless prompt runs.'));
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
if (options.acp) {
|
|
237
|
+
console.error(chalk.red('--interactive is not compatible with --acp. ACP is a headless protocol.'));
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
91
241
|
const fallback = [];
|
|
92
242
|
if (options.fallback) {
|
|
243
|
+
if (prompt === undefined) {
|
|
244
|
+
console.error(chalk.red('--fallback requires a prompt. Fallback hands off headless runs only — interactive sessions can\'t be resumed on a different CLI.'));
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
93
247
|
const entries = options.fallback.split(',').map(s => s.trim()).filter(Boolean);
|
|
94
248
|
for (const entry of entries) {
|
|
95
249
|
const [fbAgent, fbVersion] = entry.split('@');
|
|
@@ -102,16 +256,50 @@ the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
|
|
|
102
256
|
console.error(chalk.red(`Fallback cannot include the primary agent (${agent}). Rate-limit fallback only helps when switching providers.`));
|
|
103
257
|
process.exit(1);
|
|
104
258
|
}
|
|
105
|
-
fallback.push({ agent: fbAgent, version: fbVersion || undefined });
|
|
259
|
+
fallback.push({ agent: fbAgent, version: resolveVersionAlias(fbAgent, fbVersion || undefined) });
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (options.acp) {
|
|
263
|
+
if (prompt === undefined) {
|
|
264
|
+
console.error(chalk.red('--acp requires a prompt. ACP is a programmatic protocol; interactive TUI sessions still use the native CLI.'));
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
if (fallback.length > 0) {
|
|
268
|
+
console.error(chalk.red('--acp is not compatible with --fallback yet. Drop one.'));
|
|
269
|
+
process.exit(1);
|
|
270
|
+
}
|
|
271
|
+
const { supportsAcp } = await import('../lib/acp/harnesses.js');
|
|
272
|
+
if (!supportsAcp(agent)) {
|
|
273
|
+
console.error(chalk.red(`Agent '${agent}' does not support ACP. Drop --acp to use direct exec.`));
|
|
274
|
+
process.exit(1);
|
|
275
|
+
}
|
|
276
|
+
const { runAcpHeadless } = await import('../lib/acp/run.js');
|
|
277
|
+
try {
|
|
278
|
+
const exitCode = await runAcpHeadless({
|
|
279
|
+
agent,
|
|
280
|
+
prompt,
|
|
281
|
+
cwd: options.cwd ?? process.cwd(),
|
|
282
|
+
mode,
|
|
283
|
+
json: options.json ?? false,
|
|
284
|
+
});
|
|
285
|
+
process.exit(exitCode);
|
|
286
|
+
}
|
|
287
|
+
catch (err) {
|
|
288
|
+
console.error(chalk.red(`ACP run failed for ${agent}: ${err.message}`));
|
|
289
|
+
process.exit(1);
|
|
106
290
|
}
|
|
107
291
|
}
|
|
108
|
-
// Show what we're running (stderr so stdout stays clean for piping)
|
|
109
292
|
const cmd = buildExecCommand(execOptions);
|
|
110
293
|
process.stderr.write(chalk.gray(`Running: ${cmd.join(' ')}\n\n`));
|
|
111
294
|
try {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
295
|
+
let exitCode;
|
|
296
|
+
if (fallback.length > 0) {
|
|
297
|
+
// fallback requires a prompt — enforced above, narrow the type here.
|
|
298
|
+
exitCode = await runWithFallback({ ...execOptions, prompt: prompt, fallback });
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
exitCode = await execAgent(execOptions);
|
|
302
|
+
}
|
|
115
303
|
process.exit(exitCode);
|
|
116
304
|
}
|
|
117
305
|
catch (err) {
|
|
@@ -120,4 +308,3 @@ the agent, launch it directly (e.g., 'claude', 'codex') instead of using 'run'.
|
|
|
120
308
|
}
|
|
121
309
|
});
|
|
122
310
|
}
|
|
123
|
-
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Software Factory CLI -- thin client over `prix/factory/service`.
|
|
3
|
+
*
|
|
4
|
+
* One verb today:
|
|
5
|
+
*
|
|
6
|
+
* agents factory submit <linear-ref> POST /factory/submit
|
|
7
|
+
*
|
|
8
|
+
* Everything else (planner pod, worker dispatch, PR-merged/CI-failed
|
|
9
|
+
* webhooks, retry caps, heartbeat reaper) lives server-side in
|
|
10
|
+
* `agents/prix/factory/service/src/factory.ts`, driven by the
|
|
11
|
+
* `factory-tick` k8s CronJob. The laptop is optional after submit.
|
|
12
|
+
*
|
|
13
|
+
* Future verbs (list / status / tail / cancel / message) are intentionally
|
|
14
|
+
* deferred until the matching server endpoints land; they'll be thin
|
|
15
|
+
* clients too. No supervisor, ledger, oracle, or `~/.agents/factory/`
|
|
16
|
+
* registry on the laptop -- ever.
|
|
17
|
+
*/
|
|
18
|
+
import type { Command } from 'commander';
|
|
19
|
+
export declare function registerFactoryCommands(program: Command): void;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { homedir } from 'os';
|
|
5
|
+
import { betaEnableHint, isBetaEnabled } from '../lib/beta.js';
|
|
6
|
+
const FACTORY_URL = process.env.FACTORY_FLOOR_URL ?? 'https://agents.427yosemite.com';
|
|
7
|
+
function die(msg, code = 1) {
|
|
8
|
+
console.error(chalk.red(msg));
|
|
9
|
+
process.exit(code);
|
|
10
|
+
}
|
|
11
|
+
function readRushToken() {
|
|
12
|
+
const userYaml = path.join(homedir(), '.rush', 'user.yaml');
|
|
13
|
+
if (!fs.existsSync(userYaml)) {
|
|
14
|
+
die('Not logged in to Rush. Run `rush login` first.');
|
|
15
|
+
}
|
|
16
|
+
const raw = fs.readFileSync(userYaml, 'utf-8');
|
|
17
|
+
const match = raw.match(/access_token:\s*([^\s#]+)/);
|
|
18
|
+
if (!match) {
|
|
19
|
+
die('No session token in ~/.rush/user.yaml. Run `rush login` first.');
|
|
20
|
+
}
|
|
21
|
+
return match[1].replace(/^['"]|['"]$/g, '');
|
|
22
|
+
}
|
|
23
|
+
async function postFactorySubmit(ref) {
|
|
24
|
+
const token = readRushToken();
|
|
25
|
+
const res = await fetch(`${FACTORY_URL}/factory/submit`, {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
headers: {
|
|
28
|
+
'Authorization': `Bearer ${token}`,
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
},
|
|
31
|
+
body: JSON.stringify({ ref }),
|
|
32
|
+
});
|
|
33
|
+
if (!res.ok) {
|
|
34
|
+
const body = await res.text().catch(() => '');
|
|
35
|
+
die(`Factory submit failed (${res.status}): ${body.slice(0, 400)}`);
|
|
36
|
+
}
|
|
37
|
+
return res.json();
|
|
38
|
+
}
|
|
39
|
+
export function registerFactoryCommands(program) {
|
|
40
|
+
const enabled = isBetaEnabled('factory');
|
|
41
|
+
const factory = program
|
|
42
|
+
.command('factory', { hidden: !enabled })
|
|
43
|
+
.description('Software Factory -- submit Linear tickets to the cloud orchestrator.')
|
|
44
|
+
.addHelpText('after', `
|
|
45
|
+
Examples:
|
|
46
|
+
agents factory submit RUSH-2451
|
|
47
|
+
agents factory submit https://linear.app/getrush/issue/RUSH-2451
|
|
48
|
+
`);
|
|
49
|
+
factory.hook('preAction', () => {
|
|
50
|
+
if (enabled)
|
|
51
|
+
return;
|
|
52
|
+
console.error(chalk.red('agents factory is in beta.'));
|
|
53
|
+
console.error(chalk.gray(betaEnableHint('factory')));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
});
|
|
56
|
+
factory
|
|
57
|
+
.command('submit <linear-ref>')
|
|
58
|
+
.description('Submit a Linear issue (RUSH-123 or URL) to the Software Factory.')
|
|
59
|
+
.option('--json', 'Output machine-readable JSON')
|
|
60
|
+
.action(async (ref, opts) => {
|
|
61
|
+
const result = await postFactorySubmit(ref);
|
|
62
|
+
if (opts.json) {
|
|
63
|
+
console.log(JSON.stringify(result, null, 2));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
console.log(chalk.green(`Submitted ${result.linear_identifier} (${result.label})`));
|
|
67
|
+
console.log(` ticket ${result.ticket_id}`);
|
|
68
|
+
console.log(` execution ${result.cloud_execution_id}`);
|
|
69
|
+
console.log(` tail output agents cloud tail ${result.cloud_execution_id}`);
|
|
70
|
+
});
|
|
71
|
+
}
|
package/dist/commands/fork.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository fork command.
|
|
3
|
+
*
|
|
4
|
+
* Registers the `agents fork` command which forks the default system
|
|
5
|
+
* config repo to the user's GitHub account, reconfigures remotes
|
|
6
|
+
* (origin -> user fork, upstream -> system repo), and pushes.
|
|
7
|
+
*/
|
|
1
8
|
import type { Command } from 'commander';
|
|
9
|
+
/** Register the `agents fork` command. */
|
|
2
10
|
export declare function registerForkCommand(program: Command): void;
|
|
3
|
-
//# sourceMappingURL=fork.d.ts.map
|
package/dist/commands/fork.js
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository fork command.
|
|
3
|
+
*
|
|
4
|
+
* Registers the `agents fork` command which forks the default system
|
|
5
|
+
* config repo to the user's GitHub account, reconfigures remotes
|
|
6
|
+
* (origin -> user fork, upstream -> system repo), and pushes.
|
|
7
|
+
*/
|
|
1
8
|
import chalk from 'chalk';
|
|
2
9
|
import ora from 'ora';
|
|
3
10
|
import { getAgentsDir, ensureAgentsDir } from '../lib/state.js';
|
|
4
11
|
import { isGitRepo, isSystemRepoOrigin, getGitHubUsername, hasLocalChanges, setUpstreamRemote, setRemoteUrl, getRemoteUrl, } from '../lib/git.js';
|
|
5
12
|
import { DEFAULT_SYSTEM_REPO, systemRepoSlug } from '../lib/types.js';
|
|
6
13
|
import { isPromptCancelled } from './utils.js';
|
|
14
|
+
/** Register the `agents fork` command. */
|
|
7
15
|
export function registerForkCommand(program) {
|
|
8
16
|
program
|
|
9
17
|
.command('fork')
|
|
@@ -66,14 +74,14 @@ Requirements:
|
|
|
66
74
|
spinner.succeed(`Logged in as ${username}`);
|
|
67
75
|
// Fork the system repo
|
|
68
76
|
const forkSpinner = ora('Forking system repo...').start();
|
|
69
|
-
const {
|
|
77
|
+
const { execFile } = await import('child_process');
|
|
70
78
|
const { promisify } = await import('util');
|
|
71
|
-
const
|
|
79
|
+
const execFileAsync = promisify(execFile);
|
|
72
80
|
const repoSlug = systemRepoSlug(DEFAULT_SYSTEM_REPO);
|
|
73
81
|
try {
|
|
74
82
|
// gh repo fork creates a fork and optionally clones it
|
|
75
83
|
// We just want to create the fork on GitHub, not clone
|
|
76
|
-
await
|
|
84
|
+
await execFileAsync('gh', ['repo', 'fork', repoSlug, '--clone=false']);
|
|
77
85
|
forkSpinner.succeed(`Forked to ${username}/.agents`);
|
|
78
86
|
}
|
|
79
87
|
catch (err) {
|
|
@@ -136,4 +144,3 @@ Requirements:
|
|
|
136
144
|
}
|
|
137
145
|
});
|
|
138
146
|
}
|
|
139
|
-
//# sourceMappingURL=fork.js.map
|
package/dist/commands/hooks.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook management commands for automating workflows on agent events.
|
|
3
|
+
*
|
|
4
|
+
* Implements `agents hooks` -- list, add, remove, sync, prune, and view
|
|
5
|
+
* shell scripts that fire on agent lifecycle events (session start, file
|
|
6
|
+
* edit, task completion). Central storage lives in ~/.agents/hooks/ and
|
|
7
|
+
* scripts are synced to individual version homes.
|
|
8
|
+
*/
|
|
1
9
|
import type { Command } from 'commander';
|
|
10
|
+
/** Register the `agents hooks` command tree (list, add, remove, sync, prune, view). */
|
|
2
11
|
export declare function registerHooksCommands(program: Command): void;
|
|
3
|
-
//# sourceMappingURL=hooks.d.ts.map
|