@relay-harness/coding-agent 0.0.0-stage → 1.0.3
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 +6122 -0
- package/LICENSE +22 -0
- package/README.md +79 -2
- 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 +12 -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-TXWUAW5N.js +6 -0
- package/dist/bundle/chunks/anthropic.js +75 -0
- package/dist/bundle/chunks/azure-openai-responses-EJG46ESA.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +83 -0
- package/dist/bundle/chunks/chunk-3QND5D7W.js +82 -0
- package/dist/bundle/chunks/chunk-3XNI2SB6.js +15 -0
- package/dist/bundle/chunks/chunk-4L3WN2XY.js +2 -0
- package/dist/bundle/chunks/chunk-5H4IRYOE.js +1791 -0
- package/dist/bundle/chunks/chunk-6CYCI3EJ.js +12 -0
- package/dist/bundle/chunks/chunk-7ZC4UXSL.js +2 -0
- package/dist/bundle/chunks/chunk-A3JYRWB6.js +2 -0
- package/dist/bundle/chunks/chunk-C47CLQZK.js +2 -0
- package/dist/bundle/chunks/chunk-DRQDKNXA.js +2 -0
- package/dist/bundle/chunks/chunk-EQ2HXQGJ.js +2 -0
- package/dist/bundle/chunks/chunk-F5ZABL6Z.js +20 -0
- package/dist/bundle/chunks/chunk-H3QXYIF7.js +31 -0
- package/dist/bundle/chunks/chunk-ISNO4JTR.js +127 -0
- package/dist/bundle/chunks/chunk-KJUDFE6Y.js +11 -0
- package/dist/bundle/chunks/chunk-L2ZPNLYD.js +2 -0
- package/dist/bundle/chunks/chunk-LD2P6SFZ.js +2 -0
- package/dist/bundle/chunks/chunk-MP5FU7MG.js +20 -0
- package/dist/bundle/chunks/chunk-NS67SA75.js +2 -0
- package/dist/bundle/chunks/chunk-O7R77OAK.js +2 -0
- package/dist/bundle/chunks/chunk-PGXDEOVV.js +2 -0
- package/dist/bundle/chunks/chunk-PJACZCIR.js +2 -0
- package/dist/bundle/chunks/chunk-PRRNXB7S.js +2 -0
- package/dist/bundle/chunks/chunk-PTRF7IZB.js +2 -0
- package/dist/bundle/chunks/chunk-RZ4KG4BP.js +44 -0
- package/dist/bundle/chunks/chunk-S3GGRYIO.js +6 -0
- package/dist/bundle/chunks/chunk-TEPMHNKQ.js +2 -0
- package/dist/bundle/chunks/chunk-TRDNDS6A.js +4 -0
- package/dist/bundle/chunks/chunk-USJZMAIR.js +2 -0
- package/dist/bundle/chunks/chunk-UTB4DTYQ.js +2 -0
- package/dist/bundle/chunks/chunk-WMTXXI7H.js +4 -0
- package/dist/bundle/chunks/chunk-XDAWU2J5.js +132 -0
- package/dist/bundle/chunks/chunk-Z2G7KLPH.js +11 -0
- package/dist/bundle/chunks/cli-K4CNHWOI.js +51 -0
- package/dist/bundle/chunks/cloudflare-workers-ai-system-one-NM3JRRWQ.js +2 -0
- package/dist/bundle/chunks/codemode-worker.js +374 -0
- package/dist/bundle/chunks/easter-egg-3d-TGRCIHA4.js +2 -0
- package/dist/bundle/chunks/execute-6E5DA2QI.js +388 -0
- package/dist/bundle/chunks/github-copilot.js +2 -0
- package/dist/bundle/chunks/google-generative-ai-HYUNEOCJ.js +2 -0
- package/dist/bundle/chunks/google-vertex-J7MDGTNM.js +2 -0
- package/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +13 -0
- package/dist/bundle/chunks/image-resize-worker.js +2 -0
- package/dist/bundle/chunks/jiti-loader-C3NU2SDH.js +21 -0
- package/dist/bundle/chunks/jiti-static-loader-E6ANQD5T.js +2 -0
- package/dist/bundle/chunks/kimi-coding.js +2 -0
- package/dist/bundle/chunks/lib-TEDK3E5I.js +9 -0
- package/dist/bundle/chunks/llama-cpp-classify-XT44PI3C.js +22 -0
- package/dist/bundle/chunks/meta.js +2 -0
- package/dist/bundle/chunks/mistral-conversations-UD2HHXKZ.js +5 -0
- package/dist/bundle/chunks/multipart-parser-SQ6GDJL7.js +3 -0
- package/dist/bundle/chunks/node-N5BSDOA5.js +16 -0
- package/dist/bundle/chunks/node-TWVVAGPO.js +2 -0
- package/dist/bundle/chunks/openai-chatgpt.js +75 -0
- package/dist/bundle/chunks/openai-codex-responses-EMHXEJR4.js +10 -0
- package/dist/bundle/chunks/openai-codex.js +75 -0
- package/dist/bundle/chunks/openai-completions-LPKRZYMC.js +7 -0
- package/dist/bundle/chunks/openai-responses-TOOBRHUV.js +3 -0
- package/dist/bundle/chunks/openrouter-images-ZVXWCSIM.js +2 -0
- package/dist/bundle/chunks/openrouter.js +75 -0
- package/dist/bundle/chunks/relay-messages-QRFJXG5X.js +8 -0
- package/dist/bundle/chunks/runtime-O5HLCH3V.js +2 -0
- package/dist/bundle/chunks/src-UK77SYZE.js +4 -0
- package/dist/bundle/chunks/typesafe-system-one-PRR5K6CI.js +2 -0
- package/dist/bundle/chunks/virtual-modules-ZGB2J7DY.js +2 -0
- package/dist/bundle/chunks/xai.js +2 -0
- package/dist/bundle/cli-runtime.js +3 -0
- package/dist/bundle/cli.js +5 -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 +454 -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 +193 -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 +108 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +264 -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 +147 -0
- package/dist/core/agent-session-services.js.map +1 -0
- package/dist/core/agent-session.d.ts +891 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +3553 -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 +106 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/bug-report.d.ts +176 -0
- package/dist/core/bug-report.d.ts.map +1 -0
- package/dist/core/bug-report.js +292 -0
- package/dist/core/bug-report.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 +112 -0
- package/dist/core/cache-stats.js.map +1 -0
- package/dist/core/cache-warmer.d.ts +103 -0
- package/dist/core/cache-warmer.d.ts.map +1 -0
- package/dist/core/cache-warmer.js +356 -0
- package/dist/core/cache-warmer.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 +744 -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 +39 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +149 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/crash-log.d.ts +27 -0
- package/dist/core/crash-log.d.ts.map +1 -0
- package/dist/core/crash-log.js +140 -0
- package/dist/core/crash-log.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 +1076 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1918 -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/jiti-loader.d.ts +2 -0
- package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
- package/dist/core/extensions/jiti-loader.js +4 -0
- package/dist/core/extensions/jiti-loader.js.map +1 -0
- package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
- package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
- package/dist/core/extensions/jiti-static-loader.js +4 -0
- package/dist/core/extensions/jiti-static-loader.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 +701 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +213 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +1239 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1720 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +48 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/virtual-modules.d.ts +3 -0
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/virtual-modules.js +38 -0
- package/dist/core/extensions/virtual-modules.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +22 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +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/harness-core.d.ts +50 -0
- package/dist/core/harness-core.d.ts.map +1 -0
- package/dist/core/harness-core.js +240 -0
- package/dist/core/harness-core.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 +14 -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/keybindings.d.ts +428 -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/mcp-servers.d.ts +125 -0
- package/dist/core/mcp-servers.d.ts.map +1 -0
- package/dist/core/mcp-servers.js +198 -0
- package/dist/core/mcp-servers.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 +124 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-config.d.ts +759 -0
- package/dist/core/model-config.d.ts.map +1 -0
- package/dist/core/model-config.js +293 -0
- package/dist/core/model-config.js.map +1 -0
- package/dist/core/model-registry.d.ts +63 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +144 -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 +589 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/model-runtime.d.ts +142 -0
- package/dist/core/model-runtime.d.ts.map +1 -0
- package/dist/core/model-runtime.js +732 -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/nested-tool-calls.d.ts +102 -0
- package/dist/core/nested-tool-calls.d.ts.map +1 -0
- package/dist/core/nested-tool-calls.js +178 -0
- package/dist/core/nested-tool-calls.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 +217 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +2224 -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 +59 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +262 -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 +80 -0
- package/dist/core/provider-composer.d.ts.map +1 -0
- package/dist/core/provider-composer.js +484 -0
- package/dist/core/provider-composer.js.map +1 -0
- package/dist/core/relay-manifest.d.ts +8 -0
- package/dist/core/relay-manifest.d.ts.map +1 -0
- package/dist/core/relay-manifest.js +26 -0
- package/dist/core/relay-manifest.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 +227 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +1005 -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 +315 -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 +8 -0
- package/dist/core/session-export.d.ts.map +1 -0
- package/dist/core/session-export.js +33 -0
- package/dist/core/session-export.js.map +1 -0
- package/dist/core/session-manager.d.ts +416 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1523 -0
- package/dist/core/session-manager.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 +423 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +1120 -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 +408 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +29 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/source-info.d.ts +26 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +35 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/system-prompt.d.ts +71 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +147 -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 +100 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +333 -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 +41 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +252 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +43 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +129 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +41 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +126 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts +63 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +214 -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 +42 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +169 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +30 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +91 -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 +117 -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 +28 -0
- package/dist/core/tools/renderers/index.d.ts.map +1 -0
- package/dist/core/tools/renderers/index.js +47 -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 +58 -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 +130 -0
- package/dist/core/tools/renderers/read.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 +16 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +38 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +84 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +244 -0
- package/dist/core/tools/truncate.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 +204 -0
- package/dist/core/trust-manager.js.map +1 -0
- package/dist/core/usage-totals.d.ts +21 -0
- package/dist/core/usage-totals.d.ts.map +1 -0
- package/dist/core/usage-totals.js +79 -0
- package/dist/core/usage-totals.js.map +1 -0
- package/dist/core/virtual-models.d.ts +117 -0
- package/dist/core/virtual-models.d.ts.map +1 -0
- package/dist/core/virtual-models.js +124 -0
- package/dist/core/virtual-models.js.map +1 -0
- package/dist/core/workspace-probe.d.ts +8 -0
- package/dist/core/workspace-probe.d.ts.map +1 -0
- package/dist/core/workspace-probe.js +65 -0
- package/dist/core/workspace-probe.js.map +1 -0
- package/dist/extensions/codemode/execute.d.ts +16 -0
- package/dist/extensions/codemode/execute.d.ts.map +1 -0
- package/dist/extensions/codemode/execute.js +577 -0
- package/dist/extensions/codemode/execute.js.map +1 -0
- package/dist/extensions/codemode/execute.lazy.d.ts +3 -0
- package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -0
- package/dist/extensions/codemode/execute.lazy.js +3 -0
- package/dist/extensions/codemode/execute.lazy.js.map +1 -0
- package/dist/extensions/codemode/index.d.ts +21 -0
- package/dist/extensions/codemode/index.d.ts.map +1 -0
- package/dist/extensions/codemode/index.js +31 -0
- package/dist/extensions/codemode/index.js.map +1 -0
- package/dist/extensions/codemode/renderer.d.ts +12 -0
- package/dist/extensions/codemode/renderer.d.ts.map +1 -0
- package/dist/extensions/codemode/renderer.js +137 -0
- package/dist/extensions/codemode/renderer.js.map +1 -0
- package/dist/extensions/codemode/tool.d.ts +123 -0
- package/dist/extensions/codemode/tool.d.ts.map +1 -0
- package/dist/extensions/codemode/tool.js +268 -0
- package/dist/extensions/codemode/tool.js.map +1 -0
- package/dist/extensions/codemode/worker.d.ts +7 -0
- package/dist/extensions/codemode/worker.d.ts.map +1 -0
- package/dist/extensions/codemode/worker.js +7 -0
- package/dist/extensions/codemode/worker.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +19 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/intake/docx.d.ts +42 -0
- package/dist/extensions/intake/docx.d.ts.map +1 -0
- package/dist/extensions/intake/docx.js +148 -0
- package/dist/extensions/intake/docx.js.map +1 -0
- package/dist/extensions/intake/index.d.ts +17 -0
- package/dist/extensions/intake/index.d.ts.map +1 -0
- package/dist/extensions/intake/index.js +88 -0
- package/dist/extensions/intake/index.js.map +1 -0
- package/dist/extensions/intake/prompt.d.ts +6 -0
- package/dist/extensions/intake/prompt.d.ts.map +1 -0
- package/dist/extensions/intake/prompt.js +41 -0
- package/dist/extensions/intake/prompt.js.map +1 -0
- package/dist/extensions/intake/questionnaire.d.ts +84 -0
- package/dist/extensions/intake/questionnaire.d.ts.map +1 -0
- package/dist/extensions/intake/questionnaire.js +472 -0
- package/dist/extensions/intake/questionnaire.js.map +1 -0
- package/dist/extensions/laya/assessment.d.ts +40 -0
- package/dist/extensions/laya/assessment.d.ts.map +1 -0
- package/dist/extensions/laya/assessment.js +191 -0
- package/dist/extensions/laya/assessment.js.map +1 -0
- package/dist/extensions/laya/docker.d.ts +19 -0
- package/dist/extensions/laya/docker.d.ts.map +1 -0
- package/dist/extensions/laya/docker.js +44 -0
- package/dist/extensions/laya/docker.js.map +1 -0
- package/dist/extensions/laya/index.d.ts +43 -0
- package/dist/extensions/laya/index.d.ts.map +1 -0
- package/dist/extensions/laya/index.js +780 -0
- package/dist/extensions/laya/index.js.map +1 -0
- package/dist/extensions/laya/learn.d.ts +67 -0
- package/dist/extensions/laya/learn.d.ts.map +1 -0
- package/dist/extensions/laya/learn.js +263 -0
- package/dist/extensions/laya/learn.js.map +1 -0
- package/dist/extensions/laya/memory.d.ts +48 -0
- package/dist/extensions/laya/memory.d.ts.map +1 -0
- package/dist/extensions/laya/memory.js +107 -0
- package/dist/extensions/laya/memory.js.map +1 -0
- package/dist/extensions/laya/model-manifest.d.ts +7 -0
- package/dist/extensions/laya/model-manifest.d.ts.map +1 -0
- package/dist/extensions/laya/model-manifest.js +48 -0
- package/dist/extensions/laya/model-manifest.js.map +1 -0
- package/dist/extensions/laya/policy.d.ts +130 -0
- package/dist/extensions/laya/policy.d.ts.map +1 -0
- package/dist/extensions/laya/policy.js +222 -0
- package/dist/extensions/laya/policy.js.map +1 -0
- package/dist/extensions/laya/questions.d.ts +60 -0
- package/dist/extensions/laya/questions.d.ts.map +1 -0
- package/dist/extensions/laya/questions.js +189 -0
- package/dist/extensions/laya/questions.js.map +1 -0
- package/dist/extensions/laya/routers.d.ts +25 -0
- package/dist/extensions/laya/routers.d.ts.map +1 -0
- package/dist/extensions/laya/routers.js +121 -0
- package/dist/extensions/laya/routers.js.map +1 -0
- package/dist/extensions/laya/runtime.d.ts +58 -0
- package/dist/extensions/laya/runtime.d.ts.map +1 -0
- package/dist/extensions/laya/runtime.js +127 -0
- package/dist/extensions/laya/runtime.js.map +1 -0
- package/dist/extensions/laya/seed.d.ts +39 -0
- package/dist/extensions/laya/seed.d.ts.map +1 -0
- package/dist/extensions/laya/seed.js +358 -0
- package/dist/extensions/laya/seed.js.map +1 -0
- package/dist/extensions/laya/server.d.ts +50 -0
- package/dist/extensions/laya/server.d.ts.map +1 -0
- package/dist/extensions/laya/server.js +251 -0
- package/dist/extensions/laya/server.js.map +1 -0
- package/dist/extensions/laya/telemetry.d.ts +94 -0
- package/dist/extensions/laya/telemetry.d.ts.map +1 -0
- package/dist/extensions/laya/telemetry.js +107 -0
- package/dist/extensions/laya/telemetry.js.map +1 -0
- package/dist/extensions/laya/train-script.d.ts +8 -0
- package/dist/extensions/laya/train-script.d.ts.map +1 -0
- package/dist/extensions/laya/train-script.js +422 -0
- package/dist/extensions/laya/train-script.js.map +1 -0
- package/dist/extensions/laya/training.d.ts +176 -0
- package/dist/extensions/laya/training.d.ts.map +1 -0
- package/dist/extensions/laya/training.js +337 -0
- package/dist/extensions/laya/training.js.map +1 -0
- package/dist/extensions/llama/client.d.ts +69 -0
- package/dist/extensions/llama/client.d.ts.map +1 -0
- package/dist/extensions/llama/client.js +313 -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 +213 -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/extensions/mcp/cli.d.ts +21 -0
- package/dist/extensions/mcp/cli.d.ts.map +1 -0
- package/dist/extensions/mcp/cli.js +503 -0
- package/dist/extensions/mcp/cli.js.map +1 -0
- package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
- package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
- package/dist/extensions/mcp/cli.lazy.js +3 -0
- package/dist/extensions/mcp/cli.lazy.js.map +1 -0
- package/dist/extensions/mcp/config.d.ts +84 -0
- package/dist/extensions/mcp/config.d.ts.map +1 -0
- package/dist/extensions/mcp/config.js +194 -0
- package/dist/extensions/mcp/config.js.map +1 -0
- package/dist/extensions/mcp/index.d.ts +79 -0
- package/dist/extensions/mcp/index.d.ts.map +1 -0
- package/dist/extensions/mcp/index.js +1101 -0
- package/dist/extensions/mcp/index.js.map +1 -0
- package/dist/extensions/mcp/log.d.ts +16 -0
- package/dist/extensions/mcp/log.d.ts.map +1 -0
- package/dist/extensions/mcp/log.js +66 -0
- package/dist/extensions/mcp/log.js.map +1 -0
- package/dist/extensions/mcp/oauth.d.ts +98 -0
- package/dist/extensions/mcp/oauth.d.ts.map +1 -0
- package/dist/extensions/mcp/oauth.js +366 -0
- package/dist/extensions/mcp/oauth.js.map +1 -0
- package/dist/extensions/mcp/resources.d.ts +43 -0
- package/dist/extensions/mcp/resources.d.ts.map +1 -0
- package/dist/extensions/mcp/resources.js +262 -0
- package/dist/extensions/mcp/resources.js.map +1 -0
- package/dist/extensions/mcp/runtime.d.ts +98 -0
- package/dist/extensions/mcp/runtime.d.ts.map +1 -0
- package/dist/extensions/mcp/runtime.js +395 -0
- package/dist/extensions/mcp/runtime.js.map +1 -0
- package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
- package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
- package/dist/extensions/mcp/runtime.lazy.js +3 -0
- package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
- package/dist/extensions/mcp/tools.d.ts +86 -0
- package/dist/extensions/mcp/tools.d.ts.map +1 -0
- package/dist/extensions/mcp/tools.js +252 -0
- package/dist/extensions/mcp/tools.js.map +1 -0
- package/dist/extensions/mcp/ui.d.ts +60 -0
- package/dist/extensions/mcp/ui.d.ts.map +1 -0
- package/dist/extensions/mcp/ui.js +178 -0
- package/dist/extensions/mcp/ui.js.map +1 -0
- package/dist/extensions/tool-search/index.d.ts +12 -0
- package/dist/extensions/tool-search/index.d.ts.map +1 -0
- package/dist/extensions/tool-search/index.js +15 -0
- package/dist/extensions/tool-search/index.js.map +1 -0
- package/dist/extensions/tool-search/tool.d.ts +73 -0
- package/dist/extensions/tool-search/tool.d.ts.map +1 -0
- package/dist/extensions/tool-search/tool.js +189 -0
- package/dist/extensions/tool-search/tool.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +16 -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 +282 -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/bug-report.d.ts +16 -0
- package/dist/modes/interactive/bug-report.d.ts.map +1 -0
- package/dist/modes/interactive/bug-report.js +171 -0
- package/dist/modes/interactive/bug-report.js.map +1 -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 +37 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +335 -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 +158 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/auth-url.d.ts +14 -0
- package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
- package/dist/modes/interactive/components/auth-url.js +37 -0
- package/dist/modes/interactive/components/auth-url.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 +51 -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 +52 -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 +772 -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/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/easter-egg-3d.d.ts +104 -0
- package/dist/modes/interactive/components/easter-egg-3d.d.ts.map +1 -0
- package/dist/modes/interactive/components/easter-egg-3d.js +1141 -0
- package/dist/modes/interactive/components/easter-egg-3d.js.map +1 -0
- package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts +6 -0
- package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts.map +1 -0
- package/dist/modes/interactive/components/easter-egg-3d.lazy.js +23 -0
- package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +24 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +103 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +25 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +67 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +27 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +87 -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 +109 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +39 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +265 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +33 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +34 -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 +54 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +194 -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 +39 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +166 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/relay-logo.d.ts +22 -0
- package/dist/modes/interactive/components/relay-logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/relay-logo.js +63 -0
- package/dist/modes/interactive/components/relay-logo.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 +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +893 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +96 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +742 -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 +54 -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/themed-text.d.ts +17 -0
- package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
- package/dist/modes/interactive/components/themed-text.js +29 -0
- package/dist/modes/interactive/components/themed-text.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 +68 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +314 -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 +1254 -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 +50 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +48 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +66 -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 +482 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +5861 -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 +119 -0
- package/dist/modes/interactive/session-share.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +78 -0
- package/dist/modes/interactive/theme/light.json +78 -0
- package/dist/modes/interactive/theme/system-theme.d.ts +55 -0
- package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/system-theme.js +546 -0
- package/dist/modes/interactive/theme/system-theme.js.map +1 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +81 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-controller.js +210 -0
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
- package/dist/modes/interactive/theme/theme-json.d.ts +85 -0
- package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-json.js +132 -0
- package/dist/modes/interactive/theme/theme-json.js.map +1 -0
- package/dist/modes/interactive/theme/theme-schema.json +361 -0
- package/dist/modes/interactive/theme/theme.d.ts +158 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +912 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/interactive/tui-renderer.d.ts +22 -0
- package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
- package/dist/modes/interactive/tui-renderer.js +67 -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 +499 -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 +655 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +478 -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 +8 -0
- package/dist/package-manager-cli.d.ts.map +1 -0
- package/dist/package-manager-cli.js +524 -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 +11 -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 +176 -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 +214 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard.d.ts +6 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +156 -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 +22 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +84 -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/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/output-files.d.ts +15 -0
- package/dist/utils/output-files.d.ts.map +1 -0
- package/dist/utils/output-files.js +30 -0
- package/dist/utils/output-files.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 +115 -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/relay-user-agent.d.ts +2 -0
- package/dist/utils/relay-user-agent.d.ts.map +1 -0
- package/dist/utils/relay-user-agent.js +5 -0
- package/dist/utils/relay-user-agent.js.map +1 -0
- package/dist/utils/shell.d.ts +32 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +189 -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 +179 -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 +21 -0
- package/dist/utils/tool-result-images.d.ts.map +1 -0
- package/dist/utils/tool-result-images.js +48 -0
- package/dist/utils/tool-result-images.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +13 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +343 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/dist/utils/version-check.d.ts +17 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +78 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils/wsl.d.ts +3 -0
- package/dist/utils/wsl.d.ts.map +1 -0
- package/dist/utils/wsl.js +15 -0
- package/dist/utils/wsl.js.map +1 -0
- package/dist/utils/zip.d.ts +7 -0
- package/dist/utils/zip.d.ts.map +1 -0
- package/dist/utils/zip.js +60 -0
- package/dist/utils/zip.js.map +1 -0
- package/docs/cli-integration.md +106 -0
- package/docs/cli.md +316 -0
- package/docs/codemode.md +207 -0
- package/docs/compaction.md +463 -0
- package/docs/configuration.md +47 -0
- package/docs/containerization.md +154 -0
- package/docs/custom-provider.md +173 -0
- package/docs/docs.json +224 -0
- package/docs/environment-variables.md +97 -0
- package/docs/extensions.md +274 -0
- package/docs/harness-core.md +99 -0
- package/docs/how-relay-works.md +49 -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 +39 -0
- package/docs/intake.md +40 -0
- package/docs/json.md +226 -0
- package/docs/keybindings.md +194 -0
- package/docs/laya.md +152 -0
- package/docs/llama-cpp.md +114 -0
- package/docs/mcp.md +258 -0
- package/docs/message-types.md +261 -0
- package/docs/models.md +205 -0
- package/docs/packages.md +129 -0
- package/docs/prompt-templates.md +59 -0
- package/docs/providers.md +187 -0
- package/docs/quickstart.md +139 -0
- package/docs/rpc-commands.md +860 -0
- package/docs/rpc-extension-ui.md +200 -0
- package/docs/rpc.md +193 -0
- package/docs/sdk.md +147 -0
- package/docs/security.md +99 -0
- package/docs/session-format.md +293 -0
- package/docs/sessions.md +66 -0
- package/docs/settings.md +206 -0
- package/docs/shell-aliases.md +93 -0
- package/docs/skills.md +93 -0
- package/docs/slash-commands.md +61 -0
- package/docs/terminal-setup.md +219 -0
- package/docs/termux.md +121 -0
- package/docs/themes.md +136 -0
- package/docs/tmux.md +55 -0
- package/docs/tui.md +125 -0
- package/docs/usage.md +94 -0
- package/docs/virtual-models.md +114 -0
- package/docs/windows.md +67 -0
- package/examples/README.md +39 -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 +225 -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 +617 -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/debug-provider.ts +90 -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_relay.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/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/jev-router.ts +113 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +354 -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 +49 -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 +196 -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/security-auditor.md +20 -0
- package/examples/extensions/subagent/agents/verifier.md +31 -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-and-verify.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/subagent/skills/delegate/SKILL.md +48 -0
- package/examples/extensions/subagent/skills/security-audit/SKILL.md +108 -0
- package/examples/extensions/subagent/skills/security-audit/references/categories.md +130 -0
- package/examples/extensions/subagent/skills/security-audit/references/report.md +38 -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/relay-example-plugin/README.md +38 -0
- package/examples/plugins/relay-example-plugin/package.json +10 -0
- package/examples/plugins/relay-example-plugin/src/contract.ts +13 -0
- package/examples/plugins/relay-example-plugin/src/session.ts +24 -0
- package/examples/plugins/relay-example-plugin/src/tui.ts +31 -0
- package/examples/rpc-client.ts +35 -0
- package/examples/rpc-extension-ui.ts +661 -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/14-codemode-mcp.ts +61 -0
- package/examples/sdk/README.md +141 -0
- package/package.json +111 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/extensions/laya/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE;;;;;;;;GAQG;AAEH,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB;AAWD,iGAAiG;AACjG,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ5C;AAID,qBAAa,UAAU;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IAEnC,0FAA0F;IAC1F,YAAY,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAUnE;IAED,+EAA+E;IAC/E,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,GAAG,UAAU,CAQxD;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,MAAM;IAed,kFAAkF;IAClF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,WAAW,EAAE,CAUvE;CACD;AAED,kGAAkG;AAClG,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,GAAG,SAAS,CAYjF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { SESSION_SOURCE } from "./training.js";
|
|
2
|
+
/**
|
|
3
|
+
* Memory of the tasks taught with `/laya learn`. Training takes minutes on a GPU and needs the Laya
|
|
4
|
+
* environment; the memory works from the next request. A request close to a learned task is routed
|
|
5
|
+
* with that task's labels, and the model that runs it gets the lessons of similar tasks.
|
|
6
|
+
*
|
|
7
|
+
* Similarity is the cosine of TF-IDF word vectors. Word weights come from every exercise of the
|
|
8
|
+
* workspace, so words common to all coding requests ("fix", "add", "file") count little and the
|
|
9
|
+
* specific ones ("pager", "off-by-one", "token expiry") decide.
|
|
10
|
+
*/
|
|
11
|
+
/** A learned task close enough for its labels to route a new request. */
|
|
12
|
+
export const ROUTE_SIMILARITY = 0.6;
|
|
13
|
+
/** A learned task close enough for its lesson to be worth reading. */
|
|
14
|
+
export const LESSON_SIMILARITY = 0.45;
|
|
15
|
+
const STOPWORDS = new Set(("the a an and or of to in on at for with from by is are be it this that these those i you we me my our your " +
|
|
16
|
+
"please can could would should will do does did not no so as if then than into about all any some " +
|
|
17
|
+
"o a os as um uma uns umas de do da dos das no na nos nas em para por com sem e ou que se nao isso este esta " +
|
|
18
|
+
"esse essa ele ela eu voce meu minha seu sua pelo pela ao aos mais mas como ja tambem favor").split(" "));
|
|
19
|
+
/** Words of a request: identifiers split at case changes, accents removed, stopwords dropped. */
|
|
20
|
+
export function words(text) {
|
|
21
|
+
return text
|
|
22
|
+
.replace(/([a-z])([A-Z])/g, "$1 $2")
|
|
23
|
+
.normalize("NFD")
|
|
24
|
+
.replace(/\p{Diacritic}/gu, "")
|
|
25
|
+
.toLowerCase()
|
|
26
|
+
.split(/[^a-z0-9]+/)
|
|
27
|
+
.filter((word) => word.length > 1 && !STOPWORDS.has(word));
|
|
28
|
+
}
|
|
29
|
+
export class TaskMemory {
|
|
30
|
+
tasks;
|
|
31
|
+
idf;
|
|
32
|
+
defaultIdf;
|
|
33
|
+
vectors;
|
|
34
|
+
/** `corpus` is every request the word weights are counted over; it includes the tasks. */
|
|
35
|
+
constructor(tasks, corpus) {
|
|
36
|
+
this.tasks = tasks;
|
|
37
|
+
const documents = corpus.length;
|
|
38
|
+
const frequency = new Map();
|
|
39
|
+
for (const request of corpus) {
|
|
40
|
+
for (const word of new Set(words(request)))
|
|
41
|
+
frequency.set(word, (frequency.get(word) ?? 0) + 1);
|
|
42
|
+
}
|
|
43
|
+
this.idf = new Map([...frequency].map(([word, count]) => [word, Math.log((documents + 1) / (count + 1)) + 1]));
|
|
44
|
+
this.defaultIdf = Math.log(documents + 1) + 1;
|
|
45
|
+
this.vectors = tasks.map((task) => this.vector(task.request));
|
|
46
|
+
}
|
|
47
|
+
/** Session tasks of a training dataset, weighted over all of its exercises. */
|
|
48
|
+
static fromRows(rows) {
|
|
49
|
+
const tasks = rows
|
|
50
|
+
.filter((row) => row.source === SESSION_SOURCE && row.state?.request)
|
|
51
|
+
.map((row) => ({ id: row.id, request: row.state.request, expected: row.expected, lesson: row.lesson }));
|
|
52
|
+
return new TaskMemory(tasks, rows.flatMap((row) => (row.state?.request ? [row.state.request] : [])));
|
|
53
|
+
}
|
|
54
|
+
get size() {
|
|
55
|
+
return this.tasks.length;
|
|
56
|
+
}
|
|
57
|
+
vector(text) {
|
|
58
|
+
const counts = new Map();
|
|
59
|
+
for (const word of words(text))
|
|
60
|
+
counts.set(word, (counts.get(word) ?? 0) + 1);
|
|
61
|
+
const vector = new Map();
|
|
62
|
+
let norm = 0;
|
|
63
|
+
for (const [word, count] of counts) {
|
|
64
|
+
const weight = (1 + Math.log(count)) * (this.idf.get(word) ?? this.defaultIdf);
|
|
65
|
+
vector.set(word, weight);
|
|
66
|
+
norm += weight * weight;
|
|
67
|
+
}
|
|
68
|
+
norm = Math.sqrt(norm);
|
|
69
|
+
for (const [word, weight] of vector)
|
|
70
|
+
vector.set(word, weight / norm);
|
|
71
|
+
return vector;
|
|
72
|
+
}
|
|
73
|
+
/** Learned tasks at least `minSimilarity` close to the request, closest first. */
|
|
74
|
+
search(request, minSimilarity, limit = 3) {
|
|
75
|
+
if (this.tasks.length === 0)
|
|
76
|
+
return [];
|
|
77
|
+
const query = this.vector(request);
|
|
78
|
+
const matches = [];
|
|
79
|
+
this.vectors.forEach((vector, index) => {
|
|
80
|
+
let similarity = 0;
|
|
81
|
+
for (const [word, weight] of query)
|
|
82
|
+
similarity += weight * (vector.get(word) ?? 0);
|
|
83
|
+
if (similarity >= minSimilarity)
|
|
84
|
+
matches.push({ task: this.tasks[index], similarity });
|
|
85
|
+
});
|
|
86
|
+
return matches.sort((a, b) => b.similarity - a.similarity).slice(0, limit);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Custom message with the lessons, sent next to the request when laya/auto does not route it. */
|
|
90
|
+
export const LAYA_LESSONS_MESSAGE = "laya.lessons";
|
|
91
|
+
/**
|
|
92
|
+
* Lessons of similar tasks for the model that runs the request, or undefined when none has one.
|
|
93
|
+
* The plan message includes the text as one item; other models get it with the `[laya:lessons]` prefix.
|
|
94
|
+
*/
|
|
95
|
+
export function renderLessons(matches) {
|
|
96
|
+
const clip = (text) => {
|
|
97
|
+
const flat = text.replace(/\s+/g, " ").trim();
|
|
98
|
+
return flat.length > 100 ? `${flat.slice(0, 100)}…` : flat;
|
|
99
|
+
};
|
|
100
|
+
const lines = matches.flatMap((match) => match.task.lesson
|
|
101
|
+
? [` - "${clip(match.task.request)}" (${Math.round(match.similarity * 100)}% similar): ${match.task.lesson}`]
|
|
102
|
+
: []);
|
|
103
|
+
if (lines.length === 0)
|
|
104
|
+
return undefined;
|
|
105
|
+
return ["Lessons from similar tasks done before in this harness (check they still apply):", ...lines].join("\n");
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/extensions/laya/memory.ts"],"names":[],"mappings":"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","sourcesContent":["import { SESSION_SOURCE, type TrainingRow } from \"./training.ts\";\n\n/**\n * Memory of the tasks taught with `/laya learn`. Training takes minutes on a GPU and needs the Laya\n * environment; the memory works from the next request. A request close to a learned task is routed\n * with that task's labels, and the model that runs it gets the lessons of similar tasks.\n *\n * Similarity is the cosine of TF-IDF word vectors. Word weights come from every exercise of the\n * workspace, so words common to all coding requests (\"fix\", \"add\", \"file\") count little and the\n * specific ones (\"pager\", \"off-by-one\", \"token expiry\") decide.\n */\n\n/** A learned task close enough for its labels to route a new request. */\nexport const ROUTE_SIMILARITY = 0.6;\n/** A learned task close enough for its lesson to be worth reading. */\nexport const LESSON_SIMILARITY = 0.45;\n\nexport interface LearnedTask {\n\tid: string;\n\trequest: string;\n\texpected: TrainingRow[\"expected\"];\n\tlesson?: string;\n}\n\nexport interface MemoryMatch {\n\ttask: LearnedTask;\n\tsimilarity: number;\n}\n\nconst STOPWORDS = new Set(\n\t(\n\t\t\"the a an and or of to in on at for with from by is are be it this that these those i you we me my our your \" +\n\t\t\"please can could would should will do does did not no so as if then than into about all any some \" +\n\t\t\"o a os as um uma uns umas de do da dos das no na nos nas em para por com sem e ou que se nao isso este esta \" +\n\t\t\"esse essa ele ela eu voce meu minha seu sua pelo pela ao aos mais mas como ja tambem favor\"\n\t).split(\" \"),\n);\n\n/** Words of a request: identifiers split at case changes, accents removed, stopwords dropped. */\nexport function words(text: string): string[] {\n\treturn text\n\t\t.replace(/([a-z])([A-Z])/g, \"$1 $2\")\n\t\t.normalize(\"NFD\")\n\t\t.replace(/\\p{Diacritic}/gu, \"\")\n\t\t.toLowerCase()\n\t\t.split(/[^a-z0-9]+/)\n\t\t.filter((word) => word.length > 1 && !STOPWORDS.has(word));\n}\n\ntype Vector = Map<string, number>;\n\nexport class TaskMemory {\n\treadonly tasks: readonly LearnedTask[];\n\tprivate readonly idf: Map<string, number>;\n\tprivate readonly defaultIdf: number;\n\tprivate readonly vectors: Vector[];\n\n\t/** `corpus` is every request the word weights are counted over; it includes the tasks. */\n\tconstructor(tasks: readonly LearnedTask[], corpus: readonly string[]) {\n\t\tthis.tasks = tasks;\n\t\tconst documents = corpus.length;\n\t\tconst frequency = new Map<string, number>();\n\t\tfor (const request of corpus) {\n\t\t\tfor (const word of new Set(words(request))) frequency.set(word, (frequency.get(word) ?? 0) + 1);\n\t\t}\n\t\tthis.idf = new Map([...frequency].map(([word, count]) => [word, Math.log((documents + 1) / (count + 1)) + 1]));\n\t\tthis.defaultIdf = Math.log(documents + 1) + 1;\n\t\tthis.vectors = tasks.map((task) => this.vector(task.request));\n\t}\n\n\t/** Session tasks of a training dataset, weighted over all of its exercises. */\n\tstatic fromRows(rows: readonly TrainingRow[]): TaskMemory {\n\t\tconst tasks = rows\n\t\t\t.filter((row) => row.source === SESSION_SOURCE && row.state?.request)\n\t\t\t.map((row) => ({ id: row.id, request: row.state.request, expected: row.expected, lesson: row.lesson }));\n\t\treturn new TaskMemory(\n\t\t\ttasks,\n\t\t\trows.flatMap((row) => (row.state?.request ? [row.state.request] : [])),\n\t\t);\n\t}\n\n\tget size(): number {\n\t\treturn this.tasks.length;\n\t}\n\n\tprivate vector(text: string): Vector {\n\t\tconst counts = new Map<string, number>();\n\t\tfor (const word of words(text)) counts.set(word, (counts.get(word) ?? 0) + 1);\n\t\tconst vector: Vector = new Map();\n\t\tlet norm = 0;\n\t\tfor (const [word, count] of counts) {\n\t\t\tconst weight = (1 + Math.log(count)) * (this.idf.get(word) ?? this.defaultIdf);\n\t\t\tvector.set(word, weight);\n\t\t\tnorm += weight * weight;\n\t\t}\n\t\tnorm = Math.sqrt(norm);\n\t\tfor (const [word, weight] of vector) vector.set(word, weight / norm);\n\t\treturn vector;\n\t}\n\n\t/** Learned tasks at least `minSimilarity` close to the request, closest first. */\n\tsearch(request: string, minSimilarity: number, limit = 3): MemoryMatch[] {\n\t\tif (this.tasks.length === 0) return [];\n\t\tconst query = this.vector(request);\n\t\tconst matches: MemoryMatch[] = [];\n\t\tthis.vectors.forEach((vector, index) => {\n\t\t\tlet similarity = 0;\n\t\t\tfor (const [word, weight] of query) similarity += weight * (vector.get(word) ?? 0);\n\t\t\tif (similarity >= minSimilarity) matches.push({ task: this.tasks[index], similarity });\n\t\t});\n\t\treturn matches.sort((a, b) => b.similarity - a.similarity).slice(0, limit);\n\t}\n}\n\n/** Custom message with the lessons, sent next to the request when laya/auto does not route it. */\nexport const LAYA_LESSONS_MESSAGE = \"laya.lessons\";\n\n/**\n * Lessons of similar tasks for the model that runs the request, or undefined when none has one.\n * The plan message includes the text as one item; other models get it with the `[laya:lessons]` prefix.\n */\nexport function renderLessons(matches: readonly MemoryMatch[]): string | undefined {\n\tconst clip = (text: string) => {\n\t\tconst flat = text.replace(/\\s+/g, \" \").trim();\n\t\treturn flat.length > 100 ? `${flat.slice(0, 100)}…` : flat;\n\t};\n\tconst lines = matches.flatMap((match) =>\n\t\tmatch.task.lesson\n\t\t\t? [` - \"${clip(match.task.request)}\" (${Math.round(match.similarity * 100)}% similar): ${match.task.lesson}`]\n\t\t\t: [],\n\t);\n\tif (lines.length === 0) return undefined;\n\treturn [\"Lessons from similar tasks done before in this harness (check they still apply):\", ...lines].join(\"\\n\");\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LayaModelManifest } from "./runtime.ts";
|
|
2
|
+
/**
|
|
3
|
+
* The trained Laya model baked into the Laya Docker image. Generated by `scripts/package-laya-model.mjs`;
|
|
4
|
+
* do not edit by hand. The files live at `https://huggingface.co/eltonssouza/relay-laya/resolve/deb313b03518f282a7c4c227dc776c9fe229c30e/`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const LAYA_MODEL_MANIFEST: LayaModelManifest;
|
|
7
|
+
//# sourceMappingURL=model-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-manifest.d.ts","sourceRoot":"","sources":["../../../src/extensions/laya/model-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,iBA0CjC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The trained Laya model baked into the Laya Docker image. Generated by `scripts/package-laya-model.mjs`;
|
|
3
|
+
* do not edit by hand. The files live at `https://huggingface.co/eltonssouza/relay-laya/resolve/deb313b03518f282a7c4c227dc776c9fe229c30e/`.
|
|
4
|
+
*/
|
|
5
|
+
export const LAYA_MODEL_MANIFEST = {
|
|
6
|
+
version: "v1",
|
|
7
|
+
layaPackage: "laya[serve]==0.3.27",
|
|
8
|
+
baseUrl: "https://huggingface.co/eltonssouza/relay-laya/resolve/deb313b03518f282a7c4c227dc776c9fe229c30e/",
|
|
9
|
+
files: [
|
|
10
|
+
{
|
|
11
|
+
path: "encoder/config.json",
|
|
12
|
+
asset: "encoder/config.json",
|
|
13
|
+
size: 2018,
|
|
14
|
+
sha256: "d69c2320a59a1dd825838a66792048566537c845a30127d2e4fef7ccc759d938",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
path: "laya_trainer_meta.json",
|
|
18
|
+
asset: "laya_trainer_meta.json",
|
|
19
|
+
size: 904,
|
|
20
|
+
sha256: "8a8970d8339248e2358a5bb0764cf02f3524f467634575774f9370d7c288c589",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
path: "model.safetensors",
|
|
24
|
+
asset: "model.safetensors",
|
|
25
|
+
size: 643835524,
|
|
26
|
+
sha256: "d950dc93a2bd0fcf12b7ec1575390c3507073d0f00896adb4727b94ceef192ad",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
path: "rl_agent_config.json",
|
|
30
|
+
asset: "rl_agent_config.json",
|
|
31
|
+
size: 584,
|
|
32
|
+
sha256: "1c556afd40de99c56dd3bec53fbf65120461bfe4f7900b242dcaed10e79d2fad",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
path: "tokenizer/tokenizer.json",
|
|
36
|
+
asset: "tokenizer/tokenizer.json",
|
|
37
|
+
size: 34363188,
|
|
38
|
+
sha256: "609d8f4c067cd3950f88594c5a802616cea245823836ef5848ee4fc40aab5b6f",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
path: "tokenizer/tokenizer_config.json",
|
|
42
|
+
asset: "tokenizer/tokenizer_config.json",
|
|
43
|
+
size: 648,
|
|
44
|
+
sha256: "5f36fa307ecb9e70c9b058ca0621530f6bd3e89b371c4d6c0279c48d9dbd2629",
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=model-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-manifest.js","sourceRoot":"","sources":["../../../src/extensions/laya/model-manifest.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACrD,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,qBAAqB;IAClC,OAAO,EAAE,iGAAiG;IAC1G,KAAK,EAAE;QACN;YACC,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,qBAAqB;YAC5B,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,kEAAkE;SAC1E;QACD;YACC,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE,wBAAwB;YAC/B,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,kEAAkE;SAC1E;QACD;YACC,IAAI,EAAE,mBAAmB;YACzB,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,kEAAkE;SAC1E;QACD;YACC,IAAI,EAAE,sBAAsB;YAC5B,KAAK,EAAE,sBAAsB;YAC7B,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,kEAAkE;SAC1E;QACD;YACC,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,0BAA0B;YACjC,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,kEAAkE;SAC1E;QACD;YACC,IAAI,EAAE,iCAAiC;YACvC,KAAK,EAAE,iCAAiC;YACxC,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,kEAAkE;SAC1E;KACD;CACD,CAAC","sourcesContent":["import type { LayaModelManifest } from \"./runtime.ts\";\n\n/**\n * The trained Laya model baked into the Laya Docker image. Generated by `scripts/package-laya-model.mjs`;\n * do not edit by hand. The files live at `https://huggingface.co/eltonssouza/relay-laya/resolve/deb313b03518f282a7c4c227dc776c9fe229c30e/`.\n */\nexport const LAYA_MODEL_MANIFEST: LayaModelManifest = {\n\tversion: \"v1\",\n\tlayaPackage: \"laya[serve]==0.3.27\",\n\tbaseUrl: \"https://huggingface.co/eltonssouza/relay-laya/resolve/deb313b03518f282a7c4c227dc776c9fe229c30e/\",\n\tfiles: [\n\t\t{\n\t\t\tpath: \"encoder/config.json\",\n\t\t\tasset: \"encoder/config.json\",\n\t\t\tsize: 2018,\n\t\t\tsha256: \"d69c2320a59a1dd825838a66792048566537c845a30127d2e4fef7ccc759d938\",\n\t\t},\n\t\t{\n\t\t\tpath: \"laya_trainer_meta.json\",\n\t\t\tasset: \"laya_trainer_meta.json\",\n\t\t\tsize: 904,\n\t\t\tsha256: \"8a8970d8339248e2358a5bb0764cf02f3524f467634575774f9370d7c288c589\",\n\t\t},\n\t\t{\n\t\t\tpath: \"model.safetensors\",\n\t\t\tasset: \"model.safetensors\",\n\t\t\tsize: 643835524,\n\t\t\tsha256: \"d950dc93a2bd0fcf12b7ec1575390c3507073d0f00896adb4727b94ceef192ad\",\n\t\t},\n\t\t{\n\t\t\tpath: \"rl_agent_config.json\",\n\t\t\tasset: \"rl_agent_config.json\",\n\t\t\tsize: 584,\n\t\t\tsha256: \"1c556afd40de99c56dd3bec53fbf65120461bfe4f7900b242dcaed10e79d2fad\",\n\t\t},\n\t\t{\n\t\t\tpath: \"tokenizer/tokenizer.json\",\n\t\t\tasset: \"tokenizer/tokenizer.json\",\n\t\t\tsize: 34363188,\n\t\t\tsha256: \"609d8f4c067cd3950f88594c5a802616cea245823836ef5848ee4fc40aab5b6f\",\n\t\t},\n\t\t{\n\t\t\tpath: \"tokenizer/tokenizer_config.json\",\n\t\t\tasset: \"tokenizer/tokenizer_config.json\",\n\t\t\tsize: 648,\n\t\t\tsha256: \"5f36fa307ecb9e70c9b058ca0621530f6bd3e89b371c4d6c0279c48d9dbd2629\",\n\t\t},\n\t],\n};\n"]}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import type { ModelThinkingLevel } from "@relay-harness/ai";
|
|
2
|
+
import type { TaskAssessment } from "./assessment.ts";
|
|
3
|
+
import { type CapabilityTier, type ReasoningEffort, type ValidationLevel } from "./questions.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Policy engine: turns Laya's recommendation into a model choice the harness accepts.
|
|
6
|
+
*
|
|
7
|
+
* Laya recommends; the harness decides. Deterministic rules set floors that Laya cannot lower,
|
|
8
|
+
* the model registry maps abstract tiers to concrete models, the quota manager and performance
|
|
9
|
+
* history adjust each candidate, and a profile-weighted utility picks the cheapest model that is
|
|
10
|
+
* likely enough to succeed.
|
|
11
|
+
*/
|
|
12
|
+
export declare const POLICY_PROFILES: readonly ["economy", "balanced", "quality", "critical"];
|
|
13
|
+
export type PolicyProfile = (typeof POLICY_PROFILES)[number];
|
|
14
|
+
export interface ProfileWeights {
|
|
15
|
+
quality: number;
|
|
16
|
+
cost: number;
|
|
17
|
+
latency: number;
|
|
18
|
+
risk: number;
|
|
19
|
+
/** Minimum estimated success probability a model needs to be chosen. */
|
|
20
|
+
minSuccess: number;
|
|
21
|
+
}
|
|
22
|
+
export declare const PROFILES: Record<PolicyProfile, ProfileWeights>;
|
|
23
|
+
/**
|
|
24
|
+
* Concrete models per tier as `provider/model`, in preference order. Only models whose provider
|
|
25
|
+
* has credentials are candidates. Override with the `laya.models` setting.
|
|
26
|
+
*/
|
|
27
|
+
export declare const DEFAULT_MODEL_REGISTRY: Record<CapabilityTier, string[]>;
|
|
28
|
+
export declare const tierIndex: (tier: CapabilityTier) => number;
|
|
29
|
+
export declare const maxTier: (a: CapabilityTier, b: CapabilityTier) => "balanced" | "fast" | "frontier" | "strong";
|
|
30
|
+
export declare function nextTier(tier: CapabilityTier): CapabilityTier | undefined;
|
|
31
|
+
/** Requests that must not run on a weak model, whatever Laya says. */
|
|
32
|
+
export declare const DETERMINISTIC_RULES: Array<{
|
|
33
|
+
id: string;
|
|
34
|
+
pattern: RegExp;
|
|
35
|
+
}>;
|
|
36
|
+
/** The top effort maps to `xhigh`; routing never uses `max`. */
|
|
37
|
+
export declare const EFFORT_TO_THINKING: Record<ReasoningEffort, ModelThinkingLevel>;
|
|
38
|
+
export interface PolicyOptions {
|
|
39
|
+
/** Answers below this confidence raise the tier by one (`insufficient_confidence`). */
|
|
40
|
+
minConfidence: number;
|
|
41
|
+
}
|
|
42
|
+
export interface PolicyDecision {
|
|
43
|
+
/** Tier Laya recommended. */
|
|
44
|
+
recommendedTier: CapabilityTier;
|
|
45
|
+
/** Tier the policy requires: the recommendation raised by rules and low confidence. */
|
|
46
|
+
requiredTier: CapabilityTier;
|
|
47
|
+
/** Hard floor: no model below this tier is chosen. */
|
|
48
|
+
minTier: CapabilityTier;
|
|
49
|
+
effort: ReasoningEffort;
|
|
50
|
+
thinkingLevel: ModelThinkingLevel;
|
|
51
|
+
validation: {
|
|
52
|
+
required: boolean;
|
|
53
|
+
level: ValidationLevel;
|
|
54
|
+
};
|
|
55
|
+
/** Deterministic rules that fired. */
|
|
56
|
+
rules: string[];
|
|
57
|
+
/** Why the tier differs from Laya's recommendation. */
|
|
58
|
+
escalations: EscalationReason[];
|
|
59
|
+
}
|
|
60
|
+
export type EscalationReason = "insufficient_confidence" | "test_failure" | "missing_context" | "high_risk" | "repeated_failure" | "architecture_complexity" | "security_sensitive" | "provider_unavailable";
|
|
61
|
+
/** Applies the deterministic rules and the confidence threshold to Laya's assessment. */
|
|
62
|
+
export declare function applyPolicy(assessment: TaskAssessment, request: string, options: PolicyOptions): PolicyDecision;
|
|
63
|
+
/**
|
|
64
|
+
* Relative availability of each provider's subscription quota, 0..1. Configured values come from
|
|
65
|
+
* the `laya.quota` setting; rate-limit and overload errors lower a provider's availability for
|
|
66
|
+
* ten minutes, so equivalent models of other providers win in the meantime.
|
|
67
|
+
*/
|
|
68
|
+
export declare class QuotaManager {
|
|
69
|
+
private configured;
|
|
70
|
+
private penalties;
|
|
71
|
+
private readonly now;
|
|
72
|
+
constructor(now?: () => number);
|
|
73
|
+
configure(quota: Record<string, number> | undefined): void;
|
|
74
|
+
/** Records a rate-limit or overload error from `provider`. */
|
|
75
|
+
recordPressure(provider: string): void;
|
|
76
|
+
available(provider: string): number;
|
|
77
|
+
snapshot(providers: Iterable<string>): Record<string, number>;
|
|
78
|
+
private penaltyOf;
|
|
79
|
+
}
|
|
80
|
+
/** History key: task type plus complexity level, e.g. `bug_fix:2`. */
|
|
81
|
+
export declare function taskKey(assessment: Pick<TaskAssessment, "task">): string;
|
|
82
|
+
/** Observed outcomes per task class and model, from telemetry. */
|
|
83
|
+
export declare class PerformanceHistory {
|
|
84
|
+
private outcomes;
|
|
85
|
+
record(key: string, model: string, success: boolean): void;
|
|
86
|
+
get(key: string, model: string): {
|
|
87
|
+
runs: number;
|
|
88
|
+
successes: number;
|
|
89
|
+
} | undefined;
|
|
90
|
+
/** P(success | task, model): the prior blended with observed runs. */
|
|
91
|
+
successProbability(key: string, model: string, prior: number): number;
|
|
92
|
+
}
|
|
93
|
+
export interface Candidate {
|
|
94
|
+
/** `provider/model` */
|
|
95
|
+
ref: string;
|
|
96
|
+
provider: string;
|
|
97
|
+
tier: CapabilityTier;
|
|
98
|
+
/** Position in the registry; breaks ties in favor of the configured preference. */
|
|
99
|
+
order: number;
|
|
100
|
+
}
|
|
101
|
+
export interface ScoredCandidate extends Candidate {
|
|
102
|
+
success: number;
|
|
103
|
+
cost: number;
|
|
104
|
+
latency: number;
|
|
105
|
+
utility: number;
|
|
106
|
+
eligible: boolean;
|
|
107
|
+
}
|
|
108
|
+
export interface RankInput {
|
|
109
|
+
requiredTier: CapabilityTier;
|
|
110
|
+
minTier: CapabilityTier;
|
|
111
|
+
/** Task risk, 0..1. */
|
|
112
|
+
risk: number;
|
|
113
|
+
profile: PolicyProfile;
|
|
114
|
+
taskKey: string;
|
|
115
|
+
history: PerformanceHistory;
|
|
116
|
+
quota: QuotaManager;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Scores every candidate with the profile's utility
|
|
120
|
+
* `quality * P(success) - cost * quota_cost - latency * latency - risk * failure_risk`
|
|
121
|
+
* and sorts the best first. Candidates below the minimum tier are dropped. A candidate is eligible
|
|
122
|
+
* when its success probability reaches the profile minimum; when none is, the most likely one wins.
|
|
123
|
+
*/
|
|
124
|
+
export declare function rankCandidates(candidates: readonly Candidate[], input: RankInput): ScoredCandidate[];
|
|
125
|
+
/** Parses `provider/model`; the model id may itself contain slashes. */
|
|
126
|
+
export declare function parseModelRef(ref: string): {
|
|
127
|
+
provider: string;
|
|
128
|
+
id: string;
|
|
129
|
+
} | undefined;
|
|
130
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/extensions/laya/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { CAPABILITY_TIERS, VALIDATION_LEVELS, } from "./questions.js";
|
|
2
|
+
/**
|
|
3
|
+
* Policy engine: turns Laya's recommendation into a model choice the harness accepts.
|
|
4
|
+
*
|
|
5
|
+
* Laya recommends; the harness decides. Deterministic rules set floors that Laya cannot lower,
|
|
6
|
+
* the model registry maps abstract tiers to concrete models, the quota manager and performance
|
|
7
|
+
* history adjust each candidate, and a profile-weighted utility picks the cheapest model that is
|
|
8
|
+
* likely enough to succeed.
|
|
9
|
+
*/
|
|
10
|
+
export const POLICY_PROFILES = ["economy", "balanced", "quality", "critical"];
|
|
11
|
+
export const PROFILES = {
|
|
12
|
+
economy: { quality: 0.3, cost: 0.5, latency: 0.2, risk: 0, minSuccess: 0.75 },
|
|
13
|
+
balanced: { quality: 0.45, cost: 0.3, latency: 0.15, risk: 0.1, minSuccess: 0.85 },
|
|
14
|
+
quality: { quality: 0.7, cost: 0.1, latency: 0, risk: 0.2, minSuccess: 0.9 },
|
|
15
|
+
critical: { quality: 0.7, cost: 0, latency: 0, risk: 0.3, minSuccess: 0.95 },
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Concrete models per tier as `provider/model`, in preference order. Only models whose provider
|
|
19
|
+
* has credentials are candidates. Override with the `laya.models` setting.
|
|
20
|
+
*/
|
|
21
|
+
export const DEFAULT_MODEL_REGISTRY = {
|
|
22
|
+
fast: ["anthropic/claude-haiku-4-5", "openai-codex/gpt-6-luna", "google/gemini-3.5-flash"],
|
|
23
|
+
balanced: ["anthropic/claude-sonnet-5-5", "openai-codex/gpt-5.6-terra", "google/gemini-3.8-flash"],
|
|
24
|
+
strong: ["anthropic/claude-opus-5-5", "openai-codex/gpt-6-sol", "google/gemini-3.1-pro-preview"],
|
|
25
|
+
frontier: ["anthropic/claude-fable-5-1", "openai-codex/gpt-6.1-sol"],
|
|
26
|
+
};
|
|
27
|
+
/** Relative quota cost and latency per tier, 0..1. */
|
|
28
|
+
const TIER_PRIORS = {
|
|
29
|
+
fast: { cost: 0.1, latency: 0.15 },
|
|
30
|
+
balanced: { cost: 0.35, latency: 0.35 },
|
|
31
|
+
strong: { cost: 0.65, latency: 0.6 },
|
|
32
|
+
frontier: { cost: 0.9, latency: 0.85 },
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Prior success probability relative to the tier the task requires: a model of exactly that tier is
|
|
36
|
+
* sufficient, each tier above adds a little, each tier below loses a lot.
|
|
37
|
+
*/
|
|
38
|
+
const MATCHED_SUCCESS = 0.9;
|
|
39
|
+
const OVERPOWERED_BONUS = 0.04;
|
|
40
|
+
const UNDERPOWERED_PENALTY = 0.18;
|
|
41
|
+
/** Weight of the prior, in runs, when blending it with observed history. */
|
|
42
|
+
const PRIOR_RUNS = 5;
|
|
43
|
+
export const tierIndex = (tier) => CAPABILITY_TIERS.indexOf(tier);
|
|
44
|
+
export const maxTier = (a, b) => (tierIndex(a) >= tierIndex(b) ? a : b);
|
|
45
|
+
export function nextTier(tier) {
|
|
46
|
+
return CAPABILITY_TIERS[tierIndex(tier) + 1];
|
|
47
|
+
}
|
|
48
|
+
/** Requests that must not run on a weak model, whatever Laya says. */
|
|
49
|
+
export const DETERMINISTIC_RULES = [
|
|
50
|
+
{
|
|
51
|
+
id: "production-database-migration",
|
|
52
|
+
pattern: /(migrat|migra[cç]|\bdrop\b|backfill|alter table).*(produc|produ[cç])|(produc|produ[cç]).*(migrat|migra[cç]|\bdrop\b|backfill|alter table)/i,
|
|
53
|
+
},
|
|
54
|
+
{ id: "authentication", pattern: /\bauth|login|oauth|\bsso\b|password|senha|session token|jwt/i },
|
|
55
|
+
{ id: "security-vulnerability", pattern: /vulnerab|inje[cç]|\bxss\b|csrf|\bcve-|exploit|privilege escalation/i },
|
|
56
|
+
{ id: "payment-processing", pattern: /payment|pagamento|billing|cobran[cç]a|stripe|checkout|invoice|fatura/i },
|
|
57
|
+
];
|
|
58
|
+
/** The top effort maps to `xhigh`; routing never uses `max`. */
|
|
59
|
+
export const EFFORT_TO_THINKING = {
|
|
60
|
+
minimal: "minimal",
|
|
61
|
+
low: "low",
|
|
62
|
+
medium: "medium",
|
|
63
|
+
high: "high",
|
|
64
|
+
extra_high: "xhigh",
|
|
65
|
+
};
|
|
66
|
+
/** Applies the deterministic rules and the confidence threshold to Laya's assessment. */
|
|
67
|
+
export function applyPolicy(assessment, request, options) {
|
|
68
|
+
const recommendedTier = assessment.recommendation.tier;
|
|
69
|
+
const rules = DETERMINISTIC_RULES.filter((rule) => rule.pattern.test(request)).map((rule) => rule.id);
|
|
70
|
+
const escalations = [];
|
|
71
|
+
let minTier = "fast";
|
|
72
|
+
if (rules.length > 0 || assessment.securitySensitive || assessment.task.type === "security") {
|
|
73
|
+
minTier = "strong";
|
|
74
|
+
escalations.push("security_sensitive");
|
|
75
|
+
}
|
|
76
|
+
else if (assessment.task.risk >= 0.66) {
|
|
77
|
+
minTier = "strong";
|
|
78
|
+
escalations.push("high_risk");
|
|
79
|
+
}
|
|
80
|
+
else if (assessment.task.type === "architecture" && assessment.task.complexity >= 0.75) {
|
|
81
|
+
minTier = "strong";
|
|
82
|
+
escalations.push("architecture_complexity");
|
|
83
|
+
}
|
|
84
|
+
let requiredTier = maxTier(recommendedTier, minTier);
|
|
85
|
+
if (assessment.confidence < options.minConfidence) {
|
|
86
|
+
const raised = nextTier(requiredTier);
|
|
87
|
+
if (raised) {
|
|
88
|
+
requiredTier = raised;
|
|
89
|
+
escalations.push("insufficient_confidence");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Floors that do not raise the tier are not reported as escalations.
|
|
93
|
+
const effectiveEscalations = tierIndex(requiredTier) > tierIndex(recommendedTier) ? escalations : [];
|
|
94
|
+
const sensitive = minTier === "strong";
|
|
95
|
+
let effort = assessment.recommendation.effort;
|
|
96
|
+
if (sensitive && (effort === "minimal" || effort === "low"))
|
|
97
|
+
effort = "medium";
|
|
98
|
+
const validationLevel = sensitive && VALIDATION_LEVELS.indexOf(assessment.validation) < VALIDATION_LEVELS.indexOf("review")
|
|
99
|
+
? "review"
|
|
100
|
+
: assessment.validation;
|
|
101
|
+
return {
|
|
102
|
+
recommendedTier,
|
|
103
|
+
requiredTier,
|
|
104
|
+
minTier,
|
|
105
|
+
effort,
|
|
106
|
+
thinkingLevel: EFFORT_TO_THINKING[effort],
|
|
107
|
+
validation: { required: sensitive || validationLevel !== "none", level: validationLevel },
|
|
108
|
+
rules,
|
|
109
|
+
escalations: effectiveEscalations,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Relative availability of each provider's subscription quota, 0..1. Configured values come from
|
|
114
|
+
* the `laya.quota` setting; rate-limit and overload errors lower a provider's availability for
|
|
115
|
+
* ten minutes, so equivalent models of other providers win in the meantime.
|
|
116
|
+
*/
|
|
117
|
+
export class QuotaManager {
|
|
118
|
+
configured = {};
|
|
119
|
+
penalties = new Map();
|
|
120
|
+
now;
|
|
121
|
+
constructor(now = Date.now) {
|
|
122
|
+
this.now = now;
|
|
123
|
+
}
|
|
124
|
+
configure(quota) {
|
|
125
|
+
this.configured = { ...(quota ?? {}) };
|
|
126
|
+
}
|
|
127
|
+
/** Records a rate-limit or overload error from `provider`. */
|
|
128
|
+
recordPressure(provider) {
|
|
129
|
+
const current = this.penaltyOf(provider);
|
|
130
|
+
this.penalties.set(provider, { amount: Math.min(0.9, current + 0.5), at: this.now() });
|
|
131
|
+
}
|
|
132
|
+
available(provider) {
|
|
133
|
+
const configured = Math.min(1, Math.max(0, this.configured[provider] ?? 1));
|
|
134
|
+
return configured * (1 - this.penaltyOf(provider));
|
|
135
|
+
}
|
|
136
|
+
snapshot(providers) {
|
|
137
|
+
return Object.fromEntries([...providers].map((provider) => [provider, Number(this.available(provider).toFixed(2))]));
|
|
138
|
+
}
|
|
139
|
+
penaltyOf(provider) {
|
|
140
|
+
const penalty = this.penalties.get(provider);
|
|
141
|
+
if (!penalty)
|
|
142
|
+
return 0;
|
|
143
|
+
const remaining = 1 - (this.now() - penalty.at) / 600_000;
|
|
144
|
+
return remaining > 0 ? penalty.amount * remaining : 0;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/** History key: task type plus complexity level, e.g. `bug_fix:2`. */
|
|
148
|
+
export function taskKey(assessment) {
|
|
149
|
+
return `${assessment.task.type}:${Math.round(assessment.task.complexity * 4)}`;
|
|
150
|
+
}
|
|
151
|
+
/** Observed outcomes per task class and model, from telemetry. */
|
|
152
|
+
export class PerformanceHistory {
|
|
153
|
+
outcomes = new Map();
|
|
154
|
+
record(key, model, success) {
|
|
155
|
+
const id = `${key}|${model}`;
|
|
156
|
+
const entry = this.outcomes.get(id) ?? { runs: 0, successes: 0 };
|
|
157
|
+
entry.runs++;
|
|
158
|
+
if (success)
|
|
159
|
+
entry.successes++;
|
|
160
|
+
this.outcomes.set(id, entry);
|
|
161
|
+
}
|
|
162
|
+
get(key, model) {
|
|
163
|
+
return this.outcomes.get(`${key}|${model}`);
|
|
164
|
+
}
|
|
165
|
+
/** P(success | task, model): the prior blended with observed runs. */
|
|
166
|
+
successProbability(key, model, prior) {
|
|
167
|
+
const observed = this.get(key, model);
|
|
168
|
+
if (!observed)
|
|
169
|
+
return prior;
|
|
170
|
+
return (prior * PRIOR_RUNS + observed.successes) / (PRIOR_RUNS + observed.runs);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Scores every candidate with the profile's utility
|
|
175
|
+
* `quality * P(success) - cost * quota_cost - latency * latency - risk * failure_risk`
|
|
176
|
+
* and sorts the best first. Candidates below the minimum tier are dropped. A candidate is eligible
|
|
177
|
+
* when its success probability reaches the profile minimum; when none is, the most likely one wins.
|
|
178
|
+
*/
|
|
179
|
+
export function rankCandidates(candidates, input) {
|
|
180
|
+
const weights = PROFILES[input.profile];
|
|
181
|
+
const required = tierIndex(input.requiredTier);
|
|
182
|
+
const scored = candidates
|
|
183
|
+
.filter((candidate) => tierIndex(candidate.tier) >= tierIndex(input.minTier))
|
|
184
|
+
.filter((candidate) => input.quota.available(candidate.provider) > 0.05)
|
|
185
|
+
.map((candidate) => {
|
|
186
|
+
const priors = TIER_PRIORS[candidate.tier];
|
|
187
|
+
const gap = tierIndex(candidate.tier) - required;
|
|
188
|
+
const prior = Math.min(0.99, Math.max(0.05, MATCHED_SUCCESS + (gap > 0 ? OVERPOWERED_BONUS : UNDERPOWERED_PENALTY) * gap));
|
|
189
|
+
const success = input.history.successProbability(input.taskKey, candidate.ref, prior);
|
|
190
|
+
// Scarce quota makes a model more expensive to use, not less likely to succeed.
|
|
191
|
+
const cost = Math.min(1, priors.cost * (2 - input.quota.available(candidate.provider)));
|
|
192
|
+
const failureRisk = (1 - success) * Math.max(input.risk, 0.2);
|
|
193
|
+
const utility = weights.quality * success -
|
|
194
|
+
weights.cost * cost -
|
|
195
|
+
weights.latency * priors.latency -
|
|
196
|
+
weights.risk * failureRisk;
|
|
197
|
+
return {
|
|
198
|
+
...candidate,
|
|
199
|
+
success,
|
|
200
|
+
cost,
|
|
201
|
+
latency: priors.latency,
|
|
202
|
+
utility,
|
|
203
|
+
eligible: success >= weights.minSuccess,
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
const anyEligible = scored.some((candidate) => candidate.eligible);
|
|
207
|
+
return scored.sort((a, b) => {
|
|
208
|
+
if (anyEligible && a.eligible !== b.eligible)
|
|
209
|
+
return a.eligible ? -1 : 1;
|
|
210
|
+
if (!anyEligible)
|
|
211
|
+
return b.success - a.success || a.order - b.order;
|
|
212
|
+
return b.utility - a.utility || a.order - b.order;
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/** Parses `provider/model`; the model id may itself contain slashes. */
|
|
216
|
+
export function parseModelRef(ref) {
|
|
217
|
+
const slash = ref.indexOf("/");
|
|
218
|
+
if (slash <= 0 || slash === ref.length - 1)
|
|
219
|
+
return undefined;
|
|
220
|
+
return { provider: ref.slice(0, slash), id: ref.slice(slash + 1) };
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/extensions/laya/policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModelThinkingLevel } from \"@relay-harness/ai\";\nimport type { TaskAssessment } from \"./assessment.ts\";\nimport {\n\tCAPABILITY_TIERS,\n\ttype CapabilityTier,\n\ttype ReasoningEffort,\n\tVALIDATION_LEVELS,\n\ttype ValidationLevel,\n} from \"./questions.ts\";\n\n/**\n * Policy engine: turns Laya's recommendation into a model choice the harness accepts.\n *\n * Laya recommends; the harness decides. Deterministic rules set floors that Laya cannot lower,\n * the model registry maps abstract tiers to concrete models, the quota manager and performance\n * history adjust each candidate, and a profile-weighted utility picks the cheapest model that is\n * likely enough to succeed.\n */\n\nexport const POLICY_PROFILES = [\"economy\", \"balanced\", \"quality\", \"critical\"] as const;\nexport type PolicyProfile = (typeof POLICY_PROFILES)[number];\n\nexport interface ProfileWeights {\n\tquality: number;\n\tcost: number;\n\tlatency: number;\n\trisk: number;\n\t/** Minimum estimated success probability a model needs to be chosen. */\n\tminSuccess: number;\n}\n\nexport const PROFILES: Record<PolicyProfile, ProfileWeights> = {\n\teconomy: { quality: 0.3, cost: 0.5, latency: 0.2, risk: 0, minSuccess: 0.75 },\n\tbalanced: { quality: 0.45, cost: 0.3, latency: 0.15, risk: 0.1, minSuccess: 0.85 },\n\tquality: { quality: 0.7, cost: 0.1, latency: 0, risk: 0.2, minSuccess: 0.9 },\n\tcritical: { quality: 0.7, cost: 0, latency: 0, risk: 0.3, minSuccess: 0.95 },\n};\n\n/**\n * Concrete models per tier as `provider/model`, in preference order. Only models whose provider\n * has credentials are candidates. Override with the `laya.models` setting.\n */\nexport const DEFAULT_MODEL_REGISTRY: Record<CapabilityTier, string[]> = {\n\tfast: [\"anthropic/claude-haiku-4-5\", \"openai-codex/gpt-6-luna\", \"google/gemini-3.5-flash\"],\n\tbalanced: [\"anthropic/claude-sonnet-5-5\", \"openai-codex/gpt-5.6-terra\", \"google/gemini-3.8-flash\"],\n\tstrong: [\"anthropic/claude-opus-5-5\", \"openai-codex/gpt-6-sol\", \"google/gemini-3.1-pro-preview\"],\n\tfrontier: [\"anthropic/claude-fable-5-1\", \"openai-codex/gpt-6.1-sol\"],\n};\n\n/** Relative quota cost and latency per tier, 0..1. */\nconst TIER_PRIORS: Record<CapabilityTier, { cost: number; latency: number }> = {\n\tfast: { cost: 0.1, latency: 0.15 },\n\tbalanced: { cost: 0.35, latency: 0.35 },\n\tstrong: { cost: 0.65, latency: 0.6 },\n\tfrontier: { cost: 0.9, latency: 0.85 },\n};\n\n/**\n * Prior success probability relative to the tier the task requires: a model of exactly that tier is\n * sufficient, each tier above adds a little, each tier below loses a lot.\n */\nconst MATCHED_SUCCESS = 0.9;\nconst OVERPOWERED_BONUS = 0.04;\nconst UNDERPOWERED_PENALTY = 0.18;\n\n/** Weight of the prior, in runs, when blending it with observed history. */\nconst PRIOR_RUNS = 5;\n\nexport const tierIndex = (tier: CapabilityTier) => CAPABILITY_TIERS.indexOf(tier);\nexport const maxTier = (a: CapabilityTier, b: CapabilityTier) => (tierIndex(a) >= tierIndex(b) ? a : b);\nexport function nextTier(tier: CapabilityTier): CapabilityTier | undefined {\n\treturn CAPABILITY_TIERS[tierIndex(tier) + 1];\n}\n\n/** Requests that must not run on a weak model, whatever Laya says. */\nexport const DETERMINISTIC_RULES: Array<{ id: string; pattern: RegExp }> = [\n\t{\n\t\tid: \"production-database-migration\",\n\t\tpattern:\n\t\t\t/(migrat|migra[cç]|\\bdrop\\b|backfill|alter table).*(produc|produ[cç])|(produc|produ[cç]).*(migrat|migra[cç]|\\bdrop\\b|backfill|alter table)/i,\n\t},\n\t{ id: \"authentication\", pattern: /\\bauth|login|oauth|\\bsso\\b|password|senha|session token|jwt/i },\n\t{ id: \"security-vulnerability\", pattern: /vulnerab|inje[cç]|\\bxss\\b|csrf|\\bcve-|exploit|privilege escalation/i },\n\t{ id: \"payment-processing\", pattern: /payment|pagamento|billing|cobran[cç]a|stripe|checkout|invoice|fatura/i },\n];\n\n/** The top effort maps to `xhigh`; routing never uses `max`. */\nexport const EFFORT_TO_THINKING: Record<ReasoningEffort, ModelThinkingLevel> = {\n\tminimal: \"minimal\",\n\tlow: \"low\",\n\tmedium: \"medium\",\n\thigh: \"high\",\n\textra_high: \"xhigh\",\n};\n\nexport interface PolicyOptions {\n\t/** Answers below this confidence raise the tier by one (`insufficient_confidence`). */\n\tminConfidence: number;\n}\n\nexport interface PolicyDecision {\n\t/** Tier Laya recommended. */\n\trecommendedTier: CapabilityTier;\n\t/** Tier the policy requires: the recommendation raised by rules and low confidence. */\n\trequiredTier: CapabilityTier;\n\t/** Hard floor: no model below this tier is chosen. */\n\tminTier: CapabilityTier;\n\teffort: ReasoningEffort;\n\tthinkingLevel: ModelThinkingLevel;\n\tvalidation: { required: boolean; level: ValidationLevel };\n\t/** Deterministic rules that fired. */\n\trules: string[];\n\t/** Why the tier differs from Laya's recommendation. */\n\tescalations: EscalationReason[];\n}\n\nexport type EscalationReason =\n\t| \"insufficient_confidence\"\n\t| \"test_failure\"\n\t| \"missing_context\"\n\t| \"high_risk\"\n\t| \"repeated_failure\"\n\t| \"architecture_complexity\"\n\t| \"security_sensitive\"\n\t| \"provider_unavailable\";\n\n/** Applies the deterministic rules and the confidence threshold to Laya's assessment. */\nexport function applyPolicy(assessment: TaskAssessment, request: string, options: PolicyOptions): PolicyDecision {\n\tconst recommendedTier = assessment.recommendation.tier;\n\tconst rules = DETERMINISTIC_RULES.filter((rule) => rule.pattern.test(request)).map((rule) => rule.id);\n\tconst escalations: EscalationReason[] = [];\n\tlet minTier: CapabilityTier = \"fast\";\n\tif (rules.length > 0 || assessment.securitySensitive || assessment.task.type === \"security\") {\n\t\tminTier = \"strong\";\n\t\tescalations.push(\"security_sensitive\");\n\t} else if (assessment.task.risk >= 0.66) {\n\t\tminTier = \"strong\";\n\t\tescalations.push(\"high_risk\");\n\t} else if (assessment.task.type === \"architecture\" && assessment.task.complexity >= 0.75) {\n\t\tminTier = \"strong\";\n\t\tescalations.push(\"architecture_complexity\");\n\t}\n\tlet requiredTier = maxTier(recommendedTier, minTier);\n\tif (assessment.confidence < options.minConfidence) {\n\t\tconst raised = nextTier(requiredTier);\n\t\tif (raised) {\n\t\t\trequiredTier = raised;\n\t\t\tescalations.push(\"insufficient_confidence\");\n\t\t}\n\t}\n\t// Floors that do not raise the tier are not reported as escalations.\n\tconst effectiveEscalations = tierIndex(requiredTier) > tierIndex(recommendedTier) ? escalations : [];\n\n\tconst sensitive = minTier === \"strong\";\n\tlet effort = assessment.recommendation.effort;\n\tif (sensitive && (effort === \"minimal\" || effort === \"low\")) effort = \"medium\";\n\tconst validationLevel: ValidationLevel =\n\t\tsensitive && VALIDATION_LEVELS.indexOf(assessment.validation) < VALIDATION_LEVELS.indexOf(\"review\")\n\t\t\t? \"review\"\n\t\t\t: assessment.validation;\n\treturn {\n\t\trecommendedTier,\n\t\trequiredTier,\n\t\tminTier,\n\t\teffort,\n\t\tthinkingLevel: EFFORT_TO_THINKING[effort],\n\t\tvalidation: { required: sensitive || validationLevel !== \"none\", level: validationLevel },\n\t\trules,\n\t\tescalations: effectiveEscalations,\n\t};\n}\n\n/**\n * Relative availability of each provider's subscription quota, 0..1. Configured values come from\n * the `laya.quota` setting; rate-limit and overload errors lower a provider's availability for\n * ten minutes, so equivalent models of other providers win in the meantime.\n */\nexport class QuotaManager {\n\tprivate configured: Record<string, number> = {};\n\tprivate penalties = new Map<string, { amount: number; at: number }>();\n\tprivate readonly now: () => number;\n\n\tconstructor(now: () => number = Date.now) {\n\t\tthis.now = now;\n\t}\n\n\tconfigure(quota: Record<string, number> | undefined): void {\n\t\tthis.configured = { ...(quota ?? {}) };\n\t}\n\n\t/** Records a rate-limit or overload error from `provider`. */\n\trecordPressure(provider: string): void {\n\t\tconst current = this.penaltyOf(provider);\n\t\tthis.penalties.set(provider, { amount: Math.min(0.9, current + 0.5), at: this.now() });\n\t}\n\n\tavailable(provider: string): number {\n\t\tconst configured = Math.min(1, Math.max(0, this.configured[provider] ?? 1));\n\t\treturn configured * (1 - this.penaltyOf(provider));\n\t}\n\n\tsnapshot(providers: Iterable<string>): Record<string, number> {\n\t\treturn Object.fromEntries(\n\t\t\t[...providers].map((provider) => [provider, Number(this.available(provider).toFixed(2))]),\n\t\t);\n\t}\n\n\tprivate penaltyOf(provider: string): number {\n\t\tconst penalty = this.penalties.get(provider);\n\t\tif (!penalty) return 0;\n\t\tconst remaining = 1 - (this.now() - penalty.at) / 600_000;\n\t\treturn remaining > 0 ? penalty.amount * remaining : 0;\n\t}\n}\n\n/** History key: task type plus complexity level, e.g. `bug_fix:2`. */\nexport function taskKey(assessment: Pick<TaskAssessment, \"task\">): string {\n\treturn `${assessment.task.type}:${Math.round(assessment.task.complexity * 4)}`;\n}\n\n/** Observed outcomes per task class and model, from telemetry. */\nexport class PerformanceHistory {\n\tprivate outcomes = new Map<string, { runs: number; successes: number }>();\n\n\trecord(key: string, model: string, success: boolean): void {\n\t\tconst id = `${key}|${model}`;\n\t\tconst entry = this.outcomes.get(id) ?? { runs: 0, successes: 0 };\n\t\tentry.runs++;\n\t\tif (success) entry.successes++;\n\t\tthis.outcomes.set(id, entry);\n\t}\n\n\tget(key: string, model: string): { runs: number; successes: number } | undefined {\n\t\treturn this.outcomes.get(`${key}|${model}`);\n\t}\n\n\t/** P(success | task, model): the prior blended with observed runs. */\n\tsuccessProbability(key: string, model: string, prior: number): number {\n\t\tconst observed = this.get(key, model);\n\t\tif (!observed) return prior;\n\t\treturn (prior * PRIOR_RUNS + observed.successes) / (PRIOR_RUNS + observed.runs);\n\t}\n}\n\nexport interface Candidate {\n\t/** `provider/model` */\n\tref: string;\n\tprovider: string;\n\ttier: CapabilityTier;\n\t/** Position in the registry; breaks ties in favor of the configured preference. */\n\torder: number;\n}\n\nexport interface ScoredCandidate extends Candidate {\n\tsuccess: number;\n\tcost: number;\n\tlatency: number;\n\tutility: number;\n\teligible: boolean;\n}\n\nexport interface RankInput {\n\trequiredTier: CapabilityTier;\n\tminTier: CapabilityTier;\n\t/** Task risk, 0..1. */\n\trisk: number;\n\tprofile: PolicyProfile;\n\ttaskKey: string;\n\thistory: PerformanceHistory;\n\tquota: QuotaManager;\n}\n\n/**\n * Scores every candidate with the profile's utility\n * `quality * P(success) - cost * quota_cost - latency * latency - risk * failure_risk`\n * and sorts the best first. Candidates below the minimum tier are dropped. A candidate is eligible\n * when its success probability reaches the profile minimum; when none is, the most likely one wins.\n */\nexport function rankCandidates(candidates: readonly Candidate[], input: RankInput): ScoredCandidate[] {\n\tconst weights = PROFILES[input.profile];\n\tconst required = tierIndex(input.requiredTier);\n\tconst scored = candidates\n\t\t.filter((candidate) => tierIndex(candidate.tier) >= tierIndex(input.minTier))\n\t\t.filter((candidate) => input.quota.available(candidate.provider) > 0.05)\n\t\t.map((candidate): ScoredCandidate => {\n\t\t\tconst priors = TIER_PRIORS[candidate.tier];\n\t\t\tconst gap = tierIndex(candidate.tier) - required;\n\t\t\tconst prior = Math.min(\n\t\t\t\t0.99,\n\t\t\t\tMath.max(0.05, MATCHED_SUCCESS + (gap > 0 ? OVERPOWERED_BONUS : UNDERPOWERED_PENALTY) * gap),\n\t\t\t);\n\t\t\tconst success = input.history.successProbability(input.taskKey, candidate.ref, prior);\n\t\t\t// Scarce quota makes a model more expensive to use, not less likely to succeed.\n\t\t\tconst cost = Math.min(1, priors.cost * (2 - input.quota.available(candidate.provider)));\n\t\t\tconst failureRisk = (1 - success) * Math.max(input.risk, 0.2);\n\t\t\tconst utility =\n\t\t\t\tweights.quality * success -\n\t\t\t\tweights.cost * cost -\n\t\t\t\tweights.latency * priors.latency -\n\t\t\t\tweights.risk * failureRisk;\n\t\t\treturn {\n\t\t\t\t...candidate,\n\t\t\t\tsuccess,\n\t\t\t\tcost,\n\t\t\t\tlatency: priors.latency,\n\t\t\t\tutility,\n\t\t\t\teligible: success >= weights.minSuccess,\n\t\t\t};\n\t\t});\n\tconst anyEligible = scored.some((candidate) => candidate.eligible);\n\treturn scored.sort((a, b) => {\n\t\tif (anyEligible && a.eligible !== b.eligible) return a.eligible ? -1 : 1;\n\t\tif (!anyEligible) return b.success - a.success || a.order - b.order;\n\t\treturn b.utility - a.utility || a.order - b.order;\n\t});\n}\n\n/** Parses `provider/model`; the model id may itself contain slashes. */\nexport function parseModelRef(ref: string): { provider: string; id: string } | undefined {\n\tconst slash = ref.indexOf(\"/\");\n\tif (slash <= 0 || slash === ref.length - 1) return undefined;\n\treturn { provider: ref.slice(0, slash), id: ref.slice(slash + 1) };\n}\n"]}
|