@phnx-labs/agents-cli 0.1.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 +283 -372
- 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 +8 -1
- package/dist/commands/cloud.js +108 -22
- 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 +96 -27
- 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 +16 -4
- 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 +9 -1
- package/dist/commands/profiles.js +56 -7
- 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 +58 -128
- 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 +8 -1
- package/dist/commands/secrets.js +235 -63
- 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 +188 -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 +317 -24
- package/dist/index.d.ts +7 -2
- package/dist/index.js +172 -34
- 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 +197 -21
- 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 +9 -3
- package/dist/lib/cloud/codex.js +53 -13
- package/dist/lib/cloud/factory.d.ts +8 -3
- package/dist/lib/cloud/factory.js +19 -3
- package/dist/lib/cloud/registry.d.ts +10 -1
- package/dist/lib/cloud/registry.js +14 -3
- package/dist/lib/cloud/rush.d.ts +63 -3
- package/dist/lib/cloud/rush.js +273 -20
- package/dist/lib/cloud/store.d.ts +13 -1
- package/dist/lib/cloud/store.js +23 -4
- package/dist/lib/cloud/stream.d.ts +6 -1
- package/dist/lib/cloud/stream.js +95 -39
- package/dist/lib/cloud/types.d.ts +153 -8
- package/dist/lib/cloud/types.js +34 -2
- 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 +23 -6
- package/dist/lib/exec.js +53 -17
- 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 +119 -101
- 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 +10 -4
- package/dist/lib/models.js +36 -15
- 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 +10 -1
- package/dist/lib/profiles-presets.js +9 -1
- package/dist/lib/profiles.d.ts +35 -1
- package/dist/lib/profiles.js +36 -15
- 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 +40 -13
- package/dist/lib/rotate.js +238 -40
- 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 → secrets/bundles.d.ts} +12 -2
- package/dist/lib/{secrets-bundles.js → secrets/bundles.js} +38 -17
- 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 +12 -1
- package/dist/lib/session/artifacts.js +25 -5
- 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 +16 -2
- package/dist/lib/session/types.js +10 -2
- package/dist/lib/shims.d.ts +64 -5
- package/dist/lib/shims.js +309 -47
- 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 +112 -27
- package/dist/lib/state.js +320 -148
- 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 +32 -1
- package/dist/lib/usage.js +70 -6
- package/dist/lib/version-duplicates.d.ts +21 -0
- package/dist/lib/version-duplicates.js +90 -0
- package/dist/lib/versions.d.ts +33 -4
- package/dist/lib/versions.js +376 -108
- package/package.json +32 -17
- 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/cloud.d.ts.map +0 -1
- package/dist/commands/cloud.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/profiles.d.ts.map +0 -1
- package/dist/commands/profiles.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/secrets.d.ts.map +0 -1
- package/dist/commands/secrets.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 -239
- package/dist/lib/__tests__/models.test.js.map +0 -1
- package/dist/lib/__tests__/rotate.test.d.ts +0 -2
- package/dist/lib/__tests__/rotate.test.d.ts.map +0 -1
- package/dist/lib/__tests__/rotate.test.js +0 -80
- package/dist/lib/__tests__/rotate.test.js.map +0 -1
- package/dist/lib/__tests__/secrets-bundles.test.d.ts +0 -2
- package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +0 -1
- package/dist/lib/__tests__/secrets-bundles.test.js +0 -104
- package/dist/lib/__tests__/secrets-bundles.test.js.map +0 -1
- package/dist/lib/__tests__/secrets.test.d.ts +0 -2
- package/dist/lib/__tests__/secrets.test.d.ts.map +0 -1
- package/dist/lib/__tests__/secrets.test.js +0 -90
- package/dist/lib/__tests__/secrets.test.js.map +0 -1
- package/dist/lib/__tests__/shims.test.d.ts +0 -2
- package/dist/lib/__tests__/shims.test.d.ts.map +0 -1
- package/dist/lib/__tests__/shims.test.js +0 -39
- package/dist/lib/__tests__/shims.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 -220
- package/dist/lib/__tests__/usage.test.js.map +0 -1
- package/dist/lib/__tests__/versions.test.d.ts +0 -2
- package/dist/lib/__tests__/versions.test.d.ts.map +0 -1
- package/dist/lib/__tests__/versions.test.js +0 -63
- package/dist/lib/__tests__/versions.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/cloud/codex.d.ts.map +0 -1
- package/dist/lib/cloud/codex.js.map +0 -1
- package/dist/lib/cloud/factory.d.ts.map +0 -1
- package/dist/lib/cloud/factory.js.map +0 -1
- package/dist/lib/cloud/registry.d.ts.map +0 -1
- package/dist/lib/cloud/registry.js.map +0 -1
- package/dist/lib/cloud/rush.d.ts.map +0 -1
- package/dist/lib/cloud/rush.js.map +0 -1
- package/dist/lib/cloud/store.d.ts.map +0 -1
- package/dist/lib/cloud/store.js.map +0 -1
- package/dist/lib/cloud/stream.d.ts.map +0 -1
- package/dist/lib/cloud/stream.js.map +0 -1
- package/dist/lib/cloud/types.d.ts.map +0 -1
- package/dist/lib/cloud/types.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/profiles-keychain.d.ts +0 -3
- package/dist/lib/profiles-keychain.d.ts.map +0 -1
- package/dist/lib/profiles-keychain.js +0 -10
- package/dist/lib/profiles-keychain.js.map +0 -1
- package/dist/lib/profiles-presets.d.ts.map +0 -1
- package/dist/lib/profiles-presets.js.map +0 -1
- package/dist/lib/profiles.d.ts.map +0 -1
- package/dist/lib/profiles.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/rotate.d.ts.map +0 -1
- package/dist/lib/rotate.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/secrets-bundles.d.ts.map +0 -1
- package/dist/lib/secrets-bundles.js.map +0 -1
- package/dist/lib/secrets.d.ts +0 -27
- package/dist/lib/secrets.d.ts.map +0 -1
- package/dist/lib/secrets.js +0 -127
- package/dist/lib/secrets.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/artifacts.d.ts.map +0 -1
- package/dist/lib/session/artifacts.js.map +0 -1
- package/dist/lib/session/db.d.ts.map +0 -1
- package/dist/lib/session/db.js.map +0 -1
- package/dist/lib/session/discover.d.ts.map +0 -1
- package/dist/lib/session/discover.js.map +0 -1
- package/dist/lib/session/parse.d.ts.map +0 -1
- package/dist/lib/session/parse.js.map +0 -1
- package/dist/lib/session/prompt.d.ts.map +0 -1
- package/dist/lib/session/prompt.js.map +0 -1
- package/dist/lib/session/prompt.test.d.ts +0 -2
- package/dist/lib/session/prompt.test.d.ts.map +0 -1
- package/dist/lib/session/prompt.test.js +0 -57
- package/dist/lib/session/prompt.test.js.map +0 -1
- package/dist/lib/session/render.d.ts.map +0 -1
- package/dist/lib/session/render.js.map +0 -1
- package/dist/lib/session/team-filter.d.ts.map +0 -1
- package/dist/lib/session/team-filter.js.map +0 -1
- package/dist/lib/session/team-filter.test.d.ts +0 -2
- package/dist/lib/session/team-filter.test.d.ts.map +0 -1
- package/dist/lib/session/team-filter.test.js +0 -157
- package/dist/lib/session/team-filter.test.js.map +0 -1
- package/dist/lib/session/types.d.ts.map +0 -1
- package/dist/lib/session/types.js.map +0 -1
- package/dist/lib/shims.d.ts.map +0 -1
- package/dist/lib/shims.js.map +0 -1
- package/dist/lib/skills.d.ts.map +0 -1
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/state.d.ts.map +0 -1
- package/dist/lib/state.js.map +0 -1
- package/dist/lib/subagents.d.ts.map +0 -1
- package/dist/lib/subagents.js.map +0 -1
- package/dist/lib/teams/agents.d.ts.map +0 -1
- package/dist/lib/teams/agents.js.map +0 -1
- package/dist/lib/teams/api.d.ts.map +0 -1
- package/dist/lib/teams/api.js.map +0 -1
- package/dist/lib/teams/cloud.d.ts +0 -11
- package/dist/lib/teams/cloud.d.ts.map +0 -1
- package/dist/lib/teams/cloud.js +0 -169
- package/dist/lib/teams/cloud.js.map +0 -1
- package/dist/lib/teams/debug.d.ts.map +0 -1
- package/dist/lib/teams/debug.js.map +0 -1
- package/dist/lib/teams/file_ops.d.ts.map +0 -1
- package/dist/lib/teams/file_ops.js.map +0 -1
- package/dist/lib/teams/parsers.d.ts.map +0 -1
- package/dist/lib/teams/parsers.js.map +0 -1
- package/dist/lib/teams/persistence.d.ts.map +0 -1
- package/dist/lib/teams/persistence.js.map +0 -1
- package/dist/lib/teams/ralph.d.ts +0 -8
- package/dist/lib/teams/ralph.d.ts.map +0 -1
- package/dist/lib/teams/ralph.js +0 -59
- package/dist/lib/teams/ralph.js.map +0 -1
- package/dist/lib/teams/registry.d.ts.map +0 -1
- package/dist/lib/teams/registry.js.map +0 -1
- package/dist/lib/teams/summarizer.d.ts.map +0 -1
- package/dist/lib/teams/summarizer.js.map +0 -1
- package/dist/lib/template.d.ts.map +0 -1
- package/dist/lib/template.js.map +0 -1
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/usage.d.ts.map +0 -1
- package/dist/lib/usage.js.map +0 -1
- package/dist/lib/versions.d.ts.map +0 -1
- package/dist/lib/versions.js.map +0 -1
- package/scripts/rebuild-sqlite.sh +0 -46
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook predicate evaluator.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates the optional `matches:` block on a hook manifest entry against
|
|
5
|
+
* the runtime input passed by the agent CLI on a hook event. All declared
|
|
6
|
+
* predicates AND together — the hook fires only if every one passes.
|
|
7
|
+
*
|
|
8
|
+
* Empty/missing matches => always passes (backward compat with hooks
|
|
9
|
+
* authored before predicate support).
|
|
10
|
+
*
|
|
11
|
+
* Used at hook-fire time by either:
|
|
12
|
+
* (a) generated hook wrappers we install alongside the script, or
|
|
13
|
+
* (b) the script itself, by calling shouldFire() with parsed JSON input.
|
|
14
|
+
*/
|
|
15
|
+
import type { HookMatches } from '../types.js';
|
|
16
|
+
/** Runtime context passed to a hook by the agent CLI. */
|
|
17
|
+
export interface HookInput {
|
|
18
|
+
hook_event_name?: string;
|
|
19
|
+
prompt?: string;
|
|
20
|
+
tool_name?: string;
|
|
21
|
+
tool_args?: unknown;
|
|
22
|
+
cwd?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Decide whether a hook with the given match config should fire on this input.
|
|
26
|
+
* Pure function — no side effects, no IO except git/cwd checks for predicates
|
|
27
|
+
* that explicitly require them.
|
|
28
|
+
*
|
|
29
|
+
* Returns true if the hook should fire (all declared predicates pass), false
|
|
30
|
+
* if it should be skipped.
|
|
31
|
+
*/
|
|
32
|
+
export declare function shouldFire(matches: HookMatches | undefined, input: HookInput): boolean;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook predicate evaluator.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates the optional `matches:` block on a hook manifest entry against
|
|
5
|
+
* the runtime input passed by the agent CLI on a hook event. All declared
|
|
6
|
+
* predicates AND together — the hook fires only if every one passes.
|
|
7
|
+
*
|
|
8
|
+
* Empty/missing matches => always passes (backward compat with hooks
|
|
9
|
+
* authored before predicate support).
|
|
10
|
+
*
|
|
11
|
+
* Used at hook-fire time by either:
|
|
12
|
+
* (a) generated hook wrappers we install alongside the script, or
|
|
13
|
+
* (b) the script itself, by calling shouldFire() with parsed JSON input.
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from 'fs';
|
|
16
|
+
import * as path from 'path';
|
|
17
|
+
import { execSync } from 'child_process';
|
|
18
|
+
function arrayOf(v) {
|
|
19
|
+
if (v === undefined)
|
|
20
|
+
return [];
|
|
21
|
+
return Array.isArray(v) ? v : [v];
|
|
22
|
+
}
|
|
23
|
+
function isGitDirty(cwd) {
|
|
24
|
+
try {
|
|
25
|
+
const out = execSync('git status --porcelain', {
|
|
26
|
+
cwd,
|
|
27
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
28
|
+
encoding: 'utf-8',
|
|
29
|
+
});
|
|
30
|
+
return out.trim().length > 0;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function findProjectRoot(start) {
|
|
37
|
+
let dir = path.resolve(start);
|
|
38
|
+
while (true) {
|
|
39
|
+
if (fs.existsSync(path.join(dir, '.git')))
|
|
40
|
+
return dir;
|
|
41
|
+
const parent = path.dirname(dir);
|
|
42
|
+
if (parent === dir)
|
|
43
|
+
return null;
|
|
44
|
+
dir = parent;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Decide whether a hook with the given match config should fire on this input.
|
|
49
|
+
* Pure function — no side effects, no IO except git/cwd checks for predicates
|
|
50
|
+
* that explicitly require them.
|
|
51
|
+
*
|
|
52
|
+
* Returns true if the hook should fire (all declared predicates pass), false
|
|
53
|
+
* if it should be skipped.
|
|
54
|
+
*/
|
|
55
|
+
export function shouldFire(matches, input) {
|
|
56
|
+
if (!matches)
|
|
57
|
+
return true;
|
|
58
|
+
const cwd = input.cwd || process.cwd();
|
|
59
|
+
if (matches.prompt_contains !== undefined) {
|
|
60
|
+
const prompt = input.prompt ?? '';
|
|
61
|
+
if (!prompt.includes(matches.prompt_contains))
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
if (matches.prompt_matches !== undefined) {
|
|
65
|
+
const prompt = input.prompt ?? '';
|
|
66
|
+
let re;
|
|
67
|
+
try {
|
|
68
|
+
re = new RegExp(matches.prompt_matches);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
if (!re.test(prompt))
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
if (matches.tool_name !== undefined) {
|
|
77
|
+
const allowed = arrayOf(matches.tool_name);
|
|
78
|
+
if (allowed.length > 0) {
|
|
79
|
+
if (!input.tool_name)
|
|
80
|
+
return false;
|
|
81
|
+
if (!allowed.includes(input.tool_name))
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (matches.tool_args_match !== undefined) {
|
|
86
|
+
const serialized = typeof input.tool_args === 'string'
|
|
87
|
+
? input.tool_args
|
|
88
|
+
: JSON.stringify(input.tool_args ?? '');
|
|
89
|
+
let re;
|
|
90
|
+
try {
|
|
91
|
+
re = new RegExp(matches.tool_args_match);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
if (!re.test(serialized))
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
if (matches.cwd_includes !== undefined) {
|
|
100
|
+
const needles = arrayOf(matches.cwd_includes);
|
|
101
|
+
if (needles.length > 0) {
|
|
102
|
+
const hit = needles.some((n) => cwd.includes(n));
|
|
103
|
+
if (!hit)
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (matches.project_has !== undefined) {
|
|
108
|
+
const root = findProjectRoot(cwd);
|
|
109
|
+
if (!root)
|
|
110
|
+
return false;
|
|
111
|
+
if (!fs.existsSync(path.join(root, matches.project_has)))
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
if (matches.git_dirty !== undefined) {
|
|
115
|
+
const dirty = isGitDirty(cwd);
|
|
116
|
+
if (matches.git_dirty !== dirty)
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
return true;
|
|
120
|
+
}
|
package/dist/lib/hooks.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook management -- discovery, registration, and syncing of event hooks.
|
|
3
|
+
*
|
|
4
|
+
* Hooks are shell scripts in ~/.agents/hooks/ that fire on agent events
|
|
5
|
+
* (tool calls, session start, etc.). Each hook directory contains a manifest
|
|
6
|
+
* (agents.yaml) declaring events, matchers, and timeout. This module handles
|
|
7
|
+
* parsing those manifests, registering hooks into agent-native settings files,
|
|
8
|
+
* and syncing them across version switches.
|
|
9
|
+
*/
|
|
1
10
|
import type { AgentId, InstalledHook, ManifestHook } from './types.js';
|
|
2
11
|
export type HookEntry = {
|
|
3
12
|
name: string;
|
|
@@ -93,12 +102,17 @@ export declare function installHooksCentrally(source: string): Promise<{
|
|
|
93
102
|
errors: string[];
|
|
94
103
|
}>;
|
|
95
104
|
/**
|
|
96
|
-
* List hooks from
|
|
105
|
+
* List hooks from user (~/.agents/hooks/) and system (~/.agents-system/hooks/) dirs.
|
|
106
|
+
* User dir takes priority; deduplication preserves first occurrence.
|
|
97
107
|
*/
|
|
98
108
|
export declare function listCentralHooks(): HookEntry[];
|
|
99
109
|
/**
|
|
100
|
-
* Parse ~/.agents/hooks.yaml
|
|
101
|
-
*
|
|
110
|
+
* Parse hooks.yaml manifests. Reads BOTH system (~/.agents-system/hooks.yaml)
|
|
111
|
+
* and user (~/.agents/hooks.yaml), merging with user-wins-on-key-collision
|
|
112
|
+
* precedence. A user entry with `enabled: false` disables the system-shipped
|
|
113
|
+
* hook of the same name without forking the system file.
|
|
114
|
+
*
|
|
115
|
+
* Hooks marked `enabled: false` are dropped from the returned map.
|
|
102
116
|
*/
|
|
103
117
|
export declare function parseHookManifest(): Record<string, ManifestHook>;
|
|
104
118
|
/**
|
|
@@ -113,4 +127,3 @@ export declare function registerHooksToSettings(agentId: AgentId, versionHome: s
|
|
|
113
127
|
registered: string[];
|
|
114
128
|
errors: string[];
|
|
115
129
|
};
|
|
116
|
-
//# sourceMappingURL=hooks.d.ts.map
|
package/dist/lib/hooks.js
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook management -- discovery, registration, and syncing of event hooks.
|
|
3
|
+
*
|
|
4
|
+
* Hooks are shell scripts in ~/.agents/hooks/ that fire on agent events
|
|
5
|
+
* (tool calls, session start, etc.). Each hook directory contains a manifest
|
|
6
|
+
* (agents.yaml) declaring events, matchers, and timeout. This module handles
|
|
7
|
+
* parsing those manifests, registering hooks into agent-native settings files,
|
|
8
|
+
* and syncing them across version switches.
|
|
9
|
+
*/
|
|
1
10
|
import * as fs from 'fs';
|
|
2
11
|
import * as path from 'path';
|
|
3
12
|
import * as yaml from 'yaml';
|
|
4
13
|
import * as TOML from 'smol-toml';
|
|
5
14
|
import { AGENTS, HOOKS_CAPABLE_AGENTS } from './agents.js';
|
|
6
|
-
import {
|
|
15
|
+
import { supports, explainSkip } from './capabilities.js';
|
|
16
|
+
import { setGeminiAutoUpdateDisabled, updateGeminiSettings } from './gemini-settings.js';
|
|
17
|
+
import { getAgentsDir, getHooksDir as getSystemHooksDir, getUserHooksDir, getUserAgentsDir, getProjectAgentsDir } from './state.js';
|
|
18
|
+
function getCentralHooksDir() { return getUserHooksDir(); }
|
|
7
19
|
import { getEffectiveHome, getVersionHomePath, listInstalledVersions } from './versions.js';
|
|
8
20
|
const SCRIPT_EXTENSIONS = new Set([
|
|
9
21
|
'.sh',
|
|
@@ -329,6 +341,10 @@ export function diffVersionHooks(agent, version) {
|
|
|
329
341
|
* Install a single hook from central into a specific version home.
|
|
330
342
|
*/
|
|
331
343
|
export function installHookToVersion(agent, version, hookName) {
|
|
344
|
+
const gate = supports(agent, 'hooks', version);
|
|
345
|
+
if (!gate.ok) {
|
|
346
|
+
return { success: false, error: explainSkip(agent, 'hooks', gate, version) };
|
|
347
|
+
}
|
|
332
348
|
const central = listHookEntriesFromDir(getCentralHooksDir()).find((e) => e.name === hookName);
|
|
333
349
|
if (!central) {
|
|
334
350
|
return { success: false, error: `Hook '${hookName}' not found in central` };
|
|
@@ -464,28 +480,56 @@ export async function installHooksCentrally(source) {
|
|
|
464
480
|
return { installed, errors };
|
|
465
481
|
}
|
|
466
482
|
/**
|
|
467
|
-
* List hooks from
|
|
483
|
+
* List hooks from user (~/.agents/hooks/) and system (~/.agents-system/hooks/) dirs.
|
|
484
|
+
* User dir takes priority; deduplication preserves first occurrence.
|
|
468
485
|
*/
|
|
469
486
|
export function listCentralHooks() {
|
|
470
|
-
|
|
487
|
+
const seen = new Set();
|
|
488
|
+
const results = [];
|
|
489
|
+
for (const dir of [getUserHooksDir(), getSystemHooksDir()]) {
|
|
490
|
+
for (const entry of listHookEntriesFromDir(dir)) {
|
|
491
|
+
if (!seen.has(entry.name)) {
|
|
492
|
+
seen.add(entry.name);
|
|
493
|
+
results.push(entry);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
return results;
|
|
471
498
|
}
|
|
472
499
|
/**
|
|
473
|
-
* Parse ~/.agents/hooks.yaml
|
|
474
|
-
*
|
|
500
|
+
* Parse hooks.yaml manifests. Reads BOTH system (~/.agents-system/hooks.yaml)
|
|
501
|
+
* and user (~/.agents/hooks.yaml), merging with user-wins-on-key-collision
|
|
502
|
+
* precedence. A user entry with `enabled: false` disables the system-shipped
|
|
503
|
+
* hook of the same name without forking the system file.
|
|
504
|
+
*
|
|
505
|
+
* Hooks marked `enabled: false` are dropped from the returned map.
|
|
475
506
|
*/
|
|
476
507
|
export function parseHookManifest() {
|
|
477
|
-
const
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
508
|
+
const merged = {};
|
|
509
|
+
// System first (lower precedence), user second (overrides).
|
|
510
|
+
for (const dir of [getAgentsDir(), getUserAgentsDir()]) {
|
|
511
|
+
const manifestPath = path.join(dir, 'hooks.yaml');
|
|
512
|
+
if (!fs.existsSync(manifestPath))
|
|
513
|
+
continue;
|
|
514
|
+
try {
|
|
515
|
+
const content = fs.readFileSync(manifestPath, 'utf-8');
|
|
516
|
+
const parsed = yaml.parse(content);
|
|
517
|
+
if (!parsed)
|
|
518
|
+
continue;
|
|
519
|
+
for (const [name, def] of Object.entries(parsed)) {
|
|
520
|
+
merged[name] = def;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
catch {
|
|
524
|
+
/* skip unreadable manifest, keep going */
|
|
525
|
+
}
|
|
485
526
|
}
|
|
486
|
-
|
|
487
|
-
|
|
527
|
+
// Strip disabled hooks so they never reach the registrar.
|
|
528
|
+
for (const [name, def] of Object.entries(merged)) {
|
|
529
|
+
if (def.enabled === false)
|
|
530
|
+
delete merged[name];
|
|
488
531
|
}
|
|
532
|
+
return merged;
|
|
489
533
|
}
|
|
490
534
|
// Codex events that support a matcher field (matches tool name or session type).
|
|
491
535
|
// UserPromptSubmit and Stop never include a matcher.
|
|
@@ -549,8 +593,6 @@ function registerHooksForClaude(versionHome, manifest, agentsDir) {
|
|
|
549
593
|
const managedHooksPrefix = path.join(agentsDir, 'hooks') + path.sep;
|
|
550
594
|
const currentManifestPaths = new Set();
|
|
551
595
|
for (const hookDef of Object.values(manifest)) {
|
|
552
|
-
if (hookDef.agents && !hookDef.agents.includes('claude'))
|
|
553
|
-
continue;
|
|
554
596
|
if (!hookDef.events || hookDef.events.length === 0)
|
|
555
597
|
continue;
|
|
556
598
|
currentManifestPaths.add(path.join(agentsDir, 'hooks', hookDef.script));
|
|
@@ -573,8 +615,6 @@ function registerHooksForClaude(versionHome, manifest, agentsDir) {
|
|
|
573
615
|
hooks[event] = eventEntries.filter((g) => g.hooks && g.hooks.length > 0);
|
|
574
616
|
}
|
|
575
617
|
for (const [name, hookDef] of Object.entries(manifest)) {
|
|
576
|
-
if (hookDef.agents && !hookDef.agents.includes('claude'))
|
|
577
|
-
continue;
|
|
578
618
|
if (!hookDef.events || hookDef.events.length === 0)
|
|
579
619
|
continue;
|
|
580
620
|
const commandPath = path.join(agentsDir, 'hooks', hookDef.script);
|
|
@@ -645,8 +685,6 @@ function registerHooksForCodex(versionHome, manifest, agentsDir) {
|
|
|
645
685
|
const managedHooksPrefix = path.join(agentsDir, 'hooks') + path.sep;
|
|
646
686
|
const currentManifestPaths = new Set();
|
|
647
687
|
for (const hookDef of Object.values(manifest)) {
|
|
648
|
-
if (hookDef.agents && !hookDef.agents.includes('codex'))
|
|
649
|
-
continue;
|
|
650
688
|
if (!hookDef.events || hookDef.events.length === 0)
|
|
651
689
|
continue;
|
|
652
690
|
currentManifestPaths.add(path.join(agentsDir, 'hooks', hookDef.script));
|
|
@@ -663,8 +701,6 @@ function registerHooksForCodex(versionHome, manifest, agentsDir) {
|
|
|
663
701
|
hooksFile.hooks[event] = eventGroups.filter((g) => g.hooks && g.hooks.length > 0);
|
|
664
702
|
}
|
|
665
703
|
for (const [name, hookDef] of Object.entries(manifest)) {
|
|
666
|
-
if (hookDef.agents && !hookDef.agents.includes('codex'))
|
|
667
|
-
continue;
|
|
668
704
|
if (!hookDef.events || hookDef.events.length === 0)
|
|
669
705
|
continue;
|
|
670
706
|
const commandPath = path.join(agentsDir, 'hooks', hookDef.script);
|
|
@@ -746,92 +782,74 @@ function registerHooksForCodex(versionHome, manifest, agentsDir) {
|
|
|
746
782
|
function registerHooksForGemini(versionHome, manifest, agentsDir) {
|
|
747
783
|
const registered = [];
|
|
748
784
|
const errors = [];
|
|
749
|
-
const
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
}
|
|
756
|
-
catch {
|
|
757
|
-
errors.push('Failed to parse gemini settings.json');
|
|
758
|
-
return { registered, errors };
|
|
759
|
-
}
|
|
760
|
-
}
|
|
761
|
-
if (!config.hooks || typeof config.hooks !== 'object') {
|
|
762
|
-
config.hooks = {};
|
|
763
|
-
}
|
|
764
|
-
const hooks = config.hooks;
|
|
765
|
-
// Build set of current manifest command paths for gemini to GC stale entries
|
|
766
|
-
const managedHooksPrefix = path.join(agentsDir, 'hooks') + path.sep;
|
|
767
|
-
const currentManifestPaths = new Set();
|
|
768
|
-
for (const hookDef of Object.values(manifest)) {
|
|
769
|
-
if (hookDef.agents && !hookDef.agents.includes('gemini'))
|
|
770
|
-
continue;
|
|
771
|
-
if (!hookDef.events || hookDef.events.length === 0)
|
|
772
|
-
continue;
|
|
773
|
-
currentManifestPaths.add(path.join(agentsDir, 'hooks', hookDef.script));
|
|
774
|
-
}
|
|
775
|
-
// Remove stale entries
|
|
776
|
-
for (const eventEntries of Object.values(hooks)) {
|
|
777
|
-
if (!Array.isArray(eventEntries))
|
|
778
|
-
continue;
|
|
779
|
-
for (const group of eventEntries) {
|
|
780
|
-
if (!group.hooks)
|
|
781
|
-
continue;
|
|
782
|
-
group.hooks = group.hooks.filter((h) => !h.command.startsWith(managedHooksPrefix) || currentManifestPaths.has(h.command));
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
for (const [event, eventEntries] of Object.entries(hooks)) {
|
|
786
|
-
if (!Array.isArray(eventEntries))
|
|
787
|
-
continue;
|
|
788
|
-
hooks[event] = eventEntries.filter((g) => g.hooks && g.hooks.length > 0);
|
|
789
|
-
}
|
|
790
|
-
for (const [name, hookDef] of Object.entries(manifest)) {
|
|
791
|
-
if (hookDef.agents && !hookDef.agents.includes('gemini'))
|
|
792
|
-
continue;
|
|
793
|
-
if (!hookDef.events || hookDef.events.length === 0)
|
|
794
|
-
continue;
|
|
795
|
-
const commandPath = path.join(agentsDir, 'hooks', hookDef.script);
|
|
796
|
-
if (!fs.existsSync(commandPath)) {
|
|
797
|
-
errors.push(`${name}: script not found at ${commandPath}`);
|
|
798
|
-
continue;
|
|
799
|
-
}
|
|
800
|
-
// Gemini timeouts are in milliseconds; manifest timeouts are seconds.
|
|
801
|
-
const timeoutMs = (hookDef.timeout || 600) * 1000;
|
|
802
|
-
for (const event of hookDef.events) {
|
|
803
|
-
const geminiEvent = GEMINI_EVENT_MAP[event] ?? event;
|
|
804
|
-
if (!hooks[geminiEvent]) {
|
|
805
|
-
hooks[geminiEvent] = [];
|
|
785
|
+
const settingsPath = path.join(versionHome, '.gemini', 'settings.json');
|
|
786
|
+
try {
|
|
787
|
+
updateGeminiSettings(settingsPath, (config) => {
|
|
788
|
+
setGeminiAutoUpdateDisabled(config);
|
|
789
|
+
if (!config.hooks || typeof config.hooks !== 'object') {
|
|
790
|
+
config.hooks = {};
|
|
806
791
|
}
|
|
807
|
-
const
|
|
808
|
-
const
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
792
|
+
const hooks = config.hooks;
|
|
793
|
+
const managedHooksPrefix = path.join(agentsDir, 'hooks') + path.sep;
|
|
794
|
+
const currentManifestPaths = new Set();
|
|
795
|
+
for (const hookDef of Object.values(manifest)) {
|
|
796
|
+
if (!hookDef.events || hookDef.events.length === 0)
|
|
797
|
+
continue;
|
|
798
|
+
currentManifestPaths.add(path.join(agentsDir, 'hooks', hookDef.script));
|
|
813
799
|
}
|
|
814
|
-
|
|
815
|
-
|
|
800
|
+
for (const eventEntries of Object.values(hooks)) {
|
|
801
|
+
if (!Array.isArray(eventEntries))
|
|
802
|
+
continue;
|
|
803
|
+
for (const group of eventEntries) {
|
|
804
|
+
if (!group.hooks)
|
|
805
|
+
continue;
|
|
806
|
+
group.hooks = group.hooks.filter((h) => !h.command.startsWith(managedHooksPrefix) || currentManifestPaths.has(h.command));
|
|
807
|
+
}
|
|
816
808
|
}
|
|
817
|
-
const
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
809
|
+
for (const [event, eventEntries] of Object.entries(hooks)) {
|
|
810
|
+
if (!Array.isArray(eventEntries))
|
|
811
|
+
continue;
|
|
812
|
+
hooks[event] = eventEntries.filter((g) => g.hooks && g.hooks.length > 0);
|
|
821
813
|
}
|
|
822
|
-
|
|
823
|
-
|
|
814
|
+
for (const [name, hookDef] of Object.entries(manifest)) {
|
|
815
|
+
if (!hookDef.events || hookDef.events.length === 0)
|
|
816
|
+
continue;
|
|
817
|
+
const commandPath = path.join(agentsDir, 'hooks', hookDef.script);
|
|
818
|
+
if (!fs.existsSync(commandPath)) {
|
|
819
|
+
errors.push(`${name}: script not found at ${commandPath}`);
|
|
820
|
+
continue;
|
|
821
|
+
}
|
|
822
|
+
const timeoutMs = (hookDef.timeout || 600) * 1000;
|
|
823
|
+
for (const event of hookDef.events) {
|
|
824
|
+
const geminiEvent = GEMINI_EVENT_MAP[event] ?? event;
|
|
825
|
+
if (!hooks[geminiEvent]) {
|
|
826
|
+
hooks[geminiEvent] = [];
|
|
827
|
+
}
|
|
828
|
+
const eventEntries = hooks[geminiEvent];
|
|
829
|
+
const matcher = hookDef.matcher || '';
|
|
830
|
+
let matcherGroup = eventEntries.find((e) => (e.matcher || '') === matcher);
|
|
831
|
+
if (!matcherGroup) {
|
|
832
|
+
matcherGroup = { matcher, hooks: [] };
|
|
833
|
+
eventEntries.push(matcherGroup);
|
|
834
|
+
}
|
|
835
|
+
if (!matcherGroup.hooks) {
|
|
836
|
+
matcherGroup.hooks = [];
|
|
837
|
+
}
|
|
838
|
+
const existingIdx = matcherGroup.hooks.findIndex((h) => h.command === commandPath);
|
|
839
|
+
const hookEntry = { name, type: 'command', command: commandPath, timeout: timeoutMs };
|
|
840
|
+
if (existingIdx >= 0) {
|
|
841
|
+
matcherGroup.hooks[existingIdx] = hookEntry;
|
|
842
|
+
}
|
|
843
|
+
else {
|
|
844
|
+
matcherGroup.hooks.push(hookEntry);
|
|
845
|
+
}
|
|
846
|
+
registered.push(`${name} -> ${geminiEvent}`);
|
|
847
|
+
}
|
|
824
848
|
}
|
|
825
|
-
|
|
826
|
-
}
|
|
827
|
-
}
|
|
828
|
-
try {
|
|
829
|
-
fs.mkdirSync(configDir, { recursive: true });
|
|
830
|
-
fs.writeFileSync(settingsPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
849
|
+
});
|
|
831
850
|
}
|
|
832
851
|
catch (err) {
|
|
833
852
|
errors.push(`Failed to write gemini settings.json: ${err.message}`);
|
|
834
853
|
}
|
|
835
854
|
return { registered, errors };
|
|
836
855
|
}
|
|
837
|
-
//# sourceMappingURL=hooks.js.map
|
package/dist/lib/manifest.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import type { Manifest } from './types.js';
|
|
2
|
+
/** Canonical filename for the manifest in any agents repo or project root. */
|
|
2
3
|
export declare const MANIFEST_FILENAME = "agents.yaml";
|
|
4
|
+
/** Parse a YAML string into a typed Manifest object. */
|
|
3
5
|
export declare function parseManifest(content: string): Manifest;
|
|
6
|
+
/** Serialize a Manifest object to a YAML string with 2-space indentation. */
|
|
4
7
|
export declare function serializeManifest(manifest: Manifest): string;
|
|
8
|
+
/** Read and parse agents.yaml from a directory. Returns null if the file does not exist. */
|
|
5
9
|
export declare function readManifest(repoPath: string): Manifest | null;
|
|
10
|
+
/** Write a Manifest object to agents.yaml in the given directory. */
|
|
6
11
|
export declare function writeManifest(repoPath: string, manifest: Manifest): void;
|
|
12
|
+
/** Create a Manifest with sensible defaults for a fresh agents repo. */
|
|
7
13
|
export declare function createDefaultManifest(): Manifest;
|
|
8
|
-
//# sourceMappingURL=manifest.d.ts.map
|
package/dist/lib/manifest.js
CHANGED
|
@@ -1,26 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agents.yaml manifest reading, writing, and serialization.
|
|
3
|
+
*
|
|
4
|
+
* The manifest file (agents.yaml) is the central configuration for version defaults,
|
|
5
|
+
* repository overrides, dependencies, and MCP server declarations.
|
|
6
|
+
*/
|
|
1
7
|
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
8
|
import * as yaml from 'yaml';
|
|
9
|
+
import { safeJoin } from './paths.js';
|
|
10
|
+
/** Canonical filename for the manifest in any agents repo or project root. */
|
|
4
11
|
export const MANIFEST_FILENAME = 'agents.yaml';
|
|
12
|
+
/** Parse a YAML string into a typed Manifest object. */
|
|
5
13
|
export function parseManifest(content) {
|
|
6
14
|
return yaml.parse(content);
|
|
7
15
|
}
|
|
16
|
+
/** Serialize a Manifest object to a YAML string with 2-space indentation. */
|
|
8
17
|
export function serializeManifest(manifest) {
|
|
9
18
|
return yaml.stringify(manifest, { indent: 2 });
|
|
10
19
|
}
|
|
20
|
+
/** Read and parse agents.yaml from a directory. Returns null if the file does not exist. */
|
|
11
21
|
export function readManifest(repoPath) {
|
|
12
|
-
const manifestPath =
|
|
22
|
+
const manifestPath = safeJoin(repoPath, MANIFEST_FILENAME);
|
|
13
23
|
if (!fs.existsSync(manifestPath)) {
|
|
14
24
|
return null;
|
|
15
25
|
}
|
|
16
26
|
const content = fs.readFileSync(manifestPath, 'utf-8');
|
|
17
27
|
return parseManifest(content);
|
|
18
28
|
}
|
|
29
|
+
/** Write a Manifest object to agents.yaml in the given directory. */
|
|
19
30
|
export function writeManifest(repoPath, manifest) {
|
|
20
|
-
const manifestPath =
|
|
31
|
+
const manifestPath = safeJoin(repoPath, MANIFEST_FILENAME);
|
|
21
32
|
const content = serializeManifest(manifest);
|
|
22
33
|
fs.writeFileSync(manifestPath, content, 'utf-8');
|
|
23
34
|
}
|
|
35
|
+
/** Create a Manifest with sensible defaults for a fresh agents repo. */
|
|
24
36
|
export function createDefaultManifest() {
|
|
25
37
|
return {
|
|
26
38
|
agents: {},
|
|
@@ -33,4 +45,3 @@ export function createDefaultManifest() {
|
|
|
33
45
|
},
|
|
34
46
|
};
|
|
35
47
|
}
|
|
36
|
-
//# sourceMappingURL=manifest.js.map
|
package/dist/lib/markdown.d.ts
CHANGED
package/dist/lib/markdown.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal-aware Markdown rendering using marked and marked-terminal.
|
|
3
|
+
*
|
|
4
|
+
* Provides a single function for converting Markdown content into
|
|
5
|
+
* ANSI-formatted text suitable for terminal output.
|
|
6
|
+
*/
|
|
1
7
|
import { marked } from 'marked';
|
|
2
8
|
import { markedTerminal } from 'marked-terminal';
|
|
3
9
|
// @ts-expect-error - marked-terminal types don't match marked's MarkedExtension
|
|
@@ -8,4 +14,3 @@ marked.use(markedTerminal());
|
|
|
8
14
|
export function renderMarkdown(content) {
|
|
9
15
|
return marked.parse(content);
|
|
10
16
|
}
|
|
11
|
-
//# sourceMappingURL=markdown.js.map
|
package/dist/lib/mcp.d.ts
CHANGED