@greppleai/grip 0.1.5 → 0.1.7
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 +35 -0
- package/README.md +1 -1
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/embedded-assets.d.ts.map +1 -1
- package/dist/bun/embedded-assets.js.map +1 -1
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.js.map +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +38 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +289 -154
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts +4 -0
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +3 -10
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +19 -23
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +9 -2
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/compression-detection-ledger.d.ts.map +1 -1
- package/dist/core/compaction/compression-detection-ledger.js.map +1 -1
- package/dist/core/compaction/compression-detector.d.ts +1 -0
- package/dist/core/compaction/compression-detector.d.ts.map +1 -1
- package/dist/core/compaction/compression-detector.js +10 -21
- package/dist/core/compaction/compression-detector.js.map +1 -1
- package/dist/core/compaction/compression-economics.d.ts.map +1 -1
- package/dist/core/compaction/compression-economics.js.map +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +40 -30
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +21 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +15 -16
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/grip-agent.d.ts.map +1 -1
- package/dist/core/grip-agent.js +7 -21
- package/dist/core/grip-agent.js.map +1 -1
- package/dist/core/grip-manifest.d.ts.map +1 -1
- package/dist/core/grip-manifest.js.map +1 -1
- package/dist/core/hooks/aggregate.d.ts.map +1 -1
- package/dist/core/hooks/aggregate.js.map +1 -1
- package/dist/core/hooks/config.d.ts.map +1 -1
- package/dist/core/hooks/config.js.map +1 -1
- package/dist/core/hooks/executor.d.ts.map +1 -1
- package/dist/core/hooks/executor.js.map +1 -1
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/index.js.map +1 -1
- package/dist/core/hooks/matcher.d.ts.map +1 -1
- package/dist/core/hooks/matcher.js.map +1 -1
- package/dist/core/hooks/trust-store.d.ts.map +1 -1
- package/dist/core/hooks/trust-store.js +0 -3
- package/dist/core/hooks/trust-store.js.map +1 -1
- package/dist/core/hooks/types.d.ts.map +1 -1
- package/dist/core/hooks/types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/instruction-resource-loader.d.ts +1 -0
- package/dist/core/instruction-resource-loader.d.ts.map +1 -1
- package/dist/core/instruction-resource-loader.js +2 -4
- package/dist/core/instruction-resource-loader.js.map +1 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +0 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/lsp/abort.d.ts.map +1 -1
- package/dist/core/lsp/abort.js.map +1 -1
- package/dist/core/lsp/client.d.ts.map +1 -1
- package/dist/core/lsp/client.js +8 -22
- package/dist/core/lsp/client.js.map +1 -1
- package/dist/core/lsp/config-loader.d.ts.map +1 -1
- package/dist/core/lsp/config-loader.js.map +1 -1
- package/dist/core/lsp/config.d.ts.map +1 -1
- package/dist/core/lsp/config.js.map +1 -1
- package/dist/core/lsp/diagnostics.d.ts.map +1 -1
- package/dist/core/lsp/diagnostics.js.map +1 -1
- package/dist/core/lsp/file-sync.d.ts.map +1 -1
- package/dist/core/lsp/file-sync.js +7 -9
- package/dist/core/lsp/file-sync.js.map +1 -1
- package/dist/core/lsp/integration.d.ts.map +1 -1
- package/dist/core/lsp/integration.js.map +1 -1
- package/dist/core/lsp/language-map.d.ts.map +1 -1
- package/dist/core/lsp/language-map.js +2 -7
- package/dist/core/lsp/language-map.js.map +1 -1
- package/dist/core/lsp/manager.d.ts.map +1 -1
- package/dist/core/lsp/manager.js +18 -29
- package/dist/core/lsp/manager.js.map +1 -1
- package/dist/core/lsp/navigation.d.ts.map +1 -1
- package/dist/core/lsp/navigation.js.map +1 -1
- package/dist/core/lsp/portable-path.d.ts.map +1 -1
- package/dist/core/lsp/portable-path.js.map +1 -1
- package/dist/core/lsp/refactor.d.ts.map +1 -1
- package/dist/core/lsp/refactor.js.map +1 -1
- package/dist/core/lsp/transport.d.ts.map +1 -1
- package/dist/core/lsp/transport.js.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +30 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +5 -7
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +0 -6
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/contract.js +4 -2
- package/dist/core/remote-workspace-protocol/contract.js.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-client.js +1 -5
- package/dist/core/remote-workspace-protocol/guest-shared-client.js.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js +5 -10
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.js +2 -9
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.js.map +1 -1
- package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/lima-owner-directory.js.map +1 -1
- package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/lima-owner-lock.js.map +1 -1
- package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/session.js +27 -65
- package/dist/core/remote-workspace-protocol/session.js.map +1 -1
- package/dist/core/remote-workspace-protocol/shared-transport.d.ts.map +1 -1
- package/dist/core/remote-workspace-protocol/shared-transport.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +0 -48
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/rules.d.ts.map +1 -1
- package/dist/core/rules.js.map +1 -1
- package/dist/core/sandbox/command.d.ts.map +1 -1
- package/dist/core/sandbox/command.js.map +1 -1
- package/dist/core/sandbox/config.d.ts.map +1 -1
- package/dist/core/sandbox/config.js.map +1 -1
- package/dist/core/sandbox/lima-guest-binary.d.ts.map +1 -1
- package/dist/core/sandbox/lima-guest-binary.js.map +1 -1
- package/dist/core/sandbox/lima.d.ts +2 -0
- package/dist/core/sandbox/lima.d.ts.map +1 -1
- package/dist/core/sandbox/lima.js +3 -9
- package/dist/core/sandbox/lima.js.map +1 -1
- package/dist/core/sandbox/shared-lima-roots.d.ts.map +1 -1
- package/dist/core/sandbox/shared-lima-roots.js.map +1 -1
- package/dist/core/sandbox/update-shared-guest-binary.d.ts.map +1 -1
- package/dist/core/sandbox/update-shared-guest-binary.js.map +1 -1
- package/dist/core/session/constants.d.ts.map +1 -1
- package/dist/core/session/context-metadata.d.ts.map +1 -1
- package/dist/core/session/context-metadata.js.map +1 -1
- package/dist/core/session/context.d.ts.map +1 -1
- package/dist/core/session/context.js.map +1 -1
- package/dist/core/session/ids.d.ts.map +1 -1
- package/dist/core/session/ids.js.map +1 -1
- package/dist/core/session/in-memory-session-manager.d.ts.map +1 -1
- package/dist/core/session/in-memory-session-manager.js +0 -1
- package/dist/core/session/in-memory-session-manager.js.map +1 -1
- package/dist/core/session/in-memory-session.d.ts.map +1 -1
- package/dist/core/session/in-memory-session.js.map +1 -1
- package/dist/core/session/jsonl-errors.d.ts.map +1 -1
- package/dist/core/session/jsonl-errors.js +0 -11
- package/dist/core/session/jsonl-errors.js.map +1 -1
- package/dist/core/session/jsonl-helpers.d.ts.map +1 -1
- package/dist/core/session/jsonl-helpers.js.map +1 -1
- package/dist/core/session/local-session-manager.d.ts.map +1 -1
- package/dist/core/session/local-session-manager.js +4 -6
- package/dist/core/session/local-session-manager.js.map +1 -1
- package/dist/core/session/local-session.d.ts.map +1 -1
- package/dist/core/session/local-session.js.map +1 -1
- package/dist/core/session/migrations.d.ts.map +1 -1
- package/dist/core/session/migrations.js.map +1 -1
- package/dist/core/session/remote-session-client.d.ts.map +1 -1
- package/dist/core/session/remote-session-client.js +0 -6
- package/dist/core/session/remote-session-client.js.map +1 -1
- package/dist/core/session/remote-session-manager.d.ts.map +1 -1
- package/dist/core/session/remote-session-manager.js +0 -3
- package/dist/core/session/remote-session-manager.js.map +1 -1
- package/dist/core/session/remote-session.d.ts.map +1 -1
- package/dist/core/session/remote-session.js +0 -1
- package/dist/core/session/remote-session.js.map +1 -1
- package/dist/core/session/session-manager.d.ts.map +1 -1
- package/dist/core/session/session.d.ts.map +1 -1
- package/dist/core/session/session.js +1 -5
- package/dist/core/session/session.js.map +1 -1
- package/dist/core/session/stores/in-memory-session-store.d.ts.map +1 -1
- package/dist/core/session/stores/in-memory-session-store.js +7 -6
- package/dist/core/session/stores/in-memory-session-store.js.map +1 -1
- package/dist/core/session/stores/jsonl-session-store.d.ts.map +1 -1
- package/dist/core/session/stores/jsonl-session-store.js +6 -14
- package/dist/core/session/stores/jsonl-session-store.js.map +1 -1
- package/dist/core/session/stores/remote-session-store.d.ts.map +1 -1
- package/dist/core/session/stores/remote-session-store.js +3 -8
- package/dist/core/session/stores/remote-session-store.js.map +1 -1
- package/dist/core/session/stores/session-store.d.ts.map +1 -1
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/session/usage-ledger.d.ts.map +1 -1
- package/dist/core/session/usage-ledger.js.map +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js +0 -1
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +9 -17
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +3 -2
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/system-prompt.d.ts +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetry.d.ts.map +1 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +34 -28
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/compress-context.d.ts.map +1 -1
- package/dist/core/tools/compress-context.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/hash-store.d.ts.map +1 -1
- package/dist/core/tools/hash-store.js.map +1 -1
- package/dist/core/tools/hashline/apply.d.ts.map +1 -1
- package/dist/core/tools/hashline/apply.js.map +1 -1
- package/dist/core/tools/hashline/hash.d.ts.map +1 -1
- package/dist/core/tools/hashline/hash.js.map +1 -1
- package/dist/core/tools/hashline/parse.d.ts.map +1 -1
- package/dist/core/tools/hashline/parse.js.map +1 -1
- package/dist/core/tools/hashline/resolve.d.ts.map +1 -1
- package/dist/core/tools/hashline/resolve.js.map +1 -1
- package/dist/core/tools/hashline-utils.d.ts.map +1 -1
- package/dist/core/tools/hashline-utils.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/operations.d.ts +11 -0
- package/dist/core/tools/operations.d.ts.map +1 -1
- package/dist/core/tools/operations.js +54 -28
- package/dist/core/tools/operations.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +12 -18
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/replace-diff.d.ts.map +1 -1
- package/dist/core/tools/replace-diff.js.map +1 -1
- package/dist/core/tools/replace-normalize.d.ts.map +1 -1
- package/dist/core/tools/replace-normalize.js.map +1 -1
- package/dist/core/tools/replace-render.d.ts +1 -1
- package/dist/core/tools/replace-render.d.ts.map +1 -1
- package/dist/core/tools/replace-render.js.map +1 -1
- package/dist/core/tools/runtime.d.ts.map +1 -1
- package/dist/core/tools/runtime.js.map +1 -1
- package/dist/core/tools/session-history.d.ts.map +1 -1
- package/dist/core/tools/session-history.js.map +1 -1
- package/dist/core/tools/subagent-agents.d.ts.map +1 -1
- package/dist/core/tools/subagent-agents.js.map +1 -1
- package/dist/core/tools/subagent.d.ts.map +1 -1
- package/dist/core/tools/subagent.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/tools/websearch.d.ts.map +1 -1
- package/dist/core/tools/websearch.js.map +1 -1
- package/dist/core/tools/workspace-tool-host.d.ts +1 -0
- package/dist/core/tools/workspace-tool-host.d.ts.map +1 -1
- package/dist/core/tools/workspace-tool-host.js +36 -22
- package/dist/core/tools/workspace-tool-host.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +0 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/workspace-identity.d.ts.map +1 -1
- package/dist/daemon/activity-budget.d.ts.map +1 -1
- package/dist/daemon/activity-budget.js +2 -3
- package/dist/daemon/activity-budget.js.map +1 -1
- package/dist/daemon/command.d.ts.map +1 -1
- package/dist/daemon/command.js.map +1 -1
- package/dist/daemon/config.d.ts +2 -0
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +4 -0
- package/dist/daemon/config.js.map +1 -1
- package/dist/daemon/help.d.ts.map +1 -1
- package/dist/daemon/help.js +4 -3
- package/dist/daemon/help.js.map +1 -1
- package/dist/daemon/lsp-config.d.ts.map +1 -1
- package/dist/daemon/lsp-config.js.map +1 -1
- package/dist/daemon/outbound-budget.d.ts.map +1 -1
- package/dist/daemon/outbound-budget.js +2 -4
- package/dist/daemon/outbound-budget.js.map +1 -1
- package/dist/daemon/security.d.ts.map +1 -1
- package/dist/daemon/security.js.map +1 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/shared-connection.d.ts.map +1 -1
- package/dist/daemon/shared-connection.js +10 -15
- package/dist/daemon/shared-connection.js.map +1 -1
- package/dist/daemon/shared-revision.d.ts.map +1 -1
- package/dist/daemon/shared-revision.js +2 -1
- package/dist/daemon/shared-revision.js.map +1 -1
- package/dist/daemon/shared-roots.d.ts.map +1 -1
- package/dist/daemon/shared-roots.js +0 -1
- package/dist/daemon/shared-roots.js.map +1 -1
- package/dist/daemon/workspace-runtime.d.ts +2 -0
- package/dist/daemon/workspace-runtime.d.ts.map +1 -1
- package/dist/daemon/workspace-runtime.js +43 -15
- package/dist/daemon/workspace-runtime.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +8 -3
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +3 -10
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +4 -9
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +0 -3
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -3
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +6 -16
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +0 -5
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +1 -8
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -6
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +0 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -7
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +2 -8
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -9
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +8 -4
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/hook-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/hook-execution.js +2 -5
- package/dist/modes/interactive/components/hook-execution.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +3 -9
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/message-card.d.ts.map +1 -1
- package/dist/modes/interactive/components/message-card.js +0 -1
- package/dist/modes/interactive/components/message-card.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +13 -28
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +3 -12
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +9 -13
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +33 -58
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +0 -4
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +0 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +0 -2
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +0 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +9 -24
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +18 -34
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +3 -6
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +0 -4
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +13 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +162 -136
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +0 -7
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/jsonl.d.ts.map +1 -1
- package/dist/modes/rpc/jsonl.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +10 -11
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +33 -2
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/binary-self-update.d.ts +25 -0
- package/dist/utils/binary-self-update.d.ts.map +1 -0
- package/dist/utils/binary-self-update.js +159 -0
- package/dist/utils/binary-self-update.js.map +1 -0
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/deprecation.d.ts.map +1 -1
- package/dist/utils/deprecation.js.map +1 -1
- package/dist/utils/directory-completions.d.ts +8 -0
- package/dist/utils/directory-completions.d.ts.map +1 -1
- package/dist/utils/directory-completions.js +42 -1
- package/dist/utils/directory-completions.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/grip-user-agent.d.ts.map +1 -1
- package/dist/utils/grip-user-agent.js.map +1 -1
- package/dist/utils/html.d.ts.map +1 -1
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-process.d.ts.map +1 -1
- package/dist/utils/image-process.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/image-resize-worker.d.ts.map +1 -1
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js +10 -5
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +1 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/docs/extensions.md +31 -1
- package/docs/sandbox.md +6 -0
- package/docs/sessions.md +1 -1
- package/docs/skills.md +4 -4
- package/docs/usage.md +2 -1
- package/examples/extensions/custom-provider-anthropic/package.json +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +602 -834
- package/package.json +20 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-tool-host.js","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"]}
|
|
1
|
+
{"version":3,"file":"workspace-tool-host.js","sourceRoot":"","sources":["../../../src/core/tools/workspace-tool-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAGN,wBAAwB,EACxB,yBAAyB,GACzB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,wBAAwB,EAAiD,MAAM,WAAW,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAiD,MAAM,WAAW,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAiD,MAAM,WAAW,CAAC;AACpG,OAAO,EAAE,sBAAsB,EAA6C,MAAM,SAAS,CAAC;AAC5F,OAAO,EACN,oBAAoB,EACpB,mBAAmB,GAGnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACN,wBAAwB,GAIxB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAmD,MAAM,YAAY,CAAC;AAExG,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAU,CAAC,CAAC;AACpH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AAyEtE,SAAS,gBAAgB,CAAI,KAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,EAAkB;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,QAAQ;QAAE,OAAO,QAAa,CAAC;IACnC,MAAM,KAAK,GAAW,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU;YAAE,SAAS;QAC1B,IAAI,OAAO,IAAI,UAAU;YAAE,UAAU,CAAC,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvF,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAU,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,IAAI,GAAG,IAAI,GAAG,EAAU;IAClE,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IAC5G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/D,IAAI,UAAU,IAAI,OAAO,IAAI,UAAU;YAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAyB;IACxD,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,4BAA4B,CAAC,WAA6C;IAClF,OAAO,MAAM,CAAC,MAAM,CAAC;QACpB,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,gBAAgB,KAAK,SAAS;YACpD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1D,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;KACjH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IAiB7B,YAAY,OAAiC;QAd5B,gBAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;QACnD,mBAAc,GAAG,IAAI,GAAG,EAA6B,CAAC;QACtD,oBAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,UAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;QAMxC,sBAAiB,GAAG,IAAI,eAAe,EAAE,CAAC;QAC1C,sBAAiB,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEzD,aAAQ,GAAG,KAAK,CAAC;QAGxB,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,GAAG,kCAAkC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/G,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,4BAA4B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1E,IAAI,CAAC,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACzE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,oBAAoB,CAAC,CAAC;QACxE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,gBAAgB;YACjD,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,6BAA6B,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC3E,CAAC,CAAC,SAAS,CAAC;IACd,CAAC;IAED,cAAc;QACb,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,aAAa,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,UAAU;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YACnE,IAAI;YACJ,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC;YAClD,aAAa,EAAE,UAAU,CAAC,aAAa;SACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,YAAqB;QACnD,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,UAAmC;QAC9D,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAC5E,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,yBAAyB,CAAC,IAAY,EAAE,cAAuB;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,CAAC;YACJ,qBAAqB,CAAC,IAAI,EAAE;gBAC3B,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,cAAyC;aACpD,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY,EAAE,UAAmC;QACtE,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE;YAC1C,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,UAAU,CAAC,UAAU;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,UAAU,CAAC,SAAoC;SAC1D,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,aAAa,CAC9B,IAAI,EACJ,UAAU,CAAC,UAAU,EACrB,MAAM,EACN,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,QAAQ,EACnB,SAAwC,EACxC,UAAU,CAAC,gBAAgB,CAC3B,CAAC;IACH,CAAC;IAED,qBAAqB;QACpB,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;IACrC,CAAC;IAED,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB;QAC5C,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE;gBACjC,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;YACzD,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAEO,uBAAuB,CAAC,YAA4C;QAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;QAClH,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;QAClH,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;QAClH,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;QACxF,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;QAClH,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;QAClH,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3G,CAAC;IACO,wBAAwB,CAAC,IAAY,EAAE,MAAe;QAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,iBAAiB,CAAC;QACpE,IAAI,CAAC,eAAe,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;QACvD,CAAC;QACD,MAAM,QAAQ,GAAI,MAA6B,CAAC,IAAI,CAAC;QACrD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;QACvD,CAAC;QACD,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACvD,OAAO,EAAE,eAAe,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,CAAC;IAC7D,CAAC;IAEO,0BAA0B,CACjC,IAAY,EACZ,UAA0B,EAC1B,GAAuB;QAEvB,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,MAAM,SAAS,GAAsE;YACpF,IAAI,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;YACxE,KAAK,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;YAC3E,IAAI,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;YACxE,IAAI,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;YACxE,EAAE,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;SAClE,CAAC;QACF,OAAO,SAAS,CAAC,IAAyB,CAAC,EAAE,EAAE,CAAC;IACjD,CAAC;IAEO,sBAAsB,CAC7B,OAA+C,EAC/C,UAA6C,EAC7C,cAA8C;QAE9C,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;QAC1C,0FAA0F;QAC1F,MAAM,UAAU,GAAG,GAAG;YACrB,CAAC,CAAE,IAAI,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAClD,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CACnC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;aACnE,CAAoB;YACtB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QACnB,IACC,OAAO,CAAC,IAAI,KAAK,MAAM;YACvB,CAAC,GAAG,IAAI,cAAc,IAAI,OAAO,CAAC,gBAAgB,EAAE,eAAe,KAAK,SAAS,CAAC,EACjF,CAAC;YACF,OAAO,wBAAwB,CAAC,UAAU,EAAE;gBAC3C,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI;gBACzB,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,eAAe,KAAK,SAAS;oBAC1D,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC;gBAClE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtE,CAAiD,CAAC;QACpD,CAAC;QACD,IACC,OAAO,CAAC,IAAI,KAAK,MAAM;YACvB,CAAC,GAAG;gBACH,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,KAAK,SAAS;gBAC1D,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,KAAK,SAAS,CAAC,EAC3D,CAAC;YACF,MAAM,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;YACxE,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC;YAC9D,OAAO,wBAAwB,CAAC,UAAU,EAAE;gBAC3C,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI;gBACzB,aAAa,EAAE,OAAO,CAAC,gBAAgB,EAAE,kBAAkB;gBAC3D,wBAAwB,EAAE,KAAK;gBAC/B,SAAS,EAAE,kBAAkB;oBAC5B,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE;wBACjB,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC;wBACrE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,kBAAkB,EAAE,EAAE,CAAC;oBACzE,CAAC;oBACF,CAAC,CAAC,mBAAmB;aACtB,CAAiD,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,UAAU,CAGnF,CAAC;IACH,CAAC;IAEO,oBAAoB,CAC3B,OAA+C;QAE/C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAC5B,KAAK,IAAI,EAAE,CACV,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE;YAC1D,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,MAAM;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAwD;YAC1E,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,sBAAsB;SACzE,CAAC,CAA8B,CACjC,CAAC;IACH,CAAC;IAEO,mBAAmB,CAC1B,OAA+C,EAC/C,UAA6C;QAE7C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAClC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CACzG,CAAC;IACH,CAAC;IAEO,cAAc,CAAW,SAA6C;QAC7E,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,KAAK,SAAS,CAAC,IAAI,CAClB,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,EAC9C,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAC9C,CAAC;QACF,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,6BAA6B,CAAC,WAAyC;QAC9E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YACxG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IAEO,QAAQ,CACf,IAAY,EACZ,UAAqD;QAErD,MAAM,mBAAmB,GAA8C;YACtE,GAAG,UAAU;YACb,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC;SACnD,CAAC;QACF,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QACvC,MAAM,OAAO,GAAyD,CACrE,UAAU,EACV,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACN,EAAE,CAAC,IAAI,CAAC,aAAa,CAAoB,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC3G,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACxG,IAAI,SAAS,KAAK,aAAa;YAAE,OAAO;QACxC,IAAI,SAAS,KAAK,QAAQ;YAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,gBAAgB,GAA8C,MAAM,CAAC,MAAM,CAAC;YACjF,GAAG,mBAAmB;YACtB,OAAO;SACP,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAsD,CAAC,CAAC;QACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,aAAa,CAC1B,IAAY,EACZ,UAAkB,EAClB,MAAuB,EACvB,MAA+B,EAC/B,QAAuD,EACvD,OAAyB,EACzB,gBAA2D;QAE3D,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAsC,CAAC;QACxF,MAAM,cAAc,GAAG,MAAM;YAC5B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QACjC,IAAI,cAAc,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,wBAAwB,GAAG,gBAAgB,IAAI,IAAI,CAAC,sBAAsB,CAAC;QACjF,MAAM,OAAO,GAA2C;YACvD,IAAI;YACJ,UAAU;YACV,MAAM;YACN,MAAM,EAAE,cAAc;YACtB,QAAQ;YACR,OAAO;YACP,gBAAgB,EACf,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,wBAAwB,KAAK,KAAK;gBACvF,CAAC,CAAC,EAAE,GAAG,wBAAwB,EAAE,kBAAkB,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAAE;gBACzF,CAAC,CAAC,gBAAgB;SACpB,CAAC;QACF,MAAM,SAAS,GAAG,SAAS,CAAC,eAAe;YAC1C,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YACpC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CACxB,OAAO,EACP,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAC1E,CAAC;QACJ,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,WAAW;QACxB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,KAAiC,CAAC;QACtC,IAAI,CAAC;YACJ,MAAM,OAAO,CAAC,IAAI,CAAC;gBAClB,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC/C,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC7B,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACnD,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBACjB,CAAC,CAAC;aACF,CAAC,CAAC;QACJ,CAAC;gBAAS,CAAC;YACV,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;IAC5D,CAAC;IAEO,oBAAoB,CAAC,IAAY;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;QAC3E,OAAO,UAAU,CAAC;IACnB,CAAC;IAEO,WAAW,CAAC,IAAY;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACb,CAAC;CACD","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 {\n\tborrowToolOperations,\n\tLocalToolOperations,\n\ttype ToolOperations,\n\ttype WorkspaceToolExecutionOptions,\n} 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 createScopedToolDefinition(\n\t\tname: string,\n\t\toperations: ToolOperations,\n\t\tcwd: string | undefined,\n\t): WorkspaceToolDefinition | undefined {\n\t\tif (!cwd) return undefined;\n\t\tconst factories: Partial<Record<WorkspaceToolName, () => WorkspaceToolDefinition>> = {\n\t\t\tedit: () => createEditToolDefinition(operations, this.toolOptions?.edit),\n\t\t\twrite: () => createWriteToolDefinition(operations, this.toolOptions?.write),\n\t\t\tgrep: () => createGrepToolDefinition(operations, this.toolOptions?.grep),\n\t\t\tfind: () => createFindToolDefinition(operations, this.toolOptions?.find),\n\t\t\tls: () => createLsToolDefinition(operations, this.toolOptions?.ls),\n\t\t};\n\t\treturn factories[name as WorkspaceToolName]?.();\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\tconst cwd = request.executionOptions?.cwd;\n\t\t// Bind only this invocation's cwd; never mutate the shared daemon host or its mount root.\n\t\tconst operations = cwd\n\t\t\t? (new Proxy(borrowToolOperations(this.operations), {\n\t\t\t\t\tget: (target, property, receiver) =>\n\t\t\t\t\t\tproperty === \"cwd\" ? cwd : Reflect.get(target, property, receiver),\n\t\t\t\t}) as ToolOperations)\n\t\t\t: this.operations;\n\t\tif (\n\t\t\trequest.name === \"read\" &&\n\t\t\t(cwd || readOperations || request.executionOptions?.imageAutoResize !== undefined)\n\t\t) {\n\t\t\treturn createReadToolDefinition(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(cwd ||\n\t\t\t\trequest.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(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 (this.createScopedToolDefinition(request.name, operations, cwd) ?? definition) as ToolDefinition<\n\t\t\tTParams,\n\t\t\tTDetails\n\t\t>;\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../../src/core/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,4BAA4B,CAAC;AAG7E,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,wBAAwB,CAAC;AAEtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAatD,QAAA,MAAM,WAAW;;;EAGf,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAExD,MAAM,WAAW,gBAAgB;CAAG;AA2JpC,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,WAAW,EAAE,SAAS,CAAC,CAAC;AAEhF,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,cAAc,EAC1B,QAAQ,CAAC,EAAE,gBAAgB,GACzB,mBAAmB,CAiFrB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC,OAAO,WAAW,CAAC,CAErH","sourcesContent":["import type { AgentTool, AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport { Container, Text } from \"@greppleai/grip-tui\";\nimport { dirname } from \"path\";\nimport { type Static, Type } from \"typebox\";\nimport { getLanguageFromPath, highlightCode, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../extensions/types.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\nimport { resolveToCwd } from \"./path-utils.ts\";\nimport {\n\tformatBackendIcon,\n\tformatHiddenLinesHint,\n\tinvalidArgText,\n\tnormalizeDisplayText,\n\treplaceTabs,\n\tshortenPath,\n\tstr,\n} from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst writeSchema = Type.Object({\n\tpath: Type.String({ description: \"Path to the file to write (relative or absolute)\" }),\n\tcontent: Type.String({ description: \"Content to write to the file\" }),\n});\n\nexport type WriteToolInput = Static<typeof writeSchema>;\n\nexport interface WriteToolOptions {}\n\ninterface WriteRenderArgs {\n\tpath?: string;\n\tfile_path?: string;\n\tcontent?: string;\n}\n\ninterface WriteRenderResult extends AgentToolResult<undefined> {\n\tisError?: boolean;\n}\n\ntype WriteHighlightCache = {\n\trawPath: string | null;\n\tlang: string;\n\trawContent: string;\n\tnormalizedLines: string[];\n\thighlightedLines: string[];\n};\n\nclass WriteCallRenderComponent extends Text {\n\tcache?: WriteHighlightCache;\n\n\tconstructor() {\n\t\tsuper(\"\", 0, 0);\n\t}\n}\n\nconst WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;\n\nfunction highlightSingleLine(line: string, lang: string): string {\n\tconst highlighted = highlightCode(line, lang);\n\treturn highlighted[0] ?? \"\";\n}\n\nfunction refreshWriteHighlightPrefix(cache: WriteHighlightCache): void {\n\tconst prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);\n\tif (prefixCount === 0) return;\n\tconst prefixSource = cache.normalizedLines.slice(0, prefixCount).join(\"\\n\");\n\tconst prefixHighlighted = highlightCode(prefixSource, cache.lang);\n\tfor (let i = 0; i < prefixCount; i++) {\n\t\tcache.highlightedLines[i] =\n\t\t\tprefixHighlighted[i] ?? highlightSingleLine(cache.normalizedLines[i] ?? \"\", cache.lang);\n\t}\n}\n\nfunction rebuildWriteHighlightCacheFull(rawPath: string | null, fileContent: string): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tconst displayContent = normalizeDisplayText(fileContent);\n\tconst normalized = replaceTabs(displayContent);\n\treturn {\n\t\trawPath,\n\t\tlang,\n\t\trawContent: fileContent,\n\t\tnormalizedLines: normalized.split(\"\\n\"),\n\t\thighlightedLines: highlightCode(normalized, lang),\n\t};\n}\n\nfunction updateWriteHighlightCacheIncremental(\n\tcache: WriteHighlightCache | undefined,\n\trawPath: string | null,\n\tfileContent: string,\n): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tif (!cache) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (cache.lang !== lang || cache.rawPath !== rawPath) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (!fileContent.startsWith(cache.rawContent)) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (fileContent.length === cache.rawContent.length) return cache;\n\n\tconst deltaRaw = fileContent.slice(cache.rawContent.length);\n\tconst deltaDisplay = normalizeDisplayText(deltaRaw);\n\tconst deltaNormalized = replaceTabs(deltaDisplay);\n\tcache.rawContent = fileContent;\n\tif (cache.normalizedLines.length === 0) {\n\t\tcache.normalizedLines.push(\"\");\n\t\tcache.highlightedLines.push(\"\");\n\t}\n\n\tconst segments = deltaNormalized.split(\"\\n\");\n\tconst lastIndex = cache.normalizedLines.length - 1;\n\tcache.normalizedLines[lastIndex] += segments[0];\n\tcache.highlightedLines[lastIndex] = highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);\n\tfor (let i = 1; i < segments.length; i++) {\n\t\tcache.normalizedLines.push(segments[i]);\n\t\tcache.highlightedLines.push(highlightSingleLine(segments[i], cache.lang));\n\t}\n\trefreshWriteHighlightPrefix(cache);\n\treturn cache;\n}\n\nfunction trimTrailingEmptyLines(lines: string[]): string[] {\n\tlet end = lines.length;\n\twhile (end > 0 && lines[end - 1] === \"\") {\n\t\tend--;\n\t}\n\treturn lines.slice(0, end);\n}\n\nfunction formatWriteContentPreview(\n\tfileContent: string | null,\n\trawPath: string | null,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tif (fileContent === null) return `\\n\\n${theme.fg(\"error\", \"[invalid content arg - expected string]\")}`;\n\tif (!fileContent) return \"\";\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tconst renderedLines = lang\n\t\t? (cache?.highlightedLines ?? highlightCode(replaceTabs(normalizeDisplayText(fileContent)), lang))\n\t\t: normalizeDisplayText(fileContent).split(\"\\n\");\n\tconst lines = trimTrailingEmptyLines(renderedLines);\n\tconst maxLines = options.expanded ? lines.length : 10;\n\tconst displayLines = lines.slice(0, maxLines);\n\tconst remaining = lines.length - maxLines;\n\tlet text = `\\n\\n${displayLines.map((line) => (lang ? line : theme.fg(\"toolOutput\", replaceTabs(line)))).join(\"\\n\")}`;\n\tif (remaining > 0) {\n\t\ttext += `\\n\\n${formatHiddenLinesHint(remaining, theme)}`;\n\t}\n\treturn text;\n}\n\nfunction formatWriteCall(\n\targs: WriteRenderArgs | undefined,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tconst rawPath = str(args?.file_path ?? args?.path);\n\tconst fileContent = str(args?.content);\n\tconst path = rawPath !== null ? shortenPath(rawPath) : null;\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"write\"))} ${path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\")}`;\n\ttext += formatWriteContentPreview(fileContent, rawPath, options, theme, cache);\n\n\treturn text;\n}\n\nfunction formatWriteResult(result: WriteRenderResult, theme: Theme): string | undefined {\n\tif (!result.isError) {\n\t\treturn undefined;\n\t}\n\tconst output = result.content\n\t\t.filter((c) => c.type === \"text\")\n\t\t.map((c) => c.text || \"\")\n\t\t.join(\"\\n\");\n\tif (!output) {\n\t\treturn undefined;\n\t}\n\treturn `\\n${theme.fg(\"error\", output)}`;\n}\n\nexport type WriteToolDefinition = ToolDefinition<typeof writeSchema, undefined>;\n\nexport function createWriteToolDefinition(\n\toperations: ToolOperations,\n\t_options?: WriteToolOptions,\n): WriteToolDefinition {\n\tconst ops = operations;\n\tconst cwd = operations.cwd;\n\treturn {\n\t\tname: \"write\",\n\t\tlabel: \"write\",\n\t\tdescription:\n\t\t\t\"Write content to a file. Creates the file if it doesn't exist, overwrites if it does. Automatically creates parent directories.\",\n\t\tpromptSnippet: \"Create or overwrite files\",\n\t\tpromptGuidelines: [\"Use write only for new files or complete rewrites.\"],\n\t\tparameters: writeSchema,\n\t\tasync execute(_toolCallId, { path, content }: WriteToolInput, signal?: AbortSignal, _onUpdate?, _ctx?) {\n\t\t\tconst absolutePath = resolveToCwd(path, cwd);\n\t\t\tconst dir = dirname(absolutePath);\n\t\t\treturn withFileMutationQueue(absolutePath, async () => {\n\t\t\t\tlet aborted = signal?.aborted ?? false;\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t};\n\t\t\t\tconst throwIfAborted = (): void => {\n\t\t\t\t\tif (aborted || signal?.aborted) {\n\t\t\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\ttry {\n\t\t\t\t\tthrowIfAborted();\n\t\t\t\t\t// Create parent directories if needed.\n\t\t\t\t\tawait ops.mkdir(dir, { recursive: true });\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\t// Write the file contents.\n\t\t\t\t\tawait ops.writeFile(absolutePath, content);\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Successfully wrote ${content.length} bytes to ${path}` }],\n\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t};\n\t\t\t\t} finally {\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\trenderCall(args, theme, context) {\n\t\t\tconst renderArgs = args as WriteRenderArgs | undefined;\n\t\t\tconst rawPath = str(renderArgs?.file_path ?? renderArgs?.path);\n\t\t\tconst fileContent = str(renderArgs?.content);\n\t\t\tconst component =\n\t\t\t\t(context.lastComponent as WriteCallRenderComponent | undefined) ?? new WriteCallRenderComponent();\n\t\t\tif (fileContent !== null) {\n\t\t\t\tcomponent.cache = context.argsComplete\n\t\t\t\t\t? rebuildWriteHighlightCacheFull(rawPath, fileContent)\n\t\t\t\t\t: updateWriteHighlightCacheIncremental(component.cache, rawPath, fileContent);\n\t\t\t} else {\n\t\t\t\tcomponent.cache = undefined;\n\t\t\t}\n\t\t\tcomponent.setText(\n\t\t\t\tformatBackendIcon(ops.getBackendInfo?.(), theme) +\n\t\t\t\t\tformatWriteCall(\n\t\t\t\t\t\trenderArgs,\n\t\t\t\t\t\t{ expanded: context.expanded, isPartial: context.isPartial },\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\tcomponent.cache,\n\t\t\t\t\t),\n\t\t\t);\n\t\t\treturn component;\n\t\t},\n\t\trenderResult(result, _options, theme, context) {\n\t\t\tconst output = formatWriteResult({ ...result, isError: context.isError }, theme);\n\t\t\tif (!output) {\n\t\t\t\tconst component = (context.lastComponent as Container | undefined) ?? new Container();\n\t\t\t\tcomponent.clear();\n\t\t\t\treturn component;\n\t\t\t}\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(output);\n\t\t\treturn text;\n\t\t},\n\t};\n}\n\nexport function createWriteTool(operations: ToolOperations, options?: WriteToolOptions): AgentTool<typeof writeSchema> {\n\treturn wrapToolDefinition(createWriteToolDefinition(operations, options));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../../src/core/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,4BAA4B,CAAC;AAG7E,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,wBAAwB,CAAC;AAEtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAatD,QAAA,MAAM,WAAW;;;EAGf,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAExD,MAAM,WAAW,gBAAgB;CAAG;AA2JpC,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,WAAW,EAAE,SAAS,CAAC,CAAC;AAEhF,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,cAAc,EAC1B,QAAQ,CAAC,EAAE,gBAAgB,GACzB,mBAAmB,CAiFrB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC,OAAO,WAAW,CAAC,CAErH"}
|
package/dist/core/tools/write.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/core/tools/write.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool, AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport { Container, Text } from \"@greppleai/grip-tui\";\nimport { dirname } from \"path\";\nimport { type Static, Type } from \"typebox\";\nimport { getLanguageFromPath, highlightCode, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../extensions/types.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\nimport { resolveToCwd } from \"./path-utils.ts\";\nimport {\n\tformatBackendIcon,\n\tformatHiddenLinesHint,\n\tinvalidArgText,\n\tnormalizeDisplayText,\n\treplaceTabs,\n\tshortenPath,\n\tstr,\n} from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst writeSchema = Type.Object({\n\tpath: Type.String({ description: \"Path to the file to write (relative or absolute)\" }),\n\tcontent: Type.String({ description: \"Content to write to the file\" }),\n});\n\nexport type WriteToolInput = Static<typeof writeSchema>;\n\nexport interface WriteToolOptions {}\n\ninterface WriteRenderArgs {\n\tpath?: string;\n\tfile_path?: string;\n\tcontent?: string;\n}\n\ninterface WriteRenderResult extends AgentToolResult<undefined> {\n\tisError?: boolean;\n}\n\ntype WriteHighlightCache = {\n\trawPath: string | null;\n\tlang: string;\n\trawContent: string;\n\tnormalizedLines: string[];\n\thighlightedLines: string[];\n};\n\nclass WriteCallRenderComponent extends Text {\n\tcache?: WriteHighlightCache;\n\n\tconstructor() {\n\t\tsuper(\"\", 0, 0);\n\t}\n}\n\nconst WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;\n\nfunction highlightSingleLine(line: string, lang: string): string {\n\tconst highlighted = highlightCode(line, lang);\n\treturn highlighted[0] ?? \"\";\n}\n\nfunction refreshWriteHighlightPrefix(cache: WriteHighlightCache): void {\n\tconst prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);\n\tif (prefixCount === 0) return;\n\tconst prefixSource = cache.normalizedLines.slice(0, prefixCount).join(\"\\n\");\n\tconst prefixHighlighted = highlightCode(prefixSource, cache.lang);\n\tfor (let i = 0; i < prefixCount; i++) {\n\t\tcache.highlightedLines[i] =\n\t\t\tprefixHighlighted[i] ?? highlightSingleLine(cache.normalizedLines[i] ?? \"\", cache.lang);\n\t}\n}\n\nfunction rebuildWriteHighlightCacheFull(rawPath: string | null, fileContent: string): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tconst displayContent = normalizeDisplayText(fileContent);\n\tconst normalized = replaceTabs(displayContent);\n\treturn {\n\t\trawPath,\n\t\tlang,\n\t\trawContent: fileContent,\n\t\tnormalizedLines: normalized.split(\"\\n\"),\n\t\thighlightedLines: highlightCode(normalized, lang),\n\t};\n}\n\nfunction updateWriteHighlightCacheIncremental(\n\tcache: WriteHighlightCache | undefined,\n\trawPath: string | null,\n\tfileContent: string,\n): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tif (!cache) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (cache.lang !== lang || cache.rawPath !== rawPath) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (!fileContent.startsWith(cache.rawContent)) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (fileContent.length === cache.rawContent.length) return cache;\n\n\tconst deltaRaw = fileContent.slice(cache.rawContent.length);\n\tconst deltaDisplay = normalizeDisplayText(deltaRaw);\n\tconst deltaNormalized = replaceTabs(deltaDisplay);\n\tcache.rawContent = fileContent;\n\tif (cache.normalizedLines.length === 0) {\n\t\tcache.normalizedLines.push(\"\");\n\t\tcache.highlightedLines.push(\"\");\n\t}\n\n\tconst segments = deltaNormalized.split(\"\\n\");\n\tconst lastIndex = cache.normalizedLines.length - 1;\n\tcache.normalizedLines[lastIndex] += segments[0];\n\tcache.highlightedLines[lastIndex] = highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);\n\tfor (let i = 1; i < segments.length; i++) {\n\t\tcache.normalizedLines.push(segments[i]);\n\t\tcache.highlightedLines.push(highlightSingleLine(segments[i], cache.lang));\n\t}\n\trefreshWriteHighlightPrefix(cache);\n\treturn cache;\n}\n\nfunction trimTrailingEmptyLines(lines: string[]): string[] {\n\tlet end = lines.length;\n\twhile (end > 0 && lines[end - 1] === \"\") {\n\t\tend--;\n\t}\n\treturn lines.slice(0, end);\n}\n\nfunction formatWriteContentPreview(\n\tfileContent: string | null,\n\trawPath: string | null,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tif (fileContent === null) return `\\n\\n${theme.fg(\"error\", \"[invalid content arg - expected string]\")}`;\n\tif (!fileContent) return \"\";\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tconst renderedLines = lang\n\t\t? (cache?.highlightedLines ?? highlightCode(replaceTabs(normalizeDisplayText(fileContent)), lang))\n\t\t: normalizeDisplayText(fileContent).split(\"\\n\");\n\tconst lines = trimTrailingEmptyLines(renderedLines);\n\tconst maxLines = options.expanded ? lines.length : 10;\n\tconst displayLines = lines.slice(0, maxLines);\n\tconst remaining = lines.length - maxLines;\n\tlet text = `\\n\\n${displayLines.map((line) => (lang ? line : theme.fg(\"toolOutput\", replaceTabs(line)))).join(\"\\n\")}`;\n\tif (remaining > 0) {\n\t\ttext += `\\n\\n${formatHiddenLinesHint(remaining, theme)}`;\n\t}\n\treturn text;\n}\n\nfunction formatWriteCall(\n\targs: WriteRenderArgs | undefined,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tconst rawPath = str(args?.file_path ?? args?.path);\n\tconst fileContent = str(args?.content);\n\tconst path = rawPath !== null ? shortenPath(rawPath) : null;\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"write\"))} ${path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\")}`;\n\ttext += formatWriteContentPreview(fileContent, rawPath, options, theme, cache);\n\n\treturn text;\n}\n\nfunction formatWriteResult(result: WriteRenderResult, theme: Theme): string | undefined {\n\tif (!result.isError) {\n\t\treturn undefined;\n\t}\n\tconst output = result.content\n\t\t.filter((c) => c.type === \"text\")\n\t\t.map((c) => c.text || \"\")\n\t\t.join(\"\\n\");\n\tif (!output) {\n\t\treturn undefined;\n\t}\n\treturn `\\n${theme.fg(\"error\", output)}`;\n}\n\nexport type WriteToolDefinition = ToolDefinition<typeof writeSchema, undefined>;\n\nexport function createWriteToolDefinition(\n\toperations: ToolOperations,\n\t_options?: WriteToolOptions,\n): WriteToolDefinition {\n\tconst ops = operations;\n\tconst cwd = operations.cwd;\n\treturn {\n\t\tname: \"write\",\n\t\tlabel: \"write\",\n\t\tdescription:\n\t\t\t\"Write content to a file. Creates the file if it doesn't exist, overwrites if it does. Automatically creates parent directories.\",\n\t\tpromptSnippet: \"Create or overwrite files\",\n\t\tpromptGuidelines: [\"Use write only for new files or complete rewrites.\"],\n\t\tparameters: writeSchema,\n\t\tasync execute(_toolCallId, { path, content }: WriteToolInput, signal?: AbortSignal, _onUpdate?, _ctx?) {\n\t\t\tconst absolutePath = resolveToCwd(path, cwd);\n\t\t\tconst dir = dirname(absolutePath);\n\t\t\treturn withFileMutationQueue(absolutePath, async () => {\n\t\t\t\tlet aborted = signal?.aborted ?? false;\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t};\n\t\t\t\tconst throwIfAborted = (): void => {\n\t\t\t\t\tif (aborted || signal?.aborted) {\n\t\t\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\ttry {\n\t\t\t\t\tthrowIfAborted();\n\t\t\t\t\t// Create parent directories if needed.\n\t\t\t\t\tawait ops.mkdir(dir, { recursive: true });\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\t// Write the file contents.\n\t\t\t\t\tawait ops.writeFile(absolutePath, content);\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Successfully wrote ${content.length} bytes to ${path}` }],\n\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t};\n\t\t\t\t} finally {\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\trenderCall(args, theme, context) {\n\t\t\tconst renderArgs = args as WriteRenderArgs | undefined;\n\t\t\tconst rawPath = str(renderArgs?.file_path ?? renderArgs?.path);\n\t\t\tconst fileContent = str(renderArgs?.content);\n\t\t\tconst component =\n\t\t\t\t(context.lastComponent as WriteCallRenderComponent | undefined) ?? new WriteCallRenderComponent();\n\t\t\tif (fileContent !== null) {\n\t\t\t\tcomponent.cache = context.argsComplete\n\t\t\t\t\t? rebuildWriteHighlightCacheFull(rawPath, fileContent)\n\t\t\t\t\t: updateWriteHighlightCacheIncremental(component.cache, rawPath, fileContent);\n\t\t\t} else {\n\t\t\t\tcomponent.cache = undefined;\n\t\t\t}\n\t\t\tcomponent.setText(\n\t\t\t\tformatBackendIcon(ops.getBackendInfo?.(), theme) +\n\t\t\t\t\tformatWriteCall(\n\t\t\t\t\t\trenderArgs,\n\t\t\t\t\t\t{ expanded: context.expanded, isPartial: context.isPartial },\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\tcomponent.cache,\n\t\t\t\t\t),\n\t\t\t);\n\t\t\treturn component;\n\t\t},\n\t\trenderResult(result, _options, theme, context) {\n\t\t\tconst output = formatWriteResult({ ...result, isError: context.isError }, theme);\n\t\t\tif (!output) {\n\t\t\t\tconst component = (context.lastComponent as Container | undefined) ?? new Container();\n\t\t\t\tcomponent.clear();\n\t\t\t\treturn component;\n\t\t\t}\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(output);\n\t\t\treturn text;\n\t\t},\n\t};\n}\n\nexport function createWriteTool(operations: ToolOperations, options?: WriteToolOptions): AgentTool<typeof writeSchema> {\n\treturn wrapToolDefinition(createWriteToolDefinition(operations, options));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/core/tools/write.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool, AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport { Container, Text } from \"@greppleai/grip-tui\";\nimport { dirname } from \"path\";\nimport { type Static, Type } from \"typebox\";\nimport { getLanguageFromPath, highlightCode, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../extensions/types.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\nimport { resolveToCwd } from \"./path-utils.ts\";\nimport {\n\tformatBackendIcon,\n\tformatHiddenLinesHint,\n\tinvalidArgText,\n\tnormalizeDisplayText,\n\treplaceTabs,\n\tshortenPath,\n\tstr,\n} from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst writeSchema = Type.Object({\n\tpath: Type.String({ description: \"Path to the file to write (relative or absolute)\" }),\n\tcontent: Type.String({ description: \"Content to write to the file\" }),\n});\n\nexport type WriteToolInput = Static<typeof writeSchema>;\n\nexport interface WriteToolOptions {}\n\ninterface WriteRenderArgs {\n\tpath?: string;\n\tfile_path?: string;\n\tcontent?: string;\n}\n\ninterface WriteRenderResult extends AgentToolResult<undefined> {\n\tisError?: boolean;\n}\n\ntype WriteHighlightCache = {\n\trawPath: string | null;\n\tlang: string;\n\trawContent: string;\n\tnormalizedLines: string[];\n\thighlightedLines: string[];\n};\n\nclass WriteCallRenderComponent extends Text {\n\tcache?: WriteHighlightCache;\n\n\tconstructor() {\n\t\tsuper(\"\", 0, 0);\n\t}\n}\n\nconst WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;\n\nfunction highlightSingleLine(line: string, lang: string): string {\n\tconst highlighted = highlightCode(line, lang);\n\treturn highlighted[0] ?? \"\";\n}\n\nfunction refreshWriteHighlightPrefix(cache: WriteHighlightCache): void {\n\tconst prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);\n\tif (prefixCount === 0) return;\n\tconst prefixSource = cache.normalizedLines.slice(0, prefixCount).join(\"\\n\");\n\tconst prefixHighlighted = highlightCode(prefixSource, cache.lang);\n\tfor (let i = 0; i < prefixCount; i++) {\n\t\tcache.highlightedLines[i] =\n\t\t\tprefixHighlighted[i] ?? highlightSingleLine(cache.normalizedLines[i] ?? \"\", cache.lang);\n\t}\n}\n\nfunction rebuildWriteHighlightCacheFull(rawPath: string | null, fileContent: string): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tconst displayContent = normalizeDisplayText(fileContent);\n\tconst normalized = replaceTabs(displayContent);\n\treturn {\n\t\trawPath,\n\t\tlang,\n\t\trawContent: fileContent,\n\t\tnormalizedLines: normalized.split(\"\\n\"),\n\t\thighlightedLines: highlightCode(normalized, lang),\n\t};\n}\n\nfunction updateWriteHighlightCacheIncremental(\n\tcache: WriteHighlightCache | undefined,\n\trawPath: string | null,\n\tfileContent: string,\n): WriteHighlightCache | undefined {\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tif (!lang) return undefined;\n\tif (!cache) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (cache.lang !== lang || cache.rawPath !== rawPath) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (!fileContent.startsWith(cache.rawContent)) return rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\tif (fileContent.length === cache.rawContent.length) return cache;\n\n\tconst deltaRaw = fileContent.slice(cache.rawContent.length);\n\tconst deltaDisplay = normalizeDisplayText(deltaRaw);\n\tconst deltaNormalized = replaceTabs(deltaDisplay);\n\tcache.rawContent = fileContent;\n\tif (cache.normalizedLines.length === 0) {\n\t\tcache.normalizedLines.push(\"\");\n\t\tcache.highlightedLines.push(\"\");\n\t}\n\n\tconst segments = deltaNormalized.split(\"\\n\");\n\tconst lastIndex = cache.normalizedLines.length - 1;\n\tcache.normalizedLines[lastIndex] += segments[0];\n\tcache.highlightedLines[lastIndex] = highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);\n\tfor (let i = 1; i < segments.length; i++) {\n\t\tcache.normalizedLines.push(segments[i]);\n\t\tcache.highlightedLines.push(highlightSingleLine(segments[i], cache.lang));\n\t}\n\trefreshWriteHighlightPrefix(cache);\n\treturn cache;\n}\n\nfunction trimTrailingEmptyLines(lines: string[]): string[] {\n\tlet end = lines.length;\n\twhile (end > 0 && lines[end - 1] === \"\") {\n\t\tend--;\n\t}\n\treturn lines.slice(0, end);\n}\n\nfunction formatWriteContentPreview(\n\tfileContent: string | null,\n\trawPath: string | null,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tif (fileContent === null) return `\\n\\n${theme.fg(\"error\", \"[invalid content arg - expected string]\")}`;\n\tif (!fileContent) return \"\";\n\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tconst renderedLines = lang\n\t\t? (cache?.highlightedLines ?? highlightCode(replaceTabs(normalizeDisplayText(fileContent)), lang))\n\t\t: normalizeDisplayText(fileContent).split(\"\\n\");\n\tconst lines = trimTrailingEmptyLines(renderedLines);\n\tconst maxLines = options.expanded ? lines.length : 10;\n\tconst displayLines = lines.slice(0, maxLines);\n\tconst remaining = lines.length - maxLines;\n\tlet text = `\\n\\n${displayLines.map((line) => (lang ? line : theme.fg(\"toolOutput\", replaceTabs(line)))).join(\"\\n\")}`;\n\tif (remaining > 0) {\n\t\ttext += `\\n\\n${formatHiddenLinesHint(remaining, theme)}`;\n\t}\n\treturn text;\n}\n\nfunction formatWriteCall(\n\targs: WriteRenderArgs | undefined,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcache: WriteHighlightCache | undefined,\n): string {\n\tconst rawPath = str(args?.file_path ?? args?.path);\n\tconst fileContent = str(args?.content);\n\tconst path = rawPath !== null ? shortenPath(rawPath) : null;\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"write\"))} ${path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\")}`;\n\ttext += formatWriteContentPreview(fileContent, rawPath, options, theme, cache);\n\n\treturn text;\n}\n\nfunction formatWriteResult(result: WriteRenderResult, theme: Theme): string | undefined {\n\tif (!result.isError) {\n\t\treturn undefined;\n\t}\n\tconst output = result.content\n\t\t.filter((c) => c.type === \"text\")\n\t\t.map((c) => c.text || \"\")\n\t\t.join(\"\\n\");\n\tif (!output) {\n\t\treturn undefined;\n\t}\n\treturn `\\n${theme.fg(\"error\", output)}`;\n}\n\nexport type WriteToolDefinition = ToolDefinition<typeof writeSchema, undefined>;\n\nexport function createWriteToolDefinition(\n\toperations: ToolOperations,\n\t_options?: WriteToolOptions,\n): WriteToolDefinition {\n\tconst ops = operations;\n\tconst cwd = operations.cwd;\n\treturn {\n\t\tname: \"write\",\n\t\tlabel: \"write\",\n\t\tdescription:\n\t\t\t\"Write content to a file. Creates the file if it doesn't exist, overwrites if it does. Automatically creates parent directories.\",\n\t\tpromptSnippet: \"Create or overwrite files\",\n\t\tpromptGuidelines: [\"Use write only for new files or complete rewrites.\"],\n\t\tparameters: writeSchema,\n\t\tasync execute(_toolCallId, { path, content }: WriteToolInput, signal?: AbortSignal, _onUpdate?, _ctx?) {\n\t\t\tconst absolutePath = resolveToCwd(path, cwd);\n\t\t\tconst dir = dirname(absolutePath);\n\t\t\treturn withFileMutationQueue(absolutePath, async () => {\n\t\t\t\tlet aborted = signal?.aborted ?? false;\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t};\n\t\t\t\tconst throwIfAborted = (): void => {\n\t\t\t\t\tif (aborted || signal?.aborted) {\n\t\t\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\ttry {\n\t\t\t\t\tthrowIfAborted();\n\t\t\t\t\t// Create parent directories if needed.\n\t\t\t\t\tawait ops.mkdir(dir, { recursive: true });\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\t// Write the file contents.\n\t\t\t\t\tawait ops.writeFile(absolutePath, content);\n\t\t\t\t\tthrowIfAborted();\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Successfully wrote ${content.length} bytes to ${path}` }],\n\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t};\n\t\t\t\t} finally {\n\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\trenderCall(args, theme, context) {\n\t\t\tconst renderArgs = args as WriteRenderArgs | undefined;\n\t\t\tconst rawPath = str(renderArgs?.file_path ?? renderArgs?.path);\n\t\t\tconst fileContent = str(renderArgs?.content);\n\t\t\tconst component =\n\t\t\t\t(context.lastComponent as WriteCallRenderComponent | undefined) ?? new WriteCallRenderComponent();\n\t\t\tif (fileContent !== null) {\n\t\t\t\tcomponent.cache = context.argsComplete\n\t\t\t\t\t? rebuildWriteHighlightCacheFull(rawPath, fileContent)\n\t\t\t\t\t: updateWriteHighlightCacheIncremental(component.cache, rawPath, fileContent);\n\t\t\t} else {\n\t\t\t\tcomponent.cache = undefined;\n\t\t\t}\n\t\t\tcomponent.setText(\n\t\t\t\tformatBackendIcon(ops.getBackendInfo?.(), theme) +\n\t\t\t\t\tformatWriteCall(\n\t\t\t\t\t\trenderArgs,\n\t\t\t\t\t\t{ expanded: context.expanded, isPartial: context.isPartial },\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\tcomponent.cache,\n\t\t\t\t\t),\n\t\t\t);\n\t\t\treturn component;\n\t\t},\n\t\trenderResult(result, _options, theme, context) {\n\t\t\tconst output = formatWriteResult({ ...result, isError: context.isError }, theme);\n\t\t\tif (!output) {\n\t\t\t\tconst component = (context.lastComponent as Container | undefined) ?? new Container();\n\t\t\t\tcomponent.clear();\n\t\t\t\treturn component;\n\t\t\t}\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(output);\n\t\t\treturn text;\n\t\t},\n\t};\n}\n\nexport function createWriteTool(operations: ToolOperations, options?: WriteToolOptions): AgentTool<typeof writeSchema> {\n\treturn wrapToolDefinition(createWriteToolDefinition(operations, options));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-identity.d.ts","sourceRoot":"","sources":["../../src/core/workspace-identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;CACxC"
|
|
1
|
+
{"version":3,"file":"workspace-identity.d.ts","sourceRoot":"","sources":["../../src/core/workspace-identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;CACxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-budget.d.ts","sourceRoot":"","sources":["../../src/daemon/activity-budget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,oFAAoF;AACpF,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwE;IAC/F,YAAY,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,oBAAoB,CAAC,EAExF;IAEK,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqBjE;CACD"
|
|
1
|
+
{"version":3,"file":"activity-budget.d.ts","sourceRoot":"","sources":["../../src/daemon/activity-budget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,oFAAoF;AACpF,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwE;IAC/F,YAAY,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,oBAAoB,CAAC,EAExF;IAEK,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqBjE;CACD"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { RemoteWorkspaceRequestError } from "../core/remote-workspace-protocol/session.js";
|
|
2
2
|
/** Counts running handlers across every v1 socket and v2 channel in this daemon. */
|
|
3
3
|
export class DaemonActivityBudget {
|
|
4
|
-
requests = 0;
|
|
5
|
-
transfers = 0;
|
|
6
|
-
limits;
|
|
7
4
|
constructor(limits) {
|
|
5
|
+
this.requests = 0;
|
|
6
|
+
this.transfers = 0;
|
|
8
7
|
this.limits = limits;
|
|
9
8
|
}
|
|
10
9
|
async run(method, action) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-budget.js","sourceRoot":"","sources":["../../src/daemon/activity-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAG3F,oFAAoF;AACpF,MAAM,OAAO,oBAAoB;
|
|
1
|
+
{"version":3,"file":"activity-budget.js","sourceRoot":"","sources":["../../src/daemon/activity-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAG3F,oFAAoF;AACpF,MAAM,OAAO,oBAAoB;IAIhC,YAAY,MAA6E;QAHjF,aAAQ,GAAG,CAAC,CAAC;QACb,cAAS,GAAG,CAAC,CAAC;QAGrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,MAAc,EAAE,MAAwB;QACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,KAAK,eAAe,CAAC;QAC9E,IACC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAC9C,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAC7D,CAAC;YACF,MAAM,IAAI,2BAA2B,CAAC;gBACrC,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,wDAAwD;gBACjE,cAAc,EAAE,aAAa;gBAC7B,SAAS,EAAE,IAAI;aACf,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,QAAQ;YAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACJ,OAAO,MAAM,MAAM,EAAE,CAAC;QACvB,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,QAAQ;gBAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,CAAC;IACF,CAAC;CACD","sourcesContent":["import { RemoteWorkspaceRequestError } from \"../core/remote-workspace-protocol/session.ts\";\nimport type { DaemonConfiguration } from \"./config.ts\";\n\n/** Counts running handlers across every v1 socket and v2 channel in this daemon. */\nexport class DaemonActivityBudget {\n\tprivate requests = 0;\n\tprivate transfers = 0;\n\tprivate readonly limits: Pick<DaemonConfiguration, \"maxGlobalRequests\" | \"maxGlobalTransfers\">;\n\tconstructor(limits: Pick<DaemonConfiguration, \"maxGlobalRequests\" | \"maxGlobalTransfers\">) {\n\t\tthis.limits = limits;\n\t}\n\n\tasync run<T>(method: string, action: () => Promise<T>): Promise<T> {\n\t\tconst transfer = method.startsWith(\"transfer.\") || method === \"artifact.read\";\n\t\tif (\n\t\t\tthis.requests >= this.limits.maxGlobalRequests ||\n\t\t\t(transfer && this.transfers >= this.limits.maxGlobalTransfers)\n\t\t) {\n\t\t\tthrow new RemoteWorkspaceRequestError({\n\t\t\t\tcode: \"limit_exceeded\",\n\t\t\t\tmessage: \"Daemon global active request or transfer limit reached\",\n\t\t\t\texecutionState: \"not_started\",\n\t\t\t\tretryable: true,\n\t\t\t});\n\t\t}\n\t\tthis.requests++;\n\t\tif (transfer) this.transfers++;\n\t\ttry {\n\t\t\treturn await action();\n\t\t} finally {\n\t\t\tthis.requests--;\n\t\t\tif (transfer) this.transfers--;\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/daemon/command.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,YAAY,GAAE,yBAA8B,GAC1C,OAAO,CAAC,IAAI,CAAC,CA+Df"
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/daemon/command.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,YAAY,GAAE,yBAA8B,GAC1C,OAAO,CAAC,IAAI,CAAC,CA+Df"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/daemon/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAOpE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,IAAuB,EACvB,YAAY,GAA8B,EAAE
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/daemon/command.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseDaemonCommand } from \"./config.ts\";\nimport { printDaemonHelp } from \"./help.ts\";\nimport { redactDaemonText } from \"./security.ts\";\nimport { createDaemonServer, type DaemonServer } from \"./server.ts\";\n\nexport interface DaemonCommandDependencies {\n\treadonly stdout?: (message: string) => void;\n\treadonly stderr?: (message: string) => void;\n}\n\nexport async function runDaemonCommand(\n\targs: readonly string[],\n\tdependencies: DaemonCommandDependencies = {},\n): Promise<void> {\n\tconst stdout = dependencies.stdout ?? console.log;\n\tconst stderr = dependencies.stderr ?? console.error;\n\tlet token = process.env.GRIP_DAEMON_TOKEN;\n\tlet tlsPassphrase = process.env.GRIP_DAEMON_TLS_PASSPHRASE;\n\tlet server: DaemonServer | undefined;\n\ttry {\n\t\tconst command = await parseDaemonCommand(args);\n\t\tif (command.help) {\n\t\t\tprintDaemonHelp(stdout);\n\t\t\treturn;\n\t\t}\n\t\tconst configuration = command.configuration!;\n\t\ttoken = configuration.token;\n\t\ttlsPassphrase = configuration.tls?.passphrase;\n\t\tconst activeServer = createDaemonServer(configuration);\n\t\tserver = activeServer;\n\t\tconst address = await activeServer.listen();\n\t\tstdout(\n\t\t\tredactDaemonText(\n\t\t\t\t`grip daemon ready url=${address.url} workspace=${address.workspaceRoot} workspaceId=${address.workspaceId} auth=${configuration.token ? \"required\" : \"disabled\"} processExec=${configuration.allowProcessExec ? \"enabled\" : \"disabled\"}`,\n\t\t\t\t[token, tlsPassphrase],\n\t\t\t),\n\t\t);\n\t\tlet signalCount = 0;\n\t\tlet resolveShutdown: (() => void) | undefined;\n\t\tconst shutdown = new Promise<void>((resolve) => {\n\t\t\tresolveShutdown = resolve;\n\t\t});\n\t\tconst onSignal = () => {\n\t\t\tsignalCount++;\n\t\t\tif (signalCount > 1) void activeServer.forceClose();\n\t\t\tvoid activeServer.close().then(\n\t\t\t\t() => resolveShutdown?.(),\n\t\t\t\t() => resolveShutdown?.(),\n\t\t\t);\n\t\t};\n\t\tconst onReload = () => {\n\t\t\tvoid activeServer.reload().then(\n\t\t\t\t() => stdout(\"grip daemon workspace catalog reloaded\"),\n\t\t\t\t(error: unknown) =>\n\t\t\t\t\tstderr(\n\t\t\t\t\t\t`Error: ${redactDaemonText(error instanceof Error ? error.message : String(error), [token, tlsPassphrase])}`,\n\t\t\t\t\t),\n\t\t\t);\n\t\t};\n\t\tprocess.on(\"SIGINT\", onSignal);\n\t\tprocess.on(\"SIGTERM\", onSignal);\n\t\tprocess.on(\"SIGHUP\", onReload);\n\t\ttry {\n\t\t\tawait shutdown;\n\t\t\tawait activeServer.close();\n\t\t} finally {\n\t\t\tprocess.off(\"SIGINT\", onSignal);\n\t\t\tprocess.off(\"SIGTERM\", onSignal);\n\t\t\tprocess.off(\"SIGHUP\", onReload);\n\t\t}\n\t} catch (error) {\n\t\tawait server?.close().catch(() => undefined);\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tstderr(`Error: ${redactDaemonText(message, [token, tlsPassphrase])}`);\n\t\tprocess.exitCode = 1;\n\t}\n}\n"]}
|
package/dist/daemon/config.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface DaemonConfiguration {
|
|
|
13
13
|
/** Canonical fixed parent mount for explicitly enabled shared-channel mode. */
|
|
14
14
|
readonly sharedParentRoot?: string;
|
|
15
15
|
readonly temporaryRoot?: string;
|
|
16
|
+
/** Explicit opt-in for daemons running inside an isolated guest; never enabled by default for attached daemons. */
|
|
17
|
+
readonly allowFullFilesystem: boolean;
|
|
16
18
|
readonly token?: string;
|
|
17
19
|
readonly allowedOrigins: readonly string[];
|
|
18
20
|
readonly tls?: DaemonTlsConfiguration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/daemon/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,6BAA6B,EAElC,MAAM,+CAA+C,CAAC;AAEvD,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,+EAA+E;IAC/E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,GAAG,CAAC,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,6BAA6B,CAAC;CACvD;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD;AAmND,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEhE;AA2LD,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,WAAW,GAAE,MAAM,CAAC,UAAwB,EAC5C,UAAU,SAAgB,GACxB,OAAO,CAAC,aAAa,CAAC,CA2FxB","sourcesContent":["import { readFile, realpath, stat } from \"node:fs/promises\";\nimport { isAbsolute, join, resolve } from \"node:path\";\nimport {\n\tDEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS,\n\ttype RemoteWorkspaceProtocolLimits,\n\tvalidateRemoteWorkspaceProtocolLimits,\n} from \"../core/remote-workspace-protocol/contract.ts\";\n\nexport const DAEMON_WEBSOCKET_PATH = \"/grip/workspace\";\nexport const DAEMON_WEBSOCKET_PROTOCOL = \"grip.workspace.v1\";\n\nexport interface DaemonTlsConfiguration {\n\treadonly cert: Buffer;\n\treadonly key: Buffer;\n\treadonly passphrase?: string;\n}\n\nexport interface DaemonConfiguration {\n\treadonly host: string;\n\treadonly port: number;\n\treadonly workspaceRoot: string;\n\t/** Canonical fixed parent mount for explicitly enabled shared-channel mode. */\n\treadonly sharedParentRoot?: string;\n\treadonly temporaryRoot?: string;\n\treadonly token?: string;\n\treadonly allowedOrigins: readonly string[];\n\treadonly tls?: DaemonTlsConfiguration;\n\treadonly allowInsecureTransport: boolean;\n\treadonly allowProcessExec: boolean;\n\treadonly allowRoot: boolean;\n\treadonly forwardedEnvironment: readonly string[];\n\treadonly lspConfigPath?: string;\n\treadonly sandboxInstructionsPath?: string;\n\treadonly userAgentsPath?: string;\n\treadonly trustProjectLsp: boolean;\n\treadonly maxConnections: number;\n\treadonly maxGlobalRequests: number;\n\treadonly maxGlobalTransfers: number;\n\treadonly maxBufferedOutputBytes: number;\n\treadonly maxPendingConnections: number;\n\treadonly handshakeTimeoutMs: number;\n\treadonly shutdownTimeoutMs: number;\n\treadonly protocolLimits: RemoteWorkspaceProtocolLimits;\n}\n\nexport interface DaemonCommand {\n\treadonly help: boolean;\n\treadonly configuration?: DaemonConfiguration;\n}\n\nexport class DaemonConfigurationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"DaemonConfigurationError\";\n\t}\n}\n\ninterface ParsedDaemonInputs {\n\thelp: boolean;\n\thost?: string;\n\tport?: string;\n\tcwd?: string;\n\tsharedParent?: string;\n\torigins: string[];\n\ttlsCertPath?: string;\n\ttlsKeyPath?: string;\n\tallowInsecureTransport?: boolean;\n\tallowProcessExec?: boolean;\n\tallowRoot?: boolean;\n\tforwardedEnvironment: string[];\n\tlspConfigPath?: string;\n\ttrustProjectLsp?: boolean;\n\tmaxConnections?: string;\n\tmaxPendingConnections?: string;\n\thandshakeTimeoutMs?: string;\n\tshutdownTimeoutMs?: string;\n}\n\nconst BOOLEAN_VALUES = new Map<string, boolean>([\n\t[\"1\", true],\n\t[\"true\", true],\n\t[\"yes\", true],\n\t[\"0\", false],\n\t[\"false\", false],\n\t[\"no\", false],\n]);\n\nconst VALUE_FLAGS = new Map<string, keyof ParsedDaemonInputs>([\n\t[\"--daemon-host\", \"host\"],\n\t[\"--daemon-port\", \"port\"],\n\t[\"--daemon-cwd\", \"cwd\"],\n\t[\"--daemon-shared-parent\", \"sharedParent\"],\n\t[\"--daemon-tls-cert\", \"tlsCertPath\"],\n\t[\"--daemon-tls-key\", \"tlsKeyPath\"],\n\t[\"--daemon-lsp-config\", \"lspConfigPath\"],\n\t[\"--daemon-max-connections\", \"maxConnections\"],\n\t[\"--daemon-max-pending-connections\", \"maxPendingConnections\"],\n\t[\"--daemon-handshake-timeout-ms\", \"handshakeTimeoutMs\"],\n\t[\"--daemon-shutdown-timeout-ms\", \"shutdownTimeoutMs\"],\n]);\n\nconst BOOLEAN_FLAGS = new Map<string, keyof ParsedDaemonInputs>([\n\t[\"--daemon-allow-insecure-transport\", \"allowInsecureTransport\"],\n\t[\"--daemon-allow-process-exec\", \"allowProcessExec\"],\n\t[\"--daemon-allow-root\", \"allowRoot\"],\n\t[\"--daemon-trust-project-lsp\", \"trustProjectLsp\"],\n]);\n\nfunction parseBoolean(value: string | undefined, name: string, fallback = false): boolean {\n\tif (value === undefined) return fallback;\n\tconst parsed = BOOLEAN_VALUES.get(value.toLowerCase());\n\tif (parsed === undefined) throw new DaemonConfigurationError(`${name} must be one of 1, 0, true, false, yes, or no`);\n\treturn parsed;\n}\n\nfunction parseInteger(\n\tvalue: string | undefined,\n\tname: string,\n\tminimum: number,\n\tmaximum: number,\n\tfallback: number,\n): number {\n\tif (value === undefined) return fallback;\n\tif (!/^(0|[1-9][0-9]*)$/.test(value)) {\n\t\tthrow new DaemonConfigurationError(`${name} must be a decimal integer from ${minimum} to ${maximum}`);\n\t}\n\tconst parsed = Number(value);\n\tif (!Number.isSafeInteger(parsed) || parsed < minimum || parsed > maximum) {\n\t\tthrow new DaemonConfigurationError(`${name} must be a decimal integer from ${minimum} to ${maximum}`);\n\t}\n\treturn parsed;\n}\n\nfunction setSingleton(\n\tinputs: ParsedDaemonInputs,\n\tkey: keyof ParsedDaemonInputs,\n\tvalue: string | boolean,\n\tflag: string,\n): void {\n\tif (inputs[key] !== undefined) throw new DaemonConfigurationError(`${flag} may only be specified once`);\n\t(inputs as Record<keyof ParsedDaemonInputs, unknown>)[key] = value;\n}\n\nfunction requireFlagValue(args: readonly string[], index: number, flag: string): string {\n\tconst value = args[index + 1];\n\tif (value === undefined || value.startsWith(\"-\")) throw new DaemonConfigurationError(`${flag} requires a value`);\n\treturn value;\n}\n\nfunction parseInputs(args: readonly string[]): ParsedDaemonInputs {\n\tif (args[0] !== \"--daemon\") throw new DaemonConfigurationError(\"Daemon command must start with --daemon\");\n\tconst inputs: ParsedDaemonInputs = { help: false, origins: [], forwardedEnvironment: [] };\n\tfor (let index = 1; index < args.length; index++) {\n\t\tconst argument = args[index];\n\t\tif (argument === \"--help\" || argument === \"-h\") {\n\t\t\tinputs.help = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (argument === \"--daemon-origin\" || argument === \"--daemon-env\") {\n\t\t\tconst value = requireFlagValue(args, index, argument);\n\t\t\tif (argument === \"--daemon-origin\") inputs.origins.push(value);\n\t\t\telse inputs.forwardedEnvironment.push(value);\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\t\tconst valueKey = VALUE_FLAGS.get(argument);\n\t\tif (valueKey) {\n\t\t\tsetSingleton(inputs, valueKey, requireFlagValue(args, index, argument), argument);\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\t\tconst booleanKey = BOOLEAN_FLAGS.get(argument);\n\t\tif (booleanKey) {\n\t\t\tsetSingleton(inputs, booleanKey, true, argument);\n\t\t\tcontinue;\n\t\t}\n\t\tthrow new DaemonConfigurationError(\n\t\t\targument.startsWith(\"-\")\n\t\t\t\t? `Unknown or incompatible option in daemon mode: ${argument}`\n\t\t\t\t: `Daemon mode does not accept positional arguments: ${argument}`,\n\t\t);\n\t}\n\treturn inputs;\n}\n\nfunction parseOrigin(value: string): string {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(value);\n\t} catch {\n\t\tthrow new DaemonConfigurationError(`Invalid daemon Origin: ${value}`);\n\t}\n\tif (\n\t\t(url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n\t\turl.username !== \"\" ||\n\t\turl.password !== \"\" ||\n\t\turl.pathname !== \"/\" ||\n\t\turl.search !== \"\" ||\n\t\turl.hash !== \"\" ||\n\t\tvalue !== url.origin\n\t) {\n\t\tthrow new DaemonConfigurationError(\n\t\t\t`Daemon origins must be exact HTTP(S) origins without paths or wildcards: ${value}`,\n\t\t);\n\t}\n\treturn url.origin;\n}\n\nfunction parseEnvironmentNames(values: readonly string[]): string[] {\n\tconst names = values\n\t\t.flatMap((value) => value.split(\",\"))\n\t\t.map((value) => value.trim())\n\t\t.filter(Boolean);\n\tconst seen = new Set<string>();\n\tfor (const name of names) {\n\t\tif (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name))\n\t\t\tthrow new DaemonConfigurationError(`Invalid daemon environment name: ${name}`);\n\t\tconst identity = process.platform === \"win32\" ? name.toLowerCase() : name;\n\t\tif (seen.has(identity)) throw new DaemonConfigurationError(`Duplicate daemon environment name: ${name}`);\n\t\tseen.add(identity);\n\t}\n\treturn names;\n}\n\nasync function resolveConfinedRoot(value: string, startupCwd: string, label: string): Promise<string> {\n\tconst candidate = isAbsolute(value) ? value : resolve(startupCwd, value);\n\tlet canonical: string;\n\ttry {\n\t\tcanonical = await realpath(candidate);\n\t\tif (!(await stat(canonical)).isDirectory()) throw new Error(\"not a directory\");\n\t} catch (error) {\n\t\tthrow new DaemonConfigurationError(\n\t\t\t`Daemon ${label} must be an existing directory: ${candidate} (${error instanceof Error ? error.message : String(error)})`,\n\t\t);\n\t}\n\treturn canonical;\n}\n\nasync function readTlsFile(path: string, label: string, startupCwd: string): Promise<Buffer> {\n\tconst resolvedPath = isAbsolute(path) ? path : resolve(startupCwd, path);\n\ttry {\n\t\tconst content = await readFile(resolvedPath);\n\t\tif (content.byteLength === 0) throw new Error(\"file is empty\");\n\t\treturn content;\n\t} catch (error) {\n\t\tthrow new DaemonConfigurationError(\n\t\t\t`Unable to read daemon TLS ${label} file ${resolvedPath}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\nfunction validateToken(token: string | undefined): string | undefined {\n\tif (token === undefined) return undefined;\n\tconst bytes = Buffer.byteLength(token, \"utf8\");\n\tif (bytes < 32 || bytes > 1024 || !/\\S/u.test(token) || /[\\r\\n]/u.test(token)) {\n\t\tthrow new DaemonConfigurationError(\n\t\t\t\"GRIP_DAEMON_TOKEN must contain 32 to 1024 UTF-8 bytes, include a non-whitespace character, and contain no line breaks\",\n\t\t);\n\t}\n\treturn token;\n}\n\nfunction isRootProcess(): boolean {\n\treturn process.platform !== \"win32\" && typeof process.getuid === \"function\" && process.getuid() === 0;\n}\n\nexport function isDaemonCommand(args: readonly string[]): boolean {\n\treturn args[0] === \"--daemon\";\n}\ninterface DaemonEndpointConfiguration {\n\thost: string;\n\tport: number;\n}\n\ninterface DaemonWorkspaceRootsConfiguration {\n\tallowRoot: boolean;\n\tworkspaceRoot: string;\n\ttemporaryRoot: string | undefined;\n}\n\ninterface DaemonTransportSecurityConfiguration {\n\ttoken: string | undefined;\n\tallowedOrigins: string[];\n\ttls: DaemonTlsConfiguration | undefined;\n}\n\ninterface DaemonCapacityConfiguration {\n\tmaxGlobalRequests: number;\n\tmaxGlobalTransfers: number;\n\tmaxBufferedOutputBytes: number;\n\tprotocolLimits: RemoteWorkspaceProtocolLimits;\n}\n\nfunction resolveDaemonEndpoint(\n\tinputs: ParsedDaemonInputs,\n\tenvironment: NodeJS.ProcessEnv,\n): DaemonEndpointConfiguration {\n\tconst host = inputs.host ?? environment.GRIP_DAEMON_HOST ?? \"127.0.0.1\";\n\tif (host.length === 0 || /\\s/u.test(host)) {\n\t\tthrow new DaemonConfigurationError(\"Daemon host must be a non-empty IP address\");\n\t}\n\tconst port = parseInteger(\n\t\tinputs.port ?? environment.GRIP_DAEMON_PORT,\n\t\t\"GRIP_DAEMON_PORT/--daemon-port\",\n\t\t1,\n\t\t65535,\n\t\t8787,\n\t);\n\treturn { host, port };\n}\n\nasync function resolveDaemonWorkspaceRoots(\n\tinputs: ParsedDaemonInputs,\n\tenvironment: NodeJS.ProcessEnv,\n\tstartupCwd: string,\n): Promise<DaemonWorkspaceRootsConfiguration> {\n\tconst allowRoot = inputs.allowRoot ?? parseBoolean(environment.GRIP_DAEMON_ALLOW_ROOT, \"GRIP_DAEMON_ALLOW_ROOT\");\n\tif (isRootProcess() && !allowRoot) {\n\t\tthrow new DaemonConfigurationError(\n\t\t\t\"Refusing to run the workspace daemon as root; use --daemon-allow-root only inside an intentional OS sandbox\",\n\t\t);\n\t}\n\tconst workspaceRoot = await resolveConfinedRoot(\n\t\tinputs.cwd ?? environment.GRIP_DAEMON_CWD ?? startupCwd,\n\t\tstartupCwd,\n\t\t\"workspace root\",\n\t);\n\tconst temporaryRoot = environment.GRIP_DAEMON_TEMP_ROOT\n\t\t? await resolveConfinedRoot(environment.GRIP_DAEMON_TEMP_ROOT, startupCwd, \"temporary root\")\n\t\t: undefined;\n\treturn { allowRoot, workspaceRoot, temporaryRoot };\n}\n\nasync function resolveSharedParentRoot(\n\tinputs: ParsedDaemonInputs,\n\tenvironment: NodeJS.ProcessEnv,\n\tstartupCwd: string,\n\tworkspaceRoot: string,\n): Promise<string | undefined> {\n\tconst value = inputs.sharedParent ?? environment.GRIP_DAEMON_SHARED_PARENT;\n\tif (value === undefined) return undefined;\n\tif (value === \"\") throw new DaemonConfigurationError(\"Shared parent mount must not be empty\");\n\tconst root = await resolveConfinedRoot(value, startupCwd, \"shared parent mount\");\n\tif (root !== workspaceRoot) {\n\t\tthrow new DaemonConfigurationError(\"Shared parent mount must equal --daemon-cwd (the fixed mounted parent)\");\n\t}\n\treturn root;\n}\n\nasync function resolveDaemonTransportSecurity(\n\tinputs: ParsedDaemonInputs,\n\tenvironment: NodeJS.ProcessEnv,\n\tstartupCwd: string,\n): Promise<DaemonTransportSecurityConfiguration> {\n\tconst token = validateToken(environment.GRIP_DAEMON_TOKEN);\n\tconst allowedOrigins = [\n\t\t...(environment.GRIP_DAEMON_ORIGINS?.split(\",\")\n\t\t\t.map((value) => value.trim())\n\t\t\t.filter(Boolean) ?? []),\n\t\t...inputs.origins,\n\t].map(parseOrigin);\n\tif (new Set(allowedOrigins).size !== allowedOrigins.length) {\n\t\tthrow new DaemonConfigurationError(\"Daemon origins must be unique\");\n\t}\n\tconst tlsCertPath = inputs.tlsCertPath ?? environment.GRIP_DAEMON_TLS_CERT;\n\tconst tlsKeyPath = inputs.tlsKeyPath ?? environment.GRIP_DAEMON_TLS_KEY;\n\tif ((tlsCertPath === undefined) !== (tlsKeyPath === undefined)) {\n\t\tthrow new DaemonConfigurationError(\"Daemon TLS requires both a certificate and private key\");\n\t}\n\tconst tls =\n\t\ttlsCertPath && tlsKeyPath\n\t\t\t? Object.freeze({\n\t\t\t\t\tcert: await readTlsFile(tlsCertPath, \"certificate\", startupCwd),\n\t\t\t\t\tkey: await readTlsFile(tlsKeyPath, \"private key\", startupCwd),\n\t\t\t\t\tpassphrase: environment.GRIP_DAEMON_TLS_PASSPHRASE,\n\t\t\t\t})\n\t\t\t: undefined;\n\treturn { token, allowedOrigins, tls };\n}\n\nfunction resolveDaemonCapacity(environment: NodeJS.ProcessEnv): DaemonCapacityConfiguration {\n\tconst maxConnectionRequests = parseInteger(\n\t\tenvironment.GRIP_DAEMON_MAX_CONNECTION_REQUESTS,\n\t\t\"GRIP_DAEMON_MAX_CONNECTION_REQUESTS\",\n\t\t1,\n\t\t10_000_000,\n\t\tDEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS.maxActiveRequests,\n\t);\n\tconst maxGlobalRequests = parseInteger(\n\t\tenvironment.GRIP_DAEMON_MAX_GLOBAL_REQUESTS,\n\t\t\"GRIP_DAEMON_MAX_GLOBAL_REQUESTS\",\n\t\t1,\n\t\t10_000_000,\n\t\tmaxConnectionRequests,\n\t);\n\tif (maxGlobalRequests < maxConnectionRequests) {\n\t\tthrow new DaemonConfigurationError(\n\t\t\t\"GRIP_DAEMON_MAX_GLOBAL_REQUESTS must be at least GRIP_DAEMON_MAX_CONNECTION_REQUESTS\",\n\t\t);\n\t}\n\tconst maxConnectionTransfers = parseInteger(\n\t\tenvironment.GRIP_DAEMON_MAX_CONNECTION_UPLOADS,\n\t\t\"GRIP_DAEMON_MAX_CONNECTION_UPLOADS\",\n\t\t1,\n\t\t10_000,\n\t\tDEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS.maxActiveTransfers,\n\t);\n\tconst maxGlobalTransfers = parseInteger(\n\t\tenvironment.GRIP_DAEMON_MAX_GLOBAL_UPLOADS,\n\t\t\"GRIP_DAEMON_MAX_GLOBAL_UPLOADS\",\n\t\t1,\n\t\t10_000,\n\t\tmaxConnectionTransfers,\n\t);\n\tif (maxGlobalTransfers < maxConnectionTransfers) {\n\t\tthrow new DaemonConfigurationError(\n\t\t\t\"GRIP_DAEMON_MAX_GLOBAL_UPLOADS must be at least GRIP_DAEMON_MAX_CONNECTION_UPLOADS\",\n\t\t);\n\t}\n\tconst maxMessageBytes = parseInteger(\n\t\tenvironment.GRIP_DAEMON_MAX_FRAME_BYTES,\n\t\t\"GRIP_DAEMON_MAX_FRAME_BYTES\",\n\t\t1024,\n\t\t64 * 1024 * 1024,\n\t\tDEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS.maxMessageBytes,\n\t);\n\tconst maxTransferBytes = parseInteger(\n\t\tenvironment.GRIP_DAEMON_MAX_UPLOAD_BYTES,\n\t\t\"GRIP_DAEMON_MAX_UPLOAD_BYTES\",\n\t\t1,\n\t\tNumber.MAX_SAFE_INTEGER,\n\t\tDEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS.maxTransferBytes,\n\t);\n\tconst maxBufferedOutputBytes = parseInteger(\n\t\tenvironment.GRIP_DAEMON_MAX_BUFFERED_OUTPUT_BYTES,\n\t\t\"GRIP_DAEMON_MAX_BUFFERED_OUTPUT_BYTES\",\n\t\t1024,\n\t\t64 * 1024 * 1024,\n\t\t8 * 1024 * 1024,\n\t);\n\tconst protocolLimits = validateRemoteWorkspaceProtocolLimits({\n\t\t...DEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS,\n\t\tmaxMessageBytes,\n\t\tmaxStringBytes: Math.min(DEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS.maxStringBytes, maxMessageBytes),\n\t\tmaxPendingInboundBytes: Math.max(\n\t\t\tDEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS.maxPendingInboundBytes,\n\t\t\tmaxMessageBytes,\n\t\t),\n\t\tmaxTransferBytes,\n\t\tmaxActiveRequests: maxConnectionRequests,\n\t\tmaxActiveTransfers: Math.min(maxConnectionTransfers, maxGlobalTransfers),\n\t});\n\treturn { maxGlobalRequests, maxGlobalTransfers, maxBufferedOutputBytes, protocolLimits };\n}\n\nexport async function parseDaemonCommand(\n\targs: readonly string[],\n\tenvironment: NodeJS.ProcessEnv = process.env,\n\tstartupCwd = process.cwd(),\n): Promise<DaemonCommand> {\n\tconst inputs = parseInputs(args);\n\tif (inputs.help) return { help: true };\n\n\tconst { host, port } = resolveDaemonEndpoint(inputs, environment);\n\tconst { allowRoot, workspaceRoot, temporaryRoot } = await resolveDaemonWorkspaceRoots(\n\t\tinputs,\n\t\tenvironment,\n\t\tstartupCwd,\n\t);\n\tconst sharedParentRoot = await resolveSharedParentRoot(inputs, environment, startupCwd, workspaceRoot);\n\tconst { token, allowedOrigins, tls } = await resolveDaemonTransportSecurity(inputs, environment, startupCwd);\n\tconst { maxGlobalRequests, maxGlobalTransfers, maxBufferedOutputBytes, protocolLimits } =\n\t\tresolveDaemonCapacity(environment);\n\n\tconst allowInsecureTransport =\n\t\tinputs.allowInsecureTransport ??\n\t\tparseBoolean(environment.GRIP_DAEMON_ALLOW_INSECURE_TRANSPORT, \"GRIP_DAEMON_ALLOW_INSECURE_TRANSPORT\");\n\tconst allowProcessExec =\n\t\tinputs.allowProcessExec ??\n\t\tparseBoolean(environment.GRIP_DAEMON_ALLOW_PROCESS_EXEC, \"GRIP_DAEMON_ALLOW_PROCESS_EXEC\");\n\tconst trustProjectLsp =\n\t\tinputs.trustProjectLsp ??\n\t\tparseBoolean(environment.GRIP_DAEMON_TRUST_PROJECT_LSP, \"GRIP_DAEMON_TRUST_PROJECT_LSP\");\n\tconst forwardedEnvironment = parseEnvironmentNames([\n\t\t...(environment.GRIP_DAEMON_ENV?.split(\",\") ?? []),\n\t\t...inputs.forwardedEnvironment,\n\t]);\n\tconst maxConnections = parseInteger(\n\t\tinputs.maxConnections ?? environment.GRIP_DAEMON_MAX_CONNECTIONS,\n\t\t\"GRIP_DAEMON_MAX_CONNECTIONS/--daemon-max-connections\",\n\t\t1,\n\t\t100_000,\n\t\t64,\n\t);\n\tconst maxPendingConnections = parseInteger(\n\t\tinputs.maxPendingConnections ?? environment.GRIP_DAEMON_MAX_PENDING_CONNECTIONS,\n\t\t\"GRIP_DAEMON_MAX_PENDING_CONNECTIONS/--daemon-max-pending-connections\",\n\t\t1,\n\t\t100_000,\n\t\t64,\n\t);\n\tconst handshakeTimeoutMs = parseInteger(\n\t\tinputs.handshakeTimeoutMs ?? environment.GRIP_DAEMON_HANDSHAKE_TIMEOUT_MS,\n\t\t\"GRIP_DAEMON_HANDSHAKE_TIMEOUT_MS/--daemon-handshake-timeout-ms\",\n\t\t100,\n\t\t5 * 60_000,\n\t\t10_000,\n\t);\n\tconst shutdownTimeoutMs = parseInteger(\n\t\tinputs.shutdownTimeoutMs ?? environment.GRIP_DAEMON_SHUTDOWN_TIMEOUT_MS,\n\t\t\"GRIP_DAEMON_SHUTDOWN_TIMEOUT_MS/--daemon-shutdown-timeout-ms\",\n\t\t100,\n\t\t5 * 60_000,\n\t\t10_000,\n\t);\n\n\treturn {\n\t\thelp: false,\n\t\tconfiguration: Object.freeze({\n\t\t\thost,\n\t\t\tport,\n\t\t\tworkspaceRoot,\n\t\t\tsharedParentRoot,\n\t\t\ttemporaryRoot,\n\t\t\ttoken,\n\t\t\tallowedOrigins: Object.freeze(allowedOrigins),\n\t\t\ttls,\n\t\t\tallowInsecureTransport,\n\t\t\tallowProcessExec,\n\t\t\tallowRoot,\n\t\t\tforwardedEnvironment: Object.freeze(forwardedEnvironment),\n\t\t\tlspConfigPath:\n\t\t\t\tinputs.lspConfigPath || environment.GRIP_DAEMON_LSP_CONFIG\n\t\t\t\t\t? resolve(startupCwd, inputs.lspConfigPath ?? environment.GRIP_DAEMON_LSP_CONFIG!)\n\t\t\t\t\t: undefined,\n\t\t\ttrustProjectLsp,\n\t\t\tsandboxInstructionsPath: environment.GRIP_DAEMON_SANDBOX_INSTRUCTIONS\n\t\t\t\t? resolve(startupCwd, environment.GRIP_DAEMON_SANDBOX_INSTRUCTIONS)\n\t\t\t\t: undefined,\n\t\t\tuserAgentsPath: environment.HOME ? join(environment.HOME, \".grip\", \"AGENTS.md\") : undefined,\n\t\t\tmaxConnections,\n\t\t\tmaxGlobalRequests,\n\t\t\tmaxGlobalTransfers,\n\t\t\tmaxBufferedOutputBytes,\n\t\t\tmaxPendingConnections,\n\t\t\thandshakeTimeoutMs,\n\t\t\tshutdownTimeoutMs,\n\t\t\tprotocolLimits: Object.freeze({ ...protocolLimits }),\n\t\t}),\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/daemon/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,6BAA6B,EAElC,MAAM,+CAA+C,CAAC;AAEvD,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,+EAA+E;IAC/E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,mHAAmH;IACnH,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,GAAG,CAAC,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,6BAA6B,CAAC;CACvD;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD;AAqND,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEhE;AA2LD,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,WAAW,GAAE,MAAM,CAAC,UAAwB,EAC5C,UAAU,SAAgB,GACxB,OAAO,CAAC,aAAa,CAAC,CA+FxB"}
|
package/dist/daemon/config.js
CHANGED
|
@@ -34,6 +34,7 @@ const BOOLEAN_FLAGS = new Map([
|
|
|
34
34
|
["--daemon-allow-insecure-transport", "allowInsecureTransport"],
|
|
35
35
|
["--daemon-allow-process-exec", "allowProcessExec"],
|
|
36
36
|
["--daemon-allow-root", "allowRoot"],
|
|
37
|
+
["--daemon-allow-full-filesystem", "allowFullFilesystem"],
|
|
37
38
|
["--daemon-trust-project-lsp", "trustProjectLsp"],
|
|
38
39
|
]);
|
|
39
40
|
function parseBoolean(value, name, fallback = false) {
|
|
@@ -272,6 +273,8 @@ export async function parseDaemonCommand(args, environment = process.env, startu
|
|
|
272
273
|
parseBoolean(environment.GRIP_DAEMON_ALLOW_INSECURE_TRANSPORT, "GRIP_DAEMON_ALLOW_INSECURE_TRANSPORT");
|
|
273
274
|
const allowProcessExec = inputs.allowProcessExec ??
|
|
274
275
|
parseBoolean(environment.GRIP_DAEMON_ALLOW_PROCESS_EXEC, "GRIP_DAEMON_ALLOW_PROCESS_EXEC");
|
|
276
|
+
const allowFullFilesystem = inputs.allowFullFilesystem ??
|
|
277
|
+
parseBoolean(environment.GRIP_DAEMON_ALLOW_FULL_FILESYSTEM, "GRIP_DAEMON_ALLOW_FULL_FILESYSTEM");
|
|
275
278
|
const trustProjectLsp = inputs.trustProjectLsp ??
|
|
276
279
|
parseBoolean(environment.GRIP_DAEMON_TRUST_PROJECT_LSP, "GRIP_DAEMON_TRUST_PROJECT_LSP");
|
|
277
280
|
const forwardedEnvironment = parseEnvironmentNames([
|
|
@@ -290,6 +293,7 @@ export async function parseDaemonCommand(args, environment = process.env, startu
|
|
|
290
293
|
workspaceRoot,
|
|
291
294
|
sharedParentRoot,
|
|
292
295
|
temporaryRoot,
|
|
296
|
+
allowFullFilesystem,
|
|
293
297
|
token,
|
|
294
298
|
allowedOrigins: Object.freeze(allowedOrigins),
|
|
295
299
|
tls,
|