@astralyn/pi 0.99.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -3
- package/dist/bundle/chunks/anthropic-messages-YET4T7BO.js +6 -0
- package/dist/bundle/chunks/anthropic.js +2 -2
- package/dist/bundle/chunks/azure-openai-responses-SBLL5YN3.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +3 -3
- package/dist/bundle/chunks/chunk-4TT2QGFL.js +2 -0
- package/dist/bundle/chunks/chunk-GIG5IHES.js +2 -0
- package/dist/bundle/chunks/{chunk-VW2P3X6P.js → chunk-H2N2THAO.js} +436 -668
- package/dist/bundle/chunks/{chunk-A576H74Y.js → chunk-IZ3S3GDX.js} +1 -1
- package/dist/bundle/chunks/{chunk-ABVRAYXT.js → chunk-NY3CWK44.js} +2 -2
- package/dist/bundle/chunks/chunk-SVJ7OGEB.js +2 -0
- package/dist/bundle/chunks/chunk-TRHTWM3C.js +2 -0
- package/dist/bundle/chunks/{chunk-DEWXBB6W.js → chunk-V66VGGOM.js} +1 -1
- package/dist/bundle/chunks/chunk-XDYM2567.js +20 -0
- package/dist/bundle/chunks/{cloudflare-workers-ai-system-one-ZYSAFXXL.js → cloudflare-workers-ai-system-one-QI46LUZ6.js} +1 -1
- package/dist/bundle/chunks/codemode-worker.js +90 -10
- package/dist/bundle/chunks/github-copilot.js +1 -1
- package/dist/bundle/chunks/{google-generative-ai-SDNQVVXA.js → google-generative-ai-YTZCSHQN.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-LZXOLBIO.js → google-vertex-OTFZJJXQ.js} +1 -1
- package/dist/bundle/chunks/{llama-cpp-classify-7IYGGPND.js → llama-cpp-classify-R7DQLTQN.js} +1 -1
- package/dist/bundle/chunks/{mistral-conversations-VYKPSSAM.js → mistral-conversations-ELH4V4TY.js} +1 -1
- package/dist/bundle/chunks/node-USQQ7C6M.js +16 -0
- package/dist/bundle/chunks/openai-chatgpt.js +2 -2
- package/dist/bundle/chunks/{openai-codex-responses-HZ4VUDXD.js → openai-codex-responses-OLVTU4UA.js} +1 -1
- package/dist/bundle/chunks/openai-codex.js +1 -1
- package/dist/bundle/chunks/openai-completions-53M2KJ67.js +7 -0
- package/dist/bundle/chunks/openai-responses-4ABDEL4Z.js +3 -0
- package/dist/bundle/chunks/{openrouter-images-5524IQHX.js → openrouter-images-YP3YVB54.js} +1 -1
- package/dist/bundle/chunks/openrouter.js +1 -1
- package/dist/bundle/chunks/radius.js +1 -1
- package/dist/bundle/chunks/{typesafe-system-one-Z2CDLKEY.js → typesafe-system-one-RREJAKWB.js} +1 -1
- package/dist/bundle/chunks/virtual-modules-YFKU7JZF.js +2 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +5 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/config.d.ts +5 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -13
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +21 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +65 -12
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +3 -3
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +3 -3
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +18 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +6 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +15 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +51 -11
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +11 -3
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mcp-servers.d.ts +40 -7
- package/dist/core/mcp-servers.d.ts.map +1 -1
- package/dist/core/mcp-servers.js +63 -11
- package/dist/core/mcp-servers.js.map +1 -1
- package/dist/core/model-config.d.ts +36 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +14 -2
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts +3 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +4 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +6 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +22 -18
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/provider-composer.d.ts +2 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +13 -0
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/radius.d.ts +2 -0
- package/dist/core/radius.d.ts.map +1 -1
- package/dist/core/radius.js +2 -0
- package/dist/core/radius.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +4 -9
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +7 -5
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tasks/format.d.ts +7 -0
- package/dist/core/tasks/format.d.ts.map +1 -0
- package/dist/core/tasks/format.js +14 -0
- package/dist/core/tasks/format.js.map +1 -0
- package/dist/core/tasks/history.d.ts.map +1 -1
- package/dist/core/tasks/history.js +0 -19
- package/dist/core/tasks/history.js.map +1 -1
- package/dist/core/tasks/output.d.ts +8 -0
- package/dist/core/tasks/output.d.ts.map +1 -1
- package/dist/core/tasks/output.js +19 -0
- package/dist/core/tasks/output.js.map +1 -1
- package/dist/core/tasks/presentation.d.ts +1 -3
- package/dist/core/tasks/presentation.d.ts.map +1 -1
- package/dist/core/tasks/presentation.js +79 -166
- package/dist/core/tasks/presentation.js.map +1 -1
- package/dist/core/tasks/runtime.d.ts +16 -9
- package/dist/core/tasks/runtime.d.ts.map +1 -1
- package/dist/core/tasks/runtime.js +89 -106
- package/dist/core/tasks/runtime.js.map +1 -1
- package/dist/core/tasks/session.d.ts.map +1 -1
- package/dist/core/tasks/session.js +13 -4
- package/dist/core/tasks/session.js.map +1 -1
- package/dist/core/tasks/store.d.ts +20 -6
- package/dist/core/tasks/store.d.ts.map +1 -1
- package/dist/core/tasks/store.js +45 -18
- package/dist/core/tasks/store.js.map +1 -1
- package/dist/core/tasks/types.d.ts +14 -54
- package/dist/core/tasks/types.d.ts.map +1 -1
- package/dist/core/tasks/types.js +1 -5
- package/dist/core/tasks/types.js.map +1 -1
- package/dist/core/tools/renderers/bash.d.ts.map +1 -1
- package/dist/core/tools/renderers/bash.js +11 -34
- package/dist/core/tools/renderers/bash.js.map +1 -1
- package/dist/core/tools/renderers/index.d.ts +2 -2
- package/dist/core/tools/renderers/index.d.ts.map +1 -1
- package/dist/core/tools/renderers/index.js.map +1 -1
- package/dist/core/tools/shell-execution.d.ts +0 -1
- package/dist/core/tools/shell-execution.d.ts.map +1 -1
- package/dist/core/tools/shell-execution.js +3 -10
- package/dist/core/tools/shell-execution.js.map +1 -1
- package/dist/core/tools/shell-tool.d.ts.map +1 -1
- package/dist/core/tools/shell-tool.js +2 -4
- package/dist/core/tools/shell-tool.js.map +1 -1
- package/dist/core/tools/tasks/actions.d.ts +1 -1
- package/dist/core/tools/tasks/actions.d.ts.map +1 -1
- package/dist/core/tools/tasks/actions.js +26 -12
- package/dist/core/tools/tasks/actions.js.map +1 -1
- package/dist/core/tools/tasks/constants.d.ts +2 -6
- package/dist/core/tools/tasks/constants.d.ts.map +1 -1
- package/dist/core/tools/tasks/constants.js +2 -6
- package/dist/core/tools/tasks/constants.js.map +1 -1
- package/dist/core/tools/tasks/schema.d.ts +1 -1
- package/dist/core/tools/tasks/schema.d.ts.map +1 -1
- package/dist/core/tools/tasks/schema.js +8 -7
- package/dist/core/tools/tasks/schema.js.map +1 -1
- package/dist/core/tools/tasks/types.d.ts +8 -38
- package/dist/core/tools/tasks/types.d.ts.map +1 -1
- package/dist/core/tools/tasks/types.js +6 -11
- package/dist/core/tools/tasks/types.js.map +1 -1
- package/dist/core/virtual-models.d.ts +2 -0
- package/dist/core/virtual-models.d.ts.map +1 -1
- package/dist/core/virtual-models.js +19 -12
- package/dist/core/virtual-models.js.map +1 -1
- package/dist/extensions/btw/agent.d.ts +17 -8
- package/dist/extensions/btw/agent.d.ts.map +1 -1
- package/dist/extensions/btw/agent.js +74 -76
- package/dist/extensions/btw/agent.js.map +1 -1
- package/dist/extensions/btw/controller.d.ts +0 -1
- package/dist/extensions/btw/controller.d.ts.map +1 -1
- package/dist/extensions/btw/controller.js +26 -33
- package/dist/extensions/btw/controller.js.map +1 -1
- package/dist/extensions/btw/panel.d.ts +13 -14
- package/dist/extensions/btw/panel.d.ts.map +1 -1
- package/dist/extensions/btw/panel.js +38 -29
- package/dist/extensions/btw/panel.js.map +1 -1
- package/dist/extensions/codemode/execute.d.ts.map +1 -1
- package/dist/extensions/codemode/execute.js +197 -51
- package/dist/extensions/codemode/execute.js.map +1 -1
- package/dist/extensions/codemode/renderer.d.ts.map +1 -1
- package/dist/extensions/codemode/renderer.js +43 -25
- package/dist/extensions/codemode/renderer.js.map +1 -1
- package/dist/extensions/codemode/tool.d.ts +12 -11
- package/dist/extensions/codemode/tool.d.ts.map +1 -1
- package/dist/extensions/codemode/tool.js +73 -129
- package/dist/extensions/codemode/tool.js.map +1 -1
- package/dist/extensions/codemode/worker.d.ts +1 -1
- package/dist/extensions/codemode/worker.js +1 -1
- package/dist/extensions/codemode/worker.js.map +1 -1
- package/dist/extensions/deepwiki/schema.d.ts +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +0 -2
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/mcp/cli.d.ts.map +1 -1
- package/dist/extensions/mcp/cli.js +23 -5
- package/dist/extensions/mcp/cli.js.map +1 -1
- package/dist/extensions/mcp/config.d.ts +19 -5
- package/dist/extensions/mcp/config.d.ts.map +1 -1
- package/dist/extensions/mcp/config.js +60 -12
- package/dist/extensions/mcp/config.js.map +1 -1
- package/dist/extensions/mcp/index.d.ts +36 -9
- package/dist/extensions/mcp/index.d.ts.map +1 -1
- package/dist/extensions/mcp/index.js +309 -100
- package/dist/extensions/mcp/index.js.map +1 -1
- package/dist/extensions/mcp/oauth.d.ts +14 -8
- package/dist/extensions/mcp/oauth.d.ts.map +1 -1
- package/dist/extensions/mcp/oauth.js +105 -36
- package/dist/extensions/mcp/oauth.js.map +1 -1
- package/dist/extensions/mcp/runtime.d.ts +2 -0
- package/dist/extensions/mcp/runtime.d.ts.map +1 -1
- package/dist/extensions/mcp/runtime.js +17 -9
- package/dist/extensions/mcp/runtime.js.map +1 -1
- package/dist/extensions/mcp/tools.d.ts +8 -5
- package/dist/extensions/mcp/tools.d.ts.map +1 -1
- package/dist/extensions/mcp/tools.js +50 -26
- package/dist/extensions/mcp/tools.js.map +1 -1
- package/dist/extensions/mcp/ui.d.ts.map +1 -1
- package/dist/extensions/mcp/ui.js +7 -1
- package/dist/extensions/mcp/ui.js.map +1 -1
- package/dist/extensions/provider/catalog.d.ts +8 -1
- package/dist/extensions/provider/catalog.d.ts.map +1 -1
- package/dist/extensions/provider/catalog.js +31 -0
- package/dist/extensions/provider/catalog.js.map +1 -1
- package/dist/extensions/provider/connection.d.ts +4 -1
- package/dist/extensions/provider/connection.d.ts.map +1 -1
- package/dist/extensions/provider/connection.js +1 -5
- package/dist/extensions/provider/connection.js.map +1 -1
- package/dist/extensions/provider/editing.d.ts +36 -0
- package/dist/extensions/provider/editing.d.ts.map +1 -0
- package/dist/extensions/provider/editing.js +99 -0
- package/dist/extensions/provider/editing.js.map +1 -0
- package/dist/extensions/provider/json-fields.d.ts +5 -0
- package/dist/extensions/provider/json-fields.d.ts.map +1 -0
- package/dist/extensions/provider/json-fields.js +31 -0
- package/dist/extensions/provider/json-fields.js.map +1 -0
- package/dist/extensions/provider/store.d.ts +1 -4
- package/dist/extensions/provider/store.d.ts.map +1 -1
- package/dist/extensions/provider/store.js +2 -30
- package/dist/extensions/provider/store.js.map +1 -1
- package/dist/extensions/provider/ui/builtin-data.d.ts +0 -2
- package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
- package/dist/extensions/provider/ui/builtin-data.js +14 -79
- package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
- package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
- package/dist/extensions/provider/ui/compat.js +6 -9
- package/dist/extensions/provider/ui/compat.js.map +1 -1
- package/dist/extensions/provider/ui/controls.d.ts +48 -0
- package/dist/extensions/provider/ui/controls.d.ts.map +1 -0
- package/dist/extensions/provider/ui/controls.js +108 -0
- package/dist/extensions/provider/ui/controls.js.map +1 -0
- package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
- package/dist/extensions/provider/ui/dictionary.js +6 -9
- package/dist/extensions/provider/ui/dictionary.js.map +1 -1
- package/dist/extensions/provider/ui/editor.d.ts +3 -3
- package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
- package/dist/extensions/provider/ui/editor.js +35 -140
- package/dist/extensions/provider/ui/editor.js.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.d.ts +0 -3
- package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.js +49 -44
- package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
- package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-fields.js +11 -14
- package/dist/extensions/provider/ui/model-fields.js.map +1 -1
- package/dist/extensions/provider/ui/model-options.d.ts +4 -34
- package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-options.js +90 -271
- package/dist/extensions/provider/ui/model-options.js.map +1 -1
- package/dist/extensions/provider/ui/pane.d.ts +4 -18
- package/dist/extensions/provider/ui/pane.d.ts.map +1 -1
- package/dist/extensions/provider/ui/pane.js.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.d.ts +2 -19
- package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.js +58 -171
- package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.js +6 -9
- package/dist/extensions/provider/ui/thinking-map.js.map +1 -1
- package/dist/extensions/question/detail-pane.d.ts +7 -2
- package/dist/extensions/question/detail-pane.d.ts.map +1 -1
- package/dist/extensions/question/detail-pane.js +16 -5
- package/dist/extensions/question/detail-pane.js.map +1 -1
- package/dist/extensions/question/dialog-view.d.ts +41 -0
- package/dist/extensions/question/dialog-view.d.ts.map +1 -0
- package/dist/extensions/question/dialog-view.js +329 -0
- package/dist/extensions/question/dialog-view.js.map +1 -0
- package/dist/extensions/question/dialog.d.ts +3 -3
- package/dist/extensions/question/dialog.d.ts.map +1 -1
- package/dist/extensions/question/dialog.js +220 -634
- package/dist/extensions/question/dialog.js.map +1 -1
- package/dist/extensions/question/index.d.ts.map +1 -1
- package/dist/extensions/question/index.js +2 -3
- package/dist/extensions/question/index.js.map +1 -1
- package/dist/extensions/question/render.d.ts.map +1 -1
- package/dist/extensions/question/render.js +22 -32
- package/dist/extensions/question/render.js.map +1 -1
- package/dist/extensions/question/results.d.ts.map +1 -1
- package/dist/extensions/question/results.js +56 -12
- package/dist/extensions/question/results.js.map +1 -1
- package/dist/extensions/question/schema.d.ts +21 -6
- package/dist/extensions/question/schema.d.ts.map +1 -1
- package/dist/extensions/question/schema.js.map +1 -1
- package/dist/extensions/question/state.d.ts +9 -7
- package/dist/extensions/question/state.d.ts.map +1 -1
- package/dist/extensions/question/state.js +63 -54
- package/dist/extensions/question/state.js.map +1 -1
- package/dist/extensions/question/types.d.ts +41 -18
- package/dist/extensions/question/types.d.ts.map +1 -1
- package/dist/extensions/question/types.js.map +1 -1
- package/dist/extensions/statusline/index.d.ts +4 -0
- package/dist/extensions/statusline/index.d.ts.map +1 -1
- package/dist/extensions/statusline/index.js +18 -355
- package/dist/extensions/statusline/index.js.map +1 -1
- package/dist/extensions/statusline/render.d.ts +19 -0
- package/dist/extensions/statusline/render.d.ts.map +1 -0
- package/dist/extensions/statusline/render.js +163 -0
- package/dist/extensions/statusline/render.js.map +1 -0
- package/dist/extensions/statusline/usage.d.ts +12 -0
- package/dist/extensions/statusline/usage.d.ts.map +1 -0
- package/dist/extensions/statusline/usage.js +36 -0
- package/dist/extensions/statusline/usage.js.map +1 -0
- package/dist/extensions/tool-search/tool.d.ts +5 -4
- package/dist/extensions/tool-search/tool.d.ts.map +1 -1
- package/dist/extensions/tool-search/tool.js +7 -28
- package/dist/extensions/tool-search/tool.js.map +1 -1
- package/dist/extensions/web-search/execute.d.ts +1 -5
- package/dist/extensions/web-search/execute.d.ts.map +1 -1
- package/dist/extensions/web-search/execute.js +4 -9
- package/dist/extensions/web-search/execute.js.map +1 -1
- package/dist/extensions/web-search/format.d.ts +12 -3
- package/dist/extensions/web-search/format.d.ts.map +1 -1
- package/dist/extensions/web-search/format.js +33 -25
- package/dist/extensions/web-search/format.js.map +1 -1
- package/dist/extensions/web-search/index.d.ts.map +1 -1
- package/dist/extensions/web-search/index.js +6 -29
- package/dist/extensions/web-search/index.js.map +1 -1
- package/dist/extensions/web-search/providers/deepseek.d.ts.map +1 -1
- package/dist/extensions/web-search/providers/deepseek.js +0 -1
- package/dist/extensions/web-search/providers/deepseek.js.map +1 -1
- package/dist/extensions/web-search/providers/http.d.ts +1 -1
- package/dist/extensions/web-search/providers/http.d.ts.map +1 -1
- package/dist/extensions/web-search/providers/http.js.map +1 -1
- package/dist/extensions/web-search/providers/minimax.d.ts.map +1 -1
- package/dist/extensions/web-search/providers/minimax.js +0 -1
- package/dist/extensions/web-search/providers/minimax.js.map +1 -1
- package/dist/extensions/web-search/render.d.ts +7 -2
- package/dist/extensions/web-search/render.d.ts.map +1 -1
- package/dist/extensions/web-search/render.js +32 -4
- package/dist/extensions/web-search/render.js.map +1 -1
- package/dist/extensions/web-search/results.d.ts.map +1 -1
- package/dist/extensions/web-search/results.js +3 -8
- package/dist/extensions/web-search/results.js.map +1 -1
- package/dist/extensions/web-search/types.d.ts +4 -2
- package/dist/extensions/web-search/types.d.ts.map +1 -1
- package/dist/extensions/web-search/types.js.map +1 -1
- package/dist/index.d.ts +3 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +3 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +7 -5
- package/dist/modes/interactive/components/armin.js.map +1 -1
- 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 +34 -0
- package/dist/modes/interactive/components/auth-url.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 +1123 -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 +24 -0
- package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +0 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +0 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +2 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +9 -5
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +8 -2
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +24 -21
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/pi-logo.d.ts +7 -0
- package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -1
- package/dist/modes/interactive/components/pi-logo.js +13 -1
- package/dist/modes/interactive/components/pi-logo.js.map +1 -1
- package/dist/modes/interactive/components/radius-login-selector.d.ts +15 -0
- package/dist/modes/interactive/components/radius-login-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/radius-login-selector.js +83 -0
- package/dist/modes/interactive/components/radius-login-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +5 -5
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/status-marker.d.ts +0 -2
- package/dist/modes/interactive/components/status-marker.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-marker.js +0 -4
- package/dist/modes/interactive/components/status-marker.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +5 -4
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts +27 -3
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +36 -6
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +12 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +180 -55
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tasks/completion-render.d.ts +1 -1
- package/dist/modes/interactive/tasks/completion-render.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/completion-render.js +28 -82
- package/dist/modes/interactive/tasks/completion-render.js.map +1 -1
- package/dist/modes/interactive/tasks/index.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/index.js +18 -13
- package/dist/modes/interactive/tasks/index.js.map +1 -1
- package/dist/modes/interactive/tasks/inspector.d.ts +35 -0
- package/dist/modes/interactive/tasks/inspector.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/inspector.js +93 -0
- package/dist/modes/interactive/tasks/inspector.js.map +1 -0
- package/dist/modes/interactive/tasks/layout.d.ts +40 -0
- package/dist/modes/interactive/tasks/layout.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/layout.js +212 -0
- package/dist/modes/interactive/tasks/layout.js.map +1 -0
- package/dist/modes/interactive/tasks/list.d.ts +21 -0
- package/dist/modes/interactive/tasks/list.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/list.js +96 -0
- package/dist/modes/interactive/tasks/list.js.map +1 -0
- package/dist/modes/interactive/tasks/manager.d.ts +29 -36
- package/dist/modes/interactive/tasks/manager.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/manager.js +315 -315
- package/dist/modes/interactive/tasks/manager.js.map +1 -1
- package/dist/modes/interactive/tasks/model.d.ts +21 -0
- package/dist/modes/interactive/tasks/model.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/model.js +41 -0
- package/dist/modes/interactive/tasks/model.js.map +1 -0
- package/dist/modes/interactive/tasks/render.d.ts +5 -19
- package/dist/modes/interactive/tasks/render.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/render.js +18 -102
- package/dist/modes/interactive/tasks/render.js.map +1 -1
- package/dist/modes/interactive/tasks/task-view.d.ts +8 -48
- package/dist/modes/interactive/tasks/task-view.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/task-view.js +11 -51
- package/dist/modes/interactive/tasks/task-view.js.map +1 -1
- package/dist/modes/interactive/tasks/text.d.ts +1 -7
- package/dist/modes/interactive/tasks/text.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/text.js +6 -29
- package/dist/modes/interactive/tasks/text.js.map +1 -1
- package/dist/modes/interactive/tasks/viewport.d.ts +2 -0
- package/dist/modes/interactive/tasks/viewport.d.ts.map +1 -1
- package/dist/modes/interactive/tasks/viewport.js +17 -7
- package/dist/modes/interactive/tasks/viewport.js.map +1 -1
- package/dist/modes/interactive/tasks/views.d.ts +9 -0
- package/dist/modes/interactive/tasks/views.d.ts.map +1 -0
- package/dist/modes/interactive/tasks/views.js +42 -0
- package/dist/modes/interactive/tasks/views.js.map +1 -0
- package/dist/modes/interactive/theme/system-theme.d.ts +2 -1
- package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/system-theme.js +16 -5
- package/dist/modes/interactive/theme/system-theme.js.map +1 -1
- package/dist/modes/interactive/tool-view/tool-execution.d.ts +4 -19
- package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/tool-view/tool-execution.js +23 -67
- package/dist/modes/interactive/tool-view/tool-execution.js.map +1 -1
- package/dist/utils/image-convert.d.ts +12 -0
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js +45 -6
- package/dist/utils/image-convert.js.map +1 -1
- package/docs/bundled/README.md +0 -1
- package/docs/bundled/extensions/question.md +2 -2
- package/docs/bundled/extensions/statusline.md +24 -15
- package/docs/bundled/tasks.md +34 -48
- package/docs/codemode.md +207 -0
- package/docs/docs.json +4 -4
- package/docs/environment-variables.md +1 -1
- package/docs/extensions.md +11 -9
- package/docs/keybindings.md +14 -7
- package/docs/mcp.md +164 -82
- package/docs/models.md +51 -3
- package/docs/providers.md +8 -0
- package/docs/sdk.md +2 -2
- package/docs/session-format.md +12 -22
- package/docs/settings.md +4 -2
- package/docs/tui.md +1 -1
- package/docs/usage.md +6 -16
- package/examples/README.md +1 -1
- package/examples/extensions/README.md +1 -2
- package/examples/extensions/built-in-tool-renderer.ts +16 -40
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/minimal-mode.ts +24 -96
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/14-codemode-mcp.ts +2 -2
- package/npm-shrinkwrap.json +73 -62
- package/package.json +11 -10
- package/dist/bundle/chunks/anthropic-messages-KIXY7EDT.js +0 -6
- package/dist/bundle/chunks/azure-openai-responses-RPBERDXD.js +0 -2
- package/dist/bundle/chunks/chunk-CLLDCO64.js +0 -2
- package/dist/bundle/chunks/chunk-PJVFYVHE.js +0 -42
- package/dist/bundle/chunks/chunk-UUSTLCVC.js +0 -2
- package/dist/bundle/chunks/chunk-VWCWZD6E.js +0 -2
- package/dist/bundle/chunks/node-CXWYTK2I.js +0 -16
- package/dist/bundle/chunks/openai-completions-SKDGF6OE.js +0 -7
- package/dist/bundle/chunks/openai-responses-FPML4SSG.js +0 -3
- package/dist/bundle/chunks/virtual-modules-TQRORWJQ.js +0 -2
- package/dist/core/tasks/view-data.d.ts +0 -8
- package/dist/core/tasks/view-data.d.ts.map +0 -1
- package/dist/core/tasks/view-data.js +0 -61
- package/dist/core/tasks/view-data.js.map +0 -1
- package/dist/core/tasks/view.d.ts +0 -30
- package/dist/core/tasks/view.d.ts.map +0 -1
- package/dist/core/tasks/view.js +0 -50
- package/dist/core/tasks/view.js.map +0 -1
- package/dist/core/tools/renderers/shell-task.d.ts +0 -4
- package/dist/core/tools/renderers/shell-task.d.ts.map +0 -1
- package/dist/core/tools/renderers/shell-task.js +0 -35
- package/dist/core/tools/renderers/shell-task.js.map +0 -1
- package/dist/extensions/todo/constants.d.ts +0 -16
- package/dist/extensions/todo/constants.d.ts.map +0 -1
- package/dist/extensions/todo/constants.js +0 -30
- package/dist/extensions/todo/constants.js.map +0 -1
- package/dist/extensions/todo/index.d.ts +0 -3
- package/dist/extensions/todo/index.d.ts.map +0 -1
- package/dist/extensions/todo/index.js +0 -98
- package/dist/extensions/todo/index.js.map +0 -1
- package/dist/extensions/todo/schema.d.ts +0 -60
- package/dist/extensions/todo/schema.d.ts.map +0 -1
- package/dist/extensions/todo/schema.js +0 -56
- package/dist/extensions/todo/schema.js.map +0 -1
- package/dist/extensions/todo/state.d.ts +0 -34
- package/dist/extensions/todo/state.d.ts.map +0 -1
- package/dist/extensions/todo/state.js +0 -425
- package/dist/extensions/todo/state.js.map +0 -1
- package/dist/extensions/todo/view.d.ts +0 -36
- package/dist/extensions/todo/view.d.ts.map +0 -1
- package/dist/extensions/todo/view.js +0 -580
- package/dist/extensions/todo/view.js.map +0 -1
- package/dist/extensions/todo/widget.d.ts +0 -15
- package/dist/extensions/todo/widget.d.ts.map +0 -1
- package/dist/extensions/todo/widget.js +0 -50
- package/dist/extensions/todo/widget.js.map +0 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
- package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
- package/dist/modes/interactive/components/daxnuts.js +0 -138
- package/dist/modes/interactive/components/daxnuts.js.map +0 -1
- package/dist/modes/interactive/tasks/fallback-view.d.ts +0 -4
- package/dist/modes/interactive/tasks/fallback-view.d.ts.map +0 -1
- package/dist/modes/interactive/tasks/fallback-view.js +0 -27
- package/dist/modes/interactive/tasks/fallback-view.js.map +0 -1
- package/docs/bundled/extensions/todo.md +0 -104
- package/examples/extensions/todo.ts +0 -297
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* exact id, normalized id, then fuzzy match; ties prefer the current API.
|
|
7
7
|
*/
|
|
8
8
|
import type { Api, Model } from "@earendil-works/pi-ai";
|
|
9
|
+
import { type BuiltinProvider } from "@earendil-works/pi-ai/providers/all";
|
|
9
10
|
import type { ModelsJsonModel } from "../../core/model-config.ts";
|
|
10
11
|
export interface CatalogEntry {
|
|
11
12
|
providerId: string;
|
|
@@ -13,7 +14,7 @@ export interface CatalogEntry {
|
|
|
13
14
|
}
|
|
14
15
|
export declare function builtinCatalogIndex(): readonly CatalogEntry[];
|
|
15
16
|
/** True when models.json with this provider id overlays a built-in catalog. */
|
|
16
|
-
export declare function isBuiltinProviderId(providerId: string):
|
|
17
|
+
export declare function isBuiltinProviderId(providerId: string): providerId is BuiltinProvider;
|
|
17
18
|
/**
|
|
18
19
|
* Builtin fallback api/baseUrl for a custom model, mirroring the runtime's
|
|
19
20
|
* findModelDefaults order: same id, then same api, then any openai-completions
|
|
@@ -31,7 +32,13 @@ export interface CatalogMatch {
|
|
|
31
32
|
/** Grouped reference candidates for a query id; at most `max` entries, best first. */
|
|
32
33
|
export declare function matchBuiltinModels(query: string, preferredApi?: string, max?: number): CatalogMatch[];
|
|
33
34
|
export type ReferenceField = "name" | "reasoning" | "input" | "contextWindow" | "maxTokens" | "thinkingLevelMap" | "compat" | "cost";
|
|
35
|
+
export interface FieldPatch {
|
|
36
|
+
path: readonly string[];
|
|
37
|
+
value: unknown;
|
|
38
|
+
}
|
|
34
39
|
export interface FieldChange {
|
|
40
|
+
/** Exact writes represented by this preview; empty for view-only fields. */
|
|
41
|
+
patches: readonly FieldPatch[];
|
|
35
42
|
field: ReferenceField;
|
|
36
43
|
/** Pre-selected per the completion rules (unset scalar fields are checked; map/compat/cost never are). */
|
|
37
44
|
checked: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/extensions/provider/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/extensions/provider/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,eAAe,EAAyC,MAAM,qCAAqC,CAAC;AAElH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,MAAM,WAAW,YAAY;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;CAClB;AAID,wBAAgB,mBAAmB,IAAI,SAAS,YAAY,EAAE,CAQ7D;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,IAAI,eAAe,CAErF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,GACV;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAUpC;AAWD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;CAChB;AAaD,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,MAAuB,GAAG,YAAY,EAAE,CA2BrH;AAED,MAAM,MAAM,cAAc,GACvB,MAAM,GACN,WAAW,GACX,OAAO,GACP,eAAe,GACf,WAAW,GACX,kBAAkB,GAClB,QAAQ,GACR,MAAM,CAAC;AAEV,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC3B,4EAA4E;IAC5E,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,KAAK,EAAE,cAAc,CAAC;IACtB,0GAA0G;IAC1G,OAAO,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,UAAU,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,kGAAkG;IAClG,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,oGAAoG;IACpG,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B;AASD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EACnD,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,EACrB,YAAY,EAAE,MAAM,GAAG,SAAS,GAC9B,WAAW,EAAE,CAuHf"}
|
|
@@ -99,6 +99,7 @@ export function computeFieldChanges(current, reference, effectiveApi) {
|
|
|
99
99
|
const unset = (key) => current[key] === undefined;
|
|
100
100
|
changes.push({
|
|
101
101
|
field: "name",
|
|
102
|
+
patches: [{ path: ["name"], value: reference.name }],
|
|
102
103
|
checked: unset("name") && reference.name !== reference.id,
|
|
103
104
|
applicable: true,
|
|
104
105
|
currentText: current.name ?? `not set (falls back to id${current.id ? ` "${current.id}"` : ""})`,
|
|
@@ -106,6 +107,7 @@ export function computeFieldChanges(current, reference, effectiveApi) {
|
|
|
106
107
|
});
|
|
107
108
|
changes.push({
|
|
108
109
|
field: "reasoning",
|
|
110
|
+
patches: [{ path: ["reasoning"], value: reference.reasoning }],
|
|
109
111
|
checked: unset("reasoning") && reference.reasoning === true,
|
|
110
112
|
applicable: true,
|
|
111
113
|
currentText: current.reasoning === undefined ? "false (default)" : String(current.reasoning),
|
|
@@ -113,6 +115,7 @@ export function computeFieldChanges(current, reference, effectiveApi) {
|
|
|
113
115
|
});
|
|
114
116
|
changes.push({
|
|
115
117
|
field: "input",
|
|
118
|
+
patches: [{ path: ["input"], value: reference.input }],
|
|
116
119
|
checked: unset("input"),
|
|
117
120
|
applicable: true,
|
|
118
121
|
currentText: current.input ? current.input.join(", ") : "text (default)",
|
|
@@ -120,6 +123,7 @@ export function computeFieldChanges(current, reference, effectiveApi) {
|
|
|
120
123
|
});
|
|
121
124
|
changes.push({
|
|
122
125
|
field: "contextWindow",
|
|
126
|
+
patches: [{ path: ["contextWindow"], value: reference.contextWindow }],
|
|
123
127
|
checked: unset("contextWindow"),
|
|
124
128
|
applicable: true,
|
|
125
129
|
currentText: current.contextWindow === undefined ? `${DEFAULT_CONTEXT_WINDOW} (default)` : String(current.contextWindow),
|
|
@@ -127,6 +131,7 @@ export function computeFieldChanges(current, reference, effectiveApi) {
|
|
|
127
131
|
});
|
|
128
132
|
changes.push({
|
|
129
133
|
field: "maxTokens",
|
|
134
|
+
patches: [{ path: ["maxTokens"], value: reference.maxTokens }],
|
|
130
135
|
checked: unset("maxTokens"),
|
|
131
136
|
applicable: true,
|
|
132
137
|
currentText: current.maxTokens === undefined ? `${DEFAULT_MAX_TOKENS} (default)` : String(current.maxTokens),
|
|
@@ -137,6 +142,12 @@ export function computeFieldChanges(current, reference, effectiveApi) {
|
|
|
137
142
|
const details = Object.entries(reference.thinkingLevelMap).map(([level, target]) => `${level}: ${target === null ? "null (hidden)" : target}`);
|
|
138
143
|
changes.push({
|
|
139
144
|
field: "thinkingLevelMap",
|
|
145
|
+
patches: sameApi
|
|
146
|
+
? Object.entries(reference.thinkingLevelMap).map(([level, value]) => ({
|
|
147
|
+
path: ["thinkingLevelMap", level],
|
|
148
|
+
value,
|
|
149
|
+
}))
|
|
150
|
+
: [],
|
|
140
151
|
checked: false,
|
|
141
152
|
applicable: sameApi,
|
|
142
153
|
currentText: current.thinkingLevelMap
|
|
@@ -148,9 +159,24 @@ export function computeFieldChanges(current, reference, effectiveApi) {
|
|
|
148
159
|
});
|
|
149
160
|
}
|
|
150
161
|
if (reference.compat && Object.keys(reference.compat).length > 0) {
|
|
162
|
+
const patches = [];
|
|
163
|
+
if (sameApi) {
|
|
164
|
+
for (const [key, value] of Object.entries(reference.compat)) {
|
|
165
|
+
if (["chatTemplateKwargs", "chatTemplateArgs", "openRouterRouting", "vercelGatewayRouting"].includes(key) &&
|
|
166
|
+
value !== null &&
|
|
167
|
+
typeof value === "object" &&
|
|
168
|
+
!Array.isArray(value)) {
|
|
169
|
+
for (const [entry, item] of Object.entries(value))
|
|
170
|
+
patches.push({ path: ["compat", key, entry], value: item });
|
|
171
|
+
}
|
|
172
|
+
else
|
|
173
|
+
patches.push({ path: ["compat", key], value });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
151
176
|
const details = Object.entries(reference.compat).map(([key, value]) => `${key}: ${JSON.stringify(value)}`);
|
|
152
177
|
changes.push({
|
|
153
178
|
field: "compat",
|
|
179
|
+
patches,
|
|
154
180
|
checked: false,
|
|
155
181
|
applicable: sameApi,
|
|
156
182
|
currentText: current.compat
|
|
@@ -161,8 +187,13 @@ export function computeFieldChanges(current, reference, effectiveApi) {
|
|
|
161
187
|
});
|
|
162
188
|
}
|
|
163
189
|
if (reference.cost) {
|
|
190
|
+
const { input, output, cacheRead, cacheWrite } = reference.cost;
|
|
191
|
+
const rates = { input, output, cacheRead, cacheWrite };
|
|
164
192
|
changes.push({
|
|
165
193
|
field: "cost",
|
|
194
|
+
patches: current.cost
|
|
195
|
+
? Object.entries(rates).map(([rate, value]) => ({ path: ["cost", rate], value }))
|
|
196
|
+
: [{ path: ["cost"], value: rates }],
|
|
166
197
|
checked: false,
|
|
167
198
|
applicable: true,
|
|
168
199
|
currentText: current.cost ? formatCostRates(current.cost) : "all 0 (default)",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/extensions/provider/catalog.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Built-in model catalog index and reference matching for Use Built-in Data.\n *\n * The index is built lazily on first use from pi-ai's raw builtin catalog\n * (never from the runtime's user-modified getAll()). Matching is grouped by\n * exact id, normalized id, then fuzzy match; ties prefer the current API.\n */\n\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport { getBuiltinModels, getBuiltinProviders } from \"@earendil-works/pi-ai/providers/all\";\nimport { fuzzyFilter } from \"@earendil-works/pi-tui\";\nimport type { ModelsJsonModel } from \"../../core/model-config.ts\";\nimport { MAX_CANDIDATES, plural } from \"./constants.ts\";\n\nexport interface CatalogEntry {\n\tproviderId: string;\n\tmodel: Model<Api>;\n}\n\nlet indexCache: readonly CatalogEntry[] | undefined;\n\nexport function builtinCatalogIndex(): readonly CatalogEntry[] {\n\tif (indexCache) return indexCache;\n\tconst entries: CatalogEntry[] = [];\n\tfor (const providerId of getBuiltinProviders()) {\n\t\tfor (const model of getBuiltinModels(providerId)) entries.push({ providerId, model });\n\t}\n\tindexCache = entries;\n\treturn entries;\n}\n\n/** True when models.json with this provider id overlays a built-in catalog. */\nexport function isBuiltinProviderId(providerId: string): boolean {\n\treturn (getBuiltinProviders() as readonly string[]).includes(providerId);\n}\n\n/**\n * Builtin fallback api/baseUrl for a custom model, mirroring the runtime's\n * findModelDefaults order: same id, then same api, then any openai-completions\n * model, then the first catalog entry.\n */\nexport function builtinDefaults(\n\tproviderId: string,\n\tmodelId?: string,\n\tapi?: string,\n): { api?: string; baseUrl?: string } {\n\tif (!isBuiltinProviderId(providerId)) return {};\n\tconst models = getBuiltinModels(providerId as never) as readonly Model<Api>[];\n\tif (models.length === 0) return {};\n\tconst found =\n\t\t(modelId ? models.find((model) => model.id === modelId) : undefined) ??\n\t\t(api ? models.find((model) => model.api === api) : undefined) ??\n\t\tmodels.find((model) => model.api === \"openai-completions\") ??\n\t\tmodels[0];\n\treturn { api: found.api, baseUrl: found.baseUrl };\n}\n\n/** Case-insensitive, separator-tolerant comparison key; keeps version/date/thinking variants. */\nfunction normalizeId(id: string): string {\n\tconst basename = id.includes(\"/\") ? id.slice(id.lastIndexOf(\"/\") + 1) : id;\n\treturn basename\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\");\n}\n\nexport type MatchTier = \"exact\" | \"normalized\" | \"fuzzy\";\n\nexport interface CatalogMatch {\n\tentry: CatalogEntry;\n\ttier: MatchTier;\n}\n\nfunction sortTier(matches: CatalogMatch[], preferredApi: string | undefined): CatalogMatch[] {\n\treturn matches.sort((a, b) => {\n\t\tif (preferredApi) {\n\t\t\tconst aPreferred = a.entry.model.api === preferredApi ? 0 : 1;\n\t\t\tconst bPreferred = b.entry.model.api === preferredApi ? 0 : 1;\n\t\t\tif (aPreferred !== bPreferred) return aPreferred - bPreferred;\n\t\t}\n\t\treturn a.entry.model.id.localeCompare(b.entry.model.id);\n\t});\n}\n\n/** Grouped reference candidates for a query id; at most `max` entries, best first. */\nexport function matchBuiltinModels(query: string, preferredApi?: string, max: number = MAX_CANDIDATES): CatalogMatch[] {\n\tconst trimmed = query.trim();\n\tif (!trimmed) return [];\n\tconst index = builtinCatalogIndex();\n\tconst normalizedQuery = normalizeId(trimmed);\n\tconst exact: CatalogMatch[] = [];\n\tconst normalized: CatalogMatch[] = [];\n\tconst consumed = new Set<CatalogEntry>();\n\tfor (const entry of index) {\n\t\tif (entry.model.id === trimmed) {\n\t\t\texact.push({ entry, tier: \"exact\" });\n\t\t\tconsumed.add(entry);\n\t\t} else if (normalizeId(entry.model.id) === normalizedQuery) {\n\t\t\tnormalized.push({ entry, tier: \"normalized\" });\n\t\t\tconsumed.add(entry);\n\t\t}\n\t}\n\tconst remaining = sortTier(\n\t\tindex.filter((entry) => !consumed.has(entry)).map((entry) => ({ entry, tier: \"fuzzy\" })),\n\t\tpreferredApi,\n\t);\n\tconst fuzzy: CatalogMatch[] = fuzzyFilter(\n\t\tremaining,\n\t\ttrimmed,\n\t\t({ entry }) => `${entry.model.id} ${entry.model.name} ${entry.providerId}`,\n\t);\n\treturn [...sortTier(exact, preferredApi), ...sortTier(normalized, preferredApi), ...fuzzy].slice(0, max);\n}\n\nexport type ReferenceField =\n\t| \"name\"\n\t| \"reasoning\"\n\t| \"input\"\n\t| \"contextWindow\"\n\t| \"maxTokens\"\n\t| \"thinkingLevelMap\"\n\t| \"compat\"\n\t| \"cost\";\n\nexport interface FieldChange {\n\tfield: ReferenceField;\n\t/** Pre-selected per the completion rules (unset scalar fields are checked; map/compat/cost never are). */\n\tchecked: boolean;\n\t/** False = cross-API map/compat: view-only, cannot be applied. */\n\tapplicable: boolean;\n\t/** Left side of the preview, e.g. `not set (falls back to id)`. */\n\tcurrentText: string;\n\t/** Right side of the preview, e.g. the reference value. */\n\treferenceText: string;\n\t/** Extra detail lines for the expandable view (thinking map entries, compat keys, cost rates). */\n\treferenceDetails?: string[];\n\t/** Reference carries tiers; applying cost keeps current tiers and never imports reference tiers. */\n\treferenceHasTiers?: boolean;\n}\n\nconst DEFAULT_CONTEXT_WINDOW = 128000;\nconst DEFAULT_MAX_TOKENS = 16384;\n\nfunction formatCostRates(cost: { input: number; output: number; cacheRead: number; cacheWrite: number }): string {\n\treturn `$${cost.input} / $${cost.output} in/out (cache $${cost.cacheRead} / $${cost.cacheWrite})`;\n}\n\n/**\n * Compute the per-field change list for applying `reference` onto `current`.\n * Only fields the reference actually has appear; an absent map/compat on the\n * reference never implies clearing the current value.\n */\nexport function computeFieldChanges(\n\tcurrent: Partial<ModelsJsonModel> & { id?: string },\n\treference: Model<Api>,\n\teffectiveApi: string | undefined,\n): FieldChange[] {\n\tconst changes: FieldChange[] = [];\n\tconst unset = (key: keyof ModelsJsonModel) => current[key] === undefined;\n\n\tchanges.push({\n\t\tfield: \"name\",\n\t\tchecked: unset(\"name\") && reference.name !== reference.id,\n\t\tapplicable: true,\n\t\tcurrentText: current.name ?? `not set (falls back to id${current.id ? ` \"${current.id}\"` : \"\"})`,\n\t\treferenceText: reference.name,\n\t});\n\tchanges.push({\n\t\tfield: \"reasoning\",\n\t\tchecked: unset(\"reasoning\") && reference.reasoning === true,\n\t\tapplicable: true,\n\t\tcurrentText: current.reasoning === undefined ? \"false (default)\" : String(current.reasoning),\n\t\treferenceText: String(reference.reasoning),\n\t});\n\tchanges.push({\n\t\tfield: \"input\",\n\t\tchecked: unset(\"input\"),\n\t\tapplicable: true,\n\t\tcurrentText: current.input ? current.input.join(\", \") : \"text (default)\",\n\t\treferenceText: reference.input.join(\", \"),\n\t});\n\tchanges.push({\n\t\tfield: \"contextWindow\",\n\t\tchecked: unset(\"contextWindow\"),\n\t\tapplicable: true,\n\t\tcurrentText:\n\t\t\tcurrent.contextWindow === undefined ? `${DEFAULT_CONTEXT_WINDOW} (default)` : String(current.contextWindow),\n\t\treferenceText: String(reference.contextWindow),\n\t});\n\tchanges.push({\n\t\tfield: \"maxTokens\",\n\t\tchecked: unset(\"maxTokens\"),\n\t\tapplicable: true,\n\t\tcurrentText: current.maxTokens === undefined ? `${DEFAULT_MAX_TOKENS} (default)` : String(current.maxTokens),\n\t\treferenceText: String(reference.maxTokens),\n\t});\n\n\tconst sameApi = effectiveApi !== undefined && reference.api === effectiveApi;\n\tif (reference.thinkingLevelMap && Object.keys(reference.thinkingLevelMap).length > 0) {\n\t\tconst details = Object.entries(reference.thinkingLevelMap).map(\n\t\t\t([level, target]) => `${level}: ${target === null ? \"null (hidden)\" : target}`,\n\t\t);\n\t\tchanges.push({\n\t\t\tfield: \"thinkingLevelMap\",\n\t\t\tchecked: false,\n\t\t\tapplicable: sameApi,\n\t\t\tcurrentText: current.thinkingLevelMap\n\t\t\t\t? `${Object.keys(current.thinkingLevelMap).length} ${plural(Object.keys(current.thinkingLevelMap).length, \"mapping\")}`\n\t\t\t\t: \"not set\",\n\t\t\t// Cross-api maps are view-only; the preview pane annotates that.\n\t\t\treferenceText: `${details.length} ${plural(details.length, \"mapping\")}`,\n\t\t\treferenceDetails: details,\n\t\t});\n\t}\n\tif (reference.compat && Object.keys(reference.compat).length > 0) {\n\t\tconst details = Object.entries(reference.compat).map(([key, value]) => `${key}: ${JSON.stringify(value)}`);\n\t\tchanges.push({\n\t\t\tfield: \"compat\",\n\t\t\tchecked: false,\n\t\t\tapplicable: sameApi,\n\t\t\tcurrentText: current.compat\n\t\t\t\t? `${Object.keys(current.compat).length} ${plural(Object.keys(current.compat).length, \"entry\")}`\n\t\t\t\t: \"not set\",\n\t\t\treferenceText: `${details.length} ${plural(details.length, \"entry\")}`,\n\t\t\treferenceDetails: details,\n\t\t});\n\t}\n\tif (reference.cost) {\n\t\tchanges.push({\n\t\t\tfield: \"cost\",\n\t\t\tchecked: false,\n\t\t\tapplicable: true,\n\t\t\tcurrentText: current.cost ? formatCostRates(current.cost) : \"all 0 (default)\",\n\t\t\treferenceText: formatCostRates(reference.cost),\n\t\t\treferenceDetails: [\n\t\t\t\t`input: $${reference.cost.input} / M tokens`,\n\t\t\t\t`output: $${reference.cost.output} / M tokens`,\n\t\t\t\t`cacheRead: $${reference.cost.cacheRead} / M tokens`,\n\t\t\t\t`cacheWrite: $${reference.cost.cacheWrite} / M tokens`,\n\t\t\t],\n\t\t\treferenceHasTiers: Array.isArray(reference.cost.tiers) && reference.cost.tiers.length > 0,\n\t\t});\n\t}\n\treturn changes;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/extensions/provider/catalog.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Built-in model catalog index and reference matching for Use Built-in Data.\n *\n * The index is built lazily on first use from pi-ai's raw builtin catalog\n * (never from the runtime's user-modified getAll()). Matching is grouped by\n * exact id, normalized id, then fuzzy match; ties prefer the current API.\n */\n\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport { type BuiltinProvider, getBuiltinModels, getBuiltinProviders } from \"@earendil-works/pi-ai/providers/all\";\nimport { fuzzyFilter } from \"@earendil-works/pi-tui\";\nimport type { ModelsJsonModel } from \"../../core/model-config.ts\";\nimport { MAX_CANDIDATES, plural } from \"./constants.ts\";\n\nexport interface CatalogEntry {\n\tproviderId: string;\n\tmodel: Model<Api>;\n}\n\nlet indexCache: readonly CatalogEntry[] | undefined;\n\nexport function builtinCatalogIndex(): readonly CatalogEntry[] {\n\tif (indexCache) return indexCache;\n\tconst entries: CatalogEntry[] = [];\n\tfor (const providerId of getBuiltinProviders()) {\n\t\tfor (const model of getBuiltinModels(providerId)) entries.push({ providerId, model });\n\t}\n\tindexCache = entries;\n\treturn entries;\n}\n\n/** True when models.json with this provider id overlays a built-in catalog. */\nexport function isBuiltinProviderId(providerId: string): providerId is BuiltinProvider {\n\treturn (getBuiltinProviders() as readonly string[]).includes(providerId);\n}\n\n/**\n * Builtin fallback api/baseUrl for a custom model, mirroring the runtime's\n * findModelDefaults order: same id, then same api, then any openai-completions\n * model, then the first catalog entry.\n */\nexport function builtinDefaults(\n\tproviderId: string,\n\tmodelId?: string,\n\tapi?: string,\n): { api?: string; baseUrl?: string } {\n\tif (!isBuiltinProviderId(providerId)) return {};\n\tconst models = getBuiltinModels(providerId);\n\tif (models.length === 0) return {};\n\tconst found =\n\t\t(modelId ? models.find((model) => model.id === modelId) : undefined) ??\n\t\t(api ? models.find((model) => model.api === api) : undefined) ??\n\t\tmodels.find((model) => model.api === \"openai-completions\") ??\n\t\tmodels[0];\n\treturn { api: found.api, baseUrl: found.baseUrl };\n}\n\n/** Case-insensitive, separator-tolerant comparison key; keeps version/date/thinking variants. */\nfunction normalizeId(id: string): string {\n\tconst basename = id.includes(\"/\") ? id.slice(id.lastIndexOf(\"/\") + 1) : id;\n\treturn basename\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\");\n}\n\nexport type MatchTier = \"exact\" | \"normalized\" | \"fuzzy\";\n\nexport interface CatalogMatch {\n\tentry: CatalogEntry;\n\ttier: MatchTier;\n}\n\nfunction sortTier(matches: CatalogMatch[], preferredApi: string | undefined): CatalogMatch[] {\n\treturn matches.sort((a, b) => {\n\t\tif (preferredApi) {\n\t\t\tconst aPreferred = a.entry.model.api === preferredApi ? 0 : 1;\n\t\t\tconst bPreferred = b.entry.model.api === preferredApi ? 0 : 1;\n\t\t\tif (aPreferred !== bPreferred) return aPreferred - bPreferred;\n\t\t}\n\t\treturn a.entry.model.id.localeCompare(b.entry.model.id);\n\t});\n}\n\n/** Grouped reference candidates for a query id; at most `max` entries, best first. */\nexport function matchBuiltinModels(query: string, preferredApi?: string, max: number = MAX_CANDIDATES): CatalogMatch[] {\n\tconst trimmed = query.trim();\n\tif (!trimmed) return [];\n\tconst index = builtinCatalogIndex();\n\tconst normalizedQuery = normalizeId(trimmed);\n\tconst exact: CatalogMatch[] = [];\n\tconst normalized: CatalogMatch[] = [];\n\tconst consumed = new Set<CatalogEntry>();\n\tfor (const entry of index) {\n\t\tif (entry.model.id === trimmed) {\n\t\t\texact.push({ entry, tier: \"exact\" });\n\t\t\tconsumed.add(entry);\n\t\t} else if (normalizeId(entry.model.id) === normalizedQuery) {\n\t\t\tnormalized.push({ entry, tier: \"normalized\" });\n\t\t\tconsumed.add(entry);\n\t\t}\n\t}\n\tconst remaining = sortTier(\n\t\tindex.filter((entry) => !consumed.has(entry)).map((entry) => ({ entry, tier: \"fuzzy\" })),\n\t\tpreferredApi,\n\t);\n\tconst fuzzy: CatalogMatch[] = fuzzyFilter(\n\t\tremaining,\n\t\ttrimmed,\n\t\t({ entry }) => `${entry.model.id} ${entry.model.name} ${entry.providerId}`,\n\t);\n\treturn [...sortTier(exact, preferredApi), ...sortTier(normalized, preferredApi), ...fuzzy].slice(0, max);\n}\n\nexport type ReferenceField =\n\t| \"name\"\n\t| \"reasoning\"\n\t| \"input\"\n\t| \"contextWindow\"\n\t| \"maxTokens\"\n\t| \"thinkingLevelMap\"\n\t| \"compat\"\n\t| \"cost\";\n\nexport interface FieldPatch {\n\tpath: readonly string[];\n\tvalue: unknown;\n}\n\nexport interface FieldChange {\n\t/** Exact writes represented by this preview; empty for view-only fields. */\n\tpatches: readonly FieldPatch[];\n\tfield: ReferenceField;\n\t/** Pre-selected per the completion rules (unset scalar fields are checked; map/compat/cost never are). */\n\tchecked: boolean;\n\t/** False = cross-API map/compat: view-only, cannot be applied. */\n\tapplicable: boolean;\n\t/** Left side of the preview, e.g. `not set (falls back to id)`. */\n\tcurrentText: string;\n\t/** Right side of the preview, e.g. the reference value. */\n\treferenceText: string;\n\t/** Extra detail lines for the expandable view (thinking map entries, compat keys, cost rates). */\n\treferenceDetails?: string[];\n\t/** Reference carries tiers; applying cost keeps current tiers and never imports reference tiers. */\n\treferenceHasTiers?: boolean;\n}\n\nconst DEFAULT_CONTEXT_WINDOW = 128000;\nconst DEFAULT_MAX_TOKENS = 16384;\n\nfunction formatCostRates(cost: { input: number; output: number; cacheRead: number; cacheWrite: number }): string {\n\treturn `$${cost.input} / $${cost.output} in/out (cache $${cost.cacheRead} / $${cost.cacheWrite})`;\n}\n\n/**\n * Compute the per-field change list for applying `reference` onto `current`.\n * Only fields the reference actually has appear; an absent map/compat on the\n * reference never implies clearing the current value.\n */\nexport function computeFieldChanges(\n\tcurrent: Partial<ModelsJsonModel> & { id?: string },\n\treference: Model<Api>,\n\teffectiveApi: string | undefined,\n): FieldChange[] {\n\tconst changes: FieldChange[] = [];\n\tconst unset = (key: keyof ModelsJsonModel) => current[key] === undefined;\n\n\tchanges.push({\n\t\tfield: \"name\",\n\t\tpatches: [{ path: [\"name\"], value: reference.name }],\n\t\tchecked: unset(\"name\") && reference.name !== reference.id,\n\t\tapplicable: true,\n\t\tcurrentText: current.name ?? `not set (falls back to id${current.id ? ` \"${current.id}\"` : \"\"})`,\n\t\treferenceText: reference.name,\n\t});\n\tchanges.push({\n\t\tfield: \"reasoning\",\n\t\tpatches: [{ path: [\"reasoning\"], value: reference.reasoning }],\n\t\tchecked: unset(\"reasoning\") && reference.reasoning === true,\n\t\tapplicable: true,\n\t\tcurrentText: current.reasoning === undefined ? \"false (default)\" : String(current.reasoning),\n\t\treferenceText: String(reference.reasoning),\n\t});\n\tchanges.push({\n\t\tfield: \"input\",\n\t\tpatches: [{ path: [\"input\"], value: reference.input }],\n\t\tchecked: unset(\"input\"),\n\t\tapplicable: true,\n\t\tcurrentText: current.input ? current.input.join(\", \") : \"text (default)\",\n\t\treferenceText: reference.input.join(\", \"),\n\t});\n\tchanges.push({\n\t\tfield: \"contextWindow\",\n\t\tpatches: [{ path: [\"contextWindow\"], value: reference.contextWindow }],\n\t\tchecked: unset(\"contextWindow\"),\n\t\tapplicable: true,\n\t\tcurrentText:\n\t\t\tcurrent.contextWindow === undefined ? `${DEFAULT_CONTEXT_WINDOW} (default)` : String(current.contextWindow),\n\t\treferenceText: String(reference.contextWindow),\n\t});\n\tchanges.push({\n\t\tfield: \"maxTokens\",\n\t\tpatches: [{ path: [\"maxTokens\"], value: reference.maxTokens }],\n\t\tchecked: unset(\"maxTokens\"),\n\t\tapplicable: true,\n\t\tcurrentText: current.maxTokens === undefined ? `${DEFAULT_MAX_TOKENS} (default)` : String(current.maxTokens),\n\t\treferenceText: String(reference.maxTokens),\n\t});\n\n\tconst sameApi = effectiveApi !== undefined && reference.api === effectiveApi;\n\tif (reference.thinkingLevelMap && Object.keys(reference.thinkingLevelMap).length > 0) {\n\t\tconst details = Object.entries(reference.thinkingLevelMap).map(\n\t\t\t([level, target]) => `${level}: ${target === null ? \"null (hidden)\" : target}`,\n\t\t);\n\t\tchanges.push({\n\t\t\tfield: \"thinkingLevelMap\",\n\t\t\tpatches: sameApi\n\t\t\t\t? Object.entries(reference.thinkingLevelMap).map(([level, value]) => ({\n\t\t\t\t\t\tpath: [\"thinkingLevelMap\", level],\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t}))\n\t\t\t\t: [],\n\t\t\tchecked: false,\n\t\t\tapplicable: sameApi,\n\t\t\tcurrentText: current.thinkingLevelMap\n\t\t\t\t? `${Object.keys(current.thinkingLevelMap).length} ${plural(Object.keys(current.thinkingLevelMap).length, \"mapping\")}`\n\t\t\t\t: \"not set\",\n\t\t\t// Cross-api maps are view-only; the preview pane annotates that.\n\t\t\treferenceText: `${details.length} ${plural(details.length, \"mapping\")}`,\n\t\t\treferenceDetails: details,\n\t\t});\n\t}\n\tif (reference.compat && Object.keys(reference.compat).length > 0) {\n\t\tconst patches: FieldPatch[] = [];\n\t\tif (sameApi) {\n\t\t\tfor (const [key, value] of Object.entries(reference.compat)) {\n\t\t\t\tif (\n\t\t\t\t\t[\"chatTemplateKwargs\", \"chatTemplateArgs\", \"openRouterRouting\", \"vercelGatewayRouting\"].includes(key) &&\n\t\t\t\t\tvalue !== null &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\t!Array.isArray(value)\n\t\t\t\t) {\n\t\t\t\t\tfor (const [entry, item] of Object.entries(value))\n\t\t\t\t\t\tpatches.push({ path: [\"compat\", key, entry], value: item });\n\t\t\t\t} else patches.push({ path: [\"compat\", key], value });\n\t\t\t}\n\t\t}\n\t\tconst details = Object.entries(reference.compat).map(([key, value]) => `${key}: ${JSON.stringify(value)}`);\n\t\tchanges.push({\n\t\t\tfield: \"compat\",\n\t\t\tpatches,\n\t\t\tchecked: false,\n\t\t\tapplicable: sameApi,\n\t\t\tcurrentText: current.compat\n\t\t\t\t? `${Object.keys(current.compat).length} ${plural(Object.keys(current.compat).length, \"entry\")}`\n\t\t\t\t: \"not set\",\n\t\t\treferenceText: `${details.length} ${plural(details.length, \"entry\")}`,\n\t\t\treferenceDetails: details,\n\t\t});\n\t}\n\tif (reference.cost) {\n\t\tconst { input, output, cacheRead, cacheWrite } = reference.cost;\n\t\tconst rates = { input, output, cacheRead, cacheWrite };\n\t\tchanges.push({\n\t\t\tfield: \"cost\",\n\t\t\tpatches: current.cost\n\t\t\t\t? Object.entries(rates).map(([rate, value]) => ({ path: [\"cost\", rate], value }))\n\t\t\t\t: [{ path: [\"cost\"], value: rates }],\n\t\t\tchecked: false,\n\t\t\tapplicable: true,\n\t\t\tcurrentText: current.cost ? formatCostRates(current.cost) : \"all 0 (default)\",\n\t\t\treferenceText: formatCostRates(reference.cost),\n\t\t\treferenceDetails: [\n\t\t\t\t`input: $${reference.cost.input} / M tokens`,\n\t\t\t\t`output: $${reference.cost.output} / M tokens`,\n\t\t\t\t`cacheRead: $${reference.cost.cacheRead} / M tokens`,\n\t\t\t\t`cacheWrite: $${reference.cost.cacheWrite} / M tokens`,\n\t\t\t],\n\t\t\treferenceHasTiers: Array.isArray(reference.cost.tiers) && reference.cost.tiers.length > 0,\n\t\t});\n\t}\n\treturn changes;\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Saved provider configuration, canonical authentication, and catalog import operations. */
|
|
2
2
|
import type { ModelRuntime } from "../../core/model-runtime.ts";
|
|
3
|
+
import type { ProviderEdits } from "./editing.ts";
|
|
3
4
|
import { type ProbeModel, type ProbeResult } from "./probe.ts";
|
|
4
5
|
import type { RefreshCoordinator } from "./refresh.ts";
|
|
5
6
|
import type { ModelsJsonStore } from "./store.ts";
|
|
@@ -10,5 +11,7 @@ export interface ProviderConnectionOptions {
|
|
|
10
11
|
runtime: Pick<ModelRuntime, "getAuth" | "getProviderAuthStatus">;
|
|
11
12
|
}
|
|
12
13
|
export declare function fetchProviderModels(options: ProviderConnectionOptions, signal: AbortSignal): Promise<ProbeResult>;
|
|
13
|
-
export declare function importProviderModels(options: ProviderConnectionOptions
|
|
14
|
+
export declare function importProviderModels(options: ProviderConnectionOptions & {
|
|
15
|
+
edits: Pick<ProviderEdits, "addModels">;
|
|
16
|
+
}, models: readonly ProbeModel[], signal: AbortSignal): Promise<string | undefined>;
|
|
14
17
|
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/extensions/provider/connection.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAE7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAuB,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,yBAAyB;IACzC,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAAC;CACjE;AAED,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,WAAW,GACjB,OAAO,CAAC,WAAW,CAAC,CA0CtB;AAED,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,yBAAyB,
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/extensions/provider/connection.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAE7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAuB,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,yBAAyB;IACzC,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAAC;CACjE;AAED,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,WAAW,GACjB,OAAO,CAAC,WAAW,CAAC,CA0CtB;AAED,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,yBAAyB,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;CAAE,EAChF,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,MAAM,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuB7B"}
|
|
@@ -68,11 +68,7 @@ export async function importProviderModels(options, models, signal) {
|
|
|
68
68
|
if (fresh.length === 0)
|
|
69
69
|
return undefined;
|
|
70
70
|
signal.throwIfAborted();
|
|
71
|
-
|
|
72
|
-
for (const model of fresh)
|
|
73
|
-
store.addModel(providerId, model);
|
|
74
|
-
});
|
|
75
|
-
refresher.touch(providerId);
|
|
71
|
+
options.edits.addModels(fresh);
|
|
76
72
|
// These edits were confirmed. Finish the write even if the originating pane closes.
|
|
77
73
|
await store.flush();
|
|
78
74
|
const saveError = store.getPendingError(providerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/extensions/provider/connection.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAG7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/extensions/provider/connection.ts"],"names":[],"mappings":"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","sourcesContent":["/** Saved provider configuration, canonical authentication, and catalog import operations. */\n\nimport type { ModelRuntime } from \"../../core/model-runtime.ts\";\nimport { raceWithAbortSignal } from \"../../utils/abort.ts\";\nimport { effectiveModelSettings } from \"./configuration.ts\";\nimport { formatError, PROBE_LIMITS } from \"./constants.ts\";\nimport type { ProviderEdits } from \"./editing.ts\";\nimport { type ProbeModel, type ProbeResult, probeProviderModels } from \"./probe.ts\";\nimport type { RefreshCoordinator } from \"./refresh.ts\";\nimport type { ModelsJsonStore } from \"./store.ts\";\n\nexport interface ProviderConnectionOptions {\n\tstore: ModelsJsonStore;\n\trefresher: RefreshCoordinator;\n\tproviderId: string;\n\truntime: Pick<ModelRuntime, \"getAuth\" | \"getProviderAuthStatus\">;\n}\n\nexport async function fetchProviderModels(\n\toptions: ProviderConnectionOptions,\n\tsignal: AbortSignal,\n): Promise<ProbeResult> {\n\tconst { store, refresher, runtime, providerId } = options;\n\tconst deadline = AbortSignal.any([signal, AbortSignal.timeout(PROBE_LIMITS.timeoutMs)]);\n\ttry {\n\t\tawait raceWithAbortSignal(store.flush(), deadline);\n\t\tconst unsaved = store.getPendingError(providerId);\n\t\tif (unsaved) return { ok: false, error: `Save the provider changes before fetching: ${unsaved}` };\n\t\tconst provider = store.getProvider(providerId);\n\t\tconst settings = effectiveModelSettings(providerId, provider);\n\t\tif (!settings.baseUrl) return { ok: false, error: \"Set a baseUrl under API Auth first.\" };\n\t\tconst sync = await refresher.refreshNow(providerId, deadline);\n\t\tdeadline.throwIfAborted();\n\t\tif (!sync.ok) return { ok: false, error: `The provider did not reload: ${sync.errors.join(\"; \")}` };\n\t\tconst resolved = await raceWithAbortSignal(runtime.getAuth(providerId, { signal: deadline }), deadline);\n\t\tconst configured =\n\t\t\tprovider?.apiKey !== undefined ||\n\t\t\tprovider?.authHeader === true ||\n\t\t\tObject.keys(provider?.headers ?? {}).length > 0 ||\n\t\t\truntime.getProviderAuthStatus(providerId).configured;\n\t\tif (!resolved && configured) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"Configured credentials or headers did not resolve; check the provider authentication.\",\n\t\t\t};\n\t\t}\n\t\tconst result = await probeProviderModels({\n\t\t\tbaseUrl: resolved?.auth.baseUrl ?? settings.baseUrl,\n\t\t\tauth: resolved?.auth,\n\t\t\tapi: settings.api,\n\t\t\tsignal: deadline,\n\t\t});\n\t\tdeadline.throwIfAborted();\n\t\treturn result;\n\t} catch (error) {\n\t\tif (deadline.aborted) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: signal.aborted ? \"Cancelled.\" : \"Timed out while preparing or fetching the model catalog.\",\n\t\t\t};\n\t\t}\n\t\treturn { ok: false, error: formatError(error) };\n\t}\n}\n\nexport async function importProviderModels(\n\toptions: ProviderConnectionOptions & { edits: Pick<ProviderEdits, \"addModels\"> },\n\tmodels: readonly ProbeModel[],\n\tsignal: AbortSignal,\n): Promise<string | undefined> {\n\tconst { store, refresher, providerId } = options;\n\tawait raceWithAbortSignal(store.flush(), signal);\n\tconst unsaved = store.getPendingError(providerId);\n\tif (unsaved) return unsaved;\n\tconst settings = effectiveModelSettings(providerId, store.getProvider(providerId));\n\tif (!settings.api || !settings.baseUrl) return \"Set baseUrl and API Type under API Auth before importing models.\";\n\tconst existing = new Set(store.getModels(providerId).map((model) => model.id));\n\tconst fresh = models.filter((model) => {\n\t\tif (existing.has(model.id)) return false;\n\t\texisting.add(model.id);\n\t\treturn true;\n\t});\n\tif (fresh.length === 0) return undefined;\n\tsignal.throwIfAborted();\n\toptions.edits.addModels(fresh);\n\t// These edits were confirmed. Finish the write even if the originating pane closes.\n\tawait store.flush();\n\tconst saveError = store.getPendingError(providerId);\n\tif (saveError) return saveError;\n\tconst outcome = await refresher.refreshNow(providerId, signal);\n\tif (!outcome.ok) return `Models were saved, but refresh failed: ${outcome.errors.join(\"; \")}`;\n\treturn undefined;\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Owns edits and refresh tracking; model handles keep persistence out of panes. */
|
|
2
|
+
import type { ModelsJsonModel } from "../../core/model-config.ts";
|
|
3
|
+
import type { RefreshCoordinator } from "./refresh.ts";
|
|
4
|
+
import type { ModelsJsonStore } from "./store.ts";
|
|
5
|
+
interface ModelFields {
|
|
6
|
+
read(): Partial<ModelsJsonModel>;
|
|
7
|
+
setField(path: readonly string[], value: unknown): void;
|
|
8
|
+
}
|
|
9
|
+
export interface DraftModelHandle extends ModelFields {
|
|
10
|
+
readonly isDraft: true;
|
|
11
|
+
}
|
|
12
|
+
export interface PersistedModelHandle extends ModelFields {
|
|
13
|
+
readonly isDraft: false;
|
|
14
|
+
rename(newId: string): Promise<string | undefined>;
|
|
15
|
+
}
|
|
16
|
+
export type ModelHandle = DraftModelHandle | PersistedModelHandle;
|
|
17
|
+
export type ProviderView = Pick<ModelsJsonStore, "getProvider" | "getModels" | "getModel">;
|
|
18
|
+
export declare class ProviderEdits {
|
|
19
|
+
private readonly store;
|
|
20
|
+
private readonly providerId;
|
|
21
|
+
private readonly refresher;
|
|
22
|
+
private readonly refresh;
|
|
23
|
+
renaming: boolean;
|
|
24
|
+
constructor(store: ModelsJsonStore, providerId: string, refresher: RefreshCoordinator, refresh: () => void);
|
|
25
|
+
private changed;
|
|
26
|
+
setProviderField(path: readonly string[], value: unknown): void;
|
|
27
|
+
removeProvider(): void;
|
|
28
|
+
removeModel(modelId: string): void;
|
|
29
|
+
batch(apply: () => void): void;
|
|
30
|
+
addModels(models: readonly ModelsJsonModel[]): void;
|
|
31
|
+
draft(): DraftModelHandle;
|
|
32
|
+
commitDraft(draft: DraftModelHandle): string | undefined;
|
|
33
|
+
model(modelId: string, onRename: (oldId: string, newId: string) => void): PersistedModelHandle;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=editing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editing.d.ts","sourceRoot":"","sources":["../../../src/extensions/provider/editing.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,UAAU,WAAW;IACpB,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACpD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACxD,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACnD;AAED,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC,CAAC;AAE3F,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,QAAQ,UAAS;gBAEL,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,IAAI;IAO1G,OAAO,CAAC,OAAO;IAUf,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK/D,cAAc,IAAI,IAAI;IAKtB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI;IAI9B,SAAS,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI;IAOnD,KAAK,IAAI,gBAAgB;IAYzB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS;IAcxD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,oBAAoB;CA4B9F"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { effectiveModelSettings, hasProviderSettings } from "./configuration.js";
|
|
2
|
+
import { setPath } from "./json-fields.js";
|
|
3
|
+
export class ProviderEdits {
|
|
4
|
+
constructor(store, providerId, refresher, refresh) {
|
|
5
|
+
this.renaming = false;
|
|
6
|
+
this.store = store;
|
|
7
|
+
this.providerId = providerId;
|
|
8
|
+
this.refresher = refresher;
|
|
9
|
+
this.refresh = refresh;
|
|
10
|
+
}
|
|
11
|
+
changed() {
|
|
12
|
+
if (!this.store.isDraftProvider(this.providerId) ||
|
|
13
|
+
hasProviderSettings(this.store.getProvider(this.providerId))) {
|
|
14
|
+
this.refresher.touch(this.providerId);
|
|
15
|
+
}
|
|
16
|
+
this.refresh();
|
|
17
|
+
}
|
|
18
|
+
setProviderField(path, value) {
|
|
19
|
+
this.store.setProviderField(this.providerId, path, value);
|
|
20
|
+
this.changed();
|
|
21
|
+
}
|
|
22
|
+
removeProvider() {
|
|
23
|
+
this.store.removeProvider(this.providerId);
|
|
24
|
+
this.changed();
|
|
25
|
+
}
|
|
26
|
+
removeModel(modelId) {
|
|
27
|
+
this.store.removeModel(this.providerId, modelId);
|
|
28
|
+
this.changed();
|
|
29
|
+
}
|
|
30
|
+
batch(apply) {
|
|
31
|
+
this.store.batch(apply);
|
|
32
|
+
}
|
|
33
|
+
addModels(models) {
|
|
34
|
+
this.store.batch(() => {
|
|
35
|
+
for (const model of models)
|
|
36
|
+
this.store.addModel(this.providerId, model);
|
|
37
|
+
});
|
|
38
|
+
if (models.length > 0)
|
|
39
|
+
this.changed();
|
|
40
|
+
}
|
|
41
|
+
draft() {
|
|
42
|
+
const fields = {};
|
|
43
|
+
return {
|
|
44
|
+
isDraft: true,
|
|
45
|
+
read: () => fields,
|
|
46
|
+
setField: (path, value) => {
|
|
47
|
+
setPath(fields, path, value);
|
|
48
|
+
this.refresh();
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
commitDraft(draft) {
|
|
53
|
+
const fields = draft.read();
|
|
54
|
+
const id = (fields.id ?? "").trim();
|
|
55
|
+
if (!id)
|
|
56
|
+
return "Model id is required.";
|
|
57
|
+
if (this.store.getModel(this.providerId, id))
|
|
58
|
+
return `Model "${id}" already exists.`;
|
|
59
|
+
const settings = effectiveModelSettings(this.providerId, this.store.getProvider(this.providerId), fields);
|
|
60
|
+
if (!settings.api)
|
|
61
|
+
return "Cannot resolve an api — set one under Model-Specific API or the provider's API Auth.";
|
|
62
|
+
if (!settings.baseUrl)
|
|
63
|
+
return "Cannot resolve a baseUrl — set one under Model-Specific API or the provider's API Auth.";
|
|
64
|
+
this.store.addModel(this.providerId, { ...fields, id });
|
|
65
|
+
this.changed();
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
model(modelId, onRename) {
|
|
69
|
+
let id = modelId;
|
|
70
|
+
let snapshot;
|
|
71
|
+
return {
|
|
72
|
+
isDraft: false,
|
|
73
|
+
read: () => snapshot ?? this.store.getModel(this.providerId, id) ?? { id },
|
|
74
|
+
setField: (path, value) => {
|
|
75
|
+
this.store.setModelField(this.providerId, id, path, value);
|
|
76
|
+
this.changed();
|
|
77
|
+
},
|
|
78
|
+
rename: async (newId) => {
|
|
79
|
+
const oldId = id;
|
|
80
|
+
snapshot = this.store.getModel(this.providerId, id);
|
|
81
|
+
this.renaming = true;
|
|
82
|
+
try {
|
|
83
|
+
const error = await this.store.renameModel(this.providerId, id, newId);
|
|
84
|
+
if (error)
|
|
85
|
+
return error;
|
|
86
|
+
id = newId;
|
|
87
|
+
this.changed();
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
snapshot = undefined;
|
|
92
|
+
this.renaming = false;
|
|
93
|
+
onRename(oldId, id);
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=editing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editing.js","sourceRoot":"","sources":["../../../src/extensions/provider/editing.ts"],"names":[],"mappings":"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","sourcesContent":["/** Owns edits and refresh tracking; model handles keep persistence out of panes. */\nimport type { ModelsJsonModel } from \"../../core/model-config.ts\";\nimport { effectiveModelSettings, hasProviderSettings } from \"./configuration.ts\";\nimport { setPath } from \"./json-fields.ts\";\nimport type { RefreshCoordinator } from \"./refresh.ts\";\nimport type { ModelsJsonStore } from \"./store.ts\";\n\ninterface ModelFields {\n\tread(): Partial<ModelsJsonModel>;\n\tsetField(path: readonly string[], value: unknown): void;\n}\n\nexport interface DraftModelHandle extends ModelFields {\n\treadonly isDraft: true;\n}\n\nexport interface PersistedModelHandle extends ModelFields {\n\treadonly isDraft: false;\n\trename(newId: string): Promise<string | undefined>;\n}\n\nexport type ModelHandle = DraftModelHandle | PersistedModelHandle;\nexport type ProviderView = Pick<ModelsJsonStore, \"getProvider\" | \"getModels\" | \"getModel\">;\n\nexport class ProviderEdits {\n\tprivate readonly store: ModelsJsonStore;\n\tprivate readonly providerId: string;\n\tprivate readonly refresher: RefreshCoordinator;\n\tprivate readonly refresh: () => void;\n\trenaming = false;\n\n\tconstructor(store: ModelsJsonStore, providerId: string, refresher: RefreshCoordinator, refresh: () => void) {\n\t\tthis.store = store;\n\t\tthis.providerId = providerId;\n\t\tthis.refresher = refresher;\n\t\tthis.refresh = refresh;\n\t}\n\n\tprivate changed(): void {\n\t\tif (\n\t\t\t!this.store.isDraftProvider(this.providerId) ||\n\t\t\thasProviderSettings(this.store.getProvider(this.providerId))\n\t\t) {\n\t\t\tthis.refresher.touch(this.providerId);\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tsetProviderField(path: readonly string[], value: unknown): void {\n\t\tthis.store.setProviderField(this.providerId, path, value);\n\t\tthis.changed();\n\t}\n\n\tremoveProvider(): void {\n\t\tthis.store.removeProvider(this.providerId);\n\t\tthis.changed();\n\t}\n\n\tremoveModel(modelId: string): void {\n\t\tthis.store.removeModel(this.providerId, modelId);\n\t\tthis.changed();\n\t}\n\n\tbatch(apply: () => void): void {\n\t\tthis.store.batch(apply);\n\t}\n\n\taddModels(models: readonly ModelsJsonModel[]): void {\n\t\tthis.store.batch(() => {\n\t\t\tfor (const model of models) this.store.addModel(this.providerId, model);\n\t\t});\n\t\tif (models.length > 0) this.changed();\n\t}\n\n\tdraft(): DraftModelHandle {\n\t\tconst fields: Partial<ModelsJsonModel> = {};\n\t\treturn {\n\t\t\tisDraft: true,\n\t\t\tread: () => fields,\n\t\t\tsetField: (path, value) => {\n\t\t\t\tsetPath(fields, path, value);\n\t\t\t\tthis.refresh();\n\t\t\t},\n\t\t};\n\t}\n\n\tcommitDraft(draft: DraftModelHandle): string | undefined {\n\t\tconst fields = draft.read();\n\t\tconst id = (fields.id ?? \"\").trim();\n\t\tif (!id) return \"Model id is required.\";\n\t\tif (this.store.getModel(this.providerId, id)) return `Model \"${id}\" already exists.`;\n\t\tconst settings = effectiveModelSettings(this.providerId, this.store.getProvider(this.providerId), fields);\n\t\tif (!settings.api) return \"Cannot resolve an api — set one under Model-Specific API or the provider's API Auth.\";\n\t\tif (!settings.baseUrl)\n\t\t\treturn \"Cannot resolve a baseUrl — set one under Model-Specific API or the provider's API Auth.\";\n\t\tthis.store.addModel(this.providerId, { ...fields, id });\n\t\tthis.changed();\n\t\treturn undefined;\n\t}\n\n\tmodel(modelId: string, onRename: (oldId: string, newId: string) => void): PersistedModelHandle {\n\t\tlet id = modelId;\n\t\tlet snapshot: ModelsJsonModel | undefined;\n\t\treturn {\n\t\t\tisDraft: false,\n\t\t\tread: () => snapshot ?? this.store.getModel(this.providerId, id) ?? { id },\n\t\t\tsetField: (path, value) => {\n\t\t\t\tthis.store.setModelField(this.providerId, id, path, value);\n\t\t\t\tthis.changed();\n\t\t\t},\n\t\t\trename: async (newId) => {\n\t\t\t\tconst oldId = id;\n\t\t\t\tsnapshot = this.store.getModel(this.providerId, id);\n\t\t\t\tthis.renaming = true;\n\t\t\t\ttry {\n\t\t\t\t\tconst error = await this.store.renameModel(this.providerId, id, newId);\n\t\t\t\t\tif (error) return error;\n\t\t\t\t\tid = newId;\n\t\t\t\t\tthis.changed();\n\t\t\t\t\treturn undefined;\n\t\t\t\t} finally {\n\t\t\t\t\tsnapshot = undefined;\n\t\t\t\t\tthis.renaming = false;\n\t\t\t\t\tonRename(oldId, id);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** JSON field updates shared by drafts and queued store operations. */
|
|
2
|
+
export declare const DELETE: unique symbol;
|
|
3
|
+
export type DeleteMarker = typeof DELETE;
|
|
4
|
+
export declare function setPath(root: Record<string, unknown>, path: readonly string[], value: unknown): void;
|
|
5
|
+
//# sourceMappingURL=json-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-fields.d.ts","sourceRoot":"","sources":["../../../src/extensions/provider/json-fields.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,eAAO,MAAM,MAAM,EAAE,OAAO,MAAwC,CAAC;AACrE,MAAM,MAAM,YAAY,GAAG,OAAO,MAAM,CAAC;AAEzC,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAyBpG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** JSON field updates shared by drafts and queued store operations. */
|
|
2
|
+
export const DELETE = Symbol("provider-store-delete");
|
|
3
|
+
export function setPath(root, path, value) {
|
|
4
|
+
let current = root;
|
|
5
|
+
for (const segment of path.slice(0, -1)) {
|
|
6
|
+
const next = Object.hasOwn(current, segment) ? current[segment] : undefined;
|
|
7
|
+
if (typeof next === "object" && next !== null && !Array.isArray(next))
|
|
8
|
+
current = next;
|
|
9
|
+
else {
|
|
10
|
+
const created = {};
|
|
11
|
+
Object.defineProperty(current, segment, {
|
|
12
|
+
value: created,
|
|
13
|
+
writable: true,
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
});
|
|
17
|
+
current = created;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const leaf = path[path.length - 1];
|
|
21
|
+
if (value === DELETE)
|
|
22
|
+
delete current[leaf];
|
|
23
|
+
else
|
|
24
|
+
Object.defineProperty(current, leaf, {
|
|
25
|
+
value: structuredClone(value),
|
|
26
|
+
writable: true,
|
|
27
|
+
enumerable: true,
|
|
28
|
+
configurable: true,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=json-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-fields.js","sourceRoot":"","sources":["../../../src/extensions/provider/json-fields.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,CAAC,MAAM,MAAM,GAAkB,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAGrE,MAAM,UAAU,OAAO,CAAC,IAA6B,EAAE,IAAuB,EAAE,KAAc;IAC7F,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,IAA+B,CAAC;aAC5G,CAAC;YACL,MAAM,OAAO,GAA4B,EAAE,CAAC;YAC5C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE;gBACvC,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,OAAO,GAAG,OAAO,CAAC;QACnB,CAAC;IACF,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IACpC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;;QAE1C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;YAC7B,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;SAClB,CAAC,CAAC;AACL,CAAC","sourcesContent":["/** JSON field updates shared by drafts and queued store operations. */\nexport const DELETE: unique symbol = Symbol(\"provider-store-delete\");\nexport type DeleteMarker = typeof DELETE;\n\nexport function setPath(root: Record<string, unknown>, path: readonly string[], value: unknown): void {\n\tlet current = root;\n\tfor (const segment of path.slice(0, -1)) {\n\t\tconst next = Object.hasOwn(current, segment) ? current[segment] : undefined;\n\t\tif (typeof next === \"object\" && next !== null && !Array.isArray(next)) current = next as Record<string, unknown>;\n\t\telse {\n\t\t\tconst created: Record<string, unknown> = {};\n\t\t\tObject.defineProperty(current, segment, {\n\t\t\t\tvalue: created,\n\t\t\t\twritable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t});\n\t\t\tcurrent = created;\n\t\t}\n\t}\n\tconst leaf = path[path.length - 1]!;\n\tif (value === DELETE) delete current[leaf];\n\telse\n\t\tObject.defineProperty(current, leaf, {\n\t\t\tvalue: structuredClone(value),\n\t\t\twritable: true,\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t});\n}\n"]}
|
|
@@ -16,9 +16,7 @@
|
|
|
16
16
|
* unknown fields anywhere in the document are preserved verbatim.
|
|
17
17
|
*/
|
|
18
18
|
import { type ModelsJsonModel, type ModelsJsonProvider } from "../../core/model-config.ts";
|
|
19
|
-
|
|
20
|
-
export declare const DELETE: unique symbol;
|
|
21
|
-
export type DeleteMarker = typeof DELETE;
|
|
19
|
+
export { DELETE, type DeleteMarker } from "./json-fields.ts";
|
|
22
20
|
export interface ModelsJsonDocument {
|
|
23
21
|
providers: Record<string, ModelsJsonProvider>;
|
|
24
22
|
[key: string]: unknown;
|
|
@@ -127,5 +125,4 @@ export declare class ModelsJsonStore {
|
|
|
127
125
|
private save;
|
|
128
126
|
private saveLocked;
|
|
129
127
|
}
|
|
130
|
-
export {};
|
|
131
128
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/extensions/provider/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,EAAe,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/extensions/provider/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,8 +26,8 @@ import { normalizePath } from "../../utils/paths.js";
|
|
|
26
26
|
import { stripBom } from "../../utils/text.js";
|
|
27
27
|
import { hasProviderSettings } from "./configuration.js";
|
|
28
28
|
import { formatError } from "./constants.js";
|
|
29
|
-
|
|
30
|
-
export
|
|
29
|
+
import { DELETE, setPath } from "./json-fields.js";
|
|
30
|
+
export { DELETE } from "./json-fields.js";
|
|
31
31
|
function isPlainObject(value) {
|
|
32
32
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
33
33
|
}
|
|
@@ -46,34 +46,6 @@ export function jsonEquals(a, b) {
|
|
|
46
46
|
}
|
|
47
47
|
return false;
|
|
48
48
|
}
|
|
49
|
-
function setPath(root, path, value) {
|
|
50
|
-
let current = root;
|
|
51
|
-
for (const segment of path.slice(0, -1)) {
|
|
52
|
-
const next = Object.hasOwn(current, segment) ? current[segment] : undefined;
|
|
53
|
-
if (isPlainObject(next))
|
|
54
|
-
current = next;
|
|
55
|
-
else {
|
|
56
|
-
const created = {};
|
|
57
|
-
Object.defineProperty(current, segment, {
|
|
58
|
-
value: created,
|
|
59
|
-
writable: true,
|
|
60
|
-
enumerable: true,
|
|
61
|
-
configurable: true,
|
|
62
|
-
});
|
|
63
|
-
current = created;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
const leaf = path[path.length - 1];
|
|
67
|
-
if (value === DELETE)
|
|
68
|
-
delete current[leaf];
|
|
69
|
-
else
|
|
70
|
-
Object.defineProperty(current, leaf, {
|
|
71
|
-
value: structuredClone(value),
|
|
72
|
-
writable: true,
|
|
73
|
-
enumerable: true,
|
|
74
|
-
configurable: true,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
49
|
function cloneValue(value) {
|
|
78
50
|
return value === DELETE ? value : structuredClone(value);
|
|
79
51
|
}
|