@greppleai/grip 0.0.0-stage → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +725 -2
- package/dist/bun/cli.d.ts +3 -0
- package/dist/bun/cli.d.ts.map +1 -0
- package/dist/bun/cli.js +11 -0
- package/dist/bun/cli.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 +441 -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 +5176 -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 +456 -0
- package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/contract.js +809 -0
- package/dist/core/remote-workspace-protocol/contract.js.map +1 -0
- package/dist/core/remote-workspace-protocol/session.d.ts +247 -0
- package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/session.js +1839 -0
- package/dist/core/remote-workspace-protocol/session.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 +27 -0
- package/dist/core/sandbox/command.d.ts.map +1 -0
- package/dist/core/sandbox/command.js +124 -0
- package/dist/core/sandbox/command.js.map +1 -0
- package/dist/core/sandbox/docker.d.ts +169 -0
- package/dist/core/sandbox/docker.d.ts.map +1 -0
- package/dist/core/sandbox/docker.js +633 -0
- package/dist/core/sandbox/docker.js.map +1 -0
- package/dist/core/sandbox/lima.d.ts +38 -0
- package/dist/core/sandbox/lima.d.ts.map +1 -0
- package/dist/core/sandbox/lima.js +324 -0
- package/dist/core/sandbox/lima.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 +318 -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 +310 -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 +6 -0
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-queue.js +60 -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 +201 -0
- package/dist/core/tools/operations.d.ts.map +1 -0
- package/dist/core/tools/operations.js +697 -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/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 +43 -0
- package/dist/daemon/config.d.ts.map +1 -0
- package/dist/daemon/config.js +304 -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/security.d.ts +19 -0
- package/dist/daemon/security.d.ts.map +1 -0
- package/dist/daemon/security.js +175 -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 +400 -0
- package/dist/daemon/server.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 +673 -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 +763 -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 +29 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +149 -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 +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -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 +80 -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 +184 -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/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 +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -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 +306 -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 +49 -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 +557 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +5859 -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 +106 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +1030 -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 +81 -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 +125 -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 +110 -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 +81 -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 +167 -0
- package/docs/rpc.md +1492 -0
- package/docs/rules.md +117 -0
- package/docs/sandbox.md +181 -0
- package/docs/sdk.md +360 -0
- package/docs/session-format.md +414 -0
- package/docs/sessions.md +137 -0
- package/docs/settings.md +371 -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 +129 -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 +31 -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/sandbox-docker/Dockerfile +274 -0
- package/examples/sandbox-docker/README.md +88 -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 +102 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websearch.js","sourceRoot":"","sources":["../../../src/core/tools/websearch.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@greppleai/grip-agent-core\";\nimport { Text } from \"@greppleai/grip-tui\";\nimport { type Static, Type } from \"typebox\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../extensions/types.ts\";\nimport { getTextOutput, invalidArgText, str, type ToolTextOutputContent } from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\ninterface RenderTheme {\n\tbold(value: string): string;\n\tfg(role: string, value: string): string;\n}\n\nconst DEFAULT_LIMIT = 8;\nconst MAX_LIMIT = 20;\nconst REQUEST_TIMEOUT_MS = 10_000;\n\nexport type WebsearchProvider =\n\t| \"duckduckgo\"\n\t| \"duckduckgo-instant-answer\"\n\t| \"brave\"\n\t| \"brave-search\"\n\t| \"firecrawl\"\n\t| \"firecrawl-search\";\n\nexport interface WebsearchToolOptions {\n\tprovider?: WebsearchProvider;\n\tapiKey?: string;\n\tbaseUrl?: string;\n}\n\nconst websearchSchema = Type.Object({\n\tquery: Type.String({ description: \"Search query\" }),\n\tlimit: Type.Optional(\n\t\tType.Number({ description: `Maximum number of links to return (default ${DEFAULT_LIMIT}, max ${MAX_LIMIT})` }),\n\t),\n});\n\nexport type WebsearchToolInput = Static<typeof websearchSchema>;\n\nexport type WebsearchSource = \"duckduckgo-instant-answer\" | \"brave-search\" | \"firecrawl-search\";\n\nexport interface WebsearchResultItem {\n\ttitle: string;\n\turl: string;\n\tsnippet?: string;\n}\n\nexport interface WebsearchToolDetails {\n\tquery: string;\n\tresults: WebsearchResultItem[];\n\tsource: WebsearchSource;\n}\n\ninterface WebsearchCallArguments {\n\tquery?: string;\n\tlimit?: number;\n}\n\ninterface WebsearchRenderResult {\n\tcontent: ToolTextOutputContent[];\n\tdetails?: WebsearchToolDetails;\n}\n\ninterface DuckDuckGoTopic {\n\tFirstURL?: unknown;\n\tText?: unknown;\n\tName?: unknown;\n\tTopics?: unknown;\n}\n\ninterface BraveSearchResult {\n\ttitle?: unknown;\n\turl?: unknown;\n\tdescription?: unknown;\n}\n\ninterface FirecrawlSearchResult {\n\ttitle?: unknown;\n\turl?: unknown;\n\tdescription?: unknown;\n\tmarkdown?: unknown;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nexport function parseWebsearchToolOptions(value: unknown): WebsearchToolOptions | undefined {\n\tif (value === undefined) return undefined;\n\tif (!isRecord(value)) throw new Error(\"tools.websearch must be an object\");\n\tconst options: WebsearchToolOptions = {};\n\n\tconst provider = asString(value.provider);\n\tif (provider !== undefined) {\n\t\tif (\n\t\t\tprovider !== \"duckduckgo\" &&\n\t\t\tprovider !== \"duckduckgo-instant-answer\" &&\n\t\t\tprovider !== \"brave\" &&\n\t\t\tprovider !== \"brave-search\" &&\n\t\t\tprovider !== \"firecrawl\" &&\n\t\t\tprovider !== \"firecrawl-search\"\n\t\t) {\n\t\t\tthrow new Error(`Invalid tools.websearch.provider: ${provider}`);\n\t\t}\n\t\toptions.provider = provider;\n\t}\n\n\tconst apiKey = asString(value.apiKey);\n\tif (apiKey !== undefined) options.apiKey = apiKey;\n\n\tconst baseUrl = asString(value.baseUrl);\n\tif (baseUrl !== undefined) options.baseUrl = baseUrl;\n\n\treturn options;\n}\n\nfunction asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction stripHtml(value: string): string {\n\treturn value\n\t\t.replace(/<[^>]*>/g, \"\")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\nfunction titleFromText(text: string): string {\n\tconst separator = text.indexOf(\" - \");\n\treturn (separator > 0 ? text.slice(0, separator) : text).trim();\n}\n\nfunction pushResult(results: WebsearchResultItem[], seen: Set<string>, item: WebsearchResultItem): void {\n\tconst url = item.url.trim();\n\tif (!url || seen.has(url)) return;\n\tseen.add(url);\n\tresults.push({ ...item, url });\n}\n\nfunction collectRelatedTopics(value: unknown, results: WebsearchResultItem[], seen: Set<string>, limit: number): void {\n\tif (results.length >= limit) return;\n\tif (!Array.isArray(value)) return;\n\n\tfor (const entry of value) {\n\t\tif (results.length >= limit) return;\n\t\tif (!isRecord(entry)) continue;\n\t\tconst topic = entry as DuckDuckGoTopic;\n\t\tconst nestedTopics = topic.Topics;\n\t\tif (Array.isArray(nestedTopics)) {\n\t\t\tcollectRelatedTopics(nestedTopics, results, seen, limit);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst url = asString(topic.FirstURL);\n\t\tconst rawText = asString(topic.Text) ?? asString(topic.Name);\n\t\tif (!url || !rawText) continue;\n\t\tconst text = stripHtml(rawText);\n\t\tpushResult(results, seen, {\n\t\t\ttitle: titleFromText(text),\n\t\t\turl,\n\t\t\tsnippet: text,\n\t\t});\n\t}\n}\n\nexport function parseDuckDuckGoResponse(data: unknown, limit: number): WebsearchResultItem[] {\n\tconst results: WebsearchResultItem[] = [];\n\tconst seen = new Set<string>();\n\tif (!isRecord(data)) return results;\n\n\tconst heading = asString(data.Heading);\n\tconst abstractUrl = asString(data.AbstractURL);\n\tconst abstractText = asString(data.AbstractText) ?? asString(data.Abstract);\n\tif (abstractUrl && (heading || abstractText)) {\n\t\tpushResult(results, seen, {\n\t\t\ttitle: heading ?? titleFromText(stripHtml(abstractText ?? abstractUrl)),\n\t\t\turl: abstractUrl,\n\t\t\tsnippet: abstractText ? stripHtml(abstractText) : undefined,\n\t\t});\n\t}\n\n\tcollectRelatedTopics(data.RelatedTopics, results, seen, limit);\n\tcollectRelatedTopics(data.Results, results, seen, limit);\n\n\treturn results.slice(0, limit);\n}\n\nexport function parseBraveSearchResponse(data: unknown, limit: number): WebsearchResultItem[] {\n\tconst results: WebsearchResultItem[] = [];\n\tconst seen = new Set<string>();\n\tif (!isRecord(data) || !isRecord(data.web) || !Array.isArray(data.web.results)) return results;\n\n\tfor (const entry of data.web.results) {\n\t\tif (results.length >= limit) break;\n\t\tif (!isRecord(entry)) continue;\n\t\tconst item = entry as BraveSearchResult;\n\t\tconst title = asString(item.title);\n\t\tconst url = asString(item.url);\n\t\tif (!title || !url) continue;\n\t\tconst description = asString(item.description);\n\t\tpushResult(results, seen, {\n\t\t\ttitle: stripHtml(title),\n\t\t\turl,\n\t\t\tsnippet: description ? stripHtml(description) : undefined,\n\t\t});\n\t}\n\n\treturn results;\n}\n\nexport function parseFirecrawlSearchResponse(data: unknown, limit: number): WebsearchResultItem[] {\n\tconst results: WebsearchResultItem[] = [];\n\tconst seen = new Set<string>();\n\tif (!isRecord(data) || !isRecord(data.data) || !Array.isArray(data.data.web)) return results;\n\n\tfor (const entry of data.data.web) {\n\t\tif (results.length >= limit) break;\n\t\tif (!isRecord(entry)) continue;\n\t\tconst item = entry as FirecrawlSearchResult;\n\t\tconst title = asString(item.title);\n\t\tconst url = asString(item.url);\n\t\tif (!title || !url) continue;\n\t\tconst description = asString(item.description);\n\t\tconst markdown = asString(item.markdown);\n\t\tpushResult(results, seen, {\n\t\t\ttitle: stripHtml(title),\n\t\t\turl,\n\t\t\tsnippet: description ? stripHtml(description) : markdown ? stripHtml(markdown).slice(0, 500) : undefined,\n\t\t});\n\t}\n\n\treturn results;\n}\n\nfunction formatSourceName(source: WebsearchSource): string {\n\tswitch (source) {\n\t\tcase \"brave-search\":\n\t\t\treturn \"Brave Search\";\n\t\tcase \"firecrawl-search\":\n\t\t\treturn \"Firecrawl\";\n\t\tcase \"duckduckgo-instant-answer\":\n\t\t\treturn \"DuckDuckGo\";\n\t}\n}\n\nfunction formatResults(query: string, results: WebsearchResultItem[], source: WebsearchSource): string {\n\tif (results.length === 0) {\n\t\treturn `No ${formatSourceName(source)} links found for: ${query}`;\n\t}\n\treturn results\n\t\t.map((result, index) => {\n\t\t\tconst lines = [`${index + 1}. ${result.title}`, ` ${result.url}`];\n\t\t\tif (result.snippet) lines.push(` ${result.snippet}`);\n\t\t\treturn lines.join(\"\\n\");\n\t\t})\n\t\t.join(\"\\n\\n\");\n}\n\nfunction resolveLimit(limit: number | undefined): number {\n\tif (limit === undefined) return DEFAULT_LIMIT;\n\tif (!Number.isFinite(limit) || limit <= 0) return DEFAULT_LIMIT;\n\treturn Math.min(MAX_LIMIT, Math.floor(limit));\n}\n\nfunction formatWebsearchCall(args: WebsearchCallArguments | undefined, theme: RenderTheme): string {\n\tconst query = str(args?.query);\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"websearch\"))} ${query === null ? invalidArg : theme.fg(\"accent\", query)}`;\n\tif (args?.limit !== undefined) text += theme.fg(\"toolOutput\", ` (limit ${args.limit})`);\n\treturn text;\n}\n\nfunction formatWebsearchResult(\n\tresult: WebsearchRenderResult,\n\toptions: ToolRenderResultOptions,\n\ttheme: RenderTheme,\n\tshowImages: boolean,\n): string {\n\tconst output = getTextOutput(result, showImages).trim();\n\tif (!output) return \"\";\n\tconst lines = output.split(\"\\n\");\n\tconst maxLines = options.expanded ? lines.length : 24;\n\tconst displayed = lines.slice(0, maxLines).map((line) => theme.fg(\"toolOutput\", line));\n\tconst remaining = lines.length - maxLines;\n\treturn remaining > 0\n\t\t? `${displayed.join(\"\\n\")}\\n${theme.fg(\"muted\", `... (${remaining} more lines)`)}`\n\t\t: displayed.join(\"\\n\");\n}\nfunction resolveWebsearchProvider(options?: WebsearchToolOptions): WebsearchSource {\n\tconst configured =\n\t\toptions?.provider?.trim().toLowerCase() ?? process.env.GRIP_WEBSEARCH_PROVIDER?.trim().toLowerCase();\n\tif (!configured) {\n\t\tif (process.env.GRIP_WEBSEARCH_FIRECRAWL_API_KEY || process.env.FIRECRAWL_API_KEY) return \"firecrawl-search\";\n\t\tif (options?.apiKey || process.env.GRIP_WEBSEARCH_BRAVE_API_KEY || process.env.BRAVE_SEARCH_API_KEY)\n\t\t\treturn \"brave-search\";\n\t}\n\tif (!configured || configured === \"duckduckgo\" || configured === \"duckduckgo-instant-answer\") {\n\t\treturn \"duckduckgo-instant-answer\";\n\t}\n\tif (configured === \"brave\" || configured === \"brave-search\") return \"brave-search\";\n\tif (configured === \"firecrawl\" || configured === \"firecrawl-search\") return \"firecrawl-search\";\n\tthrow new Error(`Unsupported websearch provider: ${configured}`);\n}\n\nfunction resolveBraveApiKey(options?: WebsearchToolOptions): string {\n\tconst key = options?.apiKey ?? process.env.GRIP_WEBSEARCH_BRAVE_API_KEY ?? process.env.BRAVE_SEARCH_API_KEY;\n\tif (!key?.trim()) {\n\t\tthrow new Error(\n\t\t\t\"Brave websearch requires tools.websearch.apiKey, GRIP_WEBSEARCH_BRAVE_API_KEY, or BRAVE_SEARCH_API_KEY\",\n\t\t);\n\t}\n\treturn key.trim();\n}\n\nfunction resolveFirecrawlApiKey(options?: WebsearchToolOptions): string {\n\tconst key = options?.apiKey ?? process.env.GRIP_WEBSEARCH_FIRECRAWL_API_KEY ?? process.env.FIRECRAWL_API_KEY;\n\tif (!key?.trim()) {\n\t\tthrow new Error(\n\t\t\t\"Firecrawl websearch requires tools.websearch.apiKey, GRIP_WEBSEARCH_FIRECRAWL_API_KEY, or FIRECRAWL_API_KEY\",\n\t\t);\n\t}\n\treturn key.trim();\n}\n\nasync function fetchDuckDuckGoResults(\n\tquery: string,\n\tlimit: number,\n\tsignal: AbortSignal,\n): Promise<WebsearchResultItem[]> {\n\tconst url = new URL(\"https://api.duckduckgo.com/\");\n\turl.searchParams.set(\"q\", query);\n\turl.searchParams.set(\"format\", \"json\");\n\turl.searchParams.set(\"no_html\", \"1\");\n\turl.searchParams.set(\"skip_disambig\", \"1\");\n\n\tconst response = await fetch(url, {\n\t\theaders: { accept: \"application/json\", \"user-agent\": \"grip-coding-agent\" },\n\t\tsignal,\n\t});\n\tif (!response.ok) {\n\t\tthrow new Error(`DuckDuckGo request failed: ${response.status} ${response.statusText}`);\n\t}\n\treturn parseDuckDuckGoResponse((await response.json()) as unknown, limit);\n}\n\nasync function fetchBraveResults(\n\tquery: string,\n\tlimit: number,\n\tsignal: AbortSignal,\n\toptions?: WebsearchToolOptions,\n): Promise<WebsearchResultItem[]> {\n\tconst url = new URL(\n\t\toptions?.baseUrl ?? process.env.GRIP_WEBSEARCH_BRAVE_BASE_URL ?? \"https://api.search.brave.com/res/v1/web/search\",\n\t);\n\turl.searchParams.set(\"q\", query);\n\turl.searchParams.set(\"count\", String(limit));\n\n\tconst response = await fetch(url, {\n\t\theaders: {\n\t\t\taccept: \"application/json\",\n\t\t\t\"user-agent\": \"grip-coding-agent\",\n\t\t\t\"x-subscription-token\": resolveBraveApiKey(options),\n\t\t},\n\t\tsignal,\n\t});\n\tif (!response.ok) {\n\t\tthrow new Error(`Brave Search request failed: ${response.status} ${response.statusText}`);\n\t}\n\treturn parseBraveSearchResponse((await response.json()) as unknown, limit);\n}\n\nasync function fetchFirecrawlResults(\n\tquery: string,\n\tlimit: number,\n\tsignal: AbortSignal,\n\toptions?: WebsearchToolOptions,\n): Promise<WebsearchResultItem[]> {\n\tconst url = new URL(\n\t\toptions?.baseUrl ?? process.env.GRIP_WEBSEARCH_FIRECRAWL_BASE_URL ?? \"https://api.firecrawl.dev/v2/search\",\n\t);\n\tconst response = await fetch(url, {\n\t\tmethod: \"POST\",\n\t\theaders: {\n\t\t\taccept: \"application/json\",\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t\"user-agent\": \"grip-coding-agent\",\n\t\t\tauthorization: `Bearer ${resolveFirecrawlApiKey(options)}`,\n\t\t},\n\t\tbody: JSON.stringify({ query, limit, sources: [{ type: \"web\" }] }),\n\t\tsignal,\n\t});\n\tif (!response.ok) {\n\t\tthrow new Error(`Firecrawl Search request failed: ${response.status} ${response.statusText}`);\n\t}\n\treturn parseFirecrawlSearchResponse((await response.json()) as unknown, limit);\n}\nexport function createWebsearchToolDefinition(\n\toptions?: WebsearchToolOptions,\n): ToolDefinition<typeof websearchSchema, WebsearchToolDetails> {\n\treturn {\n\t\tname: \"websearch\",\n\t\tlabel: \"websearch\",\n\t\tdescription:\n\t\t\t\"Search the web for relevant links using DuckDuckGo by default, or Brave Search/Firecrawl when configured. Returns titles, URLs, and snippets when available.\",\n\t\tpromptSnippet: \"Search the web for relevant links\",\n\t\tparameters: websearchSchema,\n\t\tasync execute(_toolCallId, { query, limit }: WebsearchToolInput, signal?: AbortSignal) {\n\t\t\tconst trimmedQuery = query.trim();\n\t\t\tif (!trimmedQuery) throw new Error(\"query is required\");\n\n\t\t\tconst effectiveLimit = resolveLimit(limit);\n\t\t\tconst controller = new AbortController();\n\t\t\tconst timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\t\t\tconst onAbort = () => controller.abort();\n\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\ttry {\n\t\t\t\tconst source = resolveWebsearchProvider(options);\n\t\t\t\tconst results = await (async () => {\n\t\t\t\t\tswitch (source) {\n\t\t\t\t\t\tcase \"brave-search\":\n\t\t\t\t\t\t\treturn fetchBraveResults(trimmedQuery, effectiveLimit, controller.signal, options);\n\t\t\t\t\t\tcase \"firecrawl-search\":\n\t\t\t\t\t\t\treturn fetchFirecrawlResults(trimmedQuery, effectiveLimit, controller.signal, options);\n\t\t\t\t\t\tcase \"duckduckgo-instant-answer\":\n\t\t\t\t\t\t\treturn fetchDuckDuckGoResults(trimmedQuery, effectiveLimit, controller.signal);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: formatResults(trimmedQuery, results, source) }],\n\t\t\t\t\tdetails: { query: trimmedQuery, results, source },\n\t\t\t\t};\n\t\t\t} finally {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t}\n\t\t},\n\t\trenderCall(args, theme, context) {\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(formatWebsearchCall(args as WebsearchCallArguments | undefined, theme));\n\t\t\treturn text;\n\t\t},\n\t\trenderResult(result, options, theme, context) {\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(formatWebsearchResult(result as WebsearchRenderResult, options, theme, context.showImages));\n\t\t\treturn text;\n\t\t},\n\t};\n}\n\nexport function createWebsearchTool(options?: WebsearchToolOptions): AgentTool<typeof websearchSchema> {\n\treturn wrapToolDefinition(createWebsearchToolDefinition(options));\n}\n"]}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { AgentToolResult, AgentToolUpdateCallback } from "@greppleai/grip-agent-core";
|
|
2
|
+
import type { TSchema } from "typebox";
|
|
3
|
+
import type { ToolDefinition } from "../extensions/types.ts";
|
|
4
|
+
import { type BashToolDefinition, type BashToolOptions } from "./bash.ts";
|
|
5
|
+
import { type EditToolDefinition, type EditToolOptions } from "./edit.ts";
|
|
6
|
+
import { type FindToolDefinition, type FindToolOptions } from "./find.ts";
|
|
7
|
+
import { type GrepToolDefinition, type GrepToolOptions } from "./grep.ts";
|
|
8
|
+
import { type LsToolDefinition, type LsToolOptions } from "./ls.ts";
|
|
9
|
+
import { type ToolOperations, type WorkspaceToolExecutionOptions } from "./operations.ts";
|
|
10
|
+
import { type ReadToolDefinition, type ReadToolOptions } from "./read.ts";
|
|
11
|
+
import { type WriteToolDefinition, type WriteToolOptions } from "./write.ts";
|
|
12
|
+
export declare const WORKSPACE_TOOL_NAMES: readonly ["read", "bash", "edit", "write", "grep", "find", "ls"];
|
|
13
|
+
export type WorkspaceToolName = (typeof WORKSPACE_TOOL_NAMES)[number];
|
|
14
|
+
export type WorkspaceToolDefinition = ReadToolDefinition | BashToolDefinition | EditToolDefinition | WriteToolDefinition | GrepToolDefinition | FindToolDefinition | LsToolDefinition;
|
|
15
|
+
type AnyToolDefinition = ToolDefinition<any, any, any>;
|
|
16
|
+
export interface WorkspaceToolOptions {
|
|
17
|
+
read?: ReadToolOptions;
|
|
18
|
+
bash?: BashToolOptions;
|
|
19
|
+
write?: WriteToolOptions;
|
|
20
|
+
edit?: EditToolOptions;
|
|
21
|
+
grep?: GrepToolOptions;
|
|
22
|
+
find?: FindToolOptions;
|
|
23
|
+
ls?: LsToolOptions;
|
|
24
|
+
}
|
|
25
|
+
export interface WorkspaceToolHostOptions {
|
|
26
|
+
cwd: string;
|
|
27
|
+
operations?: ToolOperations;
|
|
28
|
+
tools?: WorkspaceToolOptions;
|
|
29
|
+
/** Closed tool allowlist. Defaults to all canonical workspace tools. */
|
|
30
|
+
toolNames?: readonly WorkspaceToolName[];
|
|
31
|
+
shellPath?: string;
|
|
32
|
+
/** Dispose a caller-provided operations backend with the host. Defaults to false. */
|
|
33
|
+
ownsOperations?: boolean;
|
|
34
|
+
/** Maximum time to await cancellation before continuing disposal. Defaults to 5 seconds. */
|
|
35
|
+
disposeTimeoutMs?: number;
|
|
36
|
+
/** Called after a negotiated remote catalog refresh has completed. */
|
|
37
|
+
onCatalogChanged?: () => void | Promise<void>;
|
|
38
|
+
/** Additional canonical service definitions, such as daemon-owned LSP tools. */
|
|
39
|
+
additionalDefinitions?: readonly AnyToolDefinition[];
|
|
40
|
+
}
|
|
41
|
+
export interface WorkspaceToolCatalogEntry {
|
|
42
|
+
name: string;
|
|
43
|
+
label: string;
|
|
44
|
+
description: string;
|
|
45
|
+
parameters: TSchema;
|
|
46
|
+
executionMode: AnyToolDefinition["executionMode"];
|
|
47
|
+
}
|
|
48
|
+
export interface WorkspaceToolInvocation {
|
|
49
|
+
toolCallId: string;
|
|
50
|
+
arguments: unknown;
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
onUpdate?: AgentToolUpdateCallback<unknown>;
|
|
53
|
+
executionOptions?: WorkspaceToolExecutionOptions;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Canonical workspace-scoped tool construction and execution without an AgentSession.
|
|
57
|
+
*
|
|
58
|
+
* This host deliberately excludes subagents, session lifecycle tools, extensions, LSP,
|
|
59
|
+
* models, prompts, conversation state, persistence, and UI. Caller-provided operations
|
|
60
|
+
* are borrowed unless ownsOperations is explicitly enabled.
|
|
61
|
+
*/
|
|
62
|
+
export declare class WorkspaceToolHost {
|
|
63
|
+
readonly operations: ToolOperations;
|
|
64
|
+
private readonly definitions;
|
|
65
|
+
private readonly rawDefinitions;
|
|
66
|
+
private readonly remoteToolNames;
|
|
67
|
+
private readonly tools;
|
|
68
|
+
private readonly ownsOperations;
|
|
69
|
+
private readonly toolOptions;
|
|
70
|
+
private readonly remoteExecutionOptions;
|
|
71
|
+
private unsubscribeCatalog;
|
|
72
|
+
private readonly disposeTimeoutMs;
|
|
73
|
+
private readonly disposeController;
|
|
74
|
+
private readonly activeInvocations;
|
|
75
|
+
private disposePromise;
|
|
76
|
+
private disposed;
|
|
77
|
+
constructor(options: WorkspaceToolHostOptions);
|
|
78
|
+
getDefinitions(): ReadonlyMap<string, AnyToolDefinition>;
|
|
79
|
+
getDefinition(name: string): AnyToolDefinition | undefined;
|
|
80
|
+
getCatalog(): WorkspaceToolCatalogEntry[];
|
|
81
|
+
prepareArguments(name: string, rawArguments: unknown): unknown;
|
|
82
|
+
execute(name: string, invocation: WorkspaceToolInvocation): Promise<AgentToolResult<unknown>>;
|
|
83
|
+
validatePreparedArguments(name: string, argumentsValue: unknown): boolean;
|
|
84
|
+
executePrepared(name: string, invocation: WorkspaceToolInvocation): Promise<AgentToolResult<unknown>>;
|
|
85
|
+
detachCatalogListener(): void;
|
|
86
|
+
waitForIdle(timeoutMs?: number): Promise<boolean>;
|
|
87
|
+
dispose(): Promise<void>;
|
|
88
|
+
private registerConfiguredTools;
|
|
89
|
+
private selectWorkspaceExecution;
|
|
90
|
+
private resolveLocalDefinition;
|
|
91
|
+
private startRemoteExecution;
|
|
92
|
+
private startLocalExecution;
|
|
93
|
+
private trackExecution;
|
|
94
|
+
private registerAdditionalDefinitions;
|
|
95
|
+
private register;
|
|
96
|
+
private runDefinition;
|
|
97
|
+
private disposeHost;
|
|
98
|
+
private requireRawDefinition;
|
|
99
|
+
private requireTool;
|
|
100
|
+
}
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=workspace-tool-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-tool-host.d.ts","sourceRoot":"","sources":["../../../src/core/tools/workspace-tool-host.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute } from \"node:path\";\nimport type { AgentTool, AgentToolResult, AgentToolUpdateCallback } from \"@greppleai/grip-agent-core\";\nimport { validateToolArguments } from \"@greppleai/grip-ai\";\nimport type { Static, TSchema } from \"typebox\";\nimport type { ExtensionContext, ToolDefinition } from \"../extensions/types.ts\";\nimport {\n\ttype BashToolDefinition,\n\ttype BashToolOptions,\n\tcreateBashToolDefinition,\n\tgetBashSessionEnvironment,\n} from \"./bash.ts\";\nimport { createEditToolDefinition, type EditToolDefinition, type EditToolOptions } from \"./edit.ts\";\nimport { createFindToolDefinition, type FindToolDefinition, type FindToolOptions } from \"./find.ts\";\nimport { createGrepToolDefinition, type GrepToolDefinition, type GrepToolOptions } from \"./grep.ts\";\nimport { createLsToolDefinition, type LsToolDefinition, type LsToolOptions } from \"./ls.ts\";\nimport { LocalToolOperations, type ToolOperations, type WorkspaceToolExecutionOptions } from \"./operations.ts\";\nimport { resolveToCwd } from \"./path-utils.ts\";\nimport {\n\tcreateReadToolDefinition,\n\ttype ReadToolDefinition,\n\ttype ReadToolOperations,\n\ttype ReadToolOptions,\n} from \"./read.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\nimport { createWriteToolDefinition, type WriteToolDefinition, type WriteToolOptions } from \"./write.ts\";\n\nexport const WORKSPACE_TOOL_NAMES = Object.freeze([\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\"] as const);\nconst WORKSPACE_TOOL_NAME_SET = new Set<string>(WORKSPACE_TOOL_NAMES);\nexport type WorkspaceToolName = (typeof WORKSPACE_TOOL_NAMES)[number];\nexport type WorkspaceToolDefinition =\n\t| ReadToolDefinition\n\t| BashToolDefinition\n\t| EditToolDefinition\n\t| WriteToolDefinition\n\t| GrepToolDefinition\n\t| FindToolDefinition\n\t| LsToolDefinition;\n\n// Heterogeneous tool registries erase per-tool schema/detail types at the lookup boundary.\ntype AnyAgentTool = AgentTool<any, any>;\ntype AnyToolDefinition = ToolDefinition<any, any, any>;\n\nexport interface WorkspaceToolOptions {\n\tread?: ReadToolOptions;\n\tbash?: BashToolOptions;\n\twrite?: WriteToolOptions;\n\tedit?: EditToolOptions;\n\tgrep?: GrepToolOptions;\n\tfind?: FindToolOptions;\n\tls?: LsToolOptions;\n}\n\nexport interface WorkspaceToolHostOptions {\n\tcwd: string;\n\toperations?: ToolOperations;\n\ttools?: WorkspaceToolOptions;\n\t/** Closed tool allowlist. Defaults to all canonical workspace tools. */\n\ttoolNames?: readonly WorkspaceToolName[];\n\tshellPath?: string;\n\t/** Dispose a caller-provided operations backend with the host. Defaults to false. */\n\townsOperations?: boolean;\n\t/** Maximum time to await cancellation before continuing disposal. Defaults to 5 seconds. */\n\tdisposeTimeoutMs?: number;\n\t/** Called after a negotiated remote catalog refresh has completed. */\n\tonCatalogChanged?: () => void | Promise<void>;\n\t/** Additional canonical service definitions, such as daemon-owned LSP tools. */\n\tadditionalDefinitions?: readonly AnyToolDefinition[];\n}\n\nexport interface WorkspaceToolCatalogEntry {\n\tname: string;\n\tlabel: string;\n\tdescription: string;\n\tparameters: TSchema;\n\texecutionMode: AnyToolDefinition[\"executionMode\"];\n}\n\nexport interface WorkspaceToolInvocation {\n\ttoolCallId: string;\n\targuments: unknown;\n\tsignal?: AbortSignal;\n\tonUpdate?: AgentToolUpdateCallback<unknown>;\n\texecutionOptions?: WorkspaceToolExecutionOptions;\n}\n\ninterface WorkspaceExecutionSelection {\n\texecuteRemotely: boolean;\n\treadOperations: ReadToolOperations | undefined;\n}\n\ninterface HostedToolExecution<TParams extends TSchema, TDetails> {\n\tname: string;\n\ttoolCallId: string;\n\tparams: Static<TParams>;\n\tsignal: AbortSignal;\n\tonUpdate: AgentToolUpdateCallback<TDetails> | undefined;\n\tcontext: ExtensionContext;\n\texecutionOptions: WorkspaceToolExecutionOptions | undefined;\n}\n\nfunction cloneObjectGraph<T>(value: T, seen = new Map<object, object>()): T {\n\tif (typeof value !== \"object\" || value === null) return value;\n\tconst existing = seen.get(value);\n\tif (existing) return existing as T;\n\tconst clone: object = Array.isArray(value) ? [] : Object.create(Object.getPrototypeOf(value));\n\tseen.set(value, clone);\n\tfor (const key of Reflect.ownKeys(value)) {\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\t\tif (!descriptor) continue;\n\t\tif (\"value\" in descriptor) descriptor.value = cloneObjectGraph(descriptor.value, seen);\n\t\tObject.defineProperty(clone, key, descriptor);\n\t}\n\treturn clone as T;\n}\n\nfunction freezeObjectGraph(value: unknown, seen = new Set<object>()): void {\n\tif ((typeof value !== \"object\" && typeof value !== \"function\") || value === null || seen.has(value)) return;\n\tseen.add(value);\n\tfor (const key of Reflect.ownKeys(value)) {\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\t\tif (descriptor && \"value\" in descriptor) freezeObjectGraph(descriptor.value, seen);\n\t}\n\tObject.freeze(value);\n}\n\nfunction validateDisposeTimeout(value: number | undefined): number {\n\tconst resolved = value ?? 5000;\n\tif (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > 60_000) {\n\t\tthrow new Error(\"disposeTimeoutMs must be an integer from 1 through 60000\");\n\t}\n\treturn resolved;\n}\n\nfunction createRemoteExecutionOptions(toolOptions: WorkspaceToolOptions | undefined): WorkspaceToolExecutionOptions {\n\treturn Object.freeze({\n\t\t...(toolOptions?.read?.autoResizeImages === undefined\n\t\t\t? {}\n\t\t\t: { imageAutoResize: toolOptions.read.autoResizeImages }),\n\t\t...(toolOptions?.bash?.commandPrefix === undefined ? {} : { shellCommandPrefix: toolOptions.bash.commandPrefix }),\n\t});\n}\n\n/**\n * Canonical workspace-scoped tool construction and execution without an AgentSession.\n *\n * This host deliberately excludes subagents, session lifecycle tools, extensions, LSP,\n * models, prompts, conversation state, persistence, and UI. Caller-provided operations\n * are borrowed unless ownsOperations is explicitly enabled.\n */\nexport class WorkspaceToolHost {\n\treadonly operations: ToolOperations;\n\n\tprivate readonly definitions = new Map<string, AnyToolDefinition>();\n\tprivate readonly rawDefinitions = new Map<string, AnyToolDefinition>();\n\tprivate readonly remoteToolNames = new Set<string>();\n\tprivate readonly tools = new Map<string, AnyAgentTool>();\n\tprivate readonly ownsOperations: boolean;\n\tprivate readonly toolOptions: WorkspaceToolOptions | undefined;\n\tprivate readonly remoteExecutionOptions: WorkspaceToolExecutionOptions;\n\tprivate unsubscribeCatalog: (() => void) | undefined;\n\tprivate readonly disposeTimeoutMs: number;\n\tprivate readonly disposeController = new AbortController();\n\tprivate readonly activeInvocations = new Set<Promise<unknown>>();\n\tprivate disposePromise: Promise<void> | undefined;\n\tprivate disposed = false;\n\n\tconstructor(options: WorkspaceToolHostOptions) {\n\t\tif (options.operations && options.cwd !== options.operations.cwd) {\n\t\t\tthrow new Error(`Workspace host cwd ${options.cwd} does not match operations cwd ${options.operations.cwd}`);\n\t\t}\n\t\tthis.operations = options.operations ?? new LocalToolOperations(options.cwd, { shellPath: options.shellPath });\n\t\tthis.ownsOperations = options.operations ? options.ownsOperations === true : true;\n\t\tthis.toolOptions = options.tools;\n\t\tthis.remoteExecutionOptions = createRemoteExecutionOptions(options.tools);\n\t\tthis.disposeTimeoutMs = validateDisposeTimeout(options.disposeTimeoutMs);\n\t\tconst enabledNames = new Set(options.toolNames ?? WORKSPACE_TOOL_NAMES);\n\t\tfor (const name of enabledNames) {\n\t\t\tif (!WORKSPACE_TOOL_NAME_SET.has(name)) throw new Error(`Unknown workspace tool: ${name}`);\n\t\t}\n\t\tthis.registerConfiguredTools(enabledNames);\n\t\tthis.registerAdditionalDefinitions(options.additionalDefinitions ?? []);\n\t\tthis.unsubscribeCatalog = options.onCatalogChanged\n\t\t\t? this.operations.onWorkspaceToolCatalogChanged?.(options.onCatalogChanged)\n\t\t\t: undefined;\n\t}\n\n\tgetDefinitions(): ReadonlyMap<string, AnyToolDefinition> {\n\t\treturn new Map(this.definitions);\n\t}\n\n\tgetDefinition(name: string): AnyToolDefinition | undefined {\n\t\treturn this.definitions.get(name);\n\t}\n\n\tgetCatalog(): WorkspaceToolCatalogEntry[] {\n\t\treturn [...this.definitions.entries()].map(([name, definition]) => ({\n\t\t\tname,\n\t\t\tlabel: definition.label,\n\t\t\tdescription: definition.description,\n\t\t\tparameters: structuredClone(definition.parameters),\n\t\t\texecutionMode: definition.executionMode,\n\t\t}));\n\t}\n\n\tprepareArguments(name: string, rawArguments: unknown): unknown {\n\t\tif (this.disposed) throw new Error(\"Workspace tool host is disposed\");\n\t\tconst tool = this.requireTool(name);\n\t\treturn tool.prepareArguments ? tool.prepareArguments(rawArguments) : rawArguments;\n\t}\n\n\tasync execute(name: string, invocation: WorkspaceToolInvocation): Promise<AgentToolResult<unknown>> {\n\t\tconst preparedArguments = this.prepareArguments(name, invocation.arguments);\n\t\treturn await this.executePrepared(name, { ...invocation, arguments: preparedArguments });\n\t}\n\n\tvalidatePreparedArguments(name: string, argumentsValue: unknown): boolean {\n\t\tconst tool = this.tools.get(name);\n\t\tif (!tool || this.disposed) return false;\n\t\ttry {\n\t\t\tvalidateToolArguments(tool, {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: \"validate\",\n\t\t\t\tname: tool.name,\n\t\t\t\targuments: argumentsValue as Record<string, unknown>,\n\t\t\t});\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync executePrepared(name: string, invocation: WorkspaceToolInvocation): Promise<AgentToolResult<unknown>> {\n\t\tif (this.disposed) throw new Error(\"Workspace tool host is disposed\");\n\t\tconst tool = this.requireTool(name);\n\t\tconst params = validateToolArguments(tool, {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: invocation.toolCallId,\n\t\t\tname: tool.name,\n\t\t\targuments: invocation.arguments as Record<string, unknown>,\n\t\t});\n\t\treturn await this.runDefinition(\n\t\t\tname,\n\t\t\tinvocation.toolCallId,\n\t\t\tparams,\n\t\t\tinvocation.signal,\n\t\t\tinvocation.onUpdate,\n\t\t\tundefined as unknown as ExtensionContext,\n\t\t\tinvocation.executionOptions,\n\t\t);\n\t}\n\n\tdetachCatalogListener(): void {\n\t\tthis.unsubscribeCatalog?.();\n\t\tthis.unsubscribeCatalog = undefined;\n\t}\n\n\twaitForIdle(timeoutMs = this.disposeTimeoutMs): Promise<boolean> {\n\t\tif (this.activeInvocations.size === 0) return Promise.resolve(true);\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: boolean) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst timer = setTimeout(() => finish(false), timeoutMs);\n\t\t\ttimer.unref?.();\n\t\t\tvoid Promise.allSettled([...this.activeInvocations]).then(() => finish(true));\n\t\t});\n\t}\n\n\tdispose(): Promise<void> {\n\t\tthis.disposed = true;\n\t\tthis.disposePromise ??= this.disposeHost();\n\t\treturn this.disposePromise;\n\t}\n\n\tprivate registerConfiguredTools(enabledNames: ReadonlySet<WorkspaceToolName>): void {\n\t\tconst toolOptions = this.toolOptions;\n\t\tif (enabledNames.has(\"read\")) this.register(\"read\", createReadToolDefinition(this.operations, toolOptions?.read));\n\t\tif (enabledNames.has(\"bash\")) this.register(\"bash\", createBashToolDefinition(this.operations, toolOptions?.bash));\n\t\tif (enabledNames.has(\"edit\")) this.register(\"edit\", createEditToolDefinition(this.operations, toolOptions?.edit));\n\t\tif (enabledNames.has(\"write\"))\n\t\t\tthis.register(\"write\", createWriteToolDefinition(this.operations, toolOptions?.write));\n\t\tif (enabledNames.has(\"grep\")) this.register(\"grep\", createGrepToolDefinition(this.operations, toolOptions?.grep));\n\t\tif (enabledNames.has(\"find\")) this.register(\"find\", createFindToolDefinition(this.operations, toolOptions?.find));\n\t\tif (enabledNames.has(\"ls\")) this.register(\"ls\", createLsToolDefinition(this.operations, toolOptions?.ls));\n\t}\n\tprivate selectWorkspaceExecution(name: string, params: unknown): WorkspaceExecutionSelection {\n\t\tconst executeRemotely = this.remoteToolNames.has(name);\n\t\tconst operationsForPath = this.toolOptions?.read?.operationsForPath;\n\t\tif (!executeRemotely || name !== \"read\" || !operationsForPath) {\n\t\t\treturn { executeRemotely, readOperations: undefined };\n\t\t}\n\t\tconst readPath = (params as { path?: unknown }).path;\n\t\tif (typeof readPath !== \"string\" || !isAbsolute(readPath)) {\n\t\t\treturn { executeRemotely, readOperations: undefined };\n\t\t}\n\t\tconst absolutePath = resolveToCwd(readPath, this.operations.cwd);\n\t\tconst readOperations = operationsForPath(absolutePath);\n\t\treturn { executeRemotely: !readOperations, readOperations };\n\t}\n\n\tprivate resolveLocalDefinition<TParams extends TSchema, TDetails>(\n\t\trequest: HostedToolExecution<TParams, TDetails>,\n\t\tdefinition: ToolDefinition<TParams, TDetails>,\n\t\treadOperations: ReadToolOperations | undefined,\n\t): ToolDefinition<TParams, TDetails> {\n\t\tif (request.name === \"read\" && (readOperations || request.executionOptions?.imageAutoResize !== undefined)) {\n\t\t\treturn createReadToolDefinition(this.operations, {\n\t\t\t\t...this.toolOptions?.read,\n\t\t\t\t...(request.executionOptions?.imageAutoResize === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { autoResizeImages: request.executionOptions.imageAutoResize }),\n\t\t\t\t...(readOperations ? { operationsForPath: () => readOperations } : {}),\n\t\t\t}) as unknown as ToolDefinition<TParams, TDetails>;\n\t\t}\n\t\tif (\n\t\t\trequest.name === \"bash\" &&\n\t\t\t(request.executionOptions?.shellCommandPrefix !== undefined ||\n\t\t\t\trequest.executionOptions?.sessionEnvironment !== undefined)\n\t\t) {\n\t\t\tconst sessionEnvironment = request.executionOptions.sessionEnvironment;\n\t\t\tconst configuredSpawnHook = this.toolOptions?.bash?.spawnHook;\n\t\t\treturn createBashToolDefinition(this.operations, {\n\t\t\t\t...this.toolOptions?.bash,\n\t\t\t\tcommandPrefix: request.executionOptions.shellCommandPrefix,\n\t\t\t\texposeSessionEnvironment: false,\n\t\t\t\tspawnHook: sessionEnvironment\n\t\t\t\t\t? (spawnContext) => {\n\t\t\t\t\t\t\tconst resolved = configuredSpawnHook?.(spawnContext) ?? spawnContext;\n\t\t\t\t\t\t\treturn { ...resolved, env: { ...resolved.env, ...sessionEnvironment } };\n\t\t\t\t\t\t}\n\t\t\t\t\t: configuredSpawnHook,\n\t\t\t}) as unknown as ToolDefinition<TParams, TDetails>;\n\t\t}\n\t\treturn definition;\n\t}\n\n\tprivate startRemoteExecution<TParams extends TSchema, TDetails>(\n\t\trequest: HostedToolExecution<TParams, TDetails>,\n\t): Promise<AgentToolResult<TDetails>> {\n\t\tif (!this.operations.executeWorkspaceTool) {\n\t\t\tthrow new Error(`Remote workspace executor is unavailable: ${request.name}`);\n\t\t}\n\t\treturn Promise.resolve().then(\n\t\t\tasync () =>\n\t\t\t\t(await this.operations.executeWorkspaceTool!(request.name, {\n\t\t\t\t\ttoolCallId: request.toolCallId,\n\t\t\t\t\targuments: request.params,\n\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\tonUpdate: request.onUpdate as AgentToolUpdateCallback<unknown> | undefined,\n\t\t\t\t\texecutionOptions: request.executionOptions ?? this.remoteExecutionOptions,\n\t\t\t\t})) as AgentToolResult<TDetails>,\n\t\t);\n\t}\n\n\tprivate startLocalExecution<TParams extends TSchema, TDetails>(\n\t\trequest: HostedToolExecution<TParams, TDetails>,\n\t\tdefinition: ToolDefinition<TParams, TDetails>,\n\t): Promise<AgentToolResult<TDetails>> {\n\t\treturn Promise.resolve().then(() =>\n\t\t\tdefinition.execute(request.toolCallId, request.params, request.signal, request.onUpdate, request.context),\n\t\t);\n\t}\n\n\tprivate trackExecution<TDetails>(execution: Promise<AgentToolResult<TDetails>>): Promise<AgentToolResult<TDetails>> {\n\t\tthis.activeInvocations.add(execution);\n\t\tvoid execution.then(\n\t\t\t() => this.activeInvocations.delete(execution),\n\t\t\t() => this.activeInvocations.delete(execution),\n\t\t);\n\t\treturn execution;\n\t}\n\n\tprivate registerAdditionalDefinitions(definitions: readonly AnyToolDefinition[]): void {\n\t\tfor (const definition of definitions) {\n\t\t\tif (this.definitions.has(definition.name)) throw new Error(`Duplicate hosted tool: ${definition.name}`);\n\t\t\tthis.register(definition.name, definition);\n\t\t}\n\t}\n\n\tprivate register<TParams extends TSchema, TDetails, TState>(\n\t\tname: string,\n\t\tdefinition: ToolDefinition<TParams, TDetails, TState>,\n\t): void {\n\t\tconst canonicalDefinition: ToolDefinition<TParams, TDetails, TState> = {\n\t\t\t...definition,\n\t\t\tparameters: cloneObjectGraph(definition.parameters),\n\t\t};\n\t\tfreezeObjectGraph(canonicalDefinition);\n\t\tconst execute: ToolDefinition<TParams, TDetails, TState>[\"execute\"] = (\n\t\t\ttoolCallId,\n\t\t\tparams,\n\t\t\tsignal,\n\t\t\tonUpdate,\n\t\t\tcontext,\n\t\t) => this.runDefinition<TParams, TDetails>(name, toolCallId, params, signal, onUpdate, context, undefined);\n\t\tconst execution = this.operations.resolveWorkspaceToolExecution?.(name, canonicalDefinition.parameters);\n\t\tif (execution === \"unavailable\") return;\n\t\tif (execution === \"remote\") this.remoteToolNames.add(name);\n\t\tconst hostedDefinition: ToolDefinition<TParams, TDetails, TState> = Object.freeze({\n\t\t\t...canonicalDefinition,\n\t\t\texecute,\n\t\t});\n\t\tthis.rawDefinitions.set(name, canonicalDefinition);\n\t\tthis.definitions.set(name, hostedDefinition as unknown as WorkspaceToolDefinition);\n\t\tthis.tools.set(name, wrapToolDefinition(canonicalDefinition));\n\t}\n\n\tprivate async runDefinition<TParams extends TSchema, TDetails>(\n\t\tname: string,\n\t\ttoolCallId: string,\n\t\tparams: Static<TParams>,\n\t\tsignal: AbortSignal | undefined,\n\t\tonUpdate: AgentToolUpdateCallback<TDetails> | undefined,\n\t\tcontext: ExtensionContext,\n\t\texecutionOptions: WorkspaceToolExecutionOptions | undefined,\n\t): Promise<AgentToolResult<TDetails>> {\n\t\tif (this.disposed) throw new Error(\"Workspace tool host is disposed\");\n\t\tconst definition = this.requireRawDefinition(name) as ToolDefinition<TParams, TDetails>;\n\t\tconst combinedSignal = signal\n\t\t\t? AbortSignal.any([signal, this.disposeController.signal])\n\t\t\t: this.disposeController.signal;\n\t\tif (combinedSignal.aborted) throw new Error(\"Operation aborted\");\n\t\tconst selection = this.selectWorkspaceExecution(name, params);\n\t\tconst resolvedExecutionOptions = executionOptions ?? this.remoteExecutionOptions;\n\t\tconst request: HostedToolExecution<TParams, TDetails> = {\n\t\t\tname,\n\t\t\ttoolCallId,\n\t\t\tparams,\n\t\t\tsignal: combinedSignal,\n\t\t\tonUpdate,\n\t\t\tcontext,\n\t\t\texecutionOptions:\n\t\t\t\tname === \"bash\" && context && this.toolOptions?.bash?.exposeSessionEnvironment !== false\n\t\t\t\t\t? { ...resolvedExecutionOptions, sessionEnvironment: getBashSessionEnvironment(context) }\n\t\t\t\t\t: executionOptions,\n\t\t};\n\t\tconst execution = selection.executeRemotely\n\t\t\t? this.startRemoteExecution(request)\n\t\t\t: this.startLocalExecution(\n\t\t\t\t\trequest,\n\t\t\t\t\tthis.resolveLocalDefinition(request, definition, selection.readOperations),\n\t\t\t\t);\n\t\treturn await this.trackExecution(execution);\n\t}\n\n\tprivate async disposeHost(): Promise<void> {\n\t\tthis.detachCatalogListener();\n\t\tthis.disposeController.abort();\n\t\tlet timer: NodeJS.Timeout | undefined;\n\t\ttry {\n\t\t\tawait Promise.race([\n\t\t\t\tPromise.allSettled([...this.activeInvocations]),\n\t\t\t\tnew Promise<void>((resolve) => {\n\t\t\t\t\ttimer = setTimeout(resolve, this.disposeTimeoutMs);\n\t\t\t\t\ttimer.unref?.();\n\t\t\t\t}),\n\t\t\t]);\n\t\t} finally {\n\t\t\tif (timer) clearTimeout(timer);\n\t\t}\n\t\tif (this.ownsOperations) await this.operations.dispose?.();\n\t}\n\n\tprivate requireRawDefinition(name: string): AnyToolDefinition {\n\t\tconst definition = this.rawDefinitions.get(name);\n\t\tif (!definition) throw new Error(`Unknown or non-workspace tool: ${name}`);\n\t\treturn definition;\n\t}\n\n\tprivate requireTool(name: string): AnyAgentTool {\n\t\tconst tool = this.tools.get(name);\n\t\tif (!tool) throw new Error(`Unknown or non-workspace tool: ${name}`);\n\t\treturn tool;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { isAbsolute } from "node:path";
|
|
2
|
+
import { validateToolArguments } from "@greppleai/grip-ai";
|
|
3
|
+
import { createBashToolDefinition, getBashSessionEnvironment, } from "./bash.js";
|
|
4
|
+
import { createEditToolDefinition } from "./edit.js";
|
|
5
|
+
import { createFindToolDefinition } from "./find.js";
|
|
6
|
+
import { createGrepToolDefinition } from "./grep.js";
|
|
7
|
+
import { createLsToolDefinition } from "./ls.js";
|
|
8
|
+
import { LocalToolOperations } from "./operations.js";
|
|
9
|
+
import { resolveToCwd } from "./path-utils.js";
|
|
10
|
+
import { createReadToolDefinition, } from "./read.js";
|
|
11
|
+
import { wrapToolDefinition } from "./tool-definition-wrapper.js";
|
|
12
|
+
import { createWriteToolDefinition } from "./write.js";
|
|
13
|
+
export const WORKSPACE_TOOL_NAMES = Object.freeze(["read", "bash", "edit", "write", "grep", "find", "ls"]);
|
|
14
|
+
const WORKSPACE_TOOL_NAME_SET = new Set(WORKSPACE_TOOL_NAMES);
|
|
15
|
+
function cloneObjectGraph(value, seen = new Map()) {
|
|
16
|
+
if (typeof value !== "object" || value === null)
|
|
17
|
+
return value;
|
|
18
|
+
const existing = seen.get(value);
|
|
19
|
+
if (existing)
|
|
20
|
+
return existing;
|
|
21
|
+
const clone = Array.isArray(value) ? [] : Object.create(Object.getPrototypeOf(value));
|
|
22
|
+
seen.set(value, clone);
|
|
23
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
24
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
25
|
+
if (!descriptor)
|
|
26
|
+
continue;
|
|
27
|
+
if ("value" in descriptor)
|
|
28
|
+
descriptor.value = cloneObjectGraph(descriptor.value, seen);
|
|
29
|
+
Object.defineProperty(clone, key, descriptor);
|
|
30
|
+
}
|
|
31
|
+
return clone;
|
|
32
|
+
}
|
|
33
|
+
function freezeObjectGraph(value, seen = new Set()) {
|
|
34
|
+
if ((typeof value !== "object" && typeof value !== "function") || value === null || seen.has(value))
|
|
35
|
+
return;
|
|
36
|
+
seen.add(value);
|
|
37
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
38
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
39
|
+
if (descriptor && "value" in descriptor)
|
|
40
|
+
freezeObjectGraph(descriptor.value, seen);
|
|
41
|
+
}
|
|
42
|
+
Object.freeze(value);
|
|
43
|
+
}
|
|
44
|
+
function validateDisposeTimeout(value) {
|
|
45
|
+
const resolved = value ?? 5000;
|
|
46
|
+
if (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > 60_000) {
|
|
47
|
+
throw new Error("disposeTimeoutMs must be an integer from 1 through 60000");
|
|
48
|
+
}
|
|
49
|
+
return resolved;
|
|
50
|
+
}
|
|
51
|
+
function createRemoteExecutionOptions(toolOptions) {
|
|
52
|
+
return Object.freeze({
|
|
53
|
+
...(toolOptions?.read?.autoResizeImages === undefined
|
|
54
|
+
? {}
|
|
55
|
+
: { imageAutoResize: toolOptions.read.autoResizeImages }),
|
|
56
|
+
...(toolOptions?.bash?.commandPrefix === undefined ? {} : { shellCommandPrefix: toolOptions.bash.commandPrefix }),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Canonical workspace-scoped tool construction and execution without an AgentSession.
|
|
61
|
+
*
|
|
62
|
+
* This host deliberately excludes subagents, session lifecycle tools, extensions, LSP,
|
|
63
|
+
* models, prompts, conversation state, persistence, and UI. Caller-provided operations
|
|
64
|
+
* are borrowed unless ownsOperations is explicitly enabled.
|
|
65
|
+
*/
|
|
66
|
+
export class WorkspaceToolHost {
|
|
67
|
+
operations;
|
|
68
|
+
definitions = new Map();
|
|
69
|
+
rawDefinitions = new Map();
|
|
70
|
+
remoteToolNames = new Set();
|
|
71
|
+
tools = new Map();
|
|
72
|
+
ownsOperations;
|
|
73
|
+
toolOptions;
|
|
74
|
+
remoteExecutionOptions;
|
|
75
|
+
unsubscribeCatalog;
|
|
76
|
+
disposeTimeoutMs;
|
|
77
|
+
disposeController = new AbortController();
|
|
78
|
+
activeInvocations = new Set();
|
|
79
|
+
disposePromise;
|
|
80
|
+
disposed = false;
|
|
81
|
+
constructor(options) {
|
|
82
|
+
if (options.operations && options.cwd !== options.operations.cwd) {
|
|
83
|
+
throw new Error(`Workspace host cwd ${options.cwd} does not match operations cwd ${options.operations.cwd}`);
|
|
84
|
+
}
|
|
85
|
+
this.operations = options.operations ?? new LocalToolOperations(options.cwd, { shellPath: options.shellPath });
|
|
86
|
+
this.ownsOperations = options.operations ? options.ownsOperations === true : true;
|
|
87
|
+
this.toolOptions = options.tools;
|
|
88
|
+
this.remoteExecutionOptions = createRemoteExecutionOptions(options.tools);
|
|
89
|
+
this.disposeTimeoutMs = validateDisposeTimeout(options.disposeTimeoutMs);
|
|
90
|
+
const enabledNames = new Set(options.toolNames ?? WORKSPACE_TOOL_NAMES);
|
|
91
|
+
for (const name of enabledNames) {
|
|
92
|
+
if (!WORKSPACE_TOOL_NAME_SET.has(name))
|
|
93
|
+
throw new Error(`Unknown workspace tool: ${name}`);
|
|
94
|
+
}
|
|
95
|
+
this.registerConfiguredTools(enabledNames);
|
|
96
|
+
this.registerAdditionalDefinitions(options.additionalDefinitions ?? []);
|
|
97
|
+
this.unsubscribeCatalog = options.onCatalogChanged
|
|
98
|
+
? this.operations.onWorkspaceToolCatalogChanged?.(options.onCatalogChanged)
|
|
99
|
+
: undefined;
|
|
100
|
+
}
|
|
101
|
+
getDefinitions() {
|
|
102
|
+
return new Map(this.definitions);
|
|
103
|
+
}
|
|
104
|
+
getDefinition(name) {
|
|
105
|
+
return this.definitions.get(name);
|
|
106
|
+
}
|
|
107
|
+
getCatalog() {
|
|
108
|
+
return [...this.definitions.entries()].map(([name, definition]) => ({
|
|
109
|
+
name,
|
|
110
|
+
label: definition.label,
|
|
111
|
+
description: definition.description,
|
|
112
|
+
parameters: structuredClone(definition.parameters),
|
|
113
|
+
executionMode: definition.executionMode,
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
prepareArguments(name, rawArguments) {
|
|
117
|
+
if (this.disposed)
|
|
118
|
+
throw new Error("Workspace tool host is disposed");
|
|
119
|
+
const tool = this.requireTool(name);
|
|
120
|
+
return tool.prepareArguments ? tool.prepareArguments(rawArguments) : rawArguments;
|
|
121
|
+
}
|
|
122
|
+
async execute(name, invocation) {
|
|
123
|
+
const preparedArguments = this.prepareArguments(name, invocation.arguments);
|
|
124
|
+
return await this.executePrepared(name, { ...invocation, arguments: preparedArguments });
|
|
125
|
+
}
|
|
126
|
+
validatePreparedArguments(name, argumentsValue) {
|
|
127
|
+
const tool = this.tools.get(name);
|
|
128
|
+
if (!tool || this.disposed)
|
|
129
|
+
return false;
|
|
130
|
+
try {
|
|
131
|
+
validateToolArguments(tool, {
|
|
132
|
+
type: "toolCall",
|
|
133
|
+
id: "validate",
|
|
134
|
+
name: tool.name,
|
|
135
|
+
arguments: argumentsValue,
|
|
136
|
+
});
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async executePrepared(name, invocation) {
|
|
144
|
+
if (this.disposed)
|
|
145
|
+
throw new Error("Workspace tool host is disposed");
|
|
146
|
+
const tool = this.requireTool(name);
|
|
147
|
+
const params = validateToolArguments(tool, {
|
|
148
|
+
type: "toolCall",
|
|
149
|
+
id: invocation.toolCallId,
|
|
150
|
+
name: tool.name,
|
|
151
|
+
arguments: invocation.arguments,
|
|
152
|
+
});
|
|
153
|
+
return await this.runDefinition(name, invocation.toolCallId, params, invocation.signal, invocation.onUpdate, undefined, invocation.executionOptions);
|
|
154
|
+
}
|
|
155
|
+
detachCatalogListener() {
|
|
156
|
+
this.unsubscribeCatalog?.();
|
|
157
|
+
this.unsubscribeCatalog = undefined;
|
|
158
|
+
}
|
|
159
|
+
waitForIdle(timeoutMs = this.disposeTimeoutMs) {
|
|
160
|
+
if (this.activeInvocations.size === 0)
|
|
161
|
+
return Promise.resolve(true);
|
|
162
|
+
return new Promise((resolve) => {
|
|
163
|
+
let settled = false;
|
|
164
|
+
const finish = (value) => {
|
|
165
|
+
if (settled)
|
|
166
|
+
return;
|
|
167
|
+
settled = true;
|
|
168
|
+
clearTimeout(timer);
|
|
169
|
+
resolve(value);
|
|
170
|
+
};
|
|
171
|
+
const timer = setTimeout(() => finish(false), timeoutMs);
|
|
172
|
+
timer.unref?.();
|
|
173
|
+
void Promise.allSettled([...this.activeInvocations]).then(() => finish(true));
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
dispose() {
|
|
177
|
+
this.disposed = true;
|
|
178
|
+
this.disposePromise ??= this.disposeHost();
|
|
179
|
+
return this.disposePromise;
|
|
180
|
+
}
|
|
181
|
+
registerConfiguredTools(enabledNames) {
|
|
182
|
+
const toolOptions = this.toolOptions;
|
|
183
|
+
if (enabledNames.has("read"))
|
|
184
|
+
this.register("read", createReadToolDefinition(this.operations, toolOptions?.read));
|
|
185
|
+
if (enabledNames.has("bash"))
|
|
186
|
+
this.register("bash", createBashToolDefinition(this.operations, toolOptions?.bash));
|
|
187
|
+
if (enabledNames.has("edit"))
|
|
188
|
+
this.register("edit", createEditToolDefinition(this.operations, toolOptions?.edit));
|
|
189
|
+
if (enabledNames.has("write"))
|
|
190
|
+
this.register("write", createWriteToolDefinition(this.operations, toolOptions?.write));
|
|
191
|
+
if (enabledNames.has("grep"))
|
|
192
|
+
this.register("grep", createGrepToolDefinition(this.operations, toolOptions?.grep));
|
|
193
|
+
if (enabledNames.has("find"))
|
|
194
|
+
this.register("find", createFindToolDefinition(this.operations, toolOptions?.find));
|
|
195
|
+
if (enabledNames.has("ls"))
|
|
196
|
+
this.register("ls", createLsToolDefinition(this.operations, toolOptions?.ls));
|
|
197
|
+
}
|
|
198
|
+
selectWorkspaceExecution(name, params) {
|
|
199
|
+
const executeRemotely = this.remoteToolNames.has(name);
|
|
200
|
+
const operationsForPath = this.toolOptions?.read?.operationsForPath;
|
|
201
|
+
if (!executeRemotely || name !== "read" || !operationsForPath) {
|
|
202
|
+
return { executeRemotely, readOperations: undefined };
|
|
203
|
+
}
|
|
204
|
+
const readPath = params.path;
|
|
205
|
+
if (typeof readPath !== "string" || !isAbsolute(readPath)) {
|
|
206
|
+
return { executeRemotely, readOperations: undefined };
|
|
207
|
+
}
|
|
208
|
+
const absolutePath = resolveToCwd(readPath, this.operations.cwd);
|
|
209
|
+
const readOperations = operationsForPath(absolutePath);
|
|
210
|
+
return { executeRemotely: !readOperations, readOperations };
|
|
211
|
+
}
|
|
212
|
+
resolveLocalDefinition(request, definition, readOperations) {
|
|
213
|
+
if (request.name === "read" && (readOperations || request.executionOptions?.imageAutoResize !== undefined)) {
|
|
214
|
+
return createReadToolDefinition(this.operations, {
|
|
215
|
+
...this.toolOptions?.read,
|
|
216
|
+
...(request.executionOptions?.imageAutoResize === undefined
|
|
217
|
+
? {}
|
|
218
|
+
: { autoResizeImages: request.executionOptions.imageAutoResize }),
|
|
219
|
+
...(readOperations ? { operationsForPath: () => readOperations } : {}),
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
if (request.name === "bash" &&
|
|
223
|
+
(request.executionOptions?.shellCommandPrefix !== undefined ||
|
|
224
|
+
request.executionOptions?.sessionEnvironment !== undefined)) {
|
|
225
|
+
const sessionEnvironment = request.executionOptions.sessionEnvironment;
|
|
226
|
+
const configuredSpawnHook = this.toolOptions?.bash?.spawnHook;
|
|
227
|
+
return createBashToolDefinition(this.operations, {
|
|
228
|
+
...this.toolOptions?.bash,
|
|
229
|
+
commandPrefix: request.executionOptions.shellCommandPrefix,
|
|
230
|
+
exposeSessionEnvironment: false,
|
|
231
|
+
spawnHook: sessionEnvironment
|
|
232
|
+
? (spawnContext) => {
|
|
233
|
+
const resolved = configuredSpawnHook?.(spawnContext) ?? spawnContext;
|
|
234
|
+
return { ...resolved, env: { ...resolved.env, ...sessionEnvironment } };
|
|
235
|
+
}
|
|
236
|
+
: configuredSpawnHook,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
return definition;
|
|
240
|
+
}
|
|
241
|
+
startRemoteExecution(request) {
|
|
242
|
+
if (!this.operations.executeWorkspaceTool) {
|
|
243
|
+
throw new Error(`Remote workspace executor is unavailable: ${request.name}`);
|
|
244
|
+
}
|
|
245
|
+
return Promise.resolve().then(async () => (await this.operations.executeWorkspaceTool(request.name, {
|
|
246
|
+
toolCallId: request.toolCallId,
|
|
247
|
+
arguments: request.params,
|
|
248
|
+
signal: request.signal,
|
|
249
|
+
onUpdate: request.onUpdate,
|
|
250
|
+
executionOptions: request.executionOptions ?? this.remoteExecutionOptions,
|
|
251
|
+
})));
|
|
252
|
+
}
|
|
253
|
+
startLocalExecution(request, definition) {
|
|
254
|
+
return Promise.resolve().then(() => definition.execute(request.toolCallId, request.params, request.signal, request.onUpdate, request.context));
|
|
255
|
+
}
|
|
256
|
+
trackExecution(execution) {
|
|
257
|
+
this.activeInvocations.add(execution);
|
|
258
|
+
void execution.then(() => this.activeInvocations.delete(execution), () => this.activeInvocations.delete(execution));
|
|
259
|
+
return execution;
|
|
260
|
+
}
|
|
261
|
+
registerAdditionalDefinitions(definitions) {
|
|
262
|
+
for (const definition of definitions) {
|
|
263
|
+
if (this.definitions.has(definition.name))
|
|
264
|
+
throw new Error(`Duplicate hosted tool: ${definition.name}`);
|
|
265
|
+
this.register(definition.name, definition);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
register(name, definition) {
|
|
269
|
+
const canonicalDefinition = {
|
|
270
|
+
...definition,
|
|
271
|
+
parameters: cloneObjectGraph(definition.parameters),
|
|
272
|
+
};
|
|
273
|
+
freezeObjectGraph(canonicalDefinition);
|
|
274
|
+
const execute = (toolCallId, params, signal, onUpdate, context) => this.runDefinition(name, toolCallId, params, signal, onUpdate, context, undefined);
|
|
275
|
+
const execution = this.operations.resolveWorkspaceToolExecution?.(name, canonicalDefinition.parameters);
|
|
276
|
+
if (execution === "unavailable")
|
|
277
|
+
return;
|
|
278
|
+
if (execution === "remote")
|
|
279
|
+
this.remoteToolNames.add(name);
|
|
280
|
+
const hostedDefinition = Object.freeze({
|
|
281
|
+
...canonicalDefinition,
|
|
282
|
+
execute,
|
|
283
|
+
});
|
|
284
|
+
this.rawDefinitions.set(name, canonicalDefinition);
|
|
285
|
+
this.definitions.set(name, hostedDefinition);
|
|
286
|
+
this.tools.set(name, wrapToolDefinition(canonicalDefinition));
|
|
287
|
+
}
|
|
288
|
+
async runDefinition(name, toolCallId, params, signal, onUpdate, context, executionOptions) {
|
|
289
|
+
if (this.disposed)
|
|
290
|
+
throw new Error("Workspace tool host is disposed");
|
|
291
|
+
const definition = this.requireRawDefinition(name);
|
|
292
|
+
const combinedSignal = signal
|
|
293
|
+
? AbortSignal.any([signal, this.disposeController.signal])
|
|
294
|
+
: this.disposeController.signal;
|
|
295
|
+
if (combinedSignal.aborted)
|
|
296
|
+
throw new Error("Operation aborted");
|
|
297
|
+
const selection = this.selectWorkspaceExecution(name, params);
|
|
298
|
+
const resolvedExecutionOptions = executionOptions ?? this.remoteExecutionOptions;
|
|
299
|
+
const request = {
|
|
300
|
+
name,
|
|
301
|
+
toolCallId,
|
|
302
|
+
params,
|
|
303
|
+
signal: combinedSignal,
|
|
304
|
+
onUpdate,
|
|
305
|
+
context,
|
|
306
|
+
executionOptions: name === "bash" && context && this.toolOptions?.bash?.exposeSessionEnvironment !== false
|
|
307
|
+
? { ...resolvedExecutionOptions, sessionEnvironment: getBashSessionEnvironment(context) }
|
|
308
|
+
: executionOptions,
|
|
309
|
+
};
|
|
310
|
+
const execution = selection.executeRemotely
|
|
311
|
+
? this.startRemoteExecution(request)
|
|
312
|
+
: this.startLocalExecution(request, this.resolveLocalDefinition(request, definition, selection.readOperations));
|
|
313
|
+
return await this.trackExecution(execution);
|
|
314
|
+
}
|
|
315
|
+
async disposeHost() {
|
|
316
|
+
this.detachCatalogListener();
|
|
317
|
+
this.disposeController.abort();
|
|
318
|
+
let timer;
|
|
319
|
+
try {
|
|
320
|
+
await Promise.race([
|
|
321
|
+
Promise.allSettled([...this.activeInvocations]),
|
|
322
|
+
new Promise((resolve) => {
|
|
323
|
+
timer = setTimeout(resolve, this.disposeTimeoutMs);
|
|
324
|
+
timer.unref?.();
|
|
325
|
+
}),
|
|
326
|
+
]);
|
|
327
|
+
}
|
|
328
|
+
finally {
|
|
329
|
+
if (timer)
|
|
330
|
+
clearTimeout(timer);
|
|
331
|
+
}
|
|
332
|
+
if (this.ownsOperations)
|
|
333
|
+
await this.operations.dispose?.();
|
|
334
|
+
}
|
|
335
|
+
requireRawDefinition(name) {
|
|
336
|
+
const definition = this.rawDefinitions.get(name);
|
|
337
|
+
if (!definition)
|
|
338
|
+
throw new Error(`Unknown or non-workspace tool: ${name}`);
|
|
339
|
+
return definition;
|
|
340
|
+
}
|
|
341
|
+
requireTool(name) {
|
|
342
|
+
const tool = this.tools.get(name);
|
|
343
|
+
if (!tool)
|
|
344
|
+
throw new Error(`Unknown or non-workspace tool: ${name}`);
|
|
345
|
+
return tool;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=workspace-tool-host.js.map
|