@greppleai/grip 0.0.0-stage → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +725 -2
- package/dist/bun/cli.d.ts +3 -0
- package/dist/bun/cli.d.ts.map +1 -0
- package/dist/bun/cli.js +11 -0
- package/dist/bun/cli.js.map +1 -0
- package/dist/bun/register-bedrock.d.ts +2 -0
- package/dist/bun/register-bedrock.d.ts.map +1 -0
- package/dist/bun/register-bedrock.js +4 -0
- package/dist/bun/register-bedrock.js.map +1 -0
- package/dist/bun/restore-sandbox-env.d.ts +13 -0
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
- package/dist/bun/restore-sandbox-env.js +32 -0
- package/dist/bun/restore-sandbox-env.js.map +1 -0
- package/dist/cli/args.d.ts +70 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +441 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +60 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/initial-message.d.ts +18 -0
- package/dist/cli/initial-message.d.ts.map +1 -0
- package/dist/cli/initial-message.js +22 -0
- package/dist/cli/initial-message.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +98 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +35 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +82 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +406 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session.d.ts +970 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +5176 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-guidance.d.ts +5 -0
- package/dist/core/auth-guidance.d.ts.map +1 -0
- package/dist/core/auth-guidance.js +21 -0
- package/dist/core/auth-guidance.js.map +1 -0
- package/dist/core/auth-storage.d.ts +150 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +557 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +26 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +99 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +83 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +220 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +65 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +550 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/compression-detection-ledger.d.ts +34 -0
- package/dist/core/compaction/compression-detection-ledger.d.ts.map +1 -0
- package/dist/core/compaction/compression-detection-ledger.js +52 -0
- package/dist/core/compaction/compression-detection-ledger.js.map +1 -0
- package/dist/core/compaction/compression-detector.d.ts +71 -0
- package/dist/core/compaction/compression-detector.d.ts.map +1 -0
- package/dist/core/compaction/compression-detector.js +407 -0
- package/dist/core/compaction/compression-detector.js.map +1 -0
- package/dist/core/compaction/compression-economics.d.ts +55 -0
- package/dist/core/compaction/compression-economics.d.ts.map +1 -0
- package/dist/core/compaction/compression-economics.js +151 -0
- package/dist/core/compaction/compression-economics.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +28 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +165 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +18 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +75 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +245 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +21 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +230 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +1066 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1864 -0
- package/dist/core/export-html/tool-renderer.d.ts +32 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +108 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +78 -0
- package/dist/core/extensions/loader.d.ts +24 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +613 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +160 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +962 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1311 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +51 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +22 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +52 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +318 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/grip-agent.d.ts +240 -0
- package/dist/core/grip-agent.d.ts.map +1 -0
- package/dist/core/grip-agent.js +1243 -0
- package/dist/core/grip-agent.js.map +1 -0
- package/dist/core/grip-manifest.d.ts +9 -0
- package/dist/core/grip-manifest.d.ts.map +1 -0
- package/dist/core/grip-manifest.js +25 -0
- package/dist/core/grip-manifest.js.map +1 -0
- package/dist/core/hooks/aggregate.d.ts +5 -0
- package/dist/core/hooks/aggregate.d.ts.map +1 -0
- package/dist/core/hooks/aggregate.js +226 -0
- package/dist/core/hooks/aggregate.js.map +1 -0
- package/dist/core/hooks/config.d.ts +14 -0
- package/dist/core/hooks/config.d.ts.map +1 -0
- package/dist/core/hooks/config.js +372 -0
- package/dist/core/hooks/config.js.map +1 -0
- package/dist/core/hooks/executor.d.ts +12 -0
- package/dist/core/hooks/executor.d.ts.map +1 -0
- package/dist/core/hooks/executor.js +708 -0
- package/dist/core/hooks/executor.js.map +1 -0
- package/dist/core/hooks/index.d.ts +9 -0
- package/dist/core/hooks/index.d.ts.map +1 -0
- package/dist/core/hooks/index.js +14 -0
- package/dist/core/hooks/index.js.map +1 -0
- package/dist/core/hooks/matcher.d.ts +10 -0
- package/dist/core/hooks/matcher.d.ts.map +1 -0
- package/dist/core/hooks/matcher.js +70 -0
- package/dist/core/hooks/matcher.js.map +1 -0
- package/dist/core/hooks/trust-store.d.ts +38 -0
- package/dist/core/hooks/trust-store.d.ts.map +1 -0
- package/dist/core/hooks/trust-store.js +167 -0
- package/dist/core/hooks/trust-store.js.map +1 -0
- package/dist/core/hooks/types.d.ts +234 -0
- package/dist/core/hooks/types.d.ts.map +1 -0
- package/dist/core/hooks/types.js +52 -0
- package/dist/core/hooks/types.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts +21 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +82 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/instruction-resource-loader.d.ts +81 -0
- package/dist/core/instruction-resource-loader.d.ts.map +1 -0
- package/dist/core/instruction-resource-loader.js +574 -0
- package/dist/core/instruction-resource-loader.js.map +1 -0
- package/dist/core/keybindings.d.ts +399 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +299 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/lsp/abort.d.ts +3 -0
- package/dist/core/lsp/abort.d.ts.map +1 -0
- package/dist/core/lsp/abort.js +28 -0
- package/dist/core/lsp/abort.js.map +1 -0
- package/dist/core/lsp/client.d.ts +108 -0
- package/dist/core/lsp/client.d.ts.map +1 -0
- package/dist/core/lsp/client.js +586 -0
- package/dist/core/lsp/client.js.map +1 -0
- package/dist/core/lsp/config-loader.d.ts +44 -0
- package/dist/core/lsp/config-loader.d.ts.map +1 -0
- package/dist/core/lsp/config-loader.js +223 -0
- package/dist/core/lsp/config-loader.js.map +1 -0
- package/dist/core/lsp/config.d.ts +134 -0
- package/dist/core/lsp/config.d.ts.map +1 -0
- package/dist/core/lsp/config.js +682 -0
- package/dist/core/lsp/config.js.map +1 -0
- package/dist/core/lsp/diagnostics.d.ts +18 -0
- package/dist/core/lsp/diagnostics.d.ts.map +1 -0
- package/dist/core/lsp/diagnostics.js +311 -0
- package/dist/core/lsp/diagnostics.js.map +1 -0
- package/dist/core/lsp/file-sync.d.ts +58 -0
- package/dist/core/lsp/file-sync.d.ts.map +1 -0
- package/dist/core/lsp/file-sync.js +432 -0
- package/dist/core/lsp/file-sync.js.map +1 -0
- package/dist/core/lsp/integration.d.ts +62 -0
- package/dist/core/lsp/integration.d.ts.map +1 -0
- package/dist/core/lsp/integration.js +145 -0
- package/dist/core/lsp/integration.js.map +1 -0
- package/dist/core/lsp/language-map.d.ts +54 -0
- package/dist/core/lsp/language-map.d.ts.map +1 -0
- package/dist/core/lsp/language-map.js +300 -0
- package/dist/core/lsp/language-map.js.map +1 -0
- package/dist/core/lsp/manager.d.ts +120 -0
- package/dist/core/lsp/manager.d.ts.map +1 -0
- package/dist/core/lsp/manager.js +636 -0
- package/dist/core/lsp/manager.js.map +1 -0
- package/dist/core/lsp/navigation.d.ts +32 -0
- package/dist/core/lsp/navigation.d.ts.map +1 -0
- package/dist/core/lsp/navigation.js +327 -0
- package/dist/core/lsp/navigation.js.map +1 -0
- package/dist/core/lsp/portable-path.d.ts +18 -0
- package/dist/core/lsp/portable-path.d.ts.map +1 -0
- package/dist/core/lsp/portable-path.js +83 -0
- package/dist/core/lsp/portable-path.js.map +1 -0
- package/dist/core/lsp/refactor.d.ts +32 -0
- package/dist/core/lsp/refactor.d.ts.map +1 -0
- package/dist/core/lsp/refactor.js +519 -0
- package/dist/core/lsp/refactor.js.map +1 -0
- package/dist/core/lsp/transport.d.ts +39 -0
- package/dist/core/lsp/transport.d.ts.map +1 -0
- package/dist/core/lsp/transport.js +261 -0
- package/dist/core/lsp/transport.js.map +1 -0
- package/dist/core/messages.d.ts +34 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +140 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +148 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +812 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +115 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +498 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/output-guard.d.ts +7 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +89 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +209 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +2341 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +57 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +353 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/provider-display-names.d.ts +2 -0
- package/dist/core/provider-display-names.d.ts.map +1 -0
- package/dist/core/provider-display-names.js +33 -0
- package/dist/core/provider-display-names.js.map +1 -0
- package/dist/core/remote-workspace-protocol/contract.d.ts +456 -0
- package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/contract.js +809 -0
- package/dist/core/remote-workspace-protocol/contract.js.map +1 -0
- package/dist/core/remote-workspace-protocol/session.d.ts +247 -0
- package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/session.js +1839 -0
- package/dist/core/remote-workspace-protocol/session.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +32 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +257 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +200 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +1209 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/rules.d.ts +40 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +57 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/sandbox/command.d.ts +27 -0
- package/dist/core/sandbox/command.d.ts.map +1 -0
- package/dist/core/sandbox/command.js +124 -0
- package/dist/core/sandbox/command.js.map +1 -0
- package/dist/core/sandbox/docker.d.ts +169 -0
- package/dist/core/sandbox/docker.d.ts.map +1 -0
- package/dist/core/sandbox/docker.js +633 -0
- package/dist/core/sandbox/docker.js.map +1 -0
- package/dist/core/sandbox/lima.d.ts +38 -0
- package/dist/core/sandbox/lima.d.ts.map +1 -0
- package/dist/core/sandbox/lima.js +324 -0
- package/dist/core/sandbox/lima.js.map +1 -0
- package/dist/core/session/constants.d.ts +2 -0
- package/dist/core/session/constants.d.ts.map +1 -0
- package/dist/core/session/constants.js +2 -0
- package/dist/core/session/constants.js.map +1 -0
- package/dist/core/session/context-metadata.d.ts +5 -0
- package/dist/core/session/context-metadata.d.ts.map +1 -0
- package/dist/core/session/context-metadata.js +55 -0
- package/dist/core/session/context-metadata.js.map +1 -0
- package/dist/core/session/context.d.ts +14 -0
- package/dist/core/session/context.d.ts.map +1 -0
- package/dist/core/session/context.js +117 -0
- package/dist/core/session/context.js.map +1 -0
- package/dist/core/session/ids.d.ts +9 -0
- package/dist/core/session/ids.d.ts.map +1 -0
- package/dist/core/session/ids.js +21 -0
- package/dist/core/session/ids.js.map +1 -0
- package/dist/core/session/in-memory-session-manager.d.ts +17 -0
- package/dist/core/session/in-memory-session-manager.d.ts.map +1 -0
- package/dist/core/session/in-memory-session-manager.js +40 -0
- package/dist/core/session/in-memory-session-manager.js.map +1 -0
- package/dist/core/session/in-memory-session.d.ts +7 -0
- package/dist/core/session/in-memory-session.d.ts.map +1 -0
- package/dist/core/session/in-memory-session.js +11 -0
- package/dist/core/session/in-memory-session.js.map +1 -0
- package/dist/core/session/jsonl-errors.d.ts +36 -0
- package/dist/core/session/jsonl-errors.d.ts.map +1 -0
- package/dist/core/session/jsonl-errors.js +49 -0
- package/dist/core/session/jsonl-errors.js.map +1 -0
- package/dist/core/session/jsonl-helpers.d.ts +20 -0
- package/dist/core/session/jsonl-helpers.d.ts.map +1 -0
- package/dist/core/session/jsonl-helpers.js +21 -0
- package/dist/core/session/jsonl-helpers.js.map +1 -0
- package/dist/core/session/local-session-manager.d.ts +30 -0
- package/dist/core/session/local-session-manager.d.ts.map +1 -0
- package/dist/core/session/local-session-manager.js +205 -0
- package/dist/core/session/local-session-manager.js.map +1 -0
- package/dist/core/session/local-session.d.ts +9 -0
- package/dist/core/session/local-session.d.ts.map +1 -0
- package/dist/core/session/local-session.js +15 -0
- package/dist/core/session/local-session.js.map +1 -0
- package/dist/core/session/migrations.d.ts +11 -0
- package/dist/core/session/migrations.d.ts.map +1 -0
- package/dist/core/session/migrations.js +78 -0
- package/dist/core/session/migrations.js.map +1 -0
- package/dist/core/session/remote-session-client.d.ts +83 -0
- package/dist/core/session/remote-session-client.d.ts.map +1 -0
- package/dist/core/session/remote-session-client.js +224 -0
- package/dist/core/session/remote-session-client.js.map +1 -0
- package/dist/core/session/remote-session-manager.d.ts +32 -0
- package/dist/core/session/remote-session-manager.d.ts.map +1 -0
- package/dist/core/session/remote-session-manager.js +124 -0
- package/dist/core/session/remote-session-manager.js.map +1 -0
- package/dist/core/session/remote-session.d.ts +20 -0
- package/dist/core/session/remote-session.d.ts.map +1 -0
- package/dist/core/session/remote-session.js +33 -0
- package/dist/core/session/remote-session.js.map +1 -0
- package/dist/core/session/session-manager.d.ts +18 -0
- package/dist/core/session/session-manager.d.ts.map +1 -0
- package/dist/core/session/session-manager.js +2 -0
- package/dist/core/session/session-manager.js.map +1 -0
- package/dist/core/session/session.d.ts +140 -0
- package/dist/core/session/session.d.ts.map +1 -0
- package/dist/core/session/session.js +461 -0
- package/dist/core/session/session.js.map +1 -0
- package/dist/core/session/stores/in-memory-session-store.d.ts +39 -0
- package/dist/core/session/stores/in-memory-session-store.d.ts.map +1 -0
- package/dist/core/session/stores/in-memory-session-store.js +168 -0
- package/dist/core/session/stores/in-memory-session-store.js.map +1 -0
- package/dist/core/session/stores/jsonl-session-store.d.ts +97 -0
- package/dist/core/session/stores/jsonl-session-store.d.ts.map +1 -0
- package/dist/core/session/stores/jsonl-session-store.js +1140 -0
- package/dist/core/session/stores/jsonl-session-store.js.map +1 -0
- package/dist/core/session/stores/remote-session-store.d.ts +44 -0
- package/dist/core/session/stores/remote-session-store.d.ts.map +1 -0
- package/dist/core/session/stores/remote-session-store.js +159 -0
- package/dist/core/session/stores/remote-session-store.js.map +1 -0
- package/dist/core/session/stores/session-store.d.ts +42 -0
- package/dist/core/session/stores/session-store.d.ts.map +1 -0
- package/dist/core/session/stores/session-store.js +2 -0
- package/dist/core/session/stores/session-store.js.map +1 -0
- package/dist/core/session/types.d.ts +141 -0
- package/dist/core/session/types.d.ts.map +1 -0
- package/dist/core/session/types.js +2 -0
- package/dist/core/session/types.js.map +1 -0
- package/dist/core/session/usage-ledger.d.ts +18 -0
- package/dist/core/session/usage-ledger.d.ts.map +1 -0
- package/dist/core/session/usage-ledger.js +68 -0
- package/dist/core/session/usage-ledger.js.map +1 -0
- package/dist/core/session-cwd.d.ts +19 -0
- package/dist/core/session-cwd.d.ts.map +1 -0
- package/dist/core/session-cwd.js +38 -0
- package/dist/core/session-cwd.js.map +1 -0
- package/dist/core/settings-manager.d.ts +318 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +991 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +40 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +57 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +36 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/source-info.d.ts +26 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +27 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/system-prompt.d.ts +32 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +131 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/telemetry.d.ts +3 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +9 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/timings.d.ts +10 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +41 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +51 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +310 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/compress-context.d.ts +27 -0
- package/dist/core/tools/compress-context.d.ts.map +1 -0
- package/dist/core/tools/compress-context.js +142 -0
- package/dist/core/tools/compress-context.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +82 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +327 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +50 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +324 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-queue.js +60 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -0
- package/dist/core/tools/find.d.ts +22 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +268 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +27 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +332 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/hash-store.d.ts +12 -0
- package/dist/core/tools/hash-store.d.ts.map +1 -0
- package/dist/core/tools/hash-store.js +48 -0
- package/dist/core/tools/hash-store.js.map +1 -0
- package/dist/core/tools/hashline/apply.d.ts +40 -0
- package/dist/core/tools/hashline/apply.d.ts.map +1 -0
- package/dist/core/tools/hashline/apply.js +261 -0
- package/dist/core/tools/hashline/apply.js.map +1 -0
- package/dist/core/tools/hashline/hash.d.ts +56 -0
- package/dist/core/tools/hashline/hash.d.ts.map +1 -0
- package/dist/core/tools/hashline/hash.js +196 -0
- package/dist/core/tools/hashline/hash.js.map +1 -0
- package/dist/core/tools/hashline/parse.d.ts +8 -0
- package/dist/core/tools/hashline/parse.d.ts.map +1 -0
- package/dist/core/tools/hashline/parse.js +41 -0
- package/dist/core/tools/hashline/parse.js.map +1 -0
- package/dist/core/tools/hashline/resolve.d.ts +51 -0
- package/dist/core/tools/hashline/resolve.d.ts.map +1 -0
- package/dist/core/tools/hashline/resolve.js +187 -0
- package/dist/core/tools/hashline/resolve.js.map +1 -0
- package/dist/core/tools/hashline-utils.d.ts +6 -0
- package/dist/core/tools/hashline-utils.d.ts.map +1 -0
- package/dist/core/tools/hashline-utils.js +23 -0
- package/dist/core/tools/hashline-utils.js.map +1 -0
- package/dist/core/tools/index.d.ts +36 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +141 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +21 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +156 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/operations.d.ts +201 -0
- package/dist/core/tools/operations.d.ts.map +1 -0
- package/dist/core/tools/operations.js +697 -0
- package/dist/core/tools/operations.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts +54 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +184 -0
- package/dist/core/tools/output-accumulator.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +9 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +99 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +32 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +318 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +33 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +61 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/replace-diff.d.ts +16 -0
- package/dist/core/tools/replace-diff.d.ts.map +1 -0
- package/dist/core/tools/replace-diff.js +117 -0
- package/dist/core/tools/replace-diff.js.map +1 -0
- package/dist/core/tools/replace-normalize.d.ts +2 -0
- package/dist/core/tools/replace-normalize.d.ts.map +1 -0
- package/dist/core/tools/replace-normalize.js +73 -0
- package/dist/core/tools/replace-normalize.js.map +1 -0
- package/dist/core/tools/replace-render.d.ts +51 -0
- package/dist/core/tools/replace-render.d.ts.map +1 -0
- package/dist/core/tools/replace-render.js +162 -0
- package/dist/core/tools/replace-render.js.map +1 -0
- package/dist/core/tools/runtime.d.ts +2 -0
- package/dist/core/tools/runtime.d.ts.map +1 -0
- package/dist/core/tools/runtime.js +6 -0
- package/dist/core/tools/runtime.js.map +1 -0
- package/dist/core/tools/session-history.d.ts +55 -0
- package/dist/core/tools/session-history.d.ts.map +1 -0
- package/dist/core/tools/session-history.js +649 -0
- package/dist/core/tools/session-history.js.map +1 -0
- package/dist/core/tools/subagent-agents.d.ts +29 -0
- package/dist/core/tools/subagent-agents.d.ts.map +1 -0
- package/dist/core/tools/subagent-agents.js +223 -0
- package/dist/core/tools/subagent-agents.js.map +1 -0
- package/dist/core/tools/subagent.d.ts +185 -0
- package/dist/core/tools/subagent.d.ts.map +1 -0
- package/dist/core/tools/subagent.js +1309 -0
- package/dist/core/tools/subagent.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +34 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +39 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +215 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/websearch.d.ts +33 -0
- package/dist/core/tools/websearch.d.ts.map +1 -0
- package/dist/core/tools/websearch.js +341 -0
- package/dist/core/tools/websearch.js.map +1 -0
- package/dist/core/tools/workspace-tool-host.d.ts +102 -0
- package/dist/core/tools/workspace-tool-host.d.ts.map +1 -0
- package/dist/core/tools/workspace-tool-host.js +348 -0
- package/dist/core/tools/workspace-tool-host.js.map +1 -0
- package/dist/core/tools/write.d.ts +16 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +204 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/core/workspace-identity.d.ts +7 -0
- package/dist/core/workspace-identity.d.ts.map +1 -0
- package/dist/core/workspace-identity.js +2 -0
- package/dist/core/workspace-identity.js.map +1 -0
- package/dist/daemon/command.d.ts +6 -0
- package/dist/daemon/command.d.ts.map +1 -0
- package/dist/daemon/command.js +58 -0
- package/dist/daemon/command.js.map +1 -0
- package/dist/daemon/config.d.ts +43 -0
- package/dist/daemon/config.d.ts.map +1 -0
- package/dist/daemon/config.js +304 -0
- package/dist/daemon/config.js.map +1 -0
- package/dist/daemon/help.d.ts +2 -0
- package/dist/daemon/help.d.ts.map +1 -0
- package/dist/daemon/help.js +42 -0
- package/dist/daemon/help.js.map +1 -0
- package/dist/daemon/lsp-config.d.ts +4 -0
- package/dist/daemon/lsp-config.d.ts.map +1 -0
- package/dist/daemon/lsp-config.js +155 -0
- package/dist/daemon/lsp-config.js.map +1 -0
- package/dist/daemon/security.d.ts +19 -0
- package/dist/daemon/security.d.ts.map +1 -0
- package/dist/daemon/security.js +175 -0
- package/dist/daemon/security.js.map +1 -0
- package/dist/daemon/server.d.ts +20 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +400 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/workspace-runtime.d.ts +46 -0
- package/dist/daemon/workspace-runtime.d.ts.map +1 -0
- package/dist/daemon/workspace-runtime.js +673 -0
- package/dist/daemon/workspace-runtime.js.map +1 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +39 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +763 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +35 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +412 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +29 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +149 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +36 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +173 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +18 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +54 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +74 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +514 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +25 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +85 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +80 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +118 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +22 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +128 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +83 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +36 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +227 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/hook-execution.d.ts +19 -0
- package/dist/modes/interactive/components/hook-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/hook-execution.js +184 -0
- package/dist/modes/interactive/components/hook-execution.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +36 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +55 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +176 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts +4 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.js +19 -0
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
- package/dist/modes/interactive/components/mermaid.d.ts +14 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +228 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +52 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +296 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +165 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +50 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +300 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +22 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +144 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +108 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +835 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +81 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +455 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +39 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +50 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +51 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +67 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +306 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +127 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +1098 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +114 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +16 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +49 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +557 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +5859 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +86 -0
- package/dist/modes/interactive/theme/light.json +85 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +106 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +1030 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/json-event.d.ts +28 -0
- package/dist/modes/json-event.d.ts.map +1 -0
- package/dist/modes/json-event.js +12 -0
- package/dist/modes/json-event.js.map +1 -0
- package/dist/modes/print-mode.d.ts +29 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +142 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/jsonl.d.ts +17 -0
- package/dist/modes/rpc/jsonl.d.ts.map +1 -0
- package/dist/modes/rpc/jsonl.js +49 -0
- package/dist/modes/rpc/jsonl.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +321 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +755 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +963 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +652 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/package-manager-cli.d.ts +4 -0
- package/dist/package-manager-cli.d.ts.map +1 -0
- package/dist/package-manager-cli.js +488 -0
- package/dist/package-manager-cli.js.map +1 -0
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +25 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/changelog.d.ts +23 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +74 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/child-process.d.ts +15 -0
- package/dist/utils/child-process.d.ts.map +1 -0
- package/dist/utils/child-process.js +88 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +13 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +248 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +11 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +20 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +4 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +171 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/deprecation.d.ts +4 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/deprecation.js +13 -0
- package/dist/utils/deprecation.js.map +1 -0
- package/dist/utils/directory-completions.d.ts +5 -0
- package/dist/utils/directory-completions.d.ts.map +1 -0
- package/dist/utils/directory-completions.js +64 -0
- package/dist/utils/directory-completions.js.map +1 -0
- package/dist/utils/exif-orientation.d.ts +6 -0
- package/dist/utils/exif-orientation.d.ts.map +1 -0
- package/dist/utils/exif-orientation.js +166 -0
- package/dist/utils/exif-orientation.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs-watch.d.ts +5 -0
- package/dist/utils/fs-watch.d.ts.map +1 -0
- package/dist/utils/fs-watch.js +25 -0
- package/dist/utils/fs-watch.js.map +1 -0
- package/dist/utils/git.d.ts +27 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +237 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/grip-user-agent.d.ts +2 -0
- package/dist/utils/grip-user-agent.d.ts.map +1 -0
- package/dist/utils/grip-user-agent.js +5 -0
- package/dist/utils/grip-user-agent.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +40 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/image-convert.d.ts +12 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +43 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-process.d.ts +18 -0
- package/dist/utils/image-process.d.ts.map +1 -0
- package/dist/utils/image-process.js +83 -0
- package/dist/utils/image-process.js.map +1 -0
- package/dist/utils/image-resize-core.d.ts +30 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -0
- package/dist/utils/image-resize-core.js +133 -0
- package/dist/utils/image-resize-core.js.map +1 -0
- package/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/dist/utils/image-resize-worker.js +31 -0
- package/dist/utils/image-resize-worker.js.map +1 -0
- package/dist/utils/image-resize.d.ts +19 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +81 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/mime.d.ts +3 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +110 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/open-browser.d.ts +9 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +22 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/paths.d.ts +31 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +87 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/photon.d.ts +22 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +125 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +28 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +188 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts +12 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +125 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +5 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +329 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/dist/utils/version-check.d.ts +14 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +91 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/utils/windows-self-update.d.ts.map +1 -0
- package/dist/utils/windows-self-update.js +77 -0
- package/dist/utils/windows-self-update.js.map +1 -0
- package/docs/compaction.md +408 -0
- package/docs/custom-provider.md +714 -0
- package/docs/daemon-architecture.md +399 -0
- package/docs/daemon.md +110 -0
- package/docs/development.md +72 -0
- package/docs/docs.json +164 -0
- package/docs/extensions.md +2745 -0
- package/docs/hooks.md +85 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/index.md +81 -0
- package/docs/json.md +89 -0
- package/docs/keybindings.md +230 -0
- package/docs/lsp.md +499 -0
- package/docs/migrating-to-grip.md +18 -0
- package/docs/models.md +496 -0
- package/docs/packages.md +228 -0
- package/docs/prompt-templates.md +88 -0
- package/docs/providers.md +251 -0
- package/docs/quickstart.md +167 -0
- package/docs/rpc.md +1492 -0
- package/docs/rules.md +117 -0
- package/docs/sandbox.md +181 -0
- package/docs/sdk.md +360 -0
- package/docs/session-format.md +414 -0
- package/docs/sessions.md +137 -0
- package/docs/settings.md +371 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +246 -0
- package/docs/terminal-setup.md +112 -0
- package/docs/termux.md +129 -0
- package/docs/themes.md +295 -0
- package/docs/tmux.md +61 -0
- package/docs/tui.md +918 -0
- package/docs/usage.md +304 -0
- package/docs/windows.md +17 -0
- package/examples/README.md +31 -0
- package/examples/daemon-docker/Dockerfile +43 -0
- package/examples/daemon-docker/README.md +45 -0
- package/examples/extensions/README.md +208 -0
- package/examples/extensions/auto-commit-on-exit.ts +46 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/border-status-editor.ts +145 -0
- package/examples/extensions/built-in-tool-renderer.ts +259 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +82 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +131 -0
- package/examples/extensions/custom-footer.ts +79 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +707 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +402 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +104 -0
- package/examples/extensions/dirty-repo-guard.ts +59 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +133 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/examples/extensions/dynamic-resources/RULES.md +8 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +16 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/git-merge-and-resolve.ts +125 -0
- package/examples/extensions/github-issue-autocomplete.ts +191 -0
- package/examples/extensions/handoff.ts +191 -0
- package/examples/extensions/hello.ts +26 -0
- package/examples/extensions/hidden-thinking-label.ts +53 -0
- package/examples/extensions/inline-bash.ts +104 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +194 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +428 -0
- package/examples/extensions/modal-editor.ts +86 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +1374 -0
- package/examples/extensions/overlay-test.ts +171 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +346 -0
- package/examples/extensions/plan-mode/utils.ts +172 -0
- package/examples/extensions/preset.ts +426 -0
- package/examples/extensions/prompt-customizer.ts +97 -0
- package/examples/extensions/protected-paths.ts +29 -0
- package/examples/extensions/provider-payload.ts +18 -0
- package/examples/extensions/qna.ts +125 -0
- package/examples/extensions/question.ts +294 -0
- package/examples/extensions/questionnaire.ts +459 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +118 -0
- package/examples/extensions/sandbox/index.ts +320 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +381 -0
- package/examples/extensions/space-invaders.ts +597 -0
- package/examples/extensions/status-line.ts +32 -0
- package/examples/extensions/structured-output.ts +65 -0
- package/examples/extensions/subagent/README.md +175 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/subagent/index.ts +1083 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +186 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/tic-tac-toe.ts +1091 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +306 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +141 -0
- package/examples/extensions/trigger-compact.ts +50 -0
- package/examples/extensions/truncated-tool.ts +200 -0
- package/examples/extensions/widget-placement.ts +9 -0
- package/examples/extensions/with-deps/index.ts +32 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/extensions/working-indicator.ts +123 -0
- package/examples/extensions/working-message-test.ts +25 -0
- package/examples/remote-session-server/README.md +71 -0
- package/examples/remote-session-server/server.ts +353 -0
- package/examples/rpc-extension-ui.ts +642 -0
- package/examples/sandbox-docker/Dockerfile +274 -0
- package/examples/sandbox-docker/README.md +88 -0
- package/examples/sdk/01-minimal.ts +27 -0
- package/examples/sdk/02-custom-model.ts +54 -0
- package/examples/sdk/03-custom-prompt.ts +76 -0
- package/examples/sdk/04-skills.ts +60 -0
- package/examples/sdk/05-tools.ts +55 -0
- package/examples/sdk/06-extensions.ts +94 -0
- package/examples/sdk/07-context-files.ts +47 -0
- package/examples/sdk/08-prompt-templates.ts +56 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +50 -0
- package/examples/sdk/10-settings.ts +58 -0
- package/examples/sdk/11-sessions.ts +54 -0
- package/examples/sdk/12-full-control.ts +79 -0
- package/examples/sdk/13-session-runtime.ts +49 -0
- package/examples/sdk/README.md +94 -0
- package/npm-shrinkwrap.json +1878 -0
- package/package.json +102 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instruction-resource-loader.js","sourceRoot":"","sources":["../../src/core/instruction-resource-loader.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Dirent, existsSync, readdirSync, readFileSync, type Stats, statSync } from \"node:fs\";\nimport { dirname, join, relative, resolve, sep } from \"node:path\";\nimport ignore from \"ignore\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../config.ts\";\nimport { parseFrontmatter } from \"../utils/frontmatter.ts\";\nimport { canonicalizePath, resolvePath } from \"../utils/paths.ts\";\nimport type { ResourceCollision, ResourceDiagnostic } from \"./diagnostics.ts\";\nimport {\n\tdirnamePortablePath,\n\tjoinPortablePath,\n\tnormalizePortablePath,\n\ttype PortablePathFlavor,\n\tpathComparisonValue,\n\trelativePortablePath,\n\trelativeWithin,\n\tresolvePortablePath,\n} from \"./lsp/portable-path.ts\";\nimport { createSyntheticSourceInfo, type SourceInfo } from \"./source-info.ts\";\nimport type { ToolFileStat, ToolOperations } from \"./tools/operations.ts\";\n\nconst MAX_NAME_LENGTH = 64;\nconst MAX_DESCRIPTION_LENGTH = 1024;\nconst IGNORE_FILE_NAMES = [\".gitignore\", \".ignore\", \".fdignore\"];\n\ntype ConfiguredResourceSource = \"user\" | \"project\" | \"path\";\ntype ResourceSource = ConfiguredResourceSource | string;\n\nexport interface InstructionResourceFrontmatter {\n\tname?: string;\n\tdescription?: string;\n\ttools?: string | string[];\n\t\"disable-model-invocation\"?: boolean;\n\t[key: string]: unknown;\n}\n\nexport interface InstructionResource {\n\tname: string;\n\tdescription: string;\n\tfilePath: string;\n\tbaseDir: string;\n\tsourceInfo: SourceInfo;\n\tdisableModelInvocation: boolean;\n\ttools?: string[];\n\tcontent?: string;\n}\n\nexport interface InstructionResourceLoadResult<TResource extends InstructionResource> {\n\tresources: TResource[];\n\tdiagnostics: ResourceDiagnostic[];\n}\n\nexport interface InstructionResourceDirectoryOptions {\n\t/** Directory to scan for instruction resources. */\n\tdir: string;\n\t/** Source identifier for these instruction resources. */\n\tsource: string;\n}\ninterface LocalResourceTraversal<TResource extends InstructionResource> {\n\tentries: Dirent[];\n\tdir: string;\n\tsource: string;\n\tincludeRootFiles: boolean;\n\tignoreMatcher: ignore.Ignore;\n\trootDir: string;\n\tresources: TResource[];\n\tdiagnostics: ResourceDiagnostic[];\n}\n\ninterface BackendResourceTraversal<TResource extends InstructionResource> {\n\tentries: string[];\n\toperations: ToolOperations;\n\tdir: string;\n\tsource: string;\n\tincludeRootFiles: boolean;\n\tignoreMatcher: ignore.Ignore;\n\trootDir: string;\n\tresources: TResource[];\n\tdiagnostics: ResourceDiagnostic[];\n}\n\ninterface InstructionResourceParseResult<TResource extends InstructionResource> {\n\tresource: TResource | null;\n\tdiagnostics: ResourceDiagnostic[];\n}\n\ninterface InstructionResourcePromptFormatOptions {\n\tintro: string[];\n\tcontainerTag: string;\n\titemTag: string;\n}\n\nexport interface InstructionResourceLoaderOptions {\n\tcwd: string;\n\tagentDir: string;\n\tresourcePaths: string[];\n\tincludeDefaults: boolean;\n}\n\nexport interface InstructionResourceLoaderWithOperationsOptions extends InstructionResourceLoaderOptions {\n\toperations: ToolOperations;\n}\n\nexport interface InstructionResourceLoaderConfig {\n\tresourceType: ResourceCollision[\"resourceType\"];\n\tdefaultDirectoryName: string;\n\trootFileName: string;\n}\n\nfunction toPosixPath(path: string): string {\n\treturn path.split(sep).join(\"/\");\n}\n\nfunction prefixIgnorePattern(line: string, prefix: string): string | null {\n\tconst trimmed = line.trim();\n\tif (!trimmed) return null;\n\tif (trimmed.startsWith(\"#\") && !trimmed.startsWith(\"\\\\#\")) return null;\n\n\tlet pattern = line;\n\tlet negated = false;\n\tif (pattern.startsWith(\"!\")) {\n\t\tnegated = true;\n\t\tpattern = pattern.slice(1);\n\t} else if (pattern.startsWith(\"\\\\!\")) {\n\t\tpattern = pattern.slice(1);\n\t}\n\tif (pattern.startsWith(\"/\")) pattern = pattern.slice(1);\n\n\tconst prefixed = prefix ? `${prefix}${pattern}` : pattern;\n\treturn negated ? `!${prefixed}` : prefixed;\n}\n\nfunction validateName(name: string): string[] {\n\tconst errors: string[] = [];\n\tif (name.length > MAX_NAME_LENGTH) {\n\t\terrors.push(`name exceeds ${MAX_NAME_LENGTH} characters (${name.length})`);\n\t}\n\tif (!/^[a-z0-9-]+$/.test(name)) {\n\t\terrors.push(\"name contains invalid characters (must be lowercase a-z, 0-9, hyphens only)\");\n\t}\n\tif (name.startsWith(\"-\") || name.endsWith(\"-\")) {\n\t\terrors.push(\"name must not start or end with a hyphen\");\n\t}\n\tif (name.includes(\"--\")) {\n\t\terrors.push(\"name must not contain consecutive hyphens\");\n\t}\n\treturn errors;\n}\n\nfunction validateDescription(description: string | undefined): string[] {\n\tif (!description || description.trim() === \"\") return [\"description is required\"];\n\tif (description.length > MAX_DESCRIPTION_LENGTH) {\n\t\treturn [`description exceeds ${MAX_DESCRIPTION_LENGTH} characters (${description.length})`];\n\t}\n\treturn [];\n}\n\nfunction normalizeFrontmatterTools(value: unknown): string[] {\n\tconst raw = Array.isArray(value) ? value : typeof value === \"string\" ? value.split(/[\\s,]+/) : [];\n\tconst tools: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const entry of raw) {\n\t\tif (typeof entry !== \"string\") continue;\n\t\tconst trimmed = entry.trim();\n\t\tif (trimmed.length > 0 && !seen.has(trimmed)) {\n\t\t\tseen.add(trimmed);\n\t\t\ttools.push(trimmed);\n\t\t}\n\t}\n\treturn tools;\n}\n\nfunction createResourceSourceInfo(filePath: string, baseDir: string, source: ResourceSource): SourceInfo {\n\tswitch (source) {\n\t\tcase \"user\":\n\t\t\treturn createSyntheticSourceInfo(filePath, { source: \"local\", scope: \"user\", baseDir });\n\t\tcase \"project\":\n\t\t\treturn createSyntheticSourceInfo(filePath, { source: \"local\", scope: \"project\", baseDir });\n\t\tcase \"path\":\n\t\t\treturn createSyntheticSourceInfo(filePath, { source: \"local\", baseDir });\n\t\tdefault:\n\t\t\treturn createSyntheticSourceInfo(filePath, { source, baseDir });\n\t}\n}\n\nfunction isUnderPath(target: string, root: string): boolean {\n\tconst normalizedRoot = resolve(root);\n\tif (target === normalizedRoot) return true;\n\tconst prefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\treturn target.startsWith(prefix);\n}\n\nasync function backendPathExists(operations: ToolOperations, path: string): Promise<boolean> {\n\ttry {\n\t\tawait operations.access(path, \"exists\");\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport abstract class InstructionResourceLoader<\n\tTResource extends InstructionResource,\n\tTFrontmatter extends InstructionResourceFrontmatter,\n> {\n\tprivate resourceType: ResourceCollision[\"resourceType\"];\n\tprivate defaultDirectoryName: string;\n\tprivate rootFileName: string;\n\n\tconstructor(config: InstructionResourceLoaderConfig) {\n\t\tthis.resourceType = config.resourceType;\n\t\tthis.defaultDirectoryName = config.defaultDirectoryName;\n\t\tthis.rootFileName = config.rootFileName;\n\t}\n\n\tprotected abstract createResource(resource: InstructionResource, frontmatter: TFrontmatter): TResource;\n\n\tprotected loadResourcesFromDir(dir: string, source: string): InstructionResourceLoadResult<TResource> {\n\t\treturn this.loadResourcesFromDirInternal(dir, source, true);\n\t}\n\n\tprivate loadResourcesFromConfiguredPath(\n\t\tresolvedPath: string,\n\t\tsource: ConfiguredResourceSource,\n\t): InstructionResourceLoadResult<TResource> {\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\treturn {\n\t\t\t\tresources: [],\n\t\t\t\tdiagnostics: [{ type: \"warning\", message: `${this.resourceType} path does not exist`, path: resolvedPath }],\n\t\t\t};\n\t\t}\n\t\ttry {\n\t\t\tconst stats = statSync(resolvedPath);\n\t\t\tif (stats.isDirectory()) return this.loadResourcesFromDirInternal(resolvedPath, source, true);\n\t\t\tif (!stats.isFile() || !resolvedPath.endsWith(\".md\")) {\n\t\t\t\treturn {\n\t\t\t\t\tresources: [],\n\t\t\t\t\tdiagnostics: [\n\t\t\t\t\t\t{ type: \"warning\", message: `${this.resourceType} path is not a markdown file`, path: resolvedPath },\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst result = this.loadResourceFromFile(resolvedPath, source);\n\t\t\treturn { resources: result.resource ? [result.resource] : [], diagnostics: result.diagnostics };\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tresources: [],\n\t\t\t\tdiagnostics: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : `failed to read ${this.resourceType} path`,\n\t\t\t\t\t\tpath: resolvedPath,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected loadResources(options: InstructionResourceLoaderOptions): InstructionResourceLoadResult<TResource> {\n\t\tconst resolvedCwd = resolvePath(options.cwd);\n\t\tconst resolvedAgentDir = resolvePath(options.agentDir ?? getAgentDir());\n\t\tconst resourceMap = new Map<string, TResource>();\n\t\tconst realPathSet = new Set<string>();\n\t\tconst allDiagnostics: ResourceDiagnostic[] = [];\n\t\tconst collisionDiagnostics: ResourceDiagnostic[] = [];\n\n\t\tconst addResources = (result: InstructionResourceLoadResult<TResource>): void => {\n\t\t\tallDiagnostics.push(...result.diagnostics);\n\t\t\tfor (const resource of result.resources) {\n\t\t\t\tconst realPath = canonicalizePath(resource.filePath);\n\t\t\t\tif (realPathSet.has(realPath)) continue;\n\t\t\t\tconst existing = resourceMap.get(resource.name);\n\t\t\t\tif (existing) {\n\t\t\t\t\tcollisionDiagnostics.push(this.createCollisionDiagnostic(resource, existing));\n\t\t\t\t} else {\n\t\t\t\t\tresourceMap.set(resource.name, resource);\n\t\t\t\t\trealPathSet.add(realPath);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options.includeDefaults) {\n\t\t\taddResources(\n\t\t\t\tthis.loadResourcesFromDirInternal(join(resolvedAgentDir, this.defaultDirectoryName), \"user\", true),\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\tthis.loadResourcesFromDirInternal(\n\t\t\t\t\tresolve(resolvedCwd, CONFIG_DIR_NAME, this.defaultDirectoryName),\n\t\t\t\t\t\"project\",\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tconst userDir = join(resolvedAgentDir, this.defaultDirectoryName);\n\t\tconst projectDir = resolve(resolvedCwd, CONFIG_DIR_NAME, this.defaultDirectoryName);\n\t\tconst getSource = (resolvedPath: string): ConfiguredResourceSource => {\n\t\t\tif (!options.includeDefaults) {\n\t\t\t\tif (isUnderPath(resolvedPath, userDir)) return \"user\";\n\t\t\t\tif (isUnderPath(resolvedPath, projectDir)) return \"project\";\n\t\t\t}\n\t\t\treturn \"path\";\n\t\t};\n\n\t\tfor (const rawPath of options.resourcePaths) {\n\t\t\tconst resolvedPath = resolvePath(rawPath, resolvedCwd, { trim: true });\n\t\t\taddResources(this.loadResourcesFromConfiguredPath(resolvedPath, getSource(resolvedPath)));\n\t\t}\n\n\t\treturn {\n\t\t\tresources: Array.from(resourceMap.values()),\n\t\t\tdiagnostics: [...allDiagnostics, ...collisionDiagnostics],\n\t\t};\n\t}\n\n\tprivate async loadResourcesFromConfiguredPathWithOperations(\n\t\toperations: ToolOperations,\n\t\tresolvedPath: string,\n\t\tsource: ConfiguredResourceSource,\n\t): Promise<InstructionResourceLoadResult<TResource>> {\n\t\tif (!(await backendPathExists(operations, resolvedPath))) {\n\t\t\treturn {\n\t\t\t\tresources: [],\n\t\t\t\tdiagnostics: [{ type: \"warning\", message: `${this.resourceType} path does not exist`, path: resolvedPath }],\n\t\t\t};\n\t\t}\n\t\ttry {\n\t\t\tconst stats = await operations.stat(resolvedPath);\n\t\t\tif (stats.isDirectory()) {\n\t\t\t\treturn this.loadResourcesFromDirInternalWithOperations(operations, resolvedPath, source, true);\n\t\t\t}\n\t\t\tif (!stats.isFile() || !resolvedPath.endsWith(\".md\")) {\n\t\t\t\treturn {\n\t\t\t\t\tresources: [],\n\t\t\t\t\tdiagnostics: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\t\t\tmessage: `${this.resourceType} path is not a markdown file`,\n\t\t\t\t\t\t\tpath: resolvedPath,\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\tconst result = await this.loadResourceFromFileWithOperations(operations, resolvedPath, source);\n\t\t\treturn { resources: result.resource ? [result.resource] : [], diagnostics: result.diagnostics };\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tresources: [],\n\t\t\t\tdiagnostics: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : `failed to read ${this.resourceType} path`,\n\t\t\t\t\t\tpath: resolvedPath,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected async loadResourcesWithOperations(\n\t\toptions: InstructionResourceLoaderWithOperationsOptions,\n\t): Promise<InstructionResourceLoadResult<TResource>> {\n\t\tconst backend = options.operations.getBackendInfo?.();\n\t\tconst pathFlavor = backend?.type === \"remote\" && backend.configured ? backend.workspace.pathFlavor : undefined;\n\t\tconst resolvedCwd = resolvePortablePath(options.operations.cwd, options.cwd);\n\t\tconst resolvedAgentDir = normalizePortablePath(options.agentDir ?? getAgentDir(), pathFlavor);\n\t\tconst resourceMap = new Map<string, TResource>();\n\t\tconst pathSet = new Set<string>();\n\t\tconst allDiagnostics: ResourceDiagnostic[] = [];\n\t\tconst collisionDiagnostics: ResourceDiagnostic[] = [];\n\n\t\tconst addResources = (result: InstructionResourceLoadResult<TResource>): void => {\n\t\t\tallDiagnostics.push(...result.diagnostics);\n\t\t\tfor (const resource of result.resources) {\n\t\t\t\tconst canonicalPath = pathComparisonValue(resource.filePath, pathFlavor);\n\t\t\t\tif (pathSet.has(canonicalPath)) continue;\n\t\t\t\tconst existing = resourceMap.get(resource.name);\n\t\t\t\tif (existing) {\n\t\t\t\t\tcollisionDiagnostics.push(this.createCollisionDiagnostic(resource, existing));\n\t\t\t\t} else {\n\t\t\t\t\tresourceMap.set(resource.name, resource);\n\t\t\t\t\tpathSet.add(canonicalPath);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options.includeDefaults) {\n\t\t\taddResources(\n\t\t\t\tawait this.loadResourcesFromDirInternalWithOperations(\n\t\t\t\t\toptions.operations,\n\t\t\t\t\tjoinPortablePath(resolvedAgentDir, this.defaultDirectoryName),\n\t\t\t\t\t\"user\",\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t);\n\t\t\taddResources(\n\t\t\t\tawait this.loadResourcesFromDirInternalWithOperations(\n\t\t\t\t\toptions.operations,\n\t\t\t\t\tjoinPortablePath(resolvedCwd, CONFIG_DIR_NAME, this.defaultDirectoryName),\n\t\t\t\t\t\"project\",\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tconst userDir = joinPortablePath(resolvedAgentDir, this.defaultDirectoryName);\n\t\tconst projectDir = joinPortablePath(resolvedCwd, CONFIG_DIR_NAME, this.defaultDirectoryName);\n\t\tconst getSource = (resolvedPath: string): ConfiguredResourceSource => {\n\t\t\tif (!options.includeDefaults) {\n\t\t\t\tif (relativeWithin(userDir, resolvedPath) !== undefined) return \"user\";\n\t\t\t\tif (relativeWithin(projectDir, resolvedPath) !== undefined) return \"project\";\n\t\t\t}\n\t\t\treturn \"path\";\n\t\t};\n\n\t\tfor (const rawPath of options.resourcePaths) {\n\t\t\tconst resolvedPath = resolvePortablePath(resolvedCwd, rawPath.trim());\n\t\t\taddResources(\n\t\t\t\tawait this.loadResourcesFromConfiguredPathWithOperations(\n\t\t\t\t\toptions.operations,\n\t\t\t\t\tresolvedPath,\n\t\t\t\t\tgetSource(resolvedPath),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tresources: Array.from(resourceMap.values()),\n\t\t\tdiagnostics: [...allDiagnostics, ...collisionDiagnostics],\n\t\t};\n\t}\n\n\tprivate createCollisionDiagnostic(resource: TResource, existing: TResource): ResourceDiagnostic {\n\t\treturn {\n\t\t\ttype: \"collision\",\n\t\t\tmessage: `name \"${resource.name}\" collision`,\n\t\t\tpath: resource.filePath,\n\t\t\tcollision: {\n\t\t\t\tresourceType: this.resourceType,\n\t\t\t\tname: resource.name,\n\t\t\t\twinnerPath: existing.filePath,\n\t\t\t\tloserPath: resource.filePath,\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate addIgnoreRules(ig: ignore.Ignore, dir: string, rootDir: string): void {\n\t\tconst relativeDir = relative(rootDir, dir);\n\t\tconst prefix = relativeDir ? `${toPosixPath(relativeDir)}/` : \"\";\n\t\tfor (const filename of IGNORE_FILE_NAMES) {\n\t\t\tconst ignorePath = join(dir, filename);\n\t\t\tif (!existsSync(ignorePath)) continue;\n\t\t\ttry {\n\t\t\t\tconst patterns = readFileSync(ignorePath, \"utf-8\")\n\t\t\t\t\t.split(/\\r?\\n/)\n\t\t\t\t\t.map((line) => prefixIgnorePattern(line, prefix))\n\t\t\t\t\t.filter((line): line is string => Boolean(line));\n\t\t\t\tif (patterns.length > 0) ig.add(patterns);\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tprivate async addIgnoreRulesWithOperations(\n\t\toperations: ToolOperations,\n\t\tig: ignore.Ignore,\n\t\tdir: string,\n\t\trootDir: string,\n\t): Promise<void> {\n\t\tconst relativeDir = relativePortablePath(rootDir, dir);\n\t\tconst prefix = relativeDir && relativeDir !== \".\" ? `${relativeDir.replace(/\\\\/g, \"/\")}/` : \"\";\n\t\tfor (const filename of IGNORE_FILE_NAMES) {\n\t\t\tconst ignorePath = joinPortablePath(dir, filename);\n\t\t\tif (!(await backendPathExists(operations, ignorePath))) continue;\n\t\t\ttry {\n\t\t\t\tconst patterns = (await operations.readFile(ignorePath))\n\t\t\t\t\t.toString(\"utf-8\")\n\t\t\t\t\t.split(/\\r?\\n/)\n\t\t\t\t\t.map((line) => prefixIgnorePattern(line, prefix))\n\t\t\t\t\t.filter((line): line is string => Boolean(line));\n\t\t\t\tif (patterns.length > 0) ig.add(patterns);\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tprivate getLocalResourceEntry(entry: Dirent, fullPath: string): Dirent | Stats | undefined {\n\t\tif (!entry.isSymbolicLink()) return entry;\n\t\ttry {\n\t\t\treturn statSync(fullPath);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate loadRootResourceFromEntries(\n\t\tentries: Dirent[],\n\t\tdir: string,\n\t\tsource: string,\n\t\tignoreMatcher: ignore.Ignore,\n\t\trootDir: string,\n\t): InstructionResourceLoadResult<TResource> | undefined {\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.name !== this.rootFileName) continue;\n\t\t\tconst fullPath = join(dir, entry.name);\n\t\t\tconst resourceEntry = this.getLocalResourceEntry(entry, fullPath);\n\t\t\tif (!resourceEntry?.isFile() || ignoreMatcher.ignores(toPosixPath(relative(rootDir, fullPath)))) continue;\n\t\t\tconst result = this.loadResourceFromFile(fullPath, source);\n\t\t\treturn { resources: result.resource ? [result.resource] : [], diagnostics: result.diagnostics };\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate loadNestedResourceEntry(entry: Dirent, context: LocalResourceTraversal<TResource>): void {\n\t\tif (entry.name.startsWith(\".\") || entry.name === \"node_modules\") return;\n\t\tconst fullPath = join(context.dir, entry.name);\n\t\tconst resourceEntry = this.getLocalResourceEntry(entry, fullPath);\n\t\tif (!resourceEntry) return;\n\t\tconst relativePath = toPosixPath(relative(context.rootDir, fullPath));\n\t\tif (context.ignoreMatcher.ignores(resourceEntry.isDirectory() ? `${relativePath}/` : relativePath)) return;\n\t\tif (resourceEntry.isDirectory()) {\n\t\t\tconst nested = this.loadResourcesFromDirInternal(\n\t\t\t\tfullPath,\n\t\t\t\tcontext.source,\n\t\t\t\tfalse,\n\t\t\t\tcontext.ignoreMatcher,\n\t\t\t\tcontext.rootDir,\n\t\t\t);\n\t\t\tcontext.resources.push(...nested.resources);\n\t\t\tcontext.diagnostics.push(...nested.diagnostics);\n\t\t\treturn;\n\t\t}\n\t\tif (!resourceEntry.isFile() || !context.includeRootFiles || !entry.name.endsWith(\".md\")) return;\n\t\tconst result = this.loadResourceFromFile(fullPath, context.source);\n\t\tif (result.resource) context.resources.push(result.resource);\n\t\tcontext.diagnostics.push(...result.diagnostics);\n\t}\n\n\tprivate loadNestedResourcesFromEntries(context: LocalResourceTraversal<TResource>): void {\n\t\tfor (const entry of context.entries) this.loadNestedResourceEntry(entry, context);\n\t}\n\n\tprivate loadResourcesFromDirInternal(\n\t\tdir: string,\n\t\tsource: string,\n\t\tincludeRootFiles: boolean,\n\t\tignoreMatcher?: ignore.Ignore,\n\t\trootDir?: string,\n\t): InstructionResourceLoadResult<TResource> {\n\t\tconst resources: TResource[] = [];\n\t\tconst diagnostics: ResourceDiagnostic[] = [];\n\t\tif (!existsSync(dir)) return { resources, diagnostics };\n\n\t\tconst root = rootDir ?? dir;\n\t\tconst ig = ignoreMatcher ?? ignore();\n\t\tthis.addIgnoreRules(ig, dir, root);\n\t\ttry {\n\t\t\tconst entries = readdirSync(dir, { withFileTypes: true });\n\t\t\tconst rootResource = this.loadRootResourceFromEntries(entries, dir, source, ig, root);\n\t\t\tif (rootResource) return rootResource;\n\t\t\tthis.loadNestedResourcesFromEntries({\n\t\t\t\tentries,\n\t\t\t\tdir,\n\t\t\t\tsource,\n\t\t\t\tincludeRootFiles,\n\t\t\t\tignoreMatcher: ig,\n\t\t\t\trootDir: root,\n\t\t\t\tresources,\n\t\t\t\tdiagnostics,\n\t\t\t});\n\t\t} catch {}\n\t\treturn { resources, diagnostics };\n\t}\n\n\tprivate async getBackendResourceEntry(\n\t\toperations: ToolOperations,\n\t\tfullPath: string,\n\t): Promise<ToolFileStat | undefined> {\n\t\ttry {\n\t\t\treturn await operations.stat(fullPath);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate async loadRootResourceWithOperations(\n\t\tcontext: BackendResourceTraversal<TResource>,\n\t): Promise<InstructionResourceLoadResult<TResource> | undefined> {\n\t\tfor (const name of context.entries) {\n\t\t\tif (name !== this.rootFileName) continue;\n\t\t\tconst fullPath = joinPortablePath(context.dir, name);\n\t\t\tconst resourceEntry = await this.getBackendResourceEntry(context.operations, fullPath);\n\t\t\tif (\n\t\t\t\t!resourceEntry?.isFile() ||\n\t\t\t\tcontext.ignoreMatcher.ignores(relativePortablePath(context.rootDir, fullPath).replace(/\\\\/g, \"/\"))\n\t\t\t)\n\t\t\t\tcontinue;\n\t\t\tconst result = await this.loadResourceFromFileWithOperations(context.operations, fullPath, context.source);\n\t\t\treturn { resources: result.resource ? [result.resource] : [], diagnostics: result.diagnostics };\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async loadNestedResourceWithOperations(\n\t\tname: string,\n\t\tcontext: BackendResourceTraversal<TResource>,\n\t): Promise<void> {\n\t\tif (name.startsWith(\".\") || name === \"node_modules\") return;\n\t\tconst fullPath = joinPortablePath(context.dir, name);\n\t\tconst resourceEntry = await this.getBackendResourceEntry(context.operations, fullPath);\n\t\tif (!resourceEntry) return;\n\t\tconst relativePath = relativePortablePath(context.rootDir, fullPath).replace(/\\\\/g, \"/\");\n\t\tif (context.ignoreMatcher.ignores(resourceEntry.isDirectory() ? `${relativePath}/` : relativePath)) return;\n\t\tif (resourceEntry.isDirectory()) {\n\t\t\tconst nested = await this.loadResourcesFromDirInternalWithOperations(\n\t\t\t\tcontext.operations,\n\t\t\t\tfullPath,\n\t\t\t\tcontext.source,\n\t\t\t\tfalse,\n\t\t\t\tcontext.ignoreMatcher,\n\t\t\t\tcontext.rootDir,\n\t\t\t);\n\t\t\tcontext.resources.push(...nested.resources);\n\t\t\tcontext.diagnostics.push(...nested.diagnostics);\n\t\t\treturn;\n\t\t}\n\t\tif (!resourceEntry.isFile() || !context.includeRootFiles || !name.endsWith(\".md\")) return;\n\t\tconst result = await this.loadResourceFromFileWithOperations(context.operations, fullPath, context.source);\n\t\tif (result.resource) context.resources.push(result.resource);\n\t\tcontext.diagnostics.push(...result.diagnostics);\n\t}\n\n\tprivate async loadNestedResourcesWithOperations(context: BackendResourceTraversal<TResource>): Promise<void> {\n\t\tfor (const name of context.entries) await this.loadNestedResourceWithOperations(name, context);\n\t}\n\n\tprivate async loadResourcesFromDirInternalWithOperations(\n\t\toperations: ToolOperations,\n\t\tdir: string,\n\t\tsource: string,\n\t\tincludeRootFiles: boolean,\n\t\tignoreMatcher?: ignore.Ignore,\n\t\trootDir?: string,\n\t): Promise<InstructionResourceLoadResult<TResource>> {\n\t\tconst resources: TResource[] = [];\n\t\tconst diagnostics: ResourceDiagnostic[] = [];\n\t\tif (!(await backendPathExists(operations, dir))) return { resources, diagnostics };\n\n\t\tconst root = rootDir ?? dir;\n\t\tconst ig = ignoreMatcher ?? ignore();\n\t\tawait this.addIgnoreRulesWithOperations(operations, ig, dir, root);\n\t\ttry {\n\t\t\tconst context: BackendResourceTraversal<TResource> = {\n\t\t\t\tentries: await operations.readdir(dir),\n\t\t\t\toperations,\n\t\t\t\tdir,\n\t\t\t\tsource,\n\t\t\t\tincludeRootFiles,\n\t\t\t\tignoreMatcher: ig,\n\t\t\t\trootDir: root,\n\t\t\t\tresources,\n\t\t\t\tdiagnostics,\n\t\t\t};\n\t\t\tconst rootResource = await this.loadRootResourceWithOperations(context);\n\t\t\tif (rootResource) return rootResource;\n\t\t\tawait this.loadNestedResourcesWithOperations(context);\n\t\t} catch {}\n\t\treturn { resources, diagnostics };\n\t}\n\n\tprivate loadResourceFromFile(filePath: string, source: string): InstructionResourceParseResult<TResource> {\n\t\ttry {\n\t\t\treturn this.parseResource(readFileSync(filePath, \"utf-8\"), filePath, source);\n\t\t} catch (error) {\n\t\t\treturn this.createParseError(error, filePath);\n\t\t}\n\t}\n\n\tprivate async loadResourceFromFileWithOperations(\n\t\toperations: ToolOperations,\n\t\tfilePath: string,\n\t\tsource: string,\n\t): Promise<InstructionResourceParseResult<TResource>> {\n\t\ttry {\n\t\t\tconst backend = operations.getBackendInfo?.();\n\t\t\tconst pathFlavor = backend?.type === \"remote\" && backend.configured ? backend.workspace.pathFlavor : undefined;\n\t\t\treturn this.parseResource(\n\t\t\t\t(await operations.readFile(filePath)).toString(\"utf-8\"),\n\t\t\t\tfilePath,\n\t\t\t\tsource,\n\t\t\t\tpathFlavor,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\treturn this.createParseError(error, filePath);\n\t\t}\n\t}\n\n\tprivate parseResource(\n\t\trawContent: string,\n\t\tfilePath: string,\n\t\tsource: string,\n\t\tpathFlavor?: PortablePathFlavor,\n\t): InstructionResourceParseResult<TResource> {\n\t\tconst diagnostics: ResourceDiagnostic[] = [];\n\t\tconst { frontmatter } = parseFrontmatter<TFrontmatter>(rawContent);\n\t\tfor (const error of validateDescription(frontmatter.description)) {\n\t\t\tdiagnostics.push({ type: \"warning\", message: error, path: filePath });\n\t\t}\n\t\tif (!frontmatter.name || frontmatter.name.trim() === \"\") {\n\t\t\tdiagnostics.push({ type: \"warning\", message: \"name is required\", path: filePath });\n\t\t}\n\t\tconst name = frontmatter.name;\n\t\tif (name) {\n\t\t\tfor (const error of validateName(name)) {\n\t\t\t\tdiagnostics.push({ type: \"warning\", message: error, path: filePath });\n\t\t\t}\n\t\t}\n\t\tif (!name || !frontmatter.description || frontmatter.description.trim() === \"\") {\n\t\t\treturn { resource: null, diagnostics };\n\t\t}\n\t\tconst baseDir = pathFlavor ? dirnamePortablePath(filePath, pathFlavor) : dirname(filePath);\n\t\tconst resource: InstructionResource = {\n\t\t\tname,\n\t\t\tdescription: frontmatter.description,\n\t\t\tfilePath,\n\t\t\tbaseDir,\n\t\t\tsourceInfo: createResourceSourceInfo(filePath, baseDir, source),\n\t\t\tdisableModelInvocation: frontmatter[\"disable-model-invocation\"] === true,\n\t\t\ttools: normalizeFrontmatterTools(frontmatter.tools),\n\t\t};\n\t\treturn { resource: this.createResource(resource, frontmatter), diagnostics };\n\t}\n\n\tprivate createParseError(error: unknown, filePath: string): InstructionResourceParseResult<TResource> {\n\t\treturn {\n\t\t\tresource: null,\n\t\t\tdiagnostics: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\tmessage: error instanceof Error ? error.message : `failed to parse ${this.resourceType} file`,\n\t\t\t\t\tpath: filePath,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n}\n\nexport function formatInstructionResourcesForPrompt(\n\tresources: InstructionResource[],\n\toptions: InstructionResourcePromptFormatOptions,\n): string {\n\tconst visibleResources = resources.filter((resource) => !resource.disableModelInvocation);\n\tif (visibleResources.length === 0) return \"\";\n\n\tconst [firstIntroLine = \"\", ...remainingIntroLines] = options.intro;\n\tconst lines = [`\\n\\n${firstIntroLine}`, ...remainingIntroLines, \"\", `<${options.containerTag}>`];\n\tfor (const resource of visibleResources) {\n\t\tlines.push(` <${options.itemTag}>`);\n\t\tlines.push(` <name>${escapeXml(resource.name)}</name>`);\n\t\tlines.push(` <description>${escapeXml(resource.description)}</description>`);\n\t\tlines.push(` <location>${escapeXml(resource.filePath)}</location>`);\n\t\tlines.push(` </${options.itemTag}>`);\n\t}\n\tlines.push(`</${options.containerTag}>`);\n\treturn lines.join(\"\\n\");\n}\n\nfunction escapeXml(value: string): string {\n\treturn value\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.replace(/\"/g, \""\")\n\t\t.replace(/'/g, \"'\");\n}\n"]}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { type Keybinding, type KeybindingsConfig, type KeyId, KeybindingsManager as TuiKeybindingsManager } from "@greppleai/grip-tui";
|
|
2
|
+
export interface AppKeybindings {
|
|
3
|
+
"app.interrupt": true;
|
|
4
|
+
"app.clear": true;
|
|
5
|
+
"app.exit": true;
|
|
6
|
+
"app.suspend": true;
|
|
7
|
+
"app.thinking.cycle": true;
|
|
8
|
+
"app.model.cycleForward": true;
|
|
9
|
+
"app.model.cycleBackward": true;
|
|
10
|
+
"app.model.select": true;
|
|
11
|
+
"app.tools.expand": true;
|
|
12
|
+
"app.thinking.toggle": true;
|
|
13
|
+
"app.session.toggleNamedFilter": true;
|
|
14
|
+
"app.editor.external": true;
|
|
15
|
+
"app.message.copy": true;
|
|
16
|
+
"app.message.followUp": true;
|
|
17
|
+
"app.message.dequeue": true;
|
|
18
|
+
"app.clipboard.pasteImage": true;
|
|
19
|
+
"app.session.new": true;
|
|
20
|
+
"app.session.tree": true;
|
|
21
|
+
"app.session.fork": true;
|
|
22
|
+
"app.session.resume": true;
|
|
23
|
+
"app.tree.foldOrUp": true;
|
|
24
|
+
"app.tree.unfoldOrDown": true;
|
|
25
|
+
"app.tree.editLabel": true;
|
|
26
|
+
"app.tree.toggleLabelTimestamp": true;
|
|
27
|
+
"app.session.togglePath": true;
|
|
28
|
+
"app.session.toggleSort": true;
|
|
29
|
+
"app.session.rename": true;
|
|
30
|
+
"app.session.delete": true;
|
|
31
|
+
"app.session.deleteNoninvasive": true;
|
|
32
|
+
"app.models.save": true;
|
|
33
|
+
"app.models.enableAll": true;
|
|
34
|
+
"app.models.clearAll": true;
|
|
35
|
+
"app.models.toggleProvider": true;
|
|
36
|
+
"app.models.reorderUp": true;
|
|
37
|
+
"app.models.reorderDown": true;
|
|
38
|
+
"app.tree.filter.default": true;
|
|
39
|
+
"app.tree.filter.noTools": true;
|
|
40
|
+
"app.tree.filter.userOnly": true;
|
|
41
|
+
"app.tree.filter.labeledOnly": true;
|
|
42
|
+
"app.tree.filter.all": true;
|
|
43
|
+
"app.tree.filter.cycleForward": true;
|
|
44
|
+
"app.tree.filter.cycleBackward": true;
|
|
45
|
+
}
|
|
46
|
+
export type AppKeybinding = keyof AppKeybindings;
|
|
47
|
+
declare module "@greppleai/grip-tui" {
|
|
48
|
+
interface Keybindings extends AppKeybindings {
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export declare const KEYBINDINGS: {
|
|
52
|
+
readonly "tui.editor.cursorUp": {
|
|
53
|
+
readonly defaultKeys: "up";
|
|
54
|
+
readonly description: "Move cursor up";
|
|
55
|
+
};
|
|
56
|
+
readonly "tui.editor.cursorDown": {
|
|
57
|
+
readonly defaultKeys: "down";
|
|
58
|
+
readonly description: "Move cursor down";
|
|
59
|
+
};
|
|
60
|
+
readonly "tui.editor.historyPrevious": {
|
|
61
|
+
readonly defaultKeys: [];
|
|
62
|
+
readonly description: "Select previous prompt history entry";
|
|
63
|
+
};
|
|
64
|
+
readonly "tui.editor.historyNext": {
|
|
65
|
+
readonly defaultKeys: [];
|
|
66
|
+
readonly description: "Select next prompt history entry";
|
|
67
|
+
};
|
|
68
|
+
readonly "tui.editor.cursorLeft": {
|
|
69
|
+
readonly defaultKeys: ["left", "ctrl+b"];
|
|
70
|
+
readonly description: "Move cursor left";
|
|
71
|
+
};
|
|
72
|
+
readonly "tui.editor.cursorRight": {
|
|
73
|
+
readonly defaultKeys: ["right", "ctrl+f"];
|
|
74
|
+
readonly description: "Move cursor right";
|
|
75
|
+
};
|
|
76
|
+
readonly "tui.editor.cursorWordLeft": {
|
|
77
|
+
readonly defaultKeys: ["alt+left", "ctrl+left", "alt+b"];
|
|
78
|
+
readonly description: "Move cursor word left";
|
|
79
|
+
};
|
|
80
|
+
readonly "tui.editor.cursorWordRight": {
|
|
81
|
+
readonly defaultKeys: ["alt+right", "ctrl+right", "alt+f"];
|
|
82
|
+
readonly description: "Move cursor word right";
|
|
83
|
+
};
|
|
84
|
+
readonly "tui.editor.cursorLineStart": {
|
|
85
|
+
readonly defaultKeys: ["home", "ctrl+home", "ctrl+a"];
|
|
86
|
+
readonly description: "Move to line start";
|
|
87
|
+
};
|
|
88
|
+
readonly "tui.editor.cursorLineEnd": {
|
|
89
|
+
readonly defaultKeys: ["end", "ctrl+end", "ctrl+e"];
|
|
90
|
+
readonly description: "Move to line end";
|
|
91
|
+
};
|
|
92
|
+
readonly "tui.editor.jumpForward": {
|
|
93
|
+
readonly defaultKeys: "ctrl+]";
|
|
94
|
+
readonly description: "Jump forward to character";
|
|
95
|
+
};
|
|
96
|
+
readonly "tui.editor.jumpBackward": {
|
|
97
|
+
readonly defaultKeys: "ctrl+alt+]";
|
|
98
|
+
readonly description: "Jump backward to character";
|
|
99
|
+
};
|
|
100
|
+
readonly "tui.editor.pageUp": {
|
|
101
|
+
readonly defaultKeys: ["pageUp", "ctrl+pageUp"];
|
|
102
|
+
readonly description: "Page up";
|
|
103
|
+
};
|
|
104
|
+
readonly "tui.editor.pageDown": {
|
|
105
|
+
readonly defaultKeys: ["pageDown", "ctrl+pageDown"];
|
|
106
|
+
readonly description: "Page down";
|
|
107
|
+
};
|
|
108
|
+
readonly "tui.editor.deleteCharBackward": {
|
|
109
|
+
readonly defaultKeys: "backspace";
|
|
110
|
+
readonly description: "Delete character backward";
|
|
111
|
+
};
|
|
112
|
+
readonly "tui.editor.deleteCharForward": {
|
|
113
|
+
readonly defaultKeys: ["delete", "ctrl+d"];
|
|
114
|
+
readonly description: "Delete character forward";
|
|
115
|
+
};
|
|
116
|
+
readonly "tui.editor.deleteWordBackward": {
|
|
117
|
+
readonly defaultKeys: ["ctrl+w", "alt+backspace"];
|
|
118
|
+
readonly description: "Delete word backward";
|
|
119
|
+
};
|
|
120
|
+
readonly "tui.editor.deleteWordForward": {
|
|
121
|
+
readonly defaultKeys: ["alt+d", "alt+delete"];
|
|
122
|
+
readonly description: "Delete word forward";
|
|
123
|
+
};
|
|
124
|
+
readonly "tui.editor.deleteToLineStart": {
|
|
125
|
+
readonly defaultKeys: "ctrl+u";
|
|
126
|
+
readonly description: "Delete to line start";
|
|
127
|
+
};
|
|
128
|
+
readonly "tui.editor.deleteToLineEnd": {
|
|
129
|
+
readonly defaultKeys: "ctrl+k";
|
|
130
|
+
readonly description: "Delete to line end";
|
|
131
|
+
};
|
|
132
|
+
readonly "tui.editor.yank": {
|
|
133
|
+
readonly defaultKeys: "ctrl+y";
|
|
134
|
+
readonly description: "Yank";
|
|
135
|
+
};
|
|
136
|
+
readonly "tui.editor.yankPop": {
|
|
137
|
+
readonly defaultKeys: "alt+y";
|
|
138
|
+
readonly description: "Yank pop";
|
|
139
|
+
};
|
|
140
|
+
readonly "tui.editor.undo": {
|
|
141
|
+
readonly defaultKeys: "ctrl+-";
|
|
142
|
+
readonly description: "Undo";
|
|
143
|
+
};
|
|
144
|
+
readonly "tui.input.newLine": {
|
|
145
|
+
readonly defaultKeys: "shift+enter";
|
|
146
|
+
readonly description: "Insert newline";
|
|
147
|
+
};
|
|
148
|
+
readonly "tui.input.submit": {
|
|
149
|
+
readonly defaultKeys: "enter";
|
|
150
|
+
readonly description: "Submit input";
|
|
151
|
+
};
|
|
152
|
+
readonly "tui.input.tab": {
|
|
153
|
+
readonly defaultKeys: "tab";
|
|
154
|
+
readonly description: "Tab / autocomplete";
|
|
155
|
+
};
|
|
156
|
+
readonly "tui.input.copy": {
|
|
157
|
+
readonly defaultKeys: "ctrl+c";
|
|
158
|
+
readonly description: "Copy selection";
|
|
159
|
+
};
|
|
160
|
+
readonly "tui.select.up": {
|
|
161
|
+
readonly defaultKeys: "up";
|
|
162
|
+
readonly description: "Move selection up";
|
|
163
|
+
};
|
|
164
|
+
readonly "tui.select.down": {
|
|
165
|
+
readonly defaultKeys: "down";
|
|
166
|
+
readonly description: "Move selection down";
|
|
167
|
+
};
|
|
168
|
+
readonly "tui.select.pageUp": {
|
|
169
|
+
readonly defaultKeys: "pageUp";
|
|
170
|
+
readonly description: "Selection page up";
|
|
171
|
+
};
|
|
172
|
+
readonly "tui.select.pageDown": {
|
|
173
|
+
readonly defaultKeys: "pageDown";
|
|
174
|
+
readonly description: "Selection page down";
|
|
175
|
+
};
|
|
176
|
+
readonly "tui.select.confirm": {
|
|
177
|
+
readonly defaultKeys: "enter";
|
|
178
|
+
readonly description: "Confirm selection";
|
|
179
|
+
};
|
|
180
|
+
readonly "tui.select.cancel": {
|
|
181
|
+
readonly defaultKeys: ["escape", "ctrl+c"];
|
|
182
|
+
readonly description: "Cancel selection";
|
|
183
|
+
};
|
|
184
|
+
readonly "tui.altScreen.pageUp": {
|
|
185
|
+
readonly defaultKeys: "pageUp";
|
|
186
|
+
readonly description: "Scroll viewport up one page";
|
|
187
|
+
};
|
|
188
|
+
readonly "tui.altScreen.pageDown": {
|
|
189
|
+
readonly defaultKeys: "pageDown";
|
|
190
|
+
readonly description: "Scroll viewport down one page";
|
|
191
|
+
};
|
|
192
|
+
readonly "tui.altScreen.halfPageUp": {
|
|
193
|
+
readonly defaultKeys: [];
|
|
194
|
+
readonly description: "Scroll viewport up half a page";
|
|
195
|
+
};
|
|
196
|
+
readonly "tui.altScreen.halfPageDown": {
|
|
197
|
+
readonly defaultKeys: [];
|
|
198
|
+
readonly description: "Scroll viewport down half a page";
|
|
199
|
+
};
|
|
200
|
+
readonly "tui.altScreen.previousPrompt": {
|
|
201
|
+
readonly defaultKeys: "ctrl+shift+up";
|
|
202
|
+
readonly description: "Jump to previous semantic prompt";
|
|
203
|
+
};
|
|
204
|
+
readonly "tui.altScreen.nextPrompt": {
|
|
205
|
+
readonly defaultKeys: "ctrl+shift+down";
|
|
206
|
+
readonly description: "Jump to next semantic prompt";
|
|
207
|
+
};
|
|
208
|
+
readonly "tui.altScreen.top": {
|
|
209
|
+
readonly defaultKeys: "home";
|
|
210
|
+
readonly description: "Scroll viewport to top";
|
|
211
|
+
};
|
|
212
|
+
readonly "tui.altScreen.bottom": {
|
|
213
|
+
readonly defaultKeys: "end";
|
|
214
|
+
readonly description: "Scroll viewport to bottom";
|
|
215
|
+
};
|
|
216
|
+
readonly "app.interrupt": {
|
|
217
|
+
readonly defaultKeys: "escape";
|
|
218
|
+
readonly description: "Cancel or abort";
|
|
219
|
+
};
|
|
220
|
+
readonly "app.clear": {
|
|
221
|
+
readonly defaultKeys: "ctrl+c";
|
|
222
|
+
readonly description: "Clear editor";
|
|
223
|
+
};
|
|
224
|
+
readonly "app.exit": {
|
|
225
|
+
readonly defaultKeys: "ctrl+d";
|
|
226
|
+
readonly description: "Exit when editor is empty";
|
|
227
|
+
};
|
|
228
|
+
readonly "app.suspend": {
|
|
229
|
+
readonly defaultKeys: "ctrl+z" | never[];
|
|
230
|
+
readonly description: "Suspend to background";
|
|
231
|
+
};
|
|
232
|
+
readonly "app.thinking.cycle": {
|
|
233
|
+
readonly defaultKeys: "shift+tab";
|
|
234
|
+
readonly description: "Cycle thinking level";
|
|
235
|
+
};
|
|
236
|
+
readonly "app.model.cycleForward": {
|
|
237
|
+
readonly defaultKeys: "ctrl+p";
|
|
238
|
+
readonly description: "Cycle to next model";
|
|
239
|
+
};
|
|
240
|
+
readonly "app.model.cycleBackward": {
|
|
241
|
+
readonly defaultKeys: "shift+ctrl+p";
|
|
242
|
+
readonly description: "Cycle to previous model";
|
|
243
|
+
};
|
|
244
|
+
readonly "app.model.select": {
|
|
245
|
+
readonly defaultKeys: "ctrl+l";
|
|
246
|
+
readonly description: "Open model selector";
|
|
247
|
+
};
|
|
248
|
+
readonly "app.tools.expand": {
|
|
249
|
+
readonly defaultKeys: "ctrl+o";
|
|
250
|
+
readonly description: "Toggle tool output";
|
|
251
|
+
};
|
|
252
|
+
readonly "app.thinking.toggle": {
|
|
253
|
+
readonly defaultKeys: "ctrl+t";
|
|
254
|
+
readonly description: "Toggle thinking blocks";
|
|
255
|
+
};
|
|
256
|
+
readonly "app.session.toggleNamedFilter": {
|
|
257
|
+
readonly defaultKeys: "ctrl+n";
|
|
258
|
+
readonly description: "Toggle named session filter";
|
|
259
|
+
};
|
|
260
|
+
readonly "app.editor.external": {
|
|
261
|
+
readonly defaultKeys: "ctrl+g";
|
|
262
|
+
readonly description: "Open external editor";
|
|
263
|
+
};
|
|
264
|
+
readonly "app.message.copy": {
|
|
265
|
+
readonly defaultKeys: "ctrl+x";
|
|
266
|
+
readonly description: "Copy message to clipboard";
|
|
267
|
+
};
|
|
268
|
+
readonly "app.message.followUp": {
|
|
269
|
+
readonly defaultKeys: "alt+enter";
|
|
270
|
+
readonly description: "Queue follow-up message";
|
|
271
|
+
};
|
|
272
|
+
readonly "app.message.dequeue": {
|
|
273
|
+
readonly defaultKeys: "alt+up";
|
|
274
|
+
readonly description: "Restore queued messages";
|
|
275
|
+
};
|
|
276
|
+
readonly "app.clipboard.pasteImage": {
|
|
277
|
+
readonly defaultKeys: "alt+v" | "ctrl+v";
|
|
278
|
+
readonly description: "Paste image from clipboard (text fallback)";
|
|
279
|
+
};
|
|
280
|
+
readonly "app.session.new": {
|
|
281
|
+
readonly defaultKeys: [];
|
|
282
|
+
readonly description: "Start a new session";
|
|
283
|
+
};
|
|
284
|
+
readonly "app.session.tree": {
|
|
285
|
+
readonly defaultKeys: [];
|
|
286
|
+
readonly description: "Open session tree";
|
|
287
|
+
};
|
|
288
|
+
readonly "app.session.fork": {
|
|
289
|
+
readonly defaultKeys: [];
|
|
290
|
+
readonly description: "Fork current session";
|
|
291
|
+
};
|
|
292
|
+
readonly "app.session.resume": {
|
|
293
|
+
readonly defaultKeys: [];
|
|
294
|
+
readonly description: "Resume a session";
|
|
295
|
+
};
|
|
296
|
+
readonly "app.tree.foldOrUp": {
|
|
297
|
+
readonly defaultKeys: ["ctrl+left", "alt+left"];
|
|
298
|
+
readonly description: "Fold tree branch or move up";
|
|
299
|
+
};
|
|
300
|
+
readonly "app.tree.unfoldOrDown": {
|
|
301
|
+
readonly defaultKeys: ["ctrl+right", "alt+right"];
|
|
302
|
+
readonly description: "Unfold tree branch or move down";
|
|
303
|
+
};
|
|
304
|
+
readonly "app.tree.editLabel": {
|
|
305
|
+
readonly defaultKeys: "shift+l";
|
|
306
|
+
readonly description: "Edit tree label";
|
|
307
|
+
};
|
|
308
|
+
readonly "app.tree.toggleLabelTimestamp": {
|
|
309
|
+
readonly defaultKeys: "shift+t";
|
|
310
|
+
readonly description: "Toggle tree label timestamps";
|
|
311
|
+
};
|
|
312
|
+
readonly "app.session.togglePath": {
|
|
313
|
+
readonly defaultKeys: "ctrl+p";
|
|
314
|
+
readonly description: "Toggle session path display";
|
|
315
|
+
};
|
|
316
|
+
readonly "app.session.toggleSort": {
|
|
317
|
+
readonly defaultKeys: "ctrl+s";
|
|
318
|
+
readonly description: "Toggle session sort mode";
|
|
319
|
+
};
|
|
320
|
+
readonly "app.session.rename": {
|
|
321
|
+
readonly defaultKeys: "ctrl+r";
|
|
322
|
+
readonly description: "Rename session";
|
|
323
|
+
};
|
|
324
|
+
readonly "app.session.delete": {
|
|
325
|
+
readonly defaultKeys: "ctrl+d";
|
|
326
|
+
readonly description: "Delete session";
|
|
327
|
+
};
|
|
328
|
+
readonly "app.session.deleteNoninvasive": {
|
|
329
|
+
readonly defaultKeys: "ctrl+backspace";
|
|
330
|
+
readonly description: "Delete session when query is empty";
|
|
331
|
+
};
|
|
332
|
+
readonly "app.models.save": {
|
|
333
|
+
readonly defaultKeys: "ctrl+s";
|
|
334
|
+
readonly description: "Save model selection";
|
|
335
|
+
};
|
|
336
|
+
readonly "app.models.enableAll": {
|
|
337
|
+
readonly defaultKeys: "ctrl+a";
|
|
338
|
+
readonly description: "Enable all models";
|
|
339
|
+
};
|
|
340
|
+
readonly "app.models.clearAll": {
|
|
341
|
+
readonly defaultKeys: "ctrl+x";
|
|
342
|
+
readonly description: "Clear all models";
|
|
343
|
+
};
|
|
344
|
+
readonly "app.models.toggleProvider": {
|
|
345
|
+
readonly defaultKeys: "ctrl+p";
|
|
346
|
+
readonly description: "Toggle all models for provider";
|
|
347
|
+
};
|
|
348
|
+
readonly "app.models.reorderUp": {
|
|
349
|
+
readonly defaultKeys: "alt+up";
|
|
350
|
+
readonly description: "Move model up in order";
|
|
351
|
+
};
|
|
352
|
+
readonly "app.models.reorderDown": {
|
|
353
|
+
readonly defaultKeys: "alt+down";
|
|
354
|
+
readonly description: "Move model down in order";
|
|
355
|
+
};
|
|
356
|
+
readonly "app.tree.filter.default": {
|
|
357
|
+
readonly defaultKeys: "ctrl+d";
|
|
358
|
+
readonly description: "Tree filter: default view";
|
|
359
|
+
};
|
|
360
|
+
readonly "app.tree.filter.noTools": {
|
|
361
|
+
readonly defaultKeys: "ctrl+t";
|
|
362
|
+
readonly description: "Tree filter: hide tool results";
|
|
363
|
+
};
|
|
364
|
+
readonly "app.tree.filter.userOnly": {
|
|
365
|
+
readonly defaultKeys: "ctrl+u";
|
|
366
|
+
readonly description: "Tree filter: user messages only";
|
|
367
|
+
};
|
|
368
|
+
readonly "app.tree.filter.labeledOnly": {
|
|
369
|
+
readonly defaultKeys: "ctrl+l";
|
|
370
|
+
readonly description: "Tree filter: labeled entries only";
|
|
371
|
+
};
|
|
372
|
+
readonly "app.tree.filter.all": {
|
|
373
|
+
readonly defaultKeys: "ctrl+a";
|
|
374
|
+
readonly description: "Tree filter: show all entries";
|
|
375
|
+
};
|
|
376
|
+
readonly "app.tree.filter.cycleForward": {
|
|
377
|
+
readonly defaultKeys: "ctrl+o";
|
|
378
|
+
readonly description: "Tree filter: cycle forward";
|
|
379
|
+
};
|
|
380
|
+
readonly "app.tree.filter.cycleBackward": {
|
|
381
|
+
readonly defaultKeys: "shift+ctrl+o";
|
|
382
|
+
readonly description: "Tree filter: cycle backward";
|
|
383
|
+
};
|
|
384
|
+
};
|
|
385
|
+
interface KeybindingsMigrationResult {
|
|
386
|
+
config: Record<string, unknown>;
|
|
387
|
+
migrated: boolean;
|
|
388
|
+
}
|
|
389
|
+
export declare function migrateKeybindingsConfig(rawConfig: Record<string, unknown>): KeybindingsMigrationResult;
|
|
390
|
+
export declare class KeybindingsManager extends TuiKeybindingsManager {
|
|
391
|
+
private configPath;
|
|
392
|
+
constructor(userBindings?: KeybindingsConfig, configPath?: string);
|
|
393
|
+
static create(agentDir?: string): KeybindingsManager;
|
|
394
|
+
reload(): void;
|
|
395
|
+
getEffectiveConfig(): KeybindingsConfig;
|
|
396
|
+
private static loadFromFile;
|
|
397
|
+
}
|
|
398
|
+
export type { Keybinding, KeybindingsConfig, KeyId };
|
|
399
|
+
//# sourceMappingURL=keybindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keybindings.d.ts","sourceRoot":"","sources":["../../src/core/keybindings.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Keybinding,\n\ttype KeybindingDefinitions,\n\ttype KeybindingsConfig,\n\ttype KeyId,\n\tTUI_KEYBINDINGS,\n\tKeybindingsManager as TuiKeybindingsManager,\n} from \"@greppleai/grip-tui\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { getAgentDir } from \"../config.ts\";\n\nexport interface AppKeybindings {\n\t\"app.interrupt\": true;\n\t\"app.clear\": true;\n\t\"app.exit\": true;\n\t\"app.suspend\": true;\n\t\"app.thinking.cycle\": true;\n\t\"app.model.cycleForward\": true;\n\t\"app.model.cycleBackward\": true;\n\t\"app.model.select\": true;\n\t\"app.tools.expand\": true;\n\t\"app.thinking.toggle\": true;\n\t\"app.session.toggleNamedFilter\": true;\n\t\"app.editor.external\": true;\n\t\"app.message.copy\": true;\n\t\"app.message.followUp\": true;\n\t\"app.message.dequeue\": true;\n\t\"app.clipboard.pasteImage\": true;\n\t\"app.session.new\": true;\n\t\"app.session.tree\": true;\n\t\"app.session.fork\": true;\n\t\"app.session.resume\": true;\n\t\"app.tree.foldOrUp\": true;\n\t\"app.tree.unfoldOrDown\": true;\n\t\"app.tree.editLabel\": true;\n\t\"app.tree.toggleLabelTimestamp\": true;\n\t\"app.session.togglePath\": true;\n\t\"app.session.toggleSort\": true;\n\t\"app.session.rename\": true;\n\t\"app.session.delete\": true;\n\t\"app.session.deleteNoninvasive\": true;\n\t\"app.models.save\": true;\n\t\"app.models.enableAll\": true;\n\t\"app.models.clearAll\": true;\n\t\"app.models.toggleProvider\": true;\n\t\"app.models.reorderUp\": true;\n\t\"app.models.reorderDown\": true;\n\t\"app.tree.filter.default\": true;\n\t\"app.tree.filter.noTools\": true;\n\t\"app.tree.filter.userOnly\": true;\n\t\"app.tree.filter.labeledOnly\": true;\n\t\"app.tree.filter.all\": true;\n\t\"app.tree.filter.cycleForward\": true;\n\t\"app.tree.filter.cycleBackward\": true;\n}\n\nexport type AppKeybinding = keyof AppKeybindings;\n\ndeclare module \"@greppleai/grip-tui\" {\n\tinterface Keybindings extends AppKeybindings {}\n}\n\nexport const KEYBINDINGS = {\n\t...TUI_KEYBINDINGS,\n\t\"app.interrupt\": { defaultKeys: \"escape\", description: \"Cancel or abort\" },\n\t\"app.clear\": { defaultKeys: \"ctrl+c\", description: \"Clear editor\" },\n\t\"app.exit\": { defaultKeys: \"ctrl+d\", description: \"Exit when editor is empty\" },\n\t\"app.suspend\": {\n\t\tdefaultKeys: process.platform === \"win32\" ? [] : \"ctrl+z\",\n\t\tdescription: \"Suspend to background\",\n\t},\n\t\"app.thinking.cycle\": {\n\t\tdefaultKeys: \"shift+tab\",\n\t\tdescription: \"Cycle thinking level\",\n\t},\n\t\"app.model.cycleForward\": {\n\t\tdefaultKeys: \"ctrl+p\",\n\t\tdescription: \"Cycle to next model\",\n\t},\n\t\"app.model.cycleBackward\": {\n\t\tdefaultKeys: \"shift+ctrl+p\",\n\t\tdescription: \"Cycle to previous model\",\n\t},\n\t\"app.model.select\": { defaultKeys: \"ctrl+l\", description: \"Open model selector\" },\n\t\"app.tools.expand\": { defaultKeys: \"ctrl+o\", description: \"Toggle tool output\" },\n\t\"app.thinking.toggle\": {\n\t\tdefaultKeys: \"ctrl+t\",\n\t\tdescription: \"Toggle thinking blocks\",\n\t},\n\t\"app.session.toggleNamedFilter\": {\n\t\tdefaultKeys: \"ctrl+n\",\n\t\tdescription: \"Toggle named session filter\",\n\t},\n\t\"app.editor.external\": {\n\t\tdefaultKeys: \"ctrl+g\",\n\t\tdescription: \"Open external editor\",\n\t},\n\t\"app.message.copy\": {\n\t\tdefaultKeys: \"ctrl+x\",\n\t\tdescription: \"Copy message to clipboard\",\n\t},\n\t\"app.message.followUp\": {\n\t\tdefaultKeys: \"alt+enter\",\n\t\tdescription: \"Queue follow-up message\",\n\t},\n\t\"app.message.dequeue\": {\n\t\tdefaultKeys: \"alt+up\",\n\t\tdescription: \"Restore queued messages\",\n\t},\n\t\"app.clipboard.pasteImage\": {\n\t\tdefaultKeys: process.platform === \"win32\" ? \"alt+v\" : \"ctrl+v\",\n\t\tdescription: \"Paste image from clipboard (text fallback)\",\n\t},\n\t\"app.session.new\": { defaultKeys: [], description: \"Start a new session\" },\n\t\"app.session.tree\": { defaultKeys: [], description: \"Open session tree\" },\n\t\"app.session.fork\": { defaultKeys: [], description: \"Fork current session\" },\n\t\"app.session.resume\": { defaultKeys: [], description: \"Resume a session\" },\n\t\"app.tree.foldOrUp\": {\n\t\tdefaultKeys: [\"ctrl+left\", \"alt+left\"],\n\t\tdescription: \"Fold tree branch or move up\",\n\t},\n\t\"app.tree.unfoldOrDown\": {\n\t\tdefaultKeys: [\"ctrl+right\", \"alt+right\"],\n\t\tdescription: \"Unfold tree branch or move down\",\n\t},\n\t\"app.tree.editLabel\": {\n\t\tdefaultKeys: \"shift+l\",\n\t\tdescription: \"Edit tree label\",\n\t},\n\t\"app.tree.toggleLabelTimestamp\": {\n\t\tdefaultKeys: \"shift+t\",\n\t\tdescription: \"Toggle tree label timestamps\",\n\t},\n\t\"app.session.togglePath\": {\n\t\tdefaultKeys: \"ctrl+p\",\n\t\tdescription: \"Toggle session path display\",\n\t},\n\t\"app.session.toggleSort\": {\n\t\tdefaultKeys: \"ctrl+s\",\n\t\tdescription: \"Toggle session sort mode\",\n\t},\n\t\"app.session.rename\": {\n\t\tdefaultKeys: \"ctrl+r\",\n\t\tdescription: \"Rename session\",\n\t},\n\t\"app.session.delete\": {\n\t\tdefaultKeys: \"ctrl+d\",\n\t\tdescription: \"Delete session\",\n\t},\n\t\"app.session.deleteNoninvasive\": {\n\t\tdefaultKeys: \"ctrl+backspace\",\n\t\tdescription: \"Delete session when query is empty\",\n\t},\n\t\"app.models.save\": {\n\t\tdefaultKeys: \"ctrl+s\",\n\t\tdescription: \"Save model selection\",\n\t},\n\t\"app.models.enableAll\": {\n\t\tdefaultKeys: \"ctrl+a\",\n\t\tdescription: \"Enable all models\",\n\t},\n\t\"app.models.clearAll\": {\n\t\tdefaultKeys: \"ctrl+x\",\n\t\tdescription: \"Clear all models\",\n\t},\n\t\"app.models.toggleProvider\": {\n\t\tdefaultKeys: \"ctrl+p\",\n\t\tdescription: \"Toggle all models for provider\",\n\t},\n\t\"app.models.reorderUp\": {\n\t\tdefaultKeys: \"alt+up\",\n\t\tdescription: \"Move model up in order\",\n\t},\n\t\"app.models.reorderDown\": {\n\t\tdefaultKeys: \"alt+down\",\n\t\tdescription: \"Move model down in order\",\n\t},\n\t\"app.tree.filter.default\": {\n\t\tdefaultKeys: \"ctrl+d\",\n\t\tdescription: \"Tree filter: default view\",\n\t},\n\t\"app.tree.filter.noTools\": {\n\t\tdefaultKeys: \"ctrl+t\",\n\t\tdescription: \"Tree filter: hide tool results\",\n\t},\n\t\"app.tree.filter.userOnly\": {\n\t\tdefaultKeys: \"ctrl+u\",\n\t\tdescription: \"Tree filter: user messages only\",\n\t},\n\t\"app.tree.filter.labeledOnly\": {\n\t\tdefaultKeys: \"ctrl+l\",\n\t\tdescription: \"Tree filter: labeled entries only\",\n\t},\n\t\"app.tree.filter.all\": {\n\t\tdefaultKeys: \"ctrl+a\",\n\t\tdescription: \"Tree filter: show all entries\",\n\t},\n\t\"app.tree.filter.cycleForward\": {\n\t\tdefaultKeys: \"ctrl+o\",\n\t\tdescription: \"Tree filter: cycle forward\",\n\t},\n\t\"app.tree.filter.cycleBackward\": {\n\t\tdefaultKeys: \"shift+ctrl+o\",\n\t\tdescription: \"Tree filter: cycle backward\",\n\t},\n} as const satisfies KeybindingDefinitions;\n\nconst KEYBINDING_NAME_MIGRATIONS = {\n\tcursorUp: \"tui.editor.cursorUp\",\n\tcursorDown: \"tui.editor.cursorDown\",\n\tcursorLeft: \"tui.editor.cursorLeft\",\n\tcursorRight: \"tui.editor.cursorRight\",\n\tcursorWordLeft: \"tui.editor.cursorWordLeft\",\n\tcursorWordRight: \"tui.editor.cursorWordRight\",\n\tcursorLineStart: \"tui.editor.cursorLineStart\",\n\tcursorLineEnd: \"tui.editor.cursorLineEnd\",\n\tjumpForward: \"tui.editor.jumpForward\",\n\tjumpBackward: \"tui.editor.jumpBackward\",\n\tpageUp: \"tui.editor.pageUp\",\n\tpageDown: \"tui.editor.pageDown\",\n\tdeleteCharBackward: \"tui.editor.deleteCharBackward\",\n\tdeleteCharForward: \"tui.editor.deleteCharForward\",\n\tdeleteWordBackward: \"tui.editor.deleteWordBackward\",\n\tdeleteWordForward: \"tui.editor.deleteWordForward\",\n\tdeleteToLineStart: \"tui.editor.deleteToLineStart\",\n\tdeleteToLineEnd: \"tui.editor.deleteToLineEnd\",\n\tyank: \"tui.editor.yank\",\n\tyankPop: \"tui.editor.yankPop\",\n\tundo: \"tui.editor.undo\",\n\tnewLine: \"tui.input.newLine\",\n\tsubmit: \"tui.input.submit\",\n\ttab: \"tui.input.tab\",\n\tcopy: \"tui.input.copy\",\n\tselectUp: \"tui.select.up\",\n\tselectDown: \"tui.select.down\",\n\tselectPageUp: \"tui.select.pageUp\",\n\tselectPageDown: \"tui.select.pageDown\",\n\tselectConfirm: \"tui.select.confirm\",\n\tselectCancel: \"tui.select.cancel\",\n\tinterrupt: \"app.interrupt\",\n\tclear: \"app.clear\",\n\texit: \"app.exit\",\n\tsuspend: \"app.suspend\",\n\tcycleThinkingLevel: \"app.thinking.cycle\",\n\tcycleModelForward: \"app.model.cycleForward\",\n\tcycleModelBackward: \"app.model.cycleBackward\",\n\tselectModel: \"app.model.select\",\n\texpandTools: \"app.tools.expand\",\n\ttoggleThinking: \"app.thinking.toggle\",\n\ttoggleSessionNamedFilter: \"app.session.toggleNamedFilter\",\n\texternalEditor: \"app.editor.external\",\n\tfollowUp: \"app.message.followUp\",\n\tdequeue: \"app.message.dequeue\",\n\tpasteImage: \"app.clipboard.pasteImage\",\n\tnewSession: \"app.session.new\",\n\ttree: \"app.session.tree\",\n\tfork: \"app.session.fork\",\n\tresume: \"app.session.resume\",\n\ttreeFoldOrUp: \"app.tree.foldOrUp\",\n\ttreeUnfoldOrDown: \"app.tree.unfoldOrDown\",\n\ttreeEditLabel: \"app.tree.editLabel\",\n\ttreeToggleLabelTimestamp: \"app.tree.toggleLabelTimestamp\",\n\ttoggleSessionPath: \"app.session.togglePath\",\n\ttoggleSessionSort: \"app.session.toggleSort\",\n\trenameSession: \"app.session.rename\",\n\tdeleteSession: \"app.session.delete\",\n\tdeleteSessionNoninvasive: \"app.session.deleteNoninvasive\",\n} as const satisfies Record<string, Keybinding>;\n\ninterface KeybindingsMigrationResult {\n\tconfig: Record<string, unknown>;\n\tmigrated: boolean;\n}\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isLegacyKeybindingName(key: string): key is keyof typeof KEYBINDING_NAME_MIGRATIONS {\n\treturn key in KEYBINDING_NAME_MIGRATIONS;\n}\n\nfunction toKeybindingsConfig(value: unknown): KeybindingsConfig {\n\tif (!isRecord(value)) return {};\n\n\tconst config: KeybindingsConfig = {};\n\tfor (const [key, binding] of Object.entries(value)) {\n\t\tif (typeof binding === \"string\") {\n\t\t\tconfig[key] = binding as KeyId;\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(binding) && binding.every((entry) => typeof entry === \"string\")) {\n\t\t\tconfig[key] = binding as KeyId[];\n\t\t}\n\t}\n\treturn config;\n}\n\nexport function migrateKeybindingsConfig(rawConfig: Record<string, unknown>): KeybindingsMigrationResult {\n\tconst config: Record<string, unknown> = {};\n\tlet migrated = false;\n\n\tfor (const [key, value] of Object.entries(rawConfig)) {\n\t\tconst nextKey = isLegacyKeybindingName(key) ? KEYBINDING_NAME_MIGRATIONS[key] : key;\n\t\tif (nextKey !== key) {\n\t\t\tmigrated = true;\n\t\t}\n\t\tif (key !== nextKey && Object.hasOwn(rawConfig, nextKey)) {\n\t\t\tmigrated = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconfig[nextKey] = value;\n\t}\n\n\treturn { config: orderKeybindingsConfig(config), migrated };\n}\n\nfunction orderKeybindingsConfig(config: Record<string, unknown>): Record<string, unknown> {\n\tconst ordered: Record<string, unknown> = {};\n\tfor (const keybinding of Object.keys(KEYBINDINGS)) {\n\t\tif (Object.hasOwn(config, keybinding)) {\n\t\t\tordered[keybinding] = config[keybinding];\n\t\t}\n\t}\n\n\tconst extras = Object.keys(config)\n\t\t.filter((key) => !Object.hasOwn(ordered, key))\n\t\t.sort();\n\tfor (const key of extras) {\n\t\tordered[key] = config[key];\n\t}\n\n\treturn ordered;\n}\n\nfunction loadRawConfig(path: string): Record<string, unknown> | undefined {\n\tif (!existsSync(path)) return undefined;\n\ttry {\n\t\tconst parsed = JSON.parse(readFileSync(path, \"utf-8\")) as unknown;\n\t\treturn isRecord(parsed) ? parsed : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport class KeybindingsManager extends TuiKeybindingsManager {\n\tprivate configPath: string | undefined;\n\n\tconstructor(userBindings: KeybindingsConfig = {}, configPath?: string) {\n\t\tsuper(KEYBINDINGS, userBindings);\n\t\tthis.configPath = configPath;\n\t}\n\n\tstatic create(agentDir: string = getAgentDir()): KeybindingsManager {\n\t\tconst configPath = join(agentDir, \"keybindings.json\");\n\t\tconst userBindings = KeybindingsManager.loadFromFile(configPath);\n\t\treturn new KeybindingsManager(userBindings, configPath);\n\t}\n\n\treload(): void {\n\t\tif (!this.configPath) return;\n\t\tthis.setUserBindings(KeybindingsManager.loadFromFile(this.configPath));\n\t}\n\n\tgetEffectiveConfig(): KeybindingsConfig {\n\t\treturn this.getResolvedBindings();\n\t}\n\n\tprivate static loadFromFile(path: string): KeybindingsConfig {\n\t\tconst rawConfig = loadRawConfig(path);\n\t\tif (!rawConfig) return {};\n\t\treturn toKeybindingsConfig(migrateKeybindingsConfig(rawConfig).config);\n\t}\n}\n\nexport type { Keybinding, KeybindingsConfig, KeyId };\n"]}
|