@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
package/dist/lib/mcp.js
CHANGED
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
import * as fs from 'fs';
|
|
11
11
|
import * as path from 'path';
|
|
12
12
|
import * as yaml from 'yaml';
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
15
|
-
import { getMcpDir, getProjectAgentsDir } from './state.js';
|
|
13
|
+
import { execFileSync } from 'child_process';
|
|
14
|
+
import { getMcpDir, getUserMcpDir, getProjectAgentsDir, getVersionsDir } from './state.js';
|
|
16
15
|
import { MCP_CAPABLE_AGENTS, AGENTS } from './agents.js';
|
|
16
|
+
import { setGeminiAutoUpdateDisabled, updateGeminiSettings } from './gemini-settings.js';
|
|
17
17
|
/**
|
|
18
18
|
* Parse an MCP server config from a YAML file.
|
|
19
19
|
*/
|
|
@@ -53,6 +53,8 @@ export function listMcpServerConfigs(cwd = process.cwd()) {
|
|
|
53
53
|
if (projectAgentsDir) {
|
|
54
54
|
dirs.push({ scope: 'project', dir: path.join(projectAgentsDir, 'mcp') });
|
|
55
55
|
}
|
|
56
|
+
// User dir first (wins on name collision), then system
|
|
57
|
+
dirs.push({ scope: 'user', dir: getUserMcpDir() });
|
|
56
58
|
dirs.push({ scope: 'user', dir: getMcpDir() });
|
|
57
59
|
const results = new Map();
|
|
58
60
|
for (const { scope, dir } of dirs) {
|
|
@@ -113,7 +115,7 @@ function installMcpViaClaude(binaryPath, server, versionHome) {
|
|
|
113
115
|
server.config.command,
|
|
114
116
|
...(server.config.args || [])
|
|
115
117
|
];
|
|
116
|
-
|
|
118
|
+
execFileSync(binaryPath, args, {
|
|
117
119
|
stdio: 'pipe',
|
|
118
120
|
timeout: 30000,
|
|
119
121
|
env: execEnv,
|
|
@@ -121,7 +123,7 @@ function installMcpViaClaude(binaryPath, server, versionHome) {
|
|
|
121
123
|
}
|
|
122
124
|
else {
|
|
123
125
|
// claude mcp add --scope user --transport http <name> <url>
|
|
124
|
-
|
|
126
|
+
execFileSync(binaryPath, ['mcp', 'add', '--scope', 'user', '--transport', 'http', server.name, server.config.url], {
|
|
125
127
|
stdio: 'pipe',
|
|
126
128
|
timeout: 30000,
|
|
127
129
|
env: execEnv,
|
|
@@ -141,7 +143,7 @@ function installMcpViaCodex(binaryPath, server, versionHome) {
|
|
|
141
143
|
server.config.command,
|
|
142
144
|
...(server.config.args || [])
|
|
143
145
|
];
|
|
144
|
-
|
|
146
|
+
execFileSync(binaryPath, args, {
|
|
145
147
|
stdio: 'pipe',
|
|
146
148
|
timeout: 30000,
|
|
147
149
|
env: { ...process.env, HOME: versionHome },
|
|
@@ -154,28 +156,25 @@ function installMcpViaCodex(binaryPath, server, versionHome) {
|
|
|
154
156
|
*/
|
|
155
157
|
function installMcpToGeminiConfig(server, versionHome) {
|
|
156
158
|
const configPath = path.join(versionHome, '.gemini', 'settings.json');
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
config
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
178
|
-
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
159
|
+
updateGeminiSettings(configPath, (config) => {
|
|
160
|
+
setGeminiAutoUpdateDisabled(config);
|
|
161
|
+
if (!config.mcpServers || typeof config.mcpServers !== 'object') {
|
|
162
|
+
config.mcpServers = {};
|
|
163
|
+
}
|
|
164
|
+
const mcpServers = config.mcpServers;
|
|
165
|
+
if (server.config.transport === 'stdio') {
|
|
166
|
+
mcpServers[server.name] = {
|
|
167
|
+
command: server.config.command,
|
|
168
|
+
args: server.config.args || [],
|
|
169
|
+
env: server.config.env || {},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
mcpServers[server.name] = {
|
|
174
|
+
url: server.config.url,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
});
|
|
179
178
|
}
|
|
180
179
|
/**
|
|
181
180
|
* Install MCP server to Cursor config file.
|
|
@@ -260,10 +259,8 @@ export function installMcpServers(agentId, version, versionHome, mcpNames, optio
|
|
|
260
259
|
const applied = [];
|
|
261
260
|
const errors = [];
|
|
262
261
|
// Get binary path for CLI-based agents
|
|
263
|
-
const homeDir = os.homedir();
|
|
264
|
-
const agentsDir = path.join(homeDir, '.agents');
|
|
265
262
|
const cliCommand = AGENTS[agentId].cliCommand;
|
|
266
|
-
const binaryPath = path.join(
|
|
263
|
+
const binaryPath = path.join(getVersionsDir(), agentId, version, 'node_modules', '.bin', cliCommand);
|
|
267
264
|
for (const server of servers) {
|
|
268
265
|
try {
|
|
269
266
|
if (agentId === 'claude') {
|
|
@@ -304,7 +301,7 @@ export function installMcpServers(agentId, version, versionHome, mcpNames, optio
|
|
|
304
301
|
* Write an MCP server config to ~/.agents/mcp/.
|
|
305
302
|
*/
|
|
306
303
|
export function writeMcpServerConfig(config) {
|
|
307
|
-
const mcpDir =
|
|
304
|
+
const mcpDir = getUserMcpDir();
|
|
308
305
|
fs.mkdirSync(mcpDir, { recursive: true });
|
|
309
306
|
const fileName = `${config.name.toLowerCase().replace(/[^a-z0-9]/g, '-')}.yaml`;
|
|
310
307
|
const filePath = path.join(mcpDir, fileName);
|
|
@@ -324,4 +321,3 @@ export function removeMcpServerConfig(name) {
|
|
|
324
321
|
fs.unlinkSync(server.path);
|
|
325
322
|
return true;
|
|
326
323
|
}
|
|
327
|
-
//# sourceMappingURL=mcp.js.map
|
|
@@ -1,11 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rules file compilation -- resolving @-imports into a single flat file.
|
|
3
|
+
*
|
|
4
|
+
* Agents that do not natively resolve `@path/to/file` imports (Codex, Gemini)
|
|
5
|
+
* need a pre-compiled rules file with all imports inlined. This module
|
|
6
|
+
* handles that expansion.
|
|
7
|
+
*/
|
|
1
8
|
import type { AgentId } from './types.js';
|
|
9
|
+
/** Sidecar manifest recording source file hashes for staleness detection. */
|
|
2
10
|
export interface CompileManifest {
|
|
3
11
|
compiledAt: string;
|
|
4
12
|
sources: {
|
|
5
13
|
path: string;
|
|
6
14
|
sha256: string;
|
|
15
|
+
mtime?: number;
|
|
16
|
+
size?: number;
|
|
7
17
|
}[];
|
|
8
18
|
}
|
|
19
|
+
/** Result of resolving @-imports in a rules file. */
|
|
9
20
|
export interface ResolveResult {
|
|
10
21
|
/** Fully-inlined content. */
|
|
11
22
|
content: string;
|
|
@@ -22,7 +33,7 @@ export interface ResolveResult {
|
|
|
22
33
|
* paths resolve against the filesystem root / home directory.
|
|
23
34
|
*/
|
|
24
35
|
export declare function resolveImports(content: string, baseDir: string): ResolveResult;
|
|
25
|
-
/** True if the agent's native runtime resolves `@path` imports in its
|
|
36
|
+
/** True if the agent's native runtime resolves `@path` imports in its rules file. */
|
|
26
37
|
export declare function supportsMemoryImports(agentId: AgentId): boolean;
|
|
27
38
|
/**
|
|
28
39
|
* Fast staleness check. Returns true when:
|
|
@@ -35,7 +46,7 @@ export declare function supportsMemoryImports(agentId: AgentId): boolean;
|
|
|
35
46
|
*/
|
|
36
47
|
export declare function isMemoryStale(agentId: AgentId, version: string): boolean;
|
|
37
48
|
/**
|
|
38
|
-
* Resolve the source `
|
|
49
|
+
* Resolve the source `rules/AGENTS.md` (with all @-imports expanded) and
|
|
39
50
|
* write the result into the version home, alongside a sidecar manifest that
|
|
40
51
|
* records source file hashes for staleness detection.
|
|
41
52
|
*
|
|
@@ -53,4 +64,3 @@ export declare function compileMemoryForAgent(agentId: AgentId, version: string)
|
|
|
53
64
|
* true if a recompile happened, false otherwise.
|
|
54
65
|
*/
|
|
55
66
|
export declare function ensureMemoryFresh(agentId: AgentId, version: string): boolean;
|
|
56
|
-
//# sourceMappingURL=memory-compile.d.ts.map
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rules file compilation -- resolving @-imports into a single flat file.
|
|
3
|
+
*
|
|
4
|
+
* Agents that do not natively resolve `@path/to/file` imports (Codex, Gemini)
|
|
5
|
+
* need a pre-compiled rules file with all imports inlined. This module
|
|
6
|
+
* handles that expansion.
|
|
7
|
+
*/
|
|
1
8
|
import * as fs from 'fs';
|
|
2
9
|
import * as path from 'path';
|
|
3
10
|
import * as os from 'os';
|
|
4
11
|
import * as crypto from 'crypto';
|
|
5
12
|
import { AGENTS } from './agents.js';
|
|
6
|
-
import {
|
|
13
|
+
import { getResolvedRulesDir, getVersionsDir } from './state.js';
|
|
7
14
|
// Match `@path` preceded by start-of-string or whitespace. This avoids
|
|
8
15
|
// matching emails ("foo@bar.com") and the middle of words. The leading
|
|
9
16
|
// whitespace (if any) is captured so we can preserve it in the output.
|
|
10
17
|
const IMPORT_RE = /(^|\s)@(\S+)/g;
|
|
11
18
|
const MAX_DEPTH = 5;
|
|
12
|
-
const COMPILED_HEADER = '<!-- Auto-compiled by agents-cli from ~/.agents/
|
|
13
|
-
' Edit the source files under ~/.agents/
|
|
19
|
+
const COMPILED_HEADER = '<!-- Auto-compiled by agents-cli from ~/.agents/rules/AGENTS.md + imports.\n' +
|
|
20
|
+
' Edit the source files under ~/.agents/rules/ — edits to this file will be overwritten on next sync. -->\n\n';
|
|
14
21
|
function expandTilde(p) {
|
|
15
22
|
if (p === '~')
|
|
16
23
|
return os.homedir();
|
|
@@ -79,7 +86,7 @@ export function resolveImports(content, baseDir) {
|
|
|
79
86
|
const result = expand(content, baseDir, 0);
|
|
80
87
|
return { content: result, sources };
|
|
81
88
|
}
|
|
82
|
-
/** True if the agent's native runtime resolves `@path` imports in its
|
|
89
|
+
/** True if the agent's native runtime resolves `@path` imports in its rules file. */
|
|
83
90
|
export function supportsMemoryImports(agentId) {
|
|
84
91
|
return !!AGENTS[agentId].capabilities.memoryImports;
|
|
85
92
|
}
|
|
@@ -112,6 +119,13 @@ export function isMemoryStale(agentId, version) {
|
|
|
112
119
|
for (const src of manifest.sources) {
|
|
113
120
|
if (!fs.existsSync(src.path))
|
|
114
121
|
return true;
|
|
122
|
+
// Tier 1: mtime+size fast path (no file read needed)
|
|
123
|
+
if (src.mtime !== undefined && src.size !== undefined) {
|
|
124
|
+
const stat = fs.statSync(src.path);
|
|
125
|
+
if (stat.mtimeMs === src.mtime && stat.size === src.size)
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
// Tier 2: content hash
|
|
115
129
|
if (sha256(fs.readFileSync(src.path, 'utf8')) !== src.sha256)
|
|
116
130
|
return true;
|
|
117
131
|
}
|
|
@@ -122,7 +136,7 @@ export function isMemoryStale(agentId, version) {
|
|
|
122
136
|
}
|
|
123
137
|
}
|
|
124
138
|
/**
|
|
125
|
-
* Resolve the source `
|
|
139
|
+
* Resolve the source `rules/AGENTS.md` (with all @-imports expanded) and
|
|
126
140
|
* write the result into the version home, alongside a sidecar manifest that
|
|
127
141
|
* records source file hashes for staleness detection.
|
|
128
142
|
*
|
|
@@ -133,20 +147,29 @@ export function compileMemoryForAgent(agentId, version) {
|
|
|
133
147
|
if (supportsMemoryImports(agentId)) {
|
|
134
148
|
return { compiled: false, compiledPath: '', sources: 0 };
|
|
135
149
|
}
|
|
136
|
-
const memoryDir =
|
|
150
|
+
const memoryDir = getResolvedRulesDir();
|
|
137
151
|
const sourceAgents = path.join(memoryDir, 'AGENTS.md');
|
|
138
152
|
if (!fs.existsSync(sourceAgents)) {
|
|
139
153
|
return { compiled: false, compiledPath: '', sources: 0 };
|
|
140
154
|
}
|
|
141
155
|
const rootContent = fs.readFileSync(sourceAgents, 'utf8');
|
|
142
156
|
const { content, sources } = resolveImports(rootContent, memoryDir);
|
|
157
|
+
const newContent = COMPILED_HEADER + content;
|
|
143
158
|
const compiledPath = getCompiledMemoryPath(agentId, version);
|
|
144
159
|
fs.mkdirSync(path.dirname(compiledPath), { recursive: true });
|
|
145
|
-
fs.
|
|
160
|
+
const existing = fs.existsSync(compiledPath) ? fs.readFileSync(compiledPath, 'utf8') : null;
|
|
161
|
+
if (existing === newContent) {
|
|
162
|
+
return { compiled: false, compiledPath, sources: 0 };
|
|
163
|
+
}
|
|
164
|
+
fs.writeFileSync(compiledPath, newContent);
|
|
146
165
|
const allSources = [sourceAgents, ...sources];
|
|
147
166
|
const manifest = {
|
|
148
167
|
compiledAt: new Date().toISOString(),
|
|
149
|
-
sources: allSources.map(p =>
|
|
168
|
+
sources: allSources.map(p => {
|
|
169
|
+
const content = fs.readFileSync(p, 'utf8');
|
|
170
|
+
const stat = fs.statSync(p);
|
|
171
|
+
return { path: p, sha256: sha256(content), mtime: stat.mtimeMs, size: stat.size };
|
|
172
|
+
}),
|
|
150
173
|
};
|
|
151
174
|
fs.writeFileSync(getManifestPath(compiledPath), JSON.stringify(manifest, null, 2));
|
|
152
175
|
return { compiled: true, compiledPath, sources: allSources.length };
|
|
@@ -164,4 +187,3 @@ export function ensureMemoryFresh(agentId, version) {
|
|
|
164
187
|
const result = compileMemoryForAgent(agentId, version);
|
|
165
188
|
return result.compiled;
|
|
166
189
|
}
|
|
167
|
-
//# sourceMappingURL=memory-compile.js.map
|
package/dist/lib/memory.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rules file management -- reading, writing, and syncing agent instructions.
|
|
3
|
+
*
|
|
4
|
+
* The canonical rules file (AGENTS.md) gets synced
|
|
5
|
+
* into each agent's config directory under their native name (CLAUDE.md,
|
|
6
|
+
* GEMINI.md, etc.). This module handles reading, managing includes, and
|
|
7
|
+
* refreshing rules files across version homes.
|
|
8
|
+
*/
|
|
1
9
|
import type { AgentId } from './types.js';
|
|
2
10
|
export type InstructionsScope = 'user' | 'project';
|
|
3
11
|
export interface InstalledInstructions {
|
|
@@ -12,12 +20,12 @@ export interface DiscoveredInstructions {
|
|
|
12
20
|
filename: string;
|
|
13
21
|
}
|
|
14
22
|
/**
|
|
15
|
-
* Central
|
|
16
|
-
* All agents map to this file in ~/.agents/
|
|
23
|
+
* Central rules filename constant.
|
|
24
|
+
* All agents map to this file in ~/.agents/rules/, renamed per-agent when synced.
|
|
17
25
|
*/
|
|
18
26
|
export declare const CENTRAL_MEMORY_FILENAME = "AGENTS.md";
|
|
19
27
|
/**
|
|
20
|
-
* Get the canonical central
|
|
28
|
+
* Get the canonical central rules filename for an agent's instructionsFile.
|
|
21
29
|
* Central storage uses AGENTS.md, which gets renamed per-agent when syncing:
|
|
22
30
|
* - Claude: AGENTS.md → CLAUDE.md
|
|
23
31
|
* - Gemini: AGENTS.md → GEMINI.md
|
|
@@ -42,15 +50,14 @@ export declare function listInstalledInstructionsWithScope(agentId: AgentId, cwd
|
|
|
42
50
|
}): InstalledInstructions[];
|
|
43
51
|
export declare function getInstructionsContent(agentId: AgentId, scope?: InstructionsScope, cwd?: string): string | null;
|
|
44
52
|
/**
|
|
45
|
-
* Install
|
|
46
|
-
*
|
|
53
|
+
* Install rules files from repo rules/ to central ~/.agents/rules/ directory.
|
|
54
|
+
* Nested presets/ and rules/ fragments are preserved so @imports keep working.
|
|
47
55
|
*/
|
|
48
56
|
export declare function installInstructionsCentrally(repoPath: string, filesToInstall?: string[]): {
|
|
49
57
|
installed: string[];
|
|
50
58
|
errors: string[];
|
|
51
59
|
};
|
|
52
60
|
/**
|
|
53
|
-
* List
|
|
61
|
+
* List top-level rules files from user and system dirs (user wins on collision).
|
|
54
62
|
*/
|
|
55
63
|
export declare function listCentralMemory(): string[];
|
|
56
|
-
//# sourceMappingURL=memory.d.ts.map
|
package/dist/lib/memory.js
CHANGED
|
@@ -1,15 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rules file management -- reading, writing, and syncing agent instructions.
|
|
3
|
+
*
|
|
4
|
+
* The canonical rules file (AGENTS.md) gets synced
|
|
5
|
+
* into each agent's config directory under their native name (CLAUDE.md,
|
|
6
|
+
* GEMINI.md, etc.). This module handles reading, managing includes, and
|
|
7
|
+
* refreshing rules files across version homes.
|
|
8
|
+
*/
|
|
1
9
|
import * as fs from 'fs';
|
|
2
10
|
import * as path from 'path';
|
|
3
11
|
import { AGENTS, ALL_AGENT_IDS } from './agents.js';
|
|
4
|
-
import {
|
|
12
|
+
import { getResolvedRulesDir, getUserRulesDir, getProjectAgentsDir } from './state.js';
|
|
5
13
|
import { getEffectiveHome } from './versions.js';
|
|
6
14
|
/**
|
|
7
|
-
* Central
|
|
8
|
-
* All agents map to this file in ~/.agents/
|
|
15
|
+
* Central rules filename constant.
|
|
16
|
+
* All agents map to this file in ~/.agents/rules/, renamed per-agent when synced.
|
|
9
17
|
*/
|
|
10
18
|
export const CENTRAL_MEMORY_FILENAME = 'AGENTS.md';
|
|
19
|
+
const RULES_DOC_FILENAME = 'README.md';
|
|
20
|
+
function isSyncableRuleMarkdown(filename) {
|
|
21
|
+
return filename.endsWith('.md') && filename !== RULES_DOC_FILENAME;
|
|
22
|
+
}
|
|
23
|
+
const RULES_SUBDIRS = ['default', 'presets'];
|
|
24
|
+
function listRuleMarkdownFiles(rulesDir) {
|
|
25
|
+
const files = [];
|
|
26
|
+
const readDir = (dir, prefix) => {
|
|
27
|
+
if (!fs.existsSync(dir))
|
|
28
|
+
return;
|
|
29
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
30
|
+
if (entry.isFile() && isSyncableRuleMarkdown(entry.name)) {
|
|
31
|
+
files.push(prefix ? `${prefix}/${entry.name}` : entry.name);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
readDir(rulesDir, '');
|
|
36
|
+
for (const sub of RULES_SUBDIRS) {
|
|
37
|
+
readDir(path.join(rulesDir, sub), sub);
|
|
38
|
+
}
|
|
39
|
+
return files.sort();
|
|
40
|
+
}
|
|
11
41
|
/**
|
|
12
|
-
* Get the canonical central
|
|
42
|
+
* Get the canonical central rules filename for an agent's instructionsFile.
|
|
13
43
|
* Central storage uses AGENTS.md, which gets renamed per-agent when syncing:
|
|
14
44
|
* - Claude: AGENTS.md → CLAUDE.md
|
|
15
45
|
* - Gemini: AGENTS.md → GEMINI.md
|
|
@@ -44,11 +74,11 @@ export function getInstructionsPath(agentId, scope, cwd = process.cwd()) {
|
|
|
44
74
|
}
|
|
45
75
|
const projectAgentsDir = getProjectAgentsDir(cwd);
|
|
46
76
|
if (projectAgentsDir) {
|
|
47
|
-
const
|
|
77
|
+
const projectRulesDir = path.join(projectAgentsDir, 'rules');
|
|
48
78
|
const centralName = getCentralMemoryFileName(agentId);
|
|
49
79
|
const candidates = [
|
|
50
|
-
path.join(
|
|
51
|
-
path.join(
|
|
80
|
+
path.join(projectRulesDir, centralName),
|
|
81
|
+
path.join(projectRulesDir, agent.instructionsFile),
|
|
52
82
|
];
|
|
53
83
|
for (const candidate of candidates) {
|
|
54
84
|
if (fs.existsSync(candidate)) {
|
|
@@ -68,20 +98,20 @@ export function instructionsExists(agentId, scope = 'user', cwd = process.cwd())
|
|
|
68
98
|
}
|
|
69
99
|
export function discoverInstructionsFromRepo(repoPath) {
|
|
70
100
|
const instructions = [];
|
|
71
|
-
const
|
|
72
|
-
if (!fs.existsSync(
|
|
101
|
+
const rulesDir = path.join(repoPath, 'rules');
|
|
102
|
+
if (!fs.existsSync(rulesDir)) {
|
|
73
103
|
return instructions;
|
|
74
104
|
}
|
|
75
105
|
for (const agentId of ALL_AGENT_IDS) {
|
|
76
106
|
const agent = AGENTS[agentId];
|
|
77
|
-
// AGENTS.md is the canonical central
|
|
78
|
-
// It gets installed centrally to ~/.agents/
|
|
107
|
+
// AGENTS.md is the canonical central rules file - don't claim it per-agent.
|
|
108
|
+
// It gets installed centrally to ~/.agents/rules/ and synced per-agent.
|
|
79
109
|
const possibleNames = [
|
|
80
110
|
`${agentId}.md`,
|
|
81
111
|
agent.instructionsFile,
|
|
82
112
|
].filter(name => name !== 'AGENTS.md');
|
|
83
113
|
for (const filename of possibleNames) {
|
|
84
|
-
const sourcePath = path.join(
|
|
114
|
+
const sourcePath = path.join(rulesDir, filename);
|
|
85
115
|
if (fs.existsSync(sourcePath)) {
|
|
86
116
|
instructions.push({
|
|
87
117
|
agentId,
|
|
@@ -96,8 +126,8 @@ export function discoverInstructionsFromRepo(repoPath) {
|
|
|
96
126
|
}
|
|
97
127
|
export function resolveInstructionsSource(repoPath, agentId) {
|
|
98
128
|
const agent = AGENTS[agentId];
|
|
99
|
-
const
|
|
100
|
-
if (!fs.existsSync(
|
|
129
|
+
const rulesDir = path.join(repoPath, 'rules');
|
|
130
|
+
if (!fs.existsSync(rulesDir)) {
|
|
101
131
|
return null;
|
|
102
132
|
}
|
|
103
133
|
const possibleNames = [
|
|
@@ -105,7 +135,7 @@ export function resolveInstructionsSource(repoPath, agentId) {
|
|
|
105
135
|
agent.instructionsFile,
|
|
106
136
|
].filter(name => name !== 'AGENTS.md');
|
|
107
137
|
for (const filename of possibleNames) {
|
|
108
|
-
const sourcePath = path.join(
|
|
138
|
+
const sourcePath = path.join(rulesDir, filename);
|
|
109
139
|
if (fs.existsSync(sourcePath)) {
|
|
110
140
|
return sourcePath;
|
|
111
141
|
}
|
|
@@ -113,15 +143,12 @@ export function resolveInstructionsSource(repoPath, agentId) {
|
|
|
113
143
|
return null;
|
|
114
144
|
}
|
|
115
145
|
export function discoverMemoryFilesFromRepo(repoPath) {
|
|
116
|
-
const
|
|
117
|
-
if (!fs.existsSync(
|
|
146
|
+
const rulesDir = path.join(repoPath, 'rules');
|
|
147
|
+
if (!fs.existsSync(rulesDir)) {
|
|
118
148
|
return [];
|
|
119
149
|
}
|
|
120
150
|
try {
|
|
121
|
-
return
|
|
122
|
-
.readdirSync(memoryDir, { withFileTypes: true })
|
|
123
|
-
.filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
|
|
124
|
-
.map((entry) => entry.name);
|
|
151
|
+
return listRuleMarkdownFiles(rulesDir);
|
|
125
152
|
}
|
|
126
153
|
catch {
|
|
127
154
|
return [];
|
|
@@ -214,30 +241,31 @@ export function getInstructionsContent(agentId, scope = 'user', cwd = process.cw
|
|
|
214
241
|
}
|
|
215
242
|
}
|
|
216
243
|
/**
|
|
217
|
-
* Install
|
|
218
|
-
*
|
|
244
|
+
* Install rules files from repo rules/ to central ~/.agents/rules/ directory.
|
|
245
|
+
* Nested presets/ and rules/ fragments are preserved so @imports keep working.
|
|
219
246
|
*/
|
|
220
247
|
export function installInstructionsCentrally(repoPath, filesToInstall) {
|
|
221
248
|
const installed = [];
|
|
222
249
|
const errors = [];
|
|
223
|
-
const centralDir =
|
|
250
|
+
const centralDir = getUserRulesDir();
|
|
224
251
|
if (!fs.existsSync(centralDir)) {
|
|
225
252
|
fs.mkdirSync(centralDir, { recursive: true });
|
|
226
253
|
}
|
|
227
|
-
const
|
|
228
|
-
if (!fs.existsSync(
|
|
254
|
+
const rulesDir = path.join(repoPath, 'rules');
|
|
255
|
+
if (!fs.existsSync(rulesDir)) {
|
|
229
256
|
return { installed, errors };
|
|
230
257
|
}
|
|
231
258
|
try {
|
|
232
|
-
const files = filesToInstall ??
|
|
259
|
+
const files = filesToInstall ?? listRuleMarkdownFiles(rulesDir);
|
|
233
260
|
for (const file of files) {
|
|
234
|
-
if (!
|
|
261
|
+
if (!isSyncableRuleMarkdown(path.basename(file)))
|
|
235
262
|
continue;
|
|
236
|
-
const sourcePath = path.join(
|
|
263
|
+
const sourcePath = path.join(rulesDir, file);
|
|
237
264
|
const stat = fs.statSync(sourcePath);
|
|
238
265
|
if (!stat.isFile())
|
|
239
266
|
continue;
|
|
240
267
|
const targetPath = path.join(centralDir, file);
|
|
268
|
+
fs.mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
241
269
|
try {
|
|
242
270
|
fs.copyFileSync(sourcePath, targetPath);
|
|
243
271
|
installed.push(file);
|
|
@@ -248,20 +276,21 @@ export function installInstructionsCentrally(repoPath, filesToInstall) {
|
|
|
248
276
|
}
|
|
249
277
|
}
|
|
250
278
|
catch (err) {
|
|
251
|
-
errors.push(`Failed to read
|
|
279
|
+
errors.push(`Failed to read rules directory: ${err.message}`);
|
|
252
280
|
}
|
|
253
281
|
return { installed, errors };
|
|
254
282
|
}
|
|
255
283
|
/**
|
|
256
|
-
* List
|
|
284
|
+
* List top-level rules files from user and system dirs (user wins on collision).
|
|
257
285
|
*/
|
|
258
286
|
export function listCentralMemory() {
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
287
|
+
const seen = new Set();
|
|
288
|
+
for (const dir of [getUserRulesDir(), getResolvedRulesDir()]) {
|
|
289
|
+
if (!fs.existsSync(dir))
|
|
290
|
+
continue;
|
|
291
|
+
for (const f of fs.readdirSync(dir).filter((f) => isSyncableRuleMarkdown(f))) {
|
|
292
|
+
seen.add(f);
|
|
293
|
+
}
|
|
262
294
|
}
|
|
263
|
-
return
|
|
264
|
-
.readdirSync(centralDir)
|
|
265
|
-
.filter((f) => f.endsWith('.md'));
|
|
295
|
+
return Array.from(seen);
|
|
266
296
|
}
|
|
267
|
-
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-shot idempotent migrations for the FOUNDATION refactor.
|
|
3
|
+
*
|
|
4
|
+
* Called from postinstall and as a command-time fallback from agents view/use/pull.
|
|
5
|
+
* Each migration is guarded by an existence check so re-running is safe.
|
|
6
|
+
*/
|
|
7
|
+
/** Run all idempotent migrations. Safe to call multiple times. */
|
|
8
|
+
export declare function runMigration(): void;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-shot idempotent migrations for the FOUNDATION refactor.
|
|
3
|
+
*
|
|
4
|
+
* Called from postinstall and as a command-time fallback from agents view/use/pull.
|
|
5
|
+
* Each migration is guarded by an existence check so re-running is safe.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
const HOME = os.homedir();
|
|
11
|
+
const SYSTEM_DIR = path.join(HOME, '.agents-system');
|
|
12
|
+
const USER_DIR = path.join(HOME, '.agents');
|
|
13
|
+
/**
|
|
14
|
+
* Move ~/.agents-system/agents.yaml -> ~/.agents/agents.yaml.
|
|
15
|
+
* No-op if user file already exists or system file absent.
|
|
16
|
+
* (This is also handled inline in state.ts readMeta, but is exposed here
|
|
17
|
+
* for explicit migration calls from postinstall / CLI entry points.)
|
|
18
|
+
*/
|
|
19
|
+
function migrateAgentsYaml() {
|
|
20
|
+
const src = path.join(SYSTEM_DIR, 'agents.yaml');
|
|
21
|
+
const dest = path.join(USER_DIR, 'agents.yaml');
|
|
22
|
+
if (fs.existsSync(dest) || !fs.existsSync(src))
|
|
23
|
+
return;
|
|
24
|
+
try {
|
|
25
|
+
fs.mkdirSync(USER_DIR, { recursive: true, mode: 0o700 });
|
|
26
|
+
fs.renameSync(src, dest);
|
|
27
|
+
console.log('Migrated agents.yaml to ~/.agents/');
|
|
28
|
+
}
|
|
29
|
+
catch { /* best-effort */ }
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Delete ~/.agents-system/prompts.json (dead file — zero refs in src/).
|
|
33
|
+
*/
|
|
34
|
+
function deleteSystemPromptsJson() {
|
|
35
|
+
const f = path.join(SYSTEM_DIR, 'prompts.json');
|
|
36
|
+
if (!fs.existsSync(f))
|
|
37
|
+
return;
|
|
38
|
+
try {
|
|
39
|
+
fs.unlinkSync(f);
|
|
40
|
+
}
|
|
41
|
+
catch { /* best-effort */ }
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Move ~/.agents-system/config.json -> ~/.agents/teams/config.json.
|
|
45
|
+
* The teams persistence layer already reads the legacy path as a fallback;
|
|
46
|
+
* moving it here keeps the canonical location consistent.
|
|
47
|
+
*/
|
|
48
|
+
function migrateSystemConfigJson() {
|
|
49
|
+
const src = path.join(SYSTEM_DIR, 'config.json');
|
|
50
|
+
const dest = path.join(USER_DIR, 'teams', 'config.json');
|
|
51
|
+
if (!fs.existsSync(src) || fs.existsSync(dest))
|
|
52
|
+
return;
|
|
53
|
+
try {
|
|
54
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true, mode: 0o700 });
|
|
55
|
+
fs.copyFileSync(src, dest);
|
|
56
|
+
fs.unlinkSync(src);
|
|
57
|
+
}
|
|
58
|
+
catch { /* best-effort */ }
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Move promptcuts.yaml from each repo root into hooks/ subdir.
|
|
62
|
+
* ~/.agents-system/promptcuts.yaml -> ~/.agents-system/hooks/promptcuts.yaml
|
|
63
|
+
* ~/.agents/promptcuts.yaml -> ~/.agents/hooks/promptcuts.yaml
|
|
64
|
+
* Idempotent: skips if dest already exists or src absent.
|
|
65
|
+
*/
|
|
66
|
+
function migratePromptcutsIntoHooks() {
|
|
67
|
+
for (const root of [SYSTEM_DIR, USER_DIR]) {
|
|
68
|
+
const src = path.join(root, 'promptcuts.yaml');
|
|
69
|
+
const dest = path.join(root, 'hooks', 'promptcuts.yaml');
|
|
70
|
+
if (fs.existsSync(dest) || !fs.existsSync(src))
|
|
71
|
+
continue;
|
|
72
|
+
try {
|
|
73
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true, mode: 0o700 });
|
|
74
|
+
fs.renameSync(src, dest);
|
|
75
|
+
}
|
|
76
|
+
catch { /* best-effort */ }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Run all idempotent migrations. Safe to call multiple times. */
|
|
80
|
+
export function runMigration() {
|
|
81
|
+
migrateAgentsYaml();
|
|
82
|
+
deleteSystemPromptsJson();
|
|
83
|
+
migrateSystemConfigJson();
|
|
84
|
+
migratePromptcutsIntoHooks();
|
|
85
|
+
}
|