@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,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detached worker entry point for background sync. See auto-pull.ts for the public API.
|
|
3
|
+
*
|
|
4
|
+
* For the system repo: fast-forward pull (safe — repo is read-only locally).
|
|
5
|
+
* For the user repo + enabled extras: `git fetch` + write a status marker the foreground
|
|
6
|
+
* CLI surfaces on its next invocation.
|
|
7
|
+
*
|
|
8
|
+
* Per-repo lock files at ~/.agents-system/.fetch/<alias>.lock prevent concurrent fetches.
|
|
9
|
+
* Lock mtime under 5 min => skip (another invocation already in flight).
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from 'fs';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import { simpleGit } from 'simple-git';
|
|
14
|
+
import { tryAutoPull, isGitRepo } from './git.js';
|
|
15
|
+
import { getSystemAgentsDir, getUserAgentsDir, getEnabledExtraRepos, } from './state.js';
|
|
16
|
+
import { lockFilePath, statusFilePath } from './auto-pull.js';
|
|
17
|
+
const LOCK_TTL_MS = 5 * 60 * 1000;
|
|
18
|
+
function ensureFetchDir() {
|
|
19
|
+
const dir = path.join(getSystemAgentsDir(), '.fetch');
|
|
20
|
+
if (!fs.existsSync(dir)) {
|
|
21
|
+
try {
|
|
22
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
catch { /* ignore */ }
|
|
25
|
+
}
|
|
26
|
+
return dir;
|
|
27
|
+
}
|
|
28
|
+
function tryAcquireLock(alias) {
|
|
29
|
+
ensureFetchDir();
|
|
30
|
+
const lock = lockFilePath(alias);
|
|
31
|
+
try {
|
|
32
|
+
const stat = fs.statSync(lock);
|
|
33
|
+
if (Date.now() - stat.mtimeMs < LOCK_TTL_MS)
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
/* no lock yet */
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
fs.writeFileSync(lock, String(process.pid));
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function releaseLock(alias) {
|
|
48
|
+
try {
|
|
49
|
+
fs.unlinkSync(lockFilePath(alias));
|
|
50
|
+
}
|
|
51
|
+
catch { /* ignore */ }
|
|
52
|
+
}
|
|
53
|
+
function writeStatusMarker(marker) {
|
|
54
|
+
ensureFetchDir();
|
|
55
|
+
try {
|
|
56
|
+
fs.writeFileSync(statusFilePath(marker.alias), JSON.stringify(marker));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
/* best-effort */
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function notifyRepo(target) {
|
|
63
|
+
if (!isGitRepo(target.dir))
|
|
64
|
+
return;
|
|
65
|
+
const git = simpleGit(target.dir);
|
|
66
|
+
const remotes = await git.getRemotes(true);
|
|
67
|
+
const origin = remotes.find((r) => r.name === 'origin');
|
|
68
|
+
if (!origin?.refs?.fetch)
|
|
69
|
+
return;
|
|
70
|
+
await git.fetch('origin');
|
|
71
|
+
const status = await git.status();
|
|
72
|
+
if (!status.tracking)
|
|
73
|
+
return;
|
|
74
|
+
writeStatusMarker({
|
|
75
|
+
alias: target.alias,
|
|
76
|
+
dir: target.dir,
|
|
77
|
+
ahead: status.ahead ?? 0,
|
|
78
|
+
behind: status.behind ?? 0,
|
|
79
|
+
branch: status.tracking,
|
|
80
|
+
fetchedAt: Date.now(),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async function processTarget(target) {
|
|
84
|
+
if (!tryAcquireLock(target.alias))
|
|
85
|
+
return;
|
|
86
|
+
try {
|
|
87
|
+
if (target.mode === 'pull') {
|
|
88
|
+
await tryAutoPull(target.dir);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
await notifyRepo(target);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
/* network / git failures are non-fatal */
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
releaseLock(target.alias);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async function main() {
|
|
102
|
+
const targets = [];
|
|
103
|
+
const systemDir = getSystemAgentsDir();
|
|
104
|
+
if (isGitRepo(systemDir)) {
|
|
105
|
+
targets.push({ alias: 'system', dir: systemDir, mode: 'pull' });
|
|
106
|
+
}
|
|
107
|
+
const userDir = getUserAgentsDir();
|
|
108
|
+
if (isGitRepo(userDir)) {
|
|
109
|
+
targets.push({ alias: 'user', dir: userDir, mode: 'notify' });
|
|
110
|
+
}
|
|
111
|
+
for (const extra of getEnabledExtraRepos()) {
|
|
112
|
+
if (isGitRepo(extra.dir)) {
|
|
113
|
+
targets.push({ alias: extra.alias, dir: extra.dir, mode: 'notify' });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
await Promise.all(targets.map(processTarget));
|
|
117
|
+
}
|
|
118
|
+
main().catch(() => {
|
|
119
|
+
/* swallow — detached worker must never crash the parent's terminal */
|
|
120
|
+
process.exit(0);
|
|
121
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background sync for tracked git repos:
|
|
3
|
+
* - System repo (~/.agents-system/) is read-only locally — fast-forward auto-pull is safe.
|
|
4
|
+
* - User repo (~/.agents/) and enabled extras may have local commits, so we only
|
|
5
|
+
* `git fetch` and write a status marker. Next CLI invocation surfaces a one-line
|
|
6
|
+
* notice if upstream is ahead. Pulling is left to the user via `agents repo pull`.
|
|
7
|
+
*
|
|
8
|
+
* Public API:
|
|
9
|
+
* spawnDetachedSync() — fire-and-forget; never blocks the foreground command.
|
|
10
|
+
* printPendingUpdateNotices() — synchronous; reads markers and prints + consumes them.
|
|
11
|
+
*/
|
|
12
|
+
/** Per-repo lock file path. mtime acts as a recency check. */
|
|
13
|
+
export declare function lockFilePath(alias: string): string;
|
|
14
|
+
/** Per-repo status marker path (for user/extras only). */
|
|
15
|
+
export declare function statusFilePath(alias: string): string;
|
|
16
|
+
export interface FetchStatusMarker {
|
|
17
|
+
alias: string;
|
|
18
|
+
dir: string;
|
|
19
|
+
ahead: number;
|
|
20
|
+
behind: number;
|
|
21
|
+
branch: string;
|
|
22
|
+
fetchedAt: number;
|
|
23
|
+
}
|
|
24
|
+
/** Spawn the detached worker. No-op when AGENTS_NO_AUTOPULL=1 is set. */
|
|
25
|
+
export declare function spawnDetachedSync(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Read any pending status markers and print one-line notices for repos that
|
|
28
|
+
* are behind upstream. Markers are deleted after printing so notices don't
|
|
29
|
+
* repeat on every invocation. Synchronous, cheap (small JSON files).
|
|
30
|
+
*/
|
|
31
|
+
export declare function printPendingUpdateNotices(): void;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background sync for tracked git repos:
|
|
3
|
+
* - System repo (~/.agents-system/) is read-only locally — fast-forward auto-pull is safe.
|
|
4
|
+
* - User repo (~/.agents/) and enabled extras may have local commits, so we only
|
|
5
|
+
* `git fetch` and write a status marker. Next CLI invocation surfaces a one-line
|
|
6
|
+
* notice if upstream is ahead. Pulling is left to the user via `agents repo pull`.
|
|
7
|
+
*
|
|
8
|
+
* Public API:
|
|
9
|
+
* spawnDetachedSync() — fire-and-forget; never blocks the foreground command.
|
|
10
|
+
* printPendingUpdateNotices() — synchronous; reads markers and prints + consumes them.
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'fs';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import { spawn } from 'child_process';
|
|
15
|
+
import { fileURLToPath } from 'url';
|
|
16
|
+
import { getSystemAgentsDir } from './state.js';
|
|
17
|
+
/** Where lock files and per-repo status markers live. */
|
|
18
|
+
function fetchStateDir() {
|
|
19
|
+
return path.join(getSystemAgentsDir(), '.fetch');
|
|
20
|
+
}
|
|
21
|
+
/** Per-repo lock file path. mtime acts as a recency check. */
|
|
22
|
+
export function lockFilePath(alias) {
|
|
23
|
+
return path.join(fetchStateDir(), `${alias}.lock`);
|
|
24
|
+
}
|
|
25
|
+
/** Per-repo status marker path (for user/extras only). */
|
|
26
|
+
export function statusFilePath(alias) {
|
|
27
|
+
return path.join(fetchStateDir(), `${alias}.status.json`);
|
|
28
|
+
}
|
|
29
|
+
/** Spawn the detached worker. No-op when AGENTS_NO_AUTOPULL=1 is set. */
|
|
30
|
+
export function spawnDetachedSync() {
|
|
31
|
+
if (process.env.AGENTS_NO_AUTOPULL === '1')
|
|
32
|
+
return;
|
|
33
|
+
// Resolve the worker path relative to the compiled location of this module.
|
|
34
|
+
// After `tsc`, both files land in the same directory under dist/lib/.
|
|
35
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
36
|
+
const workerPath = path.join(here, 'auto-pull-worker.js');
|
|
37
|
+
if (!fs.existsSync(workerPath))
|
|
38
|
+
return;
|
|
39
|
+
try {
|
|
40
|
+
const child = spawn(process.execPath, [workerPath], {
|
|
41
|
+
detached: true,
|
|
42
|
+
stdio: 'ignore',
|
|
43
|
+
env: process.env,
|
|
44
|
+
});
|
|
45
|
+
child.unref();
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
/* best-effort: never break the foreground command */
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Read any pending status markers and print one-line notices for repos that
|
|
53
|
+
* are behind upstream. Markers are deleted after printing so notices don't
|
|
54
|
+
* repeat on every invocation. Synchronous, cheap (small JSON files).
|
|
55
|
+
*/
|
|
56
|
+
export function printPendingUpdateNotices() {
|
|
57
|
+
const dir = fetchStateDir();
|
|
58
|
+
if (!fs.existsSync(dir))
|
|
59
|
+
return;
|
|
60
|
+
let entries = [];
|
|
61
|
+
try {
|
|
62
|
+
entries = fs.readdirSync(dir);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
for (const name of entries) {
|
|
68
|
+
if (!name.endsWith('.status.json'))
|
|
69
|
+
continue;
|
|
70
|
+
const file = path.join(dir, name);
|
|
71
|
+
let marker = null;
|
|
72
|
+
try {
|
|
73
|
+
marker = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
try {
|
|
77
|
+
fs.unlinkSync(file);
|
|
78
|
+
}
|
|
79
|
+
catch { /* ignore */ }
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (!marker || marker.behind <= 0) {
|
|
83
|
+
try {
|
|
84
|
+
fs.unlinkSync(file);
|
|
85
|
+
}
|
|
86
|
+
catch { /* ignore */ }
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const repoLabel = marker.alias === 'user' ? '~/.agents/' : marker.alias;
|
|
90
|
+
process.stderr.write(`agents-cli: ${repoLabel} is ${marker.behind} commit${marker.behind === 1 ? '' : 's'} ` +
|
|
91
|
+
`behind ${marker.branch} — run 'agents repo pull ${marker.alias}' to update.\n`);
|
|
92
|
+
try {
|
|
93
|
+
fs.unlinkSync(file);
|
|
94
|
+
}
|
|
95
|
+
catch { /* ignore */ }
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-opt-in beta feature flags.
|
|
3
|
+
*
|
|
4
|
+
* Preview features live in the git-trackable user repo (~/.agents/agents.yaml)
|
|
5
|
+
* when present, and otherwise fall back to the local system state file
|
|
6
|
+
* (~/.agents-system/agents.yaml). This keeps opt-ins portable for users with a
|
|
7
|
+
* personal agents repo without mixing them into unrelated version capability
|
|
8
|
+
* checks.
|
|
9
|
+
*/
|
|
10
|
+
import type { BetaFeatureName } from './types.js';
|
|
11
|
+
export declare const ALL_BETA_FEATURES: readonly ["drive", "factory"];
|
|
12
|
+
export declare function getEnabledBetaFeatures(): BetaFeatureName[];
|
|
13
|
+
export declare function isBetaEnabled(feature: BetaFeatureName): boolean;
|
|
14
|
+
export declare function getBetaConfigLocation(): {
|
|
15
|
+
scope: 'user' | 'system';
|
|
16
|
+
path: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function setBetaEnabled(features: readonly BetaFeatureName[], enabled: boolean): {
|
|
19
|
+
scope: 'user' | 'system';
|
|
20
|
+
path: string;
|
|
21
|
+
enabledFeatures: BetaFeatureName[];
|
|
22
|
+
};
|
|
23
|
+
export declare function betaEnableHint(feature: BetaFeatureName): string;
|
package/dist/lib/beta.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-opt-in beta feature flags.
|
|
3
|
+
*
|
|
4
|
+
* Preview features live in the git-trackable user repo (~/.agents/agents.yaml)
|
|
5
|
+
* when present, and otherwise fall back to the local system state file
|
|
6
|
+
* (~/.agents-system/agents.yaml). This keeps opt-ins portable for users with a
|
|
7
|
+
* personal agents repo without mixing them into unrelated version capability
|
|
8
|
+
* checks.
|
|
9
|
+
*/
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import { getAgentsDir, getOptionalUserAgentsDir, readMeta, writeMeta } from './state.js';
|
|
12
|
+
import { readManifest, writeManifest } from './manifest.js';
|
|
13
|
+
export const ALL_BETA_FEATURES = ['drive', 'factory'];
|
|
14
|
+
function isBetaFeatureName(value) {
|
|
15
|
+
return typeof value === 'string' && ALL_BETA_FEATURES.includes(value);
|
|
16
|
+
}
|
|
17
|
+
function normalizeEnabledFeatures(input) {
|
|
18
|
+
if (!Array.isArray(input))
|
|
19
|
+
return [];
|
|
20
|
+
const seen = new Set();
|
|
21
|
+
for (const value of input) {
|
|
22
|
+
if (!isBetaFeatureName(value))
|
|
23
|
+
continue;
|
|
24
|
+
seen.add(value);
|
|
25
|
+
}
|
|
26
|
+
return [...seen];
|
|
27
|
+
}
|
|
28
|
+
function readUserManifestBeta() {
|
|
29
|
+
const userAgentsDir = getOptionalUserAgentsDir();
|
|
30
|
+
if (!userAgentsDir)
|
|
31
|
+
return null;
|
|
32
|
+
const manifest = readManifest(userAgentsDir);
|
|
33
|
+
if (!manifest?.beta)
|
|
34
|
+
return null;
|
|
35
|
+
return normalizeEnabledFeatures(manifest.beta.enabled);
|
|
36
|
+
}
|
|
37
|
+
function readSystemMetaBeta() {
|
|
38
|
+
return normalizeEnabledFeatures(readMeta().beta?.enabled);
|
|
39
|
+
}
|
|
40
|
+
export function getEnabledBetaFeatures() {
|
|
41
|
+
return readUserManifestBeta() ?? readSystemMetaBeta();
|
|
42
|
+
}
|
|
43
|
+
export function isBetaEnabled(feature) {
|
|
44
|
+
return getEnabledBetaFeatures().includes(feature);
|
|
45
|
+
}
|
|
46
|
+
export function getBetaConfigLocation() {
|
|
47
|
+
const userAgentsDir = getOptionalUserAgentsDir();
|
|
48
|
+
if (userAgentsDir) {
|
|
49
|
+
return { scope: 'user', path: path.join(userAgentsDir, 'agents.yaml') };
|
|
50
|
+
}
|
|
51
|
+
return { scope: 'system', path: path.join(getAgentsDir(), 'agents.yaml') };
|
|
52
|
+
}
|
|
53
|
+
export function setBetaEnabled(features, enabled) {
|
|
54
|
+
const location = getBetaConfigLocation();
|
|
55
|
+
const next = new Set(getEnabledBetaFeatures());
|
|
56
|
+
for (const feature of features) {
|
|
57
|
+
if (enabled)
|
|
58
|
+
next.add(feature);
|
|
59
|
+
else
|
|
60
|
+
next.delete(feature);
|
|
61
|
+
}
|
|
62
|
+
const enabledFeatures = [...next];
|
|
63
|
+
if (location.scope === 'user') {
|
|
64
|
+
const userAgentsDir = getOptionalUserAgentsDir();
|
|
65
|
+
if (!userAgentsDir) {
|
|
66
|
+
throw new Error('Expected ~/.agents/ to exist while writing beta config.');
|
|
67
|
+
}
|
|
68
|
+
const manifest = readManifest(userAgentsDir) ?? {};
|
|
69
|
+
if (enabledFeatures.length > 0) {
|
|
70
|
+
manifest.beta = { enabled: enabledFeatures };
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
delete manifest.beta;
|
|
74
|
+
}
|
|
75
|
+
writeManifest(userAgentsDir, manifest);
|
|
76
|
+
return { ...location, enabledFeatures };
|
|
77
|
+
}
|
|
78
|
+
const meta = readMeta();
|
|
79
|
+
if (enabledFeatures.length > 0) {
|
|
80
|
+
meta.beta = { enabled: enabledFeatures };
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
delete meta.beta;
|
|
84
|
+
}
|
|
85
|
+
writeMeta(meta);
|
|
86
|
+
return { ...location, enabledFeatures };
|
|
87
|
+
}
|
|
88
|
+
export function betaEnableHint(feature) {
|
|
89
|
+
return `Enable it with: agents beta enable ${feature}`;
|
|
90
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability gate for agent features.
|
|
3
|
+
*
|
|
4
|
+
* Every install path that touches an agent-version (hooks, plugins, MCP,
|
|
5
|
+
* skills, commands) calls `supports(agent, cap, version?)` before writing to
|
|
6
|
+
* the version's config dir. When the capability is unsupported or the version
|
|
7
|
+
* is below `since`, the install path skips the write and surfaces a clear
|
|
8
|
+
* reason instead of silently corrupting an older binary's settings file.
|
|
9
|
+
*/
|
|
10
|
+
import type { AgentId, CapabilityName, CapabilityResult } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* True when the agent supports the capability on at least some version.
|
|
13
|
+
* Useful for filtering UI lists; does not check installed version.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isCapable(agent: AgentId, cap: CapabilityName): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Check whether the given agent (optionally pinned to a specific installed
|
|
18
|
+
* version) supports `cap`. Pass `version` whenever you know it -- omitting it
|
|
19
|
+
* only checks the agent-level flag, which is fine for "is this agent ever
|
|
20
|
+
* capable" filters but NOT for install-time gating.
|
|
21
|
+
*/
|
|
22
|
+
export declare function supports(agent: AgentId, cap: CapabilityName, version?: string): CapabilityResult;
|
|
23
|
+
/**
|
|
24
|
+
* Human-readable explanation for skipping an install. Stable shape so callers
|
|
25
|
+
* can either log it or push it onto an `errors[]` collector.
|
|
26
|
+
*/
|
|
27
|
+
export declare function explainSkip(agent: AgentId, cap: CapabilityName, result: CapabilityResult, version?: string): string;
|
|
28
|
+
/** All agents whose `capabilities[cap]` is anything other than `false`. */
|
|
29
|
+
export declare function capableAgents(cap: CapabilityName): AgentId[];
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability gate for agent features.
|
|
3
|
+
*
|
|
4
|
+
* Every install path that touches an agent-version (hooks, plugins, MCP,
|
|
5
|
+
* skills, commands) calls `supports(agent, cap, version?)` before writing to
|
|
6
|
+
* the version's config dir. When the capability is unsupported or the version
|
|
7
|
+
* is below `since`, the install path skips the write and surfaces a clear
|
|
8
|
+
* reason instead of silently corrupting an older binary's settings file.
|
|
9
|
+
*/
|
|
10
|
+
import { AGENTS } from './agents.js';
|
|
11
|
+
/**
|
|
12
|
+
* Compare semver-like versions ("0.116.0" vs "0.115.9"). Local copy to avoid
|
|
13
|
+
* importing versions.ts (which imports agents.ts, which imports this file).
|
|
14
|
+
*/
|
|
15
|
+
function compareVersions(a, b) {
|
|
16
|
+
const aParts = a.split('.').map((n) => parseInt(n, 10) || 0);
|
|
17
|
+
const bParts = b.split('.').map((n) => parseInt(n, 10) || 0);
|
|
18
|
+
for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
|
|
19
|
+
const aVal = aParts[i] || 0;
|
|
20
|
+
const bVal = bParts[i] || 0;
|
|
21
|
+
if (aVal !== bVal)
|
|
22
|
+
return aVal - bVal;
|
|
23
|
+
}
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
function getCapability(agent, cap) {
|
|
27
|
+
return AGENTS[agent].capabilities[cap];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* True when the agent supports the capability on at least some version.
|
|
31
|
+
* Useful for filtering UI lists; does not check installed version.
|
|
32
|
+
*/
|
|
33
|
+
export function isCapable(agent, cap) {
|
|
34
|
+
const c = getCapability(agent, cap);
|
|
35
|
+
return c !== false;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check whether the given agent (optionally pinned to a specific installed
|
|
39
|
+
* version) supports `cap`. Pass `version` whenever you know it -- omitting it
|
|
40
|
+
* only checks the agent-level flag, which is fine for "is this agent ever
|
|
41
|
+
* capable" filters but NOT for install-time gating.
|
|
42
|
+
*/
|
|
43
|
+
export function supports(agent, cap, version) {
|
|
44
|
+
const c = getCapability(agent, cap);
|
|
45
|
+
if (c === false)
|
|
46
|
+
return { ok: false, reason: 'unsupported' };
|
|
47
|
+
if (c === true)
|
|
48
|
+
return { ok: true };
|
|
49
|
+
if (!version)
|
|
50
|
+
return { ok: true };
|
|
51
|
+
if (c.since && compareVersions(version, c.since) < 0) {
|
|
52
|
+
return { ok: false, reason: 'too_old', need: `>= ${c.since}` };
|
|
53
|
+
}
|
|
54
|
+
if (c.until && compareVersions(version, c.until) >= 0) {
|
|
55
|
+
return { ok: false, reason: 'too_new', need: `< ${c.until}` };
|
|
56
|
+
}
|
|
57
|
+
return { ok: true };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Human-readable explanation for skipping an install. Stable shape so callers
|
|
61
|
+
* can either log it or push it onto an `errors[]` collector.
|
|
62
|
+
*/
|
|
63
|
+
export function explainSkip(agent, cap, result, version) {
|
|
64
|
+
if (result.ok)
|
|
65
|
+
return '';
|
|
66
|
+
const tag = version ? `${agent}@${version}` : agent;
|
|
67
|
+
if (result.reason === 'unsupported')
|
|
68
|
+
return `${tag}: ${cap} not supported`;
|
|
69
|
+
return `${tag}: ${cap} requires ${result.need}`;
|
|
70
|
+
}
|
|
71
|
+
/** All agents whose `capabilities[cap]` is anything other than `false`. */
|
|
72
|
+
export function capableAgents(cap) {
|
|
73
|
+
return Object.keys(AGENTS).filter((id) => isCapable(id, cap));
|
|
74
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex Cloud provider -- wraps the `codex` CLI for cloud dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Delegates to `codex cloud exec/status/list` subcommands, parsing their
|
|
5
|
+
* JSON or text output into the unified CloudTask format. Streaming is
|
|
6
|
+
* emulated via polling since Codex Cloud lacks an SSE endpoint.
|
|
7
|
+
*/
|
|
8
|
+
import type { CloudProvider, CloudTask, CloudTaskStatus, CloudEvent, DispatchOptions, ProviderCapabilities } from './types.js';
|
|
9
|
+
export declare class CodexCloudProvider implements CloudProvider {
|
|
10
|
+
id: "codex";
|
|
11
|
+
name: string;
|
|
12
|
+
private defaultEnv?;
|
|
13
|
+
constructor(config?: {
|
|
14
|
+
env?: string;
|
|
15
|
+
});
|
|
16
|
+
capabilities(): ProviderCapabilities;
|
|
17
|
+
dispatch(options: DispatchOptions): Promise<CloudTask>;
|
|
18
|
+
status(taskId: string): Promise<CloudTask>;
|
|
19
|
+
list(filter?: {
|
|
20
|
+
status?: CloudTaskStatus;
|
|
21
|
+
}): Promise<CloudTask[]>;
|
|
22
|
+
stream(taskId: string): AsyncIterable<CloudEvent>;
|
|
23
|
+
cancel(_taskId: string): Promise<void>;
|
|
24
|
+
message(_taskId: string, _content: string): Promise<void>;
|
|
25
|
+
}
|