@swarmify/agents-cli 1.12.0 → 1.13.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 +33 -0
- package/LICENSE +21 -0
- package/README.md +212 -232
- package/dist/commands/__tests__/sessions.test.js +90 -20
- package/dist/commands/__tests__/sessions.test.js.map +1 -1
- package/dist/commands/cloud.d.ts +11 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +363 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/commands.d.ts +9 -0
- package/dist/commands/commands.d.ts.map +1 -1
- package/dist/commands/commands.js +330 -139
- package/dist/commands/commands.js.map +1 -1
- package/dist/commands/daemon.d.ts +8 -0
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +38 -222
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/drive.d.ts +8 -0
- package/dist/commands/drive.d.ts.map +1 -1
- package/dist/commands/drive.js +70 -7
- package/dist/commands/drive.js.map +1 -1
- package/dist/commands/exec.d.ts +9 -1
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +198 -24
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/factory.d.ts +11 -0
- package/dist/commands/factory.d.ts.map +1 -0
- package/dist/commands/factory.js +445 -0
- package/dist/commands/factory.js.map +1 -0
- package/dist/commands/fork.d.ts +8 -0
- package/dist/commands/fork.d.ts.map +1 -1
- package/dist/commands/fork.js +38 -4
- package/dist/commands/fork.js.map +1 -1
- package/dist/commands/hooks.d.ts +9 -0
- package/dist/commands/hooks.d.ts.map +1 -1
- package/dist/commands/hooks.js +252 -18
- package/dist/commands/hooks.js.map +1 -1
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +137 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +250 -169
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/models.d.ts +11 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +170 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/packages.d.ts +8 -0
- package/dist/commands/packages.d.ts.map +1 -1
- package/dist/commands/packages.js +155 -14
- package/dist/commands/packages.js.map +1 -1
- package/dist/commands/permissions.d.ts +9 -0
- package/dist/commands/permissions.d.ts.map +1 -1
- package/dist/commands/permissions.js +72 -13
- package/dist/commands/permissions.js.map +1 -1
- package/dist/commands/plugins.d.ts +8 -0
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +265 -44
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/profiles.d.ts +12 -0
- package/dist/commands/profiles.d.ts.map +1 -0
- package/dist/commands/profiles.js +255 -0
- package/dist/commands/profiles.js.map +1 -0
- package/dist/commands/pty.d.ts +1 -0
- package/dist/commands/pty.d.ts.map +1 -1
- package/dist/commands/pty.js +133 -22
- package/dist/commands/pty.js.map +1 -1
- package/dist/commands/pull.d.ts +8 -0
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +103 -14
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts +8 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +37 -3
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/refresh-memory.d.ts +16 -0
- package/dist/commands/refresh-memory.d.ts.map +1 -0
- package/dist/commands/refresh-memory.js +52 -0
- package/dist/commands/refresh-memory.js.map +1 -0
- package/dist/commands/resource-view.d.ts +39 -0
- package/dist/commands/resource-view.d.ts.map +1 -0
- package/dist/commands/resource-view.js +197 -0
- package/dist/commands/resource-view.js.map +1 -0
- package/dist/commands/routines.d.ts +8 -0
- package/dist/commands/routines.d.ts.map +1 -1
- package/dist/commands/routines.js +163 -34
- package/dist/commands/routines.js.map +1 -1
- package/dist/commands/rules.d.ts +9 -0
- package/dist/commands/rules.d.ts.map +1 -1
- package/dist/commands/rules.js +83 -12
- package/dist/commands/rules.js.map +1 -1
- package/dist/commands/secrets.d.ts +11 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +352 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/sessions-picker.d.ts +18 -0
- package/dist/commands/sessions-picker.d.ts.map +1 -0
- package/dist/commands/sessions-picker.js +265 -0
- package/dist/commands/sessions-picker.js.map +1 -0
- package/dist/commands/sessions.d.ts +15 -0
- package/dist/commands/sessions.d.ts.map +1 -1
- package/dist/commands/sessions.js +700 -263
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/skills.d.ts +9 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +355 -233
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +7 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/subagents.d.ts +8 -0
- package/dist/commands/subagents.d.ts.map +1 -1
- package/dist/commands/subagents.js +214 -74
- package/dist/commands/subagents.js.map +1 -1
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +15 -7
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/teams-picker.d.ts +18 -0
- package/dist/commands/teams-picker.d.ts.map +1 -0
- package/dist/commands/teams-picker.js +290 -0
- package/dist/commands/teams-picker.js.map +1 -0
- package/dist/commands/teams.d.ts +18 -0
- package/dist/commands/teams.d.ts.map +1 -0
- package/dist/commands/teams.js +1098 -0
- package/dist/commands/teams.js.map +1 -0
- package/dist/commands/utils.d.ts +20 -0
- package/dist/commands/utils.d.ts.map +1 -1
- package/dist/commands/utils.js +34 -0
- package/dist/commands/utils.js.map +1 -1
- package/dist/commands/versions.d.ts +8 -0
- package/dist/commands/versions.d.ts.map +1 -1
- package/dist/commands/versions.js +71 -8
- package/dist/commands/versions.js.map +1 -1
- package/dist/commands/view.d.ts +36 -1
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +375 -15
- package/dist/commands/view.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +136 -51
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/bugfixes.test.js +3 -3
- package/dist/lib/__tests__/bugfixes.test.js.map +1 -1
- package/dist/lib/__tests__/exec.test.js +125 -19
- package/dist/lib/__tests__/exec.test.js.map +1 -1
- package/dist/lib/__tests__/hooks.test.d.ts +2 -0
- package/dist/lib/__tests__/hooks.test.d.ts.map +1 -0
- package/dist/lib/__tests__/hooks.test.js +203 -0
- package/dist/lib/__tests__/hooks.test.js.map +1 -0
- package/dist/lib/__tests__/memory-compile.test.d.ts +2 -0
- package/dist/lib/__tests__/memory-compile.test.d.ts.map +1 -0
- package/dist/lib/__tests__/memory-compile.test.js +95 -0
- package/dist/lib/__tests__/memory-compile.test.js.map +1 -0
- package/dist/lib/__tests__/models.test.d.ts +2 -0
- package/dist/lib/__tests__/models.test.d.ts.map +1 -0
- package/dist/lib/__tests__/models.test.js +239 -0
- package/dist/lib/__tests__/models.test.js.map +1 -0
- package/dist/lib/__tests__/rotate.test.d.ts +2 -0
- package/dist/lib/__tests__/rotate.test.d.ts.map +1 -0
- package/dist/lib/__tests__/rotate.test.js +80 -0
- package/dist/lib/__tests__/rotate.test.js.map +1 -0
- package/dist/lib/__tests__/secrets-bundles.test.d.ts +2 -0
- package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +1 -0
- package/dist/lib/__tests__/secrets-bundles.test.js +104 -0
- package/dist/lib/__tests__/secrets-bundles.test.js.map +1 -0
- package/dist/lib/__tests__/secrets.test.d.ts +2 -0
- package/dist/lib/__tests__/secrets.test.d.ts.map +1 -0
- package/dist/lib/__tests__/secrets.test.js +90 -0
- package/dist/lib/__tests__/secrets.test.js.map +1 -0
- package/dist/lib/__tests__/shims.test.d.ts +2 -0
- package/dist/lib/__tests__/shims.test.d.ts.map +1 -0
- package/dist/lib/__tests__/shims.test.js +39 -0
- package/dist/lib/__tests__/shims.test.js.map +1 -0
- package/dist/lib/__tests__/usage.test.js +4 -2
- package/dist/lib/__tests__/usage.test.js.map +1 -1
- package/dist/lib/__tests__/versions.test.d.ts +2 -0
- package/dist/lib/__tests__/versions.test.d.ts.map +1 -0
- package/dist/lib/__tests__/versions.test.js +63 -0
- package/dist/lib/__tests__/versions.test.js.map +1 -0
- package/dist/lib/agents.d.ts +53 -1
- package/dist/lib/agents.d.ts.map +1 -1
- package/dist/lib/agents.js +178 -37
- package/dist/lib/agents.js.map +1 -1
- package/dist/lib/artifact-actions.d.ts +8 -3
- package/dist/lib/artifact-actions.d.ts.map +1 -1
- package/dist/lib/artifact-actions.js +8 -5
- package/dist/lib/artifact-actions.js.map +1 -1
- package/dist/lib/cloud/codex.d.ts +26 -0
- package/dist/lib/cloud/codex.d.ts.map +1 -0
- package/dist/lib/cloud/codex.js +237 -0
- package/dist/lib/cloud/codex.js.map +1 -0
- package/dist/lib/cloud/factory.d.ts +32 -0
- package/dist/lib/cloud/factory.d.ts.map +1 -0
- package/dist/lib/cloud/factory.js +43 -0
- package/dist/lib/cloud/factory.js.map +1 -0
- package/dist/lib/cloud/registry.d.ts +16 -0
- package/dist/lib/cloud/registry.d.ts.map +1 -0
- package/dist/lib/cloud/registry.js +68 -0
- package/dist/lib/cloud/registry.js.map +1 -0
- package/dist/lib/cloud/rush.d.ts +37 -0
- package/dist/lib/cloud/rush.d.ts.map +1 -0
- package/dist/lib/cloud/rush.js +230 -0
- package/dist/lib/cloud/rush.js.map +1 -0
- package/dist/lib/cloud/rush.test.d.ts +2 -0
- package/dist/lib/cloud/rush.test.d.ts.map +1 -0
- package/dist/lib/cloud/rush.test.js +63 -0
- package/dist/lib/cloud/rush.test.js.map +1 -0
- package/dist/lib/cloud/store.d.ts +23 -0
- package/dist/lib/cloud/store.d.ts.map +1 -0
- package/dist/lib/cloud/store.js +116 -0
- package/dist/lib/cloud/store.js.map +1 -0
- package/dist/lib/cloud/stream.d.ts +24 -0
- package/dist/lib/cloud/stream.d.ts.map +1 -0
- package/dist/lib/cloud/stream.js +145 -0
- package/dist/lib/cloud/stream.js.map +1 -0
- package/dist/lib/cloud/types.d.ts +109 -0
- package/dist/lib/cloud/types.d.ts.map +1 -0
- package/dist/lib/cloud/types.js +33 -0
- package/dist/lib/cloud/types.js.map +1 -0
- package/dist/lib/cloud/types.test.d.ts +2 -0
- package/dist/lib/cloud/types.test.d.ts.map +1 -0
- package/dist/lib/cloud/types.test.js +41 -0
- package/dist/lib/cloud/types.test.js.map +1 -0
- package/dist/lib/commands.d.ts +67 -0
- package/dist/lib/commands.d.ts.map +1 -1
- package/dist/lib/commands.js +161 -2
- package/dist/lib/commands.js.map +1 -1
- package/dist/lib/convert.d.ts +10 -0
- package/dist/lib/convert.d.ts.map +1 -1
- package/dist/lib/convert.js +9 -0
- package/dist/lib/convert.js.map +1 -1
- package/dist/lib/daemon.d.ts +21 -0
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/daemon.js +21 -0
- package/dist/lib/daemon.js.map +1 -1
- package/dist/lib/drive-sync.d.ts +18 -0
- package/dist/lib/drive-sync.d.ts.map +1 -1
- package/dist/lib/drive-sync.js +16 -0
- package/dist/lib/drive-sync.js.map +1 -1
- package/dist/lib/exec.d.ts +64 -3
- package/dist/lib/exec.d.ts.map +1 -1
- package/dist/lib/exec.js +218 -80
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/factory/__tests__/config.test.d.ts +2 -0
- package/dist/lib/factory/__tests__/config.test.d.ts.map +1 -0
- package/dist/lib/factory/__tests__/config.test.js +128 -0
- package/dist/lib/factory/__tests__/config.test.js.map +1 -0
- package/dist/lib/factory/config.d.ts +49 -0
- package/dist/lib/factory/config.d.ts.map +1 -0
- package/dist/lib/factory/config.js +127 -0
- package/dist/lib/factory/config.js.map +1 -0
- package/dist/lib/factory.js +1 -1
- package/dist/lib/factory.js.map +1 -1
- package/dist/lib/git.d.ts +16 -1
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +33 -4
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/help.d.ts +7 -0
- package/dist/lib/help.d.ts.map +1 -1
- package/dist/lib/help.js +3 -0
- package/dist/lib/help.js.map +1 -1
- package/dist/lib/hooks.d.ts +59 -3
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +413 -33
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/ledger/__tests__/local.test.d.ts +2 -0
- package/dist/lib/ledger/__tests__/local.test.d.ts.map +1 -0
- package/dist/lib/ledger/__tests__/local.test.js +177 -0
- package/dist/lib/ledger/__tests__/local.test.js.map +1 -0
- package/dist/lib/ledger/__tests__/sync.test.d.ts +2 -0
- package/dist/lib/ledger/__tests__/sync.test.d.ts.map +1 -0
- package/dist/lib/ledger/__tests__/sync.test.js +117 -0
- package/dist/lib/ledger/__tests__/sync.test.js.map +1 -0
- package/dist/lib/ledger/index.d.ts +18 -0
- package/dist/lib/ledger/index.d.ts.map +1 -0
- package/dist/lib/ledger/index.js +32 -0
- package/dist/lib/ledger/index.js.map +1 -0
- package/dist/lib/ledger/local.d.ts +22 -0
- package/dist/lib/ledger/local.d.ts.map +1 -0
- package/dist/lib/ledger/local.js +333 -0
- package/dist/lib/ledger/local.js.map +1 -0
- package/dist/lib/ledger/r2.d.ts +41 -0
- package/dist/lib/ledger/r2.d.ts.map +1 -0
- package/dist/lib/ledger/r2.js +335 -0
- package/dist/lib/ledger/r2.js.map +1 -0
- package/dist/lib/ledger/sync.d.ts +33 -0
- package/dist/lib/ledger/sync.d.ts.map +1 -0
- package/dist/lib/ledger/sync.js +106 -0
- package/dist/lib/ledger/sync.js.map +1 -0
- package/dist/lib/ledger/types.d.ts +100 -0
- package/dist/lib/ledger/types.d.ts.map +1 -0
- package/dist/lib/ledger/types.js +21 -0
- package/dist/lib/ledger/types.js.map +1 -0
- package/dist/lib/manifest.d.ts +6 -0
- package/dist/lib/manifest.d.ts.map +1 -1
- package/dist/lib/manifest.js +12 -0
- package/dist/lib/manifest.js.map +1 -1
- package/dist/lib/markdown.d.ts.map +1 -1
- package/dist/lib/markdown.js +6 -0
- package/dist/lib/markdown.js.map +1 -1
- package/dist/lib/mcp.d.ts +0 -9
- package/dist/lib/mcp.d.ts.map +1 -1
- package/dist/lib/mcp.js +0 -20
- package/dist/lib/mcp.js.map +1 -1
- package/dist/lib/memory-compile.d.ts +65 -0
- package/dist/lib/memory-compile.d.ts.map +1 -0
- package/dist/lib/memory-compile.js +174 -0
- package/dist/lib/memory-compile.js.map +1 -0
- package/dist/lib/memory.d.ts +8 -0
- package/dist/lib/memory.d.ts.map +1 -1
- package/dist/lib/memory.js +8 -0
- package/dist/lib/memory.js.map +1 -1
- package/dist/lib/models.d.ts +98 -0
- package/dist/lib/models.d.ts.map +1 -0
- package/dist/lib/models.js +728 -0
- package/dist/lib/models.js.map +1 -0
- package/dist/lib/permissions.d.ts +24 -1
- package/dist/lib/permissions.d.ts.map +1 -1
- package/dist/lib/permissions.js +52 -3
- package/dist/lib/permissions.js.map +1 -1
- package/dist/lib/picker.d.ts +27 -0
- package/dist/lib/picker.d.ts.map +1 -0
- package/dist/lib/picker.js +110 -0
- package/dist/lib/picker.js.map +1 -0
- package/dist/lib/plugins.d.ts +22 -0
- package/dist/lib/plugins.d.ts.map +1 -1
- package/dist/lib/plugins.js +114 -0
- package/dist/lib/plugins.js.map +1 -1
- package/dist/lib/profiles-keychain.d.ts +11 -0
- package/dist/lib/profiles-keychain.d.ts.map +1 -0
- package/dist/lib/profiles-keychain.js +14 -0
- package/dist/lib/profiles-keychain.js.map +1 -0
- package/dist/lib/profiles-presets.d.ts +25 -0
- package/dist/lib/profiles-presets.d.ts.map +1 -0
- package/dist/lib/profiles-presets.js +104 -0
- package/dist/lib/profiles-presets.js.map +1 -0
- package/dist/lib/profiles.d.ts +70 -0
- package/dist/lib/profiles.d.ts.map +1 -0
- package/dist/lib/profiles.js +145 -0
- package/dist/lib/profiles.js.map +1 -0
- package/dist/lib/pty-client.d.ts +1 -0
- package/dist/lib/pty-client.d.ts.map +1 -1
- package/dist/lib/pty-client.js.map +1 -1
- package/dist/lib/pty-server.d.ts +5 -0
- package/dist/lib/pty-server.d.ts.map +1 -1
- package/dist/lib/pty-server.js +5 -0
- package/dist/lib/pty-server.js.map +1 -1
- package/dist/lib/registry.d.ts +17 -0
- package/dist/lib/registry.d.ts.map +1 -1
- package/dist/lib/registry.js +17 -0
- package/dist/lib/registry.js.map +1 -1
- package/dist/lib/resources.d.ts +5 -0
- package/dist/lib/resources.d.ts.map +1 -1
- package/dist/lib/resources.js.map +1 -1
- package/dist/lib/rotate.d.ts +58 -0
- package/dist/lib/rotate.d.ts.map +1 -0
- package/dist/lib/rotate.js +93 -0
- package/dist/lib/rotate.js.map +1 -0
- package/dist/lib/routines.d.ts +30 -1
- package/dist/lib/routines.d.ts.map +1 -1
- package/dist/lib/routines.js +31 -4
- package/dist/lib/routines.js.map +1 -1
- package/dist/lib/runner.d.ts +14 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +45 -11
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/sandbox.d.ts +16 -0
- package/dist/lib/sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox.js +19 -2
- package/dist/lib/sandbox.js.map +1 -1
- package/dist/lib/scheduler.d.ts +8 -0
- package/dist/lib/scheduler.d.ts.map +1 -1
- package/dist/lib/scheduler.js +8 -0
- package/dist/lib/scheduler.js.map +1 -1
- package/dist/lib/secrets-bundles.d.ts +38 -0
- package/dist/lib/secrets-bundles.d.ts.map +1 -0
- package/dist/lib/secrets-bundles.js +176 -0
- package/dist/lib/secrets-bundles.js.map +1 -0
- package/dist/lib/secrets.d.ts +53 -0
- package/dist/lib/secrets.d.ts.map +1 -0
- package/dist/lib/secrets.js +140 -0
- package/dist/lib/secrets.js.map +1 -0
- package/dist/lib/session/__tests__/db.test.d.ts +2 -0
- package/dist/lib/session/__tests__/db.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/db.test.js +54 -0
- package/dist/lib/session/__tests__/db.test.js.map +1 -0
- package/dist/lib/session/__tests__/discover.test.js +54 -91
- package/dist/lib/session/__tests__/discover.test.js.map +1 -1
- package/dist/lib/session/__tests__/prompt.test.d.ts +2 -0
- package/dist/lib/session/__tests__/prompt.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/prompt.test.js +44 -0
- package/dist/lib/session/__tests__/prompt.test.js.map +1 -0
- package/dist/lib/session/__tests__/render.test.d.ts +2 -0
- package/dist/lib/session/__tests__/render.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/render.test.js +602 -0
- package/dist/lib/session/__tests__/render.test.js.map +1 -0
- package/dist/lib/session/artifacts.d.ts +15 -0
- package/dist/lib/session/artifacts.d.ts.map +1 -0
- package/dist/lib/session/artifacts.js +86 -0
- package/dist/lib/session/artifacts.js.map +1 -0
- package/dist/lib/session/db.d.ts +140 -0
- package/dist/lib/session/db.d.ts.map +1 -0
- package/dist/lib/session/db.js +599 -0
- package/dist/lib/session/db.js.map +1 -0
- package/dist/lib/session/discover.d.ts +44 -32
- package/dist/lib/session/discover.d.ts.map +1 -1
- package/dist/lib/session/discover.js +418 -464
- package/dist/lib/session/discover.js.map +1 -1
- package/dist/lib/session/parse.d.ts +11 -0
- package/dist/lib/session/parse.d.ts.map +1 -1
- package/dist/lib/session/parse.js +50 -0
- package/dist/lib/session/parse.js.map +1 -1
- package/dist/lib/session/prompt.d.ts +10 -0
- package/dist/lib/session/prompt.d.ts.map +1 -1
- package/dist/lib/session/prompt.js +38 -2
- package/dist/lib/session/prompt.js.map +1 -1
- package/dist/lib/session/prompt.test.d.ts +2 -0
- package/dist/lib/session/prompt.test.d.ts.map +1 -0
- package/dist/lib/session/prompt.test.js +57 -0
- package/dist/lib/session/prompt.test.js.map +1 -0
- package/dist/lib/session/render.d.ts +91 -10
- package/dist/lib/session/render.d.ts.map +1 -1
- package/dist/lib/session/render.js +708 -180
- package/dist/lib/session/render.js.map +1 -1
- package/dist/lib/session/team-filter.d.ts +35 -0
- package/dist/lib/session/team-filter.d.ts.map +1 -0
- package/dist/lib/session/team-filter.js +75 -0
- package/dist/lib/session/team-filter.js.map +1 -0
- package/dist/lib/session/team-filter.test.d.ts +2 -0
- package/dist/lib/session/team-filter.test.d.ts.map +1 -0
- package/dist/lib/session/team-filter.test.js +157 -0
- package/dist/lib/session/team-filter.test.js.map +1 -0
- package/dist/lib/session/types.d.ts +48 -6
- package/dist/lib/session/types.d.ts.map +1 -1
- package/dist/lib/session/types.js +9 -0
- package/dist/lib/session/types.js.map +1 -1
- package/dist/lib/shims.d.ts +101 -2
- package/dist/lib/shims.d.ts.map +1 -1
- package/dist/lib/shims.js +282 -25
- package/dist/lib/shims.js.map +1 -1
- package/dist/lib/skills.d.ts +68 -0
- package/dist/lib/skills.d.ts.map +1 -1
- package/dist/lib/skills.js +267 -1
- package/dist/lib/skills.js.map +1 -1
- package/dist/lib/state.d.ts +41 -2
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +63 -4
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/subagents.d.ts +9 -0
- package/dist/lib/subagents.d.ts.map +1 -1
- package/dist/lib/subagents.js +9 -1
- package/dist/lib/subagents.js.map +1 -1
- package/dist/lib/teams/__tests__/oracle.test.d.ts +2 -0
- package/dist/lib/teams/__tests__/oracle.test.d.ts.map +1 -0
- package/dist/lib/teams/__tests__/oracle.test.js +89 -0
- package/dist/lib/teams/__tests__/oracle.test.js.map +1 -0
- package/dist/lib/teams/__tests__/supervisor.test.d.ts +2 -0
- package/dist/lib/teams/__tests__/supervisor.test.d.ts.map +1 -0
- package/dist/lib/teams/__tests__/supervisor.test.js +179 -0
- package/dist/lib/teams/__tests__/supervisor.test.js.map +1 -0
- package/dist/lib/teams/agents.d.ts +247 -0
- package/dist/lib/teams/agents.d.ts.map +1 -0
- package/dist/lib/teams/agents.js +1244 -0
- package/dist/lib/teams/agents.js.map +1 -0
- package/dist/lib/teams/api.d.ts +91 -0
- package/dist/lib/teams/api.d.ts.map +1 -0
- package/dist/lib/teams/api.js +239 -0
- package/dist/lib/teams/api.js.map +1 -0
- package/dist/lib/teams/cloud.d.ts +11 -0
- package/dist/lib/teams/cloud.d.ts.map +1 -0
- package/dist/lib/teams/cloud.js +169 -0
- package/dist/lib/teams/cloud.js.map +1 -0
- package/dist/lib/teams/debug.d.ts +8 -0
- package/dist/lib/teams/debug.d.ts.map +1 -0
- package/dist/lib/teams/debug.js +12 -0
- package/dist/lib/teams/debug.js.map +1 -0
- package/dist/lib/teams/file_ops.d.ts +13 -0
- package/dist/lib/teams/file_ops.d.ts.map +1 -0
- package/dist/lib/teams/file_ops.js +66 -0
- package/dist/lib/teams/file_ops.js.map +1 -0
- package/dist/lib/teams/index.d.ts +16 -0
- package/dist/lib/teams/index.d.ts.map +1 -0
- package/dist/lib/teams/index.js +15 -0
- package/dist/lib/teams/index.js.map +1 -0
- package/dist/lib/teams/oracle.d.ts +20 -0
- package/dist/lib/teams/oracle.d.ts.map +1 -0
- package/dist/lib/teams/oracle.js +59 -0
- package/dist/lib/teams/oracle.js.map +1 -0
- package/dist/lib/teams/parsers.d.ts +9 -0
- package/dist/lib/teams/parsers.d.ts.map +1 -0
- package/dist/lib/teams/parsers.js +837 -0
- package/dist/lib/teams/parsers.js.map +1 -0
- package/dist/lib/teams/persistence.d.ts +43 -0
- package/dist/lib/teams/persistence.d.ts.map +1 -0
- package/dist/lib/teams/persistence.js +299 -0
- package/dist/lib/teams/persistence.js.map +1 -0
- package/dist/lib/teams/ralph.d.ts +8 -0
- package/dist/lib/teams/ralph.d.ts.map +1 -0
- package/dist/lib/teams/ralph.js +59 -0
- package/dist/lib/teams/ralph.js.map +1 -0
- package/dist/lib/teams/registry.d.ts +18 -0
- package/dist/lib/teams/registry.d.ts.map +1 -0
- package/dist/lib/teams/registry.js +68 -0
- package/dist/lib/teams/registry.js.map +1 -0
- package/dist/lib/teams/summarizer.d.ts +73 -0
- package/dist/lib/teams/summarizer.d.ts.map +1 -0
- package/dist/lib/teams/summarizer.js +780 -0
- package/dist/lib/teams/summarizer.js.map +1 -0
- package/dist/lib/teams/supervisor.d.ts +49 -0
- package/dist/lib/teams/supervisor.d.ts.map +1 -0
- package/dist/lib/teams/supervisor.js +74 -0
- package/dist/lib/teams/supervisor.js.map +1 -0
- package/dist/lib/template.d.ts +8 -5
- package/dist/lib/template.d.ts.map +1 -1
- package/dist/lib/template.js +8 -5
- package/dist/lib/template.js.map +1 -1
- package/dist/lib/types.d.ts +58 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +16 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/usage.d.ts +48 -0
- package/dist/lib/usage.d.ts.map +1 -1
- package/dist/lib/usage.js +106 -14
- package/dist/lib/usage.js.map +1 -1
- package/dist/lib/versions.d.ts +12 -1
- package/dist/lib/versions.d.ts.map +1 -1
- package/dist/lib/versions.js +124 -41
- package/dist/lib/versions.js.map +1 -1
- package/package.json +20 -6
- package/scripts/postinstall.js +1 -1
- package/scripts/rebuild-sqlite.sh +46 -0
- package/dist/commands/sessions.test.d.ts +0 -2
- package/dist/commands/sessions.test.d.ts.map +0 -1
- package/dist/commands/sessions.test.js +0 -53
- package/dist/commands/sessions.test.js.map +0 -1
package/dist/lib/shims.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export declare function promptConflictStrategy(conflictInfos: ConflictInfo[]): P
|
|
|
26
26
|
* Generate the shim script content for an agent.
|
|
27
27
|
*
|
|
28
28
|
* The shim resolves the version in order:
|
|
29
|
-
* 1. .
|
|
29
|
+
* 1. agents.yaml in project root (walk up from $PWD, skip ~/.agents/agents.yaml)
|
|
30
30
|
* 2. ~/.agents/agents.yaml default
|
|
31
31
|
*
|
|
32
32
|
* If version is specified but not installed, auto-installs it.
|
|
@@ -34,6 +34,27 @@ export declare function promptConflictStrategy(conflictInfos: ConflictInfo[]): P
|
|
|
34
34
|
* Config isolation is handled via symlinks:
|
|
35
35
|
* ~/.{agent} -> ~/.agents/versions/{agent}/{version}/home/.{agent}/
|
|
36
36
|
*/
|
|
37
|
+
/**
|
|
38
|
+
* Current shim schema version. Bump whenever `generateShimScript` changes
|
|
39
|
+
* in a way that requires existing on-disk shims to be regenerated (new
|
|
40
|
+
* flags, fixed argument parsing, new hooks, etc.). `isShimCurrent` reads
|
|
41
|
+
* this marker out of existing shims to decide whether to regenerate.
|
|
42
|
+
*
|
|
43
|
+
* History:
|
|
44
|
+
* v1 — initial shim (implicit, no marker).
|
|
45
|
+
* v2 — `--version=...` form in sync/refresh-memory calls; refresh-memory
|
|
46
|
+
* shim hook for non-@-capable agents.
|
|
47
|
+
* v3 — sync/refresh-memory flag renamed `--version` → `--agent-version`
|
|
48
|
+
* so it no longer collides with commander's top-level `--version`.
|
|
49
|
+
* v4 — project version marker changed from `.agents-version` to a
|
|
50
|
+
* root-level `agents.yaml`; shim now skips ~/.agents/agents.yaml
|
|
51
|
+
* when walking up for a project marker.
|
|
52
|
+
*/
|
|
53
|
+
export declare const SHIM_SCHEMA_VERSION = 4;
|
|
54
|
+
/**
|
|
55
|
+
* Generate the full bash shim script for the given agent. The returned string
|
|
56
|
+
* is written to ~/.agents/shims/{cliCommand} and made executable.
|
|
57
|
+
*/
|
|
37
58
|
export declare function generateShimScript(agent: AgentId): string;
|
|
38
59
|
/**
|
|
39
60
|
* Create a shim for an agent.
|
|
@@ -43,11 +64,43 @@ export declare function createShim(agent: AgentId): string;
|
|
|
43
64
|
* Remove the shim for an agent.
|
|
44
65
|
*/
|
|
45
66
|
export declare function removeShim(agent: AgentId): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Current versioned-alias schema. Bump whenever `generateVersionedAliasScript`
|
|
69
|
+
* changes in a way that requires existing on-disk aliases to be regenerated.
|
|
70
|
+
*
|
|
71
|
+
* History:
|
|
72
|
+
* v1 — implicit (no marker); no CLAUDE_CONFIG_DIR export, so direct
|
|
73
|
+
* `claude@X` invocations leaked into ~/.claude (the default version's
|
|
74
|
+
* symlinked home) and `agents view` never saw the login.
|
|
75
|
+
* v2 — emit CLAUDE_CONFIG_DIR for claude aliases so each version has its
|
|
76
|
+
* own isolated config/OAuth slot; stamp a version marker so stale
|
|
77
|
+
* aliases can be detected and regenerated.
|
|
78
|
+
*/
|
|
79
|
+
export declare const VERSIONED_ALIAS_SCHEMA_VERSION = 2;
|
|
46
80
|
/**
|
|
47
81
|
* Generate a versioned alias script that directly execs a specific version.
|
|
48
82
|
* e.g., claude@2.0.65 -> directly runs that version's binary
|
|
49
83
|
*/
|
|
50
84
|
export declare function generateVersionedAliasScript(agent: AgentId, version: string): string;
|
|
85
|
+
/**
|
|
86
|
+
* Read the schema version of an on-disk versioned alias. Returns null if the
|
|
87
|
+
* alias doesn't exist or is a pre-v2 alias (no marker — treated as stale).
|
|
88
|
+
*/
|
|
89
|
+
export declare function readVersionedAliasSchemaVersion(agent: AgentId, version: string): number | null;
|
|
90
|
+
/**
|
|
91
|
+
* True if the on-disk versioned alias matches the current schema version.
|
|
92
|
+
*/
|
|
93
|
+
export declare function isVersionedAliasCurrent(agent: AgentId, version: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Regenerate a versioned alias if missing or stale. Mirrors ensureShimCurrent
|
|
96
|
+
* for the main shim — callers can surface a one-line notice when something
|
|
97
|
+
* was upgraded.
|
|
98
|
+
*/
|
|
99
|
+
export declare function ensureVersionedAliasCurrent(agent: AgentId, version: string): 'created' | 'updated' | 'current';
|
|
100
|
+
/**
|
|
101
|
+
* Get the filesystem path for a versioned alias script.
|
|
102
|
+
*/
|
|
103
|
+
export declare function getVersionedAliasPath(agent: AgentId, version: string): string;
|
|
51
104
|
/**
|
|
52
105
|
* Create a versioned alias for a specific agent version.
|
|
53
106
|
* e.g., claude@2.0.65
|
|
@@ -98,6 +151,34 @@ export declare function switchHomeFileSymlinks(agent: AgentId, version: string):
|
|
|
98
151
|
switched: string[];
|
|
99
152
|
errors: string[];
|
|
100
153
|
};
|
|
154
|
+
/**
|
|
155
|
+
* Claude reads `.claude.json` at `$CLAUDE_CONFIG_DIR/.claude.json`. Our shim
|
|
156
|
+
* points CLAUDE_CONFIG_DIR at `<ver>/home/.claude`, so Claude's real config
|
|
157
|
+
* file lives at `<ver>/home/.claude/.claude.json` (INSIDE), while
|
|
158
|
+
* `switchHomeFileSymlinks` manages `<ver>/home/.claude.json` (OUTSIDE).
|
|
159
|
+
*
|
|
160
|
+
* To keep both views consistent we make INSIDE a symlink to OUTSIDE. Claude's
|
|
161
|
+
* atomic write (`Uf6`) resolves symlinks before the tmp+rename cycle, so the
|
|
162
|
+
* symlink survives across writes and OUTSIDE remains the single source of
|
|
163
|
+
* truth that agents-cli's home-file machinery already manages.
|
|
164
|
+
*
|
|
165
|
+
* This function idempotently reconciles one version:
|
|
166
|
+
* - INSIDE missing: create symlink -> `../.claude.json` (create OUTSIDE if needed).
|
|
167
|
+
* - INSIDE already symlink to OUTSIDE: no-op.
|
|
168
|
+
* - INSIDE is a real file: it's the authoritative auth state (Claude was
|
|
169
|
+
* writing to it). Move its content to OUTSIDE (merging with OUTSIDE,
|
|
170
|
+
* INSIDE wins for `oauthAccount`), then replace INSIDE with the symlink.
|
|
171
|
+
* - Symlink points elsewhere: replace it.
|
|
172
|
+
*/
|
|
173
|
+
export declare function ensureClaudeInsideSymlink(version: string): void;
|
|
174
|
+
/**
|
|
175
|
+
* Apply `ensureClaudeInsideSymlink` to every installed Claude version.
|
|
176
|
+
* Safe to call repeatedly; per-version calls are idempotent.
|
|
177
|
+
*/
|
|
178
|
+
export declare function ensureAllClaudeInsideSymlinks(): {
|
|
179
|
+
migrated: string[];
|
|
180
|
+
errors: string[];
|
|
181
|
+
};
|
|
101
182
|
/**
|
|
102
183
|
* Get the current config symlink target version, if any.
|
|
103
184
|
*/
|
|
@@ -106,6 +187,23 @@ export declare function getConfigSymlinkVersion(agent: AgentId): string | null;
|
|
|
106
187
|
* Check if shim exists for an agent.
|
|
107
188
|
*/
|
|
108
189
|
export declare function shimExists(agent: AgentId): boolean;
|
|
190
|
+
/**
|
|
191
|
+
* Read the schema version embedded in an existing on-disk shim. Returns
|
|
192
|
+
* `null` if the shim doesn't exist or has no version marker (pre-v2 shim).
|
|
193
|
+
*/
|
|
194
|
+
export declare function readShimSchemaVersion(agent: AgentId): number | null;
|
|
195
|
+
/**
|
|
196
|
+
* True if the on-disk shim's schema version matches `SHIM_SCHEMA_VERSION`.
|
|
197
|
+
* False means either the shim is missing, is pre-v2 (no marker), or is an
|
|
198
|
+
* older version that needs regeneration.
|
|
199
|
+
*/
|
|
200
|
+
export declare function isShimCurrent(agent: AgentId): boolean;
|
|
201
|
+
/**
|
|
202
|
+
* Regenerate the shim if it's missing or outdated. Returns a status describing
|
|
203
|
+
* what happened — callers can surface a one-line notice to the user ("Updated
|
|
204
|
+
* shim for codex") when appropriate.
|
|
205
|
+
*/
|
|
206
|
+
export declare function ensureShimCurrent(agent: AgentId): 'created' | 'updated' | 'current';
|
|
109
207
|
/**
|
|
110
208
|
* Get the path to the shim for an agent.
|
|
111
209
|
*/
|
|
@@ -138,7 +236,8 @@ export declare function addShimsToPath(): {
|
|
|
138
236
|
*/
|
|
139
237
|
export declare function ensureAllShims(): void;
|
|
140
238
|
/**
|
|
141
|
-
* Resource diff between two versions.
|
|
239
|
+
* Resource diff between two versions. Each field lists resources present in
|
|
240
|
+
* the current version but missing from the target.
|
|
142
241
|
*/
|
|
143
242
|
export interface ResourceDiff {
|
|
144
243
|
commands: string[];
|
package/dist/lib/shims.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shims.d.ts","sourceRoot":"","sources":["../../src/lib/shims.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shims.d.ts","sourceRoot":"","sources":["../../src/lib/shims.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/shims.js
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shim generation and config symlink management for agent version switching.
|
|
3
|
+
*
|
|
4
|
+
* Shims are small shell scripts placed in ~/.agents/shims/ that resolve the
|
|
5
|
+
* active agent version (project-level or user-default), then exec the real
|
|
6
|
+
* binary. Config isolation is achieved by symlinking ~/.{agent} into the
|
|
7
|
+
* per-version home directory. This module also handles versioned aliases
|
|
8
|
+
* (e.g., claude@2.0.65), PATH setup, conflict detection during migration,
|
|
9
|
+
* and resource diffing between versions.
|
|
10
|
+
*/
|
|
1
11
|
import * as fs from 'fs';
|
|
2
12
|
import * as path from 'path';
|
|
3
13
|
import * as os from 'os';
|
|
@@ -130,7 +140,7 @@ export async function promptConflictStrategy(conflictInfos) {
|
|
|
130
140
|
* Generate the shim script content for an agent.
|
|
131
141
|
*
|
|
132
142
|
* The shim resolves the version in order:
|
|
133
|
-
* 1. .
|
|
143
|
+
* 1. agents.yaml in project root (walk up from $PWD, skip ~/.agents/agents.yaml)
|
|
134
144
|
* 2. ~/.agents/agents.yaml default
|
|
135
145
|
*
|
|
136
146
|
* If version is specified but not installed, auto-installs it.
|
|
@@ -138,6 +148,29 @@ export async function promptConflictStrategy(conflictInfos) {
|
|
|
138
148
|
* Config isolation is handled via symlinks:
|
|
139
149
|
* ~/.{agent} -> ~/.agents/versions/{agent}/{version}/home/.{agent}/
|
|
140
150
|
*/
|
|
151
|
+
/**
|
|
152
|
+
* Current shim schema version. Bump whenever `generateShimScript` changes
|
|
153
|
+
* in a way that requires existing on-disk shims to be regenerated (new
|
|
154
|
+
* flags, fixed argument parsing, new hooks, etc.). `isShimCurrent` reads
|
|
155
|
+
* this marker out of existing shims to decide whether to regenerate.
|
|
156
|
+
*
|
|
157
|
+
* History:
|
|
158
|
+
* v1 — initial shim (implicit, no marker).
|
|
159
|
+
* v2 — `--version=...` form in sync/refresh-memory calls; refresh-memory
|
|
160
|
+
* shim hook for non-@-capable agents.
|
|
161
|
+
* v3 — sync/refresh-memory flag renamed `--version` → `--agent-version`
|
|
162
|
+
* so it no longer collides with commander's top-level `--version`.
|
|
163
|
+
* v4 — project version marker changed from `.agents-version` to a
|
|
164
|
+
* root-level `agents.yaml`; shim now skips ~/.agents/agents.yaml
|
|
165
|
+
* when walking up for a project marker.
|
|
166
|
+
*/
|
|
167
|
+
export const SHIM_SCHEMA_VERSION = 4;
|
|
168
|
+
/** Internal marker string used to embed the schema version in shim scripts. */
|
|
169
|
+
const SHIM_VERSION_MARKER = 'agents-shim-version:';
|
|
170
|
+
/**
|
|
171
|
+
* Generate the full bash shim script for the given agent. The returned string
|
|
172
|
+
* is written to ~/.agents/shims/{cliCommand} and made executable.
|
|
173
|
+
*/
|
|
141
174
|
export function generateShimScript(agent) {
|
|
142
175
|
const agentConfig = AGENTS[agent];
|
|
143
176
|
const cliCommand = agentConfig.cliCommand;
|
|
@@ -148,40 +181,43 @@ export function generateShimScript(agent) {
|
|
|
148
181
|
# selected version's config directory so switching versions also switches the
|
|
149
182
|
# live Claude account.
|
|
150
183
|
export CLAUDE_CONFIG_DIR="$VERSION_DIR/home/${configDirName}"
|
|
184
|
+
`
|
|
185
|
+
: '';
|
|
186
|
+
// Agents that don't natively resolve @-imports in their memory file need
|
|
187
|
+
// agents-cli to recompile when the user edits a rule/preset file. The
|
|
188
|
+
// check is fast (sha256 of ~8 small files) and skips the recompile when
|
|
189
|
+
// sources haven't changed.
|
|
190
|
+
const refreshMemoryCall = !agentConfig.capabilities.memoryImports
|
|
191
|
+
? `
|
|
192
|
+
# Recompile memory if any rule/preset source has changed since last sync.
|
|
193
|
+
# Fast-path check (~10-20ms) when nothing changed; full recompile only on
|
|
194
|
+
# actual diff. Non-blocking failure — if the refresh errors, we still launch.
|
|
195
|
+
agents refresh-memory --agent "$AGENT" --agent-version "$VERSION" --quiet 2>/dev/null || true
|
|
151
196
|
`
|
|
152
197
|
: '';
|
|
153
198
|
return `#!/bin/bash
|
|
154
199
|
# Auto-generated by agents-cli - do not edit
|
|
155
200
|
# Shim for ${agentConfig.name}
|
|
201
|
+
# ${SHIM_VERSION_MARKER} ${SHIM_SCHEMA_VERSION}
|
|
156
202
|
|
|
157
203
|
AGENTS_DIR="$HOME/.agents"
|
|
158
204
|
AGENT="${agent}"
|
|
159
205
|
CLI_COMMAND="${cliCommand}"
|
|
160
206
|
|
|
161
|
-
# Find .
|
|
207
|
+
# Find project agents.yaml walking up from cwd (skip ~/.agents/agents.yaml)
|
|
162
208
|
find_project_version() {
|
|
163
209
|
local dir="$PWD"
|
|
210
|
+
local user_agents_yaml="$HOME/.agents/agents.yaml"
|
|
164
211
|
while [ "$dir" != "/" ]; do
|
|
165
|
-
|
|
166
|
-
|
|
212
|
+
local candidate="$dir/agents.yaml"
|
|
213
|
+
if [ -f "$candidate" ] && [ "$candidate" != "$user_agents_yaml" ]; then
|
|
214
|
+
# Parse agents: section — same shape as resolve_default_version()
|
|
167
215
|
local version
|
|
168
216
|
version=$(awk -v agent="$AGENT" '
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
print
|
|
174
|
-
exit
|
|
175
|
-
}
|
|
176
|
-
# Value might be on next line (array format)
|
|
177
|
-
getline
|
|
178
|
-
if (/^[[:space:]]+-[[:space:]]/) {
|
|
179
|
-
gsub(/^[[:space:]]+-[[:space:]]*["'"'"']?|["'"'"']?[[:space:]]*$/, "")
|
|
180
|
-
print
|
|
181
|
-
exit
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
' "$dir/.agents-version")
|
|
217
|
+
/^agents:/ { in_agents=1; next }
|
|
218
|
+
in_agents && /^[^ ]/ { in_agents=0 }
|
|
219
|
+
in_agents && $0 ~ "^ " agent ":" { gsub(/.*:[[:space:]]*["'"'"']?|["'"'"']?[[:space:]]*$/, ""); print; exit }
|
|
220
|
+
' "$candidate")
|
|
185
221
|
if [ -n "$version" ]; then
|
|
186
222
|
echo "$version"
|
|
187
223
|
return 0
|
|
@@ -204,7 +240,7 @@ resolve_default_version() {
|
|
|
204
240
|
fi
|
|
205
241
|
}
|
|
206
242
|
|
|
207
|
-
# Find project-scoped .agents directory (stop at .
|
|
243
|
+
# Find project-scoped .agents directory (stop at agents.yaml or .git)
|
|
208
244
|
find_project_agents_dir() {
|
|
209
245
|
local dir="$PWD"
|
|
210
246
|
while [ "$dir" != "/" ]; do
|
|
@@ -212,7 +248,7 @@ find_project_agents_dir() {
|
|
|
212
248
|
echo "$dir/.agents"
|
|
213
249
|
return 0
|
|
214
250
|
fi
|
|
215
|
-
if [ -f "$dir
|
|
251
|
+
if [ -f "$dir/agents.yaml" ] || [ -d "$dir/.git" ] || [ -f "$dir/.git" ]; then
|
|
216
252
|
break
|
|
217
253
|
fi
|
|
218
254
|
dir=$(dirname "$dir")
|
|
@@ -240,7 +276,7 @@ BINARY="$VERSION_DIR/node_modules/.bin/$CLI_COMMAND"
|
|
|
240
276
|
# Auto-install if not present
|
|
241
277
|
if [ ! -x "$BINARY" ]; then
|
|
242
278
|
if [ "$VERSION_SOURCE" = "project" ]; then
|
|
243
|
-
echo "agents: $AGENT@$VERSION required by .
|
|
279
|
+
echo "agents: $AGENT@$VERSION required by agents.yaml but not installed" >&2
|
|
244
280
|
|
|
245
281
|
# Spinner animation
|
|
246
282
|
spin() {
|
|
@@ -277,9 +313,9 @@ fi
|
|
|
277
313
|
# Sync project-scoped resources into version home if a project .agents/ is present
|
|
278
314
|
PROJECT_AGENTS_DIR=$(find_project_agents_dir)
|
|
279
315
|
if [ -n "$PROJECT_AGENTS_DIR" ]; then
|
|
280
|
-
agents sync --agent "$AGENT" --version "$VERSION" --project-dir "$PROJECT_AGENTS_DIR" --quiet >/dev/null 2>&1
|
|
316
|
+
agents sync --agent "$AGENT" --agent-version "$VERSION" --project-dir "$PROJECT_AGENTS_DIR" --quiet >/dev/null 2>&1
|
|
281
317
|
fi
|
|
282
|
-
${managedEnv}
|
|
318
|
+
${refreshMemoryCall}${managedEnv}
|
|
283
319
|
|
|
284
320
|
exec "$BINARY" "$@"
|
|
285
321
|
`;
|
|
@@ -309,6 +345,21 @@ export function removeShim(agent) {
|
|
|
309
345
|
}
|
|
310
346
|
return false;
|
|
311
347
|
}
|
|
348
|
+
/**
|
|
349
|
+
* Current versioned-alias schema. Bump whenever `generateVersionedAliasScript`
|
|
350
|
+
* changes in a way that requires existing on-disk aliases to be regenerated.
|
|
351
|
+
*
|
|
352
|
+
* History:
|
|
353
|
+
* v1 — implicit (no marker); no CLAUDE_CONFIG_DIR export, so direct
|
|
354
|
+
* `claude@X` invocations leaked into ~/.claude (the default version's
|
|
355
|
+
* symlinked home) and `agents view` never saw the login.
|
|
356
|
+
* v2 — emit CLAUDE_CONFIG_DIR for claude aliases so each version has its
|
|
357
|
+
* own isolated config/OAuth slot; stamp a version marker so stale
|
|
358
|
+
* aliases can be detected and regenerated.
|
|
359
|
+
*/
|
|
360
|
+
export const VERSIONED_ALIAS_SCHEMA_VERSION = 2;
|
|
361
|
+
/** Internal marker string used to embed the schema version in versioned alias scripts. */
|
|
362
|
+
const VERSIONED_ALIAS_VERSION_MARKER = 'agents-versioned-alias-version:';
|
|
312
363
|
/**
|
|
313
364
|
* Generate a versioned alias script that directly execs a specific version.
|
|
314
365
|
* e.g., claude@2.0.65 -> directly runs that version's binary
|
|
@@ -325,6 +376,7 @@ export CLAUDE_CONFIG_DIR="$HOME/.agents/versions/${agent}/${version}/home/${conf
|
|
|
325
376
|
: '';
|
|
326
377
|
return `#!/bin/bash
|
|
327
378
|
# Auto-generated by agents-cli - do not edit
|
|
379
|
+
# ${VERSIONED_ALIAS_VERSION_MARKER} ${VERSIONED_ALIAS_SCHEMA_VERSION}
|
|
328
380
|
# Direct alias for ${agentConfig.name}@${version}
|
|
329
381
|
|
|
330
382
|
BINARY="$HOME/.agents/versions/${agent}/${version}/node_modules/.bin/${agentConfig.cliCommand}"
|
|
@@ -338,6 +390,55 @@ ${managedEnv}
|
|
|
338
390
|
exec "$BINARY" "$@"
|
|
339
391
|
`;
|
|
340
392
|
}
|
|
393
|
+
/**
|
|
394
|
+
* Read the schema version of an on-disk versioned alias. Returns null if the
|
|
395
|
+
* alias doesn't exist or is a pre-v2 alias (no marker — treated as stale).
|
|
396
|
+
*/
|
|
397
|
+
export function readVersionedAliasSchemaVersion(agent, version) {
|
|
398
|
+
const aliasPath = getVersionedAliasPath(agent, version);
|
|
399
|
+
if (!fs.existsSync(aliasPath))
|
|
400
|
+
return null;
|
|
401
|
+
try {
|
|
402
|
+
const content = fs.readFileSync(aliasPath, 'utf8');
|
|
403
|
+
const header = content.split('\n', 10).join('\n');
|
|
404
|
+
const match = header.match(new RegExp(VERSIONED_ALIAS_VERSION_MARKER + '\\s*(\\d+)'));
|
|
405
|
+
if (!match)
|
|
406
|
+
return null;
|
|
407
|
+
return Number(match[1]);
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* True if the on-disk versioned alias matches the current schema version.
|
|
415
|
+
*/
|
|
416
|
+
export function isVersionedAliasCurrent(agent, version) {
|
|
417
|
+
return readVersionedAliasSchemaVersion(agent, version) === VERSIONED_ALIAS_SCHEMA_VERSION;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Regenerate a versioned alias if missing or stale. Mirrors ensureShimCurrent
|
|
421
|
+
* for the main shim — callers can surface a one-line notice when something
|
|
422
|
+
* was upgraded.
|
|
423
|
+
*/
|
|
424
|
+
export function ensureVersionedAliasCurrent(agent, version) {
|
|
425
|
+
const aliasPath = getVersionedAliasPath(agent, version);
|
|
426
|
+
if (!fs.existsSync(aliasPath)) {
|
|
427
|
+
createVersionedAlias(agent, version);
|
|
428
|
+
return 'created';
|
|
429
|
+
}
|
|
430
|
+
if (!isVersionedAliasCurrent(agent, version)) {
|
|
431
|
+
createVersionedAlias(agent, version);
|
|
432
|
+
return 'updated';
|
|
433
|
+
}
|
|
434
|
+
return 'current';
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Get the filesystem path for a versioned alias script.
|
|
438
|
+
*/
|
|
439
|
+
export function getVersionedAliasPath(agent, version) {
|
|
440
|
+
return path.join(getShimsDir(), `${AGENTS[agent].cliCommand}@${version}`);
|
|
441
|
+
}
|
|
341
442
|
/**
|
|
342
443
|
* Create a versioned alias for a specific agent version.
|
|
343
444
|
* e.g., claude@2.0.65
|
|
@@ -507,6 +608,15 @@ export function switchHomeFileSymlinks(agent, version) {
|
|
|
507
608
|
const versionsDir = getVersionsDir();
|
|
508
609
|
const switched = [];
|
|
509
610
|
const errors = [];
|
|
611
|
+
// For Claude, Claude's binary reads CLAUDE_CONFIG_DIR/.claude.json (INSIDE
|
|
612
|
+
// the per-version .claude dir) — not the home-level file this function
|
|
613
|
+
// manages. Reconcile all installed Claude versions so INSIDE is a symlink
|
|
614
|
+
// to OUTSIDE, making OUTSIDE the single source of truth.
|
|
615
|
+
if (agent === 'claude') {
|
|
616
|
+
const reconcile = ensureAllClaudeInsideSymlinks();
|
|
617
|
+
for (const e of reconcile.errors)
|
|
618
|
+
errors.push(e);
|
|
619
|
+
}
|
|
510
620
|
for (const fileName of homeFiles) {
|
|
511
621
|
const globalPath = path.join(home, fileName);
|
|
512
622
|
const versionFilePath = path.join(versionsDir, agent, version, 'home', fileName);
|
|
@@ -595,6 +705,108 @@ export function switchHomeFileSymlinks(agent, version) {
|
|
|
595
705
|
}
|
|
596
706
|
return { switched, errors };
|
|
597
707
|
}
|
|
708
|
+
/**
|
|
709
|
+
* Claude reads `.claude.json` at `$CLAUDE_CONFIG_DIR/.claude.json`. Our shim
|
|
710
|
+
* points CLAUDE_CONFIG_DIR at `<ver>/home/.claude`, so Claude's real config
|
|
711
|
+
* file lives at `<ver>/home/.claude/.claude.json` (INSIDE), while
|
|
712
|
+
* `switchHomeFileSymlinks` manages `<ver>/home/.claude.json` (OUTSIDE).
|
|
713
|
+
*
|
|
714
|
+
* To keep both views consistent we make INSIDE a symlink to OUTSIDE. Claude's
|
|
715
|
+
* atomic write (`Uf6`) resolves symlinks before the tmp+rename cycle, so the
|
|
716
|
+
* symlink survives across writes and OUTSIDE remains the single source of
|
|
717
|
+
* truth that agents-cli's home-file machinery already manages.
|
|
718
|
+
*
|
|
719
|
+
* This function idempotently reconciles one version:
|
|
720
|
+
* - INSIDE missing: create symlink -> `../.claude.json` (create OUTSIDE if needed).
|
|
721
|
+
* - INSIDE already symlink to OUTSIDE: no-op.
|
|
722
|
+
* - INSIDE is a real file: it's the authoritative auth state (Claude was
|
|
723
|
+
* writing to it). Move its content to OUTSIDE (merging with OUTSIDE,
|
|
724
|
+
* INSIDE wins for `oauthAccount`), then replace INSIDE with the symlink.
|
|
725
|
+
* - Symlink points elsewhere: replace it.
|
|
726
|
+
*/
|
|
727
|
+
export function ensureClaudeInsideSymlink(version) {
|
|
728
|
+
const versionsDir = getVersionsDir();
|
|
729
|
+
const versionHome = path.join(versionsDir, 'claude', version, 'home');
|
|
730
|
+
const outsidePath = path.join(versionHome, '.claude.json');
|
|
731
|
+
const insideDir = path.join(versionHome, '.claude');
|
|
732
|
+
const insidePath = path.join(insideDir, '.claude.json');
|
|
733
|
+
const linkTarget = '../.claude.json'; // relative so version dir can be moved
|
|
734
|
+
if (!fs.existsSync(insideDir)) {
|
|
735
|
+
fs.mkdirSync(insideDir, { recursive: true });
|
|
736
|
+
}
|
|
737
|
+
let insideStat = null;
|
|
738
|
+
try {
|
|
739
|
+
insideStat = fs.lstatSync(insidePath);
|
|
740
|
+
}
|
|
741
|
+
catch {
|
|
742
|
+
/* INSIDE does not exist */
|
|
743
|
+
}
|
|
744
|
+
if (insideStat?.isSymbolicLink()) {
|
|
745
|
+
const currentTarget = fs.readlinkSync(insidePath);
|
|
746
|
+
if (currentTarget === linkTarget)
|
|
747
|
+
return;
|
|
748
|
+
// Wrong target — replace.
|
|
749
|
+
if (!fs.existsSync(outsidePath))
|
|
750
|
+
fs.writeFileSync(outsidePath, '{}');
|
|
751
|
+
fs.unlinkSync(insidePath);
|
|
752
|
+
fs.symlinkSync(linkTarget, insidePath);
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
if (insideStat?.isFile()) {
|
|
756
|
+
// INSIDE is the authoritative file — Claude has been reading/writing it.
|
|
757
|
+
// Merge INSIDE into OUTSIDE, with INSIDE winning on every field, then
|
|
758
|
+
// replace INSIDE with a symlink.
|
|
759
|
+
let insideContent = {};
|
|
760
|
+
try {
|
|
761
|
+
insideContent = JSON.parse(fs.readFileSync(insidePath, 'utf-8'));
|
|
762
|
+
}
|
|
763
|
+
catch {
|
|
764
|
+
/* INSIDE corrupt — treat as empty; OUTSIDE preserved as-is */
|
|
765
|
+
}
|
|
766
|
+
let outsideContent = {};
|
|
767
|
+
if (fs.existsSync(outsidePath)) {
|
|
768
|
+
try {
|
|
769
|
+
outsideContent = JSON.parse(fs.readFileSync(outsidePath, 'utf-8'));
|
|
770
|
+
}
|
|
771
|
+
catch {
|
|
772
|
+
/* OUTSIDE corrupt — drop it */
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
const merged = { ...outsideContent, ...insideContent };
|
|
776
|
+
fs.writeFileSync(outsidePath, JSON.stringify(merged, null, 2));
|
|
777
|
+
fs.unlinkSync(insidePath);
|
|
778
|
+
fs.symlinkSync(linkTarget, insidePath);
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
781
|
+
// INSIDE missing — ensure OUTSIDE exists, then create symlink.
|
|
782
|
+
if (!fs.existsSync(outsidePath))
|
|
783
|
+
fs.writeFileSync(outsidePath, '{}');
|
|
784
|
+
fs.symlinkSync(linkTarget, insidePath);
|
|
785
|
+
}
|
|
786
|
+
/**
|
|
787
|
+
* Apply `ensureClaudeInsideSymlink` to every installed Claude version.
|
|
788
|
+
* Safe to call repeatedly; per-version calls are idempotent.
|
|
789
|
+
*/
|
|
790
|
+
export function ensureAllClaudeInsideSymlinks() {
|
|
791
|
+
const versionsDir = getVersionsDir();
|
|
792
|
+
const claudeVersionsDir = path.join(versionsDir, 'claude');
|
|
793
|
+
const migrated = [];
|
|
794
|
+
const errors = [];
|
|
795
|
+
if (!fs.existsSync(claudeVersionsDir))
|
|
796
|
+
return { migrated, errors };
|
|
797
|
+
for (const entry of fs.readdirSync(claudeVersionsDir, { withFileTypes: true })) {
|
|
798
|
+
if (!entry.isDirectory())
|
|
799
|
+
continue;
|
|
800
|
+
try {
|
|
801
|
+
ensureClaudeInsideSymlink(entry.name);
|
|
802
|
+
migrated.push(entry.name);
|
|
803
|
+
}
|
|
804
|
+
catch (err) {
|
|
805
|
+
errors.push(`${entry.name}: ${err.message}`);
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
return { migrated, errors };
|
|
809
|
+
}
|
|
598
810
|
/**
|
|
599
811
|
* Get the current config symlink target version, if any.
|
|
600
812
|
*/
|
|
@@ -709,6 +921,51 @@ export function shimExists(agent) {
|
|
|
709
921
|
const shimPath = path.join(shimsDir, agentConfig.cliCommand);
|
|
710
922
|
return fs.existsSync(shimPath);
|
|
711
923
|
}
|
|
924
|
+
/**
|
|
925
|
+
* Read the schema version embedded in an existing on-disk shim. Returns
|
|
926
|
+
* `null` if the shim doesn't exist or has no version marker (pre-v2 shim).
|
|
927
|
+
*/
|
|
928
|
+
export function readShimSchemaVersion(agent) {
|
|
929
|
+
if (!shimExists(agent))
|
|
930
|
+
return null;
|
|
931
|
+
try {
|
|
932
|
+
const content = fs.readFileSync(getShimPath(agent), 'utf8');
|
|
933
|
+
// Look at the first ~10 lines only — the marker lives in the header.
|
|
934
|
+
const header = content.split('\n', 10).join('\n');
|
|
935
|
+
const match = header.match(new RegExp(SHIM_VERSION_MARKER + '\\s*(\\d+)'));
|
|
936
|
+
if (!match)
|
|
937
|
+
return null;
|
|
938
|
+
return Number(match[1]);
|
|
939
|
+
}
|
|
940
|
+
catch {
|
|
941
|
+
return null;
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
/**
|
|
945
|
+
* True if the on-disk shim's schema version matches `SHIM_SCHEMA_VERSION`.
|
|
946
|
+
* False means either the shim is missing, is pre-v2 (no marker), or is an
|
|
947
|
+
* older version that needs regeneration.
|
|
948
|
+
*/
|
|
949
|
+
export function isShimCurrent(agent) {
|
|
950
|
+
const version = readShimSchemaVersion(agent);
|
|
951
|
+
return version === SHIM_SCHEMA_VERSION;
|
|
952
|
+
}
|
|
953
|
+
/**
|
|
954
|
+
* Regenerate the shim if it's missing or outdated. Returns a status describing
|
|
955
|
+
* what happened — callers can surface a one-line notice to the user ("Updated
|
|
956
|
+
* shim for codex") when appropriate.
|
|
957
|
+
*/
|
|
958
|
+
export function ensureShimCurrent(agent) {
|
|
959
|
+
if (!shimExists(agent)) {
|
|
960
|
+
createShim(agent);
|
|
961
|
+
return 'created';
|
|
962
|
+
}
|
|
963
|
+
if (!isShimCurrent(agent)) {
|
|
964
|
+
createShim(agent);
|
|
965
|
+
return 'updated';
|
|
966
|
+
}
|
|
967
|
+
return 'current';
|
|
968
|
+
}
|
|
712
969
|
/**
|
|
713
970
|
* Get the path to the shim for an agent.
|
|
714
971
|
*/
|