@greppleai/grip 0.1.4 → 0.1.6
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 +47 -0
- package/README.md +2 -2
- 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.map +1 -1
- package/dist/core/agent-session.d.ts +27 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +117 -152
- 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 +6 -11
- 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.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.map +1 -1
- package/dist/core/extensions/runner.js +18 -30
- package/dist/core/extensions/runner.js.map +1 -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 +11 -23
- 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.map +1 -1
- package/dist/core/instruction-resource-loader.js +0 -3
- 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.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 +9 -15
- 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.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.map +1 -1
- 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.map +1 -1
- package/dist/core/tools/bash.js +8 -5
- 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 +5 -0
- package/dist/core/tools/operations.d.ts.map +1 -1
- package/dist/core/tools/operations.js +26 -24
- 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.map +1 -1
- package/dist/main.d.ts.map +1 -1
- 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 +21 -17
- 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 +1 -3
- 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 +26 -18
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +223 -210
- 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 +14 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +223 -137
- 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.map +1 -1
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js.map +1 -1
- 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.map +1 -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 +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/keybindings.md +3 -1
- package/docs/providers.md +3 -1
- package/docs/sandbox.md +7 -1
- package/docs/sessions.md +1 -1
- package/docs/usage.md +39 -2
- 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 +601 -833
- package/package.json +20 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/core/tools/hashline/resolve.ts"],"names":[],"mappings":"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","sourcesContent":["import { rejectUnknownFields } from \"../hashline-utils.ts\";\nimport { abortIf } from \"../runtime.ts\";\nimport { HL_BARE_PREFIX_RE } from \"./hash.ts\";\nimport { type Anchor, parseHashRef, parseText } from \"./parse.ts\";\n\nexport type RAnchor = {\n\tline: number;\n\thash: string;\n\thashMatched: boolean;\n};\n\nexport type HEdit = { hash_range_inclusive: [Anchor, Anchor]; content_lines: string[] };\nexport type RHEdit = {\n\thash_range_inclusive: [RAnchor, RAnchor];\n\tcontent_lines: string[];\n};\n\ntype HashAnchorMismatchKind = \"not_found\" | \"ambiguous\";\nexport type BoundaryDuplicateKind = \"trailing\" | \"leading\";\n\ninterface HMismatch {\n\tref: Anchor;\n\tkind: HashAnchorMismatchKind;\n\tcandidates?: number[];\n}\n\nexport interface BDupWarn {\n\tkind: BoundaryDuplicateKind;\n\tsurvivingLineContent: string;\n\tsurvivingLineIndex: number;\n\toccurrence: number;\n\treplacementLineContent: string;\n\teditIndex: number;\n}\ninterface EditValidationResult {\n\tresolved: RHEdit[];\n\tmismatches: HMismatch[];\n\tboundaryWarnings: BDupWarn[];\n}\n\nexport interface NEdit {\n\teditIndex: number;\n\tloc: string;\n\tcurrentContent: string;\n}\n\nexport type HTEdit = {\n\thash_range_inclusive: [string, string];\n\tcontent_lines: string[];\n};\n\nfunction resAnchor(ref: Anchor, _fileLines: string[], fileHashes: string[]): RAnchor | HMismatch {\n\tconst hashMatches: number[] = [];\n\tfor (let i = 0; i < fileHashes.length; i++) {\n\t\tif (fileHashes[i] === ref.hash) hashMatches.push(i + 1);\n\t}\n\tif (hashMatches.length === 0) {\n\t\treturn { ref, kind: \"not_found\" };\n\t}\n\tif (hashMatches.length === 1) {\n\t\treturn {\n\t\t\tline: hashMatches[0]!,\n\t\t\thash: ref.hash,\n\t\t\thashMatched: true,\n\t\t};\n\t}\n\treturn { ref, kind: \"ambiguous\", candidates: hashMatches };\n}\n\nfunction assertAligned(fileLines: string[], fileHashes: string[], ctx: string): void {\n\tif (fileHashes.length !== fileLines.length) {\n\t\tthrow new Error(\n\t\t\t`${ctx}: fileHashes.length (${fileHashes.length}) must match fileLines.length (${fileLines.length}).`,\n\t\t);\n\t}\n}\n\nfunction formatNotFoundMismatches(mismatches: HMismatch[], filePath: string | undefined): string | undefined {\n\tconst notFound = mismatches.filter((mismatch) => mismatch.kind === \"not_found\");\n\tif (notFound.length === 0) return undefined;\n\tconst references = notFound.map((mismatch) => `\"${mismatch.ref.hash}\"`).join(\", \");\n\treturn `[E_STALE_ANCHOR] ${notFound.length} stale anchor${notFound.length > 1 ? \"s\" : \"\"}${filePath ? ` in ${filePath}` : \"\"}: ${references}. Call read() to get fresh anchors, then copy the 3-char HASH of the start and end of the range you are replacing into hash_range_inclusive of your next replace call.`;\n}\n\nfunction formatAmbiguousMismatchDetail(mismatch: HMismatch, fileLines: string[], fileHashes: string[]): string {\n\tconst sample = (mismatch.candidates ?? []).slice(0, 5);\n\tconst candidateCount = mismatch.candidates?.length ?? 0;\n\tconst more = candidateCount > sample.length ? `, ... (+${candidateCount - sample.length} more)` : \"\";\n\tconst lines = sample\n\t\t.map((line) => {\n\t\t\tconst content = fileLines[line - 1] ?? \"\";\n\t\t\treturn ` ${line}: ${fileHashes[line - 1]}│${content}`;\n\t\t})\n\t\t.join(\"\\n\");\n\treturn ` Hash \"${mismatch.ref.hash}\" matches lines ${sample.join(\", \")}${more}.\\n${lines}`;\n}\n\nfunction formatAmbiguousMismatches(\n\tmismatches: HMismatch[],\n\tfileLines: string[],\n\tfileHashes: string[],\n\tfilePath: string | undefined,\n): string | undefined {\n\tconst ambiguous = mismatches.filter((mismatch) => mismatch.kind === \"ambiguous\");\n\tif (ambiguous.length === 0) return undefined;\n\tconst header = `[E_AMBIGUOUS_ANCHOR] ${ambiguous.length} ambiguous anchor${ambiguous.length > 1 ? \"s\" : \"\"}${filePath ? ` in ${filePath}` : \"\"}. Call read() to get fresh anchors, then copy the 3-char HASH of the start and end of the range you are replacing into hash_range_inclusive of your next replace call.`;\n\treturn [header, ...ambiguous.map((mismatch) => formatAmbiguousMismatchDetail(mismatch, fileLines, fileHashes))].join(\n\t\t\"\\n\",\n\t);\n}\n\nexport function fmtMismatch(\n\tmismatches: HMismatch[],\n\tfileLines: string[],\n\tfileHashes: string[],\n\tfilePath?: string,\n): string {\n\tassertAligned(fileLines, fileHashes, \"fmtMismatch\");\n\treturn [\n\t\tformatNotFoundMismatches(mismatches, filePath),\n\t\tformatAmbiguousMismatches(mismatches, fileLines, fileHashes, filePath),\n\t]\n\t\t.filter((section): section is string => section !== undefined)\n\t\t.join(\"\\n\\n\");\n}\n\nconst ITEM_KS = new Set([\"hash_range_inclusive\", \"content_lines\"]);\n\nfunction isStrArr(value: unknown): value is string[] {\n\treturn Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n\nfunction isStrPair(value: unknown): value is [string, string] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((item) => typeof item === \"string\");\n}\n\nfunction assertItem(edit: Record<string, unknown>, index: number): void {\n\trejectUnknownFields(edit, ITEM_KS, `Edit ${index}`, \"Each edit takes only { hash_range_inclusive, content_lines }.\");\n\n\tif (\"hash_range_inclusive\" in edit && !isStrPair(edit.hash_range_inclusive)) {\n\t\tthrow new Error(\n\t\t\t`[E_BAD_SHAPE] Edit ${index} field \"hash_range_inclusive\" must be a pair of anchor strings [start, end].`,\n\t\t);\n\t}\n\tif (!(\"content_lines\" in edit)) {\n\t\tthrow new Error(\n\t\t\t`[E_BAD_SHAPE] Edit ${index} requires a \"content_lines\" field. Provide the replacement lines (use [] to delete).`,\n\t\t);\n\t}\n\tif (\"content_lines\" in edit && !isStrArr(edit.content_lines)) {\n\t\tthrow new Error(`[E_BAD_SHAPE] Edit ${index} field \"content_lines\" must be a string array.`);\n\t}\n\tif (!isStrPair(edit.hash_range_inclusive)) {\n\t\tthrow new Error(\n\t\t\t`[E_BAD_SHAPE] Edit ${index} requires an \"hash_range_inclusive\" pair of anchor strings [start, end].`,\n\t\t);\n\t}\n}\n\nexport function resEdits(edits: HTEdit[]): HEdit[] {\n\tconst result: HEdit[] = [];\n\tfor (const [index, edit] of edits.entries()) {\n\t\tassertItem(edit as Record<string, unknown>, index);\n\n\t\tconst replaceLines = parseText(edit.content_lines);\n\t\tresult.push({\n\t\t\thash_range_inclusive: [parseHashRef(edit.hash_range_inclusive[0]), parseHashRef(edit.hash_range_inclusive[1])],\n\t\t\tcontent_lines: replaceLines,\n\t\t});\n\t}\n\treturn result;\n}\n\nfunction warnUnicodeEsc(edits: HEdit[], warnings: string[]): void {\n\tfor (const edit of edits) {\n\t\tif (edit.content_lines.some((line) => /\\\\uDDDD/i.test(line))) {\n\t\t\twarnings.push(\n\t\t\t\t\"Detected literal \\\\uDDDD in edit content; no autocorrection applied. Verify whether this should be a real Unicode escape or plain text.\",\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function assertNoBarePrefix(edits: HEdit[], _fileLines: string[], fileHashes: string[]): void {\n\tconst suspects: { line: string; hash: string; editIndex: number; lineIndex: number }[] = [];\n\tfor (let editIndex = 0; editIndex < edits.length; editIndex++) {\n\t\tconst edit = edits[editIndex]!;\n\t\tfor (let lineIndex = 0; lineIndex < edit.content_lines.length; lineIndex++) {\n\t\t\tconst line = edit.content_lines[lineIndex]!;\n\t\t\tconst match = line.match(HL_BARE_PREFIX_RE);\n\t\t\tif (match) suspects.push({ line, hash: match[1]!, editIndex, lineIndex });\n\t\t}\n\t}\n\tif (suspects.length === 0) return;\n\tconst locations = suspects.map((s) => `edit ${s.editIndex}, content_lines[${s.lineIndex}]`).join(\"; \");\n\n\tconst fileHashSet = new Set(fileHashes);\n\tconst matched = suspects.filter((s) => fileHashSet.has(s.hash));\n\tconst matchedCount = matched.length;\n\n\tconst exampleLine = `${suspects[0]!.hash}│${suspects[0]!.line}`;\n\n\tconst linesHint =\n\t\tmatchedCount === 0\n\t\t\t? `None match file line hashes.`\n\t\t\t: `${matchedCount} match file line hashes — strong evidence the prefix was copied from read output.`;\n\n\tthrow new Error(\n\t\t`[E_BARE_HASH_PREFIX] ${suspects.length} edit line(s) start with a hash-like prefix (${locations}). Example: ${JSON.stringify(exampleLine)}. ${linesHint} Remove the \"HASH│\" prefix from each affected content_lines entry; keep only the literal line content that appears after \"│\" in read output. Remember: hash_range_inclusive uses hash anchors, content_lines uses file content only.`,\n\t);\n}\n\nexport function descEdit(edit: RHEdit): string {\n\treturn `replace ${edit.hash_range_inclusive[0].hash}-${edit.hash_range_inclusive[1].hash}`;\n}\n\nfunction checkBoundaryDup(\n\tadjacentLine: string | undefined,\n\treplacementEdge: string | undefined,\n\tkind: BoundaryDuplicateKind,\n\tsurvivingLineIndex: number,\n\tfileLines: string[],\n\teditIndex: number,\n): BDupWarn | null {\n\tif (\n\t\tadjacentLine === undefined ||\n\t\treplacementEdge === undefined ||\n\t\treplacementEdge.length === 0 ||\n\t\treplacementEdge !== adjacentLine\n\t)\n\t\treturn null;\n\treturn {\n\t\tkind,\n\t\tsurvivingLineContent: adjacentLine,\n\t\tsurvivingLineIndex,\n\t\toccurrence: fileLines.slice(0, survivingLineIndex).filter((l) => l === adjacentLine).length,\n\t\treplacementLineContent: replacementEdge,\n\t\teditIndex,\n\t};\n}\n\nexport function valEdits(\n\tedits: HEdit[],\n\tfileLines: string[],\n\tfileHashes: string[],\n\t_warnings: string[],\n\tsignal: AbortSignal | undefined,\n): EditValidationResult {\n\tassertAligned(fileLines, fileHashes, \"valEdits\");\n\tconst resolved: RHEdit[] = [];\n\tconst mismatches: HMismatch[] = [];\n\tconst boundaryWarnings: BDupWarn[] = [];\n\n\tconst tryResolve = (ref: Anchor): RAnchor | undefined => {\n\t\tconst result = resAnchor(ref, fileLines, fileHashes);\n\t\tif (\"kind\" in result) {\n\t\t\tmismatches.push(result);\n\t\t\treturn undefined;\n\t\t}\n\t\treturn result;\n\t};\n\n\tfor (const edit of edits) {\n\t\tabortIf(signal);\n\t\tconst startResolved = tryResolve(edit.hash_range_inclusive[0]);\n\t\tconst endResolved = tryResolve(edit.hash_range_inclusive[1]);\n\t\tif (!startResolved || !endResolved) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (startResolved.line > endResolved.line) {\n\t\t\tthrow new Error(\n\t\t\t\t`[E_BAD_OP] Range start line ${startResolved.line} must be <= end line ${endResolved.line} (anchors ${edit.hash_range_inclusive[0].hash} and ${edit.hash_range_inclusive[1].hash}).`,\n\t\t\t);\n\t\t}\n\t\tconst endLine = endResolved.line;\n\t\tconst nextLine = fileLines[endLine];\n\t\tconst replacementLastLine = edit.content_lines.at(-1);\n\t\tconst trailing = checkBoundaryDup(nextLine, replacementLastLine, \"trailing\", endLine, fileLines, resolved.length);\n\t\tif (trailing) boundaryWarnings.push(trailing);\n\t\tconst prevLine = fileLines[startResolved.line - 2];\n\t\tconst replacementFirstLine = edit.content_lines[0];\n\t\tconst leading = checkBoundaryDup(\n\t\t\tprevLine,\n\t\t\treplacementFirstLine,\n\t\t\t\"leading\",\n\t\t\tstartResolved.line - 2,\n\t\t\tfileLines,\n\t\t\tresolved.length,\n\t\t);\n\t\tif (leading) boundaryWarnings.push(leading);\n\t\tresolved.push({\n\t\t\thash_range_inclusive: [startResolved, endResolved],\n\t\t\tcontent_lines: edit.content_lines,\n\t\t});\n\t}\n\n\treturn { resolved, mismatches, boundaryWarnings };\n}\n\nexport { warnUnicodeEsc };\n"]}
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/core/tools/hashline/resolve.ts"],"names":[],"mappings":"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","sourcesContent":["import { rejectUnknownFields } from \"../hashline-utils.ts\";\nimport { abortIf } from \"../runtime.ts\";\nimport { HL_BARE_PREFIX_RE } from \"./hash.ts\";\nimport { type Anchor, parseHashRef, parseText } from \"./parse.ts\";\n\nexport type RAnchor = {\n\tline: number;\n\thash: string;\n\thashMatched: boolean;\n};\n\nexport type HEdit = { hash_range_inclusive: [Anchor, Anchor]; content_lines: string[] };\nexport type RHEdit = {\n\thash_range_inclusive: [RAnchor, RAnchor];\n\tcontent_lines: string[];\n};\n\ntype HashAnchorMismatchKind = \"not_found\" | \"ambiguous\";\nexport type BoundaryDuplicateKind = \"trailing\" | \"leading\";\n\ninterface HMismatch {\n\tref: Anchor;\n\tkind: HashAnchorMismatchKind;\n\tcandidates?: number[];\n}\n\nexport interface BDupWarn {\n\tkind: BoundaryDuplicateKind;\n\tsurvivingLineContent: string;\n\tsurvivingLineIndex: number;\n\toccurrence: number;\n\treplacementLineContent: string;\n\teditIndex: number;\n}\ninterface EditValidationResult {\n\tresolved: RHEdit[];\n\tmismatches: HMismatch[];\n\tboundaryWarnings: BDupWarn[];\n}\n\nexport interface NEdit {\n\teditIndex: number;\n\tloc: string;\n\tcurrentContent: string;\n}\n\nexport type HTEdit = {\n\thash_range_inclusive: [string, string];\n\tcontent_lines: string[];\n};\n\nfunction resAnchor(ref: Anchor, _fileLines: string[], fileHashes: string[]): RAnchor | HMismatch {\n\tconst hashMatches: number[] = [];\n\tfor (let i = 0; i < fileHashes.length; i++) {\n\t\tif (fileHashes[i] === ref.hash) hashMatches.push(i + 1);\n\t}\n\tif (hashMatches.length === 0) {\n\t\treturn { ref, kind: \"not_found\" };\n\t}\n\tif (hashMatches.length === 1) {\n\t\treturn {\n\t\t\tline: hashMatches[0]!,\n\t\t\thash: ref.hash,\n\t\t\thashMatched: true,\n\t\t};\n\t}\n\treturn { ref, kind: \"ambiguous\", candidates: hashMatches };\n}\n\nfunction assertAligned(fileLines: string[], fileHashes: string[], ctx: string): void {\n\tif (fileHashes.length !== fileLines.length) {\n\t\tthrow new Error(\n\t\t\t`${ctx}: fileHashes.length (${fileHashes.length}) must match fileLines.length (${fileLines.length}).`,\n\t\t);\n\t}\n}\n\nfunction formatNotFoundMismatches(mismatches: HMismatch[], filePath: string | undefined): string | undefined {\n\tconst notFound = mismatches.filter((mismatch) => mismatch.kind === \"not_found\");\n\tif (notFound.length === 0) return undefined;\n\tconst references = notFound.map((mismatch) => `\"${mismatch.ref.hash}\"`).join(\", \");\n\treturn `[E_STALE_ANCHOR] ${notFound.length} stale anchor${notFound.length > 1 ? \"s\" : \"\"}${filePath ? ` in ${filePath}` : \"\"}: ${references}. Call read() to get fresh anchors, then copy the 3-char HASH of the start and end of the range you are replacing into hash_range_inclusive of your next replace call.`;\n}\n\nfunction formatAmbiguousMismatchDetail(mismatch: HMismatch, fileLines: string[], fileHashes: string[]): string {\n\tconst sample = (mismatch.candidates ?? []).slice(0, 5);\n\tconst candidateCount = mismatch.candidates?.length ?? 0;\n\tconst more = candidateCount > sample.length ? `, ... (+${candidateCount - sample.length} more)` : \"\";\n\tconst lines = sample\n\t\t.map((line) => {\n\t\t\tconst content = fileLines[line - 1] ?? \"\";\n\t\t\treturn ` ${line}: ${fileHashes[line - 1]}│${content}`;\n\t\t})\n\t\t.join(\"\\n\");\n\treturn ` Hash \"${mismatch.ref.hash}\" matches lines ${sample.join(\", \")}${more}.\\n${lines}`;\n}\n\nfunction formatAmbiguousMismatches(\n\tmismatches: HMismatch[],\n\tfileLines: string[],\n\tfileHashes: string[],\n\tfilePath: string | undefined,\n): string | undefined {\n\tconst ambiguous = mismatches.filter((mismatch) => mismatch.kind === \"ambiguous\");\n\tif (ambiguous.length === 0) return undefined;\n\tconst header = `[E_AMBIGUOUS_ANCHOR] ${ambiguous.length} ambiguous anchor${ambiguous.length > 1 ? \"s\" : \"\"}${filePath ? ` in ${filePath}` : \"\"}. Call read() to get fresh anchors, then copy the 3-char HASH of the start and end of the range you are replacing into hash_range_inclusive of your next replace call.`;\n\treturn [header, ...ambiguous.map((mismatch) => formatAmbiguousMismatchDetail(mismatch, fileLines, fileHashes))].join(\n\t\t\"\\n\",\n\t);\n}\n\nexport function fmtMismatch(\n\tmismatches: HMismatch[],\n\tfileLines: string[],\n\tfileHashes: string[],\n\tfilePath?: string,\n): string {\n\tassertAligned(fileLines, fileHashes, \"fmtMismatch\");\n\treturn [\n\t\tformatNotFoundMismatches(mismatches, filePath),\n\t\tformatAmbiguousMismatches(mismatches, fileLines, fileHashes, filePath),\n\t]\n\t\t.filter((section): section is string => section !== undefined)\n\t\t.join(\"\\n\\n\");\n}\n\nconst ITEM_KS = new Set([\"hash_range_inclusive\", \"content_lines\"]);\n\nfunction isStrArr(value: unknown): value is string[] {\n\treturn Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n\nfunction isStrPair(value: unknown): value is [string, string] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((item) => typeof item === \"string\");\n}\n\nfunction assertItem(edit: Record<string, unknown>, index: number): void {\n\trejectUnknownFields(edit, ITEM_KS, `Edit ${index}`, \"Each edit takes only { hash_range_inclusive, content_lines }.\");\n\n\tif (\"hash_range_inclusive\" in edit && !isStrPair(edit.hash_range_inclusive)) {\n\t\tthrow new Error(\n\t\t\t`[E_BAD_SHAPE] Edit ${index} field \"hash_range_inclusive\" must be a pair of anchor strings [start, end].`,\n\t\t);\n\t}\n\tif (!(\"content_lines\" in edit)) {\n\t\tthrow new Error(\n\t\t\t`[E_BAD_SHAPE] Edit ${index} requires a \"content_lines\" field. Provide the replacement lines (use [] to delete).`,\n\t\t);\n\t}\n\tif (\"content_lines\" in edit && !isStrArr(edit.content_lines)) {\n\t\tthrow new Error(`[E_BAD_SHAPE] Edit ${index} field \"content_lines\" must be a string array.`);\n\t}\n\tif (!isStrPair(edit.hash_range_inclusive)) {\n\t\tthrow new Error(\n\t\t\t`[E_BAD_SHAPE] Edit ${index} requires an \"hash_range_inclusive\" pair of anchor strings [start, end].`,\n\t\t);\n\t}\n}\n\nexport function resEdits(edits: HTEdit[]): HEdit[] {\n\tconst result: HEdit[] = [];\n\tfor (const [index, edit] of edits.entries()) {\n\t\tassertItem(edit as Record<string, unknown>, index);\n\n\t\tconst replaceLines = parseText(edit.content_lines);\n\t\tresult.push({\n\t\t\thash_range_inclusive: [parseHashRef(edit.hash_range_inclusive[0]), parseHashRef(edit.hash_range_inclusive[1])],\n\t\t\tcontent_lines: replaceLines,\n\t\t});\n\t}\n\treturn result;\n}\n\nfunction warnUnicodeEsc(edits: HEdit[], warnings: string[]): void {\n\tfor (const edit of edits) {\n\t\tif (edit.content_lines.some((line) => /\\\\uDDDD/i.test(line))) {\n\t\t\twarnings.push(\n\t\t\t\t\"Detected literal \\\\uDDDD in edit content; no autocorrection applied. Verify whether this should be a real Unicode escape or plain text.\",\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function assertNoBarePrefix(edits: HEdit[], _fileLines: string[], fileHashes: string[]): void {\n\tconst suspects: { line: string; hash: string; editIndex: number; lineIndex: number }[] = [];\n\tfor (let editIndex = 0; editIndex < edits.length; editIndex++) {\n\t\tconst edit = edits[editIndex]!;\n\t\tfor (let lineIndex = 0; lineIndex < edit.content_lines.length; lineIndex++) {\n\t\t\tconst line = edit.content_lines[lineIndex]!;\n\t\t\tconst match = line.match(HL_BARE_PREFIX_RE);\n\t\t\tif (match) suspects.push({ line, hash: match[1]!, editIndex, lineIndex });\n\t\t}\n\t}\n\tif (suspects.length === 0) return;\n\tconst locations = suspects.map((s) => `edit ${s.editIndex}, content_lines[${s.lineIndex}]`).join(\"; \");\n\n\tconst fileHashSet = new Set(fileHashes);\n\tconst matched = suspects.filter((s) => fileHashSet.has(s.hash));\n\tconst matchedCount = matched.length;\n\n\tconst exampleLine = `${suspects[0]!.hash}│${suspects[0]!.line}`;\n\n\tconst linesHint =\n\t\tmatchedCount === 0\n\t\t\t? `None match file line hashes.`\n\t\t\t: `${matchedCount} match file line hashes — strong evidence the prefix was copied from read output.`;\n\n\tthrow new Error(\n\t\t`[E_BARE_HASH_PREFIX] ${suspects.length} edit line(s) start with a hash-like prefix (${locations}). Example: ${JSON.stringify(exampleLine)}. ${linesHint} Remove the \"HASH│\" prefix from each affected content_lines entry; keep only the literal line content that appears after \"│\" in read output. Remember: hash_range_inclusive uses hash anchors, content_lines uses file content only.`,\n\t);\n}\n\nexport function descEdit(edit: RHEdit): string {\n\treturn `replace ${edit.hash_range_inclusive[0].hash}-${edit.hash_range_inclusive[1].hash}`;\n}\n\nfunction checkBoundaryDup(\n\tadjacentLine: string | undefined,\n\treplacementEdge: string | undefined,\n\tkind: BoundaryDuplicateKind,\n\tsurvivingLineIndex: number,\n\tfileLines: string[],\n\teditIndex: number,\n): BDupWarn | null {\n\tif (\n\t\tadjacentLine === undefined ||\n\t\treplacementEdge === undefined ||\n\t\treplacementEdge.length === 0 ||\n\t\treplacementEdge !== adjacentLine\n\t)\n\t\treturn null;\n\treturn {\n\t\tkind,\n\t\tsurvivingLineContent: adjacentLine,\n\t\tsurvivingLineIndex,\n\t\toccurrence: fileLines.slice(0, survivingLineIndex).filter((l) => l === adjacentLine).length,\n\t\treplacementLineContent: replacementEdge,\n\t\teditIndex,\n\t};\n}\n\nexport function valEdits(\n\tedits: HEdit[],\n\tfileLines: string[],\n\tfileHashes: string[],\n\t_warnings: string[],\n\tsignal: AbortSignal | undefined,\n): EditValidationResult {\n\tassertAligned(fileLines, fileHashes, \"valEdits\");\n\tconst resolved: RHEdit[] = [];\n\tconst mismatches: HMismatch[] = [];\n\tconst boundaryWarnings: BDupWarn[] = [];\n\n\tconst tryResolve = (ref: Anchor): RAnchor | undefined => {\n\t\tconst result = resAnchor(ref, fileLines, fileHashes);\n\t\tif (\"kind\" in result) {\n\t\t\tmismatches.push(result);\n\t\t\treturn undefined;\n\t\t}\n\t\treturn result;\n\t};\n\n\tfor (const edit of edits) {\n\t\tabortIf(signal);\n\t\tconst startResolved = tryResolve(edit.hash_range_inclusive[0]);\n\t\tconst endResolved = tryResolve(edit.hash_range_inclusive[1]);\n\t\tif (!startResolved || !endResolved) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (startResolved.line > endResolved.line) {\n\t\t\tthrow new Error(\n\t\t\t\t`[E_BAD_OP] Range start line ${startResolved.line} must be <= end line ${endResolved.line} (anchors ${edit.hash_range_inclusive[0].hash} and ${edit.hash_range_inclusive[1].hash}).`,\n\t\t\t);\n\t\t}\n\t\tconst endLine = endResolved.line;\n\t\tconst nextLine = fileLines[endLine];\n\t\tconst replacementLastLine = edit.content_lines.at(-1);\n\t\tconst trailing = checkBoundaryDup(nextLine, replacementLastLine, \"trailing\", endLine, fileLines, resolved.length);\n\t\tif (trailing) boundaryWarnings.push(trailing);\n\t\tconst prevLine = fileLines[startResolved.line - 2];\n\t\tconst replacementFirstLine = edit.content_lines[0];\n\t\tconst leading = checkBoundaryDup(\n\t\t\tprevLine,\n\t\t\treplacementFirstLine,\n\t\t\t\"leading\",\n\t\t\tstartResolved.line - 2,\n\t\t\tfileLines,\n\t\t\tresolved.length,\n\t\t);\n\t\tif (leading) boundaryWarnings.push(leading);\n\t\tresolved.push({\n\t\t\thash_range_inclusive: [startResolved, endResolved],\n\t\t\tcontent_lines: edit.content_lines,\n\t\t});\n\t}\n\n\treturn { resolved, mismatches, boundaryWarnings };\n}\n\nexport { warnUnicodeEsc };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashline-utils.d.ts","sourceRoot":"","sources":["../../../src/core/tools/hashline-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtE;AAED,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI/C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACX,IAAI,CAMN"
|
|
1
|
+
{"version":3,"file":"hashline-utils.d.ts","sourceRoot":"","sources":["../../../src/core/tools/hashline-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtE;AAED,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI/C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACX,IAAI,CAMN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashline-utils.js","sourceRoot":"","sources":["../../../src/core/tools/hashline-utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,KAAc
|
|
1
|
+
{"version":3,"file":"hashline-utils.js","sourceRoot":"","sources":["../../../src/core/tools/hashline-utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,MAA+B,EAAE,GAAW;IAC/D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,GAA4B,EAC5B,OAAoB,EACpB,KAAa,EACb,IAAa;IAEb,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,4CAA4C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IACnH,CAAC;AACF,CAAC","sourcesContent":["export function isRec(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function has(record: Record<string, unknown>, key: string): boolean {\n\treturn Object.hasOwn(record, key);\n}\n\nexport function visLines(text: string): string[] {\n\tif (text.length === 0) return [];\n\tconst lines = text.split(\"\\n\");\n\treturn text.endsWith(\"\\n\") ? lines.slice(0, -1) : lines;\n}\n\nexport function cntLines(text: string): number {\n\treturn visLines(text).length;\n}\n\nexport function rejectUnknownFields(\n\tobj: Record<string, unknown>,\n\tallowed: Set<string>,\n\tlabel: string,\n\thint?: string,\n): void {\n\tconst unknown = Object.keys(obj).filter((key) => !allowed.has(key));\n\tif (unknown.length > 0) {\n\t\tconst suffix = hint ? ` ${hint}` : \"\";\n\t\tthrow new Error(`[E_BAD_SHAPE] ${label} contains unknown or unsupported fields: ${unknown.join(\", \")}.${suffix}`);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,KAAK,eAAe,EAA4C,MAAM,WAAW,CAAC;AAC3F,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAON,KAAK,mBAAmB,EACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsD,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC/G,OAAO,EAA8C,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/F,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAClC,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/C,MAAM,MAAM,QAAQ,GACjB,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,UAAU,GACV,eAAe,GACf,iBAAiB,GACjB,WAAW,CAAC;AACf,eAAO,MAAM,YAAY,EAAE,GAAG,CAAC,QAAQ,CAYrC,CAAC;AAEH,MAAM,WAAW,YAAY;IAC5B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,EAAE,CAAC,EAAE,aAAa,CAAC;IACnB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,SAAS,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CA2BpH;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CA2BvG;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,EAAE,CAOzG;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,EAAE,CAO3G;AAED,wBAAgB,wBAAwB,CACvC,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,YAAY,GACpB,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAc3B;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,CAO5F;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,CAO9F;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAczG"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,KAAK,eAAe,EAA4C,MAAM,WAAW,CAAC;AAC3F,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAON,KAAK,mBAAmB,EACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsD,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC/G,OAAO,EAA8C,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/F,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAClC,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/C,MAAM,MAAM,QAAQ,GACjB,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,UAAU,GACV,eAAe,GACf,iBAAiB,GACjB,WAAW,CAAC;AACf,eAAO,MAAM,YAAY,EAAE,GAAG,CAAC,QAAQ,CAYrC,CAAC;AAEH,MAAM,WAAW,YAAY;IAC5B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,EAAE,CAAC,EAAE,aAAa,CAAC;IACnB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,SAAS,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CA2BpH;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CA2BvG;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,EAAE,CAOzG;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,EAAE,CAO3G;AAED,wBAAgB,wBAAwB,CACvC,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,YAAY,GACpB,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAc3B;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,CAO5F;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,CAO9F;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAczG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/tools/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@greppleai/grip-agent-core\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport { type BashToolOptions, createBashTool, createBashToolDefinition } from \"./bash.ts\";\nimport { createEditTool, createEditToolDefinition, type EditToolOptions } from \"./edit.ts\";\nimport { createFindTool, createFindToolDefinition, type FindToolOptions } from \"./find.ts\";\nimport { createGrepTool, createGrepToolDefinition, type GrepToolOptions } from \"./grep.ts\";\nimport { createLsTool, createLsToolDefinition, type LsToolOptions } from \"./ls.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\nimport { createReadTool, createReadToolDefinition, type ReadToolOptions } from \"./read.ts\";\nimport {\n\tcreateCreateSubagentTool,\n\tcreateCreateSubagentToolDefinition,\n\tcreateSubagentRunsTool,\n\tcreateSubagentRunsToolDefinition,\n\tcreateSubagentTool,\n\tcreateSubagentToolDefinition,\n\ttype SubagentToolOptions,\n} from \"./subagent.ts\";\nimport { createWebsearchTool, createWebsearchToolDefinition, type WebsearchToolOptions } from \"./websearch.ts\";\nimport { createWriteTool, createWriteToolDefinition, type WriteToolOptions } from \"./write.ts\";\n\nexport type Tool = AgentTool<any>;\nexport type ToolDef = ToolDefinition<any, any>;\nexport type ToolName =\n\t| \"read\"\n\t| \"bash\"\n\t| \"edit\"\n\t| \"write\"\n\t| \"grep\"\n\t| \"find\"\n\t| \"ls\"\n\t| \"subagent\"\n\t| \"subagent_runs\"\n\t| \"create_subagent\"\n\t| \"websearch\";\nexport const allToolNames: Set<ToolName> = new Set([\n\t\"read\",\n\t\"bash\",\n\t\"edit\",\n\t\"write\",\n\t\"grep\",\n\t\"find\",\n\t\"ls\",\n\t\"subagent\",\n\t\"subagent_runs\",\n\t\"create_subagent\",\n\t\"websearch\",\n]);\n\nexport interface ToolsOptions {\n\tread?: ReadToolOptions;\n\tbash?: BashToolOptions;\n\twrite?: WriteToolOptions;\n\tedit?: EditToolOptions;\n\tgrep?: GrepToolOptions;\n\tfind?: FindToolOptions;\n\tls?: LsToolOptions;\n\tsubagent?: SubagentToolOptions;\n\twebsearch?: WebsearchToolOptions;\n}\n\nexport function createToolDefinition(toolName: ToolName, operations: ToolOperations, options?: ToolsOptions): ToolDef {\n\tswitch (toolName) {\n\t\tcase \"read\":\n\t\t\treturn createReadToolDefinition(operations, options?.read);\n\t\tcase \"bash\":\n\t\t\treturn createBashToolDefinition(operations, options?.bash);\n\t\tcase \"edit\":\n\t\t\treturn createEditToolDefinition(operations, options?.edit);\n\t\tcase \"write\":\n\t\t\treturn createWriteToolDefinition(operations, options?.write);\n\t\tcase \"grep\":\n\t\t\treturn createGrepToolDefinition(operations, options?.grep);\n\t\tcase \"find\":\n\t\t\treturn createFindToolDefinition(operations, options?.find);\n\t\tcase \"ls\":\n\t\t\treturn createLsToolDefinition(operations, options?.ls);\n\t\tcase \"subagent\":\n\t\t\treturn createSubagentToolDefinition(options?.subagent);\n\t\tcase \"subagent_runs\":\n\t\t\treturn createSubagentRunsToolDefinition(options?.subagent?.runRegistry);\n\t\tcase \"create_subagent\":\n\t\t\treturn createCreateSubagentToolDefinition(options?.subagent?.configRegistry);\n\t\tcase \"websearch\":\n\t\t\treturn createWebsearchToolDefinition(options?.websearch);\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown tool name: ${toolName}`);\n\t}\n}\n\nexport function createTool(toolName: ToolName, operations: ToolOperations, options?: ToolsOptions): Tool {\n\tswitch (toolName) {\n\t\tcase \"read\":\n\t\t\treturn createReadTool(operations, options?.read);\n\t\tcase \"bash\":\n\t\t\treturn createBashTool(operations, options?.bash);\n\t\tcase \"edit\":\n\t\t\treturn createEditTool(operations, options?.edit);\n\t\tcase \"write\":\n\t\t\treturn createWriteTool(operations, options?.write);\n\t\tcase \"grep\":\n\t\t\treturn createGrepTool(operations, options?.grep);\n\t\tcase \"find\":\n\t\t\treturn createFindTool(operations, options?.find);\n\t\tcase \"ls\":\n\t\t\treturn createLsTool(operations, options?.ls);\n\t\tcase \"subagent\":\n\t\t\treturn createSubagentTool(options?.subagent);\n\t\tcase \"subagent_runs\":\n\t\t\treturn createSubagentRunsTool(options?.subagent?.runRegistry);\n\t\tcase \"create_subagent\":\n\t\t\treturn createCreateSubagentTool(options?.subagent?.configRegistry);\n\t\tcase \"websearch\":\n\t\t\treturn createWebsearchTool(options?.websearch);\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown tool name: ${toolName}`);\n\t}\n}\n\nexport function createCodingToolDefinitions(operations: ToolOperations, options?: ToolsOptions): ToolDef[] {\n\treturn [\n\t\tcreateReadToolDefinition(operations, options?.read),\n\t\tcreateBashToolDefinition(operations, options?.bash),\n\t\tcreateEditToolDefinition(operations, options?.edit),\n\t\tcreateWriteToolDefinition(operations, options?.write),\n\t];\n}\n\nexport function createReadOnlyToolDefinitions(operations: ToolOperations, options?: ToolsOptions): ToolDef[] {\n\treturn [\n\t\tcreateReadToolDefinition(operations, options?.read),\n\t\tcreateGrepToolDefinition(operations, options?.grep),\n\t\tcreateFindToolDefinition(operations, options?.find),\n\t\tcreateLsToolDefinition(operations, options?.ls),\n\t];\n}\n\nexport function createAllToolDefinitions(\n\toperations: ToolOperations,\n\toptions?: ToolsOptions,\n): Record<ToolName, ToolDef> {\n\treturn {\n\t\tread: createReadToolDefinition(operations, options?.read),\n\t\tbash: createBashToolDefinition(operations, options?.bash),\n\t\tedit: createEditToolDefinition(operations, options?.edit),\n\t\twrite: createWriteToolDefinition(operations, options?.write),\n\t\tgrep: createGrepToolDefinition(operations, options?.grep),\n\t\tfind: createFindToolDefinition(operations, options?.find),\n\t\tls: createLsToolDefinition(operations, options?.ls),\n\t\tsubagent: createSubagentToolDefinition(options?.subagent),\n\t\tsubagent_runs: createSubagentRunsToolDefinition(options?.subagent?.runRegistry),\n\t\tcreate_subagent: createCreateSubagentToolDefinition(options?.subagent?.configRegistry),\n\t\twebsearch: createWebsearchToolDefinition(options?.websearch),\n\t};\n}\n\nexport function createCodingTools(operations: ToolOperations, options?: ToolsOptions): Tool[] {\n\treturn [\n\t\tcreateReadTool(operations, options?.read),\n\t\tcreateBashTool(operations, options?.bash),\n\t\tcreateEditTool(operations, options?.edit),\n\t\tcreateWriteTool(operations, options?.write),\n\t];\n}\n\nexport function createReadOnlyTools(operations: ToolOperations, options?: ToolsOptions): Tool[] {\n\treturn [\n\t\tcreateReadTool(operations, options?.read),\n\t\tcreateGrepTool(operations, options?.grep),\n\t\tcreateFindTool(operations, options?.find),\n\t\tcreateLsTool(operations, options?.ls),\n\t];\n}\n\nexport function createAllTools(operations: ToolOperations, options?: ToolsOptions): Record<ToolName, Tool> {\n\treturn {\n\t\tread: createReadTool(operations, options?.read),\n\t\tbash: createBashTool(operations, options?.bash),\n\t\tedit: createEditTool(operations, options?.edit),\n\t\twrite: createWriteTool(operations, options?.write),\n\t\tgrep: createGrepTool(operations, options?.grep),\n\t\tfind: createFindTool(operations, options?.find),\n\t\tls: createLsTool(operations, options?.ls),\n\t\tsubagent: createSubagentTool(options?.subagent),\n\t\tsubagent_runs: createSubagentRunsTool(options?.subagent?.runRegistry),\n\t\tcreate_subagent: createCreateSubagentTool(options?.subagent?.configRegistry),\n\t\twebsearch: createWebsearchTool(options?.websearch),\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/tools/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@greppleai/grip-agent-core\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport { type BashToolOptions, createBashTool, createBashToolDefinition } from \"./bash.ts\";\nimport { createEditTool, createEditToolDefinition, type EditToolOptions } from \"./edit.ts\";\nimport { createFindTool, createFindToolDefinition, type FindToolOptions } from \"./find.ts\";\nimport { createGrepTool, createGrepToolDefinition, type GrepToolOptions } from \"./grep.ts\";\nimport { createLsTool, createLsToolDefinition, type LsToolOptions } from \"./ls.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\nimport { createReadTool, createReadToolDefinition, type ReadToolOptions } from \"./read.ts\";\nimport {\n\tcreateCreateSubagentTool,\n\tcreateCreateSubagentToolDefinition,\n\tcreateSubagentRunsTool,\n\tcreateSubagentRunsToolDefinition,\n\tcreateSubagentTool,\n\tcreateSubagentToolDefinition,\n\ttype SubagentToolOptions,\n} from \"./subagent.ts\";\nimport { createWebsearchTool, createWebsearchToolDefinition, type WebsearchToolOptions } from \"./websearch.ts\";\nimport { createWriteTool, createWriteToolDefinition, type WriteToolOptions } from \"./write.ts\";\n\nexport type Tool = AgentTool<any>;\nexport type ToolDef = ToolDefinition<any, any>;\nexport type ToolName =\n\t| \"read\"\n\t| \"bash\"\n\t| \"edit\"\n\t| \"write\"\n\t| \"grep\"\n\t| \"find\"\n\t| \"ls\"\n\t| \"subagent\"\n\t| \"subagent_runs\"\n\t| \"create_subagent\"\n\t| \"websearch\";\nexport const allToolNames: Set<ToolName> = new Set([\n\t\"read\",\n\t\"bash\",\n\t\"edit\",\n\t\"write\",\n\t\"grep\",\n\t\"find\",\n\t\"ls\",\n\t\"subagent\",\n\t\"subagent_runs\",\n\t\"create_subagent\",\n\t\"websearch\",\n]);\n\nexport interface ToolsOptions {\n\tread?: ReadToolOptions;\n\tbash?: BashToolOptions;\n\twrite?: WriteToolOptions;\n\tedit?: EditToolOptions;\n\tgrep?: GrepToolOptions;\n\tfind?: FindToolOptions;\n\tls?: LsToolOptions;\n\tsubagent?: SubagentToolOptions;\n\twebsearch?: WebsearchToolOptions;\n}\n\nexport function createToolDefinition(toolName: ToolName, operations: ToolOperations, options?: ToolsOptions): ToolDef {\n\tswitch (toolName) {\n\t\tcase \"read\":\n\t\t\treturn createReadToolDefinition(operations, options?.read);\n\t\tcase \"bash\":\n\t\t\treturn createBashToolDefinition(operations, options?.bash);\n\t\tcase \"edit\":\n\t\t\treturn createEditToolDefinition(operations, options?.edit);\n\t\tcase \"write\":\n\t\t\treturn createWriteToolDefinition(operations, options?.write);\n\t\tcase \"grep\":\n\t\t\treturn createGrepToolDefinition(operations, options?.grep);\n\t\tcase \"find\":\n\t\t\treturn createFindToolDefinition(operations, options?.find);\n\t\tcase \"ls\":\n\t\t\treturn createLsToolDefinition(operations, options?.ls);\n\t\tcase \"subagent\":\n\t\t\treturn createSubagentToolDefinition(options?.subagent);\n\t\tcase \"subagent_runs\":\n\t\t\treturn createSubagentRunsToolDefinition(options?.subagent?.runRegistry);\n\t\tcase \"create_subagent\":\n\t\t\treturn createCreateSubagentToolDefinition(options?.subagent?.configRegistry);\n\t\tcase \"websearch\":\n\t\t\treturn createWebsearchToolDefinition(options?.websearch);\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown tool name: ${toolName}`);\n\t}\n}\n\nexport function createTool(toolName: ToolName, operations: ToolOperations, options?: ToolsOptions): Tool {\n\tswitch (toolName) {\n\t\tcase \"read\":\n\t\t\treturn createReadTool(operations, options?.read);\n\t\tcase \"bash\":\n\t\t\treturn createBashTool(operations, options?.bash);\n\t\tcase \"edit\":\n\t\t\treturn createEditTool(operations, options?.edit);\n\t\tcase \"write\":\n\t\t\treturn createWriteTool(operations, options?.write);\n\t\tcase \"grep\":\n\t\t\treturn createGrepTool(operations, options?.grep);\n\t\tcase \"find\":\n\t\t\treturn createFindTool(operations, options?.find);\n\t\tcase \"ls\":\n\t\t\treturn createLsTool(operations, options?.ls);\n\t\tcase \"subagent\":\n\t\t\treturn createSubagentTool(options?.subagent);\n\t\tcase \"subagent_runs\":\n\t\t\treturn createSubagentRunsTool(options?.subagent?.runRegistry);\n\t\tcase \"create_subagent\":\n\t\t\treturn createCreateSubagentTool(options?.subagent?.configRegistry);\n\t\tcase \"websearch\":\n\t\t\treturn createWebsearchTool(options?.websearch);\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown tool name: ${toolName}`);\n\t}\n}\n\nexport function createCodingToolDefinitions(operations: ToolOperations, options?: ToolsOptions): ToolDef[] {\n\treturn [\n\t\tcreateReadToolDefinition(operations, options?.read),\n\t\tcreateBashToolDefinition(operations, options?.bash),\n\t\tcreateEditToolDefinition(operations, options?.edit),\n\t\tcreateWriteToolDefinition(operations, options?.write),\n\t];\n}\n\nexport function createReadOnlyToolDefinitions(operations: ToolOperations, options?: ToolsOptions): ToolDef[] {\n\treturn [\n\t\tcreateReadToolDefinition(operations, options?.read),\n\t\tcreateGrepToolDefinition(operations, options?.grep),\n\t\tcreateFindToolDefinition(operations, options?.find),\n\t\tcreateLsToolDefinition(operations, options?.ls),\n\t];\n}\n\nexport function createAllToolDefinitions(\n\toperations: ToolOperations,\n\toptions?: ToolsOptions,\n): Record<ToolName, ToolDef> {\n\treturn {\n\t\tread: createReadToolDefinition(operations, options?.read),\n\t\tbash: createBashToolDefinition(operations, options?.bash),\n\t\tedit: createEditToolDefinition(operations, options?.edit),\n\t\twrite: createWriteToolDefinition(operations, options?.write),\n\t\tgrep: createGrepToolDefinition(operations, options?.grep),\n\t\tfind: createFindToolDefinition(operations, options?.find),\n\t\tls: createLsToolDefinition(operations, options?.ls),\n\t\tsubagent: createSubagentToolDefinition(options?.subagent),\n\t\tsubagent_runs: createSubagentRunsToolDefinition(options?.subagent?.runRegistry),\n\t\tcreate_subagent: createCreateSubagentToolDefinition(options?.subagent?.configRegistry),\n\t\twebsearch: createWebsearchToolDefinition(options?.websearch),\n\t};\n}\n\nexport function createCodingTools(operations: ToolOperations, options?: ToolsOptions): Tool[] {\n\treturn [\n\t\tcreateReadTool(operations, options?.read),\n\t\tcreateBashTool(operations, options?.bash),\n\t\tcreateEditTool(operations, options?.edit),\n\t\tcreateWriteTool(operations, options?.write),\n\t];\n}\n\nexport function createReadOnlyTools(operations: ToolOperations, options?: ToolsOptions): Tool[] {\n\treturn [\n\t\tcreateReadTool(operations, options?.read),\n\t\tcreateGrepTool(operations, options?.grep),\n\t\tcreateFindTool(operations, options?.find),\n\t\tcreateLsTool(operations, options?.ls),\n\t];\n}\n\nexport function createAllTools(operations: ToolOperations, options?: ToolsOptions): Record<ToolName, Tool> {\n\treturn {\n\t\tread: createReadTool(operations, options?.read),\n\t\tbash: createBashTool(operations, options?.bash),\n\t\tedit: createEditTool(operations, options?.edit),\n\t\twrite: createWriteTool(operations, options?.write),\n\t\tgrep: createGrepTool(operations, options?.grep),\n\t\tfind: createFindTool(operations, options?.find),\n\t\tls: createLsTool(operations, options?.ls),\n\t\tsubagent: createSubagentTool(options?.subagent),\n\t\tsubagent_runs: createSubagentRunsTool(options?.subagent?.runRegistry),\n\t\tcreate_subagent: createCreateSubagentTool(options?.subagent?.configRegistry),\n\t\twebsearch: createWebsearchTool(options?.websearch),\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../../src/core/tools/ls.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;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWtD,OAAO,EAAiC,KAAK,gBAAgB,EAAgB,MAAM,eAAe,CAAC;AAEnG,QAAA,MAAM,QAAQ;;;EAGZ,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC;AAIlD,MAAM,WAAW,aAAa;IAC7B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;CAAG;AAmJjC,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC,CAAC;AAE1F,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAuB7G;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC,OAAO,QAAQ,CAAC,CAE5G"
|
|
1
|
+
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../../src/core/tools/ls.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;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWtD,OAAO,EAAiC,KAAK,gBAAgB,EAAgB,MAAM,eAAe,CAAC;AAEnG,QAAA,MAAM,QAAQ;;;EAGZ,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC;AAIlD,MAAM,WAAW,aAAa;IAC7B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;CAAG;AAmJjC,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC,CAAC;AAE1F,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAuB7G;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC,OAAO,QAAQ,CAAC,CAE5G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/core/tools/ls.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool, AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport { Text } from \"@greppleai/grip-tui\";\nimport nodePath from \"path\";\nimport { type Static, Type } from \"typebox\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../extensions/types.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\nimport { resolveToCwd } from \"./path-utils.ts\";\nimport {\n\tformatBackendIcon,\n\tformatHiddenLinesHint,\n\tgetTextOutput,\n\tinvalidArgText,\n\tshortenPath,\n\tstr,\n} from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\nimport { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from \"./truncate.ts\";\n\nconst lsSchema = Type.Object({\n\tpath: Type.Optional(Type.String({ description: \"Directory to list (default: current directory)\" })),\n\tlimit: Type.Optional(Type.Number({ description: \"Maximum number of entries to return (default: 500)\" })),\n});\n\nexport type LsToolInput = Static<typeof lsSchema>;\n\nconst DEFAULT_LIMIT = 500;\n\nexport interface LsToolDetails {\n\ttruncation?: TruncationResult;\n\tentryLimitReached?: number;\n}\n\nexport interface LsToolOptions {}\n\nfunction formatLsCall(args: Partial<LsToolInput> | undefined, theme: Theme): string {\n\tconst rawPath = str(args?.path);\n\tconst path = rawPath !== null ? shortenPath(rawPath || \".\") : null;\n\tconst limit = args?.limit;\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"ls\"))} ${path === null ? invalidArg : theme.fg(\"accent\", path)}`;\n\tif (limit !== undefined) {\n\t\ttext += theme.fg(\"toolOutput\", ` (limit ${limit})`);\n\t}\n\treturn text;\n}\n\nfunction formatLsResult(\n\tresult: AgentToolResult<LsToolDetails | undefined>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tshowImages: boolean,\n): string {\n\tconst output = getTextOutput(result, showImages).trim();\n\tlet text = \"\";\n\tif (output) {\n\t\tconst lines = output.split(\"\\n\");\n\t\tconst maxLines = options.expanded ? lines.length : 20;\n\t\tconst displayLines = lines.slice(0, maxLines);\n\t\tconst remaining = lines.length - maxLines;\n\t\ttext += `\\n${displayLines.map((line) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n\t\tif (remaining > 0) {\n\t\t\ttext += `\\n\\n${formatHiddenLinesHint(remaining, theme)}`;\n\t\t}\n\t}\n\n\tconst entryLimit = result.details?.entryLimitReached;\n\tconst truncation = result.details?.truncation;\n\tif (entryLimit || truncation?.truncated) {\n\t\tconst warnings: string[] = [];\n\t\tif (entryLimit) warnings.push(`${entryLimit} entries limit`);\n\t\tif (truncation?.truncated) warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);\n\t\ttext += `\\n${theme.fg(\"warning\", `[Truncated: ${warnings.join(\", \")}]`)}`;\n\t}\n\treturn text;\n}\ninterface DirectoryListingEntries {\n\tentries: string[];\n\tentryLimitReached: boolean;\n}\n\nasync function readDirectoryNames(dirPath: string, operations: ToolOperations): Promise<string[]> {\n\ttry {\n\t\treturn await operations.readdir(dirPath);\n\t} catch (error) {\n\t\tconst message =\n\t\t\ttypeof error === \"object\" && error !== null && \"message\" in error ? String(error.message) : \"undefined\";\n\t\tthrow new Error(`Cannot read directory: ${message}`);\n\t}\n}\n\nasync function collectDirectoryListingEntries(\n\tdirPath: string,\n\tnames: string[],\n\tlimit: number,\n\toperations: ToolOperations,\n): Promise<DirectoryListingEntries> {\n\tnames.sort((left, right) => left.toLowerCase().localeCompare(right.toLowerCase()));\n\tconst entries: string[] = [];\n\tfor (const name of names) {\n\t\tif (entries.length >= limit) return { entries, entryLimitReached: true };\n\t\ttry {\n\t\t\tconst entryStat = await operations.stat(nodePath.join(dirPath, name));\n\t\t\tentries.push(entryStat.isDirectory() ? `${name}/` : name);\n\t\t} catch {\n\t\t\t// Skip entries we cannot stat.\n\t\t}\n\t}\n\treturn { entries, entryLimitReached: false };\n}\n\nfunction formatDirectoryListingResult(\n\tlisting: DirectoryListingEntries,\n\tlimit: number,\n): AgentToolResult<LsToolDetails | undefined> {\n\tif (listing.entries.length === 0) {\n\t\treturn { content: [{ type: \"text\", text: \"(empty directory)\" }], details: undefined };\n\t}\n\tconst truncation = truncateHead(listing.entries.join(\"\\n\"), { maxLines: Number.MAX_SAFE_INTEGER });\n\tlet output = truncation.content;\n\tconst details: LsToolDetails = {};\n\tconst notices: string[] = [];\n\tif (listing.entryLimitReached) {\n\t\tnotices.push(`${limit} entries limit reached. Use limit=${limit * 2} for more`);\n\t\tdetails.entryLimitReached = limit;\n\t}\n\tif (truncation.truncated) {\n\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\tdetails.truncation = truncation;\n\t}\n\tif (notices.length > 0) output += `\\n\\n[${notices.join(\". \")}]`;\n\treturn {\n\t\tcontent: [{ type: \"text\", text: output }],\n\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t};\n}\n\nasync function buildDirectoryListing(\n\tinput: LsToolInput,\n\toperations: ToolOperations,\n\tcwd: string,\n): Promise<AgentToolResult<LsToolDetails | undefined>> {\n\tconst dirPath = resolveToCwd(input.path || \".\", cwd);\n\tconst limit = input.limit ?? DEFAULT_LIMIT;\n\ttry {\n\t\tawait operations.access(dirPath, \"exists\");\n\t} catch {\n\t\tthrow new Error(`Path not found: ${dirPath}`);\n\t}\n\tif (!(await operations.stat(dirPath)).isDirectory()) throw new Error(`Not a directory: ${dirPath}`);\n\tconst names = await readDirectoryNames(dirPath, operations);\n\treturn formatDirectoryListingResult(await collectDirectoryListingEntries(dirPath, names, limit, operations), limit);\n}\n\nfunction executeAbortableDirectoryListing(\n\tinput: LsToolInput,\n\toperations: ToolOperations,\n\tcwd: string,\n\tsignal: AbortSignal | undefined,\n): Promise<AgentToolResult<LsToolDetails | undefined>> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) {\n\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\treturn;\n\t\t}\n\t\tconst onAbort = () => reject(new Error(\"Operation aborted\"));\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\tvoid buildDirectoryListing(input, operations, cwd).then(\n\t\t\t(result) => {\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tresolve(result);\n\t\t\t},\n\t\t\t(error) => {\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\treject(error);\n\t\t\t},\n\t\t);\n\t});\n}\n\nexport type LsToolDefinition = ToolDefinition<typeof lsSchema, LsToolDetails | undefined>;\n\nexport function createLsToolDefinition(operations: ToolOperations, _options?: LsToolOptions): LsToolDefinition {\n\tconst ops = operations;\n\tconst cwd = operations.cwd;\n\treturn {\n\t\tname: \"ls\",\n\t\tlabel: \"ls\",\n\t\tdescription: `List directory contents. Returns entries sorted alphabetically, with '/' suffix for directories. Includes dotfiles. Output is truncated to ${DEFAULT_LIMIT} entries or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first).`,\n\t\tpromptSnippet: \"List directory contents\",\n\t\tparameters: lsSchema,\n\t\tasync execute(_toolCallId, input: LsToolInput, signal?: AbortSignal, _onUpdate?, _ctx?) {\n\t\t\treturn executeAbortableDirectoryListing(input, ops, cwd, signal);\n\t\t},\n\t\trenderCall(args, theme, context) {\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(formatBackendIcon(ops.getBackendInfo?.(), theme) + formatLsCall(args, theme));\n\t\t\treturn text;\n\t\t},\n\t\trenderResult(result, options, theme, context) {\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(formatLsResult(result, options, theme, context.showImages));\n\t\t\treturn text;\n\t\t},\n\t};\n}\n\nexport function createLsTool(operations: ToolOperations, options?: LsToolOptions): AgentTool<typeof lsSchema> {\n\treturn wrapToolDefinition(createLsToolDefinition(operations, options));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/core/tools/ls.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool, AgentToolResult } from \"@greppleai/grip-agent-core\";\nimport { Text } from \"@greppleai/grip-tui\";\nimport nodePath from \"path\";\nimport { type Static, Type } from \"typebox\";\nimport type { Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../extensions/types.ts\";\nimport type { ToolOperations } from \"./operations.ts\";\nimport { resolveToCwd } from \"./path-utils.ts\";\nimport {\n\tformatBackendIcon,\n\tformatHiddenLinesHint,\n\tgetTextOutput,\n\tinvalidArgText,\n\tshortenPath,\n\tstr,\n} from \"./render-utils.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\nimport { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from \"./truncate.ts\";\n\nconst lsSchema = Type.Object({\n\tpath: Type.Optional(Type.String({ description: \"Directory to list (default: current directory)\" })),\n\tlimit: Type.Optional(Type.Number({ description: \"Maximum number of entries to return (default: 500)\" })),\n});\n\nexport type LsToolInput = Static<typeof lsSchema>;\n\nconst DEFAULT_LIMIT = 500;\n\nexport interface LsToolDetails {\n\ttruncation?: TruncationResult;\n\tentryLimitReached?: number;\n}\n\nexport interface LsToolOptions {}\n\nfunction formatLsCall(args: Partial<LsToolInput> | undefined, theme: Theme): string {\n\tconst rawPath = str(args?.path);\n\tconst path = rawPath !== null ? shortenPath(rawPath || \".\") : null;\n\tconst limit = args?.limit;\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"ls\"))} ${path === null ? invalidArg : theme.fg(\"accent\", path)}`;\n\tif (limit !== undefined) {\n\t\ttext += theme.fg(\"toolOutput\", ` (limit ${limit})`);\n\t}\n\treturn text;\n}\n\nfunction formatLsResult(\n\tresult: AgentToolResult<LsToolDetails | undefined>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tshowImages: boolean,\n): string {\n\tconst output = getTextOutput(result, showImages).trim();\n\tlet text = \"\";\n\tif (output) {\n\t\tconst lines = output.split(\"\\n\");\n\t\tconst maxLines = options.expanded ? lines.length : 20;\n\t\tconst displayLines = lines.slice(0, maxLines);\n\t\tconst remaining = lines.length - maxLines;\n\t\ttext += `\\n${displayLines.map((line) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n\t\tif (remaining > 0) {\n\t\t\ttext += `\\n\\n${formatHiddenLinesHint(remaining, theme)}`;\n\t\t}\n\t}\n\n\tconst entryLimit = result.details?.entryLimitReached;\n\tconst truncation = result.details?.truncation;\n\tif (entryLimit || truncation?.truncated) {\n\t\tconst warnings: string[] = [];\n\t\tif (entryLimit) warnings.push(`${entryLimit} entries limit`);\n\t\tif (truncation?.truncated) warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);\n\t\ttext += `\\n${theme.fg(\"warning\", `[Truncated: ${warnings.join(\", \")}]`)}`;\n\t}\n\treturn text;\n}\ninterface DirectoryListingEntries {\n\tentries: string[];\n\tentryLimitReached: boolean;\n}\n\nasync function readDirectoryNames(dirPath: string, operations: ToolOperations): Promise<string[]> {\n\ttry {\n\t\treturn await operations.readdir(dirPath);\n\t} catch (error) {\n\t\tconst message =\n\t\t\ttypeof error === \"object\" && error !== null && \"message\" in error ? String(error.message) : \"undefined\";\n\t\tthrow new Error(`Cannot read directory: ${message}`);\n\t}\n}\n\nasync function collectDirectoryListingEntries(\n\tdirPath: string,\n\tnames: string[],\n\tlimit: number,\n\toperations: ToolOperations,\n): Promise<DirectoryListingEntries> {\n\tnames.sort((left, right) => left.toLowerCase().localeCompare(right.toLowerCase()));\n\tconst entries: string[] = [];\n\tfor (const name of names) {\n\t\tif (entries.length >= limit) return { entries, entryLimitReached: true };\n\t\ttry {\n\t\t\tconst entryStat = await operations.stat(nodePath.join(dirPath, name));\n\t\t\tentries.push(entryStat.isDirectory() ? `${name}/` : name);\n\t\t} catch {\n\t\t\t// Skip entries we cannot stat.\n\t\t}\n\t}\n\treturn { entries, entryLimitReached: false };\n}\n\nfunction formatDirectoryListingResult(\n\tlisting: DirectoryListingEntries,\n\tlimit: number,\n): AgentToolResult<LsToolDetails | undefined> {\n\tif (listing.entries.length === 0) {\n\t\treturn { content: [{ type: \"text\", text: \"(empty directory)\" }], details: undefined };\n\t}\n\tconst truncation = truncateHead(listing.entries.join(\"\\n\"), { maxLines: Number.MAX_SAFE_INTEGER });\n\tlet output = truncation.content;\n\tconst details: LsToolDetails = {};\n\tconst notices: string[] = [];\n\tif (listing.entryLimitReached) {\n\t\tnotices.push(`${limit} entries limit reached. Use limit=${limit * 2} for more`);\n\t\tdetails.entryLimitReached = limit;\n\t}\n\tif (truncation.truncated) {\n\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\tdetails.truncation = truncation;\n\t}\n\tif (notices.length > 0) output += `\\n\\n[${notices.join(\". \")}]`;\n\treturn {\n\t\tcontent: [{ type: \"text\", text: output }],\n\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t};\n}\n\nasync function buildDirectoryListing(\n\tinput: LsToolInput,\n\toperations: ToolOperations,\n\tcwd: string,\n): Promise<AgentToolResult<LsToolDetails | undefined>> {\n\tconst dirPath = resolveToCwd(input.path || \".\", cwd);\n\tconst limit = input.limit ?? DEFAULT_LIMIT;\n\ttry {\n\t\tawait operations.access(dirPath, \"exists\");\n\t} catch {\n\t\tthrow new Error(`Path not found: ${dirPath}`);\n\t}\n\tif (!(await operations.stat(dirPath)).isDirectory()) throw new Error(`Not a directory: ${dirPath}`);\n\tconst names = await readDirectoryNames(dirPath, operations);\n\treturn formatDirectoryListingResult(await collectDirectoryListingEntries(dirPath, names, limit, operations), limit);\n}\n\nfunction executeAbortableDirectoryListing(\n\tinput: LsToolInput,\n\toperations: ToolOperations,\n\tcwd: string,\n\tsignal: AbortSignal | undefined,\n): Promise<AgentToolResult<LsToolDetails | undefined>> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) {\n\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\treturn;\n\t\t}\n\t\tconst onAbort = () => reject(new Error(\"Operation aborted\"));\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\tvoid buildDirectoryListing(input, operations, cwd).then(\n\t\t\t(result) => {\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tresolve(result);\n\t\t\t},\n\t\t\t(error) => {\n\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\treject(error);\n\t\t\t},\n\t\t);\n\t});\n}\n\nexport type LsToolDefinition = ToolDefinition<typeof lsSchema, LsToolDetails | undefined>;\n\nexport function createLsToolDefinition(operations: ToolOperations, _options?: LsToolOptions): LsToolDefinition {\n\tconst ops = operations;\n\tconst cwd = operations.cwd;\n\treturn {\n\t\tname: \"ls\",\n\t\tlabel: \"ls\",\n\t\tdescription: `List directory contents. Returns entries sorted alphabetically, with '/' suffix for directories. Includes dotfiles. Output is truncated to ${DEFAULT_LIMIT} entries or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first).`,\n\t\tpromptSnippet: \"List directory contents\",\n\t\tparameters: lsSchema,\n\t\tasync execute(_toolCallId, input: LsToolInput, signal?: AbortSignal, _onUpdate?, _ctx?) {\n\t\t\treturn executeAbortableDirectoryListing(input, ops, cwd, signal);\n\t\t},\n\t\trenderCall(args, theme, context) {\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(formatBackendIcon(ops.getBackendInfo?.(), theme) + formatLsCall(args, theme));\n\t\t\treturn text;\n\t\t},\n\t\trenderResult(result, options, theme, context) {\n\t\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\t\ttext.setText(formatLsResult(result, options, theme, context.showImages));\n\t\t\treturn text;\n\t\t},\n\t};\n}\n\nexport function createLsTool(operations: ToolOperations, options?: LsToolOptions): AgentTool<typeof lsSchema> {\n\treturn wrapToolDefinition(createLsToolDefinition(operations, options));\n}\n"]}
|
|
@@ -79,6 +79,8 @@ export interface WorkspaceToolExecutionOptions {
|
|
|
79
79
|
imageAutoResize?: boolean;
|
|
80
80
|
shellCommandPrefix?: string;
|
|
81
81
|
sessionEnvironment?: GripSessionEnvironment;
|
|
82
|
+
/** Per-invocation guest working directory; the daemon workspace root remains unchanged. */
|
|
83
|
+
cwd?: string;
|
|
82
84
|
}
|
|
83
85
|
export interface DeferredRemoteToolOperationsConnectOptions extends RemoteToolOperationsConnectOptions {
|
|
84
86
|
expectedCwd?: string;
|
|
@@ -147,6 +149,7 @@ export declare class DeferredRemoteToolOperations implements ToolOperations {
|
|
|
147
149
|
downloadFile(sourcePath: string, destinationPath: string): Promise<void>;
|
|
148
150
|
mkdir(path: string, options?: ToolMkdirOptions): Promise<void>;
|
|
149
151
|
stat(path: string): Promise<ToolFileStat>;
|
|
152
|
+
resolveWorkspaceDirectory(path: string): Promise<string>;
|
|
150
153
|
readdir(path: string): Promise<string[]>;
|
|
151
154
|
glob(pattern: string, cwd: string, options: ToolGlobOptions): Promise<string[]>;
|
|
152
155
|
grep(options: ToolGrepOptions): Promise<ToolGrepResult>;
|
|
@@ -189,6 +192,7 @@ export declare class RemoteToolOperations implements ToolOperations {
|
|
|
189
192
|
private refreshRemoteLspStatus;
|
|
190
193
|
private request;
|
|
191
194
|
private revisionForTool;
|
|
195
|
+
/** Observe exact bytes for CAS, or a daemon-confirmed absent target for creation. */
|
|
192
196
|
private sharedExpectedRevision;
|
|
193
197
|
exec(command: string, options: ToolExecOptions): Promise<ToolExecResult>;
|
|
194
198
|
access(path: string, mode?: ToolAccessMode): Promise<void>;
|
|
@@ -199,6 +203,7 @@ export declare class RemoteToolOperations implements ToolOperations {
|
|
|
199
203
|
downloadFile(sourcePath: string, destinationPath: string): Promise<void>;
|
|
200
204
|
mkdir(path: string, options?: ToolMkdirOptions): Promise<void>;
|
|
201
205
|
stat(path: string): Promise<ToolFileStat>;
|
|
206
|
+
resolveWorkspaceDirectory(path: string): Promise<string>;
|
|
202
207
|
readdir(path: string): Promise<string[]>;
|
|
203
208
|
glob(pattern: string, cwd: string, options: ToolGlobOptions): Promise<string[]>;
|
|
204
209
|
grep(options: ToolGrepOptions): Promise<ToolGrepResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/core/tools/operations.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { constants, createReadStream, createWriteStream, type Stats, type WriteStream } from \"node:fs\";\nimport {\n\taccess as fsAccess,\n\tmkdir as fsMkdir,\n\treaddir as fsReaddir,\n\treadFile as fsReadFile,\n\tstat as fsStat,\n\twriteFile as fsWriteFile,\n} from \"node:fs/promises\";\nimport { posix, win32 } from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport type { AgentToolResult, AgentToolUpdateCallback } from \"@greppleai/grip-agent-core\";\nimport WebSocket, { type RawData } from \"ws\";\nimport { DAEMON_WEBSOCKET_PROTOCOL } from \"../../daemon/config.ts\";\nimport { waitForChildProcess } from \"../../utils/child-process.ts\";\nimport { detectSupportedImageMimeTypeFromFile } from \"../../utils/mime.ts\";\nimport {\n\tgetShellConfig,\n\tgetShellEnv,\n\tkillProcessTree,\n\ttrackDetachedChildPid,\n\tuntrackDetachedChildPid,\n} from \"../../utils/shell.ts\";\n\nimport type { PortablePathFlavor } from \"../lsp/portable-path.ts\";\nimport {\n\tDEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS,\n\tdecodeCanonicalBase64,\n\thashRemoteWorkspaceJson,\n\tparseRemoteWorkspaceToolResult,\n\ttype RemoteLspStatus,\n\ttype RemoteWorkspaceClientMessage,\n\ttype RemoteWorkspaceMethod,\n} from \"../remote-workspace-protocol/contract.ts\";\nimport { GuestSharedClientTransport } from \"../remote-workspace-protocol/guest-shared-client.ts\";\nimport {\n\tRemoteWorkspaceClientProtocol,\n\ttype RemoteWorkspaceProtocolCloseReason,\n\tRemoteWorkspaceRequestError,\n} from \"../remote-workspace-protocol/session.ts\";\nimport type { WorkspaceIdentity } from \"../workspace-identity.ts\";\n\nexport type ToolAccessMode = \"exists\" | \"read\" | \"write\" | \"readwrite\";\nexport type WorkspaceToolExecutionTarget = \"local\" | \"remote\" | \"unavailable\";\nexport type RemoteWorkspaceToolExecutionTarget = Exclude<WorkspaceToolExecutionTarget, \"local\">;\ntype RemoteToolTransportProtocol = \"ws\";\n\nexport interface ToolFileStat {\n\tisDirectory: () => boolean;\n\tisFile: () => boolean;\n}\n\nexport interface ToolExecOptions {\n\tcwd?: string;\n\tonData: (data: Buffer) => void;\n\tsignal?: AbortSignal;\n\ttimeout?: number;\n\tenv?: NodeJS.ProcessEnv;\n}\n\nexport interface ToolExecResult {\n\texitCode: number | null;\n}\n\nexport interface ToolMkdirOptions {\n\trecursive?: boolean;\n}\n\nexport interface ToolGlobOptions {\n\tignore: string[];\n\tlimit: number;\n}\n\nexport interface ToolGrepOptions {\n\tpattern: string;\n\tpath: string;\n\tglob?: string;\n\tignoreCase?: boolean;\n\tliteral?: boolean;\n\tlimit: number;\n}\n\nexport interface ToolGrepMatch {\n\tfilePath: string;\n\tlineNumber: number;\n\tlineText?: string;\n}\n\nexport interface ToolGrepResult {\n\tisDirectory: boolean;\n\tmatches: ToolGrepMatch[];\n}\n\nexport type ToolBackendInfo =\n\t| { type: \"local\"; cwd: string }\n\t| { type: \"remote\"; cwd: string; configured: false }\n\t| {\n\t\t\ttype: \"remote\";\n\t\t\tcwd: string;\n\t\t\turl: string;\n\t\t\tprotocol: \"ws\";\n\t\t\tconfigured: true;\n\t\t\tworkspace: WorkspaceIdentity;\n\t };\n\n// grip-ignore noNearIdenticalDataStructures: Remote backend invocations require host-normalized execution options, while public host invocations accept omitted options and apply defaults.\nexport interface WorkspaceToolRemoteInvocation {\n\ttoolCallId: string;\n\targuments: unknown;\n\tsignal?: AbortSignal;\n\tonUpdate?: AgentToolUpdateCallback<unknown>;\n\texecutionOptions: WorkspaceToolExecutionOptions;\n}\n\nexport interface GripSessionEnvironment {\n\tGRIP_SESSION_ID?: string;\n\tGRIP_SESSION_FILE?: string;\n\tGRIP_PROVIDER?: string;\n\tGRIP_MODEL?: string;\n\tGRIP_REASONING_LEVEL?: string;\n}\n\nexport const GRIP_SESSION_ENVIRONMENT_NAMES = Object.freeze([\n\t\"GRIP_SESSION_ID\",\n\t\"GRIP_SESSION_FILE\",\n\t\"GRIP_PROVIDER\",\n\t\"GRIP_MODEL\",\n\t\"GRIP_REASONING_LEVEL\",\n] as const);\n\nexport interface WorkspaceToolExecutionOptions {\n\timageAutoResize?: boolean;\n\tshellCommandPrefix?: string;\n\tsessionEnvironment?: GripSessionEnvironment;\n}\n\ninterface NormalizedRemoteWorkspaceUrl {\n\turl: string;\n\tprotocol: \"ws\";\n}\n\nexport interface DeferredRemoteToolOperationsConnectOptions extends RemoteToolOperationsConnectOptions {\n\texpectedCwd?: string;\n}\n\ntype SharedExpectedRevision = { sha256: string } | { absent: true };\n\nexport type BorrowedToolOperations = Omit<ToolOperations, \"dispose\">;\n\nexport function borrowToolOperations(operations: ToolOperations): BorrowedToolOperations {\n\tconst boundMethods = new Map<PropertyKey, unknown>();\n\treturn new Proxy(operations, {\n\t\tget(target, property, receiver) {\n\t\t\tif (property === \"dispose\") return undefined;\n\t\t\tconst value = Reflect.get(target, property, receiver) as unknown;\n\t\t\tif (typeof value !== \"function\") return value;\n\t\t\tlet bound = boundMethods.get(property);\n\t\t\tif (!bound) {\n\t\t\t\tbound = value.bind(target);\n\t\t\t\tboundMethods.set(property, bound);\n\t\t\t}\n\t\t\treturn bound;\n\t\t},\n\t\thas(target, property) {\n\t\t\treturn property === \"dispose\" ? false : Reflect.has(target, property);\n\t\t},\n\t}) as BorrowedToolOperations;\n}\n\nexport interface ToolOperations {\n\tcwd: string;\n\texec(command: string, options: ToolExecOptions): Promise<ToolExecResult>;\n\taccess(path: string, mode?: ToolAccessMode): Promise<void>;\n\treadFile(path: string): Promise<Buffer>;\n\twriteFile(path: string, content: string | Buffer): Promise<void>;\n\treadResource?(path: string): Promise<Buffer>;\n\tuploadFile?(sourcePath: string, destinationPath: string): Promise<void>;\n\tdownloadFile?(sourcePath: string, destinationPath: string): Promise<void>;\n\tmkdir(path: string, options?: ToolMkdirOptions): Promise<void>;\n\tstat(path: string): Promise<ToolFileStat>;\n\treaddir(path: string): Promise<string[]>;\n\tglob?(pattern: string, cwd: string, options: ToolGlobOptions): Promise<string[]>;\n\tgrep?(options: ToolGrepOptions): Promise<ToolGrepResult>;\n\tdetectImageMimeType?(path: string): Promise<string | null | undefined>;\n\tgetBackendInfo?(): ToolBackendInfo;\n\tresolveWorkspaceToolExecution?(name: string, parameterSchema: unknown): WorkspaceToolExecutionTarget;\n\texecuteWorkspaceTool?(name: string, invocation: WorkspaceToolRemoteInvocation): Promise<AgentToolResult<unknown>>;\n\tonWorkspaceToolCatalogChanged?(listener: () => void | Promise<void>): () => void;\n\tgetRemoteLspStatus?(): RemoteLspStatus;\n\tdispose?(): Promise<void>;\n}\n\nexport interface LocalToolOperationsOptions {\n\tshellPath?: string;\n}\n\nfunction workspaceRootsEqual(left: string, right: string, pathFlavor: PortablePathFlavor): boolean {\n\tif (pathFlavor === \"windows\") return win32.normalize(left).toLowerCase() === win32.normalize(right).toLowerCase();\n\treturn posix.normalize(left) === posix.normalize(right);\n}\n\nfunction accessModeToFsMode(mode: ToolAccessMode | undefined): number {\n\tswitch (mode) {\n\t\tcase \"read\":\n\t\t\treturn constants.R_OK;\n\t\tcase \"write\":\n\t\t\treturn constants.W_OK;\n\t\tcase \"readwrite\":\n\t\t\treturn constants.R_OK | constants.W_OK;\n\t\tcase \"exists\":\n\t\tcase undefined:\n\t\t\treturn constants.F_OK;\n\t}\n}\n\nconst MAX_TIMEOUT_MS = 2_147_483_647;\nconst MAX_TIMEOUT_SECONDS = MAX_TIMEOUT_MS / 1000;\n\nfunction resolveTimeoutMs(timeout: number | undefined): number | undefined {\n\tif (timeout === undefined) return undefined;\n\tif (!Number.isFinite(timeout) || timeout <= 0) {\n\t\tthrow new Error(\"Invalid timeout: must be a finite number of seconds\");\n\t}\n\n\tconst timeoutMs = timeout * 1000;\n\tif (timeoutMs > MAX_TIMEOUT_MS) {\n\t\tthrow new Error(`Invalid timeout: maximum is ${MAX_TIMEOUT_SECONDS} seconds`);\n\t}\n\treturn timeoutMs;\n}\n\nfunction registerChildProcessAbort(signal: AbortSignal | undefined, child: ChildProcess): () => void {\n\tconst onAbort = (): void => {\n\t\tif (child.pid) killProcessTree(child.pid);\n\t};\n\tif (!signal) return () => undefined;\n\tif (signal.aborted) onAbort();\n\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\treturn () => signal.removeEventListener(\"abort\", onAbort);\n}\n\nfunction terminateLingeringProcessGroup(child: ChildProcess): void {\n\tif (!child.pid || process.platform === \"win32\") return;\n\ttry {\n\t\tprocess.kill(-child.pid, 0);\n\t\tkillProcessTree(child.pid);\n\t} catch {}\n}\n\nfunction cleanupChildExecution(\n\tchild: ChildProcess,\n\ttimeoutHandle: NodeJS.Timeout | undefined,\n\tremoveAbortListener: () => void,\n): void {\n\tif (child.pid) untrackDetachedChildPid(child.pid);\n\tif (timeoutHandle) clearTimeout(timeoutHandle);\n\tremoveAbortListener();\n}\n\nasync function copyFileStream(sourcePath: string, destinationPath: string): Promise<void> {\n\tawait pipeline(createReadStream(sourcePath), createWriteStream(destinationPath));\n}\n\nfunction writeStreamChunk(stream: WriteStream, chunk: Buffer): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst onError = (error: Error) => {\n\t\t\tstream.off(\"error\", onError);\n\t\t\treject(error);\n\t\t};\n\t\tstream.once(\"error\", onError);\n\t\tstream.write(chunk, (error) => {\n\t\t\tstream.off(\"error\", onError);\n\t\t\tif (error) {\n\t\t\t\treject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve();\n\t\t});\n\t});\n}\n\nfunction endWriteStream(stream: WriteStream): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst onError = (error: Error) => {\n\t\t\tstream.off(\"error\", onError);\n\t\t\treject(error);\n\t\t};\n\t\tstream.once(\"error\", onError);\n\t\tstream.end(() => {\n\t\t\tstream.off(\"error\", onError);\n\t\t\tresolve();\n\t\t});\n\t});\n}\n\nexport class LocalToolOperations implements ToolOperations {\n\tcwd: string;\n\tprivate shellPath: string | undefined;\n\n\tconstructor(cwd: string, options: LocalToolOperationsOptions = {}) {\n\t\tthis.cwd = cwd;\n\t\tthis.shellPath = options.shellPath;\n\t}\n\n\tsetShellPath(shellPath: string | undefined): void {\n\t\tthis.shellPath = shellPath;\n\t}\n\n\tasync exec(command: string, options: ToolExecOptions): Promise<ToolExecResult> {\n\t\tconst timeoutMs = resolveTimeoutMs(options.timeout);\n\t\tconst cwd = options.cwd ?? this.cwd;\n\t\tconst { shell, args } = getShellConfig(this.shellPath);\n\t\ttry {\n\t\t\tawait fsAccess(cwd, constants.F_OK);\n\t\t} catch {\n\t\t\tthrow new Error(`Working directory does not exist: ${cwd}\\nCannot execute bash commands.`);\n\t\t}\n\t\tif (options.signal?.aborted) {\n\t\t\tthrow new Error(\"aborted\");\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst child = spawn(shell, [...args, command], {\n\t\t\t\tcwd,\n\t\t\t\tdetached: process.platform !== \"win32\",\n\t\t\t\tenv: options.env ?? getShellEnv(),\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\twindowsHide: true,\n\t\t\t});\n\t\t\tif (child.pid) trackDetachedChildPid(child.pid);\n\t\t\tlet timedOut = false;\n\t\t\tlet timeoutHandle: NodeJS.Timeout | undefined;\n\t\t\tif (timeoutMs !== undefined) {\n\t\t\t\ttimeoutHandle = setTimeout(() => {\n\t\t\t\t\ttimedOut = true;\n\t\t\t\t\tif (child.pid) killProcessTree(child.pid);\n\t\t\t\t}, timeoutMs);\n\t\t\t}\n\t\t\tchild.stdout?.on(\"data\", options.onData);\n\t\t\tchild.stderr?.on(\"data\", options.onData);\n\t\t\tconst removeAbortListener = registerChildProcessAbort(options.signal, child);\n\t\t\twaitForChildProcess(child)\n\t\t\t\t.then((code) => {\n\t\t\t\t\tterminateLingeringProcessGroup(child);\n\t\t\t\t\tcleanupChildExecution(child, timeoutHandle, removeAbortListener);\n\t\t\t\t\tif (options.signal?.aborted) {\n\t\t\t\t\t\treject(new Error(\"aborted\"));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (timedOut) {\n\t\t\t\t\t\treject(new Error(`timeout:${options.timeout}`));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tresolve({ exitCode: code });\n\t\t\t\t})\n\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\tcleanupChildExecution(child, timeoutHandle, removeAbortListener);\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t});\n\t}\n\n\tasync access(path: string, mode?: ToolAccessMode): Promise<void> {\n\t\tawait fsAccess(path, accessModeToFsMode(mode));\n\t}\n\n\tasync readFile(path: string): Promise<Buffer> {\n\t\treturn fsReadFile(path);\n\t}\n\n\tasync writeFile(path: string, content: string | Buffer): Promise<void> {\n\t\tawait fsWriteFile(path, content, typeof content === \"string\" ? \"utf-8\" : undefined);\n\t}\n\n\tasync uploadFile(sourcePath: string, destinationPath: string): Promise<void> {\n\t\tawait copyFileStream(sourcePath, destinationPath);\n\t}\n\n\tasync downloadFile(sourcePath: string, destinationPath: string): Promise<void> {\n\t\tawait copyFileStream(sourcePath, destinationPath);\n\t}\n\n\tasync mkdir(path: string, options: ToolMkdirOptions = {}): Promise<void> {\n\t\tawait fsMkdir(path, { recursive: options.recursive ?? false });\n\t}\n\n\tasync stat(path: string): Promise<Stats> {\n\t\treturn fsStat(path);\n\t}\n\n\tasync readdir(path: string): Promise<string[]> {\n\t\treturn fsReaddir(path);\n\t}\n\n\tasync detectImageMimeType(path: string): Promise<string | null | undefined> {\n\t\treturn detectSupportedImageMimeTypeFromFile(path);\n\t}\n\n\tgetBackendInfo(): ToolBackendInfo {\n\t\treturn { type: \"local\", cwd: this.cwd };\n\t}\n}\n\nexport class DeferredRemoteToolOperations implements ToolOperations {\n\tcwd: string;\n\tprivate readonly expectedCwd: string;\n\tprivate operations: RemoteToolOperations | undefined;\n\tprivate remoteCatalogUnsubscribe: (() => void) | undefined;\n\tprivate readonly catalogListeners = new Set<() => void | Promise<void>>();\n\tprivate disposePromise: Promise<void> | undefined;\n\tprivate readonly onDisconnect: ((message: string) => void) | undefined;\n\n\tconstructor(cwd: string, onDisconnect?: (message: string) => void) {\n\t\tthis.cwd = cwd;\n\t\tthis.expectedCwd = cwd;\n\t\tthis.onDisconnect = onDisconnect;\n\t}\n\n\tasync configureRemote(\n\t\turl: string,\n\t\toptions: DeferredRemoteToolOperationsConnectOptions = {},\n\t): Promise<ToolBackendInfo> {\n\t\tconst next = await createRemoteToolOperations(url, { ...options, onDisconnect: this.onDisconnect });\n\t\ttry {\n\t\t\tconst stat = await next.stat(next.cwd);\n\t\t\tif (!stat.isDirectory()) throw new Error(`Remote daemon cwd is not a directory: ${next.cwd}`);\n\t\t\tconst expectedCwd = options.expectedCwd ?? this.expectedCwd;\n\t\t\tif (!workspaceRootsEqual(next.cwd, expectedCwd, next.workspacePathFlavor)) {\n\t\t\t\tthrow new Error(`Remote daemon workspace root mismatch: expected ${expectedCwd}, received ${next.cwd}`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tawait next.dispose();\n\t\t\tthrow error;\n\t\t}\n\t\tawait this.replaceOperations(next);\n\t\treturn this.getBackendInfo();\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tconst previous = this.operations;\n\t\tthis.remoteCatalogUnsubscribe?.();\n\t\tthis.remoteCatalogUnsubscribe = undefined;\n\t\tthis.operations = undefined;\n\t\tawait previous?.dispose?.();\n\t}\n\n\tprivate requireOperations(): RemoteToolOperations {\n\t\tif (!this.operations) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Remote backend is not configured. Configure it over RPC or with /sandbox before using tools.\",\n\t\t\t);\n\t\t}\n\t\treturn this.operations;\n\t}\n\n\tasync exec(command: string, options: ToolExecOptions): Promise<ToolExecResult> {\n\t\treturn this.requireOperations().exec(command, options);\n\t}\n\n\tasync access(path: string, mode?: ToolAccessMode): Promise<void> {\n\t\tawait this.requireOperations().access(path, mode);\n\t}\n\n\tasync readFile(path: string): Promise<Buffer> {\n\t\treturn this.requireOperations().readFile(path);\n\t}\n\n\tasync writeFile(path: string, content: string | Buffer): Promise<void> {\n\t\tawait this.requireOperations().writeFile(path, content);\n\t}\n\n\tasync uploadFile(sourcePath: string, destinationPath: string): Promise<void> {\n\t\tconst operations = this.requireOperations();\n\t\tif (!operations.uploadFile) throw new Error(\"Remote backend does not support file upload\");\n\t\tawait operations.uploadFile(sourcePath, destinationPath);\n\t}\n\n\tasync downloadFile(sourcePath: string, destinationPath: string): Promise<void> {\n\t\tconst operations = this.requireOperations();\n\t\tif (!operations.downloadFile) throw new Error(\"Remote backend does not support file download\");\n\t\tawait operations.downloadFile(sourcePath, destinationPath);\n\t}\n\n\tasync mkdir(path: string, options?: ToolMkdirOptions): Promise<void> {\n\t\tawait this.requireOperations().mkdir(path, options);\n\t}\n\n\tasync stat(path: string): Promise<ToolFileStat> {\n\t\treturn this.requireOperations().stat(path);\n\t}\n\n\tasync readdir(path: string): Promise<string[]> {\n\t\treturn this.requireOperations().readdir(path);\n\t}\n\n\tasync glob(pattern: string, cwd: string, options: ToolGlobOptions): Promise<string[]> {\n\t\treturn this.requireOperations().glob(pattern, cwd, options);\n\t}\n\n\tasync grep(options: ToolGrepOptions): Promise<ToolGrepResult> {\n\t\treturn this.requireOperations().grep(options);\n\t}\n\n\tasync detectImageMimeType(path: string): Promise<string | null | undefined> {\n\t\treturn this.requireOperations().detectImageMimeType(path);\n\t}\n\n\tgetBackendInfo(): ToolBackendInfo {\n\t\treturn this.operations?.getBackendInfo() ?? { type: \"remote\", cwd: this.cwd, configured: false };\n\t}\n\tisDisconnected(): boolean {\n\t\treturn this.operations?.isDisconnected() ?? false;\n\t}\n\n\tresolveWorkspaceToolExecution(name: string, parameterSchema: unknown): RemoteWorkspaceToolExecutionTarget {\n\t\treturn this.operations ? this.operations.resolveWorkspaceToolExecution(name, parameterSchema) : \"unavailable\";\n\t}\n\n\texecuteWorkspaceTool(name: string, invocation: WorkspaceToolRemoteInvocation): Promise<AgentToolResult<unknown>> {\n\t\treturn this.requireOperations().executeWorkspaceTool(name, invocation);\n\t}\n\n\tgetRemoteLspStatus(): RemoteLspStatus {\n\t\treturn this.operations?.getRemoteLspStatus() ?? { enabled: false, servers: [] };\n\t}\n\n\tonWorkspaceToolCatalogChanged(listener: () => void | Promise<void>): () => void {\n\t\tthis.catalogListeners.add(listener);\n\t\treturn () => this.catalogListeners.delete(listener);\n\t}\n\n\tdispose(): Promise<void> {\n\t\tthis.disposePromise ??= (async () => {\n\t\t\tthis.remoteCatalogUnsubscribe?.();\n\t\t\tthis.remoteCatalogUnsubscribe = undefined;\n\t\t\tconst previous = this.operations;\n\t\t\tthis.operations = undefined;\n\t\t\tawait previous?.dispose?.();\n\t\t})();\n\t\treturn this.disposePromise;\n\t}\n\n\tprivate async replaceOperations(next: RemoteToolOperations): Promise<void> {\n\t\tif (this.disposePromise) {\n\t\t\tawait next.dispose?.();\n\t\t\tthrow new Error(\"Deferred remote backend is disposed\");\n\t\t}\n\t\tconst previous = this.operations;\n\t\tthis.remoteCatalogUnsubscribe?.();\n\t\tthis.remoteCatalogUnsubscribe = undefined;\n\t\tthis.operations = next;\n\t\tthis.cwd = next.cwd;\n\t\tthis.remoteCatalogUnsubscribe = next.onWorkspaceToolCatalogChanged(() =>\n\t\t\tPromise.all([...this.catalogListeners].map((listener) => listener())).then(() => undefined),\n\t\t);\n\t\tawait previous?.dispose?.();\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction requireRecord(value: unknown, label: string): Record<string, unknown> {\n\tif (!isRecord(value)) throw new Error(`Invalid remote workspace ${label}`);\n\treturn value;\n}\n\nfunction requireString(value: unknown, label: string): string {\n\tif (typeof value !== \"string\") throw new Error(`Invalid remote workspace ${label}`);\n\treturn value;\n}\n\nfunction normalizeRemoteUrl(url: string): NormalizedRemoteWorkspaceUrl {\n\tconst parsed = new URL(url);\n\tif (parsed.protocol !== \"ws:\" && parsed.protocol !== \"wss:\") {\n\t\tthrow new Error(`--remote supports ws:// and wss:// URLs, got ${parsed.protocol}`);\n\t}\n\tif (parsed.username || parsed.password) throw new Error(\"Remote workspace URLs must not contain credentials\");\n\tif (parsed.hash) throw new Error(\"Remote workspace URLs must not contain fragments\");\n\treturn { url: parsed.toString(), protocol: \"ws\" };\n}\n\nfunction websocketPayload(data: RawData): Uint8Array {\n\tif (Buffer.isBuffer(data)) return Uint8Array.from(data);\n\tif (Array.isArray(data)) return Uint8Array.from(Buffer.concat(data));\n\treturn Uint8Array.from(new Uint8Array(data));\n}\n\nfunction websocketCloseCode(reason: RemoteWorkspaceProtocolCloseReason): number {\n\tswitch (reason.code) {\n\t\tcase \"normal\":\n\t\t\treturn 1000;\n\t\tcase \"protocol_error\":\n\t\t\treturn 1002;\n\t\tcase \"invalid_payload\":\n\t\t\treturn 1007;\n\t\tcase \"policy_violation\":\n\t\t\treturn 1008;\n\t\tcase \"message_too_large\":\n\t\t\treturn 1009;\n\t}\n}\n\nexport interface RemoteToolOperationsConnectOptions {\n\ttoken?: string;\n\thandshakeTimeoutMs?: number;\n\tonDisconnect?: (message: string) => void;\n}\n\nexport class RemoteToolOperations implements ToolOperations {\n\treadonly url: string;\n\treadonly protocol: RemoteToolTransportProtocol;\n\tcwd: string;\n\tworkspacePathFlavor: PortablePathFlavor = \"posix\";\n\tprivate workspaceId = \"\";\n\tprivate readonly socket: WebSocket | GuestSharedClientTransport;\n\tprivate readonly isShared: boolean;\n\tprivate readonly client: RemoteWorkspaceClientProtocol;\n\tprivate readonly localToolSchemas = new Map<string, string>();\n\tprivate readonly catalogListeners = new Set<() => void | Promise<void>>();\n\tprivate remoteLspStatus: RemoteLspStatus = { enabled: false, servers: [] };\n\tprivate disconnected = false;\n\tprivate disposePromise: Promise<void> | undefined;\n\n\tprivate constructor(\n\t\turl: string,\n\t\tprotocol: RemoteToolTransportProtocol,\n\t\tsocket: WebSocket | GuestSharedClientTransport,\n\t\toptions: RemoteToolOperationsConnectOptions,\n\t) {\n\t\tthis.url = url;\n\t\tthis.protocol = protocol;\n\t\tthis.socket = socket;\n\t\tthis.isShared = socket instanceof GuestSharedClientTransport;\n\t\tthis.cwd = \"/\";\n\t\tconst transport =\n\t\t\tsocket instanceof GuestSharedClientTransport\n\t\t\t\t? socket\n\t\t\t\t: {\n\t\t\t\t\t\tsend: (message: RemoteWorkspaceClientMessage): Promise<void> =>\n\t\t\t\t\t\t\tnew Promise((resolve, reject) => {\n\t\t\t\t\t\t\t\tif (socket.readyState !== WebSocket.OPEN) {\n\t\t\t\t\t\t\t\t\treject(new Error(\"Remote workspace connection is not open\"));\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsocket.send(JSON.stringify(message), { binary: false, compress: false }, (error) => {\n\t\t\t\t\t\t\t\t\tif (error) reject(error);\n\t\t\t\t\t\t\t\t\telse resolve();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\tclose: (reason: RemoteWorkspaceProtocolCloseReason): Promise<void> => {\n\t\t\t\t\t\t\tif (socket.readyState === WebSocket.CLOSED) return Promise.resolve();\n\t\t\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\t\t\tsocket.once(\"close\", () => resolve());\n\t\t\t\t\t\t\t\tsocket.close(websocketCloseCode(reason), reason.message);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\tthis.client = new RemoteWorkspaceClientProtocol(transport, {\n\t\t\trequiredCapabilities: [\"primitive_operations\", \"tool_updates\"],\n\t\t\toptionalCapabilities: this.isShared\n\t\t\t\t? [\"catalog_refresh\", \"artifacts\", \"lsp_status\"]\n\t\t\t\t: [\"catalog_refresh\", \"file_transfer\", \"artifacts\", \"lsp_status\"],\n\t\t\treceiveLimits: DEFAULT_REMOTE_WORKSPACE_PROTOCOL_LIMITS,\n\t\t\tlocalToolSchemas: this.localToolSchemas,\n\t\t\thandshakeTimeoutMs: options.handshakeTimeoutMs,\n\t\t\tonDisconnect: (message) => {\n\t\t\t\tthis.disconnected = true;\n\t\t\t\toptions.onDisconnect?.(message);\n\t\t\t},\n\t\t\tonCatalogRefreshed: async () => {\n\t\t\t\tawait this.refreshRemoteLspStatus();\n\t\t\t\tawait Promise.all([...this.catalogListeners].map((listener) => listener()));\n\t\t\t},\n\t\t});\n\t\tif (socket instanceof GuestSharedClientTransport) {\n\t\t\tsocket.bind(this.client);\n\t\t} else {\n\t\t\tsocket.on(\"message\", (data, isBinary) => {\n\t\t\t\tif (isBinary) {\n\t\t\t\t\tvoid this.client.disconnect(\"Remote workspace sent an unexpected binary frame\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvoid this.client.receive(websocketPayload(data)).catch(() => undefined);\n\t\t\t});\n\t\t\tsocket.on(\"close\", () => void this.client.disconnect(\"Remote workspace connection closed\"));\n\t\t\tsocket.on(\"error\", () => void this.client.disconnect(\"Remote workspace connection failed\"));\n\t\t}\n\t}\n\n\tstatic async connect(url: string, options: RemoteToolOperationsConnectOptions = {}): Promise<RemoteToolOperations> {\n\t\tconst normalized = normalizeRemoteUrl(url);\n\t\tconst token = options.token ?? process.env.GRIP_REMOTE_TOKEN;\n\t\tconst socket = await new Promise<WebSocket>((resolve, reject) => {\n\t\t\tconst websocket = new WebSocket(normalized.url, DAEMON_WEBSOCKET_PROTOCOL, {\n\t\t\t\tperMessageDeflate: false,\n\t\t\t\t...(token ? { headers: { authorization: `Bearer ${token}` } } : {}),\n\t\t\t});\n\t\t\tconst cleanup = () => {\n\t\t\t\twebsocket.off(\"open\", onOpen);\n\t\t\t\twebsocket.off(\"error\", onError);\n\t\t\t};\n\t\t\tconst onOpen = () => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve(websocket);\n\t\t\t};\n\t\t\tconst onError = () => {\n\t\t\t\tcleanup();\n\t\t\t\twebsocket.terminate();\n\t\t\t\treject(new Error(`Failed to connect remote workspace: ${normalized.url}`));\n\t\t\t};\n\t\t\twebsocket.once(\"open\", onOpen);\n\t\t\twebsocket.once(\"error\", onError);\n\t\t});\n\t\tconst operations = new RemoteToolOperations(normalized.url, normalized.protocol, socket, options);\n\t\ttry {\n\t\t\tconst handshake = await operations.client.start();\n\t\t\toperations.cwd = handshake.workspace.root;\n\t\t\toperations.workspacePathFlavor = handshake.workspace.pathFlavor;\n\t\t\toperations.workspaceId = handshake.workspace.id;\n\t\t\tawait operations.refreshRemoteLspStatus();\n\t\t\treturn operations;\n\t\t} catch (error) {\n\t\t\tsocket.terminate();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tstatic async connectGuestShared(\n\t\turl: string,\n\t\troot: string,\n\t\ttoken: string,\n\t\toptions: RemoteToolOperationsConnectOptions = {},\n\t): Promise<RemoteToolOperations> {\n\t\tconst socket = await GuestSharedClientTransport.attach(url, root, token);\n\t\tconst operations = new RemoteToolOperations(url, \"ws\", socket, options);\n\t\ttry {\n\t\t\tconst handshake = await operations.client.start();\n\t\t\tif (!workspaceRootsEqual(handshake.workspace.root, root, handshake.workspace.pathFlavor)) {\n\t\t\t\tthrow new Error(\"Guest shared workspace root differs from daemon handshake\");\n\t\t\t}\n\t\t\toperations.cwd = handshake.workspace.root;\n\t\t\toperations.workspacePathFlavor = handshake.workspace.pathFlavor;\n\t\t\toperations.workspaceId = handshake.workspace.id;\n\t\t\tawait operations.refreshRemoteLspStatus();\n\t\t\treturn operations;\n\t\t} catch (error) {\n\t\t\tawait socket.close({ code: \"normal\", message: \"Shared guest attach failed\" });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tresolveWorkspaceToolExecution(name: string, parameterSchema: unknown): RemoteWorkspaceToolExecutionTarget {\n\t\tconst schemaHash = hashRemoteWorkspaceJson(parameterSchema);\n\t\tconst catalogTool = this.client.handshake?.catalog.tools.find((tool) => tool.name === name);\n\t\tif (!catalogTool) return \"unavailable\";\n\t\tif (catalogTool.schemaHash !== schemaHash) {\n\t\t\tthrow new Error(`Remote tool schema does not match the local canonical definition: ${name}`);\n\t\t}\n\t\tthis.localToolSchemas.set(name, schemaHash);\n\t\tthis.client.setLocalToolSchemas(this.localToolSchemas);\n\t\treturn \"remote\";\n\t}\n\n\tasync executeWorkspaceTool(\n\t\tname: string,\n\t\tinvocation: WorkspaceToolRemoteInvocation,\n\t): Promise<AgentToolResult<unknown>> {\n\t\tconst invoke = async () => {\n\t\t\tawait this.client.waitForCatalogRefresh();\n\t\t\tconst handshake = this.client.handshake;\n\t\t\tif (!handshake) throw new Error(\"Remote workspace protocol handshake is unavailable\");\n\t\t\tconst catalogTool = handshake.catalog.tools.find((tool) => tool.name === name);\n\t\t\tconst schemaHash = this.localToolSchemas.get(name);\n\t\t\tif (!catalogTool || !schemaHash || catalogTool.schemaHash !== schemaHash) {\n\t\t\t\tthrow new Error(`Remote tool is unavailable or has schema drift: ${name}`);\n\t\t\t}\n\t\t\tconst expectedRevision = await this.revisionForTool(name, invocation);\n\t\t\tconst result = requireRecord(\n\t\t\t\tawait this.client.request(\n\t\t\t\t\t\"tool.invoke\",\n\t\t\t\t\t{\n\t\t\t\t\t\tgeneration: handshake.catalog.generation,\n\t\t\t\t\t\tcatalogHash: handshake.catalogHash,\n\t\t\t\t\t\ttoolName: name,\n\t\t\t\t\t\tschemaHash,\n\t\t\t\t\t\targumentsPrepared: true,\n\t\t\t\t\t\targuments: invocation.arguments,\n\t\t\t\t\t\t...(expectedRevision ? { expectedRevision } : {}),\n\t\t\t\t\t\texecutionOptions: invocation.executionOptions,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsignal: invocation.signal,\n\t\t\t\t\t\tonUpdate: invocation.onUpdate\n\t\t\t\t\t\t\t? (update) =>\n\t\t\t\t\t\t\t\t\tinvocation.onUpdate!(parseRemoteWorkspaceToolResult(update) as AgentToolResult<unknown>)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t\"tool result\",\n\t\t\t);\n\t\t\tconst toolResult = result;\n\t\t\tif (!Array.isArray(toolResult.content)) throw new Error(\"Invalid remote workspace tool result content\");\n\t\t\tif (name.startsWith(\"lsp_\")) await this.refreshRemoteLspStatus().catch(() => undefined);\n\t\t\treturn {\n\t\t\t\tcontent: toolResult.content as AgentToolResult<unknown>[\"content\"],\n\t\t\t\tdetails: toolResult.details,\n\t\t\t\t...(typeof toolResult.terminate === \"boolean\" ? { terminate: toolResult.terminate } : {}),\n\t\t\t};\n\t\t};\n\t\ttry {\n\t\t\treturn await invoke();\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror instanceof RemoteWorkspaceRequestError &&\n\t\t\t\terror.code === \"stale_generation\" &&\n\t\t\t\terror.executionState === \"not_started\"\n\t\t\t) {\n\t\t\t\treturn invoke();\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tgetRemoteLspStatus(): RemoteLspStatus {\n\t\treturn structuredClone(this.remoteLspStatus);\n\t}\n\n\tonWorkspaceToolCatalogChanged(listener: () => void | Promise<void>): () => void {\n\t\tthis.catalogListeners.add(listener);\n\t\treturn () => this.catalogListeners.delete(listener);\n\t}\n\n\tprivate async refreshRemoteLspStatus(): Promise<void> {\n\t\tif (!this.client.handshake?.catalog.operations.includes(\"lsp.status\")) {\n\t\t\tthis.remoteLspStatus = { enabled: false, servers: [] };\n\t\t\treturn;\n\t\t}\n\t\tthis.remoteLspStatus = (await this.client.request(\"lsp.status\", {})) as RemoteLspStatus;\n\t}\n\n\tprivate request(method: RemoteWorkspaceMethod, params: unknown) {\n\t\treturn this.client.request(method, params);\n\t}\n\n\tprivate async revisionForTool(\n\t\tname: string,\n\t\tinvocation: WorkspaceToolRemoteInvocation,\n\t): Promise<SharedExpectedRevision | undefined> {\n\t\tif (!this.isShared || (name !== \"edit\" && name !== \"write\")) return undefined;\n\t\tconst path = requireString(\n\t\t\trequireRecord(invocation.arguments, \"shared mutation arguments\").path,\n\t\t\t\"shared mutation path\",\n\t\t);\n\t\treturn this.sharedExpectedRevision(path, invocation.signal, name === \"write\");\n\t}\n\n\t/** Observe exact bytes for CAS, or a daemon-confirmed absent target for creation. */\n\tprivate async sharedExpectedRevision(\n\t\tpath: string,\n\t\tsignal?: AbortSignal,\n\t\tallowAbsent = true,\n\t): Promise<SharedExpectedRevision> {\n\t\tlet read: unknown;\n\t\ttry {\n\t\t\tread = await this.client.request(\"workspace.read\", { path }, { signal });\n\t\t} catch (error) {\n\t\t\tif (!allowAbsent) throw error;\n\t\t\t// Do not infer absence from an error message: only a v2 server stat of the\n\t\t\t// same workspace and path may establish the expected-absent precondition.\n\t\t\tconst stat = requireRecord(\n\t\t\t\tawait this.client.request(\"workspace.stat\", { path }, { signal }),\n\t\t\t\t\"shared stat result\",\n\t\t\t);\n\t\t\tif (stat.kind !== \"absent\") throw error;\n\t\t\treturn { absent: true };\n\t\t}\n\t\tconst result = requireRecord(read, \"shared read result\");\n\t\tconst content = decodeCanonicalBase64(\n\t\t\trequireString(result.contentBase64, \"shared read content\"),\n\t\t\tNumber.MAX_SAFE_INTEGER,\n\t\t);\n\t\tconst sha256 = createHash(\"sha256\").update(content).digest(\"hex\");\n\t\tif (result.revision !== sha256) throw new Error(\"Shared daemon did not confirm the observed file revision\");\n\t\treturn { sha256 };\n\t}\n\tasync exec(command: string, options: ToolExecOptions): Promise<ToolExecResult> {\n\t\tconst result = requireRecord(\n\t\t\tawait this.client.request(\n\t\t\t\t\"workspace.exec\",\n\t\t\t\t{ command, cwd: options.cwd ?? this.cwd },\n\t\t\t\t{\n\t\t\t\t\tsignal: options.signal,\n\t\t\t\t\ttimeoutMs: options.timeout === undefined ? undefined : Math.round(options.timeout * 1000),\n\t\t\t\t\tonUpdate: (update) => {\n\t\t\t\t\t\tconst record = requireRecord(update, \"exec update\");\n\t\t\t\t\t\toptions.onData(\n\t\t\t\t\t\t\tdecodeCanonicalBase64(requireString(record.dataBase64, \"exec update data\"), 1024 * 1024),\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t),\n\t\t\t\"exec result\",\n\t\t);\n\t\treturn { exitCode: typeof result.exitCode === \"number\" ? result.exitCode : null };\n\t}\n\n\tasync access(path: string, mode?: ToolAccessMode): Promise<void> {\n\t\tawait this.request(\"workspace.access\", { path, ...(mode ? { mode } : {}) });\n\t}\n\n\tasync readFile(path: string): Promise<Buffer> {\n\t\tconst result = requireRecord(await this.request(\"workspace.read\", { path }), \"read result\");\n\t\treturn decodeCanonicalBase64(requireString(result.contentBase64, \"read content\"), Number.MAX_SAFE_INTEGER);\n\t}\n\n\tasync writeFile(path: string, content: string | Buffer): Promise<void> {\n\t\tconst expectedRevision = this.isShared ? await this.sharedExpectedRevision(path) : undefined;\n\t\tawait this.request(\"workspace.write\", {\n\t\t\tpath,\n\t\t\tcontentBase64: Buffer.from(content).toString(\"base64\"),\n\t\t\t...(expectedRevision ? { expectedRevision } : {}),\n\t\t});\n\t}\n\n\tasync readResource(path: string): Promise<Buffer> {\n\t\tif (!this.client.handshake?.catalog.operations.includes(\"resource.read\")) {\n\t\t\tthrow new Error(\"Remote workspace does not expose resource reads\");\n\t\t}\n\t\tconst result = requireRecord(await this.request(\"resource.read\", { path }), \"resource read result\");\n\t\treturn decodeCanonicalBase64(\n\t\t\trequireString(result.contentBase64, \"resource read content\"),\n\t\t\tNumber.MAX_SAFE_INTEGER,\n\t\t);\n\t}\n\n\tasync uploadFile(sourcePath: string, destinationPath: string): Promise<void> {\n\t\tif (this.isShared) throw new Error(\"Shared guest file transfers are unavailable\");\n\t\tconst content = await fsReadFile(sourcePath);\n\t\tconst sha256 = createHash(\"sha256\").update(content).digest(\"hex\");\n\t\tconst handle = this.client.beginRequest(\"transfer.upload\", {\n\t\t\tpath: destinationPath,\n\t\t\tlength: content.byteLength,\n\t\t\tsha256,\n\t\t\toverwrite: true,\n\t\t});\n\t\tconst chunkBytes = this.client.handshake?.limits.maxTransferChunkBytes ?? 64 * 1024;\n\t\tfor (let offset = 0; offset < content.byteLength; offset += chunkBytes) {\n\t\t\tawait handle.sendTransferChunk(content.subarray(offset, Math.min(offset + chunkBytes, content.byteLength)));\n\t\t}\n\t\tawait handle.finishTransfer(content.byteLength, sha256);\n\t\tawait handle.result;\n\t}\n\n\tasync downloadFile(sourcePath: string, destinationPath: string): Promise<void> {\n\t\tif (this.isShared) throw new Error(\"Shared guest file transfers are unavailable\");\n\t\tconst stream = createWriteStream(destinationPath);\n\t\ttry {\n\t\t\tawait this.client.request(\n\t\t\t\t\"transfer.download\",\n\t\t\t\t{ path: sourcePath },\n\t\t\t\t{\n\t\t\t\t\tonTransferChunk: (chunk) => writeStreamChunk(stream, chunk),\n\t\t\t\t},\n\t\t\t);\n\t\t\tawait endWriteStream(stream);\n\t\t} catch (error) {\n\t\t\tstream.destroy();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync mkdir(path: string, options: ToolMkdirOptions = {}): Promise<void> {\n\t\tawait this.request(\"workspace.mkdir\", { path, recursive: options.recursive ?? false });\n\t}\n\n\tasync stat(path: string): Promise<ToolFileStat> {\n\t\tconst result = requireRecord(await this.request(\"workspace.stat\", { path }), \"stat result\");\n\t\tif (result.kind === \"absent\") throw new Error(`Remote workspace path does not exist: ${path}`);\n\t\treturn {\n\t\t\tisDirectory: () => result.kind === \"directory\",\n\t\t\tisFile: () => result.kind === \"file\",\n\t\t};\n\t}\n\n\tasync readdir(path: string): Promise<string[]> {\n\t\tconst result = requireRecord(await this.request(\"workspace.readdir\", { path }), \"readdir result\");\n\t\tif (!Array.isArray(result.entries) || !result.entries.every((entry) => typeof entry === \"string\")) {\n\t\t\tthrow new Error(\"Invalid remote workspace readdir entries\");\n\t\t}\n\t\treturn result.entries;\n\t}\n\n\tasync glob(pattern: string, cwd: string, options: ToolGlobOptions): Promise<string[]> {\n\t\tconst result = requireRecord(\n\t\t\tawait this.request(\"workspace.glob\", { pattern, cwd, ignore: options.ignore, limit: options.limit }),\n\t\t\t\"glob result\",\n\t\t);\n\t\tif (!Array.isArray(result.matches) || !result.matches.every((entry) => typeof entry === \"string\")) {\n\t\t\tthrow new Error(\"Invalid remote workspace glob matches\");\n\t\t}\n\t\treturn result.matches;\n\t}\n\n\tasync grep(options: ToolGrepOptions): Promise<ToolGrepResult> {\n\t\tconst result = requireRecord(await this.request(\"workspace.grep\", options), \"grep result\");\n\t\tif (!Array.isArray(result.matches)) throw new Error(\"Invalid remote workspace grep matches\");\n\t\treturn {\n\t\t\tisDirectory: result.isDirectory === true,\n\t\t\tmatches: result.matches.map((entry) => {\n\t\t\t\tconst match = requireRecord(entry, \"grep match\");\n\t\t\t\treturn {\n\t\t\t\t\tfilePath: requireString(match.filePath, \"grep file path\"),\n\t\t\t\t\tlineNumber: typeof match.lineNumber === \"number\" ? match.lineNumber : 0,\n\t\t\t\t\t...(typeof match.lineText === \"string\" ? { lineText: match.lineText } : {}),\n\t\t\t\t};\n\t\t\t}),\n\t\t};\n\t}\n\n\tasync detectImageMimeType(path: string): Promise<string | null | undefined> {\n\t\tconst result = requireRecord(await this.request(\"workspace.detect_image_mime\", { path }), \"image MIME result\");\n\t\treturn typeof result.mimeType === \"string\" ? result.mimeType : null;\n\t}\n\n\tgetBackendInfo(): ToolBackendInfo {\n\t\treturn {\n\t\t\ttype: \"remote\",\n\t\t\tcwd: this.cwd,\n\t\t\turl: this.url,\n\t\t\tprotocol: this.protocol,\n\t\t\tconfigured: true,\n\t\t\tworkspace: { id: this.workspaceId, root: this.cwd, pathFlavor: this.workspacePathFlavor },\n\t\t};\n\t}\n\tisDisconnected(): boolean {\n\t\treturn this.disconnected;\n\t}\n\n\tdispose(): Promise<void> {\n\t\tthis.disposePromise ??= this.client.close().catch(() => {\n\t\t\tif (this.socket instanceof WebSocket) this.socket.terminate();\n\t\t});\n\t\treturn this.disposePromise;\n\t}\n}\n\nexport function createRemoteToolOperations(\n\turl: string,\n\toptions?: RemoteToolOperationsConnectOptions,\n): Promise<RemoteToolOperations> {\n\tif (url.startsWith(\"grip+ws:\")) {\n\t\tconst parsed = new URL(url.replace(/^grip\\+/, \"\"));\n\t\tconst root = parsed.searchParams.get(\"root\");\n\t\tif (!root || !posix.isAbsolute(root) || parsed.searchParams.size !== 1 || !options?.token) {\n\t\t\treturn Promise.reject(new Error(\"Invalid guest shared workspace attachment\"));\n\t\t}\n\t\tparsed.search = \"\";\n\t\treturn RemoteToolOperations.connectGuestShared(parsed.toString(), root, options.token, options);\n\t}\n\treturn RemoteToolOperations.connect(url, options);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/core/tools/operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -135,8 +135,6 @@ function endWriteStream(stream) {
|
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
export class LocalToolOperations {
|
|
138
|
-
cwd;
|
|
139
|
-
shellPath;
|
|
140
138
|
constructor(cwd, options = {}) {
|
|
141
139
|
this.cwd = cwd;
|
|
142
140
|
this.shellPath = options.shellPath;
|
|
@@ -231,14 +229,8 @@ export class LocalToolOperations {
|
|
|
231
229
|
}
|
|
232
230
|
}
|
|
233
231
|
export class DeferredRemoteToolOperations {
|
|
234
|
-
cwd;
|
|
235
|
-
expectedCwd;
|
|
236
|
-
operations;
|
|
237
|
-
remoteCatalogUnsubscribe;
|
|
238
|
-
catalogListeners = new Set();
|
|
239
|
-
disposePromise;
|
|
240
|
-
onDisconnect;
|
|
241
232
|
constructor(cwd, onDisconnect) {
|
|
233
|
+
this.catalogListeners = new Set();
|
|
242
234
|
this.cwd = cwd;
|
|
243
235
|
this.expectedCwd = cwd;
|
|
244
236
|
this.onDisconnect = onDisconnect;
|
|
@@ -304,6 +296,9 @@ export class DeferredRemoteToolOperations {
|
|
|
304
296
|
async stat(path) {
|
|
305
297
|
return this.requireOperations().stat(path);
|
|
306
298
|
}
|
|
299
|
+
async resolveWorkspaceDirectory(path) {
|
|
300
|
+
return this.requireOperations().resolveWorkspaceDirectory(path);
|
|
301
|
+
}
|
|
307
302
|
async readdir(path) {
|
|
308
303
|
return this.requireOperations().readdir(path);
|
|
309
304
|
}
|
|
@@ -326,7 +321,13 @@ export class DeferredRemoteToolOperations {
|
|
|
326
321
|
return this.operations ? this.operations.resolveWorkspaceToolExecution(name, parameterSchema) : "unavailable";
|
|
327
322
|
}
|
|
328
323
|
executeWorkspaceTool(name, invocation) {
|
|
329
|
-
return this.requireOperations().executeWorkspaceTool(name,
|
|
324
|
+
return this.requireOperations().executeWorkspaceTool(name, {
|
|
325
|
+
...invocation,
|
|
326
|
+
executionOptions: {
|
|
327
|
+
...invocation.executionOptions,
|
|
328
|
+
...(this.cwd === this.requireOperations().cwd ? {} : { cwd: this.cwd }),
|
|
329
|
+
},
|
|
330
|
+
});
|
|
330
331
|
}
|
|
331
332
|
getRemoteLspStatus() {
|
|
332
333
|
return this.operations?.getRemoteLspStatus() ?? { enabled: false, servers: [] };
|
|
@@ -405,20 +406,13 @@ function websocketCloseCode(reason) {
|
|
|
405
406
|
}
|
|
406
407
|
}
|
|
407
408
|
export class RemoteToolOperations {
|
|
408
|
-
url;
|
|
409
|
-
protocol;
|
|
410
|
-
cwd;
|
|
411
|
-
workspacePathFlavor = "posix";
|
|
412
|
-
workspaceId = "";
|
|
413
|
-
socket;
|
|
414
|
-
isShared;
|
|
415
|
-
client;
|
|
416
|
-
localToolSchemas = new Map();
|
|
417
|
-
catalogListeners = new Set();
|
|
418
|
-
remoteLspStatus = { enabled: false, servers: [] };
|
|
419
|
-
disconnected = false;
|
|
420
|
-
disposePromise;
|
|
421
409
|
constructor(url, protocol, socket, options) {
|
|
410
|
+
this.workspacePathFlavor = "posix";
|
|
411
|
+
this.workspaceId = "";
|
|
412
|
+
this.localToolSchemas = new Map();
|
|
413
|
+
this.catalogListeners = new Set();
|
|
414
|
+
this.remoteLspStatus = { enabled: false, servers: [] };
|
|
415
|
+
this.disconnected = false;
|
|
422
416
|
this.url = url;
|
|
423
417
|
this.protocol = protocol;
|
|
424
418
|
this.socket = socket;
|
|
@@ -620,7 +614,9 @@ export class RemoteToolOperations {
|
|
|
620
614
|
if (!this.isShared || (name !== "edit" && name !== "write"))
|
|
621
615
|
return undefined;
|
|
622
616
|
const path = requireString(requireRecord(invocation.arguments, "shared mutation arguments").path, "shared mutation path");
|
|
623
|
-
|
|
617
|
+
const cwd = invocation.executionOptions.cwd;
|
|
618
|
+
const target = cwd ? (this.workspacePathFlavor === "windows" ? win32 : posix).resolve(cwd, path) : path;
|
|
619
|
+
return this.sharedExpectedRevision(target, invocation.signal, name === "write");
|
|
624
620
|
}
|
|
625
621
|
/** Observe exact bytes for CAS, or a daemon-confirmed absent target for creation. */
|
|
626
622
|
async sharedExpectedRevision(path, signal, allowAbsent = true) {
|
|
@@ -723,6 +719,12 @@ export class RemoteToolOperations {
|
|
|
723
719
|
isFile: () => result.kind === "file",
|
|
724
720
|
};
|
|
725
721
|
}
|
|
722
|
+
async resolveWorkspaceDirectory(path) {
|
|
723
|
+
const result = requireRecord(await this.request("workspace.stat", { path, workspaceOnly: true }), "workspace directory result");
|
|
724
|
+
if (result.kind !== "directory")
|
|
725
|
+
throw new Error(`Not a workspace directory: ${path}`);
|
|
726
|
+
return requireString(result.canonicalPath, "workspace directory canonical path");
|
|
727
|
+
}
|
|
726
728
|
async readdir(path) {
|
|
727
729
|
const result = requireRecord(await this.request("workspace.readdir", { path }), "readdir result");
|
|
728
730
|
if (!Array.isArray(result.entries) || !result.entries.every((entry) => typeof entry === "string")) {
|