@m4ike1/ion-coding-agent 0.1.0
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 +5747 -0
- package/README.md +738 -0
- package/dist/bun/cli.d.ts +5 -0
- package/dist/bun/cli.d.ts.map +1 -0
- package/dist/bun/cli.js +5 -0
- package/dist/bun/cli.js.map +1 -0
- package/dist/bun/restore-sandbox-env.d.ts +17 -0
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
- package/dist/bun/restore-sandbox-env.js +36 -0
- package/dist/bun/restore-sandbox-env.js.map +1 -0
- package/dist/bun/runtime-setup.d.ts +2 -0
- package/dist/bun/runtime-setup.d.ts.map +1 -0
- package/dist/bun/runtime-setup.js +9 -0
- package/dist/bun/runtime-setup.js.map +1 -0
- package/dist/bun/sandbox-env-setup.d.ts +2 -0
- package/dist/bun/sandbox-env-setup.d.ts.map +1 -0
- package/dist/bun/sandbox-env-setup.js +4 -0
- package/dist/bun/sandbox-env-setup.js.map +1 -0
- package/dist/bundle/chunks/anthropic-messages-RPVA4Z4Y.js +6 -0
- package/dist/bundle/chunks/anthropic.js +75 -0
- package/dist/bundle/chunks/azure-openai-responses-AJS3XTKL.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +78 -0
- package/dist/bundle/chunks/chunk-2MOZ6JBC.js +2 -0
- package/dist/bundle/chunks/chunk-3BIJ3AQO.js +12 -0
- package/dist/bundle/chunks/chunk-47K3I3YT.js +6 -0
- package/dist/bundle/chunks/chunk-4BN67GCJ.js +1664 -0
- package/dist/bundle/chunks/chunk-4PN6UIWX.js +2 -0
- package/dist/bundle/chunks/chunk-4TQA6ATT.js +4 -0
- package/dist/bundle/chunks/chunk-5NVSYJOG.js +2 -0
- package/dist/bundle/chunks/chunk-7OJL7DR5.js +2 -0
- package/dist/bundle/chunks/chunk-BEER2HEL.js +2 -0
- package/dist/bundle/chunks/chunk-CQX3HQAT.js +2 -0
- package/dist/bundle/chunks/chunk-FBMFFBV2.js +2 -0
- package/dist/bundle/chunks/chunk-GAZIWLQB.js +2 -0
- package/dist/bundle/chunks/chunk-HFYRAIWC.js +44 -0
- package/dist/bundle/chunks/chunk-IH7HUXWH.js +2 -0
- package/dist/bundle/chunks/chunk-LPP2XRBR.js +11 -0
- package/dist/bundle/chunks/chunk-LUTYILPM.js +25 -0
- package/dist/bundle/chunks/chunk-Q3ZNVFWD.js +42 -0
- package/dist/bundle/chunks/chunk-QNBVCBN3.js +2 -0
- package/dist/bundle/chunks/chunk-SWVWKUIA.js +2 -0
- package/dist/bundle/chunks/chunk-SY4QP6EI.js +2 -0
- package/dist/bundle/chunks/chunk-TVAWBPPS.js +2 -0
- package/dist/bundle/chunks/chunk-WPN6KEON.js +2 -0
- package/dist/bundle/chunks/chunk-WRID246J.js +2 -0
- package/dist/bundle/chunks/github-copilot.js +2 -0
- package/dist/bundle/chunks/google-generative-ai-S7SD5HC7.js +2 -0
- package/dist/bundle/chunks/google-vertex-NUNHA7QM.js +2 -0
- package/dist/bundle/chunks/https-proxy-agent-O2332S4O.js +13 -0
- package/dist/bundle/chunks/image-resize-worker.js +2 -0
- package/dist/bundle/chunks/ion-messages-KTW6MD7U.js +8 -0
- package/dist/bundle/chunks/kimi-coding.js +2 -0
- package/dist/bundle/chunks/lib-D4EQQPRR.js +9 -0
- package/dist/bundle/chunks/mistral-conversations-C7I3G2LA.js +5 -0
- package/dist/bundle/chunks/multipart-parser-PL2BXRDT.js +3 -0
- package/dist/bundle/chunks/node-7OQEATQA.js +2 -0
- package/dist/bundle/chunks/node-QIUI6CIW.js +16 -0
- package/dist/bundle/chunks/openai-codex-responses-2KRULDYR.js +10 -0
- package/dist/bundle/chunks/openai-codex.js +75 -0
- package/dist/bundle/chunks/openai-completions-64KX63FN.js +7 -0
- package/dist/bundle/chunks/openai-responses-QF3PPSTS.js +2 -0
- package/dist/bundle/chunks/openrouter-images-GQVXT3PO.js +2 -0
- package/dist/bundle/chunks/openrouter.js +75 -0
- package/dist/bundle/chunks/radius.js +75 -0
- package/dist/bundle/chunks/src-AZ7LBHGY.js +4 -0
- package/dist/bundle/chunks/xai.js +2 -0
- package/dist/bundle/cli.js +3 -0
- package/dist/bundle/index.js +2 -0
- package/dist/bundle/rpc-entry.js +3 -0
- package/dist/cli/args.d.ts +61 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +440 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/auth-check.d.ts +19 -0
- package/dist/cli/auth-check.d.ts.map +1 -0
- package/dist/cli/auth-check.js +50 -0
- package/dist/cli/auth-check.js.map +1 -0
- package/dist/cli/auth-command.d.ts +24 -0
- package/dist/cli/auth-command.d.ts.map +1 -0
- package/dist/cli/auth-command.js +103 -0
- package/dist/cli/auth-command.js.map +1 -0
- package/dist/cli/config-selector.d.ts +16 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +32 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/credential-print.d.ts +13 -0
- package/dist/cli/credential-print.d.ts.map +1 -0
- package/dist/cli/credential-print.js +76 -0
- package/dist/cli/credential-print.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 +71 -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/project-trust.d.ts +10 -0
- package/dist/cli/project-trust.d.ts.map +1 -0
- package/dist/cli/project-trust.js +48 -0
- package/dist/cli/project-trust.js.map +1 -0
- package/dist/cli/session-picker.d.ts +10 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +36 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +12 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/startup-ui.d.ts +20 -0
- package/dist/cli/startup-ui.d.ts.map +1 -0
- package/dist/cli/startup-ui.js +185 -0
- package/dist/cli/startup-ui.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +122 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +609 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session-runtime.d.ts +119 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -0
- package/dist/core/agent-session-runtime.js +317 -0
- package/dist/core/agent-session-runtime.js.map +1 -0
- package/dist/core/agent-session-services.d.ts +86 -0
- package/dist/core/agent-session-services.d.ts.map +1 -0
- package/dist/core/agent-session-services.js +134 -0
- package/dist/core/agent-session-services.js.map +1 -0
- package/dist/core/agent-session.d.ts +725 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +2968 -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 +72 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +426 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +32 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +111 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/cache-stats.d.ts +49 -0
- package/dist/core/cache-stats.d.ts.map +1 -0
- package/dist/core/cache-stats.js +101 -0
- package/dist/core/cache-stats.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +98 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +251 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +145 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +690 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +38 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +142 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +4 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +11 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -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/experimental.d.ts +2 -0
- package/dist/core/experimental.d.ts.map +1 -0
- package/dist/core/experimental.js +4 -0
- package/dist/core/experimental.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 +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +37 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +226 -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 +1871 -0
- package/dist/core/export-html/tool-renderer.d.ts +34 -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/index.d.ts +12 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +23 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +655 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +178 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +1011 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1375 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +54 -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 +41 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +64 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +338 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts +22 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +98 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/index.d.ts +13 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/ion-manifest.d.ts +8 -0
- package/dist/core/ion-manifest.d.ts.map +1 -0
- package/dist/core/ion-manifest.js +26 -0
- package/dist/core/ion-manifest.js.map +1 -0
- package/dist/core/keybindings.d.ts +475 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +321 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/messages.d.ts +77 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +123 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-config.d.ts +591 -0
- package/dist/core/model-config.d.ts.map +1 -0
- package/dist/core/model-config.js +259 -0
- package/dist/core/model-config.js.map +1 -0
- package/dist/core/model-registry.d.ts +49 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +115 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +124 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +591 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/model-runtime.d.ts +101 -0
- package/dist/core/model-runtime.d.ts.map +1 -0
- package/dist/core/model-runtime.js +606 -0
- package/dist/core/model-runtime.js.map +1 -0
- package/dist/core/models-store.d.ts +22 -0
- package/dist/core/models-store.d.ts.map +1 -0
- package/dist/core/models-store.js +115 -0
- package/dist/core/models-store.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 +216 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +2207 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/project-trust.d.ts +15 -0
- package/dist/core/project-trust.d.ts.map +1 -0
- package/dist/core/project-trust.js +59 -0
- package/dist/core/project-trust.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +54 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +236 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/provider-attribution.d.ts +4 -0
- package/dist/core/provider-attribution.d.ts.map +1 -0
- package/dist/core/provider-attribution.js +72 -0
- package/dist/core/provider-attribution.js.map +1 -0
- package/dist/core/provider-composer.d.ts +58 -0
- package/dist/core/provider-composer.d.ts.map +1 -0
- package/dist/core/provider-composer.js +402 -0
- package/dist/core/provider-composer.js.map +1 -0
- package/dist/core/radius.d.ts +2 -0
- package/dist/core/radius.d.ts.map +1 -0
- package/dist/core/radius.js +2 -0
- package/dist/core/radius.js.map +1 -0
- package/dist/core/remote-catalog-provider.d.ts +5 -0
- package/dist/core/remote-catalog-provider.d.ts.map +1 -0
- package/dist/core/remote-catalog-provider.js +137 -0
- package/dist/core/remote-catalog-provider.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +30 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +247 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +221 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +875 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/runtime-credentials.d.ts +15 -0
- package/dist/core/runtime-credentials.d.ts.map +1 -0
- package/dist/core/runtime-credentials.js +39 -0
- package/dist/core/runtime-credentials.js.map +1 -0
- package/dist/core/sdk.d.ts +108 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +285 -0
- package/dist/core/sdk.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/session-export.d.ts +4 -0
- package/dist/core/session-export.d.ts.map +1 -0
- package/dist/core/session-export.js +32 -0
- package/dist/core/session-export.js.map +1 -0
- package/dist/core/session-index.d.ts +67 -0
- package/dist/core/session-index.d.ts.map +1 -0
- package/dist/core/session-index.js +376 -0
- package/dist/core/session-index.js.map +1 -0
- package/dist/core/session-manager.d.ts +376 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1587 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/session-naming-runtime.d.ts +153 -0
- package/dist/core/session-naming-runtime.d.ts.map +1 -0
- package/dist/core/session-naming-runtime.js +336 -0
- package/dist/core/session-naming-runtime.js.map +1 -0
- package/dist/core/settings-diagnostics.d.ts +9 -0
- package/dist/core/settings-diagnostics.d.ts.map +1 -0
- package/dist/core/settings-diagnostics.js +21 -0
- package/dist/core/settings-diagnostics.js.map +1 -0
- package/dist/core/settings-manager.d.ts +375 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +1110 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +60 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +412 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +17 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +33 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/source-info.d.ts +18 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +19 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/system-prompt.d.ts +28 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +118 -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 +87 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +295 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +101 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +421 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +44 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +147 -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 +52 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -0
- package/dist/core/tools/find.d.ts +42 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +251 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +53 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +463 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +49 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +147 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +48 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +224 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts +52 -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 +10 -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/powershell.d.ts +16 -0
- package/dist/core/tools/powershell.d.ts.map +1 -0
- package/dist/core/tools/powershell.js +39 -0
- package/dist/core/tools/powershell.js.map +1 -0
- package/dist/core/tools/read.d.ts +39 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +165 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +24 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +65 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/renderers/bash.d.ts +12 -0
- package/dist/core/tools/renderers/bash.d.ts.map +1 -0
- package/dist/core/tools/renderers/bash.js +130 -0
- package/dist/core/tools/renderers/bash.js.map +1 -0
- package/dist/core/tools/renderers/edit.d.ts +23 -0
- package/dist/core/tools/renderers/edit.d.ts.map +1 -0
- package/dist/core/tools/renderers/edit.js +167 -0
- package/dist/core/tools/renderers/edit.js.map +1 -0
- package/dist/core/tools/renderers/find.d.ts +10 -0
- package/dist/core/tools/renderers/find.d.ts.map +1 -0
- package/dist/core/tools/renderers/find.js +64 -0
- package/dist/core/tools/renderers/find.js.map +1 -0
- package/dist/core/tools/renderers/grep.d.ts +10 -0
- package/dist/core/tools/renderers/grep.d.ts.map +1 -0
- package/dist/core/tools/renderers/grep.js +69 -0
- package/dist/core/tools/renderers/grep.js.map +1 -0
- package/dist/core/tools/renderers/index.d.ts +29 -0
- package/dist/core/tools/renderers/index.d.ts.map +1 -0
- package/dist/core/tools/renderers/index.js +50 -0
- package/dist/core/tools/renderers/index.js.map +1 -0
- package/dist/core/tools/renderers/ls.d.ts +10 -0
- package/dist/core/tools/renderers/ls.d.ts.map +1 -0
- package/dist/core/tools/renderers/ls.js +66 -0
- package/dist/core/tools/renderers/ls.js.map +1 -0
- package/dist/core/tools/renderers/read.d.ts +11 -0
- package/dist/core/tools/renderers/read.d.ts.map +1 -0
- package/dist/core/tools/renderers/read.js +129 -0
- package/dist/core/tools/renderers/read.js.map +1 -0
- package/dist/core/tools/renderers/webfetch.d.ts +11 -0
- package/dist/core/tools/renderers/webfetch.d.ts.map +1 -0
- package/dist/core/tools/renderers/webfetch.js +89 -0
- package/dist/core/tools/renderers/webfetch.js.map +1 -0
- package/dist/core/tools/renderers/write.d.ts +10 -0
- package/dist/core/tools/renderers/write.d.ts.map +1 -0
- package/dist/core/tools/renderers/write.js +153 -0
- package/dist/core/tools/renderers/write.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 +36 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -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/webextract.d.ts +36 -0
- package/dist/core/tools/webextract.d.ts.map +1 -0
- package/dist/core/tools/webextract.js +130 -0
- package/dist/core/tools/webextract.js.map +1 -0
- package/dist/core/tools/webfetch.d.ts +104 -0
- package/dist/core/tools/webfetch.d.ts.map +1 -0
- package/dist/core/tools/webfetch.js +231 -0
- package/dist/core/tools/webfetch.js.map +1 -0
- package/dist/core/tools/write.d.ts +30 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +61 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/core/trust-manager.d.ts +36 -0
- package/dist/core/trust-manager.d.ts.map +1 -0
- package/dist/core/trust-manager.js +203 -0
- package/dist/core/trust-manager.js.map +1 -0
- package/dist/core/usage-totals.d.ts +19 -0
- package/dist/core/usage-totals.d.ts.map +1 -0
- package/dist/core/usage-totals.js +52 -0
- package/dist/core/usage-totals.js.map +1 -0
- package/dist/core/webfetch/backend-exa.d.ts +65 -0
- package/dist/core/webfetch/backend-exa.d.ts.map +1 -0
- package/dist/core/webfetch/backend-exa.js +282 -0
- package/dist/core/webfetch/backend-exa.js.map +1 -0
- package/dist/core/webfetch/backend-firecrawl.d.ts +59 -0
- package/dist/core/webfetch/backend-firecrawl.d.ts.map +1 -0
- package/dist/core/webfetch/backend-firecrawl.js +339 -0
- package/dist/core/webfetch/backend-firecrawl.js.map +1 -0
- package/dist/core/webfetch/backend-undici.d.ts +21 -0
- package/dist/core/webfetch/backend-undici.d.ts.map +1 -0
- package/dist/core/webfetch/backend-undici.js +109 -0
- package/dist/core/webfetch/backend-undici.js.map +1 -0
- package/dist/core/webfetch/backend.d.ts +45 -0
- package/dist/core/webfetch/backend.d.ts.map +1 -0
- package/dist/core/webfetch/backend.js +9 -0
- package/dist/core/webfetch/backend.js.map +1 -0
- package/dist/core/webfetch/doc-store.d.ts +45 -0
- package/dist/core/webfetch/doc-store.d.ts.map +1 -0
- package/dist/core/webfetch/doc-store.js +57 -0
- package/dist/core/webfetch/doc-store.js.map +1 -0
- package/dist/core/webfetch/guardrails.d.ts +75 -0
- package/dist/core/webfetch/guardrails.d.ts.map +1 -0
- package/dist/core/webfetch/guardrails.js +195 -0
- package/dist/core/webfetch/guardrails.js.map +1 -0
- package/dist/core/webfetch/robots.d.ts +46 -0
- package/dist/core/webfetch/robots.d.ts.map +1 -0
- package/dist/core/webfetch/robots.js +153 -0
- package/dist/core/webfetch/robots.js.map +1 -0
- package/dist/core/webfetch/search-intent.d.ts +59 -0
- package/dist/core/webfetch/search-intent.d.ts.map +1 -0
- package/dist/core/webfetch/search-intent.js +89 -0
- package/dist/core/webfetch/search-intent.js.map +1 -0
- package/dist/core/webfetch/search-tags.d.ts +23 -0
- package/dist/core/webfetch/search-tags.d.ts.map +1 -0
- package/dist/core/webfetch/search-tags.js +118 -0
- package/dist/core/webfetch/search-tags.js.map +1 -0
- package/dist/env-compat.d.ts +2 -0
- package/dist/env-compat.d.ts.map +1 -0
- package/dist/env-compat.js +17 -0
- package/dist/env-compat.js.map +1 -0
- package/dist/extensions/cue/autocomplete.d.ts +126 -0
- package/dist/extensions/cue/autocomplete.d.ts.map +1 -0
- package/dist/extensions/cue/autocomplete.js +744 -0
- package/dist/extensions/cue/autocomplete.js.map +1 -0
- package/dist/extensions/cue/index.d.ts +3 -0
- package/dist/extensions/cue/index.d.ts.map +1 -0
- package/dist/extensions/cue/index.js +341 -0
- package/dist/extensions/cue/index.js.map +1 -0
- package/dist/extensions/index.d.ts +13 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +18 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/llama/client.d.ts +67 -0
- package/dist/extensions/llama/client.d.ts.map +1 -0
- package/dist/extensions/llama/client.js +309 -0
- package/dist/extensions/llama/client.js.map +1 -0
- package/dist/extensions/llama/huggingface.d.ts +23 -0
- package/dist/extensions/llama/huggingface.d.ts.map +1 -0
- package/dist/extensions/llama/huggingface.js +141 -0
- package/dist/extensions/llama/huggingface.js.map +1 -0
- package/dist/extensions/llama/index.d.ts +3 -0
- package/dist/extensions/llama/index.d.ts.map +1 -0
- package/dist/extensions/llama/index.js +219 -0
- package/dist/extensions/llama/index.js.map +1 -0
- package/dist/extensions/llama/provider.d.ts +12 -0
- package/dist/extensions/llama/provider.d.ts.map +1 -0
- package/dist/extensions/llama/provider.js +146 -0
- package/dist/extensions/llama/provider.js.map +1 -0
- package/dist/extensions/llama/ui.d.ts +42 -0
- package/dist/extensions/llama/ui.d.ts.map +1 -0
- package/dist/extensions/llama/ui.js +416 -0
- package/dist/extensions/llama/ui.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +17 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +820 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +288 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +10 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +8 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/assets/clankolas.png +0 -0
- package/dist/modes/interactive/chat-viewport.d.ts +20 -0
- package/dist/modes/interactive/chat-viewport.d.ts.map +1 -0
- package/dist/modes/interactive/chat-viewport.js +28 -0
- package/dist/modes/interactive/chat-viewport.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +333 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +26 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +171 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +175 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +16 -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 +102 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +770 -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 +30 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +115 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-entry.js +52 -0
- package/dist/modes/interactive/components/custom-entry.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +22 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +87 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +140 -0
- package/dist/modes/interactive/components/daxnuts.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 +133 -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/earendil-announcement.d.ts +5 -0
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
- package/dist/modes/interactive/components/earendil-announcement.js +40 -0
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +21 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +98 -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/first-time-setup.d.ts +25 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.js +103 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +32 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +230 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +34 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +35 -0
- package/dist/modes/interactive/components/index.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 +52 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +188 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts +3 -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 +11 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +75 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +60 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +361 -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 +163 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +46 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +326 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +98 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +891 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +98 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +745 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-submenu.js +165 -0
- package/dist/modes/interactive/components/settings-submenu.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/status-indicator.d.ts +30 -0
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
- package/dist/modes/interactive/components/status-indicator.js +67 -0
- package/dist/modes/interactive/components/status-indicator.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 +23 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +109 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +80 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +328 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +94 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +1245 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/trust-selector.js +91 -0
- package/dist/modes/interactive/components/trust-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/external-editor.d.ts +12 -0
- package/dist/modes/interactive/external-editor.d.ts.map +1 -0
- package/dist/modes/interactive/external-editor.js +38 -0
- package/dist/modes/interactive/external-editor.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +471 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +5735 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
- package/dist/modes/interactive/model-catalog-refresh.js +34 -0
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
- package/dist/modes/interactive/model-search.d.ts +12 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -0
- package/dist/modes/interactive/model-search.js +15 -0
- package/dist/modes/interactive/model-search.js.map +1 -0
- package/dist/modes/interactive/session-share.d.ts +16 -0
- package/dist/modes/interactive/session-share.d.ts.map +1 -0
- package/dist/modes/interactive/session-share.js +184 -0
- package/dist/modes/interactive/session-share.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +91 -0
- package/dist/modes/interactive/theme/light.json +90 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +41 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-controller.js +130 -0
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
- package/dist/modes/interactive/theme/theme-json.d.ts +84 -0
- package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-json.js +130 -0
- package/dist/modes/interactive/theme/theme-json.js.map +1 -0
- package/dist/modes/interactive/theme/theme-schema.json +356 -0
- package/dist/modes/interactive/theme/theme.d.ts +131 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +991 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/interactive/tui-renderer.d.ts +21 -0
- package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
- package/dist/modes/interactive/tui-renderer.js +66 -0
- package/dist/modes/interactive/tui-renderer.js.map +1 -0
- package/dist/modes/json-event.d.ts +34 -0
- package/dist/modes/json-event.d.ts.map +1 -0
- package/dist/modes/json-event.js +29 -0
- package/dist/modes/json-event.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -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 +254 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +495 -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 +657 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +469 -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 +9 -0
- package/dist/package-manager-cli.d.ts.map +1 -0
- package/dist/package-manager-cli.js +961 -0
- package/dist/package-manager-cli.js.map +1 -0
- package/dist/rpc-entry.d.ts +3 -0
- package/dist/rpc-entry.d.ts.map +1 -0
- package/dist/rpc-entry.js +12 -0
- package/dist/rpc-entry.js.map +1 -0
- package/dist/utils/abort.d.ts +5 -0
- package/dist/utils/abort.d.ts.map +1 -0
- package/dist/utils/abort.js +48 -0
- package/dist/utils/abort.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 +52 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/changelog.d.ts +22 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +165 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/child-process.d.ts +18 -0
- package/dist/utils/child-process.d.ts.map +1 -0
- package/dist/utils/child-process.js +106 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/clipboard-command.d.ts +7 -0
- package/dist/utils/clipboard-command.d.ts.map +1 -0
- package/dist/utils/clipboard-command.js +45 -0
- package/dist/utils/clipboard-command.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +228 -0
- package/dist/utils/clipboard-image.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 +84 -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/exif-orientation.d.ts +5 -0
- package/dist/utils/exif-orientation.d.ts.map +1 -0
- package/dist/utils/exif-orientation.js +157 -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 +27 -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 +26 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +195 -0
- package/dist/utils/git.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 +10 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +45 -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 +124 -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 +16 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +97 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/ion-user-agent.d.ts +2 -0
- package/dist/utils/ion-user-agent.d.ts.map +1 -0
- package/dist/utils/ion-user-agent.js +5 -0
- package/dist/utils/ion-user-agent.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/management-http.d.ts +25 -0
- package/dist/utils/management-http.d.ts.map +1 -0
- package/dist/utils/management-http.js +54 -0
- package/dist/utils/management-http.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 +34 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +114 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/photon.d.ts +21 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +121 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +34 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +216 -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 +13 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +177 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/text.d.ts +8 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +9 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/tool-result-images.d.ts +19 -0
- package/dist/utils/tool-result-images.d.ts.map +1 -0
- package/dist/utils/tool-result-images.js +45 -0
- package/dist/utils/tool-result-images.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +19 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +382 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/dist/utils/version-check.d.ts +19 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +79 -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/browser-extension.md +108 -0
- package/docs/compaction.md +444 -0
- package/docs/containerization.md +156 -0
- package/docs/custom-provider.md +777 -0
- package/docs/development.md +90 -0
- package/docs/docs.json +164 -0
- package/docs/environment-variables.md +101 -0
- package/docs/extensions.md +3033 -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 +85 -0
- package/docs/json.md +98 -0
- package/docs/keybindings.md +239 -0
- package/docs/llama-cpp.md +101 -0
- package/docs/models.md +574 -0
- package/docs/packages.md +228 -0
- package/docs/prompt-templates.md +96 -0
- package/docs/providers.md +321 -0
- package/docs/quickstart.md +168 -0
- package/docs/rpc.md +1618 -0
- package/docs/sdk.md +1226 -0
- package/docs/security.md +59 -0
- package/docs/session-format.md +450 -0
- package/docs/sessions.md +145 -0
- package/docs/settings.md +408 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +241 -0
- package/docs/terminal-setup.md +192 -0
- package/docs/termux.md +126 -0
- package/docs/themes.md +322 -0
- package/docs/tmux.md +63 -0
- package/docs/tui.md +961 -0
- package/docs/usage.md +327 -0
- package/docs/webfetch.md +119 -0
- package/docs/windows.md +39 -0
- package/examples/README.md +28 -0
- package/examples/extensions/README.md +213 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/border-status-editor.ts +150 -0
- package/examples/extensions/built-in-tool-renderer.ts +249 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +117 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +611 -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 +405 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -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 +132 -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 +55 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +81 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/entry-renderer.ts +41 -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 +115 -0
- package/examples/extensions/github-issue-autocomplete.ts +185 -0
- package/examples/extensions/gondolin/index.ts +531 -0
- package/examples/extensions/gondolin/package-lock.json +185 -0
- package/examples/extensions/gondolin/package.json +19 -0
- package/examples/extensions/handoff.ts +190 -0
- package/examples/extensions/hello.ts +26 -0
- package/examples/extensions/hidden-thinking-label.ts +53 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform-streaming.ts +39 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/kimi-deferred-tools.ts +61 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +57 -0
- package/examples/extensions/overlay-qa-tests.ts +1450 -0
- package/examples/extensions/overlay-test.ts +153 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +66 -0
- package/examples/extensions/plan-mode/index.ts +390 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +436 -0
- package/examples/extensions/project-trust.ts +64 -0
- package/examples/extensions/prompt-customizer.ts +97 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/provider-payload.ts +18 -0
- package/examples/extensions/qna.ts +118 -0
- package/examples/extensions/question.ts +278 -0
- package/examples/extensions/questionnaire.ts +440 -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 +321 -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 +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +32 -0
- package/examples/extensions/structured-output.ts +65 -0
- package/examples/extensions/subagent/README.md +177 -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 +157 -0
- package/examples/extensions/subagent/index.ts +1038 -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 +199 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/tic-tac-toe.ts +1008 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +297 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +50 -0
- package/examples/extensions/truncated-tool.ts +195 -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/plugins/ion-example-plugin/README.md +38 -0
- package/examples/plugins/ion-example-plugin/package.json +10 -0
- package/examples/plugins/ion-example-plugin/src/contract.ts +13 -0
- package/examples/plugins/ion-example-plugin/src/session.ts +23 -0
- package/examples/plugins/ion-example-plugin/src/tui.ts +31 -0
- package/examples/rpc-extension-ui.ts +641 -0
- package/examples/sdk/01-minimal.ts +26 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +70 -0
- package/examples/sdk/04-skills.ts +55 -0
- package/examples/sdk/05-tools.ts +48 -0
- package/examples/sdk/06-extensions.ts +94 -0
- package/examples/sdk/07-context-files.ts +42 -0
- package/examples/sdk/08-prompt-templates.ts +51 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
- package/examples/sdk/10-settings.ts +53 -0
- package/examples/sdk/11-sessions.ts +52 -0
- package/examples/sdk/12-full-control.ts +74 -0
- package/examples/sdk/13-session-runtime.ts +67 -0
- package/examples/sdk/README.md +140 -0
- package/npm-shrinkwrap.json +1912 -0
- package/package.json +108 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../../src/extensions/cue/autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehavioralDimension, CueRegistry, ElementDef } from \"@m4ike1/ion-cue\";\nimport type { AutocompleteItem, AutocompleteProvider, AutocompleteSuggestions } from \"@m4ike1/ion-tui\";\nimport { fuzzyFilter } from \"@m4ike1/ion-tui\";\nimport { existsSync, readdirSync, readFileSync, statSync } from \"fs\";\nimport { join } from \"path\";\n\n/** Extended autocomplete item with Cue-specific metadata */\nexport interface CueAutocompleteItem extends AutocompleteItem {\n\t_cueType: \"element\" | \"tag\" | \"flow\" | \"scope\" | \"scopePrefix\" | \"scopeFlow\" | \"alias\";\n\t_scopeType?: \"file\" | \"dir\" | \"glob\";\n}\n\n/**\n * Autocomplete provider for Cue directives.\n *\n * Triggers:\n * - `[` at line start or after whitespace -> element name suggestions\n * - `[Element: ` -> tag suggestions for that element\n * - `[Element: tag` (complete tag) -> `>` or `]` flow suggestions\n * - `[Element: tag1>tag2>` -> smart tag suggestions (no override conflicts)\n * - `{@` -> file/dir path suggestions from disk\n * - `{@path:` -> line range suggestions\n *\n * Bare `@path` outside braces is handled by the base provider, which inserts\n * a standalone `{@path}` scope statement.\n */\nexport class CueAutocompleteProvider implements AutocompleteProvider {\n\ttriggerCharacters = [\"[\", \">\", \"]\", \"{\"];\n\n\tprivate registry: CueRegistry;\n\tprivate projectRoot: string;\n\n\tconstructor(registry: CueRegistry, projectRoot: string = process.cwd()) {\n\t\tthis.registry = registry;\n\t\tthis.projectRoot = projectRoot;\n\t}\n\n\t/** Get override dimensions for a tag, checking element-local then shared tags. */\n\tprivate getTagOverrides(element: ElementDef, tagName: string): BehavioralDimension[] {\n\t\tconst normalized = tagName.toLowerCase();\n\t\tconst tagDef = element.tags[normalized];\n\t\tif (tagDef) return tagDef.overrides;\n\n\t\tconst shared = this.registry.getSharedTagOverrides(normalized);\n\t\treturn shared ?? [];\n\t}\n\n\tasync getSuggestions(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\tcursorCol: number,\n\t\t_options: { signal: AbortSignal; force?: boolean },\n\t): Promise<AutocompleteSuggestions | null> {\n\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\n\t\t// 0. Alias completion: `/name` on its own line suggests cue.toml shortcuts.\n\t\t// Bare `/` returns null so the slash-command menu keeps working.\n\t\tconst aliasPrefix = this.extractAliasPrefix(textBeforeCursor);\n\t\tif (aliasPrefix !== null) {\n\t\t\treturn this.getAliasSuggestions(aliasPrefix);\n\t\t}\n\n\t\t// 1. Element name completion: `[` at line start or after whitespace\n\t\tconst bracketPrefix = this.extractBracketPrefix(textBeforeCursor);\n\t\tif (bracketPrefix !== null) {\n\t\t\treturn this.getElementSuggestions(bracketPrefix);\n\t\t}\n\n\t\t// 2. After element selected but no colon yet: `[Element` -> suggest `:` or `]`\n\t\tconst elementNoColon = this.extractElementNoColon(textBeforeCursor);\n\t\tif (elementNoColon !== null) {\n\t\t\treturn this.getElementFlowSuggestions(elementNoColon);\n\t\t}\n\n\t\t// 3. Tag context extraction\n\t\tconst tagContext = this.extractTagContext(textBeforeCursor);\n\t\tif (tagContext) {\n\t\t\t// 2a. If we have a complete tag (not partial), suggest flow: `>` or `]`\n\t\t\tif (tagContext.isComplete && tagContext.lastTag) {\n\t\t\t\treturn this.getFlowSuggestions(tagContext.element, tagContext.selectedTags);\n\t\t\t}\n\n\t\t\t// 2b. If we have tags already selected, filter by non-conflicting overrides\n\t\t\tif (tagContext.selectedTags.length > 0) {\n\t\t\t\tconst smart = this.getSmartTagSuggestions(tagContext.element, tagContext.partial, tagContext.selectedTags);\n\t\t\t\tif (smart && smart.items.length > 0) return smart;\n\t\t\t\t// No more valid tags -- only `]` left\n\t\t\t\treturn this.getCloseOnlySuggestions();\n\t\t\t}\n\n\t\t\t// 2c. First tag - show all available tags\n\t\t\treturn this.getTagSuggestions(tagContext.element, tagContext.partial);\n\t\t}\n\n\t\t// 5. Scope completion: `{` anywhere (standalone scope statements)\n\t\tconst scopePrefix = this.extractScopePrefix(textBeforeCursor);\n\t\tif (scopePrefix !== null) {\n\t\t\tif (scopePrefix.type === \"file\") {\n\t\t\t\treturn this.getScopedSuggestions(scopePrefix.partial);\n\t\t\t}\n\t\t\tif (scopePrefix.type === \"skill\") {\n\t\t\t\t// Delegate to base provider for skill name completions (e.g. {$commit})\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// Just `{` - suggest the `@` / `$` scope starters\n\t\t\treturn this.getScopePrefixSuggestions(scopePrefix.partial);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tapplyCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\tcursorCol: number,\n\t\titem: AutocompleteItem,\n\t\tprefix: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\tconst textAfterCursor = currentLine.slice(cursorCol);\n\t\tconst cueItem = item as CueAutocompleteItem;\n\n\t\tif (cueItem._cueType === \"element\") {\n\t\t\treturn this.applyElementCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"tag\") {\n\t\t\treturn this.applyTagCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"flow\") {\n\t\t\treturn this.applyFlowCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"scope\") {\n\t\t\treturn this.applyScopeCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"scopeFlow\") {\n\t\t\treturn this.applyScopeFlowCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"scopePrefix\") {\n\t\t\treturn this.applyScopePrefixCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\tif (cueItem._cueType === \"alias\") {\n\t\t\treturn this.applyAliasCompletion(lines, cursorLine, cursorCol, item, textBeforeCursor, textAfterCursor);\n\t\t}\n\n\t\t// Fallback: just insert the value\n\t\tconst beforePrefix = textBeforeCursor.slice(0, textBeforeCursor.length - prefix.length);\n\t\tconst newLine = beforePrefix + item.value + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\treturn { lines: newLines, cursorLine, cursorCol: beforePrefix.length + item.value.length };\n\t}\n\n\t// ─── Extraction Methods ────────────────────────────────────────────────────\n\n\t/** Extract `[` prefix for element completion */\n\tprivate extractBracketPrefix(text: string): string | null {\n\t\tconst match = text.match(/(?:^|\\s)\\[([A-Za-z][A-Za-z0-9_-]*)?$/);\n\t\tif (match) {\n\t\t\tconst partial = match[1] || \"\";\n\t\t\t// If the partial matches a real element, let extractElementNoColon handle it\n\t\t\tif (partial && this.registry.get(partial)) return null;\n\t\t\treturn partial;\n\t\t}\n\t\tif (text.endsWith(\"[\") && (text.length === 1 || /\\s/.test(text[text.length - 2] ?? \"\"))) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Extract element name when we have `[Element` but no colon yet */\n\tprivate extractElementNoColon(text: string): string | null {\n\t\t// Don't match if the bracket is closed\n\t\tif (text.endsWith(\"]\")) return null;\n\t\tconst match = text.match(/\\[([A-Za-z][A-Za-z0-9_-]*)$/);\n\t\tif (!match) return null;\n\t\tconst element = match[1] ?? \"\";\n\t\tif (!this.registry.get(element)) return null;\n\t\treturn element;\n\t}\n\n\t/**\n\t * Extract tag context from the text before cursor.\n\t * Returns null if not in a tag context.\n\t */\n\tprivate extractTagContext(text: string): {\n\t\telement: string;\n\t\tpartial: string;\n\t\tselectedTags: string[];\n\t\tlastTag: string | null;\n\t\tisComplete: boolean;\n\t} | null {\n\t\t// Check if we're inside a `[Element: ...]` directive\n\t\t// Use [^]]*$ to match only up to the LAST unclosed bracket\n\t\tconst bracketMatch = text.match(/\\[([A-Za-z][A-Za-z0-9_-]*):\\s*([^\\]]*)$/);\n\t\tif (!bracketMatch) return null;\n\n\t\tconst element = bracketMatch[1] ?? \"\";\n\t\tconst afterColon = bracketMatch[2] ?? \"\";\n\n\t\t// If directive is closed, not in tag context\n\t\tif (afterColon.includes(\"]\")) return null;\n\n\t\t// Parse tag chain by splitting on `>`\n\t\tconst parts = afterColon.split(\">\").map((p) => p.trim());\n\t\tconst selectedTags: string[] = [];\n\t\tlet partial = \"\";\n\t\tlet isComplete = false;\n\n\t\tfor (let i = 0; i < parts.length; i++) {\n\t\t\tconst part = parts[i] ?? \"\";\n\t\t\tconst isLast = i === parts.length - 1;\n\n\t\t\tif (isLast) {\n\t\t\t\tif (afterColon.includes(\">\")) {\n\t\t\t\t\t// There's a `>` in the chain -- after `> `, user wants to chain more tags\n\t\t\t\t\tif (part === \"\") {\n\t\t\t\t\t\t// Empty after `> ` -- ready for next tag, show tag suggestions\n\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t} else if (afterColon.endsWith(\" \")) {\n\t\t\t\t\t\t// Tag followed by space after `>` -- complete tag, show tag suggestions\n\t\t\t\t\t\tselectedTags.push(part);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Tag at end without space -- partial (user still typing)\n\t\t\t\t\t\tpartial = part;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// No `>` in chain yet\n\t\t\t\t\tif (part === \"\") {\n\t\t\t\t\t\t// Empty after `: ` -- ready for first tag\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t} else if (afterColon.endsWith(\" \")) {\n\t\t\t\t\t\t// Tag followed by space -- complete, show flow (`>`/`]`)\n\t\t\t\t\t\tselectedTags.push(part);\n\t\t\t\t\t\tisComplete = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Tag being typed\n\t\t\t\t\t\tpartial = part;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not last part -- must be a complete selected tag\n\t\t\t\tif (part) selectedTags.push(part);\n\t\t\t}\n\t\t}\n\n\t\tconst lastTag = selectedTags.length > 0 ? (selectedTags[selectedTags.length - 1] ?? null) : null;\n\n\t\t// If partial exactly matches a valid tag, treat it as complete\n\t\tif (!isComplete && partial) {\n\t\t\tconst elementDef = this.registry.get(element);\n\t\t\tconst isLocal = elementDef?.tags[partial.toLowerCase()];\n\t\t\tconst isShared = this.registry.getSharedTagDefs().has(partial.toLowerCase());\n\t\t\tif (isLocal || isShared) {\n\t\t\t\tselectedTags.push(partial);\n\t\t\t\tpartial = \"\";\n\t\t\t\tisComplete = true;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\telement,\n\t\t\tpartial,\n\t\t\tselectedTags,\n\t\t\tlastTag: isComplete && selectedTags.length > 0 ? (selectedTags[selectedTags.length - 1] ?? null) : lastTag,\n\t\t\tisComplete,\n\t\t};\n\t}\n\n\t/**\n\t * Extract scope prefix from text before cursor.\n\t * Matches `{` anywhere (standalone scope statement).\n\t * Returns null if not in scope context.\n\t * Returns { type: null, partial } for just `{`\n\t * Returns { type: \"file\", partial } for `{@`\n\t * Returns { type: \"skill\", partial } for `{$`\n\t */\n\tprivate extractScopePrefix(text: string): { type: \"file\" | \"skill\" | null; partial: string } | null {\n\t\t// Match `{` anywhere, followed by optional scope prefix and content\n\t\tconst match = text.match(/\\{([@$]?)([^}]*)$/);\n\t\tif (!match) return null;\n\n\t\tconst prefix = match[1] ?? \"\";\n\t\tconst partial = match[2] ?? \"\";\n\n\t\tif (prefix === \"@\") return { type: \"file\", partial };\n\t\tif (prefix === \"$\") return { type: \"skill\", partial };\n\t\treturn { type: null, partial };\n\t}\n\n\t/**\n\t * Extract an alias partial: `/name` alone on its line (mirrors the\n\t * dispatcher's first-line alias form). Returns null for bare `/` so\n\t * the slash-command menu keeps working, and for non-first-line `/`\n\t * uses like `/skill:name`.\n\t */\n\tprivate extractAliasPrefix(text: string): string | null {\n\t\tconst match = text.match(/^\\s*\\/(\\w+)$/);\n\t\tif (!match) return null;\n\t\treturn match[1] ?? \"\";\n\t}\n\n\t// ─── Suggestion Methods ────────────────────────────────────────────────────\n\n\t/** Get element name suggestions */\n\tprivate getElementSuggestions(partial: string): AutocompleteSuggestions | null {\n\t\tconst elements = this.registry.list();\n\t\tconst items: CueAutocompleteItem[] = elements.map((el: ElementDef) => ({\n\t\t\tvalue: el.name,\n\t\t\tlabel: el.name,\n\t\t\tdescription: el.description,\n\t\t\t_cueType: \"element\",\n\t\t}));\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: `[${partial}` };\n\t}\n\n\t/** Get flow suggestions after element selected: `:` (add tags) or `]` (close) */\n\tprivate getElementFlowSuggestions(elementName: string): AutocompleteSuggestions | null {\n\t\tconst element = this.registry.get(elementName);\n\t\tif (!element) return null;\n\n\t\tconst hasTags = Object.keys(element.tags).length > 0;\n\t\tconst items: CueAutocompleteItem[] = [];\n\n\t\tif (hasTags) {\n\t\t\titems.push({\n\t\t\t\tvalue: \":\",\n\t\t\t\tlabel: \": tag\",\n\t\t\t\tdescription: `Add a tag to ${elementName}`,\n\t\t\t\t_cueType: \"flow\",\n\t\t\t});\n\t\t}\n\n\t\titems.push({\n\t\t\tvalue: \"]\",\n\t\t\tlabel: \"] close\",\n\t\t\tdescription: \"Close the directive\",\n\t\t\t_cueType: \"flow\",\n\t\t});\n\n\t\treturn { items, prefix: \"\" };\n\t}\n\n\t/**\n\t * Get flow suggestions after a complete tag: `>` (chain) or `]` (close).\n\t * Only shows `>` if there are non-conflicting tags remaining.\n\t */\n\tprivate getFlowSuggestions(elementName: string, selectedTags: string[]): AutocompleteSuggestions | null {\n\t\tconst element = this.registry.get(elementName);\n\t\tif (!element) return null;\n\n\t\t// Collect override dimensions from all selected tags (including shared tags)\n\t\tconst usedDimensions = new Set<BehavioralDimension>();\n\t\tfor (const tag of selectedTags) {\n\t\t\tfor (const dim of this.getTagOverrides(element, tag)) {\n\t\t\t\tusedDimensions.add(dim);\n\t\t\t}\n\t\t}\n\n\t\t// Check if any tag can still be chained (doesn't conflict with used dimensions)\n\t\tconst hasNonConflictingTag = Object.entries(element.tags).some(([name, tag]) => {\n\t\t\t// Skip already-selected tags\n\t\t\tif (selectedTags.some((t) => t.toLowerCase() === name)) return false;\n\t\t\t// Tag is valid if none of its overrides are already used\n\t\t\treturn !tag.overrides.some((dim) => usedDimensions.has(dim));\n\t\t});\n\n\t\tconst items: CueAutocompleteItem[] = [];\n\n\t\tif (hasNonConflictingTag) {\n\t\t\titems.push({\n\t\t\t\tvalue: \">\",\n\t\t\t\tlabel: \"> chain\",\n\t\t\t\tdescription: \"Chain another tag\",\n\t\t\t\t_cueType: \"flow\",\n\t\t\t});\n\t\t}\n\n\t\titems.push({\n\t\t\tvalue: \"]\",\n\t\t\tlabel: \"] close\",\n\t\t\tdescription: \"Close the directive\",\n\t\t\t_cueType: \"flow\",\n\t\t});\n\n\t\treturn { items, prefix: \"\" };\n\t}\n\n\t/** Get close-only suggestion when no more tags can be chained */\n\tprivate getCloseOnlySuggestions(): AutocompleteSuggestions | null {\n\t\tconst items: CueAutocompleteItem[] = [\n\t\t\t{\n\t\t\t\tvalue: \"]\",\n\t\t\t\tlabel: \"] close\",\n\t\t\t\tdescription: \"Close the directive\",\n\t\t\t\t_cueType: \"flow\",\n\t\t\t},\n\t\t];\n\t\treturn { items, prefix: \"\" };\n\t}\n\n\t/**\n\t * Get smart tag suggestions that don't conflict with already-selected tags.\n\t * Filters out tags whose `overrides` dimensions overlap with selected tags.\n\t */\n\tprivate getSmartTagSuggestions(\n\t\telementName: string,\n\t\tpartial: string,\n\t\tselectedTags: string[],\n\t): AutocompleteSuggestions | null {\n\t\tconst element = this.registry.get(elementName);\n\t\tif (!element) return null;\n\n\t\t// Collect all override dimensions from selected tags (including shared tags)\n\t\tconst usedDimensions = new Set<BehavioralDimension>();\n\t\tfor (const tag of selectedTags) {\n\t\t\tfor (const dim of this.getTagOverrides(element, tag)) {\n\t\t\t\tusedDimensions.add(dim);\n\t\t\t}\n\t\t}\n\n\t\t// Filter tags: exclude those that override already-used dimensions\n\t\tconst items: CueAutocompleteItem[] = [];\n\t\tfor (const [name, tag] of Object.entries(element.tags)) {\n\t\t\t// Skip already-selected tags\n\t\t\tif (selectedTags.some((t) => t.toLowerCase() === name)) continue;\n\n\t\t\t// Check for override conflicts\n\t\t\tconst conflicts = tag.overrides.filter((dim) => usedDimensions.has(dim));\n\t\t\tif (conflicts.length > 0) {\n\t\t\t} else {\n\t\t\t\t// No conflict - clean composition\n\t\t\t\titems.push({\n\t\t\t\t\tvalue: name,\n\t\t\t\t\tlabel: name,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\ttag.overrides.length > 0\n\t\t\t\t\t\t\t? `${tag.description} (overrides: ${tag.overrides.join(\", \")})`\n\t\t\t\t\t\t\t: tag.description,\n\t\t\t\t\t_cueType: \"tag\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: partial };\n\t}\n\n\t/** Get all tag suggestions for a specific element (first tag, no filtering) */\n\tprivate getTagSuggestions(elementName: string, partial: string): AutocompleteSuggestions | null {\n\t\tconst element = this.registry.get(elementName);\n\t\tif (!element) return null;\n\n\t\tconst items: CueAutocompleteItem[] = Object.entries(element.tags).map(([name, tag]) => ({\n\t\t\tvalue: name,\n\t\t\tlabel: name,\n\t\t\tdescription:\n\t\t\t\ttag.overrides.length > 0 ? `${tag.description} (overrides: ${tag.overrides.join(\", \")})` : tag.description,\n\t\t\t_cueType: \"tag\",\n\t\t}));\n\n\t\t// Add shared tags that aren't already defined locally\n\t\tconst localNames = new Set(Object.keys(element.tags));\n\t\tconst sharedDefs = this.registry.getSharedTagDefs();\n\t\tfor (const [name, def] of sharedDefs) {\n\t\t\tif (localNames.has(name)) continue;\n\t\t\titems.push({\n\t\t\t\tvalue: name,\n\t\t\t\tlabel: name,\n\t\t\t\tdescription:\n\t\t\t\t\tdef.overrides.length > 0\n\t\t\t\t\t\t? `${def.description} (overrides: ${def.overrides.join(\", \")})`\n\t\t\t\t\t\t: def.description,\n\t\t\t\t_cueType: \"tag\",\n\t\t\t});\n\t\t}\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: partial };\n\t}\n\n\t/**\n\t * Get scope starter suggestions for just `{`.\n\t * Shows @ for file scope and $ for skill scope.\n\t */\n\tprivate getScopePrefixSuggestions(partial: string): AutocompleteSuggestions | null {\n\t\tconst items: CueAutocompleteItem[] = [\n\t\t\t{\n\t\t\t\tvalue: \"@\",\n\t\t\t\tlabel: \"@ file\",\n\t\t\t\tdescription: \"Scope to a file or directory\",\n\t\t\t\t_cueType: \"scopePrefix\",\n\t\t\t\t_scopeType: \"file\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"$\",\n\t\t\t\tlabel: \"$ skill\",\n\t\t\t\tdescription: \"Reference a skill\",\n\t\t\t\t_cueType: \"scopePrefix\",\n\t\t\t\t_scopeType: \"file\",\n\t\t\t},\n\t\t];\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: partial };\n\t}\n\n\t/**\n\t * Get alias suggestions for `/partial` from cue.toml shortcuts.\n\t * Returns null when nothing matches so slash commands keep working.\n\t */\n\tprivate getAliasSuggestions(partial: string): AutocompleteSuggestions | null {\n\t\tconst aliases = this.registry.loadAliases(this.projectRoot);\n\t\tconst items: CueAutocompleteItem[] = Object.entries(aliases).map(([name, expansion]) => ({\n\t\t\tvalue: `/${name}`,\n\t\t\tlabel: `/${name}`,\n\t\t\tdescription: `→ ${expansion.length > 60 ? `${expansion.slice(0, 60)}...` : expansion}`,\n\t\t\t_cueType: \"alias\",\n\t\t}));\n\n\t\tconst filtered = fuzzyFilter(items, partial, (item) => item.value);\n\t\tif (filtered.length === 0) return null;\n\n\t\treturn { items: filtered, prefix: `/${partial}` };\n\t}\n\n\t/**\n\t * Get scoped suggestions after `{@`.\n\t * - `{@partial` → file/dir suggestions from disk (relative to projectRoot)\n\t * - `{@path:r` → line range suggestions for that file\n\t */\n\tprivate getScopedSuggestions(partial: string): AutocompleteSuggestions | null {\n\t\tconst colonIndex = partial.indexOf(\":\");\n\t\tif (colonIndex !== -1) {\n\t\t\tconst items = this.getRangeSuggestions(partial.slice(0, colonIndex), partial.slice(colonIndex + 1));\n\t\t\tif (items.length === 0) return null;\n\t\t\treturn { items, prefix: partial };\n\t\t}\n\n\t\tconst filtered = this.getPathSuggestions(partial);\n\t\tconst items: CueAutocompleteItem[] = [];\n\t\t// A fully typed file path offers two endings: open a line range or close the scope\n\t\tconst isCompleteFile = filtered.some((f) => f.value === partial && f._scopeType === \"file\");\n\t\tif (isCompleteFile) {\n\t\t\titems.push(\n\t\t\t\t{\n\t\t\t\t\tvalue: \":\",\n\t\t\t\t\tlabel: \": range\",\n\t\t\t\t\tdescription: \"Add a line range (e.g. :3-5)\",\n\t\t\t\t\t_cueType: \"scopeFlow\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: \"}\",\n\t\t\t\t\tlabel: \"} end scope\",\n\t\t\t\t\tdescription: \"Close the scope statement\",\n\t\t\t\t\t_cueType: \"scopeFlow\",\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\titems.push(...filtered.filter((f) => !(f.value === partial && f._scopeType === \"file\")));\n\t\tif (items.length === 0) return null;\n\t\treturn { items, prefix: partial };\n\t}\n\n\t/** List files/dirs from disk under projectRoot matching the partial path. */\n\tprivate getPathSuggestions(partial: string): CueAutocompleteItem[] {\n\t\tconst hasTrailingSlash = partial.endsWith(\"/\");\n\t\tconst segments = partial.split(\"/\").filter((s) => s !== \"\" && s !== \".\");\n\t\tconst lastSegment = hasTrailingSlash ? \"\" : (segments.pop() ?? \"\");\n\t\tconst base = join(this.projectRoot, ...segments);\n\n\t\tlet entries: string[] = [];\n\t\ttry {\n\t\t\tif (!existsSync(base) || !statSync(base).isDirectory()) return [];\n\t\t\tentries = readdirSync(base);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst MAX_ITEMS = 100;\n\t\tconst items: CueAutocompleteItem[] = [];\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.startsWith(\".\")) continue;\n\t\t\tif (items.length >= MAX_ITEMS) break;\n\n\t\t\tconst full = join(base, entry);\n\t\t\tlet isDir = false;\n\t\t\ttry {\n\t\t\t\tisDir = statSync(full).isDirectory();\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst rel = segments.length > 0 ? `${segments.join(\"/\")}/${entry}` : entry;\n\t\t\titems.push({\n\t\t\t\tvalue: isDir ? `${rel}/` : rel,\n\t\t\t\tlabel: isDir ? `${rel}/` : rel,\n\t\t\t\tdescription: isDir ? \"directory\" : \"file\",\n\t\t\t\t_cueType: \"scope\",\n\t\t\t\t_scopeType: isDir ? \"dir\" : \"file\",\n\t\t\t});\n\t\t}\n\n\t\treturn fuzzyFilter(items, lastSegment, (item) => item.value);\n\t}\n\n\t/**\n\t * Suggest line numbers and range ends for a `{@file:` scope.\n\t *\n\t * With an empty range part each suggestion is one file line rendered as\n\t * `<line number> <line content>`; picking one keeps the brace open\n\t * (`{@file:N`) so a range can be extended. After a start line N (typed or\n\t * picked) the suggestions become the range ends (`{@file:N-M`), and\n\t * picking one closes the scope (`{@file:N-M} `). Lines longer than\n\t * MAX_LINE are truncated with `...`.\n\t */\n\tprivate getRangeSuggestions(pathPart: string, rangePart: string): CueAutocompleteItem[] {\n\t\tconst full = join(this.projectRoot, pathPart);\n\t\tlet content = \"\";\n\t\ttry {\n\t\t\tcontent = readFileSync(full, \"utf-8\");\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst lines = content.split(\"\\n\");\n\t\tif (lines[lines.length - 1] === \"\") lines.pop();\n\t\tconst totalLines = lines.length;\n\t\tconst MAX_LINE = 100;\n\t\tconst MAX_ITEMS = 50;\n\t\tconst CHUNK = 10;\n\n\t\tconst truncate = (s: string) => (s.length > MAX_LINE ? `${s.slice(0, MAX_LINE)}...` : s);\n\t\tconst width = String(totalLines).length;\n\t\tconst lineLabel = (n: number) => `${String(n).padStart(width)} ${truncate(lines[n - 1] ?? \"\")}`;\n\n\t\tconst items: CueAutocompleteItem[] = [];\n\t\tconst pushLine = (n: number, value: string) => {\n\t\t\tif (n < 1 || n > totalLines) return;\n\t\t\titems.push({ value, label: lineLabel(n), _cueType: \"scope\" });\n\t\t};\n\n\t\tif (rangePart === \"\") {\n\t\t\tfor (let n = 1; n <= totalLines && items.length < MAX_ITEMS; n++) {\n\t\t\t\tpushLine(n, `${pathPart}:${n}`);\n\t\t\t}\n\t\t} else if (/^(\\d+)-?$/.test(rangePart)) {\n\t\t\tconst start = parseInt(rangePart, 10);\n\t\t\tif (start < 1 || start > totalLines) return [];\n\t\t\tfor (let end = start + 1; end <= Math.min(start + CHUNK, totalLines); end++) {\n\t\t\t\tpushLine(end, `${pathPart}:${start}-${end}`);\n\t\t\t}\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t\treturn items;\n\t}\n\n\t// ─── Apply Completion Methods ──────────────────────────────────────────────\n\n\tprivate applyElementCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tconst bracketPos = textBeforeCursor.lastIndexOf(\"[\");\n\t\tconst beforeBracket = textBeforeCursor.slice(0, bracketPos);\n\t\tconst insertText = `[${item.value}`;\n\t\tconst newLine = beforeBracket + insertText + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\treturn { lines: newLines, cursorLine, cursorCol: bracketPos + insertText.length };\n\t}\n\n\tprivate applyTagCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\t// Find the last `>` or `:` to determine where to insert\n\t\tconst colonPos = textBeforeCursor.lastIndexOf(\":\");\n\t\tconst beforeColon = textBeforeCursor.slice(0, colonPos + 1);\n\t\tconst afterColon = textBeforeCursor.slice(colonPos + 1);\n\t\tconst lastTagStart = afterColon.lastIndexOf(\">\");\n\t\tconst beforeTag = afterColon.slice(0, lastTagStart + 1);\n\n\t\t// Insert the tag with a single space after the `:` or `>` separator.\n\t\t// Everything between the separator and the cursor (a partial tag) is\n\t\t// replaced by the picked tag. User types `>` or `]` to continue.\n\t\tconst newLine = `${beforeColon + beforeTag} ${item.value}${textAfterCursor}`;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\tconst newCursorCol = colonPos + 1 + beforeTag.length + 1 + item.value.length;\n\t\treturn { lines: newLines, cursorLine, cursorCol: newCursorCol };\n\t}\n\n\tprivate applyFlowCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tif (item.value === \":\") {\n\t\t\tconst newLine = `${textBeforeCursor}: ${textAfterCursor}`;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + 2 };\n\t\t}\n\n\t\tif (item.value === \">\") {\n\t\t\tconst newLine = `${textBeforeCursor} > ${textAfterCursor}`;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + 3 };\n\t\t}\n\n\t\tif (item.value === \"]\") {\n\t\t\tconst newLine = `${textBeforeCursor}]${textAfterCursor}`;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + 1 };\n\t\t}\n\n\t\t// Fallback\n\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t}\n\n\tprivate applyScopeCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\t// Find the `{@` or `{#` prefix and replace the partial\n\t\tconst scopeMatch = textBeforeCursor.match(/\\{([@#])([^}]*)$/);\n\t\tif (!scopeMatch) {\n\t\t\t// Fallback: just insert\n\t\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t\t}\n\n\t\tconst typeChar = scopeMatch[1] ?? \"@\";\n\t\tconst scopeStart = textBeforeCursor.lastIndexOf(`{${typeChar}`);\n\t\tconst beforeScope = textBeforeCursor.slice(0, scopeStart);\n\t\tconst insertText = `{${typeChar}${item.value}`;\n\n\t\t// Directories and completed ranges close the scope (`{@dir/} `,\n\t\t// `{@file:N-M} `); a file pick leaves the brace open so the `:` range\n\t\t// and `}` close flow items can be picked next, and a bare line number\n\t\t// leaves it open so a range end can be picked next\n\t\tconst isDir = (item as CueAutocompleteItem)._scopeType === \"dir\";\n\t\tconst rangePart = item.value.slice(item.value.indexOf(\":\") + 1);\n\t\tconst isRangeEnd = rangePart.includes(\"-\");\n\t\tconst suffix = isDir || isRangeEnd ? \"} \" : \"\";\n\n\t\tconst newLine = beforeScope + insertText + suffix + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\tconst newCursorCol = beforeScope.length + insertText.length + suffix.length;\n\t\treturn { lines: newLines, cursorLine, cursorCol: newCursorCol };\n\t}\n\n\t/**\n\t * Apply a scope ending: `:` opens a line range (brace stays open),\n\t * `}` closes the scope statement.\n\t */\n\tprivate applyScopeFlowCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tconst scopeMatch = textBeforeCursor.match(/\\{([@#])([^}]*)$/);\n\t\tif (!scopeMatch) {\n\t\t\t// Fallback: just insert\n\t\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t\t}\n\n\t\tconst typeChar = scopeMatch[1] ?? \"@\";\n\t\tconst scopeStart = textBeforeCursor.lastIndexOf(`{${typeChar}`);\n\t\tconst beforeScope = textBeforeCursor.slice(0, scopeStart);\n\t\tconst partial = scopeMatch[2] ?? \"\";\n\n\t\tconst isRange = item.value === \":\";\n\t\tconst insertText = isRange ? `{${typeChar}${partial}:` : `{${typeChar}${partial}}`;\n\t\tconst suffix = isRange ? \"\" : \" \";\n\n\t\tconst newLine = beforeScope + insertText + suffix + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\tconst newCursorCol = beforeScope.length + insertText.length + suffix.length;\n\t\treturn { lines: newLines, cursorLine, cursorCol: newCursorCol };\n\t}\n\n\tprivate applyScopePrefixCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\t// Find the `{` prefix and insert the scope prefix\n\t\tconst scopeMatch = textBeforeCursor.match(/\\{([@#$]?)([^}]*)$/);\n\t\tif (!scopeMatch) {\n\t\t\t// Fallback: just insert\n\t\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t\t}\n\n\t\tconst scopeStart = textBeforeCursor.lastIndexOf(\"{\");\n\t\tconst beforeScope = textBeforeCursor.slice(0, scopeStart);\n\t\tconst insertText = `{${item.value}`;\n\n\t\tconst newLine = beforeScope + insertText + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\tconst newCursorCol = beforeScope.length + insertText.length;\n\t\treturn { lines: newLines, cursorLine, cursorCol: newCursorCol };\n\t}\n\n\t/**\n\t * Apply an alias pick: replace the `/partial` with `/name` plus a\n\t * trailing space so the alias submits as its own message.\n\t */\n\tprivate applyAliasCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\t_cursorCol: number,\n\t\titem: AutocompleteItem,\n\t\ttextBeforeCursor: string,\n\t\ttextAfterCursor: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\tconst aliasMatch = textBeforeCursor.match(/^(\\s*)\\/(\\w*)$/);\n\t\tif (!aliasMatch) {\n\t\t\t// Fallback: just insert\n\t\t\tconst newLine = textBeforeCursor + item.value + textAfterCursor;\n\t\t\tconst newLines = [...lines];\n\t\t\tnewLines[cursorLine] = newLine;\n\t\t\treturn { lines: newLines, cursorLine, cursorCol: textBeforeCursor.length + item.value.length };\n\t\t}\n\n\t\tconst beforeAlias = aliasMatch[1] ?? \"\";\n\t\tconst insertText = `${item.value} `;\n\t\tconst newLine = beforeAlias + insertText + textAfterCursor;\n\t\tconst newLines = [...lines];\n\t\tnewLines[cursorLine] = newLine;\n\t\treturn { lines: newLines, cursorLine, cursorCol: beforeAlias.length + insertText.length };\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/cue/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAmDnE,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAiT5D","sourcesContent":["import type { SessionState } from \"@m4ike1/ion-cue\";\nimport { CueRegistry, cueDiscoveryRoots, cueDispatcher, HarnessRouter, registerHarnessTools } from \"@m4ike1/ion-cue\";\nimport { type FSWatcher, readdirSync, readFileSync, watch } from \"fs\";\nimport { basename, join } from \"path\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport type { ExtensionAPI } from \"../../core/extensions/types.ts\";\nimport { isEnabledByOverrides } from \"../../core/package-manager.ts\";\nimport { stripBom } from \"../../utils/text.ts\";\nimport { CueAutocompleteProvider } from \"./autocomplete.ts\";\n\n/** Debounce for cue file watching: bursts of editor saves collapse to one refresh. */\nconst CUE_WATCH_DEBOUNCE_MS = 250;\n\n/** Settings files whose `cues` arrays gate element enforcement. */\nconst settingsFileFor = (baseDir: string): string => join(baseDir, \"settings.json\");\n\n/** Read the `cues` override patterns from a settings file; missing/unparseable means no overrides. */\nfunction readCuePatterns(settingsPath: string): string[] | undefined {\n\ttry {\n\t\tconst parsed = JSON.parse(stripBom(readFileSync(settingsPath, \"utf-8\"))) as { cues?: unknown };\n\t\treturn Array.isArray(parsed.cues) ? (parsed.cues as string[]) : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** `.toml` files at the root and one author level down, mirroring registry discovery. */\nfunction listElementTomls(root: string): string[] {\n\tconst found: string[] = [];\n\tlet entries: Array<{ name: string; isDirectory(): boolean; isFile(): boolean }>;\n\ttry {\n\t\tentries = readdirSync(root, { withFileTypes: true });\n\t} catch {\n\t\treturn found;\n\t}\n\tfor (const entry of entries) {\n\t\tif (entry.name.startsWith(\".\")) continue;\n\t\tconst full = join(root, entry.name);\n\t\tif (entry.isFile() && entry.name.endsWith(\".toml\")) {\n\t\t\tfound.push(full);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!entry.isDirectory()) continue;\n\t\tlet sub: typeof entries;\n\t\ttry {\n\t\t\tsub = readdirSync(full, { withFileTypes: true });\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const s of sub) {\n\t\t\tif (s.isFile() && s.name.endsWith(\".toml\") && !s.name.startsWith(\".\")) found.push(join(full, s.name));\n\t\t}\n\t}\n\treturn found;\n}\n\nexport default function cueExtension(ion: ExtensionAPI): void {\n\t// Initialize Cue registry and dispatcher. Aliases from cue.toml are loaded\n\t// here so /name shortcuts expand; unknown /commands pass through untouched.\n\tconst cwd = process.cwd();\n\t// Enforcement mirrors package-manager scoping: each cue root is gated by\n\t// the `cues` override patterns of its own settings file (global\n\t// agentDir/settings.json, project .ion/settings.json), matched relative\n\t// to the root exactly like the config UI computes them. Recomputed on\n\t// every refresh so config-UI toggles apply without a restart.\n\tconst computeDisabledElements = (): string[] => {\n\t\tconst disabled = new Set<string>();\n\t\tfor (const { path: root, scope } of cueDiscoveryRoots({ projectRoot: cwd })) {\n\t\t\tconst settingsPath =\n\t\t\t\tscope === \"project\" ? settingsFileFor(join(cwd, CONFIG_DIR_NAME)) : settingsFileFor(getAgentDir());\n\t\t\tconst patterns = readCuePatterns(settingsPath);\n\t\t\tif (!patterns || patterns.length === 0) continue;\n\t\t\tfor (const toml of listElementTomls(root)) {\n\t\t\t\tif (!isEnabledByOverrides(toml, patterns, root)) {\n\t\t\t\t\tdisabled.add(basename(toml, \".toml\").toLowerCase());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...disabled];\n\t};\n\tconst dispatcher = cueDispatcher({\n\t\tprojectRoot: cwd,\n\t\taliases: new CueRegistry().loadAliases(cwd),\n\t\tdisabledElements: computeDisabledElements(),\n\t});\n\tconst registry = dispatcher.getRegistry();\n\n\t// Autoload: watch element roots, shared-tags dirs, and cue.toml parents so\n\t// cues, tags, and aliases added mid-session work without a restart.\n\t// The registry object stays put (discover() rebuilds in place), so the\n\t// dispatcher, autocomplete provider, and /cue command all see updates.\n\t// Watches are non-recursive (Linux); re-arm after each event to pick up\n\t// newly created subdirectories. Closed on session_shutdown.\n\tlet watchers: FSWatcher[] = [];\n\tlet refreshTimer: ReturnType<typeof setTimeout> | undefined;\n\tconst closeWatchers = (): void => {\n\t\tfor (const w of watchers) {\n\t\t\ttry {\n\t\t\t\tw.close();\n\t\t\t} catch {\n\t\t\t\t// Already closed.\n\t\t\t}\n\t\t}\n\t\twatchers = [];\n\t};\n\tconst armWatchers = (): void => {\n\t\tcloseWatchers();\n\t\tfor (const dir of registry.watchedPaths(cwd)) {\n\t\t\ttry {\n\t\t\t\twatchers.push(\n\t\t\t\t\twatch(dir, { persistent: false }, () => {\n\t\t\t\t\t\tclearTimeout(refreshTimer);\n\t\t\t\t\t\trefreshTimer = setTimeout(() => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tdispatcher.refresh(computeDisabledElements());\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t// Corrupt mid-save reads fail open; next event retries.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tarmWatchers();\n\t\t\t\t\t\t}, CUE_WATCH_DEBOUNCE_MS);\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// Directory vanished between listing and watching; next re-arm covers it.\n\t\t\t}\n\t\t}\n\t};\n\tarmWatchers();\n\tion.on(\"session_shutdown\", () => {\n\t\tclearTimeout(refreshTimer);\n\t\tcloseWatchers();\n\t});\n\n\t// Session state persists across dispatches within a session\n\tconst session: SessionState = {\n\t\tmode: \"default\",\n\t\tactiveElements: new Map(),\n\t\toverrides: new Map(),\n\t\tdispatchHistory: [],\n\t};\n\n\t// Initialize harness router for `:command` handling\n\tconst harnessRouter = new HarnessRouter();\n\n\t// Register harness tools as LLM-callable tools\n\tconst harnessTools = registerHarnessTools(registry.list());\n\tfor (const tool of harnessTools) {\n\t\tion.registerTool({\n\t\t\tname: tool.name,\n\t\t\tlabel: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.input_schema as any,\n\t\t\texecute: async (_toolCallId, params) => {\n\t\t\t\t// Route to harness handler\n\t\t\t\tconst result = await harnessRouter.route(\n\t\t\t\t\t{\n\t\t\t\t\t\traw: `:${tool.name} ${JSON.stringify(params)}`,\n\t\t\t\t\t\telement: tool.name,\n\t\t\t\t\t\ttags: [],\n\t\t\t\t\t\tscope: null,\n\t\t\t\t\t\tline: 0,\n\t\t\t\t\t\tcol: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\t\tversion: \"\",\n\t\t\t\t\t\tclass: \"harness\",\n\t\t\t\t\t\thandler: `harness::${tool.name}`,\n\t\t\t\t\t\ttags: {},\n\t\t\t\t\t\tuses: [],\n\t\t\t\t\t},\n\t\t\t\t\tsession,\n\t\t\t\t);\n\t\t\t\treturn { content: [{ type: \"text\" as const, text: JSON.stringify(result) }], details: result };\n\t\t\t},\n\t\t});\n\t}\n\n\t// Cue commands can be disabled via the `enableCueCommands` setting; when off,\n\t// directives pass through literally and cue autocomplete stays silent.\n\tconst cueEnabled = (): boolean => ion.getSetting(\"enableCueCommands\") !== false;\n\n\t// Intercept user input to process Cue directives\n\tion.on(\"input\", (event) => {\n\t\tconst text = event.text;\n\t\tif (!text.trim() || !cueEnabled()) {\n\t\t\treturn { action: \"continue\" as const };\n\t\t}\n\n\t\t// Process through Cue dispatcher, passing the full prompt text for scope resolution\n\t\tconst result = dispatcher.process(text, text);\n\n\t\t// Handle harness actions (colon tier)\n\t\tif (result.harnessActions.length > 0) {\n\t\t\tfor (const action of result.harnessActions) {\n\t\t\t\tharnessRouter.route(\n\t\t\t\t\t{\n\t\t\t\t\t\traw: text,\n\t\t\t\t\t\telement: action.element,\n\t\t\t\t\t\ttags: [],\n\t\t\t\t\t\tscope: null,\n\t\t\t\t\t\tline: 0,\n\t\t\t\t\t\tcol: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: action.element,\n\t\t\t\t\t\tdescription: \"\",\n\t\t\t\t\t\tversion: \"\",\n\t\t\t\t\t\tclass: \"harness\",\n\t\t\t\t\t\thandler: action.handler,\n\t\t\t\t\t\ttags: {},\n\t\t\t\t\t\tuses: [],\n\t\t\t\t\t},\n\t\t\t\t\tsession,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { action: \"handled\" as const };\n\t\t}\n\n\t\t// If there are Cue injections, prepend them as system context.\n\t\t// Injected marks and scopes are stripped from the message; cue\n\t\t// directive text is preserved (it is part of the user's message).\n\t\t// a message that was only directives keeps its text so it isn't empty.\n\t\tif (result.injections.length > 0) {\n\t\t\tconst additionalContext = result.injections.map((inj) => inj.text).join(\"\\n\\n\");\n\t\t\tconst stripped = result.rewrittenInput ?? text;\n\t\t\tconst messageText = stripped.trim() ? stripped : text;\n\t\t\tconst warning = result.error ? `[warning: cue: ${result.error}]\\n\\n` : \"\";\n\t\t\treturn { action: \"transform\" as const, text: `${warning}${additionalContext}\\n\\n${messageText}` };\n\t\t}\n\n\t\t// Surface dispatch errors (unknown element, tag cap, malformed) instead\n\t\t// of silently passing the message through.\n\t\tif (result.error) {\n\t\t\treturn { action: \"transform\" as const, text: `[warning: cue: ${result.error}]\\n\\n${text}` };\n\t\t}\n\n\t\t// No Cue directives found, pass through\n\t\treturn { action: \"continue\" as const };\n\t});\n\n\t// Register autocomplete provider for Cue syntax\n\tion.on(\"session_start\", (_event, ctx) => {\n\t\tconst cueProvider = new CueAutocompleteProvider(registry, cwd);\n\n\t\t// Register as autocomplete provider wrapper\n\t\tctx.ui.addAutocompleteProvider((current) => {\n\t\t\t// Combine Cue provider with existing provider; when cues are disabled\n\t\t\t// every entry point delegates straight through to the existing provider\n\t\t\treturn {\n\t\t\t\ttriggerCharacters: [...(cueProvider.triggerCharacters ?? []), ...(current.triggerCharacters ?? [])],\n\t\t\t\tasync getSuggestions(lines, cursorLine, cursorCol, options) {\n\t\t\t\t\tif (!cueEnabled()) return current.getSuggestions(lines, cursorLine, cursorCol, options);\n\n\t\t\t\t\t// Try Cue provider first\n\t\t\t\t\tconst cueResult = await cueProvider.getSuggestions(lines, cursorLine, cursorCol, options);\n\t\t\t\t\tif (cueResult) return cueResult;\n\n\t\t\t\t\t// Fall back to existing provider\n\t\t\t\t\treturn current.getSuggestions(lines, cursorLine, cursorCol, options);\n\t\t\t\t},\n\t\t\t\tapplyCompletion(lines, cursorLine, cursorCol, item, prefix) {\n\t\t\t\t\t// Check if this is a Cue item\n\t\t\t\t\tif ((item as any)._cueType) {\n\t\t\t\t\t\treturn cueProvider.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t\t\t\t\t}\n\t\t\t\t\t// Fall back to existing provider\n\t\t\t\t\treturn current.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t\t\t\t},\n\t\t\t\tshouldTriggerFileCompletion(lines, cursorLine, cursorCol) {\n\t\t\t\t\tif (!cueEnabled()) return current.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? false;\n\t\t\t\t\t// Keep Tab working inside Cue contexts: an open `{@` scope\n\t\t\t\t\t// statement or an unclosed `[` directive\n\t\t\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\t\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\t\t\t\tif (/\\{@[^}]*$/.test(textBeforeCursor)) return true;\n\t\t\t\t\tif (/(?:^|\\s)\\[([A-Za-z][A-Za-z0-9_-]*)?[^\\]\\n]*$/.test(textBeforeCursor)) return true;\n\t\t\t\t\treturn current.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? false;\n\t\t\t\t},\n\t\t\t\tshouldTriggerMidWord(textBeforeCursor, char) {\n\t\t\t\t\tif (!cueEnabled()) return current.shouldTriggerMidWord?.(textBeforeCursor, char) ?? false;\n\t\t\t\t\t// Typing an alias name after `/` re-queries so cue.toml\n\t\t\t\t\t// shortcuts appear; non-matching partials fall through\n\t\t\t\t\t// to the slash-command menu via getSuggestions → null.\n\t\t\t\t\tif (/^\\s*\\/\\w+$/.test(textBeforeCursor)) return true;\n\t\t\t\t\t// Inside a cue directive's tag area every keystroke can change\n\t\t\t\t\t// suggestions: \":\" after an element opens the tag list, \">\" and\n\t\t\t\t\t// tag characters keep it updating (the default trigger rules\n\t\t\t\t\t// cannot match across the spaces in \"[answer: human > brief\").\n\t\t\t\t\tif (/\\[[A-Za-z][A-Za-z0-9_-]*:$/.test(textBeforeCursor)) return true;\n\t\t\t\t\tif (/\\[[A-Za-z][A-Za-z0-9_-]*:[^\\]\\n]*$/.test(textBeforeCursor)) {\n\t\t\t\t\t\treturn char === \">\" || /[A-Za-z0-9_\\-> ]/.test(char);\n\t\t\t\t\t}\n\t\t\t\t\treturn current.shouldTriggerMidWord?.(textBeforeCursor, char) ?? false;\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t});\n\n\t// Register /cue command for management\n\tion.registerCommand(\"cue\", {\n\t\tdescription: \"Manage Cue directives and elements\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst subcommand = args.trim().split(/\\s+/)[0];\n\n\t\t\tswitch (subcommand) {\n\t\t\t\tcase \"list\": {\n\t\t\t\t\tconst elements = registry.list();\n\t\t\t\t\tif (elements.length === 0) {\n\t\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t\t\"No Cue elements found. Add elements to ~/.ion/agent/cue/elements/ or <project>/.ion/cue/elements/\",\n\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst lines = [\"Available Cue elements:\"];\n\t\t\t\t\tfor (const el of elements) {\n\t\t\t\t\t\tconst tagNames = Object.keys(el.tags).join(\", \");\n\t\t\t\t\t\tlines.push(` [${el.name}] - ${el.description}${tagNames ? ` (tags: ${tagNames})` : \"\"}`);\n\t\t\t\t\t}\n\t\t\t\t\tctx.ui.notify(lines.join(\"\\n\"), \"info\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcase \"info\": {\n\t\t\t\t\tconst elementName = args.trim().split(/\\s+/)[1];\n\t\t\t\t\tif (!elementName) {\n\t\t\t\t\t\tctx.ui.notify(\"Usage: /cue info <element-name>\", \"warning\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst element = registry.get(elementName);\n\t\t\t\t\tif (!element) {\n\t\t\t\t\t\tctx.ui.notify(`Element '${elementName}' not found`, \"error\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst lines = [\n\t\t\t\t\t\t`Element: ${element.name}`,\n\t\t\t\t\t\t`Description: ${element.description}`,\n\t\t\t\t\t\t`Version: ${element.version}`,\n\t\t\t\t\t\t`Class: ${element.class}`,\n\t\t\t\t\t];\n\t\t\t\t\tif (element.handler) {\n\t\t\t\t\t\tlines.push(`Handler: ${element.handler}`);\n\t\t\t\t\t}\n\t\t\t\t\tif (Object.keys(element.tags).length > 0) {\n\t\t\t\t\t\tlines.push(\"Tags:\");\n\t\t\t\t\t\tfor (const [name, tag] of Object.entries(element.tags)) {\n\t\t\t\t\t\t\tlines.push(` ${name}: ${tag.description} (overrides: ${tag.overrides.join(\", \")})`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.ui.notify(lines.join(\"\\n\"), \"info\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tctx.ui.notify(\"Usage: /cue [list|info <element>]\", \"warning\");\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t});\n}\n"]}
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import { CueRegistry, cueDiscoveryRoots, cueDispatcher, HarnessRouter, registerHarnessTools } from "@m4ike1/ion-cue";
|
|
2
|
+
import { readdirSync, readFileSync, watch } from "fs";
|
|
3
|
+
import { basename, join } from "path";
|
|
4
|
+
import { CONFIG_DIR_NAME, getAgentDir } from "../../config.js";
|
|
5
|
+
import { isEnabledByOverrides } from "../../core/package-manager.js";
|
|
6
|
+
import { stripBom } from "../../utils/text.js";
|
|
7
|
+
import { CueAutocompleteProvider } from "./autocomplete.js";
|
|
8
|
+
/** Debounce for cue file watching: bursts of editor saves collapse to one refresh. */
|
|
9
|
+
const CUE_WATCH_DEBOUNCE_MS = 250;
|
|
10
|
+
/** Settings files whose `cues` arrays gate element enforcement. */
|
|
11
|
+
const settingsFileFor = (baseDir) => join(baseDir, "settings.json");
|
|
12
|
+
/** Read the `cues` override patterns from a settings file; missing/unparseable means no overrides. */
|
|
13
|
+
function readCuePatterns(settingsPath) {
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(stripBom(readFileSync(settingsPath, "utf-8")));
|
|
16
|
+
return Array.isArray(parsed.cues) ? parsed.cues : undefined;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** `.toml` files at the root and one author level down, mirroring registry discovery. */
|
|
23
|
+
function listElementTomls(root) {
|
|
24
|
+
const found = [];
|
|
25
|
+
let entries;
|
|
26
|
+
try {
|
|
27
|
+
entries = readdirSync(root, { withFileTypes: true });
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return found;
|
|
31
|
+
}
|
|
32
|
+
for (const entry of entries) {
|
|
33
|
+
if (entry.name.startsWith("."))
|
|
34
|
+
continue;
|
|
35
|
+
const full = join(root, entry.name);
|
|
36
|
+
if (entry.isFile() && entry.name.endsWith(".toml")) {
|
|
37
|
+
found.push(full);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (!entry.isDirectory())
|
|
41
|
+
continue;
|
|
42
|
+
let sub;
|
|
43
|
+
try {
|
|
44
|
+
sub = readdirSync(full, { withFileTypes: true });
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
for (const s of sub) {
|
|
50
|
+
if (s.isFile() && s.name.endsWith(".toml") && !s.name.startsWith("."))
|
|
51
|
+
found.push(join(full, s.name));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return found;
|
|
55
|
+
}
|
|
56
|
+
export default function cueExtension(ion) {
|
|
57
|
+
// Initialize Cue registry and dispatcher. Aliases from cue.toml are loaded
|
|
58
|
+
// here so /name shortcuts expand; unknown /commands pass through untouched.
|
|
59
|
+
const cwd = process.cwd();
|
|
60
|
+
// Enforcement mirrors package-manager scoping: each cue root is gated by
|
|
61
|
+
// the `cues` override patterns of its own settings file (global
|
|
62
|
+
// agentDir/settings.json, project .ion/settings.json), matched relative
|
|
63
|
+
// to the root exactly like the config UI computes them. Recomputed on
|
|
64
|
+
// every refresh so config-UI toggles apply without a restart.
|
|
65
|
+
const computeDisabledElements = () => {
|
|
66
|
+
const disabled = new Set();
|
|
67
|
+
for (const { path: root, scope } of cueDiscoveryRoots({ projectRoot: cwd })) {
|
|
68
|
+
const settingsPath = scope === "project" ? settingsFileFor(join(cwd, CONFIG_DIR_NAME)) : settingsFileFor(getAgentDir());
|
|
69
|
+
const patterns = readCuePatterns(settingsPath);
|
|
70
|
+
if (!patterns || patterns.length === 0)
|
|
71
|
+
continue;
|
|
72
|
+
for (const toml of listElementTomls(root)) {
|
|
73
|
+
if (!isEnabledByOverrides(toml, patterns, root)) {
|
|
74
|
+
disabled.add(basename(toml, ".toml").toLowerCase());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return [...disabled];
|
|
79
|
+
};
|
|
80
|
+
const dispatcher = cueDispatcher({
|
|
81
|
+
projectRoot: cwd,
|
|
82
|
+
aliases: new CueRegistry().loadAliases(cwd),
|
|
83
|
+
disabledElements: computeDisabledElements(),
|
|
84
|
+
});
|
|
85
|
+
const registry = dispatcher.getRegistry();
|
|
86
|
+
// Autoload: watch element roots, shared-tags dirs, and cue.toml parents so
|
|
87
|
+
// cues, tags, and aliases added mid-session work without a restart.
|
|
88
|
+
// The registry object stays put (discover() rebuilds in place), so the
|
|
89
|
+
// dispatcher, autocomplete provider, and /cue command all see updates.
|
|
90
|
+
// Watches are non-recursive (Linux); re-arm after each event to pick up
|
|
91
|
+
// newly created subdirectories. Closed on session_shutdown.
|
|
92
|
+
let watchers = [];
|
|
93
|
+
let refreshTimer;
|
|
94
|
+
const closeWatchers = () => {
|
|
95
|
+
for (const w of watchers) {
|
|
96
|
+
try {
|
|
97
|
+
w.close();
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// Already closed.
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
watchers = [];
|
|
104
|
+
};
|
|
105
|
+
const armWatchers = () => {
|
|
106
|
+
closeWatchers();
|
|
107
|
+
for (const dir of registry.watchedPaths(cwd)) {
|
|
108
|
+
try {
|
|
109
|
+
watchers.push(watch(dir, { persistent: false }, () => {
|
|
110
|
+
clearTimeout(refreshTimer);
|
|
111
|
+
refreshTimer = setTimeout(() => {
|
|
112
|
+
try {
|
|
113
|
+
dispatcher.refresh(computeDisabledElements());
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Corrupt mid-save reads fail open; next event retries.
|
|
117
|
+
}
|
|
118
|
+
armWatchers();
|
|
119
|
+
}, CUE_WATCH_DEBOUNCE_MS);
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Directory vanished between listing and watching; next re-arm covers it.
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
armWatchers();
|
|
128
|
+
ion.on("session_shutdown", () => {
|
|
129
|
+
clearTimeout(refreshTimer);
|
|
130
|
+
closeWatchers();
|
|
131
|
+
});
|
|
132
|
+
// Session state persists across dispatches within a session
|
|
133
|
+
const session = {
|
|
134
|
+
mode: "default",
|
|
135
|
+
activeElements: new Map(),
|
|
136
|
+
overrides: new Map(),
|
|
137
|
+
dispatchHistory: [],
|
|
138
|
+
};
|
|
139
|
+
// Initialize harness router for `:command` handling
|
|
140
|
+
const harnessRouter = new HarnessRouter();
|
|
141
|
+
// Register harness tools as LLM-callable tools
|
|
142
|
+
const harnessTools = registerHarnessTools(registry.list());
|
|
143
|
+
for (const tool of harnessTools) {
|
|
144
|
+
ion.registerTool({
|
|
145
|
+
name: tool.name,
|
|
146
|
+
label: tool.name,
|
|
147
|
+
description: tool.description,
|
|
148
|
+
parameters: tool.input_schema,
|
|
149
|
+
execute: async (_toolCallId, params) => {
|
|
150
|
+
// Route to harness handler
|
|
151
|
+
const result = await harnessRouter.route({
|
|
152
|
+
raw: `:${tool.name} ${JSON.stringify(params)}`,
|
|
153
|
+
element: tool.name,
|
|
154
|
+
tags: [],
|
|
155
|
+
scope: null,
|
|
156
|
+
line: 0,
|
|
157
|
+
col: 0,
|
|
158
|
+
}, {
|
|
159
|
+
name: tool.name,
|
|
160
|
+
description: tool.description,
|
|
161
|
+
version: "",
|
|
162
|
+
class: "harness",
|
|
163
|
+
handler: `harness::${tool.name}`,
|
|
164
|
+
tags: {},
|
|
165
|
+
uses: [],
|
|
166
|
+
}, session);
|
|
167
|
+
return { content: [{ type: "text", text: JSON.stringify(result) }], details: result };
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// Cue commands can be disabled via the `enableCueCommands` setting; when off,
|
|
172
|
+
// directives pass through literally and cue autocomplete stays silent.
|
|
173
|
+
const cueEnabled = () => ion.getSetting("enableCueCommands") !== false;
|
|
174
|
+
// Intercept user input to process Cue directives
|
|
175
|
+
ion.on("input", (event) => {
|
|
176
|
+
const text = event.text;
|
|
177
|
+
if (!text.trim() || !cueEnabled()) {
|
|
178
|
+
return { action: "continue" };
|
|
179
|
+
}
|
|
180
|
+
// Process through Cue dispatcher, passing the full prompt text for scope resolution
|
|
181
|
+
const result = dispatcher.process(text, text);
|
|
182
|
+
// Handle harness actions (colon tier)
|
|
183
|
+
if (result.harnessActions.length > 0) {
|
|
184
|
+
for (const action of result.harnessActions) {
|
|
185
|
+
harnessRouter.route({
|
|
186
|
+
raw: text,
|
|
187
|
+
element: action.element,
|
|
188
|
+
tags: [],
|
|
189
|
+
scope: null,
|
|
190
|
+
line: 0,
|
|
191
|
+
col: 0,
|
|
192
|
+
}, {
|
|
193
|
+
name: action.element,
|
|
194
|
+
description: "",
|
|
195
|
+
version: "",
|
|
196
|
+
class: "harness",
|
|
197
|
+
handler: action.handler,
|
|
198
|
+
tags: {},
|
|
199
|
+
uses: [],
|
|
200
|
+
}, session);
|
|
201
|
+
}
|
|
202
|
+
return { action: "handled" };
|
|
203
|
+
}
|
|
204
|
+
// If there are Cue injections, prepend them as system context.
|
|
205
|
+
// Injected marks and scopes are stripped from the message; cue
|
|
206
|
+
// directive text is preserved (it is part of the user's message).
|
|
207
|
+
// a message that was only directives keeps its text so it isn't empty.
|
|
208
|
+
if (result.injections.length > 0) {
|
|
209
|
+
const additionalContext = result.injections.map((inj) => inj.text).join("\n\n");
|
|
210
|
+
const stripped = result.rewrittenInput ?? text;
|
|
211
|
+
const messageText = stripped.trim() ? stripped : text;
|
|
212
|
+
const warning = result.error ? `[warning: cue: ${result.error}]\n\n` : "";
|
|
213
|
+
return { action: "transform", text: `${warning}${additionalContext}\n\n${messageText}` };
|
|
214
|
+
}
|
|
215
|
+
// Surface dispatch errors (unknown element, tag cap, malformed) instead
|
|
216
|
+
// of silently passing the message through.
|
|
217
|
+
if (result.error) {
|
|
218
|
+
return { action: "transform", text: `[warning: cue: ${result.error}]\n\n${text}` };
|
|
219
|
+
}
|
|
220
|
+
// No Cue directives found, pass through
|
|
221
|
+
return { action: "continue" };
|
|
222
|
+
});
|
|
223
|
+
// Register autocomplete provider for Cue syntax
|
|
224
|
+
ion.on("session_start", (_event, ctx) => {
|
|
225
|
+
const cueProvider = new CueAutocompleteProvider(registry, cwd);
|
|
226
|
+
// Register as autocomplete provider wrapper
|
|
227
|
+
ctx.ui.addAutocompleteProvider((current) => {
|
|
228
|
+
// Combine Cue provider with existing provider; when cues are disabled
|
|
229
|
+
// every entry point delegates straight through to the existing provider
|
|
230
|
+
return {
|
|
231
|
+
triggerCharacters: [...(cueProvider.triggerCharacters ?? []), ...(current.triggerCharacters ?? [])],
|
|
232
|
+
async getSuggestions(lines, cursorLine, cursorCol, options) {
|
|
233
|
+
if (!cueEnabled())
|
|
234
|
+
return current.getSuggestions(lines, cursorLine, cursorCol, options);
|
|
235
|
+
// Try Cue provider first
|
|
236
|
+
const cueResult = await cueProvider.getSuggestions(lines, cursorLine, cursorCol, options);
|
|
237
|
+
if (cueResult)
|
|
238
|
+
return cueResult;
|
|
239
|
+
// Fall back to existing provider
|
|
240
|
+
return current.getSuggestions(lines, cursorLine, cursorCol, options);
|
|
241
|
+
},
|
|
242
|
+
applyCompletion(lines, cursorLine, cursorCol, item, prefix) {
|
|
243
|
+
// Check if this is a Cue item
|
|
244
|
+
if (item._cueType) {
|
|
245
|
+
return cueProvider.applyCompletion(lines, cursorLine, cursorCol, item, prefix);
|
|
246
|
+
}
|
|
247
|
+
// Fall back to existing provider
|
|
248
|
+
return current.applyCompletion(lines, cursorLine, cursorCol, item, prefix);
|
|
249
|
+
},
|
|
250
|
+
shouldTriggerFileCompletion(lines, cursorLine, cursorCol) {
|
|
251
|
+
if (!cueEnabled())
|
|
252
|
+
return current.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? false;
|
|
253
|
+
// Keep Tab working inside Cue contexts: an open `{@` scope
|
|
254
|
+
// statement or an unclosed `[` directive
|
|
255
|
+
const currentLine = lines[cursorLine] || "";
|
|
256
|
+
const textBeforeCursor = currentLine.slice(0, cursorCol);
|
|
257
|
+
if (/\{@[^}]*$/.test(textBeforeCursor))
|
|
258
|
+
return true;
|
|
259
|
+
if (/(?:^|\s)\[([A-Za-z][A-Za-z0-9_-]*)?[^\]\n]*$/.test(textBeforeCursor))
|
|
260
|
+
return true;
|
|
261
|
+
return current.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? false;
|
|
262
|
+
},
|
|
263
|
+
shouldTriggerMidWord(textBeforeCursor, char) {
|
|
264
|
+
if (!cueEnabled())
|
|
265
|
+
return current.shouldTriggerMidWord?.(textBeforeCursor, char) ?? false;
|
|
266
|
+
// Typing an alias name after `/` re-queries so cue.toml
|
|
267
|
+
// shortcuts appear; non-matching partials fall through
|
|
268
|
+
// to the slash-command menu via getSuggestions → null.
|
|
269
|
+
if (/^\s*\/\w+$/.test(textBeforeCursor))
|
|
270
|
+
return true;
|
|
271
|
+
// Inside a cue directive's tag area every keystroke can change
|
|
272
|
+
// suggestions: ":" after an element opens the tag list, ">" and
|
|
273
|
+
// tag characters keep it updating (the default trigger rules
|
|
274
|
+
// cannot match across the spaces in "[answer: human > brief").
|
|
275
|
+
if (/\[[A-Za-z][A-Za-z0-9_-]*:$/.test(textBeforeCursor))
|
|
276
|
+
return true;
|
|
277
|
+
if (/\[[A-Za-z][A-Za-z0-9_-]*:[^\]\n]*$/.test(textBeforeCursor)) {
|
|
278
|
+
return char === ">" || /[A-Za-z0-9_\-> ]/.test(char);
|
|
279
|
+
}
|
|
280
|
+
return current.shouldTriggerMidWord?.(textBeforeCursor, char) ?? false;
|
|
281
|
+
},
|
|
282
|
+
};
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
// Register /cue command for management
|
|
286
|
+
ion.registerCommand("cue", {
|
|
287
|
+
description: "Manage Cue directives and elements",
|
|
288
|
+
handler: async (args, ctx) => {
|
|
289
|
+
const subcommand = args.trim().split(/\s+/)[0];
|
|
290
|
+
switch (subcommand) {
|
|
291
|
+
case "list": {
|
|
292
|
+
const elements = registry.list();
|
|
293
|
+
if (elements.length === 0) {
|
|
294
|
+
ctx.ui.notify("No Cue elements found. Add elements to ~/.ion/agent/cue/elements/ or <project>/.ion/cue/elements/", "info");
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
const lines = ["Available Cue elements:"];
|
|
298
|
+
for (const el of elements) {
|
|
299
|
+
const tagNames = Object.keys(el.tags).join(", ");
|
|
300
|
+
lines.push(` [${el.name}] - ${el.description}${tagNames ? ` (tags: ${tagNames})` : ""}`);
|
|
301
|
+
}
|
|
302
|
+
ctx.ui.notify(lines.join("\n"), "info");
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
case "info": {
|
|
306
|
+
const elementName = args.trim().split(/\s+/)[1];
|
|
307
|
+
if (!elementName) {
|
|
308
|
+
ctx.ui.notify("Usage: /cue info <element-name>", "warning");
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const element = registry.get(elementName);
|
|
312
|
+
if (!element) {
|
|
313
|
+
ctx.ui.notify(`Element '${elementName}' not found`, "error");
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
const lines = [
|
|
317
|
+
`Element: ${element.name}`,
|
|
318
|
+
`Description: ${element.description}`,
|
|
319
|
+
`Version: ${element.version}`,
|
|
320
|
+
`Class: ${element.class}`,
|
|
321
|
+
];
|
|
322
|
+
if (element.handler) {
|
|
323
|
+
lines.push(`Handler: ${element.handler}`);
|
|
324
|
+
}
|
|
325
|
+
if (Object.keys(element.tags).length > 0) {
|
|
326
|
+
lines.push("Tags:");
|
|
327
|
+
for (const [name, tag] of Object.entries(element.tags)) {
|
|
328
|
+
lines.push(` ${name}: ${tag.description} (overrides: ${tag.overrides.join(", ")})`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
ctx.ui.notify(lines.join("\n"), "info");
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
default:
|
|
335
|
+
ctx.ui.notify("Usage: /cue [list|info <element>]", "warning");
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/cue/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SessionState } from \"@m4ike1/ion-cue\";\nimport { CueRegistry, cueDiscoveryRoots, cueDispatcher, HarnessRouter, registerHarnessTools } from \"@m4ike1/ion-cue\";\nimport { type FSWatcher, readdirSync, readFileSync, watch } from \"fs\";\nimport { basename, join } from \"path\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport type { ExtensionAPI } from \"../../core/extensions/types.ts\";\nimport { isEnabledByOverrides } from \"../../core/package-manager.ts\";\nimport { stripBom } from \"../../utils/text.ts\";\nimport { CueAutocompleteProvider } from \"./autocomplete.ts\";\n\n/** Debounce for cue file watching: bursts of editor saves collapse to one refresh. */\nconst CUE_WATCH_DEBOUNCE_MS = 250;\n\n/** Settings files whose `cues` arrays gate element enforcement. */\nconst settingsFileFor = (baseDir: string): string => join(baseDir, \"settings.json\");\n\n/** Read the `cues` override patterns from a settings file; missing/unparseable means no overrides. */\nfunction readCuePatterns(settingsPath: string): string[] | undefined {\n\ttry {\n\t\tconst parsed = JSON.parse(stripBom(readFileSync(settingsPath, \"utf-8\"))) as { cues?: unknown };\n\t\treturn Array.isArray(parsed.cues) ? (parsed.cues as string[]) : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** `.toml` files at the root and one author level down, mirroring registry discovery. */\nfunction listElementTomls(root: string): string[] {\n\tconst found: string[] = [];\n\tlet entries: Array<{ name: string; isDirectory(): boolean; isFile(): boolean }>;\n\ttry {\n\t\tentries = readdirSync(root, { withFileTypes: true });\n\t} catch {\n\t\treturn found;\n\t}\n\tfor (const entry of entries) {\n\t\tif (entry.name.startsWith(\".\")) continue;\n\t\tconst full = join(root, entry.name);\n\t\tif (entry.isFile() && entry.name.endsWith(\".toml\")) {\n\t\t\tfound.push(full);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!entry.isDirectory()) continue;\n\t\tlet sub: typeof entries;\n\t\ttry {\n\t\t\tsub = readdirSync(full, { withFileTypes: true });\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const s of sub) {\n\t\t\tif (s.isFile() && s.name.endsWith(\".toml\") && !s.name.startsWith(\".\")) found.push(join(full, s.name));\n\t\t}\n\t}\n\treturn found;\n}\n\nexport default function cueExtension(ion: ExtensionAPI): void {\n\t// Initialize Cue registry and dispatcher. Aliases from cue.toml are loaded\n\t// here so /name shortcuts expand; unknown /commands pass through untouched.\n\tconst cwd = process.cwd();\n\t// Enforcement mirrors package-manager scoping: each cue root is gated by\n\t// the `cues` override patterns of its own settings file (global\n\t// agentDir/settings.json, project .ion/settings.json), matched relative\n\t// to the root exactly like the config UI computes them. Recomputed on\n\t// every refresh so config-UI toggles apply without a restart.\n\tconst computeDisabledElements = (): string[] => {\n\t\tconst disabled = new Set<string>();\n\t\tfor (const { path: root, scope } of cueDiscoveryRoots({ projectRoot: cwd })) {\n\t\t\tconst settingsPath =\n\t\t\t\tscope === \"project\" ? settingsFileFor(join(cwd, CONFIG_DIR_NAME)) : settingsFileFor(getAgentDir());\n\t\t\tconst patterns = readCuePatterns(settingsPath);\n\t\t\tif (!patterns || patterns.length === 0) continue;\n\t\t\tfor (const toml of listElementTomls(root)) {\n\t\t\t\tif (!isEnabledByOverrides(toml, patterns, root)) {\n\t\t\t\t\tdisabled.add(basename(toml, \".toml\").toLowerCase());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...disabled];\n\t};\n\tconst dispatcher = cueDispatcher({\n\t\tprojectRoot: cwd,\n\t\taliases: new CueRegistry().loadAliases(cwd),\n\t\tdisabledElements: computeDisabledElements(),\n\t});\n\tconst registry = dispatcher.getRegistry();\n\n\t// Autoload: watch element roots, shared-tags dirs, and cue.toml parents so\n\t// cues, tags, and aliases added mid-session work without a restart.\n\t// The registry object stays put (discover() rebuilds in place), so the\n\t// dispatcher, autocomplete provider, and /cue command all see updates.\n\t// Watches are non-recursive (Linux); re-arm after each event to pick up\n\t// newly created subdirectories. Closed on session_shutdown.\n\tlet watchers: FSWatcher[] = [];\n\tlet refreshTimer: ReturnType<typeof setTimeout> | undefined;\n\tconst closeWatchers = (): void => {\n\t\tfor (const w of watchers) {\n\t\t\ttry {\n\t\t\t\tw.close();\n\t\t\t} catch {\n\t\t\t\t// Already closed.\n\t\t\t}\n\t\t}\n\t\twatchers = [];\n\t};\n\tconst armWatchers = (): void => {\n\t\tcloseWatchers();\n\t\tfor (const dir of registry.watchedPaths(cwd)) {\n\t\t\ttry {\n\t\t\t\twatchers.push(\n\t\t\t\t\twatch(dir, { persistent: false }, () => {\n\t\t\t\t\t\tclearTimeout(refreshTimer);\n\t\t\t\t\t\trefreshTimer = setTimeout(() => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tdispatcher.refresh(computeDisabledElements());\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t// Corrupt mid-save reads fail open; next event retries.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tarmWatchers();\n\t\t\t\t\t\t}, CUE_WATCH_DEBOUNCE_MS);\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// Directory vanished between listing and watching; next re-arm covers it.\n\t\t\t}\n\t\t}\n\t};\n\tarmWatchers();\n\tion.on(\"session_shutdown\", () => {\n\t\tclearTimeout(refreshTimer);\n\t\tcloseWatchers();\n\t});\n\n\t// Session state persists across dispatches within a session\n\tconst session: SessionState = {\n\t\tmode: \"default\",\n\t\tactiveElements: new Map(),\n\t\toverrides: new Map(),\n\t\tdispatchHistory: [],\n\t};\n\n\t// Initialize harness router for `:command` handling\n\tconst harnessRouter = new HarnessRouter();\n\n\t// Register harness tools as LLM-callable tools\n\tconst harnessTools = registerHarnessTools(registry.list());\n\tfor (const tool of harnessTools) {\n\t\tion.registerTool({\n\t\t\tname: tool.name,\n\t\t\tlabel: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.input_schema as any,\n\t\t\texecute: async (_toolCallId, params) => {\n\t\t\t\t// Route to harness handler\n\t\t\t\tconst result = await harnessRouter.route(\n\t\t\t\t\t{\n\t\t\t\t\t\traw: `:${tool.name} ${JSON.stringify(params)}`,\n\t\t\t\t\t\telement: tool.name,\n\t\t\t\t\t\ttags: [],\n\t\t\t\t\t\tscope: null,\n\t\t\t\t\t\tline: 0,\n\t\t\t\t\t\tcol: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\t\tversion: \"\",\n\t\t\t\t\t\tclass: \"harness\",\n\t\t\t\t\t\thandler: `harness::${tool.name}`,\n\t\t\t\t\t\ttags: {},\n\t\t\t\t\t\tuses: [],\n\t\t\t\t\t},\n\t\t\t\t\tsession,\n\t\t\t\t);\n\t\t\t\treturn { content: [{ type: \"text\" as const, text: JSON.stringify(result) }], details: result };\n\t\t\t},\n\t\t});\n\t}\n\n\t// Cue commands can be disabled via the `enableCueCommands` setting; when off,\n\t// directives pass through literally and cue autocomplete stays silent.\n\tconst cueEnabled = (): boolean => ion.getSetting(\"enableCueCommands\") !== false;\n\n\t// Intercept user input to process Cue directives\n\tion.on(\"input\", (event) => {\n\t\tconst text = event.text;\n\t\tif (!text.trim() || !cueEnabled()) {\n\t\t\treturn { action: \"continue\" as const };\n\t\t}\n\n\t\t// Process through Cue dispatcher, passing the full prompt text for scope resolution\n\t\tconst result = dispatcher.process(text, text);\n\n\t\t// Handle harness actions (colon tier)\n\t\tif (result.harnessActions.length > 0) {\n\t\t\tfor (const action of result.harnessActions) {\n\t\t\t\tharnessRouter.route(\n\t\t\t\t\t{\n\t\t\t\t\t\traw: text,\n\t\t\t\t\t\telement: action.element,\n\t\t\t\t\t\ttags: [],\n\t\t\t\t\t\tscope: null,\n\t\t\t\t\t\tline: 0,\n\t\t\t\t\t\tcol: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: action.element,\n\t\t\t\t\t\tdescription: \"\",\n\t\t\t\t\t\tversion: \"\",\n\t\t\t\t\t\tclass: \"harness\",\n\t\t\t\t\t\thandler: action.handler,\n\t\t\t\t\t\ttags: {},\n\t\t\t\t\t\tuses: [],\n\t\t\t\t\t},\n\t\t\t\t\tsession,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { action: \"handled\" as const };\n\t\t}\n\n\t\t// If there are Cue injections, prepend them as system context.\n\t\t// Injected marks and scopes are stripped from the message; cue\n\t\t// directive text is preserved (it is part of the user's message).\n\t\t// a message that was only directives keeps its text so it isn't empty.\n\t\tif (result.injections.length > 0) {\n\t\t\tconst additionalContext = result.injections.map((inj) => inj.text).join(\"\\n\\n\");\n\t\t\tconst stripped = result.rewrittenInput ?? text;\n\t\t\tconst messageText = stripped.trim() ? stripped : text;\n\t\t\tconst warning = result.error ? `[warning: cue: ${result.error}]\\n\\n` : \"\";\n\t\t\treturn { action: \"transform\" as const, text: `${warning}${additionalContext}\\n\\n${messageText}` };\n\t\t}\n\n\t\t// Surface dispatch errors (unknown element, tag cap, malformed) instead\n\t\t// of silently passing the message through.\n\t\tif (result.error) {\n\t\t\treturn { action: \"transform\" as const, text: `[warning: cue: ${result.error}]\\n\\n${text}` };\n\t\t}\n\n\t\t// No Cue directives found, pass through\n\t\treturn { action: \"continue\" as const };\n\t});\n\n\t// Register autocomplete provider for Cue syntax\n\tion.on(\"session_start\", (_event, ctx) => {\n\t\tconst cueProvider = new CueAutocompleteProvider(registry, cwd);\n\n\t\t// Register as autocomplete provider wrapper\n\t\tctx.ui.addAutocompleteProvider((current) => {\n\t\t\t// Combine Cue provider with existing provider; when cues are disabled\n\t\t\t// every entry point delegates straight through to the existing provider\n\t\t\treturn {\n\t\t\t\ttriggerCharacters: [...(cueProvider.triggerCharacters ?? []), ...(current.triggerCharacters ?? [])],\n\t\t\t\tasync getSuggestions(lines, cursorLine, cursorCol, options) {\n\t\t\t\t\tif (!cueEnabled()) return current.getSuggestions(lines, cursorLine, cursorCol, options);\n\n\t\t\t\t\t// Try Cue provider first\n\t\t\t\t\tconst cueResult = await cueProvider.getSuggestions(lines, cursorLine, cursorCol, options);\n\t\t\t\t\tif (cueResult) return cueResult;\n\n\t\t\t\t\t// Fall back to existing provider\n\t\t\t\t\treturn current.getSuggestions(lines, cursorLine, cursorCol, options);\n\t\t\t\t},\n\t\t\t\tapplyCompletion(lines, cursorLine, cursorCol, item, prefix) {\n\t\t\t\t\t// Check if this is a Cue item\n\t\t\t\t\tif ((item as any)._cueType) {\n\t\t\t\t\t\treturn cueProvider.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t\t\t\t\t}\n\t\t\t\t\t// Fall back to existing provider\n\t\t\t\t\treturn current.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t\t\t\t},\n\t\t\t\tshouldTriggerFileCompletion(lines, cursorLine, cursorCol) {\n\t\t\t\t\tif (!cueEnabled()) return current.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? false;\n\t\t\t\t\t// Keep Tab working inside Cue contexts: an open `{@` scope\n\t\t\t\t\t// statement or an unclosed `[` directive\n\t\t\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\t\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\t\t\t\tif (/\\{@[^}]*$/.test(textBeforeCursor)) return true;\n\t\t\t\t\tif (/(?:^|\\s)\\[([A-Za-z][A-Za-z0-9_-]*)?[^\\]\\n]*$/.test(textBeforeCursor)) return true;\n\t\t\t\t\treturn current.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? false;\n\t\t\t\t},\n\t\t\t\tshouldTriggerMidWord(textBeforeCursor, char) {\n\t\t\t\t\tif (!cueEnabled()) return current.shouldTriggerMidWord?.(textBeforeCursor, char) ?? false;\n\t\t\t\t\t// Typing an alias name after `/` re-queries so cue.toml\n\t\t\t\t\t// shortcuts appear; non-matching partials fall through\n\t\t\t\t\t// to the slash-command menu via getSuggestions → null.\n\t\t\t\t\tif (/^\\s*\\/\\w+$/.test(textBeforeCursor)) return true;\n\t\t\t\t\t// Inside a cue directive's tag area every keystroke can change\n\t\t\t\t\t// suggestions: \":\" after an element opens the tag list, \">\" and\n\t\t\t\t\t// tag characters keep it updating (the default trigger rules\n\t\t\t\t\t// cannot match across the spaces in \"[answer: human > brief\").\n\t\t\t\t\tif (/\\[[A-Za-z][A-Za-z0-9_-]*:$/.test(textBeforeCursor)) return true;\n\t\t\t\t\tif (/\\[[A-Za-z][A-Za-z0-9_-]*:[^\\]\\n]*$/.test(textBeforeCursor)) {\n\t\t\t\t\t\treturn char === \">\" || /[A-Za-z0-9_\\-> ]/.test(char);\n\t\t\t\t\t}\n\t\t\t\t\treturn current.shouldTriggerMidWord?.(textBeforeCursor, char) ?? false;\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t});\n\n\t// Register /cue command for management\n\tion.registerCommand(\"cue\", {\n\t\tdescription: \"Manage Cue directives and elements\",\n\t\thandler: async (args, ctx) => {\n\t\t\tconst subcommand = args.trim().split(/\\s+/)[0];\n\n\t\t\tswitch (subcommand) {\n\t\t\t\tcase \"list\": {\n\t\t\t\t\tconst elements = registry.list();\n\t\t\t\t\tif (elements.length === 0) {\n\t\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t\t\"No Cue elements found. Add elements to ~/.ion/agent/cue/elements/ or <project>/.ion/cue/elements/\",\n\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst lines = [\"Available Cue elements:\"];\n\t\t\t\t\tfor (const el of elements) {\n\t\t\t\t\t\tconst tagNames = Object.keys(el.tags).join(\", \");\n\t\t\t\t\t\tlines.push(` [${el.name}] - ${el.description}${tagNames ? ` (tags: ${tagNames})` : \"\"}`);\n\t\t\t\t\t}\n\t\t\t\t\tctx.ui.notify(lines.join(\"\\n\"), \"info\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcase \"info\": {\n\t\t\t\t\tconst elementName = args.trim().split(/\\s+/)[1];\n\t\t\t\t\tif (!elementName) {\n\t\t\t\t\t\tctx.ui.notify(\"Usage: /cue info <element-name>\", \"warning\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst element = registry.get(elementName);\n\t\t\t\t\tif (!element) {\n\t\t\t\t\t\tctx.ui.notify(`Element '${elementName}' not found`, \"error\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst lines = [\n\t\t\t\t\t\t`Element: ${element.name}`,\n\t\t\t\t\t\t`Description: ${element.description}`,\n\t\t\t\t\t\t`Version: ${element.version}`,\n\t\t\t\t\t\t`Class: ${element.class}`,\n\t\t\t\t\t];\n\t\t\t\t\tif (element.handler) {\n\t\t\t\t\t\tlines.push(`Handler: ${element.handler}`);\n\t\t\t\t\t}\n\t\t\t\t\tif (Object.keys(element.tags).length > 0) {\n\t\t\t\t\t\tlines.push(\"Tags:\");\n\t\t\t\t\t\tfor (const [name, tag] of Object.entries(element.tags)) {\n\t\t\t\t\t\t\tlines.push(` ${name}: ${tag.description} (overrides: ${tag.overrides.join(\", \")})`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.ui.notify(lines.join(\"\\n\"), \"info\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tctx.ui.notify(\"Usage: /cue [list|info <element>]\", \"warning\");\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t});\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { InlineExtension } from "../core/extensions/types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Absolute path of the built-in cue extension entry point.
|
|
4
|
+
*
|
|
5
|
+
* In source runs, main() loads the cue extension through the path-based (jiti)
|
|
6
|
+
* extension loader instead of the inline factory, so `:reload` re-imports
|
|
7
|
+
* changed code. The compiled binary has no source file on disk and keeps the
|
|
8
|
+
* inline factory (its code is fixed per build; reload still recreates the
|
|
9
|
+
* dispatcher and registry for `.cue` config changes).
|
|
10
|
+
*/
|
|
11
|
+
export declare const cueExtensionPath: string;
|
|
12
|
+
export declare const builtInExtensions: InlineExtension[];
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,QAA4D,CAAC;AAE1F,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAG9C,CAAC","sourcesContent":["import { fileURLToPath } from \"node:url\";\nimport type { InlineExtension } from \"../core/extensions/types.ts\";\nimport cueExtension from \"./cue/index.ts\";\nimport llamaExtension from \"./llama/index.ts\";\n\n/**\n * Absolute path of the built-in cue extension entry point.\n *\n * In source runs, main() loads the cue extension through the path-based (jiti)\n * extension loader instead of the inline factory, so `:reload` re-imports\n * changed code. The compiled binary has no source file on disk and keeps the\n * inline factory (its code is fixed per build; reload still recreates the\n * dispatcher and registry for `.cue` config changes).\n */\nexport const cueExtensionPath = fileURLToPath(new URL(\"./cue/index.ts\", import.meta.url));\n\nexport const builtInExtensions: InlineExtension[] = [\n\t{ name: \"llama.cpp\", factory: llamaExtension, hidden: true },\n\t{ name: \"cue\", factory: cueExtension },\n];\n"]}
|