@astralyn/pi 1.4.6 → 1.4.8

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.
Files changed (253) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/bundle/chunks/{chunk-EYKC6ESU.js → chunk-5VIOGR76.js} +1 -1
  3. package/dist/bundle/chunks/{chunk-KDO6L76C.js → chunk-FODCTZXW.js} +4 -4
  4. package/dist/bundle/chunks/{chunk-RBTJBQWX.js → chunk-I2COK45I.js} +136 -137
  5. package/dist/bundle/chunks/{chunk-AXFWZIHH.js → chunk-MG5XDTXV.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-ALHAFUHP.js → chunk-PU2IWWXV.js} +1 -1
  7. package/dist/bundle/chunks/{chunk-5M3YJ54Z.js → chunk-RO2VH6UZ.js} +1 -1
  8. package/dist/bundle/chunks/{cli-FH77R7JR.js → cli-MEL7SGJD.js} +1 -1
  9. package/dist/bundle/chunks/{execute-5ZQUS52M.js → execute-4CWRNHPO.js} +1 -1
  10. package/dist/bundle/chunks/{runtime-R5CMHJ5P.js → runtime-R3X67XMR.js} +1 -1
  11. package/dist/bundle/chunks/{virtual-modules-KCQU7LOC.js → virtual-modules-BBLD7YLS.js} +1 -1
  12. package/dist/bundle/cli.js +1 -1
  13. package/dist/bundle/index.js +1 -1
  14. package/dist/bundle/rpc-entry.js +1 -1
  15. package/dist/core/agent-session.d.ts +0 -3
  16. package/dist/core/agent-session.d.ts.map +1 -1
  17. package/dist/core/agent-session.js +0 -4
  18. package/dist/core/agent-session.js.map +1 -1
  19. package/dist/core/extensions/index.d.ts +1 -1
  20. package/dist/core/extensions/index.d.ts.map +1 -1
  21. package/dist/core/extensions/index.js.map +1 -1
  22. package/dist/core/package-manager.d.ts +3 -1
  23. package/dist/core/package-manager.d.ts.map +1 -1
  24. package/dist/core/package-manager.js +10 -0
  25. package/dist/core/package-manager.js.map +1 -1
  26. package/dist/core/resource-loader.d.ts +2 -0
  27. package/dist/core/resource-loader.d.ts.map +1 -1
  28. package/dist/core/resource-loader.js +17 -4
  29. package/dist/core/resource-loader.js.map +1 -1
  30. package/dist/core/settings-manager.d.ts +4 -2
  31. package/dist/core/settings-manager.d.ts.map +1 -1
  32. package/dist/core/settings-manager.js +11 -0
  33. package/dist/core/settings-manager.js.map +1 -1
  34. package/dist/core/settings-schema.d.ts +7 -0
  35. package/dist/core/settings-schema.d.ts.map +1 -1
  36. package/dist/core/settings-schema.js +6 -0
  37. package/dist/core/settings-schema.js.map +1 -1
  38. package/dist/core/skill-invocation.d.ts +46 -0
  39. package/dist/core/skill-invocation.d.ts.map +1 -0
  40. package/dist/core/skill-invocation.js +128 -0
  41. package/dist/core/skill-invocation.js.map +1 -0
  42. package/dist/core/skills.d.ts +10 -0
  43. package/dist/core/skills.d.ts.map +1 -1
  44. package/dist/core/skills.js +23 -0
  45. package/dist/core/skills.js.map +1 -1
  46. package/dist/core/tasks/delivery.d.ts +11 -4
  47. package/dist/core/tasks/delivery.d.ts.map +1 -1
  48. package/dist/core/tasks/delivery.js +9 -9
  49. package/dist/core/tasks/delivery.js.map +1 -1
  50. package/dist/core/tasks/execution.d.ts +10 -3
  51. package/dist/core/tasks/execution.d.ts.map +1 -1
  52. package/dist/core/tasks/execution.js +72 -52
  53. package/dist/core/tasks/execution.js.map +1 -1
  54. package/dist/core/tasks/format.d.ts +0 -2
  55. package/dist/core/tasks/format.d.ts.map +1 -1
  56. package/dist/core/tasks/format.js +1 -16
  57. package/dist/core/tasks/format.js.map +1 -1
  58. package/dist/core/tasks/limits.d.ts +12 -1
  59. package/dist/core/tasks/limits.d.ts.map +1 -1
  60. package/dist/core/tasks/limits.js +20 -1
  61. package/dist/core/tasks/limits.js.map +1 -1
  62. package/dist/core/tasks/output.d.ts +6 -12
  63. package/dist/core/tasks/output.d.ts.map +1 -1
  64. package/dist/core/tasks/output.js +35 -32
  65. package/dist/core/tasks/output.js.map +1 -1
  66. package/dist/core/tasks/record.d.ts +45 -0
  67. package/dist/core/tasks/record.d.ts.map +1 -0
  68. package/dist/core/tasks/record.js +80 -0
  69. package/dist/core/tasks/record.js.map +1 -0
  70. package/dist/core/tasks/runtime.d.ts +14 -14
  71. package/dist/core/tasks/runtime.d.ts.map +1 -1
  72. package/dist/core/tasks/runtime.js +111 -93
  73. package/dist/core/tasks/runtime.js.map +1 -1
  74. package/dist/core/tasks/session.d.ts +0 -1
  75. package/dist/core/tasks/session.d.ts.map +1 -1
  76. package/dist/core/tasks/session.js +7 -8
  77. package/dist/core/tasks/session.js.map +1 -1
  78. package/dist/core/tasks/store.d.ts +18 -25
  79. package/dist/core/tasks/store.d.ts.map +1 -1
  80. package/dist/core/tasks/store.js +42 -40
  81. package/dist/core/tasks/store.js.map +1 -1
  82. package/dist/core/tasks/types.d.ts +96 -17
  83. package/dist/core/tasks/types.d.ts.map +1 -1
  84. package/dist/core/tasks/types.js.map +1 -1
  85. package/dist/core/tools/shell-execution.d.ts +8 -7
  86. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  87. package/dist/core/tools/shell-execution.js +18 -26
  88. package/dist/core/tools/shell-execution.js.map +1 -1
  89. package/dist/core/tools/shell-tool.d.ts.map +1 -1
  90. package/dist/core/tools/shell-tool.js +31 -29
  91. package/dist/core/tools/shell-tool.js.map +1 -1
  92. package/dist/core/usage-totals.d.ts +3 -0
  93. package/dist/core/usage-totals.d.ts.map +1 -1
  94. package/dist/core/usage-totals.js +15 -0
  95. package/dist/core/usage-totals.js.map +1 -1
  96. package/dist/extensions/agent/progress.d.ts.map +1 -1
  97. package/dist/extensions/agent/progress.js +1 -11
  98. package/dist/extensions/agent/progress.js.map +1 -1
  99. package/dist/extensions/agent/settings-host.d.ts +33 -0
  100. package/dist/extensions/agent/settings-host.d.ts.map +1 -0
  101. package/dist/extensions/agent/settings-host.js +75 -0
  102. package/dist/extensions/agent/settings-host.js.map +1 -0
  103. package/dist/extensions/agent/settings.d.ts.map +1 -1
  104. package/dist/extensions/agent/settings.js +18 -7
  105. package/dist/extensions/agent/settings.js.map +1 -1
  106. package/dist/extensions/agent/tool.d.ts.map +1 -1
  107. package/dist/extensions/agent/tool.js +9 -5
  108. package/dist/extensions/agent/tool.js.map +1 -1
  109. package/dist/extensions/agent/worker.d.ts.map +1 -1
  110. package/dist/extensions/agent/worker.js +3 -5
  111. package/dist/extensions/agent/worker.js.map +1 -1
  112. package/dist/extensions/btw/agent.d.ts +1 -1
  113. package/dist/extensions/btw/agent.d.ts.map +1 -1
  114. package/dist/extensions/btw/agent.js +3 -20
  115. package/dist/extensions/btw/agent.js.map +1 -1
  116. package/dist/extensions/cached-compaction/index.d.ts.map +1 -1
  117. package/dist/extensions/cached-compaction/index.js +3 -22
  118. package/dist/extensions/cached-compaction/index.js.map +1 -1
  119. package/dist/extensions/cached-compaction/render.d.ts +1 -0
  120. package/dist/extensions/cached-compaction/render.d.ts.map +1 -1
  121. package/dist/extensions/cached-compaction/render.js +42 -14
  122. package/dist/extensions/cached-compaction/render.js.map +1 -1
  123. package/dist/extensions/deepwiki/client.d.ts.map +1 -1
  124. package/dist/extensions/deepwiki/client.js +6 -78
  125. package/dist/extensions/deepwiki/client.js.map +1 -1
  126. package/dist/extensions/deepwiki/transport.d.ts +3 -0
  127. package/dist/extensions/deepwiki/transport.d.ts.map +1 -0
  128. package/dist/extensions/deepwiki/transport.js +96 -0
  129. package/dist/extensions/deepwiki/transport.js.map +1 -0
  130. package/dist/extensions/provider/ui/builtin-data.d.ts +3 -3
  131. package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
  132. package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
  133. package/dist/extensions/provider/ui/compat.d.ts +3 -3
  134. package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
  135. package/dist/extensions/provider/ui/compat.js.map +1 -1
  136. package/dist/extensions/provider/ui/controls.d.ts +2 -2
  137. package/dist/extensions/provider/ui/controls.d.ts.map +1 -1
  138. package/dist/extensions/provider/ui/controls.js.map +1 -1
  139. package/dist/extensions/provider/ui/dialogs.d.ts +3 -3
  140. package/dist/extensions/provider/ui/dialogs.d.ts.map +1 -1
  141. package/dist/extensions/provider/ui/dialogs.js.map +1 -1
  142. package/dist/extensions/provider/ui/dictionary.d.ts +2 -2
  143. package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
  144. package/dist/extensions/provider/ui/dictionary.js.map +1 -1
  145. package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
  146. package/dist/extensions/provider/ui/editor.js +1 -3
  147. package/dist/extensions/provider/ui/editor.js.map +1 -1
  148. package/dist/extensions/provider/ui/fetch-models.d.ts +2 -2
  149. package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
  150. package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
  151. package/dist/extensions/provider/ui/model-fields.d.ts +2 -2
  152. package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
  153. package/dist/extensions/provider/ui/model-fields.js.map +1 -1
  154. package/dist/extensions/provider/ui/model-options.d.ts +6 -6
  155. package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
  156. package/dist/extensions/provider/ui/model-options.js.map +1 -1
  157. package/dist/extensions/provider/ui/pane.d.ts +21 -12
  158. package/dist/extensions/provider/ui/pane.d.ts.map +1 -1
  159. package/dist/extensions/provider/ui/pane.js.map +1 -1
  160. package/dist/extensions/provider/ui/provider-fields.d.ts +3 -3
  161. package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
  162. package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
  163. package/dist/extensions/provider/ui/thinking-map.d.ts +2 -2
  164. package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -1
  165. package/dist/extensions/provider/ui/thinking-map.js.map +1 -1
  166. package/dist/extensions/run-summary/format.js +1 -1
  167. package/dist/extensions/run-summary/format.js.map +1 -1
  168. package/dist/extensions/statusline/usage.d.ts.map +1 -1
  169. package/dist/extensions/statusline/usage.js +2 -6
  170. package/dist/extensions/statusline/usage.js.map +1 -1
  171. package/dist/extensions/tasks/tool/actions.d.ts +1 -1
  172. package/dist/extensions/tasks/tool/actions.d.ts.map +1 -1
  173. package/dist/extensions/tasks/tool/actions.js +49 -106
  174. package/dist/extensions/tasks/tool/actions.js.map +1 -1
  175. package/dist/extensions/tasks/tool/constants.d.ts +1 -6
  176. package/dist/extensions/tasks/tool/constants.d.ts.map +1 -1
  177. package/dist/extensions/tasks/tool/constants.js +1 -6
  178. package/dist/extensions/tasks/tool/constants.js.map +1 -1
  179. package/dist/extensions/tasks/tool/schema.d.ts +0 -3
  180. package/dist/extensions/tasks/tool/schema.d.ts.map +1 -1
  181. package/dist/extensions/tasks/tool/schema.js +4 -13
  182. package/dist/extensions/tasks/tool/schema.js.map +1 -1
  183. package/dist/extensions/tasks/tool.d.ts.map +1 -1
  184. package/dist/extensions/tasks/tool.js +2 -2
  185. package/dist/extensions/tasks/tool.js.map +1 -1
  186. package/dist/extensions/tasks/ui/completion-render.d.ts.map +1 -1
  187. package/dist/extensions/tasks/ui/completion-render.js +31 -33
  188. package/dist/extensions/tasks/ui/completion-render.js.map +1 -1
  189. package/dist/extensions/tasks/ui/layout.d.ts +7 -7
  190. package/dist/extensions/tasks/ui/layout.d.ts.map +1 -1
  191. package/dist/extensions/tasks/ui/layout.js +17 -19
  192. package/dist/extensions/tasks/ui/layout.js.map +1 -1
  193. package/dist/extensions/tasks/ui/list.d.ts.map +1 -1
  194. package/dist/extensions/tasks/ui/list.js +2 -3
  195. package/dist/extensions/tasks/ui/list.js.map +1 -1
  196. package/dist/extensions/tasks/ui/manager.d.ts +16 -7
  197. package/dist/extensions/tasks/ui/manager.d.ts.map +1 -1
  198. package/dist/extensions/tasks/ui/manager.js +163 -131
  199. package/dist/extensions/tasks/ui/manager.js.map +1 -1
  200. package/dist/extensions/tasks/ui/model.d.ts +25 -0
  201. package/dist/extensions/tasks/ui/model.d.ts.map +1 -1
  202. package/dist/extensions/tasks/ui/model.js +4 -0
  203. package/dist/extensions/tasks/ui/model.js.map +1 -1
  204. package/dist/extensions/tasks/ui/render.d.ts +1 -1
  205. package/dist/extensions/tasks/ui/render.d.ts.map +1 -1
  206. package/dist/extensions/tasks/ui/render.js +11 -7
  207. package/dist/extensions/tasks/ui/render.js.map +1 -1
  208. package/dist/extensions/tasks/ui/status.d.ts +15 -0
  209. package/dist/extensions/tasks/ui/status.d.ts.map +1 -0
  210. package/dist/extensions/tasks/ui/status.js +16 -0
  211. package/dist/extensions/tasks/ui/status.js.map +1 -0
  212. package/dist/index.d.ts +1 -1
  213. package/dist/index.d.ts.map +1 -1
  214. package/dist/index.js.map +1 -1
  215. package/dist/modes/interactive/components/config-selector.d.ts +17 -2
  216. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  217. package/dist/modes/interactive/components/config-selector.js +199 -18
  218. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  219. package/dist/modes/interactive/components/status-marker.d.ts +2 -1
  220. package/dist/modes/interactive/components/status-marker.d.ts.map +1 -1
  221. package/dist/modes/interactive/components/status-marker.js +0 -1
  222. package/dist/modes/interactive/components/status-marker.js.map +1 -1
  223. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  224. package/dist/modes/interactive/interactive-mode.js +7 -1
  225. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  226. package/dist/utils/duration.d.ts +3 -0
  227. package/dist/utils/duration.d.ts.map +1 -0
  228. package/dist/utils/duration.js +17 -0
  229. package/dist/utils/duration.js.map +1 -0
  230. package/dist/utils/number.d.ts +3 -0
  231. package/dist/utils/number.d.ts.map +1 -0
  232. package/dist/utils/number.js +5 -0
  233. package/dist/utils/number.js.map +1 -0
  234. package/docs/bundled/extensions/agent.md +3 -3
  235. package/docs/bundled/extensions/cached-compaction.md +13 -4
  236. package/docs/bundled/extensions/deepwiki.md +3 -1
  237. package/docs/extensions.md +5 -5
  238. package/docs/packages.md +5 -3
  239. package/docs/sdk.md +1 -1
  240. package/docs/session-format.md +1 -1
  241. package/docs/settings.md +11 -0
  242. package/docs/skills.md +23 -0
  243. package/npm-shrinkwrap.json +2 -2
  244. package/package.json +1 -1
  245. package/schemas/settings.schema.json +36 -0
  246. package/dist/extensions/deepwiki/http.d.ts +0 -13
  247. package/dist/extensions/deepwiki/http.d.ts.map +0 -1
  248. package/dist/extensions/deepwiki/http.js +0 -88
  249. package/dist/extensions/deepwiki/http.js.map +0 -1
  250. package/dist/extensions/tasks/ui/task-view.d.ts +0 -8
  251. package/dist/extensions/tasks/ui/task-view.d.ts.map +0 -1
  252. package/dist/extensions/tasks/ui/task-view.js +0 -13
  253. package/dist/extensions/tasks/ui/task-view.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-models.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/fetch-models.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Fetch Models pane: idle intro → cancellable loading → error / searchable\n * checklist of the remote catalog. Rows summarize the metadata each entry\n * declared; already-configured ids are marked \"Added\" and cannot be checked.\n * Importing appends the new entries with that metadata, saves once, and\n * refreshes the provider immediately.\n */\n\nimport \"../keybindings.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { truncate } from \"../constants.ts\";\nimport { modelCatalogUrl, type ProbeModel } from \"../probe.ts\";\nimport { moveSelection } from \"./controls.ts\";\nimport type { EditorHost, EditorPane } from \"./pane.ts\";\nimport { renderInfoLine, renderPlainLine, type ScrollWindowInfo, truncateMiddle, ValueEditor } from \"./value-row.ts\";\n\ninterface CatalogResults {\n\tmodels: ProbeModel[];\n\ttruncated: boolean;\n}\n\ntype FetchState =\n\t| { type: \"idle\" }\n\t| { type: \"loading\"; controller: AbortController }\n\t| { type: \"error\"; message: string }\n\t| { type: \"results\"; catalog: CatalogResults; error?: string }\n\t| { type: \"importing\"; catalog: CatalogResults; controller: AbortController };\n\n/** Compact token count for the row note, e.g. `1.0M`; the thresholds match the footer's usage stats. */\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\tif (count < 10000000) return `${(count / 1000000).toFixed(1)}M`;\n\treturn `${Math.round(count / 1000000)}M`;\n}\n\n/** Dim row note for the declared metadata, e.g. `· 1.0M ctx · 393k out · img · think`. */\nfunction metadataNote(model: ProbeModel): string | undefined {\n\tconst parts = [\n\t\tmodel.contextWindow ? `${formatTokens(model.contextWindow)} ctx` : \"\",\n\t\tmodel.maxTokens ? `${formatTokens(model.maxTokens)} out` : \"\",\n\t\tmodel.input?.includes(\"image\") ? \"img\" : \"\",\n\t\tmodel.reasoning ? \"think\" : \"\",\n\t].filter(Boolean);\n\treturn parts.length > 0 ? `· ${parts.join(\" · \")}` : undefined;\n}\n\nexport class FetchModelsPane implements EditorPane {\n\tprivate state: FetchState = { type: \"idle\" };\n\tprivate search: ValueEditor;\n\tprivate query = \"\";\n\tprivate index = 0;\n\tprivate checked = new Set<string>();\n\tprivate focused = false;\n\tprivate disposed = false;\n\n\tprivate readonly host: EditorHost;\n\tconstructor(host: EditorHost) {\n\t\tthis.host = host;\n\n\t\tthis.search = new ValueEditor({\n\t\t\tonCommit: () => this.importChecked(),\n\t\t\tonCancel: () => this.exitResults(),\n\t\t});\n\t}\n\n\t/** Enter pressed on the left-column row (or on the idle pane): start the request. */\n\tstart(): void {\n\t\tif (this.disposed || this.state.type === \"loading\" || this.state.type === \"importing\") return;\n\t\tif (!this.catalogUrl()) return; // the idle pane explains what to configure first\n\t\tconst controller = new AbortController();\n\t\tthis.state = { type: \"loading\", controller };\n\t\tthis.host.refresh();\n\t\tvoid this.host\n\t\t\t.runFetch(controller.signal)\n\t\t\t.then((result) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.disposed ||\n\t\t\t\t\tcontroller.signal.aborted ||\n\t\t\t\t\tthis.state.type !== \"loading\" ||\n\t\t\t\t\tthis.state.controller !== controller\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\tif (result.error === \"Cancelled.\") return;\n\t\t\t\t\tthis.state = { type: \"error\", message: result.error };\n\t\t\t\t\tthis.host.setFetchStatus(\"· failed\");\n\t\t\t\t} else {\n\t\t\t\t\tthis.state = { type: \"results\", catalog: result };\n\t\t\t\t\tthis.checked = new Set();\n\t\t\t\t\tthis.query = \"\";\n\t\t\t\t\tthis.search.reset(\"\");\n\t\t\t\t\tthis.index = 0;\n\t\t\t\t\tthis.search.focused = this.focused;\n\t\t\t\t\tthis.host.setFetchStatus(`· ${result.models.length} models`);\n\t\t\t\t}\n\t\t\t\tthis.host.refresh();\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.disposed ||\n\t\t\t\t\tcontroller.signal.aborted ||\n\t\t\t\t\tthis.state.type !== \"loading\" ||\n\t\t\t\t\tthis.state.controller !== controller\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t\tthis.state = { type: \"error\", message: error instanceof Error ? error.message : String(error) };\n\t\t\t\tthis.host.setFetchStatus(\"· failed\");\n\t\t\t\tthis.host.refresh();\n\t\t\t});\n\t}\n\n\tprivate existingIds(): Set<string> {\n\t\treturn new Set(this.host.store.getModels(this.host.providerId).map((model) => model.id));\n\t}\n\n\t/** URL the catalog would be fetched from; undefined while no baseUrl is configured. */\n\tprivate catalogUrl(): string | undefined {\n\t\tconst baseUrl = this.host.store.getProvider(this.host.providerId)?.baseUrl;\n\t\ttry {\n\t\t\treturn baseUrl ? modelCatalogUrl(new URL(baseUrl), this.host.effectiveApi()).href : undefined;\n\t\t} catch {\n\t\t\treturn undefined; // validated before fetching\n\t\t}\n\t}\n\n\tprivate rows(): { model: ProbeModel; added: boolean }[] {\n\t\tif (this.state.type !== \"results\" && this.state.type !== \"importing\") return [];\n\t\tconst existing = this.existingIds();\n\t\tconst rows = this.state.catalog.models.map((model) => ({ model, added: existing.has(model.id) }));\n\t\tconst query = this.query.trim().toLowerCase();\n\t\tif (!query) return rows;\n\t\treturn rows.filter(\n\t\t\t(row) => row.model.id.toLowerCase().includes(query) || row.model.name?.toLowerCase().includes(query),\n\t\t);\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst catalogUrl = this.catalogUrl();\n\t\tswitch (this.state.type) {\n\t\t\tcase \"idle\":\n\t\t\t\t// A real action row, so → moving focus here has a visible effect.\n\t\t\t\treturn catalogUrl\n\t\t\t\t\t? [\n\t\t\t\t\t\t\trenderPlainLine(theme, \"Fetch Models\", {\n\t\t\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\t\tnote: `· from ${truncateMiddle(catalogUrl, Math.max(10, width - 22))}`,\n\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t]\n\t\t\t\t\t: [renderInfoLine(theme, \"Set a baseUrl under API Auth first.\", width)];\n\t\t\tcase \"loading\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `Fetching ${catalogUrl ?? \"\"} …`, width),\n\t\t\t\t\trenderInfoLine(theme, \"Esc cancels the request.\", width),\n\t\t\t\t];\n\t\t\tcase \"error\":\n\t\t\t\treturn [\n\t\t\t\t\ttheme.fg(\"error\", truncate(this.state.message, Math.max(10, width - 2))),\n\t\t\t\t\trenderInfoLine(theme, \"Enter retries; Esc goes back.\", width),\n\t\t\t\t];\n\t\t\tcase \"importing\":\n\t\t\tcase \"results\": {\n\t\t\t\tconst lines: string[] = [];\n\t\t\t\tif (this.state.catalog.truncated) {\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\trenderInfoLine(theme, \"The catalog was truncated; refine manually if a model is missing.\", width),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tlines.push(this.search.renderLine(width));\n\t\t\t\t// All rows render; the editor's fixed window scrolls around scrollWindow().\n\t\t\t\tconst rows = this.rows();\n\t\t\t\tfor (const [rowIndex, row] of rows.entries()) {\n\t\t\t\t\tif (row.added) {\n\t\t\t\t\t\tlines.push(\n\t\t\t\t\t\t\trenderPlainLine(theme, row.model.id, {\n\t\t\t\t\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\t\tdim: true,\n\t\t\t\t\t\t\t\tnote: \"· Added\",\n\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\trenderPlainLine(theme, row.model.name ? `${row.model.id} · ${row.model.name}` : row.model.id, {\n\t\t\t\t\t\t\tchecked: this.checked.has(row.model.id),\n\t\t\t\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\tnote: metadataNote(row.model),\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (rows.length === 0) lines.push(renderInfoLine(theme, \"No matching models.\", width));\n\t\t\t\tconst addedCount = rows.filter((row) => row.added).length;\n\t\t\t\tlines.push(\n\t\t\t\t\trenderInfoLine(\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t`${this.checked.size} selected · ${rows.length} shown${addedCount ? ` · ${addedCount} already added` : \"\"}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tif (this.state.type === \"importing\") lines.push(renderInfoLine(theme, \"Importing…\", width));\n\t\t\t\tif (this.state.type === \"results\" && this.state.error)\n\t\t\t\t\tlines.push(theme.fg(\"error\", truncate(this.state.error, Math.max(10, width - 2))));\n\t\t\t\treturn lines;\n\t\t\t}\n\t\t}\n\t}\n\n\tscrollWindow(): ScrollWindowInfo {\n\t\tif (this.state.type !== \"results\" && this.state.type !== \"importing\") return {};\n\t\t// The truncation notice and the filter input pin above the checklist;\n\t\t// the selection summary (and import progress/error) pin below.\n\t\tconst top = (this.state.catalog.truncated ? 1 : 0) + 1;\n\t\tconst bottom = 1 + (this.state.type === \"importing\" || this.state.error ? 1 : 0);\n\t\treturn { top, bottom, cursor: top + this.index };\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tswitch (this.state.type) {\n\t\t\tcase \"idle\":\n\t\t\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\t\t\tthis.start(); // guarded internally\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\t\t\tthis.host.popPane();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"loading\":\n\t\t\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\t\t\tthis.state.controller.abort();\n\t\t\t\t\tthis.state = { type: \"idle\" };\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"error\":\n\t\t\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\t\t\tthis.start();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\t\t\tthis.host.popPane();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"importing\":\n\t\t\tcase \"results\":\n\t\t\t\tthis.handleResultsInput(data);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate handleResultsInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst rows = this.rows();\n\t\tconst next = moveSelection(kb, data, this.index, rows.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.list.toggle\")) {\n\t\t\tconst row = rows[this.index];\n\t\t\tif (!row || row.added || this.state.type === \"importing\") return;\n\t\t\tif (this.checked.has(row.model.id)) this.checked.delete(row.model.id);\n\t\t\telse this.checked.add(row.model.id);\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.exitResults();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.importChecked();\n\t\t\treturn;\n\t\t}\n\t\tconst before = this.query;\n\t\tthis.search.handleInput(data);\n\t\tthis.query = this.search.value;\n\t\tif (this.query !== before) this.index = 0;\n\t\tthis.host.refresh();\n\t}\n\n\tprivate importChecked(): void {\n\t\tif (this.state.type !== \"results\") return;\n\t\t// Nothing checked: import the highlighted row, like a fuzzy picker. Only Esc discards.\n\t\tlet chosen: ProbeModel[];\n\t\tif (this.checked.size === 0) {\n\t\t\tconst row = this.rows()[this.index];\n\t\t\tif (!row || row.added) return;\n\t\t\tchosen = [row.model];\n\t\t} else {\n\t\t\tchosen = this.state.catalog.models.filter((model) => this.checked.has(model.id));\n\t\t}\n\t\tconst controller = new AbortController();\n\t\tconst catalog = this.state.catalog;\n\t\tthis.state = { type: \"importing\", catalog, controller };\n\t\tthis.host.refresh();\n\t\tvoid this.host\n\t\t\t.importModels(chosen, controller.signal)\n\t\t\t.then((error) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.disposed ||\n\t\t\t\t\tcontroller.signal.aborted ||\n\t\t\t\t\tthis.state.type !== \"importing\" ||\n\t\t\t\t\tthis.state.controller !== controller\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t\tif (error) {\n\t\t\t\t\tthis.state = { type: \"results\", catalog, error };\n\t\t\t\t\tthis.host.setFetchStatus(\"· import failed\");\n\t\t\t\t\treturn this.host.refresh();\n\t\t\t\t}\n\t\t\t\tthis.host.setFetchStatus(`· ${this.host.store.getModels(this.host.providerId).length} models`);\n\t\t\t\tthis.state = { type: \"idle\" };\n\t\t\t\tthis.host.popPane(); // back to the left column with the new models visible\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.disposed ||\n\t\t\t\t\tcontroller.signal.aborted ||\n\t\t\t\t\tthis.state.type !== \"importing\" ||\n\t\t\t\t\tthis.state.controller !== controller\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t\tthis.state = { type: \"results\", catalog, error: error instanceof Error ? error.message : String(error) };\n\t\t\t\tthis.host.refresh();\n\t\t\t});\n\t}\n\n\tprivate exitResults(): void {\n\t\tif (this.state.type === \"loading\" || this.state.type === \"importing\") this.state.controller.abort();\n\t\tthis.state = { type: \"idle\" };\n\t\tthis.checked = new Set();\n\t\tthis.host.popPane();\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tthis.search.focused = focused && (this.state.type === \"results\" || this.state.type === \"importing\");\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.state.type === \"results\" || this.state.type === \"importing\"; // the filter input owns ←/→\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tif (this.state.type === \"loading\" || this.state.type === \"importing\") this.state.controller.abort();\n\t}\n\n\thints(): string {\n\t\tswitch (this.state.type) {\n\t\t\tcase \"loading\":\n\t\t\t\treturn keyHint(\"tui.select.cancel\", \"cancel request\");\n\t\t\tcase \"importing\":\n\t\t\tcase \"results\":\n\t\t\t\treturn [\n\t\t\t\t\trawKeyHint(\"type\", \"filter\"),\n\t\t\t\t\tkeyHint(\"app.list.toggle\", \"check\"),\n\t\t\t\t\tkeyHint(\"tui.select.confirm\", \"import\"),\n\t\t\t\t\tkeyHint(\"tui.select.cancel\", \"discard\"),\n\t\t\t\t].join(\" \");\n\t\t\tcase \"error\":\n\t\t\t\treturn [keyHint(\"tui.select.confirm\", \"retry\"), keyHint(\"tui.select.cancel\", \"back\")].join(\" \");\n\t\t\tdefault:\n\t\t\t\treturn this.catalogUrl()\n\t\t\t\t\t? [keyHint(\"tui.select.confirm\", \"fetch\"), keyHint(\"tui.select.cancel\", \"back\")].join(\" \")\n\t\t\t\t\t: keyHint(\"tui.select.cancel\", \"back\");\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"fetch-models.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/fetch-models.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Fetch Models pane: idle intro → cancellable loading → error / searchable\n * checklist of the remote catalog. Rows summarize the metadata each entry\n * declared; already-configured ids are marked \"Added\" and cannot be checked.\n * Importing appends the new entries with that metadata, saves once, and\n * refreshes the provider immediately.\n */\n\nimport \"../keybindings.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { truncate } from \"../constants.ts\";\nimport { modelCatalogUrl, type ProbeModel } from \"../probe.ts\";\nimport { moveSelection } from \"./controls.ts\";\nimport type { EditorPane, FetchModelsHost } from \"./pane.ts\";\nimport { renderInfoLine, renderPlainLine, type ScrollWindowInfo, truncateMiddle, ValueEditor } from \"./value-row.ts\";\n\ninterface CatalogResults {\n\tmodels: ProbeModel[];\n\ttruncated: boolean;\n}\n\ntype FetchState =\n\t| { type: \"idle\" }\n\t| { type: \"loading\"; controller: AbortController }\n\t| { type: \"error\"; message: string }\n\t| { type: \"results\"; catalog: CatalogResults; error?: string }\n\t| { type: \"importing\"; catalog: CatalogResults; controller: AbortController };\n\n/** Compact token count for the row note, e.g. `1.0M`; the thresholds match the footer's usage stats. */\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\tif (count < 10000000) return `${(count / 1000000).toFixed(1)}M`;\n\treturn `${Math.round(count / 1000000)}M`;\n}\n\n/** Dim row note for the declared metadata, e.g. `· 1.0M ctx · 393k out · img · think`. */\nfunction metadataNote(model: ProbeModel): string | undefined {\n\tconst parts = [\n\t\tmodel.contextWindow ? `${formatTokens(model.contextWindow)} ctx` : \"\",\n\t\tmodel.maxTokens ? `${formatTokens(model.maxTokens)} out` : \"\",\n\t\tmodel.input?.includes(\"image\") ? \"img\" : \"\",\n\t\tmodel.reasoning ? \"think\" : \"\",\n\t].filter(Boolean);\n\treturn parts.length > 0 ? `· ${parts.join(\" · \")}` : undefined;\n}\n\nexport class FetchModelsPane implements EditorPane {\n\tprivate state: FetchState = { type: \"idle\" };\n\tprivate search: ValueEditor;\n\tprivate query = \"\";\n\tprivate index = 0;\n\tprivate checked = new Set<string>();\n\tprivate focused = false;\n\tprivate disposed = false;\n\n\tprivate readonly host: FetchModelsHost;\n\tconstructor(host: FetchModelsHost) {\n\t\tthis.host = host;\n\n\t\tthis.search = new ValueEditor({\n\t\t\tonCommit: () => this.importChecked(),\n\t\t\tonCancel: () => this.exitResults(),\n\t\t});\n\t}\n\n\t/** Enter pressed on the left-column row (or on the idle pane): start the request. */\n\tstart(): void {\n\t\tif (this.disposed || this.state.type === \"loading\" || this.state.type === \"importing\") return;\n\t\tif (!this.catalogUrl()) return; // the idle pane explains what to configure first\n\t\tconst controller = new AbortController();\n\t\tthis.state = { type: \"loading\", controller };\n\t\tthis.host.refresh();\n\t\tvoid this.host\n\t\t\t.runFetch(controller.signal)\n\t\t\t.then((result) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.disposed ||\n\t\t\t\t\tcontroller.signal.aborted ||\n\t\t\t\t\tthis.state.type !== \"loading\" ||\n\t\t\t\t\tthis.state.controller !== controller\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\tif (result.error === \"Cancelled.\") return;\n\t\t\t\t\tthis.state = { type: \"error\", message: result.error };\n\t\t\t\t\tthis.host.setFetchStatus(\"· failed\");\n\t\t\t\t} else {\n\t\t\t\t\tthis.state = { type: \"results\", catalog: result };\n\t\t\t\t\tthis.checked = new Set();\n\t\t\t\t\tthis.query = \"\";\n\t\t\t\t\tthis.search.reset(\"\");\n\t\t\t\t\tthis.index = 0;\n\t\t\t\t\tthis.search.focused = this.focused;\n\t\t\t\t\tthis.host.setFetchStatus(`· ${result.models.length} models`);\n\t\t\t\t}\n\t\t\t\tthis.host.refresh();\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.disposed ||\n\t\t\t\t\tcontroller.signal.aborted ||\n\t\t\t\t\tthis.state.type !== \"loading\" ||\n\t\t\t\t\tthis.state.controller !== controller\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t\tthis.state = { type: \"error\", message: error instanceof Error ? error.message : String(error) };\n\t\t\t\tthis.host.setFetchStatus(\"· failed\");\n\t\t\t\tthis.host.refresh();\n\t\t\t});\n\t}\n\n\tprivate existingIds(): Set<string> {\n\t\treturn new Set(this.host.store.getModels(this.host.providerId).map((model) => model.id));\n\t}\n\n\t/** URL the catalog would be fetched from; undefined while no baseUrl is configured. */\n\tprivate catalogUrl(): string | undefined {\n\t\tconst baseUrl = this.host.store.getProvider(this.host.providerId)?.baseUrl;\n\t\ttry {\n\t\t\treturn baseUrl ? modelCatalogUrl(new URL(baseUrl), this.host.effectiveApi()).href : undefined;\n\t\t} catch {\n\t\t\treturn undefined; // validated before fetching\n\t\t}\n\t}\n\n\tprivate rows(): { model: ProbeModel; added: boolean }[] {\n\t\tif (this.state.type !== \"results\" && this.state.type !== \"importing\") return [];\n\t\tconst existing = this.existingIds();\n\t\tconst rows = this.state.catalog.models.map((model) => ({ model, added: existing.has(model.id) }));\n\t\tconst query = this.query.trim().toLowerCase();\n\t\tif (!query) return rows;\n\t\treturn rows.filter(\n\t\t\t(row) => row.model.id.toLowerCase().includes(query) || row.model.name?.toLowerCase().includes(query),\n\t\t);\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst catalogUrl = this.catalogUrl();\n\t\tswitch (this.state.type) {\n\t\t\tcase \"idle\":\n\t\t\t\t// A real action row, so → moving focus here has a visible effect.\n\t\t\t\treturn catalogUrl\n\t\t\t\t\t? [\n\t\t\t\t\t\t\trenderPlainLine(theme, \"Fetch Models\", {\n\t\t\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\t\tnote: `· from ${truncateMiddle(catalogUrl, Math.max(10, width - 22))}`,\n\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t]\n\t\t\t\t\t: [renderInfoLine(theme, \"Set a baseUrl under API Auth first.\", width)];\n\t\t\tcase \"loading\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `Fetching ${catalogUrl ?? \"\"} …`, width),\n\t\t\t\t\trenderInfoLine(theme, \"Esc cancels the request.\", width),\n\t\t\t\t];\n\t\t\tcase \"error\":\n\t\t\t\treturn [\n\t\t\t\t\ttheme.fg(\"error\", truncate(this.state.message, Math.max(10, width - 2))),\n\t\t\t\t\trenderInfoLine(theme, \"Enter retries; Esc goes back.\", width),\n\t\t\t\t];\n\t\t\tcase \"importing\":\n\t\t\tcase \"results\": {\n\t\t\t\tconst lines: string[] = [];\n\t\t\t\tif (this.state.catalog.truncated) {\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\trenderInfoLine(theme, \"The catalog was truncated; refine manually if a model is missing.\", width),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tlines.push(this.search.renderLine(width));\n\t\t\t\t// All rows render; the editor's fixed window scrolls around scrollWindow().\n\t\t\t\tconst rows = this.rows();\n\t\t\t\tfor (const [rowIndex, row] of rows.entries()) {\n\t\t\t\t\tif (row.added) {\n\t\t\t\t\t\tlines.push(\n\t\t\t\t\t\t\trenderPlainLine(theme, row.model.id, {\n\t\t\t\t\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\t\tdim: true,\n\t\t\t\t\t\t\t\tnote: \"· Added\",\n\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\trenderPlainLine(theme, row.model.name ? `${row.model.id} · ${row.model.name}` : row.model.id, {\n\t\t\t\t\t\t\tchecked: this.checked.has(row.model.id),\n\t\t\t\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\tnote: metadataNote(row.model),\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (rows.length === 0) lines.push(renderInfoLine(theme, \"No matching models.\", width));\n\t\t\t\tconst addedCount = rows.filter((row) => row.added).length;\n\t\t\t\tlines.push(\n\t\t\t\t\trenderInfoLine(\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t`${this.checked.size} selected · ${rows.length} shown${addedCount ? ` · ${addedCount} already added` : \"\"}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tif (this.state.type === \"importing\") lines.push(renderInfoLine(theme, \"Importing…\", width));\n\t\t\t\tif (this.state.type === \"results\" && this.state.error)\n\t\t\t\t\tlines.push(theme.fg(\"error\", truncate(this.state.error, Math.max(10, width - 2))));\n\t\t\t\treturn lines;\n\t\t\t}\n\t\t}\n\t}\n\n\tscrollWindow(): ScrollWindowInfo {\n\t\tif (this.state.type !== \"results\" && this.state.type !== \"importing\") return {};\n\t\t// The truncation notice and the filter input pin above the checklist;\n\t\t// the selection summary (and import progress/error) pin below.\n\t\tconst top = (this.state.catalog.truncated ? 1 : 0) + 1;\n\t\tconst bottom = 1 + (this.state.type === \"importing\" || this.state.error ? 1 : 0);\n\t\treturn { top, bottom, cursor: top + this.index };\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tswitch (this.state.type) {\n\t\t\tcase \"idle\":\n\t\t\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\t\t\tthis.start(); // guarded internally\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\t\t\tthis.host.popPane();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"loading\":\n\t\t\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\t\t\tthis.state.controller.abort();\n\t\t\t\t\tthis.state = { type: \"idle\" };\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"error\":\n\t\t\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\t\t\tthis.start();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\t\t\tthis.host.popPane();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"importing\":\n\t\t\tcase \"results\":\n\t\t\t\tthis.handleResultsInput(data);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate handleResultsInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst rows = this.rows();\n\t\tconst next = moveSelection(kb, data, this.index, rows.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.list.toggle\")) {\n\t\t\tconst row = rows[this.index];\n\t\t\tif (!row || row.added || this.state.type === \"importing\") return;\n\t\t\tif (this.checked.has(row.model.id)) this.checked.delete(row.model.id);\n\t\t\telse this.checked.add(row.model.id);\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.exitResults();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.importChecked();\n\t\t\treturn;\n\t\t}\n\t\tconst before = this.query;\n\t\tthis.search.handleInput(data);\n\t\tthis.query = this.search.value;\n\t\tif (this.query !== before) this.index = 0;\n\t\tthis.host.refresh();\n\t}\n\n\tprivate importChecked(): void {\n\t\tif (this.state.type !== \"results\") return;\n\t\t// Nothing checked: import the highlighted row, like a fuzzy picker. Only Esc discards.\n\t\tlet chosen: ProbeModel[];\n\t\tif (this.checked.size === 0) {\n\t\t\tconst row = this.rows()[this.index];\n\t\t\tif (!row || row.added) return;\n\t\t\tchosen = [row.model];\n\t\t} else {\n\t\t\tchosen = this.state.catalog.models.filter((model) => this.checked.has(model.id));\n\t\t}\n\t\tconst controller = new AbortController();\n\t\tconst catalog = this.state.catalog;\n\t\tthis.state = { type: \"importing\", catalog, controller };\n\t\tthis.host.refresh();\n\t\tvoid this.host\n\t\t\t.importModels(chosen, controller.signal)\n\t\t\t.then((error) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.disposed ||\n\t\t\t\t\tcontroller.signal.aborted ||\n\t\t\t\t\tthis.state.type !== \"importing\" ||\n\t\t\t\t\tthis.state.controller !== controller\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t\tif (error) {\n\t\t\t\t\tthis.state = { type: \"results\", catalog, error };\n\t\t\t\t\tthis.host.setFetchStatus(\"· import failed\");\n\t\t\t\t\treturn this.host.refresh();\n\t\t\t\t}\n\t\t\t\tthis.host.setFetchStatus(`· ${this.host.store.getModels(this.host.providerId).length} models`);\n\t\t\t\tthis.state = { type: \"idle\" };\n\t\t\t\tthis.host.popPane(); // back to the left column with the new models visible\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.disposed ||\n\t\t\t\t\tcontroller.signal.aborted ||\n\t\t\t\t\tthis.state.type !== \"importing\" ||\n\t\t\t\t\tthis.state.controller !== controller\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t\tthis.state = { type: \"results\", catalog, error: error instanceof Error ? error.message : String(error) };\n\t\t\t\tthis.host.refresh();\n\t\t\t});\n\t}\n\n\tprivate exitResults(): void {\n\t\tif (this.state.type === \"loading\" || this.state.type === \"importing\") this.state.controller.abort();\n\t\tthis.state = { type: \"idle\" };\n\t\tthis.checked = new Set();\n\t\tthis.host.popPane();\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tthis.search.focused = focused && (this.state.type === \"results\" || this.state.type === \"importing\");\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.state.type === \"results\" || this.state.type === \"importing\"; // the filter input owns ←/→\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tif (this.state.type === \"loading\" || this.state.type === \"importing\") this.state.controller.abort();\n\t}\n\n\thints(): string {\n\t\tswitch (this.state.type) {\n\t\t\tcase \"loading\":\n\t\t\t\treturn keyHint(\"tui.select.cancel\", \"cancel request\");\n\t\t\tcase \"importing\":\n\t\t\tcase \"results\":\n\t\t\t\treturn [\n\t\t\t\t\trawKeyHint(\"type\", \"filter\"),\n\t\t\t\t\tkeyHint(\"app.list.toggle\", \"check\"),\n\t\t\t\t\tkeyHint(\"tui.select.confirm\", \"import\"),\n\t\t\t\t\tkeyHint(\"tui.select.cancel\", \"discard\"),\n\t\t\t\t].join(\" \");\n\t\t\tcase \"error\":\n\t\t\t\treturn [keyHint(\"tui.select.confirm\", \"retry\"), keyHint(\"tui.select.cancel\", \"back\")].join(\" \");\n\t\t\tdefault:\n\t\t\t\treturn this.catalogUrl()\n\t\t\t\t\t? [keyHint(\"tui.select.confirm\", \"fetch\"), keyHint(\"tui.select.cancel\", \"back\")].join(\" \")\n\t\t\t\t\t: keyHint(\"tui.select.cancel\", \"back\");\n\t\t}\n\t}\n}\n"]}
@@ -5,7 +5,7 @@
5
5
  * store ops that save immediately.
6
6
  */
7
7
  import "../keybindings.ts";
8
- import type { EditorHost, EditorPane, ModelHandle } from "./pane.ts";
8
+ import type { EditorPane, ModelFieldsHost, ModelHandle } from "./pane.ts";
9
9
  import { type ScrollWindowInfo } from "./value-row.ts";
10
10
  export declare class ModelFieldsPane implements EditorPane {
11
11
  private readonly rows;
@@ -18,7 +18,7 @@ export declare class ModelFieldsPane implements EditorPane {
18
18
  private disposed;
19
19
  private readonly host;
20
20
  private readonly model;
21
- constructor(host: EditorHost, model: ModelHandle);
21
+ constructor(host: ModelFieldsHost, model: ModelHandle);
22
22
  /** Enter id editing immediately (used right after + Add Model). */
23
23
  startEditingId(): void;
24
24
  /** A draft with no fields set is safe to abandon without asking. */
@@ -1 +1 @@
1
- {"version":3,"file":"model-fields.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/model-fields.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,mBAAmB,CAAC;AAU3B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAIN,KAAK,gBAAgB,EAErB,MAAM,gBAAgB,CAAC;AAcxB,qBAAa,eAAgB,YAAW,UAAU;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW;IAoBhD,mEAAmE;IACnE,cAAc,IAAI,IAAI;IAKtB,oEAAoE;IACpE,OAAO,CAAC,UAAU;IAIlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAqB/B,YAAY,IAAI,gBAAgB;IAShC,OAAO,CAAC,SAAS;IAsFjB,uGAAuG;IACvG,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,cAAc;IAkCtB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA6C/B,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,QAAQ;IAyChB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,UAAU;IA0ElB,OAAO,CAAC,WAAW;IAiBnB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,OAAO,IAAI,IAAI;IAIf,KAAK,IAAI,MAAM;CASf"}
1
+ {"version":3,"file":"model-fields.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/model-fields.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,mBAAmB,CAAC;AAU3B,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE1E,OAAO,EAIN,KAAK,gBAAgB,EAErB,MAAM,gBAAgB,CAAC;AAcxB,qBAAa,eAAgB,YAAW,UAAU;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW;IAoBrD,mEAAmE;IACnE,cAAc,IAAI,IAAI;IAKtB,oEAAoE;IACpE,OAAO,CAAC,UAAU;IAIlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAqB/B,YAAY,IAAI,gBAAgB;IAShC,OAAO,CAAC,SAAS;IAsFjB,uGAAuG;IACvG,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,cAAc;IAkCtB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA6C/B,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,QAAQ;IAyChB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,UAAU;IA0ElB,OAAO,CAAC,WAAW;IAiBnB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,OAAO,IAAI,IAAI;IAIf,KAAK,IAAI,MAAM;CASf"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-fields.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/model-fields.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Model field pane (right column for a selected model) plus its nested\n * sub-panes: thinkingLevelMap, input modalities, and cost. All edits flow\n * through the ModelHandle — drafts mutate memory, persisted models queue\n * store ops that save immediately.\n */\n\nimport \"../keybindings.ts\";\nimport type { ModelsJsonModel } from \"../../../core/model-config.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { matchBuiltinModels } from \"../catalog.ts\";\nimport { plural, truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { BuiltinCandidatesPane } from \"./builtin-data.ts\";\nimport { CompatPane } from \"./compat.ts\";\nimport { moveSelection } from \"./controls.ts\";\nimport { CostPane, createReasoningPane, InputTypesPane, ModelSpecificApiPane } from \"./model-options.ts\";\nimport type { EditorHost, EditorPane, ModelHandle } from \"./pane.ts\";\nimport { ThinkingMapPane } from \"./thinking-map.ts\";\nimport {\n\tisPrintableInput,\n\trenderInfoLine,\n\trenderKeyValueLine,\n\ttype ScrollWindowInfo,\n\tValueEditor,\n} from \"./value-row.ts\";\n\nconst DEFAULT_CONTEXT_WINDOW = 128000;\nconst DEFAULT_MAX_TOKENS = 16384;\n\ntype FieldRow =\n\t| { kind: \"text\"; key: \"id\" | \"name\" }\n\t| { kind: \"reasoning\" }\n\t| { kind: \"subpage\"; key: \"thinkingLevelMap\" | \"input\" | \"cost\" | \"compat\" }\n\t| { kind: \"number\"; key: \"contextWindow\" | \"maxTokens\" }\n\t| { kind: \"builtin\" }\n\t| { kind: \"modelApi\" }\n\t| { kind: \"deleteModel\" };\n\nexport class ModelFieldsPane implements EditorPane {\n\tprivate readonly rows: FieldRow[];\n\tprivate index = 0;\n\tprivate editing: ValueEditor | undefined;\n\tprivate editingRow: FieldRow | undefined;\n\tprivate error: string | undefined;\n\tprivate focused = false;\n\tprivate renaming = false;\n\tprivate disposed = false;\n\n\tprivate readonly host: EditorHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: EditorHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.model = model;\n\n\t\tconst rows: FieldRow[] = [\n\t\t\t{ kind: \"text\", key: \"id\" },\n\t\t\t{ kind: \"text\", key: \"name\" },\n\t\t\t{ kind: \"reasoning\" },\n\t\t\t{ kind: \"subpage\", key: \"thinkingLevelMap\" },\n\t\t\t{ kind: \"subpage\", key: \"input\" },\n\t\t\t{ kind: \"subpage\", key: \"cost\" },\n\t\t\t{ kind: \"number\", key: \"contextWindow\" },\n\t\t\t{ kind: \"number\", key: \"maxTokens\" },\n\t\t\t{ kind: \"subpage\", key: \"compat\" },\n\t\t];\n\t\tif (model.isDraft) rows.push({ kind: \"modelApi\" });\n\t\telse rows.push({ kind: \"builtin\" }, { kind: \"modelApi\" }, { kind: \"deleteModel\" });\n\t\tthis.rows = rows;\n\t}\n\n\t/** Enter id editing immediately (used right after + Add Model). */\n\tstartEditingId(): void {\n\t\tthis.index = 0;\n\t\tthis.beginEdit(\"overwrite\");\n\t}\n\n\t/** A draft with no fields set is safe to abandon without asking. */\n\tprivate draftEmpty(): boolean {\n\t\treturn this.model.isDraft && Object.keys(this.model.read()).length === 0;\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst current = this.model.read();\n\t\tconst lines: string[] = [];\n\t\tconst api = this.host.effectiveApi(current);\n\t\tlines.push(\n\t\t\trenderInfoLine(\n\t\t\t\ttheme,\n\t\t\t\tapi ? `api: ${api}${current.api ? \" (model)\" : \"\"}` : \"api: none resolved — see Model-Specific API below\",\n\t\t\t\twidth,\n\t\t\t),\n\t\t);\n\t\tfor (const [rowIndex, row] of this.rows.entries()) {\n\t\t\tconst active = rowIndex === this.index;\n\t\t\tlines.push(this.renderRow(row, current, active, width));\n\t\t}\n\t\tif (this.error) lines.push(theme.fg(\"error\", truncate(this.error, Math.max(10, width - 2))));\n\t\tif (this.renaming) lines.push(renderInfoLine(theme, \"Saving model id…\", width));\n\t\treturn lines;\n\t}\n\n\tscrollWindow(): ScrollWindowInfo {\n\t\t// The effective-api header stays pinned above, errors/progress below.\n\t\treturn {\n\t\t\ttop: 1,\n\t\t\tbottom: (this.error ? 1 : 0) + (this.renaming ? 1 : 0),\n\t\t\tcursor: 1 + this.index,\n\t\t};\n\t}\n\n\tprivate renderRow(\n\t\trow: FieldRow,\n\t\tcurrent: Partial<ModelsJsonModel> & { id?: string },\n\t\tactive: boolean,\n\t\twidth: number,\n\t): string {\n\t\tconst theme = this.host.theme;\n\t\tconst editing = this.editingRow === row ? this.editing : undefined;\n\t\tswitch (row.kind) {\n\t\t\tcase \"text\": {\n\t\t\t\tconst value = current[row.key];\n\t\t\t\tconst unsetText = row.key === \"id\" ? \"required\" : `falls back to id`;\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row.key,\n\t\t\t\t\tvalueText: value ?? `not set (${unsetText})`,\n\t\t\t\t\tunset: !value,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"reasoning\": {\n\t\t\t\tconst value = current.reasoning;\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: \"reasoning\",\n\t\t\t\t\tvalueText: value === undefined ? \"false (default)\" : String(value),\n\t\t\t\t\tunset: value === undefined,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"subpage\": {\n\t\t\t\tconst summary = this.subpageSummary(row.key, current);\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row.key,\n\t\t\t\t\tvalueText: summary.text,\n\t\t\t\t\tunset: summary.unset,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"number\": {\n\t\t\t\tconst value = current[row.key];\n\t\t\t\tconst fallback = row.key === \"contextWindow\" ? DEFAULT_CONTEXT_WINDOW : DEFAULT_MAX_TOKENS;\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row.key,\n\t\t\t\t\tvalueText: value === undefined ? `${fallback} (default)` : String(value),\n\t\t\t\t\tunset: value === undefined,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"builtin\": {\n\t\t\t\tconst id = current.id;\n\t\t\t\tconst count = id ? matchBuiltinModels(id, this.host.effectiveApi(current)).length : 0;\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tvalueText: \"Use Built-in Data\",\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tnote: id ? `· ${count} ${plural(count, \"candidate\")}` : \"· set id first\",\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"modelApi\":\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tvalueText: \"Model-Specific API\",\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tnote: `· ${this.modelApiSummary(current)}`,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\tcase \"deleteModel\":\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tvalueText: \"Delete Model\",\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t}\n\t}\n\n\t/** Which connection fields this model overrides, or where they come from when it overrides nothing. */\n\tprivate modelApiSummary(current: Partial<ModelsJsonModel> & { id?: string }): string {\n\t\tconst overrides = [current.baseUrl ? \"baseUrl\" : \"\", current.api ? \"API Type\" : \"\"].filter(Boolean);\n\t\tif (overrides.length > 0) return overrides.join(\" + \");\n\t\tconst provider = this.host.store.getProvider(this.host.providerId);\n\t\tif (provider?.api || provider?.baseUrl) return \"provider defaults\";\n\t\tif (this.host.effectiveApi(current) || this.host.effectiveBaseUrl(current)) return \"built-in defaults\";\n\t\treturn \"not set\";\n\t}\n\n\tprivate subpageSummary(\n\t\tkey: \"thinkingLevelMap\" | \"input\" | \"cost\" | \"compat\",\n\t\tcurrent: Partial<ModelsJsonModel>,\n\t): { text: string; unset: boolean } {\n\t\tswitch (key) {\n\t\t\tcase \"thinkingLevelMap\": {\n\t\t\t\tconst map = current.thinkingLevelMap;\n\t\t\t\tconst count = map ? Object.keys(map).length : 0;\n\t\t\t\treturn count > 0\n\t\t\t\t\t? { text: `${count} ${plural(count, \"mapping\")}`, unset: false }\n\t\t\t\t\t: { text: \"default\", unset: true };\n\t\t\t}\n\t\t\tcase \"input\":\n\t\t\t\treturn current.input\n\t\t\t\t\t? { text: `[${current.input.join(\", \")}]`, unset: false }\n\t\t\t\t\t: { text: \"[text] (default)\", unset: true };\n\t\t\tcase \"cost\": {\n\t\t\t\tconst cost = current.cost;\n\t\t\t\tif (!cost) return { text: \"all 0 (default)\", unset: true };\n\t\t\t\treturn { text: `$${cost.input} / $${cost.output} in/out`, unset: false };\n\t\t\t}\n\t\t\tcase \"compat\": {\n\t\t\t\tconst compat = current.compat;\n\t\t\t\tconst count = compat ? Object.keys(compat).length : 0;\n\t\t\t\tif (count > 0) return { text: `${count} ${count === 1 ? \"entry\" : \"entries\"}`, unset: false };\n\t\t\t\tconst inherited = this.host.store.getProvider(this.host.providerId)?.compat;\n\t\t\t\tconst inheritedCount = inherited ? Object.keys(inherited).length : 0;\n\t\t\t\treturn inheritedCount > 0\n\t\t\t\t\t? { text: `${inheritedCount} from provider`, unset: true }\n\t\t\t\t\t: { text: \"none\", unset: true };\n\t\t\t}\n\t\t}\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (this.renaming || this.disposed) return;\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.editing) {\n\t\t\tif (kb.matches(data, \"tui.select.up\") || kb.matches(data, \"tui.select.down\")) return;\n\t\t\tthis.editing.handleInput(data);\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst next = moveSelection(kb, data, this.index, this.rows.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tif (!this.model.isDraft) {\n\t\t\t\tthis.host.popPane();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Esc on a draft abandons it; a draft with fields asks first.\n\t\t\tif (this.draftEmpty()) {\n\t\t\t\tthis.host.discardModelDraft();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst label = this.model.read().name ?? this.model.read().id ?? \"New Model\";\n\t\t\tthis.host.confirm(`Discard the new model \"${label}\"? Its fields are not saved.`, \"Discard Model\", () =>\n\t\t\t\tthis.host.discardModelDraft(),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.list.toggle\")) {\n\t\t\tthis.toggleRow();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.enterRow();\n\t\t\treturn;\n\t\t}\n\t\tif (isPrintableInput(data)) {\n\t\t\tthis.overwriteRow(data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate toggleRow(): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tif (row.kind !== \"reasoning\") return; // Space on other rows falls to overwrite handling below\n\t\tconst current = this.model.read().reasoning;\n\t\tthis.model.setField([\"reasoning\"], current !== true);\n\t}\n\n\tprivate enterRow(): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tswitch (row.kind) {\n\t\t\tcase \"text\":\n\t\t\tcase \"number\":\n\t\t\t\tthis.beginEdit(\"tweak\");\n\t\t\t\treturn;\n\t\t\tcase \"reasoning\":\n\t\t\t\tthis.host.pushPane(createReasoningPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"subpage\":\n\t\t\t\tthis.pushSubpage(row.key);\n\t\t\t\treturn;\n\t\t\tcase \"modelApi\":\n\t\t\t\tthis.host.pushPane(new ModelSpecificApiPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"builtin\": {\n\t\t\t\tconst id = this.model.read().id;\n\t\t\t\tif (!id) {\n\t\t\t\t\tthis.host.notify(\"Set the model id first.\", \"warning\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.host.pushPane(new BuiltinCandidatesPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"deleteModel\": {\n\t\t\t\tconst id = this.model.read().id;\n\t\t\t\tif (!id) return;\n\t\t\t\tif (this.host.isCurrentModel(id)) {\n\t\t\t\t\tthis.host.notify(\"The current model cannot be deleted; switch models with /model first.\", \"error\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.host.confirm(`Delete model \"${id}\" from ${this.host.providerId}?`, \"Delete Model\", () => {\n\t\t\t\t\tthis.host.edits.removeModel(id);\n\t\t\t\t\tthis.host.onModelRemoved(id);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate overwriteRow(data: string): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tif (row.kind === \"text\" || row.kind === \"number\") {\n\t\t\tthis.beginEdit(\"overwrite\", data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate beginEdit(mode: \"overwrite\" | \"tweak\", firstData?: string): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tif (row.kind !== \"text\" && row.kind !== \"number\") return;\n\t\tconst current = this.model.read()[row.key];\n\t\tconst editor = new ValueEditor({\n\t\t\tonCommit: (value) => this.commitText(row, value),\n\t\t\tonCancel: () => {\n\t\t\t\tthis.editing = undefined;\n\t\t\t\tthis.editingRow = undefined;\n\t\t\t\tthis.error = undefined;\n\t\t\t\t// Cancelling the edit of an untouched draft abandons the draft outright.\n\t\t\t\tif (this.draftEmpty()) {\n\t\t\t\t\tthis.host.discardModelDraft();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.host.refresh();\n\t\t\t},\n\t\t});\n\t\tthis.editing = editor;\n\t\tthis.editingRow = row;\n\t\teditor.focused = this.focused;\n\t\tif (mode === \"overwrite\") editor.beginOverwrite(firstData);\n\t\telse editor.beginTweak(current === undefined ? \"\" : String(current));\n\t\tthis.host.refresh();\n\t}\n\n\tprivate commitText(row: FieldRow & { kind: \"text\" | \"number\" }, raw: string): void {\n\t\tconst value = raw.trim();\n\t\tconst finish = (error?: string) => {\n\t\t\tthis.error = error;\n\t\t\tif (error) {\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.editing = undefined;\n\t\t\tthis.editingRow = undefined;\n\t\t\tthis.host.refresh();\n\t\t};\n\t\tif (row.key === \"id\") {\n\t\t\tif (!value) {\n\t\t\t\tfinish(\"id is required and cannot be empty.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.model.isDraft) {\n\t\t\t\tthis.model.setField([\"id\"], value);\n\t\t\t\tfinish(this.host.commitModelDraft());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst current = this.model.read().id;\n\t\t\tif (!current) {\n\t\t\t\tfinish(\"Missing current id.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (value === current) {\n\t\t\t\tfinish();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.host.isCurrentModel(current)) {\n\t\t\t\tfinish(\"The current model's id cannot be renamed; switch models with /model first.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.host.store.getModel(this.host.providerId, value)) {\n\t\t\t\tfinish(`Model \"${value}\" already exists.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.renaming = true;\n\t\t\tthis.host.refresh();\n\t\t\tvoid this.model.rename(value).then(\n\t\t\t\t(error) => {\n\t\t\t\t\tthis.renaming = false;\n\t\t\t\t\tif (!this.disposed) finish(error);\n\t\t\t\t},\n\t\t\t\t(error: unknown) => {\n\t\t\t\t\tthis.renaming = false;\n\t\t\t\t\tif (!this.disposed) finish(error instanceof Error ? error.message : String(error));\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (row.key === \"name\") {\n\t\t\tthis.model.setField([\"name\"], value === \"\" ? DELETE : value);\n\t\t\tfinish();\n\t\t\treturn;\n\t\t}\n\t\t// Numeric rows: empty clears the override; otherwise a finite positive integer.\n\t\tif (value === \"\") {\n\t\t\tthis.model.setField([row.key], DELETE);\n\t\t\tfinish();\n\t\t\treturn;\n\t\t}\n\t\tconst parsed = Number(value);\n\t\tif (!Number.isSafeInteger(parsed) || parsed <= 0) {\n\t\t\tfinish(`${row.key} must be a positive integer.`);\n\t\t\treturn;\n\t\t}\n\t\tthis.model.setField([row.key], parsed);\n\t\tfinish();\n\t\treturn;\n\t}\n\n\tprivate pushSubpage(key: \"thinkingLevelMap\" | \"input\" | \"cost\" | \"compat\"): void {\n\t\tswitch (key) {\n\t\t\tcase \"thinkingLevelMap\":\n\t\t\t\tthis.host.pushPane(new ThinkingMapPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"input\":\n\t\t\t\tthis.host.pushPane(new InputTypesPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"cost\":\n\t\t\t\tthis.host.pushPane(new CostPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"compat\":\n\t\t\t\tthis.host.pushPane(new CompatPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tif (this.editing) this.editing.focused = focused;\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.editing !== undefined || this.renaming;\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t}\n\n\thints(): string {\n\t\tif (this.editing) return [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\treturn [\n\t\t\trawKeyHint(\"type\", \"overwrite\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"edit / open\"),\n\t\t\tkeyHint(\"app.list.toggle\", \"toggle\"),\n\t\t\tkeyHint(\"tui.select.cancel\", this.model.isDraft ? \"discard\" : \"back\"),\n\t\t].join(\" \");\n\t}\n}\n"]}
1
+ {"version":3,"file":"model-fields.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/model-fields.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Model field pane (right column for a selected model) plus its nested\n * sub-panes: thinkingLevelMap, input modalities, and cost. All edits flow\n * through the ModelHandle — drafts mutate memory, persisted models queue\n * store ops that save immediately.\n */\n\nimport \"../keybindings.ts\";\nimport type { ModelsJsonModel } from \"../../../core/model-config.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { matchBuiltinModels } from \"../catalog.ts\";\nimport { plural, truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { BuiltinCandidatesPane } from \"./builtin-data.ts\";\nimport { CompatPane } from \"./compat.ts\";\nimport { moveSelection } from \"./controls.ts\";\nimport { CostPane, createReasoningPane, InputTypesPane, ModelSpecificApiPane } from \"./model-options.ts\";\nimport type { EditorPane, ModelFieldsHost, ModelHandle } from \"./pane.ts\";\nimport { ThinkingMapPane } from \"./thinking-map.ts\";\nimport {\n\tisPrintableInput,\n\trenderInfoLine,\n\trenderKeyValueLine,\n\ttype ScrollWindowInfo,\n\tValueEditor,\n} from \"./value-row.ts\";\n\nconst DEFAULT_CONTEXT_WINDOW = 128000;\nconst DEFAULT_MAX_TOKENS = 16384;\n\ntype FieldRow =\n\t| { kind: \"text\"; key: \"id\" | \"name\" }\n\t| { kind: \"reasoning\" }\n\t| { kind: \"subpage\"; key: \"thinkingLevelMap\" | \"input\" | \"cost\" | \"compat\" }\n\t| { kind: \"number\"; key: \"contextWindow\" | \"maxTokens\" }\n\t| { kind: \"builtin\" }\n\t| { kind: \"modelApi\" }\n\t| { kind: \"deleteModel\" };\n\nexport class ModelFieldsPane implements EditorPane {\n\tprivate readonly rows: FieldRow[];\n\tprivate index = 0;\n\tprivate editing: ValueEditor | undefined;\n\tprivate editingRow: FieldRow | undefined;\n\tprivate error: string | undefined;\n\tprivate focused = false;\n\tprivate renaming = false;\n\tprivate disposed = false;\n\n\tprivate readonly host: ModelFieldsHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: ModelFieldsHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.model = model;\n\n\t\tconst rows: FieldRow[] = [\n\t\t\t{ kind: \"text\", key: \"id\" },\n\t\t\t{ kind: \"text\", key: \"name\" },\n\t\t\t{ kind: \"reasoning\" },\n\t\t\t{ kind: \"subpage\", key: \"thinkingLevelMap\" },\n\t\t\t{ kind: \"subpage\", key: \"input\" },\n\t\t\t{ kind: \"subpage\", key: \"cost\" },\n\t\t\t{ kind: \"number\", key: \"contextWindow\" },\n\t\t\t{ kind: \"number\", key: \"maxTokens\" },\n\t\t\t{ kind: \"subpage\", key: \"compat\" },\n\t\t];\n\t\tif (model.isDraft) rows.push({ kind: \"modelApi\" });\n\t\telse rows.push({ kind: \"builtin\" }, { kind: \"modelApi\" }, { kind: \"deleteModel\" });\n\t\tthis.rows = rows;\n\t}\n\n\t/** Enter id editing immediately (used right after + Add Model). */\n\tstartEditingId(): void {\n\t\tthis.index = 0;\n\t\tthis.beginEdit(\"overwrite\");\n\t}\n\n\t/** A draft with no fields set is safe to abandon without asking. */\n\tprivate draftEmpty(): boolean {\n\t\treturn this.model.isDraft && Object.keys(this.model.read()).length === 0;\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst current = this.model.read();\n\t\tconst lines: string[] = [];\n\t\tconst api = this.host.effectiveApi(current);\n\t\tlines.push(\n\t\t\trenderInfoLine(\n\t\t\t\ttheme,\n\t\t\t\tapi ? `api: ${api}${current.api ? \" (model)\" : \"\"}` : \"api: none resolved — see Model-Specific API below\",\n\t\t\t\twidth,\n\t\t\t),\n\t\t);\n\t\tfor (const [rowIndex, row] of this.rows.entries()) {\n\t\t\tconst active = rowIndex === this.index;\n\t\t\tlines.push(this.renderRow(row, current, active, width));\n\t\t}\n\t\tif (this.error) lines.push(theme.fg(\"error\", truncate(this.error, Math.max(10, width - 2))));\n\t\tif (this.renaming) lines.push(renderInfoLine(theme, \"Saving model id…\", width));\n\t\treturn lines;\n\t}\n\n\tscrollWindow(): ScrollWindowInfo {\n\t\t// The effective-api header stays pinned above, errors/progress below.\n\t\treturn {\n\t\t\ttop: 1,\n\t\t\tbottom: (this.error ? 1 : 0) + (this.renaming ? 1 : 0),\n\t\t\tcursor: 1 + this.index,\n\t\t};\n\t}\n\n\tprivate renderRow(\n\t\trow: FieldRow,\n\t\tcurrent: Partial<ModelsJsonModel> & { id?: string },\n\t\tactive: boolean,\n\t\twidth: number,\n\t): string {\n\t\tconst theme = this.host.theme;\n\t\tconst editing = this.editingRow === row ? this.editing : undefined;\n\t\tswitch (row.kind) {\n\t\t\tcase \"text\": {\n\t\t\t\tconst value = current[row.key];\n\t\t\t\tconst unsetText = row.key === \"id\" ? \"required\" : `falls back to id`;\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row.key,\n\t\t\t\t\tvalueText: value ?? `not set (${unsetText})`,\n\t\t\t\t\tunset: !value,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"reasoning\": {\n\t\t\t\tconst value = current.reasoning;\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: \"reasoning\",\n\t\t\t\t\tvalueText: value === undefined ? \"false (default)\" : String(value),\n\t\t\t\t\tunset: value === undefined,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"subpage\": {\n\t\t\t\tconst summary = this.subpageSummary(row.key, current);\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row.key,\n\t\t\t\t\tvalueText: summary.text,\n\t\t\t\t\tunset: summary.unset,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"number\": {\n\t\t\t\tconst value = current[row.key];\n\t\t\t\tconst fallback = row.key === \"contextWindow\" ? DEFAULT_CONTEXT_WINDOW : DEFAULT_MAX_TOKENS;\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row.key,\n\t\t\t\t\tvalueText: value === undefined ? `${fallback} (default)` : String(value),\n\t\t\t\t\tunset: value === undefined,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"builtin\": {\n\t\t\t\tconst id = current.id;\n\t\t\t\tconst count = id ? matchBuiltinModels(id, this.host.effectiveApi(current)).length : 0;\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tvalueText: \"Use Built-in Data\",\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tnote: id ? `· ${count} ${plural(count, \"candidate\")}` : \"· set id first\",\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase \"modelApi\":\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tvalueText: \"Model-Specific API\",\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tnote: `· ${this.modelApiSummary(current)}`,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t\tcase \"deleteModel\":\n\t\t\t\treturn renderKeyValueLine(theme, {\n\t\t\t\t\tvalueText: \"Delete Model\",\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\twidth,\n\t\t\t\t});\n\t\t}\n\t}\n\n\t/** Which connection fields this model overrides, or where they come from when it overrides nothing. */\n\tprivate modelApiSummary(current: Partial<ModelsJsonModel> & { id?: string }): string {\n\t\tconst overrides = [current.baseUrl ? \"baseUrl\" : \"\", current.api ? \"API Type\" : \"\"].filter(Boolean);\n\t\tif (overrides.length > 0) return overrides.join(\" + \");\n\t\tconst provider = this.host.store.getProvider(this.host.providerId);\n\t\tif (provider?.api || provider?.baseUrl) return \"provider defaults\";\n\t\tif (this.host.effectiveApi(current) || this.host.effectiveBaseUrl(current)) return \"built-in defaults\";\n\t\treturn \"not set\";\n\t}\n\n\tprivate subpageSummary(\n\t\tkey: \"thinkingLevelMap\" | \"input\" | \"cost\" | \"compat\",\n\t\tcurrent: Partial<ModelsJsonModel>,\n\t): { text: string; unset: boolean } {\n\t\tswitch (key) {\n\t\t\tcase \"thinkingLevelMap\": {\n\t\t\t\tconst map = current.thinkingLevelMap;\n\t\t\t\tconst count = map ? Object.keys(map).length : 0;\n\t\t\t\treturn count > 0\n\t\t\t\t\t? { text: `${count} ${plural(count, \"mapping\")}`, unset: false }\n\t\t\t\t\t: { text: \"default\", unset: true };\n\t\t\t}\n\t\t\tcase \"input\":\n\t\t\t\treturn current.input\n\t\t\t\t\t? { text: `[${current.input.join(\", \")}]`, unset: false }\n\t\t\t\t\t: { text: \"[text] (default)\", unset: true };\n\t\t\tcase \"cost\": {\n\t\t\t\tconst cost = current.cost;\n\t\t\t\tif (!cost) return { text: \"all 0 (default)\", unset: true };\n\t\t\t\treturn { text: `$${cost.input} / $${cost.output} in/out`, unset: false };\n\t\t\t}\n\t\t\tcase \"compat\": {\n\t\t\t\tconst compat = current.compat;\n\t\t\t\tconst count = compat ? Object.keys(compat).length : 0;\n\t\t\t\tif (count > 0) return { text: `${count} ${count === 1 ? \"entry\" : \"entries\"}`, unset: false };\n\t\t\t\tconst inherited = this.host.store.getProvider(this.host.providerId)?.compat;\n\t\t\t\tconst inheritedCount = inherited ? Object.keys(inherited).length : 0;\n\t\t\t\treturn inheritedCount > 0\n\t\t\t\t\t? { text: `${inheritedCount} from provider`, unset: true }\n\t\t\t\t\t: { text: \"none\", unset: true };\n\t\t\t}\n\t\t}\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (this.renaming || this.disposed) return;\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.editing) {\n\t\t\tif (kb.matches(data, \"tui.select.up\") || kb.matches(data, \"tui.select.down\")) return;\n\t\t\tthis.editing.handleInput(data);\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst next = moveSelection(kb, data, this.index, this.rows.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tif (!this.model.isDraft) {\n\t\t\t\tthis.host.popPane();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Esc on a draft abandons it; a draft with fields asks first.\n\t\t\tif (this.draftEmpty()) {\n\t\t\t\tthis.host.discardModelDraft();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst label = this.model.read().name ?? this.model.read().id ?? \"New Model\";\n\t\t\tthis.host.confirm(`Discard the new model \"${label}\"? Its fields are not saved.`, \"Discard Model\", () =>\n\t\t\t\tthis.host.discardModelDraft(),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.list.toggle\")) {\n\t\t\tthis.toggleRow();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.enterRow();\n\t\t\treturn;\n\t\t}\n\t\tif (isPrintableInput(data)) {\n\t\t\tthis.overwriteRow(data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate toggleRow(): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tif (row.kind !== \"reasoning\") return; // Space on other rows falls to overwrite handling below\n\t\tconst current = this.model.read().reasoning;\n\t\tthis.model.setField([\"reasoning\"], current !== true);\n\t}\n\n\tprivate enterRow(): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tswitch (row.kind) {\n\t\t\tcase \"text\":\n\t\t\tcase \"number\":\n\t\t\t\tthis.beginEdit(\"tweak\");\n\t\t\t\treturn;\n\t\t\tcase \"reasoning\":\n\t\t\t\tthis.host.pushPane(createReasoningPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"subpage\":\n\t\t\t\tthis.pushSubpage(row.key);\n\t\t\t\treturn;\n\t\t\tcase \"modelApi\":\n\t\t\t\tthis.host.pushPane(new ModelSpecificApiPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"builtin\": {\n\t\t\t\tconst id = this.model.read().id;\n\t\t\t\tif (!id) {\n\t\t\t\t\tthis.host.notify(\"Set the model id first.\", \"warning\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.host.pushPane(new BuiltinCandidatesPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"deleteModel\": {\n\t\t\t\tconst id = this.model.read().id;\n\t\t\t\tif (!id) return;\n\t\t\t\tif (this.host.isCurrentModel(id)) {\n\t\t\t\t\tthis.host.notify(\"The current model cannot be deleted; switch models with /model first.\", \"error\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.host.confirm(`Delete model \"${id}\" from ${this.host.providerId}?`, \"Delete Model\", () => {\n\t\t\t\t\tthis.host.edits.removeModel(id);\n\t\t\t\t\tthis.host.onModelRemoved(id);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate overwriteRow(data: string): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tif (row.kind === \"text\" || row.kind === \"number\") {\n\t\t\tthis.beginEdit(\"overwrite\", data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate beginEdit(mode: \"overwrite\" | \"tweak\", firstData?: string): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tif (row.kind !== \"text\" && row.kind !== \"number\") return;\n\t\tconst current = this.model.read()[row.key];\n\t\tconst editor = new ValueEditor({\n\t\t\tonCommit: (value) => this.commitText(row, value),\n\t\t\tonCancel: () => {\n\t\t\t\tthis.editing = undefined;\n\t\t\t\tthis.editingRow = undefined;\n\t\t\t\tthis.error = undefined;\n\t\t\t\t// Cancelling the edit of an untouched draft abandons the draft outright.\n\t\t\t\tif (this.draftEmpty()) {\n\t\t\t\t\tthis.host.discardModelDraft();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.host.refresh();\n\t\t\t},\n\t\t});\n\t\tthis.editing = editor;\n\t\tthis.editingRow = row;\n\t\teditor.focused = this.focused;\n\t\tif (mode === \"overwrite\") editor.beginOverwrite(firstData);\n\t\telse editor.beginTweak(current === undefined ? \"\" : String(current));\n\t\tthis.host.refresh();\n\t}\n\n\tprivate commitText(row: FieldRow & { kind: \"text\" | \"number\" }, raw: string): void {\n\t\tconst value = raw.trim();\n\t\tconst finish = (error?: string) => {\n\t\t\tthis.error = error;\n\t\t\tif (error) {\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.editing = undefined;\n\t\t\tthis.editingRow = undefined;\n\t\t\tthis.host.refresh();\n\t\t};\n\t\tif (row.key === \"id\") {\n\t\t\tif (!value) {\n\t\t\t\tfinish(\"id is required and cannot be empty.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.model.isDraft) {\n\t\t\t\tthis.model.setField([\"id\"], value);\n\t\t\t\tfinish(this.host.commitModelDraft());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst current = this.model.read().id;\n\t\t\tif (!current) {\n\t\t\t\tfinish(\"Missing current id.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (value === current) {\n\t\t\t\tfinish();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.host.isCurrentModel(current)) {\n\t\t\t\tfinish(\"The current model's id cannot be renamed; switch models with /model first.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.host.store.getModel(this.host.providerId, value)) {\n\t\t\t\tfinish(`Model \"${value}\" already exists.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.renaming = true;\n\t\t\tthis.host.refresh();\n\t\t\tvoid this.model.rename(value).then(\n\t\t\t\t(error) => {\n\t\t\t\t\tthis.renaming = false;\n\t\t\t\t\tif (!this.disposed) finish(error);\n\t\t\t\t},\n\t\t\t\t(error: unknown) => {\n\t\t\t\t\tthis.renaming = false;\n\t\t\t\t\tif (!this.disposed) finish(error instanceof Error ? error.message : String(error));\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (row.key === \"name\") {\n\t\t\tthis.model.setField([\"name\"], value === \"\" ? DELETE : value);\n\t\t\tfinish();\n\t\t\treturn;\n\t\t}\n\t\t// Numeric rows: empty clears the override; otherwise a finite positive integer.\n\t\tif (value === \"\") {\n\t\t\tthis.model.setField([row.key], DELETE);\n\t\t\tfinish();\n\t\t\treturn;\n\t\t}\n\t\tconst parsed = Number(value);\n\t\tif (!Number.isSafeInteger(parsed) || parsed <= 0) {\n\t\t\tfinish(`${row.key} must be a positive integer.`);\n\t\t\treturn;\n\t\t}\n\t\tthis.model.setField([row.key], parsed);\n\t\tfinish();\n\t\treturn;\n\t}\n\n\tprivate pushSubpage(key: \"thinkingLevelMap\" | \"input\" | \"cost\" | \"compat\"): void {\n\t\tswitch (key) {\n\t\t\tcase \"thinkingLevelMap\":\n\t\t\t\tthis.host.pushPane(new ThinkingMapPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"input\":\n\t\t\t\tthis.host.pushPane(new InputTypesPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"cost\":\n\t\t\t\tthis.host.pushPane(new CostPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t\tcase \"compat\":\n\t\t\t\tthis.host.pushPane(new CompatPane(this.host, this.model));\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tif (this.editing) this.editing.focused = focused;\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.editing !== undefined || this.renaming;\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t}\n\n\thints(): string {\n\t\tif (this.editing) return [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\treturn [\n\t\t\trawKeyHint(\"type\", \"overwrite\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"edit / open\"),\n\t\t\tkeyHint(\"app.list.toggle\", \"toggle\"),\n\t\t\tkeyHint(\"tui.select.cancel\", this.model.isDraft ? \"discard\" : \"back\"),\n\t\t].join(\" \");\n\t}\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  /** Scalar model settings: reasoning, input modalities, cost rates, and the model-specific API override. */
2
2
  import "../keybindings.ts";
3
- import type { EditorHost, EditorPane, ModelHandle } from "./pane.ts";
3
+ import type { EditorPane, ModelHandle, PaneHost, ProviderPaneHost } from "./pane.ts";
4
4
  /** Radio sub-page for reasoning — consistent with the other nested model settings. */
5
- export declare function createReasoningPane(host: EditorHost, model: ModelHandle): EditorPane;
5
+ export declare function createReasoningPane(host: PaneHost, model: ModelHandle): EditorPane;
6
6
  export declare class InputTypesPane implements EditorPane {
7
7
  readonly crumb = "input";
8
8
  private index;
@@ -10,7 +10,7 @@ export declare class InputTypesPane implements EditorPane {
10
10
  private focused;
11
11
  private readonly host;
12
12
  private readonly model;
13
- constructor(host: EditorHost, model: ModelHandle);
13
+ constructor(host: PaneHost, model: ModelHandle);
14
14
  private selected;
15
15
  render(width: number): string[];
16
16
  handleInput(data: string): void;
@@ -24,7 +24,7 @@ export declare class CostPane implements EditorPane {
24
24
  private focused;
25
25
  private readonly host;
26
26
  private readonly model;
27
- constructor(host: EditorHost, model: ModelHandle);
27
+ constructor(host: PaneHost, model: ModelHandle);
28
28
  private cost;
29
29
  render(width: number): string[];
30
30
  handleInput(data: string): void;
@@ -47,7 +47,7 @@ export declare class ModelSpecificApiPane implements EditorPane {
47
47
  private focused;
48
48
  private readonly host;
49
49
  private readonly model;
50
- constructor(host: EditorHost, model: ModelHandle);
50
+ constructor(host: ProviderPaneHost, model: ModelHandle);
51
51
  /** Where an unset model field resolves from; undefined when nothing resolves it. */
52
52
  private inherited;
53
53
  render(width: number): string[];
@@ -60,5 +60,5 @@ export declare class ModelSpecificApiPane implements EditorPane {
60
60
  hints(): string;
61
61
  }
62
62
  /** Single-select model api: the inherited default plus every known API tag. Enter applies and returns. */
63
- export declare function createModelApiPane(host: EditorHost, model: ModelHandle): EditorPane;
63
+ export declare function createModelApiPane(host: ProviderPaneHost, model: ModelHandle): EditorPane;
64
64
  //# sourceMappingURL=model-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-options.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/model-options.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAE3G,OAAO,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAcrE,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,CASpF;AAMD,qBAAa,cAAe,YAAW,UAAU;IAChD,QAAQ,CAAC,KAAK,WAAW;IACzB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW;IAKhD,OAAO,CAAC,QAAQ;IAIhB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAkB/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAgC/B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,KAAK,IAAI,MAAM;CAOf;AASD,qBAAa,QAAS,YAAW,UAAU;IAC1C,QAAQ,CAAC,KAAK,UAAU;IACxB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW;IAMhD,OAAO,CAAC,IAAI;IAMZ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA0B/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuB/B,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,MAAM;IAYd,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,MAAM;CASf;AAMD;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,UAAU;IACtD,QAAQ,CAAC,KAAK,wBAAwB;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IACxD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW;IAMhD,oFAAoF;IACpF,OAAO,CAAC,SAAS;IASjB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA6B/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAyB/B,2FAA2F;IAC3F,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,MAAM;IAYd,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,MAAM;CASf;AAED,0GAA0G;AAC1G,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,CA0BnF"}
1
+ {"version":3,"file":"model-options.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/model-options.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAE3G,OAAO,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAcrF,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,CASlF;AAMD,qBAAa,cAAe,YAAW,UAAU;IAChD,QAAQ,CAAC,KAAK,WAAW;IACzB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW;IAK9C,OAAO,CAAC,QAAQ;IAIhB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAkB/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAgC/B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,KAAK,IAAI,MAAM;CAOf;AASD,qBAAa,QAAS,YAAW,UAAU;IAC1C,QAAQ,CAAC,KAAK,UAAU;IACxB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW;IAM9C,OAAO,CAAC,IAAI;IAMZ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA0B/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuB/B,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,MAAM;IAYd,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,MAAM;CASf;AAMD;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,UAAU;IACtD,QAAQ,CAAC,KAAK,wBAAwB;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IACxD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW;IAMtD,oFAAoF;IACpF,OAAO,CAAC,SAAS;IASjB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA6B/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAyB/B,2FAA2F;IAC3F,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,MAAM;IAYd,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,MAAM;CASf;AAED,0GAA0G;AAC1G,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,GAAG,UAAU,CA0BzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-options.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/model-options.ts"],"names":[],"mappings":"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","sourcesContent":["/** Scalar model settings: reasoning, input modalities, cost rates, and the model-specific API override. */\n\nimport \"../keybindings.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { builtinDefaults } from \"../catalog.ts\";\nimport { API_TYPES, INPUT_TYPES, type InputType, truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { ChoicePane, InlineEdit, moveSelection } from \"./controls.ts\";\nimport type { EditorHost, EditorPane, ModelHandle } from \"./pane.ts\";\nimport { baseUrlHint, validateBaseUrlValue } from \"./provider-fields.ts\";\nimport { isPrintableInput, renderInfoLine, renderKeyValueLine, renderPlainLine } from \"./value-row.ts\";\n\n// -------------------------------------------------------------------------\n// reasoning\n// -------------------------------------------------------------------------\n\nconst REASONING_OPTIONS = [\n\t{ label: \"true\", value: true },\n\t{ label: \"false\", value: false },\n\t{ label: \"default (false)\", value: undefined },\n] as const;\n\n/** Radio sub-page for reasoning — consistent with the other nested model settings. */\nexport function createReasoningPane(host: EditorHost, model: ModelHandle): EditorPane {\n\treturn new ChoicePane<boolean | undefined>(host, \"reasoning\", {\n\t\tcurrent: () => model.read().reasoning,\n\t\tchoices: () => REASONING_OPTIONS.map((option) => ({ ...option, dim: option.value === undefined })),\n\t\tchoose: (value) => {\n\t\t\tmodel.setField([\"reasoning\"], value === undefined ? DELETE : value);\n\t\t\treturn undefined;\n\t\t},\n\t});\n}\n\n// -------------------------------------------------------------------------\n// input modalities\n// -------------------------------------------------------------------------\n\nexport class InputTypesPane implements EditorPane {\n\treadonly crumb = \"input\";\n\tprivate index = 0;\n\tprivate error: string | undefined;\n\tprivate focused = false;\n\n\tprivate readonly host: EditorHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: EditorHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.model = model;\n\t}\n\n\tprivate selected(): Set<string> {\n\t\treturn new Set(this.model.read().input ?? [\"text\"]);\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst selected = this.selected();\n\t\tconst lines = INPUT_TYPES.map((type, rowIndex) =>\n\t\t\trenderPlainLine(theme, type, {\n\t\t\t\tchecked: selected.has(type),\n\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\tpaneFocused: this.focused,\n\t\t\t\twidth,\n\t\t\t}),\n\t\t);\n\t\tif (this.model.read().input === undefined) {\n\t\t\tlines.push(renderInfoLine(theme, \"Not set — the runtime default is [text].\", width));\n\t\t}\n\t\tif (this.error) lines.push(theme.fg(\"error\", truncate(this.error, Math.max(10, width - 2))));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst next = moveSelection(kb, data, this.index, INPUT_TYPES.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.list.toggle\")) {\n\t\t\tconst type: InputType = INPUT_TYPES[this.index]!;\n\t\t\tconst selected = this.selected();\n\t\t\tif (selected.has(type)) {\n\t\t\t\tif (selected.size === 1) {\n\t\t\t\t\tthis.error = \"At least one input type must stay selected.\";\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tselected.delete(type);\n\t\t\t} else {\n\t\t\t\tselected.add(type);\n\t\t\t}\n\t\t\tthis.error = undefined;\n\t\t\tconst next = INPUT_TYPES.filter((entry) => selected.has(entry));\n\t\t\tthis.model.setField([\"input\"], [...next]);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\") || kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t}\n\n\thints(): string {\n\t\treturn [\n\t\t\tkeyHint(\"app.list.toggle\", \"toggle\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"done\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n\n// -------------------------------------------------------------------------\n// cost\n// -------------------------------------------------------------------------\n\nconst COST_RATES = [\"input\", \"output\", \"cacheRead\", \"cacheWrite\"] as const;\ntype CostRate = (typeof COST_RATES)[number];\n\nexport class CostPane implements EditorPane {\n\treadonly crumb = \"cost\";\n\tprivate index = 0;\n\tprivate readonly edit: InlineEdit<CostRate>;\n\tprivate focused = false;\n\n\tprivate readonly host: EditorHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: EditorHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.edit = new InlineEdit(() => host.refresh());\n\t\tthis.model = model;\n\t}\n\n\tprivate cost(): Record<CostRate, number> | undefined {\n\t\tconst cost = this.model.read().cost;\n\t\tif (!cost) return undefined;\n\t\treturn { input: cost.input, output: cost.output, cacheRead: cost.cacheRead, cacheWrite: cost.cacheWrite };\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst cost = this.cost();\n\t\tconst lines: string[] = [];\n\t\tfor (const [rowIndex, rate] of COST_RATES.entries()) {\n\t\t\tconst value = cost?.[rate];\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: rate,\n\t\t\t\t\tvalueText: value === undefined ? \"0 (default)\" : `$${value} / M tokens`,\n\t\t\t\t\tunset: value === undefined,\n\t\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting: this.edit.editor(rate),\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconst tiers = this.model.read().cost?.tiers;\n\t\tif (tiers && tiers.length > 0) {\n\t\t\tlines.push(renderInfoLine(theme, `tiers: ${tiers.length} (read-only; kept as-is)`, width));\n\t\t}\n\t\tif (this.edit.error) lines.push(theme.fg(\"error\", truncate(this.edit.error, Math.max(10, width - 2))));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.edit.handleInput(data, kb)) return;\n\t\tconst next = moveSelection(kb, data, this.index, COST_RATES.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.beginEdit(\"tweak\");\n\t\t\treturn;\n\t\t}\n\t\tif (isPrintableInput(data)) {\n\t\t\tthis.beginEdit(\"overwrite\", data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate beginEdit(mode: \"overwrite\" | \"tweak\", firstData?: string): void {\n\t\tconst rate = COST_RATES[this.index]!;\n\t\tconst current = this.cost()?.[rate];\n\t\tthis.edit.begin(\n\t\t\trate,\n\t\t\tcurrent === undefined ? \"\" : String(current),\n\t\t\tmode,\n\t\t\tthis.focused,\n\t\t\t(value) => this.commit(rate, value),\n\t\t\tfirstData,\n\t\t);\n\t}\n\n\tprivate commit(rate: CostRate, raw: string): string | undefined {\n\t\tconst value = raw.trim();\n\t\tconst parsed = value === \"\" ? 0 : Number(value);\n\t\tif (!Number.isFinite(parsed) || parsed < 0) {\n\t\t\treturn \"cost rates must be finite non-negative numbers.\";\n\t\t}\n\t\t// A cost object must stay complete: first edit materializes the other rates as 0; tiers are preserved.\n\t\tif (this.model.read().cost) this.model.setField([\"cost\", rate], parsed);\n\t\telse this.model.setField([\"cost\"], { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, [rate]: parsed });\n\t\treturn undefined;\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tthis.edit.setFocused(focused);\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.edit.editing;\n\t}\n\n\thints(): string {\n\t\tif (this.edit.editing)\n\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\treturn [\n\t\t\trawKeyHint(\"type\", \"overwrite\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"edit\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n\n// -------------------------------------------------------------------------\n// Model-Specific API\n// -------------------------------------------------------------------------\n\n/**\n * Model-level baseUrl / API Type overrides. Unset rows show the inherited\n * provider or built-in value dimmed; typing on a row (or editing the shown\n * value) writes an override, clearing it returns to inheritance.\n */\nexport class ModelSpecificApiPane implements EditorPane {\n\treadonly crumb = \"Model-Specific API\";\n\tprivate readonly rows = [\"baseUrl\", \"apiType\"] as const;\n\tprivate index = 0;\n\tprivate readonly edit: InlineEdit<\"baseUrl\">;\n\tprivate focused = false;\n\n\tprivate readonly host: EditorHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: EditorHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.edit = new InlineEdit(() => host.refresh());\n\t\tthis.model = model;\n\t}\n\n\t/** Where an unset model field resolves from; undefined when nothing resolves it. */\n\tprivate inherited(key: \"api\" | \"baseUrl\"): { value: string; via: \"provider\" | \"built-in\" } | undefined {\n\t\tconst provider = this.host.store.getProvider(this.host.providerId);\n\t\tconst providerValue = key === \"api\" ? provider?.api : provider?.baseUrl;\n\t\tif (providerValue) return { value: providerValue, via: \"provider\" };\n\t\tconst current = this.model.read();\n\t\tconst effective = key === \"api\" ? this.host.effectiveApi(current) : this.host.effectiveBaseUrl(current);\n\t\treturn effective ? { value: effective, via: \"built-in\" } : undefined;\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst current = this.model.read();\n\t\tconst lines: string[] = [];\n\t\tfor (const [rowIndex, row] of this.rows.entries()) {\n\t\t\tconst active = rowIndex === this.index;\n\t\t\tconst key = row === \"apiType\" ? \"api\" : row;\n\t\t\tconst override = current[key];\n\t\t\tconst inherited = override ? undefined : this.inherited(key);\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row === \"apiType\" ? \"API Type\" : row,\n\t\t\t\t\tvalueText: override ?? inherited?.value ?? \"not set\",\n\t\t\t\t\tunset: !override,\n\t\t\t\t\tnote: inherited ? `· ${inherited.via}` : undefined,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting: row === \"baseUrl\" ? this.edit.editor(row) : undefined,\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (this.edit.error) lines.push(theme.fg(\"error\", truncate(this.edit.error, Math.max(10, width - 2))));\n\t\tconst hint = baseUrlHint(this.host.effectiveApi(current));\n\t\tif (hint) lines.push(renderInfoLine(theme, hint, width));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.edit.handleInput(data, kb)) return;\n\t\tconst next = moveSelection(kb, data, this.index, this.rows.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tif (this.rows[this.index] === \"apiType\") this.host.pushPane(createModelApiPane(this.host, this.model));\n\t\t\telse this.beginEdit(\"tweak\");\n\t\t\treturn;\n\t\t}\n\t\tif (isPrintableInput(data)) {\n\t\t\tif (this.rows[this.index] === \"apiType\") return;\n\t\t\tthis.beginEdit(\"overwrite\", data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/** Tweak starts from the inherited value, so adjusting it writes the override directly. */\n\tprivate beginEdit(mode: \"overwrite\" | \"tweak\", firstData?: string): void {\n\t\tconst base = this.model.read().baseUrl ?? this.inherited(\"baseUrl\")?.value ?? \"\";\n\t\tthis.edit.begin(\"baseUrl\", base, mode, this.focused, (value) => this.commit(value), firstData);\n\t}\n\n\tprivate commit(raw: string): string | undefined {\n\t\tconst value = raw.trim();\n\t\tif (value) {\n\t\t\tconst invalid = validateBaseUrlValue(value);\n\t\t\tif (invalid) {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t\tthis.model.setField([\"baseUrl\"], value === \"\" ? DELETE : value);\n\t\treturn undefined;\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tthis.edit.setFocused(focused);\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.edit.editing;\n\t}\n\n\thints(): string {\n\t\tif (this.edit.editing)\n\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\treturn [\n\t\t\trawKeyHint(\"type\", \"overwrite\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"edit / open\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n\n/** Single-select model api: the inherited default plus every known API tag. Enter applies and returns. */\nexport function createModelApiPane(host: EditorHost, model: ModelHandle): EditorPane {\n\tconst fallback = () => {\n\t\tconst provider = host.store.getProvider(host.providerId);\n\t\treturn provider?.api ?? builtinDefaults(host.providerId, model.read().id, provider?.api).api;\n\t};\n\treturn new ChoicePane<string | undefined>(host, \"API Type\", {\n\t\tcurrent: () => model.read().api,\n\t\tchoices: () => {\n\t\t\tconst providerApi = host.store.getProvider(host.providerId)?.api;\n\t\t\tconst inherited = fallback();\n\t\t\tconst label = providerApi\n\t\t\t\t? `provider: ${providerApi}`\n\t\t\t\t: inherited\n\t\t\t\t\t? `built-in: ${inherited}`\n\t\t\t\t\t: \"no provider or built-in API\";\n\t\t\tconst values: (string | undefined)[] = [undefined, ...API_TYPES];\n\t\t\tconst current = model.read().api;\n\t\t\tif (current && !values.includes(current)) values.push(current);\n\t\t\treturn values.map((value) => ({ value, label: value ?? label, dim: value === undefined }));\n\t\t},\n\t\tchoose: (value) => {\n\t\t\tif (value === undefined && !fallback()) return \"Nothing to inherit — pick an API.\";\n\t\t\tmodel.setField([\"api\"], value ?? DELETE);\n\t\t\treturn undefined;\n\t\t},\n\t});\n}\n"]}
1
+ {"version":3,"file":"model-options.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/model-options.ts"],"names":[],"mappings":"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","sourcesContent":["/** Scalar model settings: reasoning, input modalities, cost rates, and the model-specific API override. */\n\nimport \"../keybindings.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { builtinDefaults } from \"../catalog.ts\";\nimport { API_TYPES, INPUT_TYPES, type InputType, truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { ChoicePane, InlineEdit, moveSelection } from \"./controls.ts\";\nimport type { EditorPane, ModelHandle, PaneHost, ProviderPaneHost } from \"./pane.ts\";\nimport { baseUrlHint, validateBaseUrlValue } from \"./provider-fields.ts\";\nimport { isPrintableInput, renderInfoLine, renderKeyValueLine, renderPlainLine } from \"./value-row.ts\";\n\n// -------------------------------------------------------------------------\n// reasoning\n// -------------------------------------------------------------------------\n\nconst REASONING_OPTIONS = [\n\t{ label: \"true\", value: true },\n\t{ label: \"false\", value: false },\n\t{ label: \"default (false)\", value: undefined },\n] as const;\n\n/** Radio sub-page for reasoning — consistent with the other nested model settings. */\nexport function createReasoningPane(host: PaneHost, model: ModelHandle): EditorPane {\n\treturn new ChoicePane<boolean | undefined>(host, \"reasoning\", {\n\t\tcurrent: () => model.read().reasoning,\n\t\tchoices: () => REASONING_OPTIONS.map((option) => ({ ...option, dim: option.value === undefined })),\n\t\tchoose: (value) => {\n\t\t\tmodel.setField([\"reasoning\"], value === undefined ? DELETE : value);\n\t\t\treturn undefined;\n\t\t},\n\t});\n}\n\n// -------------------------------------------------------------------------\n// input modalities\n// -------------------------------------------------------------------------\n\nexport class InputTypesPane implements EditorPane {\n\treadonly crumb = \"input\";\n\tprivate index = 0;\n\tprivate error: string | undefined;\n\tprivate focused = false;\n\n\tprivate readonly host: PaneHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: PaneHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.model = model;\n\t}\n\n\tprivate selected(): Set<string> {\n\t\treturn new Set(this.model.read().input ?? [\"text\"]);\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst selected = this.selected();\n\t\tconst lines = INPUT_TYPES.map((type, rowIndex) =>\n\t\t\trenderPlainLine(theme, type, {\n\t\t\t\tchecked: selected.has(type),\n\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\tpaneFocused: this.focused,\n\t\t\t\twidth,\n\t\t\t}),\n\t\t);\n\t\tif (this.model.read().input === undefined) {\n\t\t\tlines.push(renderInfoLine(theme, \"Not set — the runtime default is [text].\", width));\n\t\t}\n\t\tif (this.error) lines.push(theme.fg(\"error\", truncate(this.error, Math.max(10, width - 2))));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst next = moveSelection(kb, data, this.index, INPUT_TYPES.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.list.toggle\")) {\n\t\t\tconst type: InputType = INPUT_TYPES[this.index]!;\n\t\t\tconst selected = this.selected();\n\t\t\tif (selected.has(type)) {\n\t\t\t\tif (selected.size === 1) {\n\t\t\t\t\tthis.error = \"At least one input type must stay selected.\";\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tselected.delete(type);\n\t\t\t} else {\n\t\t\t\tselected.add(type);\n\t\t\t}\n\t\t\tthis.error = undefined;\n\t\t\tconst next = INPUT_TYPES.filter((entry) => selected.has(entry));\n\t\t\tthis.model.setField([\"input\"], [...next]);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\") || kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t}\n\n\thints(): string {\n\t\treturn [\n\t\t\tkeyHint(\"app.list.toggle\", \"toggle\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"done\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n\n// -------------------------------------------------------------------------\n// cost\n// -------------------------------------------------------------------------\n\nconst COST_RATES = [\"input\", \"output\", \"cacheRead\", \"cacheWrite\"] as const;\ntype CostRate = (typeof COST_RATES)[number];\n\nexport class CostPane implements EditorPane {\n\treadonly crumb = \"cost\";\n\tprivate index = 0;\n\tprivate readonly edit: InlineEdit<CostRate>;\n\tprivate focused = false;\n\n\tprivate readonly host: PaneHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: PaneHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.edit = new InlineEdit(() => host.refresh());\n\t\tthis.model = model;\n\t}\n\n\tprivate cost(): Record<CostRate, number> | undefined {\n\t\tconst cost = this.model.read().cost;\n\t\tif (!cost) return undefined;\n\t\treturn { input: cost.input, output: cost.output, cacheRead: cost.cacheRead, cacheWrite: cost.cacheWrite };\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst cost = this.cost();\n\t\tconst lines: string[] = [];\n\t\tfor (const [rowIndex, rate] of COST_RATES.entries()) {\n\t\t\tconst value = cost?.[rate];\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: rate,\n\t\t\t\t\tvalueText: value === undefined ? \"0 (default)\" : `$${value} / M tokens`,\n\t\t\t\t\tunset: value === undefined,\n\t\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting: this.edit.editor(rate),\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconst tiers = this.model.read().cost?.tiers;\n\t\tif (tiers && tiers.length > 0) {\n\t\t\tlines.push(renderInfoLine(theme, `tiers: ${tiers.length} (read-only; kept as-is)`, width));\n\t\t}\n\t\tif (this.edit.error) lines.push(theme.fg(\"error\", truncate(this.edit.error, Math.max(10, width - 2))));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.edit.handleInput(data, kb)) return;\n\t\tconst next = moveSelection(kb, data, this.index, COST_RATES.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.beginEdit(\"tweak\");\n\t\t\treturn;\n\t\t}\n\t\tif (isPrintableInput(data)) {\n\t\t\tthis.beginEdit(\"overwrite\", data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate beginEdit(mode: \"overwrite\" | \"tweak\", firstData?: string): void {\n\t\tconst rate = COST_RATES[this.index]!;\n\t\tconst current = this.cost()?.[rate];\n\t\tthis.edit.begin(\n\t\t\trate,\n\t\t\tcurrent === undefined ? \"\" : String(current),\n\t\t\tmode,\n\t\t\tthis.focused,\n\t\t\t(value) => this.commit(rate, value),\n\t\t\tfirstData,\n\t\t);\n\t}\n\n\tprivate commit(rate: CostRate, raw: string): string | undefined {\n\t\tconst value = raw.trim();\n\t\tconst parsed = value === \"\" ? 0 : Number(value);\n\t\tif (!Number.isFinite(parsed) || parsed < 0) {\n\t\t\treturn \"cost rates must be finite non-negative numbers.\";\n\t\t}\n\t\t// A cost object must stay complete: first edit materializes the other rates as 0; tiers are preserved.\n\t\tif (this.model.read().cost) this.model.setField([\"cost\", rate], parsed);\n\t\telse this.model.setField([\"cost\"], { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, [rate]: parsed });\n\t\treturn undefined;\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tthis.edit.setFocused(focused);\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.edit.editing;\n\t}\n\n\thints(): string {\n\t\tif (this.edit.editing)\n\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\treturn [\n\t\t\trawKeyHint(\"type\", \"overwrite\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"edit\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n\n// -------------------------------------------------------------------------\n// Model-Specific API\n// -------------------------------------------------------------------------\n\n/**\n * Model-level baseUrl / API Type overrides. Unset rows show the inherited\n * provider or built-in value dimmed; typing on a row (or editing the shown\n * value) writes an override, clearing it returns to inheritance.\n */\nexport class ModelSpecificApiPane implements EditorPane {\n\treadonly crumb = \"Model-Specific API\";\n\tprivate readonly rows = [\"baseUrl\", \"apiType\"] as const;\n\tprivate index = 0;\n\tprivate readonly edit: InlineEdit<\"baseUrl\">;\n\tprivate focused = false;\n\n\tprivate readonly host: ProviderPaneHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: ProviderPaneHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.edit = new InlineEdit(() => host.refresh());\n\t\tthis.model = model;\n\t}\n\n\t/** Where an unset model field resolves from; undefined when nothing resolves it. */\n\tprivate inherited(key: \"api\" | \"baseUrl\"): { value: string; via: \"provider\" | \"built-in\" } | undefined {\n\t\tconst provider = this.host.store.getProvider(this.host.providerId);\n\t\tconst providerValue = key === \"api\" ? provider?.api : provider?.baseUrl;\n\t\tif (providerValue) return { value: providerValue, via: \"provider\" };\n\t\tconst current = this.model.read();\n\t\tconst effective = key === \"api\" ? this.host.effectiveApi(current) : this.host.effectiveBaseUrl(current);\n\t\treturn effective ? { value: effective, via: \"built-in\" } : undefined;\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst current = this.model.read();\n\t\tconst lines: string[] = [];\n\t\tfor (const [rowIndex, row] of this.rows.entries()) {\n\t\t\tconst active = rowIndex === this.index;\n\t\t\tconst key = row === \"apiType\" ? \"api\" : row;\n\t\t\tconst override = current[key];\n\t\t\tconst inherited = override ? undefined : this.inherited(key);\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row === \"apiType\" ? \"API Type\" : row,\n\t\t\t\t\tvalueText: override ?? inherited?.value ?? \"not set\",\n\t\t\t\t\tunset: !override,\n\t\t\t\t\tnote: inherited ? `· ${inherited.via}` : undefined,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting: row === \"baseUrl\" ? this.edit.editor(row) : undefined,\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (this.edit.error) lines.push(theme.fg(\"error\", truncate(this.edit.error, Math.max(10, width - 2))));\n\t\tconst hint = baseUrlHint(this.host.effectiveApi(current));\n\t\tif (hint) lines.push(renderInfoLine(theme, hint, width));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.edit.handleInput(data, kb)) return;\n\t\tconst next = moveSelection(kb, data, this.index, this.rows.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tif (this.rows[this.index] === \"apiType\") this.host.pushPane(createModelApiPane(this.host, this.model));\n\t\t\telse this.beginEdit(\"tweak\");\n\t\t\treturn;\n\t\t}\n\t\tif (isPrintableInput(data)) {\n\t\t\tif (this.rows[this.index] === \"apiType\") return;\n\t\t\tthis.beginEdit(\"overwrite\", data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/** Tweak starts from the inherited value, so adjusting it writes the override directly. */\n\tprivate beginEdit(mode: \"overwrite\" | \"tweak\", firstData?: string): void {\n\t\tconst base = this.model.read().baseUrl ?? this.inherited(\"baseUrl\")?.value ?? \"\";\n\t\tthis.edit.begin(\"baseUrl\", base, mode, this.focused, (value) => this.commit(value), firstData);\n\t}\n\n\tprivate commit(raw: string): string | undefined {\n\t\tconst value = raw.trim();\n\t\tif (value) {\n\t\t\tconst invalid = validateBaseUrlValue(value);\n\t\t\tif (invalid) {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t\tthis.model.setField([\"baseUrl\"], value === \"\" ? DELETE : value);\n\t\treturn undefined;\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tthis.edit.setFocused(focused);\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.edit.editing;\n\t}\n\n\thints(): string {\n\t\tif (this.edit.editing)\n\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\treturn [\n\t\t\trawKeyHint(\"type\", \"overwrite\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"edit / open\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n\n/** Single-select model api: the inherited default plus every known API tag. Enter applies and returns. */\nexport function createModelApiPane(host: ProviderPaneHost, model: ModelHandle): EditorPane {\n\tconst fallback = () => {\n\t\tconst provider = host.store.getProvider(host.providerId);\n\t\treturn provider?.api ?? builtinDefaults(host.providerId, model.read().id, provider?.api).api;\n\t};\n\treturn new ChoicePane<string | undefined>(host, \"API Type\", {\n\t\tcurrent: () => model.read().api,\n\t\tchoices: () => {\n\t\t\tconst providerApi = host.store.getProvider(host.providerId)?.api;\n\t\t\tconst inherited = fallback();\n\t\t\tconst label = providerApi\n\t\t\t\t? `provider: ${providerApi}`\n\t\t\t\t: inherited\n\t\t\t\t\t? `built-in: ${inherited}`\n\t\t\t\t\t: \"no provider or built-in API\";\n\t\t\tconst values: (string | undefined)[] = [undefined, ...API_TYPES];\n\t\t\tconst current = model.read().api;\n\t\t\tif (current && !values.includes(current)) values.push(current);\n\t\t\treturn values.map((value) => ({ value, label: value ?? label, dim: value === undefined }));\n\t\t},\n\t\tchoose: (value) => {\n\t\t\tif (value === undefined && !fallback()) return \"Nothing to inherit — pick an API.\";\n\t\t\tmodel.setField([\"api\"], value ?? DELETE);\n\t\t\treturn undefined;\n\t\t},\n\t});\n}\n"]}
@@ -1,5 +1,4 @@
1
1
  /** Pane contract for the /provider two-pane editor's right column. */
2
- import type { TUI } from "@earendil-works/pi-tui";
3
2
  import type { KeybindingsManager } from "../../../core/keybindings.ts";
4
3
  import type { ModelsJsonModel } from "../../../core/model-config.ts";
5
4
  import type { Theme } from "../../../modes/interactive/theme/theme.ts";
@@ -32,36 +31,46 @@ export interface EditorPane {
32
31
  hints(): string;
33
32
  dispose?(): void;
34
33
  }
35
- export interface EditorHost {
36
- readonly tui: TUI;
34
+ /** What every pane gets: rendering resources, right-column navigation, and user feedback. */
35
+ export interface PaneHost {
37
36
  readonly theme: Theme;
38
37
  readonly keybindings: KeybindingsManager;
39
- readonly store: ProviderView;
40
- readonly edits: Pick<ProviderEdits, "setProviderField" | "removeModel" | "batch">;
41
- readonly providerId: string;
42
38
  pushPane(pane: EditorPane): void;
43
39
  popPane(): void;
44
40
  refresh(): void;
45
41
  notify(message: string, type: "info" | "warning" | "error"): void;
42
+ /** Push an in-editor Yes/No confirm into the right column. */
43
+ confirm(message: string, actionLabel: string, action: () => void): void;
44
+ }
45
+ /** A pane that reads or edits the provider being configured. */
46
+ export interface ProviderPaneHost extends PaneHost {
47
+ readonly store: ProviderView;
48
+ readonly edits: Pick<ProviderEdits, "setProviderField" | "removeModel" | "batch">;
49
+ readonly providerId: string;
46
50
  /** Effective api/baseUrl after provider-level and builtin-overlay fallbacks. */
47
51
  effectiveApi(model?: Partial<ModelsJsonModel>): string | undefined;
48
52
  effectiveBaseUrl(model?: Partial<ModelsJsonModel>): string | undefined;
53
+ }
54
+ /** The model fields pane, which also changes the left column's model rows. */
55
+ export interface ModelFieldsHost extends ProviderPaneHost {
49
56
  /** Commit the pending model draft (id validation + addModel op); returns an error or undefined. */
50
57
  commitModelDraft(): string | undefined;
51
58
  /** Drop the in-memory model draft; the left column returns to + Add Model. */
52
59
  discardModelDraft(): void;
53
- /** Current session model protection (§4.3): no delete/rename of the active model or its provider. */
60
+ /** Current session model protection (§4.3): no delete/rename of the active model. */
54
61
  isCurrentModel(modelId: string): boolean;
55
- isCurrentProvider(): boolean;
62
+ /** A model was just removed: rebuild the left column and reset the right stack. */
63
+ onModelRemoved(modelId: string): void;
64
+ }
65
+ /** The Fetch Models pane. */
66
+ export interface FetchModelsHost extends ProviderPaneHost {
56
67
  /** Last Fetch Models outcome shown next to the left-column action row. */
57
68
  setFetchStatus(status: string | undefined): void;
58
69
  /** Refresh the provider, resolve auth canonically, and GET {baseUrl}/models. */
59
70
  runFetch(signal: AbortSignal): Promise<ProbeResult>;
60
71
  /** Validate + batch-add imported models, save once, refresh; returns an error or undefined. */
61
72
  importModels(models: readonly ProbeModel[], signal: AbortSignal): Promise<string | undefined>;
62
- /** Push an in-editor Yes/No confirm into the right column. */
63
- confirm(message: string, actionLabel: string, action: () => void): void;
64
- /** A model was just removed: rebuild the left column and reset the right stack. */
65
- onModelRemoved(modelId: string): void;
66
73
  }
74
+ /** Everything the editor screen provides. Each pane declares only the part it uses. */
75
+ export type EditorHost = ModelFieldsHost & FetchModelsHost;
67
76
  //# sourceMappingURL=pane.d.ts.map