@greppleai/grip 0.0.0-stage → 0.1.3
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 +115 -0
- package/README.md +731 -2
- package/dist/bun/cli.d.ts +3 -0
- package/dist/bun/cli.d.ts.map +1 -0
- package/dist/bun/cli.js +13 -0
- package/dist/bun/cli.js.map +1 -0
- package/dist/bun/embedded-assets.d.ts +3 -0
- package/dist/bun/embedded-assets.d.ts.map +1 -0
- package/dist/bun/embedded-assets.js +52 -0
- package/dist/bun/embedded-assets.js.map +1 -0
- package/dist/bun/register-bedrock.d.ts +2 -0
- package/dist/bun/register-bedrock.d.ts.map +1 -0
- package/dist/bun/register-bedrock.js +4 -0
- package/dist/bun/register-bedrock.js.map +1 -0
- package/dist/bun/restore-sandbox-env.d.ts +13 -0
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
- package/dist/bun/restore-sandbox-env.js +32 -0
- package/dist/bun/restore-sandbox-env.js.map +1 -0
- package/dist/cli/args.d.ts +70 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +442 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +60 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/initial-message.d.ts +18 -0
- package/dist/cli/initial-message.d.ts.map +1 -0
- package/dist/cli/initial-message.js +22 -0
- package/dist/cli/initial-message.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +98 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +35 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +82 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +406 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session.d.ts +970 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +5191 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-guidance.d.ts +5 -0
- package/dist/core/auth-guidance.d.ts.map +1 -0
- package/dist/core/auth-guidance.js +21 -0
- package/dist/core/auth-guidance.js.map +1 -0
- package/dist/core/auth-storage.d.ts +150 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +557 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +26 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +99 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +83 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +220 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +65 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +550 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/compression-detection-ledger.d.ts +34 -0
- package/dist/core/compaction/compression-detection-ledger.d.ts.map +1 -0
- package/dist/core/compaction/compression-detection-ledger.js +52 -0
- package/dist/core/compaction/compression-detection-ledger.js.map +1 -0
- package/dist/core/compaction/compression-detector.d.ts +71 -0
- package/dist/core/compaction/compression-detector.d.ts.map +1 -0
- package/dist/core/compaction/compression-detector.js +407 -0
- package/dist/core/compaction/compression-detector.js.map +1 -0
- package/dist/core/compaction/compression-economics.d.ts +55 -0
- package/dist/core/compaction/compression-economics.d.ts.map +1 -0
- package/dist/core/compaction/compression-economics.js +151 -0
- package/dist/core/compaction/compression-economics.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +28 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +165 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +18 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +75 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +245 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +21 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +230 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +1066 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1864 -0
- package/dist/core/export-html/tool-renderer.d.ts +32 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +108 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +78 -0
- package/dist/core/extensions/loader.d.ts +24 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +613 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +160 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +962 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1311 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +51 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +22 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +52 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +318 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/grip-agent.d.ts +240 -0
- package/dist/core/grip-agent.d.ts.map +1 -0
- package/dist/core/grip-agent.js +1243 -0
- package/dist/core/grip-agent.js.map +1 -0
- package/dist/core/grip-manifest.d.ts +9 -0
- package/dist/core/grip-manifest.d.ts.map +1 -0
- package/dist/core/grip-manifest.js +25 -0
- package/dist/core/grip-manifest.js.map +1 -0
- package/dist/core/hooks/aggregate.d.ts +5 -0
- package/dist/core/hooks/aggregate.d.ts.map +1 -0
- package/dist/core/hooks/aggregate.js +226 -0
- package/dist/core/hooks/aggregate.js.map +1 -0
- package/dist/core/hooks/config.d.ts +14 -0
- package/dist/core/hooks/config.d.ts.map +1 -0
- package/dist/core/hooks/config.js +372 -0
- package/dist/core/hooks/config.js.map +1 -0
- package/dist/core/hooks/executor.d.ts +12 -0
- package/dist/core/hooks/executor.d.ts.map +1 -0
- package/dist/core/hooks/executor.js +708 -0
- package/dist/core/hooks/executor.js.map +1 -0
- package/dist/core/hooks/index.d.ts +9 -0
- package/dist/core/hooks/index.d.ts.map +1 -0
- package/dist/core/hooks/index.js +14 -0
- package/dist/core/hooks/index.js.map +1 -0
- package/dist/core/hooks/matcher.d.ts +10 -0
- package/dist/core/hooks/matcher.d.ts.map +1 -0
- package/dist/core/hooks/matcher.js +70 -0
- package/dist/core/hooks/matcher.js.map +1 -0
- package/dist/core/hooks/trust-store.d.ts +38 -0
- package/dist/core/hooks/trust-store.d.ts.map +1 -0
- package/dist/core/hooks/trust-store.js +167 -0
- package/dist/core/hooks/trust-store.js.map +1 -0
- package/dist/core/hooks/types.d.ts +234 -0
- package/dist/core/hooks/types.d.ts.map +1 -0
- package/dist/core/hooks/types.js +52 -0
- package/dist/core/hooks/types.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts +21 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +82 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/instruction-resource-loader.d.ts +81 -0
- package/dist/core/instruction-resource-loader.d.ts.map +1 -0
- package/dist/core/instruction-resource-loader.js +574 -0
- package/dist/core/instruction-resource-loader.js.map +1 -0
- package/dist/core/keybindings.d.ts +399 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +299 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/lsp/abort.d.ts +3 -0
- package/dist/core/lsp/abort.d.ts.map +1 -0
- package/dist/core/lsp/abort.js +28 -0
- package/dist/core/lsp/abort.js.map +1 -0
- package/dist/core/lsp/client.d.ts +108 -0
- package/dist/core/lsp/client.d.ts.map +1 -0
- package/dist/core/lsp/client.js +586 -0
- package/dist/core/lsp/client.js.map +1 -0
- package/dist/core/lsp/config-loader.d.ts +44 -0
- package/dist/core/lsp/config-loader.d.ts.map +1 -0
- package/dist/core/lsp/config-loader.js +223 -0
- package/dist/core/lsp/config-loader.js.map +1 -0
- package/dist/core/lsp/config.d.ts +134 -0
- package/dist/core/lsp/config.d.ts.map +1 -0
- package/dist/core/lsp/config.js +682 -0
- package/dist/core/lsp/config.js.map +1 -0
- package/dist/core/lsp/diagnostics.d.ts +18 -0
- package/dist/core/lsp/diagnostics.d.ts.map +1 -0
- package/dist/core/lsp/diagnostics.js +311 -0
- package/dist/core/lsp/diagnostics.js.map +1 -0
- package/dist/core/lsp/file-sync.d.ts +58 -0
- package/dist/core/lsp/file-sync.d.ts.map +1 -0
- package/dist/core/lsp/file-sync.js +432 -0
- package/dist/core/lsp/file-sync.js.map +1 -0
- package/dist/core/lsp/integration.d.ts +62 -0
- package/dist/core/lsp/integration.d.ts.map +1 -0
- package/dist/core/lsp/integration.js +145 -0
- package/dist/core/lsp/integration.js.map +1 -0
- package/dist/core/lsp/language-map.d.ts +54 -0
- package/dist/core/lsp/language-map.d.ts.map +1 -0
- package/dist/core/lsp/language-map.js +300 -0
- package/dist/core/lsp/language-map.js.map +1 -0
- package/dist/core/lsp/manager.d.ts +120 -0
- package/dist/core/lsp/manager.d.ts.map +1 -0
- package/dist/core/lsp/manager.js +636 -0
- package/dist/core/lsp/manager.js.map +1 -0
- package/dist/core/lsp/navigation.d.ts +32 -0
- package/dist/core/lsp/navigation.d.ts.map +1 -0
- package/dist/core/lsp/navigation.js +327 -0
- package/dist/core/lsp/navigation.js.map +1 -0
- package/dist/core/lsp/portable-path.d.ts +18 -0
- package/dist/core/lsp/portable-path.d.ts.map +1 -0
- package/dist/core/lsp/portable-path.js +83 -0
- package/dist/core/lsp/portable-path.js.map +1 -0
- package/dist/core/lsp/refactor.d.ts +32 -0
- package/dist/core/lsp/refactor.d.ts.map +1 -0
- package/dist/core/lsp/refactor.js +519 -0
- package/dist/core/lsp/refactor.js.map +1 -0
- package/dist/core/lsp/transport.d.ts +39 -0
- package/dist/core/lsp/transport.d.ts.map +1 -0
- package/dist/core/lsp/transport.js +261 -0
- package/dist/core/lsp/transport.js.map +1 -0
- package/dist/core/messages.d.ts +34 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +140 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +148 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +812 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +115 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +498 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/output-guard.d.ts +7 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +89 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +209 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +2341 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +57 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +353 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/provider-display-names.d.ts +2 -0
- package/dist/core/provider-display-names.d.ts.map +1 -0
- package/dist/core/provider-display-names.js +33 -0
- package/dist/core/provider-display-names.js.map +1 -0
- package/dist/core/remote-workspace-protocol/contract.d.ts +465 -0
- package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/contract.js +825 -0
- package/dist/core/remote-workspace-protocol/contract.js.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts +16 -0
- package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-client.js +54 -0
- package/dist/core/remote-workspace-protocol/guest-shared-client.js.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts +23 -0
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js +112 -0
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts +30 -0
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.js +243 -0
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.js.map +1 -0
- package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts +3 -0
- package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/lima-owner-directory.js +31 -0
- package/dist/core/remote-workspace-protocol/lima-owner-directory.js.map +1 -0
- package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts +9 -0
- package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/lima-owner-lock.js +89 -0
- package/dist/core/remote-workspace-protocol/lima-owner-lock.js.map +1 -0
- package/dist/core/remote-workspace-protocol/session.d.ts +249 -0
- package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/session.js +1842 -0
- package/dist/core/remote-workspace-protocol/session.js.map +1 -0
- package/dist/core/remote-workspace-protocol/shared-transport.d.ts +71 -0
- package/dist/core/remote-workspace-protocol/shared-transport.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/shared-transport.js +68 -0
- package/dist/core/remote-workspace-protocol/shared-transport.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +32 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +257 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +200 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +1209 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/rules.d.ts +40 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +57 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/sandbox/command.d.ts +25 -0
- package/dist/core/sandbox/command.d.ts.map +1 -0
- package/dist/core/sandbox/command.js +102 -0
- package/dist/core/sandbox/command.js.map +1 -0
- package/dist/core/sandbox/config.d.ts +91 -0
- package/dist/core/sandbox/config.d.ts.map +1 -0
- package/dist/core/sandbox/config.js +88 -0
- package/dist/core/sandbox/config.js.map +1 -0
- package/dist/core/sandbox/lima-guest-binary.d.ts +11 -0
- package/dist/core/sandbox/lima-guest-binary.d.ts.map +1 -0
- package/dist/core/sandbox/lima-guest-binary.js +140 -0
- package/dist/core/sandbox/lima-guest-binary.js.map +1 -0
- package/dist/core/sandbox/lima.d.ts +57 -0
- package/dist/core/sandbox/lima.d.ts.map +1 -0
- package/dist/core/sandbox/lima.js +716 -0
- package/dist/core/sandbox/lima.js.map +1 -0
- package/dist/core/sandbox/shared-lima-roots.d.ts +11 -0
- package/dist/core/sandbox/shared-lima-roots.d.ts.map +1 -0
- package/dist/core/sandbox/shared-lima-roots.js +25 -0
- package/dist/core/sandbox/shared-lima-roots.js.map +1 -0
- package/dist/core/sandbox/update-shared-guest-binary.d.ts +8 -0
- package/dist/core/sandbox/update-shared-guest-binary.d.ts.map +1 -0
- package/dist/core/sandbox/update-shared-guest-binary.js +100 -0
- package/dist/core/sandbox/update-shared-guest-binary.js.map +1 -0
- package/dist/core/session/constants.d.ts +2 -0
- package/dist/core/session/constants.d.ts.map +1 -0
- package/dist/core/session/constants.js +2 -0
- package/dist/core/session/constants.js.map +1 -0
- package/dist/core/session/context-metadata.d.ts +5 -0
- package/dist/core/session/context-metadata.d.ts.map +1 -0
- package/dist/core/session/context-metadata.js +55 -0
- package/dist/core/session/context-metadata.js.map +1 -0
- package/dist/core/session/context.d.ts +14 -0
- package/dist/core/session/context.d.ts.map +1 -0
- package/dist/core/session/context.js +117 -0
- package/dist/core/session/context.js.map +1 -0
- package/dist/core/session/ids.d.ts +9 -0
- package/dist/core/session/ids.d.ts.map +1 -0
- package/dist/core/session/ids.js +21 -0
- package/dist/core/session/ids.js.map +1 -0
- package/dist/core/session/in-memory-session-manager.d.ts +17 -0
- package/dist/core/session/in-memory-session-manager.d.ts.map +1 -0
- package/dist/core/session/in-memory-session-manager.js +40 -0
- package/dist/core/session/in-memory-session-manager.js.map +1 -0
- package/dist/core/session/in-memory-session.d.ts +7 -0
- package/dist/core/session/in-memory-session.d.ts.map +1 -0
- package/dist/core/session/in-memory-session.js +11 -0
- package/dist/core/session/in-memory-session.js.map +1 -0
- package/dist/core/session/jsonl-errors.d.ts +36 -0
- package/dist/core/session/jsonl-errors.d.ts.map +1 -0
- package/dist/core/session/jsonl-errors.js +49 -0
- package/dist/core/session/jsonl-errors.js.map +1 -0
- package/dist/core/session/jsonl-helpers.d.ts +20 -0
- package/dist/core/session/jsonl-helpers.d.ts.map +1 -0
- package/dist/core/session/jsonl-helpers.js +21 -0
- package/dist/core/session/jsonl-helpers.js.map +1 -0
- package/dist/core/session/local-session-manager.d.ts +30 -0
- package/dist/core/session/local-session-manager.d.ts.map +1 -0
- package/dist/core/session/local-session-manager.js +205 -0
- package/dist/core/session/local-session-manager.js.map +1 -0
- package/dist/core/session/local-session.d.ts +9 -0
- package/dist/core/session/local-session.d.ts.map +1 -0
- package/dist/core/session/local-session.js +15 -0
- package/dist/core/session/local-session.js.map +1 -0
- package/dist/core/session/migrations.d.ts +11 -0
- package/dist/core/session/migrations.d.ts.map +1 -0
- package/dist/core/session/migrations.js +78 -0
- package/dist/core/session/migrations.js.map +1 -0
- package/dist/core/session/remote-session-client.d.ts +83 -0
- package/dist/core/session/remote-session-client.d.ts.map +1 -0
- package/dist/core/session/remote-session-client.js +224 -0
- package/dist/core/session/remote-session-client.js.map +1 -0
- package/dist/core/session/remote-session-manager.d.ts +32 -0
- package/dist/core/session/remote-session-manager.d.ts.map +1 -0
- package/dist/core/session/remote-session-manager.js +124 -0
- package/dist/core/session/remote-session-manager.js.map +1 -0
- package/dist/core/session/remote-session.d.ts +20 -0
- package/dist/core/session/remote-session.d.ts.map +1 -0
- package/dist/core/session/remote-session.js +33 -0
- package/dist/core/session/remote-session.js.map +1 -0
- package/dist/core/session/session-manager.d.ts +18 -0
- package/dist/core/session/session-manager.d.ts.map +1 -0
- package/dist/core/session/session-manager.js +2 -0
- package/dist/core/session/session-manager.js.map +1 -0
- package/dist/core/session/session.d.ts +140 -0
- package/dist/core/session/session.d.ts.map +1 -0
- package/dist/core/session/session.js +461 -0
- package/dist/core/session/session.js.map +1 -0
- package/dist/core/session/stores/in-memory-session-store.d.ts +39 -0
- package/dist/core/session/stores/in-memory-session-store.d.ts.map +1 -0
- package/dist/core/session/stores/in-memory-session-store.js +168 -0
- package/dist/core/session/stores/in-memory-session-store.js.map +1 -0
- package/dist/core/session/stores/jsonl-session-store.d.ts +97 -0
- package/dist/core/session/stores/jsonl-session-store.d.ts.map +1 -0
- package/dist/core/session/stores/jsonl-session-store.js +1140 -0
- package/dist/core/session/stores/jsonl-session-store.js.map +1 -0
- package/dist/core/session/stores/remote-session-store.d.ts +44 -0
- package/dist/core/session/stores/remote-session-store.d.ts.map +1 -0
- package/dist/core/session/stores/remote-session-store.js +159 -0
- package/dist/core/session/stores/remote-session-store.js.map +1 -0
- package/dist/core/session/stores/session-store.d.ts +42 -0
- package/dist/core/session/stores/session-store.d.ts.map +1 -0
- package/dist/core/session/stores/session-store.js +2 -0
- package/dist/core/session/stores/session-store.js.map +1 -0
- package/dist/core/session/types.d.ts +141 -0
- package/dist/core/session/types.d.ts.map +1 -0
- package/dist/core/session/types.js +2 -0
- package/dist/core/session/types.js.map +1 -0
- package/dist/core/session/usage-ledger.d.ts +18 -0
- package/dist/core/session/usage-ledger.d.ts.map +1 -0
- package/dist/core/session/usage-ledger.js +68 -0
- package/dist/core/session/usage-ledger.js.map +1 -0
- package/dist/core/session-cwd.d.ts +19 -0
- package/dist/core/session-cwd.d.ts.map +1 -0
- package/dist/core/session-cwd.js +38 -0
- package/dist/core/session-cwd.js.map +1 -0
- package/dist/core/settings-manager.d.ts +314 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +991 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +40 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +57 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +36 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/source-info.d.ts +26 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +27 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/system-prompt.d.ts +32 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +131 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/telemetry.d.ts +3 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +9 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/timings.d.ts +10 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +41 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +51 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +321 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/compress-context.d.ts +27 -0
- package/dist/core/tools/compress-context.d.ts.map +1 -0
- package/dist/core/tools/compress-context.js +142 -0
- package/dist/core/tools/compress-context.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +82 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +327 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +50 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +324 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +8 -0
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-queue.js +69 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -0
- package/dist/core/tools/find.d.ts +22 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +268 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +27 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +332 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/hash-store.d.ts +12 -0
- package/dist/core/tools/hash-store.d.ts.map +1 -0
- package/dist/core/tools/hash-store.js +48 -0
- package/dist/core/tools/hash-store.js.map +1 -0
- package/dist/core/tools/hashline/apply.d.ts +40 -0
- package/dist/core/tools/hashline/apply.d.ts.map +1 -0
- package/dist/core/tools/hashline/apply.js +261 -0
- package/dist/core/tools/hashline/apply.js.map +1 -0
- package/dist/core/tools/hashline/hash.d.ts +56 -0
- package/dist/core/tools/hashline/hash.d.ts.map +1 -0
- package/dist/core/tools/hashline/hash.js +196 -0
- package/dist/core/tools/hashline/hash.js.map +1 -0
- package/dist/core/tools/hashline/parse.d.ts +8 -0
- package/dist/core/tools/hashline/parse.d.ts.map +1 -0
- package/dist/core/tools/hashline/parse.js +41 -0
- package/dist/core/tools/hashline/parse.js.map +1 -0
- package/dist/core/tools/hashline/resolve.d.ts +51 -0
- package/dist/core/tools/hashline/resolve.d.ts.map +1 -0
- package/dist/core/tools/hashline/resolve.js +187 -0
- package/dist/core/tools/hashline/resolve.js.map +1 -0
- package/dist/core/tools/hashline-utils.d.ts +6 -0
- package/dist/core/tools/hashline-utils.d.ts.map +1 -0
- package/dist/core/tools/hashline-utils.js +23 -0
- package/dist/core/tools/hashline-utils.js.map +1 -0
- package/dist/core/tools/index.d.ts +36 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +141 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +21 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +156 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/operations.d.ts +212 -0
- package/dist/core/tools/operations.d.ts.map +1 -0
- package/dist/core/tools/operations.js +793 -0
- package/dist/core/tools/operations.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts +54 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +184 -0
- package/dist/core/tools/output-accumulator.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +9 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +99 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +32 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +318 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +33 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +61 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/replace-diff.d.ts +16 -0
- package/dist/core/tools/replace-diff.d.ts.map +1 -0
- package/dist/core/tools/replace-diff.js +117 -0
- package/dist/core/tools/replace-diff.js.map +1 -0
- package/dist/core/tools/replace-normalize.d.ts +2 -0
- package/dist/core/tools/replace-normalize.d.ts.map +1 -0
- package/dist/core/tools/replace-normalize.js +73 -0
- package/dist/core/tools/replace-normalize.js.map +1 -0
- package/dist/core/tools/replace-render.d.ts +51 -0
- package/dist/core/tools/replace-render.d.ts.map +1 -0
- package/dist/core/tools/replace-render.js +162 -0
- package/dist/core/tools/replace-render.js.map +1 -0
- package/dist/core/tools/runtime.d.ts +2 -0
- package/dist/core/tools/runtime.d.ts.map +1 -0
- package/dist/core/tools/runtime.js +6 -0
- package/dist/core/tools/runtime.js.map +1 -0
- package/dist/core/tools/session-history.d.ts +55 -0
- package/dist/core/tools/session-history.d.ts.map +1 -0
- package/dist/core/tools/session-history.js +649 -0
- package/dist/core/tools/session-history.js.map +1 -0
- package/dist/core/tools/subagent-agents.d.ts +29 -0
- package/dist/core/tools/subagent-agents.d.ts.map +1 -0
- package/dist/core/tools/subagent-agents.js +223 -0
- package/dist/core/tools/subagent-agents.js.map +1 -0
- package/dist/core/tools/subagent.d.ts +185 -0
- package/dist/core/tools/subagent.d.ts.map +1 -0
- package/dist/core/tools/subagent.js +1309 -0
- package/dist/core/tools/subagent.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +34 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +39 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +215 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/websearch.d.ts +33 -0
- package/dist/core/tools/websearch.d.ts.map +1 -0
- package/dist/core/tools/websearch.js +341 -0
- package/dist/core/tools/websearch.js.map +1 -0
- package/dist/core/tools/workspace-tool-host.d.ts +102 -0
- package/dist/core/tools/workspace-tool-host.d.ts.map +1 -0
- package/dist/core/tools/workspace-tool-host.js +348 -0
- package/dist/core/tools/workspace-tool-host.js.map +1 -0
- package/dist/core/tools/write.d.ts +16 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +204 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/core/workspace-identity.d.ts +7 -0
- package/dist/core/workspace-identity.d.ts.map +1 -0
- package/dist/core/workspace-identity.js +2 -0
- package/dist/core/workspace-identity.js.map +1 -0
- package/dist/daemon/activity-budget.d.ts +10 -0
- package/dist/daemon/activity-budget.d.ts.map +1 -0
- package/dist/daemon/activity-budget.js +34 -0
- package/dist/daemon/activity-budget.js.map +1 -0
- package/dist/daemon/command.d.ts +6 -0
- package/dist/daemon/command.d.ts.map +1 -0
- package/dist/daemon/command.js +58 -0
- package/dist/daemon/command.js.map +1 -0
- package/dist/daemon/config.d.ts +45 -0
- package/dist/daemon/config.d.ts.map +1 -0
- package/dist/daemon/config.js +319 -0
- package/dist/daemon/config.js.map +1 -0
- package/dist/daemon/help.d.ts +2 -0
- package/dist/daemon/help.d.ts.map +1 -0
- package/dist/daemon/help.js +42 -0
- package/dist/daemon/help.js.map +1 -0
- package/dist/daemon/lsp-config.d.ts +4 -0
- package/dist/daemon/lsp-config.d.ts.map +1 -0
- package/dist/daemon/lsp-config.js +155 -0
- package/dist/daemon/lsp-config.js.map +1 -0
- package/dist/daemon/outbound-budget.d.ts +10 -0
- package/dist/daemon/outbound-budget.d.ts.map +1 -0
- package/dist/daemon/outbound-budget.js +30 -0
- package/dist/daemon/outbound-budget.js.map +1 -0
- package/dist/daemon/security.d.ts +19 -0
- package/dist/daemon/security.d.ts.map +1 -0
- package/dist/daemon/security.js +177 -0
- package/dist/daemon/security.js.map +1 -0
- package/dist/daemon/server.d.ts +20 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +480 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/shared-connection.d.ts +33 -0
- package/dist/daemon/shared-connection.d.ts.map +1 -0
- package/dist/daemon/shared-connection.js +271 -0
- package/dist/daemon/shared-connection.js.map +1 -0
- package/dist/daemon/shared-revision.d.ts +5 -0
- package/dist/daemon/shared-revision.d.ts.map +1 -0
- package/dist/daemon/shared-revision.js +61 -0
- package/dist/daemon/shared-revision.js.map +1 -0
- package/dist/daemon/shared-roots.d.ts +9 -0
- package/dist/daemon/shared-roots.d.ts.map +1 -0
- package/dist/daemon/shared-roots.js +33 -0
- package/dist/daemon/shared-roots.js.map +1 -0
- package/dist/daemon/workspace-runtime.d.ts +46 -0
- package/dist/daemon/workspace-runtime.d.ts.map +1 -0
- package/dist/daemon/workspace-runtime.js +705 -0
- package/dist/daemon/workspace-runtime.js.map +1 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +39 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +765 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +35 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +412 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +30 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +159 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +36 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +173 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +18 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +54 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +17 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +45 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +17 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +46 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +74 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +514 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +25 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +85 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +81 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +118 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +22 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +128 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +83 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +36 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +227 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/hook-execution.d.ts +19 -0
- package/dist/modes/interactive/components/hook-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/hook-execution.js +185 -0
- package/dist/modes/interactive/components/hook-execution.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +36 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +55 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +176 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts +4 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.js +19 -0
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
- package/dist/modes/interactive/components/mermaid.d.ts +14 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +228 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/message-card.d.ts +9 -0
- package/dist/modes/interactive/components/message-card.d.ts.map +1 -0
- package/dist/modes/interactive/components/message-card.js +24 -0
- package/dist/modes/interactive/components/message-card.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +52 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +296 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +165 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +50 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +300 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +22 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +144 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +108 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +835 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +81 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +455 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +39 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +18 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +48 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +50 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +51 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +67 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +312 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +127 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +1098 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +114 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +16 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +50 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +554 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +5870 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +86 -0
- package/dist/modes/interactive/theme/light.json +85 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +109 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +1040 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/json-event.d.ts +28 -0
- package/dist/modes/json-event.d.ts.map +1 -0
- package/dist/modes/json-event.js +12 -0
- package/dist/modes/json-event.js.map +1 -0
- package/dist/modes/print-mode.d.ts +29 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +142 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/jsonl.d.ts +17 -0
- package/dist/modes/rpc/jsonl.d.ts.map +1 -0
- package/dist/modes/rpc/jsonl.js +49 -0
- package/dist/modes/rpc/jsonl.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +321 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +755 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +963 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +652 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/package-manager-cli.d.ts +4 -0
- package/dist/package-manager-cli.d.ts.map +1 -0
- package/dist/package-manager-cli.js +488 -0
- package/dist/package-manager-cli.js.map +1 -0
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +25 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/changelog.d.ts +23 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +74 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/child-process.d.ts +15 -0
- package/dist/utils/child-process.d.ts.map +1 -0
- package/dist/utils/child-process.js +88 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +13 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +248 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +11 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +20 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +4 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +171 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/deprecation.d.ts +4 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/deprecation.js +13 -0
- package/dist/utils/deprecation.js.map +1 -0
- package/dist/utils/directory-completions.d.ts +5 -0
- package/dist/utils/directory-completions.d.ts.map +1 -0
- package/dist/utils/directory-completions.js +64 -0
- package/dist/utils/directory-completions.js.map +1 -0
- package/dist/utils/exif-orientation.d.ts +6 -0
- package/dist/utils/exif-orientation.d.ts.map +1 -0
- package/dist/utils/exif-orientation.js +166 -0
- package/dist/utils/exif-orientation.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs-watch.d.ts +5 -0
- package/dist/utils/fs-watch.d.ts.map +1 -0
- package/dist/utils/fs-watch.js +25 -0
- package/dist/utils/fs-watch.js.map +1 -0
- package/dist/utils/git.d.ts +27 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +237 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/grip-user-agent.d.ts +2 -0
- package/dist/utils/grip-user-agent.d.ts.map +1 -0
- package/dist/utils/grip-user-agent.js +5 -0
- package/dist/utils/grip-user-agent.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +40 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/image-convert.d.ts +12 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +43 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-process.d.ts +18 -0
- package/dist/utils/image-process.d.ts.map +1 -0
- package/dist/utils/image-process.js +83 -0
- package/dist/utils/image-process.js.map +1 -0
- package/dist/utils/image-resize-core.d.ts +30 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -0
- package/dist/utils/image-resize-core.js +133 -0
- package/dist/utils/image-resize-core.js.map +1 -0
- package/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/dist/utils/image-resize-worker.js +31 -0
- package/dist/utils/image-resize-worker.js.map +1 -0
- package/dist/utils/image-resize.d.ts +19 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +86 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/mime.d.ts +3 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +110 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/open-browser.d.ts +9 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +22 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/paths.d.ts +31 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +87 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/photon.d.ts +22 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +126 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +28 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +188 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts +12 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +125 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +5 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +329 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/dist/utils/version-check.d.ts +14 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +91 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/utils/windows-self-update.d.ts.map +1 -0
- package/dist/utils/windows-self-update.js +77 -0
- package/dist/utils/windows-self-update.js.map +1 -0
- package/docs/compaction.md +408 -0
- package/docs/custom-provider.md +714 -0
- package/docs/daemon-architecture.md +399 -0
- package/docs/daemon.md +112 -0
- package/docs/development.md +72 -0
- package/docs/docs.json +164 -0
- package/docs/extensions.md +2745 -0
- package/docs/hooks.md +85 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/index.md +77 -0
- package/docs/json.md +89 -0
- package/docs/keybindings.md +230 -0
- package/docs/lsp.md +499 -0
- package/docs/migrating-to-grip.md +18 -0
- package/docs/models.md +496 -0
- package/docs/packages.md +228 -0
- package/docs/prompt-templates.md +88 -0
- package/docs/providers.md +251 -0
- package/docs/quickstart.md +159 -0
- package/docs/rpc.md +1492 -0
- package/docs/rules.md +117 -0
- package/docs/sandbox.md +104 -0
- package/docs/sdk.md +360 -0
- package/docs/session-format.md +414 -0
- package/docs/sessions.md +137 -0
- package/docs/settings.md +372 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +246 -0
- package/docs/terminal-setup.md +112 -0
- package/docs/termux.md +112 -0
- package/docs/themes.md +295 -0
- package/docs/tmux.md +61 -0
- package/docs/tui.md +918 -0
- package/docs/usage.md +304 -0
- package/docs/windows.md +17 -0
- package/examples/README.md +29 -0
- package/examples/daemon-docker/Dockerfile +43 -0
- package/examples/daemon-docker/README.md +45 -0
- package/examples/extensions/README.md +208 -0
- package/examples/extensions/auto-commit-on-exit.ts +46 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/border-status-editor.ts +145 -0
- package/examples/extensions/built-in-tool-renderer.ts +259 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +82 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +131 -0
- package/examples/extensions/custom-footer.ts +79 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +707 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +402 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +104 -0
- package/examples/extensions/dirty-repo-guard.ts +59 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +133 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/examples/extensions/dynamic-resources/RULES.md +8 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +16 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/git-merge-and-resolve.ts +125 -0
- package/examples/extensions/github-issue-autocomplete.ts +191 -0
- package/examples/extensions/handoff.ts +191 -0
- package/examples/extensions/hello.ts +26 -0
- package/examples/extensions/hidden-thinking-label.ts +53 -0
- package/examples/extensions/inline-bash.ts +104 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +194 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +428 -0
- package/examples/extensions/modal-editor.ts +86 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +1374 -0
- package/examples/extensions/overlay-test.ts +171 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +346 -0
- package/examples/extensions/plan-mode/utils.ts +172 -0
- package/examples/extensions/preset.ts +426 -0
- package/examples/extensions/prompt-customizer.ts +97 -0
- package/examples/extensions/protected-paths.ts +29 -0
- package/examples/extensions/provider-payload.ts +18 -0
- package/examples/extensions/qna.ts +125 -0
- package/examples/extensions/question.ts +294 -0
- package/examples/extensions/questionnaire.ts +459 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +118 -0
- package/examples/extensions/sandbox/index.ts +320 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +381 -0
- package/examples/extensions/space-invaders.ts +597 -0
- package/examples/extensions/status-line.ts +32 -0
- package/examples/extensions/structured-output.ts +65 -0
- package/examples/extensions/subagent/README.md +175 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/subagent/index.ts +1083 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +186 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/tic-tac-toe.ts +1091 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +306 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +141 -0
- package/examples/extensions/trigger-compact.ts +50 -0
- package/examples/extensions/truncated-tool.ts +200 -0
- package/examples/extensions/widget-placement.ts +9 -0
- package/examples/extensions/with-deps/index.ts +32 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/extensions/working-indicator.ts +123 -0
- package/examples/extensions/working-message-test.ts +25 -0
- package/examples/remote-session-server/README.md +71 -0
- package/examples/remote-session-server/server.ts +353 -0
- package/examples/rpc-extension-ui.ts +642 -0
- package/examples/sdk/01-minimal.ts +27 -0
- package/examples/sdk/02-custom-model.ts +54 -0
- package/examples/sdk/03-custom-prompt.ts +76 -0
- package/examples/sdk/04-skills.ts +60 -0
- package/examples/sdk/05-tools.ts +55 -0
- package/examples/sdk/06-extensions.ts +94 -0
- package/examples/sdk/07-context-files.ts +47 -0
- package/examples/sdk/08-prompt-templates.ts +56 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +50 -0
- package/examples/sdk/10-settings.ts +58 -0
- package/examples/sdk/11-sessions.ts +54 -0
- package/examples/sdk/12-full-control.ts +79 -0
- package/examples/sdk/13-session-runtime.ts +49 -0
- package/examples/sdk/README.md +94 -0
- package/npm-shrinkwrap.json +1878 -0
- package/package.json +101 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-history.js","sourceRoot":"","sources":["../../../src/core/tools/session-history.ts"],"names":[],"mappings":"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","sourcesContent":["import { Worker } from \"node:worker_threads\";\nimport type { AgentTool } from \"@greppleai/grip-agent-core\";\nimport { StringEnum } from \"@greppleai/grip-ai\";\nimport type { Static } from \"typebox\";\nimport { Type } from \"typebox\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport { STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE } from \"../messages.ts\";\nimport { getLatestCompactionEntry, projectSessionContextEntries } from \"../session/context.ts\";\nimport type { ReadonlySession } from \"../session/session.ts\";\nimport type { SessionEntry } from \"../session/types.ts\";\nimport { abortIf } from \"./runtime.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\nimport { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, truncateHead, truncateLine } from \"./truncate.ts\";\n\nconst DEFAULT_SEARCH_RESULTS = 20;\nconst MAX_SEARCH_RESULTS = 50;\nconst MAX_CONTEXT_LINES = 5;\nconst MAX_PATTERN_LENGTH = 1000;\nconst MAX_DISPLAY_LINE_LENGTH = 500;\nconst MAX_SEARCH_LINE_LENGTH = 10_000;\nconst MAX_SEARCH_BYTES = 5 * 1024 * 1024;\nconst MAX_SEARCH_LINES = 100_000;\nconst MAX_ENTRY_SERIALIZATION_BYTES = 5 * 1024 * 1024;\nconst REGEX_TIMEOUT_MS = 1000;\n\nconst REGEX_WORKER_SOURCE = `\nconst { parentPort, workerData } = require(\"node:worker_threads\");\ntry {\n const expression = new RegExp(workerData.pattern, workerData.ignoreCase ? \"iu\" : \"u\");\n const indexes = [];\n for (let index = 0; index < workerData.lines.length; index++) {\n if (expression.test(workerData.lines[index])) indexes.push(index);\n }\n parentPort.postMessage({ indexes });\n} catch (error) {\n parentPort.postMessage({ error: error instanceof Error ? error.message : String(error) });\n}\n`;\n\nconst sessionSearchSchema = Type.Object({\n\tpattern: Type.String({\n\t\tdescription:\n\t\t\t\"JavaScript regular expression to search for, without / delimiters; use fixedStrings for literal matching\",\n\t\tmaxLength: MAX_PATTERN_LENGTH,\n\t}),\n\tignoreCase: Type.Optional(Type.Boolean({ description: \"Perform case-insensitive matching, like grep -i\" })),\n\tfixedStrings: Type.Optional(\n\t\tType.Boolean({ description: \"Treat pattern as a literal string instead of a regular expression, like grep -F\" }),\n\t),\n\tbeforeContext: Type.Optional(\n\t\tType.Integer({\n\t\t\tdescription: `Context lines before each match (default 0, max ${MAX_CONTEXT_LINES}), like grep -B`,\n\t\t\tminimum: 0,\n\t\t\tmaximum: MAX_CONTEXT_LINES,\n\t\t}),\n\t),\n\tafterContext: Type.Optional(\n\t\tType.Integer({\n\t\t\tdescription: `Context lines after each match (default 0, max ${MAX_CONTEXT_LINES}), like grep -A`,\n\t\t\tminimum: 0,\n\t\t\tmaximum: MAX_CONTEXT_LINES,\n\t\t}),\n\t),\n\tmaxResults: Type.Optional(\n\t\tType.Integer({\n\t\t\tdescription: `Maximum matching lines to return (default ${DEFAULT_SEARCH_RESULTS}, max ${MAX_SEARCH_RESULTS})`,\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SEARCH_RESULTS,\n\t\t}),\n\t),\n\tscope: Type.Optional(\n\t\tStringEnum([\"context\", \"branch\", \"all\"] as const, {\n\t\t\tdescription: \"Search entries in the current model context (default), current branch ancestry, or every branch\",\n\t\t}),\n\t),\n});\n\nconst sessionEntryGetSchema = Type.Object({\n\tentryId: Type.String({\n\t\tdescription: \"Exact session entry ID returned by session_search or another session API\",\n\t\tminLength: 1,\n\t}),\n});\n\nexport type SessionHistoryToolName = \"session_search\" | \"session_entry_get\";\nexport type SessionSearchToolInput = Static<typeof sessionSearchSchema>;\nexport type SessionEntryGetToolInput = Static<typeof sessionEntryGetSchema>;\nexport type SessionSearchScope = \"context\" | \"branch\" | \"all\";\n\nexport interface SessionSearchMatch {\n\tentryId: string;\n\tentryType: string;\n\trole?: string;\n\ttimestamp: string;\n\tlineNumber: number;\n\tline: string;\n}\n\nexport interface SessionSearchToolDetails {\n\tpattern: string;\n\tignoreCase: boolean;\n\tfixedStrings: boolean;\n\tscope: SessionSearchScope;\n\tmatchCount: number;\n\treturnedMatchCount: number;\n\tmatches: SessionSearchMatch[];\n\tscannedEntries: number;\n\tscannedLines: number;\n\tscannedBytes: number;\n\tscanTruncated: boolean;\n\toutputTruncated: boolean;\n}\n\nexport interface SessionEntryGetToolDetails {\n\tentryId: string;\n\tentryType: string;\n\tonCurrentBranch: boolean;\n\toutputTruncated: boolean;\n}\n\ninterface SearchDocument {\n\tentry: SessionEntry;\n\trole?: string;\n\tlines: string[];\n\tbytes: number;\n\ttruncated: boolean;\n\tlimitReached: boolean;\n}\n\ninterface SearchLine {\n\tdocument: SearchDocument;\n\tlineIndex: number;\n}\n\ninterface SearchCorpus {\n\tlines: SearchLine[];\n\tscannedEntries: number;\n\tscannedBytes: number;\n\ttruncated: boolean;\n}\n\ninterface SessionSearchContextLine {\n\tlineNumber: number;\n\tline: string;\n}\n\ninterface CollectedMatch extends SessionSearchMatch {\n\tcontextBefore: SessionSearchContextLine[];\n\tcontextAfter: SessionSearchContextLine[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction sanitizeImageData(value: unknown): unknown {\n\tif (Array.isArray(value)) return value.map((child) => sanitizeImageData(child));\n\tif (!isRecord(value)) return value;\n\tconst result: Record<string, unknown> = {};\n\tconst imageDataLength = value.type === \"image\" && typeof value.data === \"string\" ? value.data.length : undefined;\n\tfor (const key in value) {\n\t\tif (!Object.hasOwn(value, key)) continue;\n\t\tconst child = value[key];\n\t\tresult[key] =\n\t\t\timageDataLength !== undefined && key === \"data\"\n\t\t\t\t? `[base64 image data omitted: ${imageDataLength} chars]`\n\t\t\t\t: sanitizeImageData(child);\n\t}\n\treturn result;\n}\n\nfunction estimateSerializedArrayBytes(values: unknown[], limit: number, seen: Set<object>): number {\n\tlet total = 2;\n\tfor (const value of values) {\n\t\ttotal += estimateSerializedBytes(value, limit - total, seen) + 1;\n\t\tif (total > limit) return total;\n\t}\n\treturn total;\n}\n\nfunction estimateSerializedRecordBytes(value: Record<string, unknown>, limit: number, seen: Set<object>): number {\n\tlet total = 2;\n\tfor (const key in value) {\n\t\tif (!Object.hasOwn(value, key)) continue;\n\t\ttotal += Buffer.byteLength(key, \"utf8\") * 6 + estimateSerializedBytes(value[key], limit - total, seen) + 4;\n\t\tif (total > limit) return total;\n\t}\n\treturn total;\n}\n\nfunction estimateSerializedBytes(value: unknown, limit: number, seen = new Set<object>()): number {\n\tif (typeof value === \"string\") return Buffer.byteLength(value, \"utf8\") * 6 + 2;\n\tif (typeof value !== \"object\" || value === null) return Buffer.byteLength(String(value), \"utf8\");\n\tif (seen.has(value)) return 0;\n\tseen.add(value);\n\tif (Array.isArray(value)) return estimateSerializedArrayBytes(value, limit, seen);\n\tif (isRecord(value)) return estimateSerializedRecordBytes(value, limit, seen);\n\treturn 2;\n}\n\ninterface BoundedLineCollector {\n\tlines: string[];\n\tbytes: number;\n\tencounteredLines: number;\n\ttruncated: boolean;\n\tlimitReached: boolean;\n\tappendLine(line: string): boolean;\n\tomitOversizedLine(): boolean;\n\tappendText(text: string): boolean;\n}\ninterface SearchLineTextSegment {\n\tkind: \"line\";\n\tline: string;\n\tnextStart: number;\n}\n\ninterface OversizedSearchTextSegment {\n\tkind: \"oversized\";\n\tcomplete: boolean;\n}\n\ntype SearchTextSegment = SearchLineTextSegment | OversizedSearchTextSegment;\n\nfunction readSearchTextSegment(text: string, start: number): SearchTextSegment {\n\tconst windowEnd = Math.min(text.length, start + MAX_SEARCH_LINE_LENGTH + 1);\n\tconst window = text.slice(start, windowEnd);\n\tconst lineFeed = window.indexOf(\"\\n\");\n\tconst carriageReturn = window.indexOf(\"\\r\");\n\tlet separatorIndex = lineFeed;\n\tif (separatorIndex < 0 || (carriageReturn >= 0 && carriageReturn < separatorIndex)) {\n\t\tseparatorIndex = carriageReturn;\n\t}\n\tif (separatorIndex < 0) {\n\t\tif (window.length > MAX_SEARCH_LINE_LENGTH) {\n\t\t\treturn { kind: \"oversized\", complete: windowEnd === text.length };\n\t\t}\n\t\treturn { kind: \"line\", line: window, nextStart: text.length };\n\t}\n\n\tconst separatorPosition = start + separatorIndex;\n\tconst separatorLength = text[separatorPosition] === \"\\r\" && text[separatorPosition + 1] === \"\\n\" ? 2 : 1;\n\treturn {\n\t\tkind: \"line\",\n\t\tline: window.slice(0, separatorIndex),\n\t\tnextStart: separatorPosition + separatorLength,\n\t};\n}\nfunction appendOversizedSearchTextSegment(\n\tcollector: BoundedLineCollector,\n\tsegment: OversizedSearchTextSegment,\n): boolean {\n\tif (!collector.omitOversizedLine()) return false;\n\tif (!segment.complete) collector.limitReached = true;\n\treturn segment.complete;\n}\n\nfunction createBoundedLineCollector(maxLines: number, maxBytes: number): BoundedLineCollector {\n\tconst collector: BoundedLineCollector = {\n\t\tlines: [],\n\t\tbytes: 0,\n\t\tencounteredLines: 0,\n\t\ttruncated: false,\n\t\tlimitReached: false,\n\t\tappendLine(line) {\n\t\t\tif (line.length > MAX_SEARCH_LINE_LENGTH) return collector.omitOversizedLine();\n\t\t\tconst lineBytes = Buffer.byteLength(line, \"utf8\") + 1;\n\t\t\tif (collector.encounteredLines >= maxLines || collector.bytes + lineBytes > maxBytes) {\n\t\t\t\tcollector.truncated = true;\n\t\t\t\tcollector.limitReached = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tcollector.lines.push(line);\n\t\t\tcollector.bytes += lineBytes;\n\t\t\tcollector.encounteredLines++;\n\t\t\treturn true;\n\t\t},\n\t\tomitOversizedLine() {\n\t\t\tconst budgetBytes = MAX_SEARCH_LINE_LENGTH * 4 + 1;\n\t\t\tif (collector.encounteredLines >= maxLines || collector.bytes + budgetBytes > maxBytes) {\n\t\t\t\tcollector.truncated = true;\n\t\t\t\tcollector.limitReached = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tcollector.bytes += budgetBytes;\n\t\t\tcollector.encounteredLines++;\n\t\t\tcollector.truncated = true;\n\t\t\treturn true;\n\t\t},\n\t\tappendText(text) {\n\t\t\tif (text.length === 0) return collector.appendLine(\"\");\n\t\t\tlet start = 0;\n\t\t\twhile (start < text.length) {\n\t\t\t\tconst segment = readSearchTextSegment(text, start);\n\t\t\t\tif (segment.kind === \"oversized\") return appendOversizedSearchTextSegment(collector, segment);\n\t\t\t\tif (!collector.appendLine(segment.line)) return false;\n\t\t\t\tstart = segment.nextStart;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\treturn collector;\n}\n\nfunction appendSearchArrayValues(collector: BoundedLineCollector, values: unknown[], seen: Set<object>): boolean {\n\tfor (let index = 0; index < values.length; index++) {\n\t\tif (!appendSearchValue(collector, values[index], seen, `[${index}]`)) return false;\n\t}\n\treturn true;\n}\n\nfunction appendSearchRecordValue(\n\tcollector: BoundedLineCollector,\n\tvalue: Record<string, unknown>,\n\tseen: Set<object>,\n): boolean {\n\tif (value.type === \"image\" && typeof value.data === \"string\") {\n\t\treturn collector.appendLine(\n\t\t\t`[image ${typeof value.mimeType === \"string\" ? value.mimeType : \"unknown\"} data omitted: ${value.data.length} chars]`,\n\t\t);\n\t}\n\tfor (const key in value) {\n\t\tif (!Object.hasOwn(value, key)) continue;\n\t\tif (!appendSearchValue(collector, value[key], seen, key)) return false;\n\t}\n\treturn true;\n}\n\nfunction appendSearchValue(\n\tcollector: BoundedLineCollector,\n\tvalue: unknown,\n\tseen = new Set<object>(),\n\tlabel?: string,\n): boolean {\n\tif (label !== undefined && !collector.appendLine(`${label}:`)) return false;\n\tif (typeof value === \"string\") return collector.appendText(value);\n\tif (typeof value !== \"object\" || value === null) return collector.appendLine(String(value));\n\tif (seen.has(value)) return collector.appendLine(\"[circular value omitted]\");\n\tseen.add(value);\n\tif (Array.isArray(value)) return appendSearchArrayValues(collector, value, seen);\n\tif (!isRecord(value)) return collector.appendLine(String(value));\n\treturn appendSearchRecordValue(collector, value, seen);\n}\n\nfunction appendSearchContentBlock(collector: BoundedLineCollector, block: Record<string, unknown>): void {\n\tswitch (block.type) {\n\t\tcase \"text\":\n\t\t\tif (typeof block.text === \"string\") collector.appendText(block.text);\n\t\t\tbreak;\n\t\tcase \"thinking\":\n\t\t\tif (typeof block.thinking !== \"string\") break;\n\t\t\tcollector.appendLine(\"thinking:\");\n\t\t\tcollector.appendText(block.thinking);\n\t\t\tbreak;\n\t\tcase \"toolCall\":\n\t\t\tcollector.appendLine(`tool_call: ${typeof block.name === \"string\" ? block.name : \"unknown\"}`);\n\t\t\tif (block.arguments !== undefined) appendSearchValue(collector, block.arguments);\n\t\t\tbreak;\n\t\tcase \"image\":\n\t\t\tcollector.appendLine(`[image ${typeof block.mimeType === \"string\" ? block.mimeType : \"unknown\"} omitted]`);\n\t\t\tbreak;\n\t}\n}\n\nfunction appendContentLines(collector: BoundedLineCollector, content: unknown): void {\n\tif (typeof content === \"string\") {\n\t\tcollector.appendText(content);\n\t\treturn;\n\t}\n\tif (!Array.isArray(content)) return;\n\tfor (const block of content) {\n\t\tif (collector.limitReached) break;\n\t\tif (isRecord(block)) appendSearchContentBlock(collector, block);\n\t}\n}\n\nfunction finishSearchDocument(entry: SessionEntry, collector: BoundedLineCollector, role?: string): SearchDocument {\n\treturn {\n\t\tentry,\n\t\trole,\n\t\tlines: collector.lines,\n\t\tbytes: collector.bytes,\n\t\ttruncated: collector.truncated,\n\t\tlimitReached: collector.limitReached,\n\t};\n}\n\nfunction createMessageSearchDocument(entry: SessionEntry, collector: BoundedLineCollector): SearchDocument | undefined {\n\tif (entry.type !== \"message\") return undefined;\n\tconst message = entry.message;\n\tconst role = message.role;\n\tif (role === \"bashExecution\" && message.excludeFromContext) return undefined;\n\tif (role === \"custom\" && message.customType === STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE) return undefined;\n\tcollector.appendLine(`role: ${role}`);\n\tswitch (role) {\n\t\tcase \"user\":\n\t\tcase \"assistant\":\n\t\t\tappendContentLines(collector, message.content);\n\t\t\tbreak;\n\t\tcase \"toolResult\":\n\t\t\tcollector.appendLine(`tool_name: ${message.toolName}`);\n\t\t\tappendContentLines(collector, message.content);\n\t\t\tbreak;\n\t\tcase \"custom\":\n\t\t\tcollector.appendLine(`custom_type: ${message.customType}`);\n\t\t\tappendContentLines(collector, message.content);\n\t\t\tbreak;\n\t\tcase \"bashExecution\":\n\t\t\tcollector.appendLine(\"command:\");\n\t\t\tcollector.appendText(message.command);\n\t\t\tcollector.appendLine(\"output:\");\n\t\t\tcollector.appendText(message.output);\n\t\t\tbreak;\n\t\tcase \"branchSummary\":\n\t\tcase \"compactionSummary\":\n\t\t\tcollector.appendText(message.summary);\n\t\t\tbreak;\n\t}\n\treturn finishSearchDocument(entry, collector, role);\n}\n\nfunction createMetadataSearchDocument(\n\tentry: SessionEntry,\n\tcollector: BoundedLineCollector,\n): SearchDocument | undefined {\n\tif (entry.type === \"message\") return undefined;\n\tswitch (entry.type) {\n\t\tcase \"compaction\":\n\t\t\tcollector.appendLine(\"compaction summary:\");\n\t\t\tcollector.appendText(entry.summary);\n\t\t\treturn finishSearchDocument(entry, collector);\n\t\tcase \"branch_summary\":\n\t\t\tcollector.appendLine(\"branch summary:\");\n\t\t\tcollector.appendText(entry.summary);\n\t\t\treturn finishSearchDocument(entry, collector);\n\t\tcase \"custom_message\":\n\t\t\tif (entry.customType === STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE) return undefined;\n\t\t\tcollector.appendLine(`custom_type: ${entry.customType}`);\n\t\t\tappendContentLines(collector, entry.content);\n\t\t\treturn finishSearchDocument(entry, collector, \"custom\");\n\t\tcase \"thinking_level_change\":\n\t\t\tcollector.appendLine(`thinking_level: ${entry.thinkingLevel}`);\n\t\t\treturn finishSearchDocument(entry, collector);\n\t\tcase \"model_change\":\n\t\t\tcollector.appendLine(`model: ${entry.provider}/${entry.modelId}`);\n\t\t\treturn finishSearchDocument(entry, collector);\n\t\tcase \"label\":\n\t\t\tcollector.appendLine(`label target: ${entry.targetId}`);\n\t\t\tcollector.appendLine(`label: ${entry.label ?? \"(cleared)\"}`);\n\t\t\treturn finishSearchDocument(entry, collector);\n\t\tcase \"session_info\":\n\t\t\tcollector.appendLine(`session_name: ${entry.name ?? \"\"}`);\n\t\t\treturn finishSearchDocument(entry, collector);\n\t\tcase \"custom\":\n\t\t\treturn undefined;\n\t}\n}\n\nfunction createSearchDocument(entry: SessionEntry, maxLines: number, maxBytes: number): SearchDocument | undefined {\n\tconst collector = createBoundedLineCollector(maxLines, maxBytes);\n\treturn entry.type === \"message\"\n\t\t? createMessageSearchDocument(entry, collector)\n\t\t: createMetadataSearchDocument(entry, collector);\n}\n\nfunction containsToolCall(entry: SessionEntry, toolCallId: string): boolean {\n\treturn (\n\t\tentry.type === \"message\" &&\n\t\tentry.message.role === \"assistant\" &&\n\t\tentry.message.content.some((block) => block.type === \"toolCall\" && block.id === toolCallId)\n\t);\n}\n\nfunction buildSearchCorpus(entries: SessionEntry[], toolCallId: string, signal?: AbortSignal): SearchCorpus {\n\tconst searchLines: SearchLine[] = [];\n\tlet scannedEntries = 0;\n\tlet scannedBytes = 0;\n\tlet truncated = false;\n\tfor (const entry of entries) {\n\t\tabortIf(signal);\n\t\tif (containsToolCall(entry, toolCallId)) continue;\n\t\tconst document = createSearchDocument(\n\t\t\tentry,\n\t\t\tMAX_SEARCH_LINES - searchLines.length,\n\t\t\tMAX_SEARCH_BYTES - scannedBytes,\n\t\t);\n\t\tif (!document) continue;\n\t\tfor (let lineIndex = 0; lineIndex < document.lines.length; lineIndex++) {\n\t\t\tsearchLines.push({ document, lineIndex });\n\t\t}\n\t\tif (document.lines.length > 0) scannedEntries++;\n\t\tscannedBytes += document.bytes;\n\t\ttruncated ||= document.truncated;\n\t\tif (document.limitReached) break;\n\t}\n\treturn { lines: searchLines, scannedEntries, scannedBytes, truncated };\n}\n\nfunction validateRegex(pattern: string, ignoreCase: boolean): void {\n\ttry {\n\t\tnew RegExp(pattern, ignoreCase ? \"iu\" : \"u\");\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Invalid session_search regular expression: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\nfunction findFixedStringMatchIndexes(lines: string[], pattern: string, ignoreCase: boolean): number[] {\n\tconst expected = ignoreCase ? pattern.toLowerCase() : pattern;\n\tconst indexes: number[] = [];\n\tfor (let index = 0; index < lines.length; index++) {\n\t\tif ((ignoreCase ? lines[index].toLowerCase() : lines[index]).includes(expected)) indexes.push(index);\n\t}\n\treturn indexes;\n}\n\nfunction findRegexMatchIndexes(\n\tlines: string[],\n\tpattern: string,\n\tignoreCase: boolean,\n\tsignal?: AbortSignal,\n): Promise<number[]> {\n\tvalidateRegex(pattern, ignoreCase);\n\tabortIf(signal);\n\treturn new Promise((resolve, reject) => {\n\t\tconst worker = new Worker(REGEX_WORKER_SOURCE, {\n\t\t\teval: true,\n\t\t\tworkerData: { lines, pattern, ignoreCase },\n\t\t});\n\t\tlet settled = false;\n\t\tconst cleanup = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tvoid worker.terminate();\n\t\t};\n\t\tconst succeed = (indexes: number[]) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tresolve(indexes);\n\t\t};\n\t\tconst fail = (error: Error) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(error);\n\t\t};\n\t\tconst onAbort = () => fail(new Error(\"Operation aborted\"));\n\t\tconst timeout = setTimeout(\n\t\t\t() => fail(new Error(`session_search regular expression exceeded the ${REGEX_TIMEOUT_MS}ms safety limit`)),\n\t\t\tREGEX_TIMEOUT_MS,\n\t\t);\n\t\ttimeout.unref?.();\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\tworker.once(\"message\", (message: unknown) => {\n\t\t\tif (!isRecord(message)) {\n\t\t\t\tfail(new Error(\"session_search regex worker returned an invalid response\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof message.error === \"string\") {\n\t\t\t\tfail(new Error(`Invalid session_search regular expression: ${message.error}`));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!Array.isArray(message.indexes) || !message.indexes.every((index) => Number.isSafeInteger(index))) {\n\t\t\t\tfail(new Error(\"session_search regex worker returned invalid match indexes\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsucceed(message.indexes as number[]);\n\t\t});\n\t\tworker.once(\"error\", fail);\n\t\tworker.once(\"exit\", (code) => {\n\t\t\tif (!settled) fail(new Error(`session_search regex worker exited before returning matches (code ${code})`));\n\t\t});\n\t});\n}\n\nfunction collectMatches(\n\tcorpus: SearchCorpus,\n\tindexes: number[],\n\tbeforeContext: number,\n\tafterContext: number,\n): CollectedMatch[] {\n\treturn indexes.map((index) => {\n\t\tconst searchLine = corpus.lines[index];\n\t\tconst { document, lineIndex } = searchLine;\n\t\tconst entry = document.entry;\n\t\treturn {\n\t\t\tentryId: entry.id,\n\t\t\tentryType: entry.type,\n\t\t\trole: document.role,\n\t\t\ttimestamp: entry.timestamp,\n\t\t\tlineNumber: lineIndex + 1,\n\t\t\tline: document.lines[lineIndex],\n\t\t\tcontextBefore: document.lines\n\t\t\t\t.slice(Math.max(0, lineIndex - beforeContext), lineIndex)\n\t\t\t\t.map((line, contextIndex) => ({\n\t\t\t\t\tlineNumber: Math.max(0, lineIndex - beforeContext) + contextIndex + 1,\n\t\t\t\t\tline,\n\t\t\t\t})),\n\t\t\tcontextAfter: document.lines\n\t\t\t\t.slice(lineIndex + 1, lineIndex + 1 + afterContext)\n\t\t\t\t.map((line, contextIndex) => ({ lineNumber: lineIndex + contextIndex + 2, line })),\n\t\t};\n\t});\n}\n\nfunction entryHeader(match: CollectedMatch): string {\n\tconst role = match.role ? ` role=${match.role}` : \"\";\n\treturn `entry ${match.entryId} type=${match.entryType}${role} timestamp=${match.timestamp}`;\n}\n\nfunction displayLine(line: string): string {\n\treturn truncateLine(line, MAX_DISPLAY_LINE_LENGTH).text;\n}\n\nfunction formatMatches(\n\tmatches: CollectedMatch[],\n\ttotalMatches: number,\n\tmaxResults: number,\n\tscanTruncated: boolean,\n): string {\n\tconst blocks = matches.map((match) => {\n\t\tconst lines = [entryHeader(match)];\n\t\tfor (const context of match.contextBefore) lines.push(` ${context.lineNumber}-${displayLine(context.line)}`);\n\t\tlines.push(`> ${match.lineNumber}:${displayLine(match.line)}`);\n\t\tfor (const context of match.contextAfter) lines.push(` ${context.lineNumber}-${displayLine(context.line)}`);\n\t\treturn lines.join(\"\\n\");\n\t});\n\tif (blocks.length === 0) blocks.push(\"No matching session entries found.\");\n\tif (totalMatches > maxResults) {\n\t\tblocks.push(\n\t\t\t`[Showing ${matches.length} of ${totalMatches} matching lines. Refine the pattern or raise maxResults.]`,\n\t\t);\n\t}\n\tif (scanTruncated) {\n\t\tblocks.push(\n\t\t\t`[Session search input was bounded at ${MAX_SEARCH_LINES} lines, ${MAX_SEARCH_BYTES} bytes, and ${MAX_SEARCH_LINE_LENGTH} characters per line. Results may be incomplete.]`,\n\t\t);\n\t}\n\treturn blocks.join(\"\\n\\n\");\n}\n\ninterface TruncatedSessionToolOutput {\n\ttext: string;\n\ttruncated: boolean;\n}\n\nfunction truncateToolOutput(output: string): TruncatedSessionToolOutput {\n\tconst initial = truncateHead(output, { maxBytes: DEFAULT_MAX_BYTES, maxLines: DEFAULT_MAX_LINES });\n\tif (!initial.truncated) return { text: output, truncated: false };\n\tconst notice = \"\\n\\n[Session tool output truncated. Refine the request.]\";\n\tconst reserved = truncateHead(output, {\n\t\tmaxBytes: DEFAULT_MAX_BYTES - Buffer.byteLength(notice, \"utf8\"),\n\t\tmaxLines: DEFAULT_MAX_LINES - 2,\n\t});\n\treturn { text: `${reserved.content}${notice}`, truncated: true };\n}\n\nfunction projectEntryForModel(entry: SessionEntry): unknown | undefined {\n\tif (entry.type === \"custom\") return undefined;\n\tif (entry.type === \"custom_message\") {\n\t\tif (entry.customType === STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE) return undefined;\n\t\tconst { details: _details, ...visible } = entry;\n\t\treturn visible;\n\t}\n\tif (entry.type === \"compaction\" || entry.type === \"branch_summary\") {\n\t\tconst { details: _details, ...visible } = entry;\n\t\treturn visible;\n\t}\n\tif (entry.type !== \"message\") return entry;\n\tconst message = entry.message;\n\tif (message.role === \"bashExecution\") {\n\t\tif (message.excludeFromContext) return undefined;\n\t\tconst { fullOutputPath: _fullOutputPath, ...visibleMessage } = message;\n\t\treturn { ...entry, message: visibleMessage };\n\t}\n\tif (message.role === \"toolResult\") {\n\t\tconst { details: _details, ...visibleMessage } = message;\n\t\treturn { ...entry, message: visibleMessage };\n\t}\n\tif (message.role === \"custom\") {\n\t\tif (message.customType === STRUCTURED_RESPONSE_INTERNAL_CUSTOM_TYPE) return undefined;\n\t\tconst { details: _details, ...visibleMessage } = message;\n\t\treturn { ...entry, message: visibleMessage };\n\t}\n\treturn entry;\n}\n\nfunction getContextSearchEntries(path: SessionEntry[]): SessionEntry[] {\n\tconst compaction = getLatestCompactionEntry(path);\n\treturn projectSessionContextEntries(path).filter(\n\t\t(entry) =>\n\t\t\tentry.type === \"message\" ||\n\t\t\tentry.type === \"custom_message\" ||\n\t\t\tentry.type === \"branch_summary\" ||\n\t\t\t(entry.type === \"compaction\" && entry.id === compaction?.id && entry.summary.length > 0),\n\t);\n}\n\nexport function createSessionSearchToolDefinition(\n\tsession: ReadonlySession,\n): ToolDefinition<typeof sessionSearchSchema, SessionSearchToolDetails> {\n\treturn {\n\t\tname: \"session_search\",\n\t\tlabel: \"session_search\",\n\t\tdescription:\n\t\t\t\"Search finalized entries in the active session using a JavaScript regular expression by default, with grep-like case, fixed-string, context, result-limit, and scope options. Searches entries in the current model context by default; use scope: branch for older current-branch history or scope: all for archived branches. Hidden extension state and context-excluded bash output are not searched. Input and output are bounded.\",\n\t\tpromptSnippet: \"Search finalized entries in the active session history with a regular expression\",\n\t\tpromptGuidelines: [\n\t\t\t\"Default searches cover current model context. Use scope: branch or scope: all to recover history omitted by compaction; use session_entry_get with a returned entry ID when the exact model-visible entry is needed.\",\n\t\t],\n\t\tparameters: sessionSearchSchema,\n\t\texecutionMode: \"sequential\",\n\t\tasync execute(\n\t\t\ttoolCallId,\n\t\t\t{\n\t\t\t\tpattern,\n\t\t\t\tignoreCase = false,\n\t\t\t\tfixedStrings = false,\n\t\t\t\tbeforeContext = 0,\n\t\t\t\tafterContext = 0,\n\t\t\t\tmaxResults = DEFAULT_SEARCH_RESULTS,\n\t\t\t\tscope = \"context\",\n\t\t\t}: SessionSearchToolInput,\n\t\t\tsignal,\n\t\t) {\n\t\t\tabortIf(signal);\n\t\t\tconst entries =\n\t\t\t\tscope === \"all\"\n\t\t\t\t\t? session.getEntries()\n\t\t\t\t\t: scope === \"branch\"\n\t\t\t\t\t\t? session.getBranch()\n\t\t\t\t\t\t: getContextSearchEntries(session.getBranch());\n\t\t\tconst corpus = buildSearchCorpus(entries, toolCallId, signal);\n\t\t\tconst lines = corpus.lines.map(({ document, lineIndex }) => document.lines[lineIndex]);\n\t\t\tconst matchIndexes = fixedStrings\n\t\t\t\t? findFixedStringMatchIndexes(lines, pattern, ignoreCase)\n\t\t\t\t: await findRegexMatchIndexes(lines, pattern, ignoreCase, signal);\n\t\t\tabortIf(signal);\n\t\t\tconst matches = collectMatches(corpus, matchIndexes.slice(0, maxResults), beforeContext, afterContext);\n\t\t\tconst output = truncateToolOutput(formatMatches(matches, matchIndexes.length, maxResults, corpus.truncated));\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: output.text }],\n\t\t\t\tdetails: {\n\t\t\t\t\tpattern,\n\t\t\t\t\tignoreCase,\n\t\t\t\t\tfixedStrings,\n\t\t\t\t\tscope,\n\t\t\t\t\tmatchCount: matchIndexes.length,\n\t\t\t\t\treturnedMatchCount: matches.length,\n\t\t\t\t\tmatches: matches.map(({ contextBefore: _before, contextAfter: _after, ...match }) => ({\n\t\t\t\t\t\t...match,\n\t\t\t\t\t\tline: displayLine(match.line),\n\t\t\t\t\t})),\n\t\t\t\t\tscannedEntries: corpus.scannedEntries,\n\t\t\t\t\tscannedLines: corpus.lines.length,\n\t\t\t\t\tscannedBytes: corpus.scannedBytes,\n\t\t\t\t\tscanTruncated: corpus.truncated,\n\t\t\t\t\toutputTruncated: output.truncated,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function createSessionEntryGetToolDefinition(\n\tsession: ReadonlySession,\n): ToolDefinition<typeof sessionEntryGetSchema, SessionEntryGetToolDetails> {\n\treturn {\n\t\tname: \"session_entry_get\",\n\t\tlabel: \"session_entry_get\",\n\t\tdescription:\n\t\t\t\"Fetch one exact model-visible entry by ID from the active session, including entries outside the current branch. Extension-private metadata, hidden custom entries, context-excluded bash output, and base64 image payloads are not exposed. Returns the complete JSON projection unless safety or tool-output limits require truncation.\",\n\t\tpromptSnippet: \"Fetch an exact model-visible entry by ID from the active session\",\n\t\tparameters: sessionEntryGetSchema,\n\t\texecutionMode: \"sequential\",\n\t\tasync execute(_toolCallId, { entryId }: SessionEntryGetToolInput, signal) {\n\t\t\tabortIf(signal);\n\t\t\tconst entry = session.getEntry(entryId);\n\t\t\tif (!entry) throw new Error(`Session entry not found: ${entryId}`);\n\t\t\tconst visibleEntry = projectEntryForModel(entry);\n\t\t\tif (!visibleEntry) throw new Error(`Session entry is private or context-excluded: ${entryId}`);\n\t\t\tconst sanitizedEntry = sanitizeImageData(visibleEntry);\n\t\t\tif (estimateSerializedBytes(sanitizedEntry, MAX_ENTRY_SERIALIZATION_BYTES) > MAX_ENTRY_SERIALIZATION_BYTES) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Session entry exceeds the ${MAX_ENTRY_SERIALIZATION_BYTES}-byte serialization safety limit: ${entryId}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst onCurrentBranch = session.getBranch().some((candidate) => candidate.id === entryId);\n\t\t\tconst output = truncateToolOutput(`Session entry ${entryId}:\\n${JSON.stringify(sanitizedEntry)}`);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: output.text }],\n\t\t\t\tdetails: {\n\t\t\t\t\tentryId,\n\t\t\t\t\tentryType: entry.type,\n\t\t\t\t\tonCurrentBranch,\n\t\t\t\t\toutputTruncated: output.truncated,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function createSessionSearchTool(session: ReadonlySession): AgentTool<typeof sessionSearchSchema> {\n\treturn wrapToolDefinition(createSessionSearchToolDefinition(session));\n}\n\nexport function createSessionEntryGetTool(session: ReadonlySession): AgentTool<typeof sessionEntryGetSchema> {\n\treturn wrapToolDefinition(createSessionEntryGetToolDefinition(session));\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ToolOperations } from "./operations.ts";
|
|
2
|
+
export type AgentScope = "user" | "project" | "both";
|
|
3
|
+
type AgentConfigSource = "user" | "project";
|
|
4
|
+
export type AgentSource = "bundled" | AgentConfigSource | "session";
|
|
5
|
+
export interface AgentConfig {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
tools?: string[];
|
|
9
|
+
model?: string;
|
|
10
|
+
modelHint?: string;
|
|
11
|
+
skills?: string[];
|
|
12
|
+
cwd?: string;
|
|
13
|
+
systemPrompt: string;
|
|
14
|
+
source: AgentSource;
|
|
15
|
+
filePath: string;
|
|
16
|
+
}
|
|
17
|
+
export interface AgentDiscoveryResult {
|
|
18
|
+
agents: AgentConfig[];
|
|
19
|
+
projectAgentsDir: string | null;
|
|
20
|
+
}
|
|
21
|
+
export declare function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult;
|
|
22
|
+
export declare function discoverAgentsWithOperations(cwd: string, scope: AgentScope, operations?: ToolOperations): Promise<AgentDiscoveryResult>;
|
|
23
|
+
export interface AgentListFormatResult {
|
|
24
|
+
text: string;
|
|
25
|
+
remaining: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function formatAgentList(agents: AgentConfig[], maxItems: number): AgentListFormatResult;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=subagent-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-agents.d.ts","sourceRoot":"","sources":["../../../src/core/tools/subagent-agents.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AACrD,KAAK,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAAC;AAC5C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAkHD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,oBAAoB,CAanF;AAoDD,wBAAsB,4BAA4B,CACjD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,UAAU,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAuB/B;AAED,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,qBAAqB,CAO9F","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport {\n\tdirnamePortablePath,\n\tjoinPortablePath,\n\ttype PortablePathFlavor,\n\tpathComparisonValue,\n} from \"../lsp/portable-path.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\n\nexport type AgentScope = \"user\" | \"project\" | \"both\";\ntype AgentConfigSource = \"user\" | \"project\";\nexport type AgentSource = \"bundled\" | AgentConfigSource | \"session\";\n\nexport interface AgentConfig {\n\tname: string;\n\tdescription: string;\n\ttools?: string[];\n\tmodel?: string;\n\tmodelHint?: string;\n\tskills?: string[];\n\tcwd?: string;\n\tsystemPrompt: string;\n\tsource: AgentSource;\n\tfilePath: string;\n}\n\nexport interface AgentDiscoveryResult {\n\tagents: AgentConfig[];\n\tprojectAgentsDir: string | null;\n}\n\nconst BUNDLED_AGENTS: AgentConfig[] = [\n\t{\n\t\tname: \"explore\",\n\t\tdescription: \"Fast codebase exploration that returns compressed context for handoff to other agents\",\n\t\ttools: [\"read\", \"grep\", \"find\", \"ls\", \"bash\"],\n\t\tsystemPrompt: `You are an explorer. Quickly investigate a codebase and return structured findings that another agent can use without re-reading everything.\n\nYour output will be passed to an agent who has NOT seen the files you explored.\n\nThoroughness (infer from task, default medium):\n- Quick: Targeted lookups, key files only\n- Medium: Follow imports, read critical sections\n- Thorough: Trace all dependencies, check tests/types\n\nStrategy:\n1. grep/find to locate relevant code\n2. Read key sections\n3. Identify types, interfaces, and key functions\n4. Note dependencies between files\n\nReturn files and exact line ranges, key code, architecture, and the best file to inspect first.`,\n\t\tsource: \"bundled\",\n\t\tfilePath: \"<builtin:subagent/explore>\",\n\t},\n\t{\n\t\tname: \"worker\",\n\t\tdescription: \"General-purpose subagent with full capabilities and isolated context\",\n\t\tsystemPrompt: `You are a worker agent with full capabilities. Work autonomously to complete the delegated task.\n\nWhen finished, report what was completed, files changed, and anything the parent agent should know.`,\n\t\tsource: \"bundled\",\n\t\tfilePath: \"<builtin:subagent/worker>\",\n\t},\n\t{\n\t\tname: \"reviewer\",\n\t\tdescription: \"Code review specialist for quality and security analysis\",\n\t\ttools: [\"read\", \"grep\", \"find\", \"ls\", \"bash\"],\n\t\tsystemPrompt: `You are a senior code reviewer. Analyze code for correctness, security, quality, and maintainability.\n\nUse bash only for read-only commands. Do not modify files or run builds.\n\nReport files reviewed, critical issues, warnings, suggestions, and a concise summary. Include exact file paths and line numbers.`,\n\t\tsource: \"bundled\",\n\t\tfilePath: \"<builtin:subagent/reviewer>\",\n\t},\n];\n\nfunction parseAgentConfig(content: string, filePath: string, source: AgentConfigSource): AgentConfig | undefined {\n\tconst { frontmatter, body } = parseFrontmatter<Record<string, string>>(content);\n\tif (!frontmatter.name || !frontmatter.description) return undefined;\n\tconst tools = frontmatter.tools\n\t\t?.split(\",\")\n\t\t.map((tool) => tool.trim())\n\t\t.filter(Boolean);\n\tconst skills = frontmatter.skills\n\t\t?.split(\",\")\n\t\t.map((skill) => skill.trim())\n\t\t.filter(Boolean);\n\treturn {\n\t\tname: frontmatter.name,\n\t\tdescription: frontmatter.description,\n\t\ttools: tools && tools.length > 0 ? tools : undefined,\n\t\tmodel: frontmatter.model,\n\t\tmodelHint: frontmatter.modelHint,\n\t\tskills: skills && skills.length > 0 ? skills : undefined,\n\t\tcwd: frontmatter.cwd,\n\t\tsystemPrompt: body,\n\t\tsource,\n\t\tfilePath,\n\t};\n}\n\nfunction loadAgentsFromDir(dir: string, source: AgentConfigSource): AgentConfig[] {\n\tconst agents: AgentConfig[] = [];\n\tif (!fs.existsSync(dir)) return agents;\n\n\tlet entries: fs.Dirent[];\n\ttry {\n\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn agents;\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.name.endsWith(\".md\") || (!entry.isFile() && !entry.isSymbolicLink())) continue;\n\t\tconst filePath = path.join(dir, entry.name);\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = fs.readFileSync(filePath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst agent = parseAgentConfig(content, filePath, source);\n\t\tif (agent) agents.push(agent);\n\t}\n\treturn agents;\n}\n\nfunction findNearestProjectAgentsDir(cwd: string): string | null {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = path.join(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\ttry {\n\t\t\tif (fs.statSync(candidate).isDirectory()) return candidate;\n\t\t} catch {}\n\t\tconst parentDir = path.dirname(currentDir);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\nexport function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult {\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir = findNearestProjectAgentsDir(cwd);\n\tconst bundledAgents = scope === \"project\" ? [] : BUNDLED_AGENTS;\n\tconst userAgents = scope === \"project\" ? [] : loadAgentsFromDir(userDir, \"user\");\n\tconst projectAgents = scope === \"user\" || !projectAgentsDir ? [] : loadAgentsFromDir(projectAgentsDir, \"project\");\n\tconst agentMap = new Map<string, AgentConfig>();\n\n\tfor (const agent of bundledAgents) agentMap.set(agent.name, agent);\n\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\n\treturn { agents: Array.from(agentMap.values()), projectAgentsDir };\n}\n\nasync function loadAgentsFromDirWithOperations(dir: string, operations: ToolOperations): Promise<AgentConfig[]> {\n\tconst agents: AgentConfig[] = [];\n\tlet entries: string[];\n\ttry {\n\t\tentries = await operations.readdir(dir);\n\t} catch {\n\t\treturn agents;\n\t}\n\tfor (const name of entries.sort()) {\n\t\tif (!name.endsWith(\".md\")) continue;\n\t\tconst filePath = joinPortablePath(dir, name);\n\t\ttry {\n\t\t\tconst stat = await operations.stat(filePath);\n\t\t\tif (!stat.isFile()) continue;\n\t\t\tconst agent = parseAgentConfig((await operations.readFile(filePath)).toString(\"utf8\"), filePath, \"project\");\n\t\t\tif (agent) agents.push(agent);\n\t\t} catch {}\n\t}\n\treturn agents;\n}\n\nasync function findNearestProjectAgentsDirWithOperations(\n\tcwd: string,\n\toperations: ToolOperations,\n\troot: string,\n\tpathFlavor: PortablePathFlavor,\n): Promise<string | null> {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = joinPortablePath(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\ttry {\n\t\t\tif ((await operations.stat(candidate)).isDirectory()) return candidate;\n\t\t} catch {}\n\t\tif (pathComparisonValue(currentDir, pathFlavor) === pathComparisonValue(root, pathFlavor)) return null;\n\t\tconst parentDir = dirnamePortablePath(currentDir, pathFlavor);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\nfunction discoverHostOwnedAgents(scope: AgentScope): AgentDiscoveryResult {\n\treturn {\n\t\tagents:\n\t\t\tscope === \"project\"\n\t\t\t\t? []\n\t\t\t\t: [...BUNDLED_AGENTS, ...loadAgentsFromDir(path.join(getAgentDir(), \"agents\"), \"user\")],\n\t\tprojectAgentsDir: null,\n\t};\n}\n\nexport async function discoverAgentsWithOperations(\n\tcwd: string,\n\tscope: AgentScope,\n\toperations?: ToolOperations,\n): Promise<AgentDiscoveryResult> {\n\tif (!operations) return discoverAgents(cwd, scope);\n\tconst backend = operations.getBackendInfo?.();\n\tif (backend?.type === \"local\") return discoverAgents(cwd, scope);\n\tif (!backend) return discoverHostOwnedAgents(scope);\n\tif (backend.type === \"remote\" && !backend.configured) {\n\t\treturn discoverHostOwnedAgents(scope);\n\t}\n\tconst remoteCwd = backend.workspace.root;\n\tconst pathFlavor = backend.workspace.pathFlavor;\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir =\n\t\tscope === \"user\"\n\t\t\t? null\n\t\t\t: await findNearestProjectAgentsDirWithOperations(remoteCwd, operations, backend.workspace.root, pathFlavor);\n\tconst bundledAgents = scope === \"project\" ? [] : BUNDLED_AGENTS;\n\tconst userAgents = scope === \"project\" ? [] : loadAgentsFromDir(userDir, \"user\");\n\tconst projectAgents = projectAgentsDir ? await loadAgentsFromDirWithOperations(projectAgentsDir, operations) : [];\n\tconst agentMap = new Map<string, AgentConfig>();\n\tfor (const agent of bundledAgents) agentMap.set(agent.name, agent);\n\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\treturn { agents: Array.from(agentMap.values()), projectAgentsDir };\n}\n\nexport interface AgentListFormatResult {\n\ttext: string;\n\tremaining: number;\n}\n\nexport function formatAgentList(agents: AgentConfig[], maxItems: number): AgentListFormatResult {\n\tif (agents.length === 0) return { text: \"none\", remaining: 0 };\n\tconst listed = agents.slice(0, maxItems);\n\treturn {\n\t\ttext: listed.map((agent) => `${agent.name} (${agent.source}): ${agent.description}`).join(\"; \"),\n\t\tremaining: agents.length - listed.length,\n\t};\n}\n"]}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { CONFIG_DIR_NAME, getAgentDir } from "../../config.js";
|
|
4
|
+
import { parseFrontmatter } from "../../utils/frontmatter.js";
|
|
5
|
+
import { dirnamePortablePath, joinPortablePath, pathComparisonValue, } from "../lsp/portable-path.js";
|
|
6
|
+
const BUNDLED_AGENTS = [
|
|
7
|
+
{
|
|
8
|
+
name: "explore",
|
|
9
|
+
description: "Fast codebase exploration that returns compressed context for handoff to other agents",
|
|
10
|
+
tools: ["read", "grep", "find", "ls", "bash"],
|
|
11
|
+
systemPrompt: `You are an explorer. Quickly investigate a codebase and return structured findings that another agent can use without re-reading everything.
|
|
12
|
+
|
|
13
|
+
Your output will be passed to an agent who has NOT seen the files you explored.
|
|
14
|
+
|
|
15
|
+
Thoroughness (infer from task, default medium):
|
|
16
|
+
- Quick: Targeted lookups, key files only
|
|
17
|
+
- Medium: Follow imports, read critical sections
|
|
18
|
+
- Thorough: Trace all dependencies, check tests/types
|
|
19
|
+
|
|
20
|
+
Strategy:
|
|
21
|
+
1. grep/find to locate relevant code
|
|
22
|
+
2. Read key sections
|
|
23
|
+
3. Identify types, interfaces, and key functions
|
|
24
|
+
4. Note dependencies between files
|
|
25
|
+
|
|
26
|
+
Return files and exact line ranges, key code, architecture, and the best file to inspect first.`,
|
|
27
|
+
source: "bundled",
|
|
28
|
+
filePath: "<builtin:subagent/explore>",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "worker",
|
|
32
|
+
description: "General-purpose subagent with full capabilities and isolated context",
|
|
33
|
+
systemPrompt: `You are a worker agent with full capabilities. Work autonomously to complete the delegated task.
|
|
34
|
+
|
|
35
|
+
When finished, report what was completed, files changed, and anything the parent agent should know.`,
|
|
36
|
+
source: "bundled",
|
|
37
|
+
filePath: "<builtin:subagent/worker>",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "reviewer",
|
|
41
|
+
description: "Code review specialist for quality and security analysis",
|
|
42
|
+
tools: ["read", "grep", "find", "ls", "bash"],
|
|
43
|
+
systemPrompt: `You are a senior code reviewer. Analyze code for correctness, security, quality, and maintainability.
|
|
44
|
+
|
|
45
|
+
Use bash only for read-only commands. Do not modify files or run builds.
|
|
46
|
+
|
|
47
|
+
Report files reviewed, critical issues, warnings, suggestions, and a concise summary. Include exact file paths and line numbers.`,
|
|
48
|
+
source: "bundled",
|
|
49
|
+
filePath: "<builtin:subagent/reviewer>",
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
function parseAgentConfig(content, filePath, source) {
|
|
53
|
+
const { frontmatter, body } = parseFrontmatter(content);
|
|
54
|
+
if (!frontmatter.name || !frontmatter.description)
|
|
55
|
+
return undefined;
|
|
56
|
+
const tools = frontmatter.tools
|
|
57
|
+
?.split(",")
|
|
58
|
+
.map((tool) => tool.trim())
|
|
59
|
+
.filter(Boolean);
|
|
60
|
+
const skills = frontmatter.skills
|
|
61
|
+
?.split(",")
|
|
62
|
+
.map((skill) => skill.trim())
|
|
63
|
+
.filter(Boolean);
|
|
64
|
+
return {
|
|
65
|
+
name: frontmatter.name,
|
|
66
|
+
description: frontmatter.description,
|
|
67
|
+
tools: tools && tools.length > 0 ? tools : undefined,
|
|
68
|
+
model: frontmatter.model,
|
|
69
|
+
modelHint: frontmatter.modelHint,
|
|
70
|
+
skills: skills && skills.length > 0 ? skills : undefined,
|
|
71
|
+
cwd: frontmatter.cwd,
|
|
72
|
+
systemPrompt: body,
|
|
73
|
+
source,
|
|
74
|
+
filePath,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function loadAgentsFromDir(dir, source) {
|
|
78
|
+
const agents = [];
|
|
79
|
+
if (!fs.existsSync(dir))
|
|
80
|
+
return agents;
|
|
81
|
+
let entries;
|
|
82
|
+
try {
|
|
83
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return agents;
|
|
87
|
+
}
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
if (!entry.name.endsWith(".md") || (!entry.isFile() && !entry.isSymbolicLink()))
|
|
90
|
+
continue;
|
|
91
|
+
const filePath = path.join(dir, entry.name);
|
|
92
|
+
let content;
|
|
93
|
+
try {
|
|
94
|
+
content = fs.readFileSync(filePath, "utf-8");
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const agent = parseAgentConfig(content, filePath, source);
|
|
100
|
+
if (agent)
|
|
101
|
+
agents.push(agent);
|
|
102
|
+
}
|
|
103
|
+
return agents;
|
|
104
|
+
}
|
|
105
|
+
function findNearestProjectAgentsDir(cwd) {
|
|
106
|
+
let currentDir = cwd;
|
|
107
|
+
while (true) {
|
|
108
|
+
const candidate = path.join(currentDir, CONFIG_DIR_NAME, "agents");
|
|
109
|
+
try {
|
|
110
|
+
if (fs.statSync(candidate).isDirectory())
|
|
111
|
+
return candidate;
|
|
112
|
+
}
|
|
113
|
+
catch { }
|
|
114
|
+
const parentDir = path.dirname(currentDir);
|
|
115
|
+
if (parentDir === currentDir)
|
|
116
|
+
return null;
|
|
117
|
+
currentDir = parentDir;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function discoverAgents(cwd, scope) {
|
|
121
|
+
const userDir = path.join(getAgentDir(), "agents");
|
|
122
|
+
const projectAgentsDir = findNearestProjectAgentsDir(cwd);
|
|
123
|
+
const bundledAgents = scope === "project" ? [] : BUNDLED_AGENTS;
|
|
124
|
+
const userAgents = scope === "project" ? [] : loadAgentsFromDir(userDir, "user");
|
|
125
|
+
const projectAgents = scope === "user" || !projectAgentsDir ? [] : loadAgentsFromDir(projectAgentsDir, "project");
|
|
126
|
+
const agentMap = new Map();
|
|
127
|
+
for (const agent of bundledAgents)
|
|
128
|
+
agentMap.set(agent.name, agent);
|
|
129
|
+
for (const agent of userAgents)
|
|
130
|
+
agentMap.set(agent.name, agent);
|
|
131
|
+
for (const agent of projectAgents)
|
|
132
|
+
agentMap.set(agent.name, agent);
|
|
133
|
+
return { agents: Array.from(agentMap.values()), projectAgentsDir };
|
|
134
|
+
}
|
|
135
|
+
async function loadAgentsFromDirWithOperations(dir, operations) {
|
|
136
|
+
const agents = [];
|
|
137
|
+
let entries;
|
|
138
|
+
try {
|
|
139
|
+
entries = await operations.readdir(dir);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return agents;
|
|
143
|
+
}
|
|
144
|
+
for (const name of entries.sort()) {
|
|
145
|
+
if (!name.endsWith(".md"))
|
|
146
|
+
continue;
|
|
147
|
+
const filePath = joinPortablePath(dir, name);
|
|
148
|
+
try {
|
|
149
|
+
const stat = await operations.stat(filePath);
|
|
150
|
+
if (!stat.isFile())
|
|
151
|
+
continue;
|
|
152
|
+
const agent = parseAgentConfig((await operations.readFile(filePath)).toString("utf8"), filePath, "project");
|
|
153
|
+
if (agent)
|
|
154
|
+
agents.push(agent);
|
|
155
|
+
}
|
|
156
|
+
catch { }
|
|
157
|
+
}
|
|
158
|
+
return agents;
|
|
159
|
+
}
|
|
160
|
+
async function findNearestProjectAgentsDirWithOperations(cwd, operations, root, pathFlavor) {
|
|
161
|
+
let currentDir = cwd;
|
|
162
|
+
while (true) {
|
|
163
|
+
const candidate = joinPortablePath(currentDir, CONFIG_DIR_NAME, "agents");
|
|
164
|
+
try {
|
|
165
|
+
if ((await operations.stat(candidate)).isDirectory())
|
|
166
|
+
return candidate;
|
|
167
|
+
}
|
|
168
|
+
catch { }
|
|
169
|
+
if (pathComparisonValue(currentDir, pathFlavor) === pathComparisonValue(root, pathFlavor))
|
|
170
|
+
return null;
|
|
171
|
+
const parentDir = dirnamePortablePath(currentDir, pathFlavor);
|
|
172
|
+
if (parentDir === currentDir)
|
|
173
|
+
return null;
|
|
174
|
+
currentDir = parentDir;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function discoverHostOwnedAgents(scope) {
|
|
178
|
+
return {
|
|
179
|
+
agents: scope === "project"
|
|
180
|
+
? []
|
|
181
|
+
: [...BUNDLED_AGENTS, ...loadAgentsFromDir(path.join(getAgentDir(), "agents"), "user")],
|
|
182
|
+
projectAgentsDir: null,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
export async function discoverAgentsWithOperations(cwd, scope, operations) {
|
|
186
|
+
if (!operations)
|
|
187
|
+
return discoverAgents(cwd, scope);
|
|
188
|
+
const backend = operations.getBackendInfo?.();
|
|
189
|
+
if (backend?.type === "local")
|
|
190
|
+
return discoverAgents(cwd, scope);
|
|
191
|
+
if (!backend)
|
|
192
|
+
return discoverHostOwnedAgents(scope);
|
|
193
|
+
if (backend.type === "remote" && !backend.configured) {
|
|
194
|
+
return discoverHostOwnedAgents(scope);
|
|
195
|
+
}
|
|
196
|
+
const remoteCwd = backend.workspace.root;
|
|
197
|
+
const pathFlavor = backend.workspace.pathFlavor;
|
|
198
|
+
const userDir = path.join(getAgentDir(), "agents");
|
|
199
|
+
const projectAgentsDir = scope === "user"
|
|
200
|
+
? null
|
|
201
|
+
: await findNearestProjectAgentsDirWithOperations(remoteCwd, operations, backend.workspace.root, pathFlavor);
|
|
202
|
+
const bundledAgents = scope === "project" ? [] : BUNDLED_AGENTS;
|
|
203
|
+
const userAgents = scope === "project" ? [] : loadAgentsFromDir(userDir, "user");
|
|
204
|
+
const projectAgents = projectAgentsDir ? await loadAgentsFromDirWithOperations(projectAgentsDir, operations) : [];
|
|
205
|
+
const agentMap = new Map();
|
|
206
|
+
for (const agent of bundledAgents)
|
|
207
|
+
agentMap.set(agent.name, agent);
|
|
208
|
+
for (const agent of userAgents)
|
|
209
|
+
agentMap.set(agent.name, agent);
|
|
210
|
+
for (const agent of projectAgents)
|
|
211
|
+
agentMap.set(agent.name, agent);
|
|
212
|
+
return { agents: Array.from(agentMap.values()), projectAgentsDir };
|
|
213
|
+
}
|
|
214
|
+
export function formatAgentList(agents, maxItems) {
|
|
215
|
+
if (agents.length === 0)
|
|
216
|
+
return { text: "none", remaining: 0 };
|
|
217
|
+
const listed = agents.slice(0, maxItems);
|
|
218
|
+
return {
|
|
219
|
+
text: listed.map((agent) => `${agent.name} (${agent.source}): ${agent.description}`).join("; "),
|
|
220
|
+
remaining: agents.length - listed.length,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=subagent-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-agents.js","sourceRoot":"","sources":["../../../src/core/tools/subagent-agents.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport {\n\tdirnamePortablePath,\n\tjoinPortablePath,\n\ttype PortablePathFlavor,\n\tpathComparisonValue,\n} from \"../lsp/portable-path.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\n\nexport type AgentScope = \"user\" | \"project\" | \"both\";\ntype AgentConfigSource = \"user\" | \"project\";\nexport type AgentSource = \"bundled\" | AgentConfigSource | \"session\";\n\nexport interface AgentConfig {\n\tname: string;\n\tdescription: string;\n\ttools?: string[];\n\tmodel?: string;\n\tmodelHint?: string;\n\tskills?: string[];\n\tcwd?: string;\n\tsystemPrompt: string;\n\tsource: AgentSource;\n\tfilePath: string;\n}\n\nexport interface AgentDiscoveryResult {\n\tagents: AgentConfig[];\n\tprojectAgentsDir: string | null;\n}\n\nconst BUNDLED_AGENTS: AgentConfig[] = [\n\t{\n\t\tname: \"explore\",\n\t\tdescription: \"Fast codebase exploration that returns compressed context for handoff to other agents\",\n\t\ttools: [\"read\", \"grep\", \"find\", \"ls\", \"bash\"],\n\t\tsystemPrompt: `You are an explorer. Quickly investigate a codebase and return structured findings that another agent can use without re-reading everything.\n\nYour output will be passed to an agent who has NOT seen the files you explored.\n\nThoroughness (infer from task, default medium):\n- Quick: Targeted lookups, key files only\n- Medium: Follow imports, read critical sections\n- Thorough: Trace all dependencies, check tests/types\n\nStrategy:\n1. grep/find to locate relevant code\n2. Read key sections\n3. Identify types, interfaces, and key functions\n4. Note dependencies between files\n\nReturn files and exact line ranges, key code, architecture, and the best file to inspect first.`,\n\t\tsource: \"bundled\",\n\t\tfilePath: \"<builtin:subagent/explore>\",\n\t},\n\t{\n\t\tname: \"worker\",\n\t\tdescription: \"General-purpose subagent with full capabilities and isolated context\",\n\t\tsystemPrompt: `You are a worker agent with full capabilities. Work autonomously to complete the delegated task.\n\nWhen finished, report what was completed, files changed, and anything the parent agent should know.`,\n\t\tsource: \"bundled\",\n\t\tfilePath: \"<builtin:subagent/worker>\",\n\t},\n\t{\n\t\tname: \"reviewer\",\n\t\tdescription: \"Code review specialist for quality and security analysis\",\n\t\ttools: [\"read\", \"grep\", \"find\", \"ls\", \"bash\"],\n\t\tsystemPrompt: `You are a senior code reviewer. Analyze code for correctness, security, quality, and maintainability.\n\nUse bash only for read-only commands. Do not modify files or run builds.\n\nReport files reviewed, critical issues, warnings, suggestions, and a concise summary. Include exact file paths and line numbers.`,\n\t\tsource: \"bundled\",\n\t\tfilePath: \"<builtin:subagent/reviewer>\",\n\t},\n];\n\nfunction parseAgentConfig(content: string, filePath: string, source: AgentConfigSource): AgentConfig | undefined {\n\tconst { frontmatter, body } = parseFrontmatter<Record<string, string>>(content);\n\tif (!frontmatter.name || !frontmatter.description) return undefined;\n\tconst tools = frontmatter.tools\n\t\t?.split(\",\")\n\t\t.map((tool) => tool.trim())\n\t\t.filter(Boolean);\n\tconst skills = frontmatter.skills\n\t\t?.split(\",\")\n\t\t.map((skill) => skill.trim())\n\t\t.filter(Boolean);\n\treturn {\n\t\tname: frontmatter.name,\n\t\tdescription: frontmatter.description,\n\t\ttools: tools && tools.length > 0 ? tools : undefined,\n\t\tmodel: frontmatter.model,\n\t\tmodelHint: frontmatter.modelHint,\n\t\tskills: skills && skills.length > 0 ? skills : undefined,\n\t\tcwd: frontmatter.cwd,\n\t\tsystemPrompt: body,\n\t\tsource,\n\t\tfilePath,\n\t};\n}\n\nfunction loadAgentsFromDir(dir: string, source: AgentConfigSource): AgentConfig[] {\n\tconst agents: AgentConfig[] = [];\n\tif (!fs.existsSync(dir)) return agents;\n\n\tlet entries: fs.Dirent[];\n\ttry {\n\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn agents;\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.name.endsWith(\".md\") || (!entry.isFile() && !entry.isSymbolicLink())) continue;\n\t\tconst filePath = path.join(dir, entry.name);\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = fs.readFileSync(filePath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst agent = parseAgentConfig(content, filePath, source);\n\t\tif (agent) agents.push(agent);\n\t}\n\treturn agents;\n}\n\nfunction findNearestProjectAgentsDir(cwd: string): string | null {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = path.join(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\ttry {\n\t\t\tif (fs.statSync(candidate).isDirectory()) return candidate;\n\t\t} catch {}\n\t\tconst parentDir = path.dirname(currentDir);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\nexport function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult {\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir = findNearestProjectAgentsDir(cwd);\n\tconst bundledAgents = scope === \"project\" ? [] : BUNDLED_AGENTS;\n\tconst userAgents = scope === \"project\" ? [] : loadAgentsFromDir(userDir, \"user\");\n\tconst projectAgents = scope === \"user\" || !projectAgentsDir ? [] : loadAgentsFromDir(projectAgentsDir, \"project\");\n\tconst agentMap = new Map<string, AgentConfig>();\n\n\tfor (const agent of bundledAgents) agentMap.set(agent.name, agent);\n\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\n\treturn { agents: Array.from(agentMap.values()), projectAgentsDir };\n}\n\nasync function loadAgentsFromDirWithOperations(dir: string, operations: ToolOperations): Promise<AgentConfig[]> {\n\tconst agents: AgentConfig[] = [];\n\tlet entries: string[];\n\ttry {\n\t\tentries = await operations.readdir(dir);\n\t} catch {\n\t\treturn agents;\n\t}\n\tfor (const name of entries.sort()) {\n\t\tif (!name.endsWith(\".md\")) continue;\n\t\tconst filePath = joinPortablePath(dir, name);\n\t\ttry {\n\t\t\tconst stat = await operations.stat(filePath);\n\t\t\tif (!stat.isFile()) continue;\n\t\t\tconst agent = parseAgentConfig((await operations.readFile(filePath)).toString(\"utf8\"), filePath, \"project\");\n\t\t\tif (agent) agents.push(agent);\n\t\t} catch {}\n\t}\n\treturn agents;\n}\n\nasync function findNearestProjectAgentsDirWithOperations(\n\tcwd: string,\n\toperations: ToolOperations,\n\troot: string,\n\tpathFlavor: PortablePathFlavor,\n): Promise<string | null> {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = joinPortablePath(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\ttry {\n\t\t\tif ((await operations.stat(candidate)).isDirectory()) return candidate;\n\t\t} catch {}\n\t\tif (pathComparisonValue(currentDir, pathFlavor) === pathComparisonValue(root, pathFlavor)) return null;\n\t\tconst parentDir = dirnamePortablePath(currentDir, pathFlavor);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\nfunction discoverHostOwnedAgents(scope: AgentScope): AgentDiscoveryResult {\n\treturn {\n\t\tagents:\n\t\t\tscope === \"project\"\n\t\t\t\t? []\n\t\t\t\t: [...BUNDLED_AGENTS, ...loadAgentsFromDir(path.join(getAgentDir(), \"agents\"), \"user\")],\n\t\tprojectAgentsDir: null,\n\t};\n}\n\nexport async function discoverAgentsWithOperations(\n\tcwd: string,\n\tscope: AgentScope,\n\toperations?: ToolOperations,\n): Promise<AgentDiscoveryResult> {\n\tif (!operations) return discoverAgents(cwd, scope);\n\tconst backend = operations.getBackendInfo?.();\n\tif (backend?.type === \"local\") return discoverAgents(cwd, scope);\n\tif (!backend) return discoverHostOwnedAgents(scope);\n\tif (backend.type === \"remote\" && !backend.configured) {\n\t\treturn discoverHostOwnedAgents(scope);\n\t}\n\tconst remoteCwd = backend.workspace.root;\n\tconst pathFlavor = backend.workspace.pathFlavor;\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir =\n\t\tscope === \"user\"\n\t\t\t? null\n\t\t\t: await findNearestProjectAgentsDirWithOperations(remoteCwd, operations, backend.workspace.root, pathFlavor);\n\tconst bundledAgents = scope === \"project\" ? [] : BUNDLED_AGENTS;\n\tconst userAgents = scope === \"project\" ? [] : loadAgentsFromDir(userDir, \"user\");\n\tconst projectAgents = projectAgentsDir ? await loadAgentsFromDirWithOperations(projectAgentsDir, operations) : [];\n\tconst agentMap = new Map<string, AgentConfig>();\n\tfor (const agent of bundledAgents) agentMap.set(agent.name, agent);\n\tfor (const agent of userAgents) agentMap.set(agent.name, agent);\n\tfor (const agent of projectAgents) agentMap.set(agent.name, agent);\n\treturn { agents: Array.from(agentMap.values()), projectAgentsDir };\n}\n\nexport interface AgentListFormatResult {\n\ttext: string;\n\tremaining: number;\n}\n\nexport function formatAgentList(agents: AgentConfig[], maxItems: number): AgentListFormatResult {\n\tif (agents.length === 0) return { text: \"none\", remaining: 0 };\n\tconst listed = agents.slice(0, maxItems);\n\treturn {\n\t\ttext: listed.map((agent) => `${agent.name} (${agent.source}): ${agent.description}`).join(\"; \"),\n\t\tremaining: agents.length - listed.length,\n\t};\n}\n"]}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subagent Tool - Delegate tasks to specialized agents
|
|
3
|
+
*
|
|
4
|
+
* Runs each task in a fresh embedded AgentSession using an injected runner.
|
|
5
|
+
*
|
|
6
|
+
* Supports three modes:
|
|
7
|
+
* - Single: { task: "...", responseFormat: "...", systemPrompt: "..." }
|
|
8
|
+
* - Parallel: { tasks: [{ task: "...", model: "..." }, ...] }
|
|
9
|
+
* - Chain: { chain: [{ task: "... {previous} ..." }, ...] }
|
|
10
|
+
*/
|
|
11
|
+
import type { AgentTool } from "@greppleai/grip-agent-core";
|
|
12
|
+
import type { Api, Message, Model } from "@greppleai/grip-ai";
|
|
13
|
+
import { type Static, Type } from "typebox";
|
|
14
|
+
import type { ToolDefinition } from "../extensions/types.ts";
|
|
15
|
+
import type { ToolOperations } from "./operations.ts";
|
|
16
|
+
import { type AgentScope, type AgentSource } from "./subagent-agents.ts";
|
|
17
|
+
export declare function formatSubagentModelCatalog(currentModel: Model<Api> | undefined, availableModels: Model<Api>[]): string | undefined;
|
|
18
|
+
export interface SubagentUsageStats {
|
|
19
|
+
input: number;
|
|
20
|
+
output: number;
|
|
21
|
+
cacheRead: number;
|
|
22
|
+
cacheWrite: number;
|
|
23
|
+
cost: number;
|
|
24
|
+
contextTokens: number;
|
|
25
|
+
turns: number;
|
|
26
|
+
}
|
|
27
|
+
export type SubagentStatus = "queued" | "running" | "completed" | "failed";
|
|
28
|
+
export type SubagentRunStatus = Exclude<SubagentStatus, "queued">;
|
|
29
|
+
export type SubagentMode = "single" | "parallel" | "chain";
|
|
30
|
+
export type SubagentAgentSource = AgentSource | "ad-hoc" | "unknown";
|
|
31
|
+
export interface SubagentResult {
|
|
32
|
+
status: SubagentStatus;
|
|
33
|
+
runId?: string;
|
|
34
|
+
sessionReference?: string;
|
|
35
|
+
agent: string;
|
|
36
|
+
agentSource: SubagentAgentSource;
|
|
37
|
+
task: string;
|
|
38
|
+
exitCode: number;
|
|
39
|
+
messages: Message[];
|
|
40
|
+
stderr: string;
|
|
41
|
+
usage: SubagentUsageStats;
|
|
42
|
+
model?: string;
|
|
43
|
+
stopReason?: string;
|
|
44
|
+
errorMessage?: string;
|
|
45
|
+
responseFormat?: string;
|
|
46
|
+
step?: number;
|
|
47
|
+
}
|
|
48
|
+
export interface SubagentDetails {
|
|
49
|
+
mode: SubagentMode;
|
|
50
|
+
agentScope: AgentScope;
|
|
51
|
+
projectAgentsDir: string | null;
|
|
52
|
+
results: SubagentResult[];
|
|
53
|
+
}
|
|
54
|
+
export interface SubagentRunInfo {
|
|
55
|
+
runId: string;
|
|
56
|
+
sessionReference?: string;
|
|
57
|
+
status: SubagentRunStatus;
|
|
58
|
+
agent: string;
|
|
59
|
+
task: string;
|
|
60
|
+
cwd: string;
|
|
61
|
+
model?: string;
|
|
62
|
+
createdAt: string;
|
|
63
|
+
updatedAt: string;
|
|
64
|
+
lastOutput?: string;
|
|
65
|
+
}
|
|
66
|
+
export type SubagentModelHint = "cheapest" | "fastest" | "strongest" | "best-reasoning" | "large-context" | "same-as-parent" | "balanced";
|
|
67
|
+
export interface SessionSubagentConfig {
|
|
68
|
+
name: string;
|
|
69
|
+
description: string;
|
|
70
|
+
systemPrompt: string;
|
|
71
|
+
tools?: string[];
|
|
72
|
+
model?: string;
|
|
73
|
+
modelHint?: SubagentModelHint;
|
|
74
|
+
skills?: string[];
|
|
75
|
+
cwd?: string;
|
|
76
|
+
createdAt: string;
|
|
77
|
+
updatedAt: string;
|
|
78
|
+
}
|
|
79
|
+
export interface SubagentRunRegistry {
|
|
80
|
+
list(): SubagentRunInfo[];
|
|
81
|
+
}
|
|
82
|
+
export interface SubagentConfigRegistry {
|
|
83
|
+
list(): SessionSubagentConfig[];
|
|
84
|
+
upsert(config: SessionSubagentConfig): void;
|
|
85
|
+
get(name: string): SessionSubagentConfig | undefined;
|
|
86
|
+
}
|
|
87
|
+
export interface SubagentRunRequest {
|
|
88
|
+
cwd: string;
|
|
89
|
+
toolOperations?: ToolOperations;
|
|
90
|
+
prompt: string;
|
|
91
|
+
/** Human-readable delegated task, without wrapper markup. */
|
|
92
|
+
task: string;
|
|
93
|
+
agent: string;
|
|
94
|
+
agentSource: SubagentAgentSource;
|
|
95
|
+
systemPrompt: string;
|
|
96
|
+
model?: string;
|
|
97
|
+
tools?: string[];
|
|
98
|
+
skills?: string[];
|
|
99
|
+
continueSession?: string;
|
|
100
|
+
signal?: AbortSignal;
|
|
101
|
+
onMessage: (message: Message) => void;
|
|
102
|
+
}
|
|
103
|
+
export interface SubagentRunOutcome {
|
|
104
|
+
exitCode: number;
|
|
105
|
+
stderr: string;
|
|
106
|
+
runId?: string;
|
|
107
|
+
sessionReference?: string;
|
|
108
|
+
}
|
|
109
|
+
export type SubagentRunner = (request: SubagentRunRequest) => Promise<SubagentRunOutcome>;
|
|
110
|
+
export declare function formatSubagentTaskPrompt(task: string, responseFormat?: string): string;
|
|
111
|
+
export declare const subagentParamsSchema: Type.TObject<{
|
|
112
|
+
agent: Type.TOptional<Type.TString>;
|
|
113
|
+
task: Type.TOptional<Type.TString>;
|
|
114
|
+
responseFormat: Type.TOptional<Type.TString>;
|
|
115
|
+
systemPrompt: Type.TOptional<Type.TString>;
|
|
116
|
+
model: Type.TOptional<Type.TString>;
|
|
117
|
+
modelHint: Type.TOptional<Type.TUnsafe<"balanced" | "best-reasoning" | "cheapest" | "fastest" | "large-context" | "same-as-parent" | "strongest">>;
|
|
118
|
+
tools: Type.TOptional<Type.TArray<Type.TString>>;
|
|
119
|
+
skills: Type.TOptional<Type.TArray<Type.TString>>;
|
|
120
|
+
tasks: Type.TOptional<Type.TArray<Type.TObject<{
|
|
121
|
+
agent: Type.TOptional<Type.TString>;
|
|
122
|
+
task: Type.TString;
|
|
123
|
+
responseFormat: Type.TOptional<Type.TString>;
|
|
124
|
+
systemPrompt: Type.TOptional<Type.TString>;
|
|
125
|
+
model: Type.TOptional<Type.TString>;
|
|
126
|
+
modelHint: Type.TOptional<Type.TUnsafe<"balanced" | "best-reasoning" | "cheapest" | "fastest" | "large-context" | "same-as-parent" | "strongest">>;
|
|
127
|
+
tools: Type.TOptional<Type.TArray<Type.TString>>;
|
|
128
|
+
skills: Type.TOptional<Type.TArray<Type.TString>>;
|
|
129
|
+
cwd: Type.TOptional<Type.TString>;
|
|
130
|
+
}>>>;
|
|
131
|
+
chain: Type.TOptional<Type.TArray<Type.TObject<{
|
|
132
|
+
agent: Type.TOptional<Type.TString>;
|
|
133
|
+
task: Type.TString;
|
|
134
|
+
responseFormat: Type.TOptional<Type.TString>;
|
|
135
|
+
systemPrompt: Type.TOptional<Type.TString>;
|
|
136
|
+
model: Type.TOptional<Type.TString>;
|
|
137
|
+
modelHint: Type.TOptional<Type.TUnsafe<"balanced" | "best-reasoning" | "cheapest" | "fastest" | "large-context" | "same-as-parent" | "strongest">>;
|
|
138
|
+
tools: Type.TOptional<Type.TArray<Type.TString>>;
|
|
139
|
+
skills: Type.TOptional<Type.TArray<Type.TString>>;
|
|
140
|
+
cwd: Type.TOptional<Type.TString>;
|
|
141
|
+
}>>>;
|
|
142
|
+
agentScope: Type.TOptional<Type.TUnsafe<"both" | "project" | "user">>;
|
|
143
|
+
continueSession: Type.TOptional<Type.TString>;
|
|
144
|
+
cwd: Type.TOptional<Type.TString>;
|
|
145
|
+
}>;
|
|
146
|
+
export type SubagentToolInput = Static<typeof subagentParamsSchema>;
|
|
147
|
+
export interface SubagentToolOptions {
|
|
148
|
+
runner?: SubagentRunner;
|
|
149
|
+
modelCatalog?: string;
|
|
150
|
+
resolveModelHint?: (hint: SubagentModelHint) => string | undefined;
|
|
151
|
+
/** Host-controlled trust grant for project-local agent presets. */
|
|
152
|
+
trustProjectAgents?: boolean;
|
|
153
|
+
runRegistry?: SubagentRunRegistry;
|
|
154
|
+
configRegistry?: SubagentConfigRegistry;
|
|
155
|
+
}
|
|
156
|
+
declare const subagentRunsParamsSchema: Type.TObject<{
|
|
157
|
+
status: Type.TOptional<Type.TUnsafe<"completed" | "failed" | "running">>;
|
|
158
|
+
}>;
|
|
159
|
+
export type SubagentRunsToolInput = Static<typeof subagentRunsParamsSchema>;
|
|
160
|
+
export interface SubagentRunsDetails {
|
|
161
|
+
runs: SubagentRunInfo[];
|
|
162
|
+
}
|
|
163
|
+
export declare function createSubagentRunsToolDefinition(registry?: SubagentRunRegistry): ToolDefinition<typeof subagentRunsParamsSchema, SubagentRunsDetails>;
|
|
164
|
+
declare const createSubagentConfigParamsSchema: Type.TObject<{
|
|
165
|
+
name: Type.TString;
|
|
166
|
+
description: Type.TString;
|
|
167
|
+
systemPrompt: Type.TString;
|
|
168
|
+
model: Type.TOptional<Type.TString>;
|
|
169
|
+
modelHint: Type.TOptional<Type.TUnsafe<"balanced" | "best-reasoning" | "cheapest" | "fastest" | "large-context" | "same-as-parent" | "strongest">>;
|
|
170
|
+
tools: Type.TOptional<Type.TArray<Type.TString>>;
|
|
171
|
+
skills: Type.TOptional<Type.TArray<Type.TString>>;
|
|
172
|
+
cwd: Type.TOptional<Type.TString>;
|
|
173
|
+
}>;
|
|
174
|
+
export type CreateSubagentToolInput = Static<typeof createSubagentConfigParamsSchema>;
|
|
175
|
+
export interface CreateSubagentDetails {
|
|
176
|
+
config?: SessionSubagentConfig;
|
|
177
|
+
configs: SessionSubagentConfig[];
|
|
178
|
+
}
|
|
179
|
+
export declare function createCreateSubagentToolDefinition(registry?: SubagentConfigRegistry): ToolDefinition<typeof createSubagentConfigParamsSchema, CreateSubagentDetails>;
|
|
180
|
+
export declare function createSubagentToolDefinition(options?: SubagentToolOptions): ToolDefinition<typeof subagentParamsSchema, SubagentDetails>;
|
|
181
|
+
export declare function createSubagentRunsTool(registry?: SubagentRunRegistry): AgentTool<typeof subagentRunsParamsSchema, SubagentRunsDetails>;
|
|
182
|
+
export declare function createCreateSubagentTool(registry?: SubagentConfigRegistry): AgentTool<typeof createSubagentConfigParamsSchema, CreateSubagentDetails>;
|
|
183
|
+
export declare function createSubagentTool(options?: SubagentToolOptions): AgentTool<typeof subagentParamsSchema, SubagentDetails>;
|
|
184
|
+
export {};
|
|
185
|
+
//# sourceMappingURL=subagent.d.ts.map
|