@flanksource/clicky-ui 0.3.25 → 0.3.27

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 (535) hide show
  1. package/NOTICE.md +1 -0
  2. package/dist/ai.cjs +4 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +6 -2
  5. package/dist/ai.js.map +1 -1
  6. package/dist/chat.cjs +8 -0
  7. package/dist/chat.cjs.map +1 -1
  8. package/dist/chat.js +9 -1
  9. package/dist/chat.js.map +1 -1
  10. package/dist/comments/CommentCard.cjs +89 -14
  11. package/dist/comments/CommentCard.cjs.map +1 -1
  12. package/dist/comments/CommentCard.d.ts.map +1 -1
  13. package/dist/comments/CommentCard.js +90 -15
  14. package/dist/comments/CommentCard.js.map +1 -1
  15. package/dist/comments/CommentComposer.cjs +25 -2
  16. package/dist/comments/CommentComposer.cjs.map +1 -1
  17. package/dist/comments/CommentComposer.d.ts.map +1 -1
  18. package/dist/comments/CommentComposer.js +25 -2
  19. package/dist/comments/CommentComposer.js.map +1 -1
  20. package/dist/comments/CommentProvider.cjs +21 -14
  21. package/dist/comments/CommentProvider.cjs.map +1 -1
  22. package/dist/comments/CommentProvider.d.ts +1 -1
  23. package/dist/comments/CommentProvider.d.ts.map +1 -1
  24. package/dist/comments/CommentProvider.js +21 -14
  25. package/dist/comments/CommentProvider.js.map +1 -1
  26. package/dist/comments/CommentSidePanel.cjs +1 -1
  27. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  28. package/dist/comments/CommentSidePanel.js +1 -1
  29. package/dist/comments/CommentSidePanel.js.map +1 -1
  30. package/dist/comments/comment-types.cjs.map +1 -1
  31. package/dist/comments/comment-types.d.ts +6 -0
  32. package/dist/comments/comment-types.d.ts.map +1 -1
  33. package/dist/comments/comment-types.js.map +1 -1
  34. package/dist/components/DimensionField.cjs +56 -0
  35. package/dist/components/DimensionField.cjs.map +1 -0
  36. package/dist/components/DimensionField.d.ts +17 -0
  37. package/dist/components/DimensionField.d.ts.map +1 -0
  38. package/dist/components/DimensionField.js +56 -0
  39. package/dist/components/DimensionField.js.map +1 -0
  40. package/dist/components.cjs +4 -0
  41. package/dist/components.cjs.map +1 -1
  42. package/dist/components.d.ts +2 -0
  43. package/dist/components.d.ts.map +1 -1
  44. package/dist/components.js +4 -0
  45. package/dist/components.js.map +1 -1
  46. package/dist/data/Clicky.cjs +4 -5
  47. package/dist/data/Clicky.cjs.map +1 -1
  48. package/dist/data/Clicky.d.ts.map +1 -1
  49. package/dist/data/Clicky.js +4 -5
  50. package/dist/data/Clicky.js.map +1 -1
  51. package/dist/data/FixtureEditor/fixture-frontmatter.cjs +4 -0
  52. package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
  53. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -1
  54. package/dist/data/FixtureEditor/fixture-frontmatter.js +4 -0
  55. package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -1
  56. package/dist/data/TaskExecDetails.cjs +8 -3
  57. package/dist/data/TaskExecDetails.cjs.map +1 -1
  58. package/dist/data/TaskExecDetails.d.ts +4 -0
  59. package/dist/data/TaskExecDetails.d.ts.map +1 -1
  60. package/dist/data/TaskExecDetails.js +9 -4
  61. package/dist/data/TaskExecDetails.js.map +1 -1
  62. package/dist/data/TaskManagerButton.cjs +101 -7
  63. package/dist/data/TaskManagerButton.cjs.map +1 -1
  64. package/dist/data/TaskManagerButton.d.ts +6 -1
  65. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  66. package/dist/data/TaskManagerButton.js +103 -9
  67. package/dist/data/TaskManagerButton.js.map +1 -1
  68. package/dist/data/TaskProcessDetails.cjs +2 -0
  69. package/dist/data/TaskProcessDetails.cjs.map +1 -1
  70. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  71. package/dist/data/TaskProcessDetails.js +2 -0
  72. package/dist/data/TaskProcessDetails.js.map +1 -1
  73. package/dist/data/TaskProgress.cjs +14 -4
  74. package/dist/data/TaskProgress.cjs.map +1 -1
  75. package/dist/data/TaskProgress.js +14 -4
  76. package/dist/data/TaskProgress.js.map +1 -1
  77. package/dist/data/TaskSnapshot.cjs.map +1 -1
  78. package/dist/data/TaskSnapshot.d.ts +1 -0
  79. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  80. package/dist/data/TaskSnapshot.js.map +1 -1
  81. package/dist/data/ai/ChatWindow.cjs +18 -23
  82. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  83. package/dist/data/ai/ChatWindow.d.ts +1 -1
  84. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  85. package/dist/data/ai/ChatWindow.js +19 -24
  86. package/dist/data/ai/ChatWindow.js.map +1 -1
  87. package/dist/data/ai/ChatWindow.preferences.cjs +12 -21
  88. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
  89. package/dist/data/ai/ChatWindow.preferences.d.ts +3 -2
  90. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
  91. package/dist/data/ai/ChatWindow.preferences.js +12 -21
  92. package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
  93. package/dist/data/ai/ChatWindow.tool-catalog.cjs +21 -38
  94. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
  95. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +5 -5
  96. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
  97. package/dist/data/ai/ChatWindow.tool-catalog.js +21 -38
  98. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
  99. package/dist/data/ai/ChatWindow.types.d.ts +2 -2
  100. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
  101. package/dist/data/ai/ChatWindowManager.cjs +2 -2
  102. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  103. package/dist/data/ai/ChatWindowManager.js +2 -2
  104. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  105. package/dist/data/ai/ChatWindowRequestBody.cjs +4 -2
  106. package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -1
  107. package/dist/data/ai/ChatWindowRequestBody.d.ts +15 -3
  108. package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -1
  109. package/dist/data/ai/ChatWindowRequestBody.js +4 -2
  110. package/dist/data/ai/ChatWindowRequestBody.js.map +1 -1
  111. package/dist/data/ai/PromptRunEditor/index.cjs +2 -3
  112. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  113. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  114. package/dist/data/ai/PromptRunEditor/index.js +2 -3
  115. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  116. package/dist/data/ai/PromptRunEditor/model.cjs +1 -0
  117. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
  118. package/dist/data/ai/PromptRunEditor/model.d.ts +1 -1
  119. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
  120. package/dist/data/ai/PromptRunEditor/model.js +1 -0
  121. package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
  122. package/dist/data/ai/RuntimeModePicker.cjs +11 -9
  123. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
  124. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
  125. package/dist/data/ai/RuntimeModePicker.js +12 -10
  126. package/dist/data/ai/RuntimeModePicker.js.map +1 -1
  127. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +5 -0
  128. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  129. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  130. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +5 -0
  131. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  132. package/dist/data/ai/SpecRuntimeEditor.model.cjs +4 -0
  133. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  134. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -0
  135. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  136. package/dist/data/ai/SpecRuntimeEditor.model.js +4 -0
  137. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  138. package/dist/data/ai/ToolPreferences.cjs +5 -5
  139. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  140. package/dist/data/ai/ToolPreferences.d.ts +6 -5
  141. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  142. package/dist/data/ai/ToolPreferences.js +5 -5
  143. package/dist/data/ai/ToolPreferences.js.map +1 -1
  144. package/dist/data/ai/ToolPreferences.model.cjs +61 -37
  145. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  146. package/dist/data/ai/ToolPreferences.model.d.ts +32 -13
  147. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  148. package/dist/data/ai/ToolPreferences.model.js +62 -38
  149. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  150. package/dist/data/ai/ToolPreferencesList.cjs +17 -20
  151. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  152. package/dist/data/ai/ToolPreferencesList.d.ts +16 -7
  153. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  154. package/dist/data/ai/ToolPreferencesList.js +18 -21
  155. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  156. package/dist/data/ai/chat-window-context.cjs +1 -1
  157. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  158. package/dist/data/ai/chat-window-context.d.ts +7 -7
  159. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  160. package/dist/data/ai/chat-window-context.js +1 -1
  161. package/dist/data/ai/chat-window-context.js.map +1 -1
  162. package/dist/data/ai/index.d.ts +3 -1
  163. package/dist/data/ai/index.d.ts.map +1 -1
  164. package/dist/data/chat/Chat.cjs +4 -2
  165. package/dist/data/chat/Chat.cjs.map +1 -1
  166. package/dist/data/chat/Chat.d.ts.map +1 -1
  167. package/dist/data/chat/Chat.js +4 -2
  168. package/dist/data/chat/Chat.js.map +1 -1
  169. package/dist/data/chat/Chat.runtime.cjs +14 -3
  170. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  171. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  172. package/dist/data/chat/Chat.runtime.js +15 -4
  173. package/dist/data/chat/Chat.runtime.js.map +1 -1
  174. package/dist/data/chat/clickyOperationsToTools.cjs +2 -1
  175. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  176. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  177. package/dist/data/chat/clickyOperationsToTools.js +2 -1
  178. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  179. package/dist/data/chat/index.d.ts +2 -1
  180. package/dist/data/chat/index.d.ts.map +1 -1
  181. package/dist/data/chat/tool-policy.cjs +132 -0
  182. package/dist/data/chat/tool-policy.cjs.map +1 -0
  183. package/dist/data/chat/tool-policy.d.ts +81 -0
  184. package/dist/data/chat/tool-policy.d.ts.map +1 -0
  185. package/dist/data/chat/tool-policy.js +132 -0
  186. package/dist/data/chat/tool-policy.js.map +1 -0
  187. package/dist/data/chat/types.cjs +20 -0
  188. package/dist/data/chat/types.cjs.map +1 -1
  189. package/dist/data/chat/types.d.ts +22 -2
  190. package/dist/data/chat/types.d.ts.map +1 -1
  191. package/dist/data/chat/types.js +20 -0
  192. package/dist/data/chat/types.js.map +1 -1
  193. package/dist/data/debugConsoleSignal.cjs +64 -0
  194. package/dist/data/debugConsoleSignal.cjs.map +1 -0
  195. package/dist/data/debugConsoleSignal.d.ts +83 -0
  196. package/dist/data/debugConsoleSignal.d.ts.map +1 -0
  197. package/dist/data/debugConsoleSignal.js +64 -0
  198. package/dist/data/debugConsoleSignal.js.map +1 -0
  199. package/dist/data/har/HarPanel.cjs +20 -14
  200. package/dist/data/har/HarPanel.cjs.map +1 -1
  201. package/dist/data/har/HarPanel.d.ts.map +1 -1
  202. package/dist/data/har/HarPanel.js +20 -14
  203. package/dist/data/har/HarPanel.js.map +1 -1
  204. package/dist/data/har/types.d.ts +18 -0
  205. package/dist/data/har/types.d.ts.map +1 -1
  206. package/dist/data/query-browser/QueryBrowser.cjs +4 -42
  207. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  208. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  209. package/dist/data/query-browser/QueryBrowser.js +5 -43
  210. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  211. package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
  212. package/dist/data/query-browser/QueryBrowser.types.d.ts +0 -1
  213. package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
  214. package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
  215. package/dist/data/runtime/RuntimeBar.cjs +26 -41
  216. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  217. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  218. package/dist/data/runtime/RuntimeBar.js +28 -43
  219. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  220. package/dist/data/runtime/RuntimeBar.model.cjs +65 -0
  221. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
  222. package/dist/data/runtime/RuntimeBar.model.d.ts +11 -3
  223. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
  224. package/dist/data/runtime/RuntimeBar.model.js +65 -0
  225. package/dist/data/runtime/RuntimeBar.model.js.map +1 -1
  226. package/dist/data/runtime/model-capabilities.cjs +8 -5
  227. package/dist/data/runtime/model-capabilities.cjs.map +1 -1
  228. package/dist/data/runtime/model-capabilities.d.ts +6 -1
  229. package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
  230. package/dist/data/runtime/model-capabilities.js +8 -5
  231. package/dist/data/runtime/model-capabilities.js.map +1 -1
  232. package/dist/data/runtime/runtime-mode.cjs +17 -0
  233. package/dist/data/runtime/runtime-mode.cjs.map +1 -1
  234. package/dist/data/runtime/runtime-mode.d.ts +6 -0
  235. package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
  236. package/dist/data/runtime/runtime-mode.js +17 -0
  237. package/dist/data/runtime/runtime-mode.js.map +1 -1
  238. package/dist/data/useDebugAction.cjs +29 -0
  239. package/dist/data/useDebugAction.cjs.map +1 -0
  240. package/dist/data/useDebugAction.d.ts +16 -0
  241. package/dist/data/useDebugAction.d.ts.map +1 -0
  242. package/dist/data/useDebugAction.js +29 -0
  243. package/dist/data/useDebugAction.js.map +1 -0
  244. package/dist/data/version-info.cjs +3 -3
  245. package/dist/data/version-info.js +3 -3
  246. package/dist/data.cjs +16 -8
  247. package/dist/data.cjs.map +1 -1
  248. package/dist/data.d.ts +3 -2
  249. package/dist/data.d.ts.map +1 -1
  250. package/dist/data.js +16 -8
  251. package/dist/devtools/DebugConsole.cjs +138 -0
  252. package/dist/devtools/DebugConsole.cjs.map +1 -0
  253. package/dist/devtools/DebugConsole.d.ts +23 -0
  254. package/dist/devtools/DebugConsole.d.ts.map +1 -0
  255. package/dist/devtools/DebugConsole.js +138 -0
  256. package/dist/devtools/DebugConsole.js.map +1 -0
  257. package/dist/devtools/DebugConsoleButton.cjs +59 -0
  258. package/dist/devtools/DebugConsoleButton.cjs.map +1 -0
  259. package/dist/devtools/DebugConsoleButton.d.ts +20 -0
  260. package/dist/devtools/DebugConsoleButton.d.ts.map +1 -0
  261. package/dist/devtools/DebugConsoleButton.js +59 -0
  262. package/dist/devtools/DebugConsoleButton.js.map +1 -0
  263. package/dist/devtools/DebugConsoleDock.cjs +112 -0
  264. package/dist/devtools/DebugConsoleDock.cjs.map +1 -0
  265. package/dist/devtools/DebugConsoleDock.d.ts +26 -0
  266. package/dist/devtools/DebugConsoleDock.d.ts.map +1 -0
  267. package/dist/devtools/DebugConsoleDock.js +112 -0
  268. package/dist/devtools/DebugConsoleDock.js.map +1 -0
  269. package/dist/devtools/ExecutionDetail.cjs +135 -0
  270. package/dist/devtools/ExecutionDetail.cjs.map +1 -0
  271. package/dist/devtools/ExecutionDetail.d.ts +19 -0
  272. package/dist/devtools/ExecutionDetail.d.ts.map +1 -0
  273. package/dist/devtools/ExecutionDetail.js +135 -0
  274. package/dist/devtools/ExecutionDetail.js.map +1 -0
  275. package/dist/devtools/debugClient.cjs +172 -0
  276. package/dist/devtools/debugClient.cjs.map +1 -0
  277. package/dist/devtools/debugClient.d.ts +98 -0
  278. package/dist/devtools/debugClient.d.ts.map +1 -0
  279. package/dist/devtools/debugClient.js +172 -0
  280. package/dist/devtools/debugClient.js.map +1 -0
  281. package/dist/devtools/debugStore.cjs +115 -0
  282. package/dist/devtools/debugStore.cjs.map +1 -0
  283. package/dist/devtools/debugStore.d.ts +83 -0
  284. package/dist/devtools/debugStore.d.ts.map +1 -0
  285. package/dist/devtools/debugStore.js +115 -0
  286. package/dist/devtools/debugStore.js.map +1 -0
  287. package/dist/devtools/dockState.cjs +51 -0
  288. package/dist/devtools/dockState.cjs.map +1 -0
  289. package/dist/devtools/dockState.d.ts +31 -0
  290. package/dist/devtools/dockState.d.ts.map +1 -0
  291. package/dist/devtools/dockState.js +51 -0
  292. package/dist/devtools/dockState.js.map +1 -0
  293. package/dist/devtools/tabs/ConsoleTab.cjs +36 -0
  294. package/dist/devtools/tabs/ConsoleTab.cjs.map +1 -0
  295. package/dist/devtools/tabs/ConsoleTab.d.ts +19 -0
  296. package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -0
  297. package/dist/devtools/tabs/ConsoleTab.js +36 -0
  298. package/dist/devtools/tabs/ConsoleTab.js.map +1 -0
  299. package/dist/devtools/tabs/InspectionCaches.cjs +150 -0
  300. package/dist/devtools/tabs/InspectionCaches.cjs.map +1 -0
  301. package/dist/devtools/tabs/InspectionCaches.d.ts +23 -0
  302. package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -0
  303. package/dist/devtools/tabs/InspectionCaches.js +150 -0
  304. package/dist/devtools/tabs/InspectionCaches.js.map +1 -0
  305. package/dist/devtools/tabs/InspectionTab.cjs +316 -0
  306. package/dist/devtools/tabs/InspectionTab.cjs.map +1 -0
  307. package/dist/devtools/tabs/InspectionTab.d.ts +27 -0
  308. package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -0
  309. package/dist/devtools/tabs/InspectionTab.js +316 -0
  310. package/dist/devtools/tabs/InspectionTab.js.map +1 -0
  311. package/dist/devtools/tabs/NetworkTab.cjs +91 -0
  312. package/dist/devtools/tabs/NetworkTab.cjs.map +1 -0
  313. package/dist/devtools/tabs/NetworkTab.d.ts +20 -0
  314. package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -0
  315. package/dist/devtools/tabs/NetworkTab.js +91 -0
  316. package/dist/devtools/tabs/NetworkTab.js.map +1 -0
  317. package/dist/devtools/tabs/QueriesTab.cjs +85 -0
  318. package/dist/devtools/tabs/QueriesTab.cjs.map +1 -0
  319. package/dist/devtools/tabs/QueriesTab.d.ts +24 -0
  320. package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -0
  321. package/dist/devtools/tabs/QueriesTab.js +85 -0
  322. package/dist/devtools/tabs/QueriesTab.js.map +1 -0
  323. package/dist/devtools/types.cjs +26 -0
  324. package/dist/devtools/types.cjs.map +1 -0
  325. package/dist/devtools/types.d.ts +235 -0
  326. package/dist/devtools/types.d.ts.map +1 -0
  327. package/dist/devtools/types.js +26 -0
  328. package/dist/devtools/types.js.map +1 -0
  329. package/dist/devtools/useDebugStream.cjs +46 -0
  330. package/dist/devtools/useDebugStream.cjs.map +1 -0
  331. package/dist/devtools/useDebugStream.d.ts +23 -0
  332. package/dist/devtools/useDebugStream.d.ts.map +1 -0
  333. package/dist/devtools/useDebugStream.js +46 -0
  334. package/dist/devtools/useDebugStream.js.map +1 -0
  335. package/dist/devtools.cjs +51 -0
  336. package/dist/devtools.cjs.map +1 -0
  337. package/dist/devtools.d.ts +37 -0
  338. package/dist/devtools.d.ts.map +1 -0
  339. package/dist/devtools.js +51 -0
  340. package/dist/devtools.js.map +1 -0
  341. package/dist/icons/components/UiOpenScad.cjs +10 -0
  342. package/dist/icons/components/UiOpenScad.cjs.map +1 -0
  343. package/dist/icons/components/UiOpenScad.d.ts +9 -0
  344. package/dist/icons/components/UiOpenScad.d.ts.map +1 -0
  345. package/dist/icons/components/UiOpenScad.js +10 -0
  346. package/dist/icons/components/UiOpenScad.js.map +1 -0
  347. package/dist/icons/index.d.ts +1 -0
  348. package/dist/icons/index.d.ts.map +1 -1
  349. package/dist/icons/registry.cjs +2 -0
  350. package/dist/icons/registry.cjs.map +1 -1
  351. package/dist/icons/registry.d.ts.map +1 -1
  352. package/dist/icons/registry.js +2 -0
  353. package/dist/icons/registry.js.map +1 -1
  354. package/dist/icons.cjs +2 -0
  355. package/dist/icons.cjs.map +1 -1
  356. package/dist/icons.js +2 -0
  357. package/dist/icons.js.map +1 -1
  358. package/dist/index.cjs +20 -8
  359. package/dist/index.cjs.map +1 -1
  360. package/dist/index.js +20 -8
  361. package/dist/index.js.map +1 -1
  362. package/dist/layout/AppShell.cjs +15 -10
  363. package/dist/layout/AppShell.cjs.map +1 -1
  364. package/dist/layout/AppShell.d.ts +11 -0
  365. package/dist/layout/AppShell.d.ts.map +1 -1
  366. package/dist/layout/AppShell.js +15 -10
  367. package/dist/layout/AppShell.js.map +1 -1
  368. package/dist/layout/AppShell.nav.cjs +170 -49
  369. package/dist/layout/AppShell.nav.cjs.map +1 -1
  370. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  371. package/dist/layout/AppShell.nav.js +170 -49
  372. package/dist/layout/AppShell.nav.js.map +1 -1
  373. package/dist/overlay/CellActions.cjs +18 -124
  374. package/dist/overlay/CellActions.cjs.map +1 -1
  375. package/dist/overlay/CellActions.d.ts +1 -1
  376. package/dist/overlay/CellActions.d.ts.map +1 -1
  377. package/dist/overlay/CellActions.js +18 -124
  378. package/dist/overlay/CellActions.js.map +1 -1
  379. package/dist/overlay/ContextMenu.cjs +144 -0
  380. package/dist/overlay/ContextMenu.cjs.map +1 -0
  381. package/dist/overlay/ContextMenu.d.ts +8 -0
  382. package/dist/overlay/ContextMenu.d.ts.map +1 -0
  383. package/dist/overlay/ContextMenu.js +144 -0
  384. package/dist/overlay/ContextMenu.js.map +1 -0
  385. package/dist/profiles/connections/connectionBrowserModel.cjs +14 -65
  386. package/dist/profiles/connections/connectionBrowserModel.cjs.map +1 -1
  387. package/dist/profiles/connections/connectionBrowserModel.d.ts +35 -35
  388. package/dist/profiles/connections/connectionBrowserModel.d.ts.map +1 -1
  389. package/dist/profiles/connections/connectionBrowserModel.js +14 -65
  390. package/dist/profiles/connections/connectionBrowserModel.js.map +1 -1
  391. package/dist/profiles/connections/connectionQueryWorkspace.cjs +29 -9
  392. package/dist/profiles/connections/connectionQueryWorkspace.cjs.map +1 -1
  393. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +3 -2
  394. package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
  395. package/dist/profiles/connections/connectionQueryWorkspace.js +30 -10
  396. package/dist/profiles/connections/connectionQueryWorkspace.js.map +1 -1
  397. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs +15 -0
  398. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs.map +1 -1
  399. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts +22 -1
  400. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts.map +1 -1
  401. package/dist/profiles/connections/connectionQueryWorkspaceModel.js +15 -0
  402. package/dist/profiles/connections/connectionQueryWorkspaceModel.js.map +1 -1
  403. package/dist/profiles/connections/index.d.ts +1 -0
  404. package/dist/profiles/connections/index.d.ts.map +1 -1
  405. package/dist/profiles/connections/inspectionStatus.cjs +44 -0
  406. package/dist/profiles/connections/inspectionStatus.cjs.map +1 -0
  407. package/dist/profiles/connections/inspectionStatus.d.ts +5 -0
  408. package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -0
  409. package/dist/profiles/connections/inspectionStatus.js +44 -0
  410. package/dist/profiles/connections/inspectionStatus.js.map +1 -0
  411. package/dist/profiles/connections/useInspection.cjs +123 -0
  412. package/dist/profiles/connections/useInspection.cjs.map +1 -0
  413. package/dist/profiles/connections/useInspection.d.ts +35 -0
  414. package/dist/profiles/connections/useInspection.d.ts.map +1 -0
  415. package/dist/profiles/connections/useInspection.js +123 -0
  416. package/dist/profiles/connections/useInspection.js.map +1 -0
  417. package/dist/profiles/editor/profileBuilderWorkspace.cjs +55 -23
  418. package/dist/profiles/editor/profileBuilderWorkspace.cjs.map +1 -1
  419. package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
  420. package/dist/profiles/editor/profileBuilderWorkspace.js +56 -24
  421. package/dist/profiles/editor/profileBuilderWorkspace.js.map +1 -1
  422. package/dist/profiles/elasticsearch/esQueryBuilder.cjs +12 -3
  423. package/dist/profiles/elasticsearch/esQueryBuilder.cjs.map +1 -1
  424. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
  425. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
  426. package/dist/profiles/elasticsearch/esQueryBuilder.js +12 -3
  427. package/dist/profiles/elasticsearch/esQueryBuilder.js.map +1 -1
  428. package/dist/profiles/fields/profileFieldEditor.cjs +137 -22
  429. package/dist/profiles/fields/profileFieldEditor.cjs.map +1 -1
  430. package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
  431. package/dist/profiles/fields/profileFieldEditor.js +137 -22
  432. package/dist/profiles/fields/profileFieldEditor.js.map +1 -1
  433. package/dist/profiles/fields/profileFieldFilterEditor.cjs +171 -82
  434. package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
  435. package/dist/profiles/fields/profileFieldFilterEditor.d.ts +0 -9
  436. package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
  437. package/dist/profiles/fields/profileFieldFilterEditor.js +174 -85
  438. package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
  439. package/dist/profiles/fields/profileFieldIcons.cjs +6 -3
  440. package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
  441. package/dist/profiles/fields/profileFieldIcons.js +6 -3
  442. package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
  443. package/dist/profiles/query/profileSampleFilterLookup.cjs +34 -0
  444. package/dist/profiles/query/profileSampleFilterLookup.cjs.map +1 -0
  445. package/dist/profiles/query/profileSampleFilterLookup.d.ts +12 -0
  446. package/dist/profiles/query/profileSampleFilterLookup.d.ts.map +1 -0
  447. package/dist/profiles/query/profileSampleFilterLookup.js +34 -0
  448. package/dist/profiles/query/profileSampleFilterLookup.js.map +1 -0
  449. package/dist/profiles/query/profileSamplePayload.cjs +6 -4
  450. package/dist/profiles/query/profileSamplePayload.cjs.map +1 -1
  451. package/dist/profiles/query/profileSamplePayload.d.ts +11 -4
  452. package/dist/profiles/query/profileSamplePayload.d.ts.map +1 -1
  453. package/dist/profiles/query/profileSamplePayload.js +6 -4
  454. package/dist/profiles/query/profileSamplePayload.js.map +1 -1
  455. package/dist/profiles/query/profileSampleResult.cjs +26 -0
  456. package/dist/profiles/query/profileSampleResult.cjs.map +1 -0
  457. package/dist/profiles/query/profileSampleResult.d.ts +11 -0
  458. package/dist/profiles/query/profileSampleResult.d.ts.map +1 -0
  459. package/dist/profiles/query/profileSampleResult.js +26 -0
  460. package/dist/profiles/query/profileSampleResult.js.map +1 -0
  461. package/dist/profiles/query/queryTargetPicker.cjs +5 -3
  462. package/dist/profiles/query/queryTargetPicker.cjs.map +1 -1
  463. package/dist/profiles/query/queryTargetPicker.d.ts +3 -2
  464. package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
  465. package/dist/profiles/query/queryTargetPicker.js +5 -3
  466. package/dist/profiles/query/queryTargetPicker.js.map +1 -1
  467. package/dist/profiles/wizard/profileWizard.cjs +14 -5
  468. package/dist/profiles/wizard/profileWizard.cjs.map +1 -1
  469. package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
  470. package/dist/profiles/wizard/profileWizard.js +15 -6
  471. package/dist/profiles/wizard/profileWizard.js.map +1 -1
  472. package/dist/profiles/wizard/profileWizardModel.cjs +35 -6
  473. package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
  474. package/dist/profiles/wizard/profileWizardModel.d.ts +29 -4
  475. package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
  476. package/dist/profiles/wizard/profileWizardModel.js +35 -6
  477. package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
  478. package/dist/profiles/wizard/profileWizardQueryStep.cjs +44 -11
  479. package/dist/profiles/wizard/profileWizardQueryStep.cjs.map +1 -1
  480. package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
  481. package/dist/profiles/wizard/profileWizardQueryStep.js +46 -13
  482. package/dist/profiles/wizard/profileWizardQueryStep.js.map +1 -1
  483. package/dist/profiles/wizard/profileWizardSteps.cjs +33 -2
  484. package/dist/profiles/wizard/profileWizardSteps.cjs.map +1 -1
  485. package/dist/profiles/wizard/profileWizardSteps.d.ts +11 -2
  486. package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
  487. package/dist/profiles/wizard/profileWizardSteps.js +33 -2
  488. package/dist/profiles/wizard/profileWizardSteps.js.map +1 -1
  489. package/dist/profiles.cjs +8 -2
  490. package/dist/profiles.cjs.map +1 -1
  491. package/dist/profiles.js +10 -4
  492. package/dist/profiles.js.map +1 -1
  493. package/dist/rpc/FilterForm.cjs +21 -237
  494. package/dist/rpc/FilterForm.cjs.map +1 -1
  495. package/dist/rpc/FilterForm.d.ts +3 -1
  496. package/dist/rpc/FilterForm.d.ts.map +1 -1
  497. package/dist/rpc/FilterForm.js +21 -237
  498. package/dist/rpc/FilterForm.js.map +1 -1
  499. package/dist/rpc/FilterFormFields.cjs +240 -0
  500. package/dist/rpc/FilterFormFields.cjs.map +1 -0
  501. package/dist/rpc/FilterFormFields.d.ts +12 -0
  502. package/dist/rpc/FilterFormFields.d.ts.map +1 -0
  503. package/dist/rpc/FilterFormFields.js +240 -0
  504. package/dist/rpc/FilterFormFields.js.map +1 -0
  505. package/dist/rpc/router.cjs +3 -2
  506. package/dist/rpc/router.cjs.map +1 -1
  507. package/dist/rpc/router.d.ts.map +1 -1
  508. package/dist/rpc/router.js +3 -2
  509. package/dist/rpc/router.js.map +1 -1
  510. package/dist/rpc/types.cjs.map +1 -1
  511. package/dist/rpc/types.d.ts +3 -1
  512. package/dist/rpc/types.d.ts.map +1 -1
  513. package/dist/rpc/types.js.map +1 -1
  514. package/dist/styles.css +1 -1
  515. package/package.json +6 -1
  516. package/dist/data/query-info/QueryInfoDialog.cjs +0 -106
  517. package/dist/data/query-info/QueryInfoDialog.cjs.map +0 -1
  518. package/dist/data/query-info/QueryInfoDialog.d.ts +0 -16
  519. package/dist/data/query-info/QueryInfoDialog.d.ts.map +0 -1
  520. package/dist/data/query-info/QueryInfoDialog.js +0 -106
  521. package/dist/data/query-info/QueryInfoDialog.js.map +0 -1
  522. package/dist/data/query-info/index.d.ts +0 -4
  523. package/dist/data/query-info/index.d.ts.map +0 -1
  524. package/dist/data/query-info/queryInfo.cjs +0 -42
  525. package/dist/data/query-info/queryInfo.cjs.map +0 -1
  526. package/dist/data/query-info/queryInfo.d.ts +0 -45
  527. package/dist/data/query-info/queryInfo.d.ts.map +0 -1
  528. package/dist/data/query-info/queryInfo.js +0 -42
  529. package/dist/data/query-info/queryInfo.js.map +0 -1
  530. package/dist/data/query-info/useQueryInfo.cjs +0 -48
  531. package/dist/data/query-info/useQueryInfo.cjs.map +0 -1
  532. package/dist/data/query-info/useQueryInfo.d.ts +0 -26
  533. package/dist/data/query-info/useQueryInfo.d.ts.map +0 -1
  534. package/dist/data/query-info/useQueryInfo.js +0 -48
  535. package/dist/data/query-info/useQueryInfo.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBrowser.types.js","sources":["../../../src/data/query-browser/QueryBrowser.types.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { JsonSchemaObject } from \"../../components/json-schema-form-types\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport type {\n DataTableFilterLookupRequest,\n DataTableFilterLookupResult,\n DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport type { QueryBrowserCompletion } from \"./QueryBrowser.completion\";\nimport type { QueryBrowserLanguage } from \"./QueryBrowser.editor\";\n\nexport type QueryBrowserPagination = {\n mode: \"offset\" | \"cursor\";\n limit: number;\n offset?: number;\n cursor?: string;\n nextCursor?: string;\n hasMore: boolean;\n total?: number;\n totalRelation: \"eq\" | \"gte\" | \"unknown\";\n consistency: \"live\" | \"snapshot\";\n};\n\nexport type QueryBrowserDiagnostics = {\n provider: string;\n request: {\n /** The statement the provider issued, with every runtime filter folded in. */\n query?: string;\n /** The same query before the provider composed the run onto it. */\n rendered?: string;\n connection?: string;\n arguments?: unknown[];\n options?: Record<string, unknown>;\n details?: Record<string, unknown>;\n /** The HTTP exchange the request rode on, for a provider that speaks HTTP. */\n method?: string;\n url?: string;\n headers?: Record<string, string>;\n };\n response?: {\n durationMs?: number;\n returnedRows?: number;\n pages?: number;\n details?: Record<string, unknown>;\n preview?: string;\n contentType?: string;\n truncated?: boolean;\n status?: number;\n headers?: Record<string, string>;\n };\n error?: string;\n};\n\nexport class QueryBrowserExecutionError extends Error {\n constructor(\n message: string,\n readonly diagnostics?: QueryBrowserDiagnostics,\n readonly errorDetails?: ErrorDiagnostics,\n ) {\n super(message);\n this.name = \"QueryBrowserExecutionError\";\n }\n}\n\nexport type QueryBrowserResult = {\n rows?: Record<string, unknown>[];\n columns?: DataTableServerColumn[];\n affectedRows?: number;\n durationMs?: number;\n message?: string;\n truncated?: boolean;\n limit?: number;\n metadata?: Record<string, unknown>;\n pagination?: QueryBrowserPagination;\n diagnostics?: QueryBrowserDiagnostics;\n};\n\nexport type QueryBrowserRequest = {\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n pagination?: { limit: number; offset?: number; cursor?: string };\n debug?: boolean;\n};\n\nexport type QueryBrowserFilterLookupRequest = DataTableFilterLookupRequest & {\n query: string;\n options: Record<string, unknown>;\n filters: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n};\n\nexport type QueryBrowserFilterLookup = (\n request: QueryBrowserFilterLookupRequest,\n) => Promise<DataTableFilterLookupResult>;\n\nexport type QueryBrowserResultContext = {\n result: QueryBrowserResult;\n defaultView: ReactNode;\n};\n\n// The optional props admit an explicit `undefined` — the same convention the\n// rest of the package follows (see data/CodeBlock.tsx). Passing a\n// possibly-absent value straight through, `className={maybe}`, is ordinary\n// React, and under exactOptionalPropertyTypes a bare `?:` rejects it.\nexport type QueryBrowserProps = {\n id: string;\n title?: string | undefined;\n language?: QueryBrowserLanguage | undefined;\n initialQuery?: string | undefined;\n queryLabel?: string | undefined;\n allowEmptyQuery?: boolean | undefined;\n optionsSchema?: JsonSchemaObject | undefined;\n initialOptions?: Record<string, unknown> | undefined;\n completion?: QueryBrowserCompletion | undefined;\n onQueryChange?: ((query: string) => void) | undefined;\n onOptionsChange?: ((options: Record<string, unknown>) => void) | undefined;\n navigator?: ReactNode | undefined;\n execute: (request: QueryBrowserRequest) => Promise<QueryBrowserResult>;\n lookupFilterValues?: QueryBrowserFilterLookup | undefined;\n renderResults?: ((context: QueryBrowserResultContext) => ReactNode) | undefined;\n className?: string | undefined;\n};\n"],"names":[],"mappings":"AAsDO,MAAM,mCAAmC,MAAM;AAAA,EACpD,YACE,SACS,aACA,cACT;AACA,UAAM,OAAO;AAHJ,SAAA,cAAA;AACA,SAAA,eAAA;AAGT,SAAK,OAAO;AAAA,EACd;AACF;"}
1
+ {"version":3,"file":"QueryBrowser.types.js","sources":["../../../src/data/query-browser/QueryBrowser.types.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { JsonSchemaObject } from \"../../components/json-schema-form-types\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport type {\n DataTableFilterLookupRequest,\n DataTableFilterLookupResult,\n DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport type { QueryBrowserCompletion } from \"./QueryBrowser.completion\";\nimport type { QueryBrowserLanguage } from \"./QueryBrowser.editor\";\n\nexport type QueryBrowserPagination = {\n mode: \"offset\" | \"cursor\";\n limit: number;\n offset?: number;\n cursor?: string;\n nextCursor?: string;\n hasMore: boolean;\n total?: number;\n totalRelation: \"eq\" | \"gte\" | \"unknown\";\n consistency: \"live\" | \"snapshot\";\n};\n\nexport type QueryBrowserDiagnostics = {\n provider: string;\n request: {\n /** The statement the provider issued, with every runtime filter folded in. */\n query?: string;\n /** The same query before the provider composed the run onto it. */\n rendered?: string;\n connection?: string;\n arguments?: unknown[];\n options?: Record<string, unknown>;\n details?: Record<string, unknown>;\n /** The HTTP exchange the request rode on, for a provider that speaks HTTP. */\n method?: string;\n url?: string;\n headers?: Record<string, string>;\n };\n response?: {\n durationMs?: number;\n returnedRows?: number;\n pages?: number;\n details?: Record<string, unknown>;\n preview?: string;\n contentType?: string;\n truncated?: boolean;\n status?: number;\n headers?: Record<string, string>;\n };\n error?: string;\n};\n\nexport class QueryBrowserExecutionError extends Error {\n constructor(\n message: string,\n readonly diagnostics?: QueryBrowserDiagnostics,\n readonly errorDetails?: ErrorDiagnostics,\n ) {\n super(message);\n this.name = \"QueryBrowserExecutionError\";\n }\n}\n\nexport type QueryBrowserResult = {\n rows?: Record<string, unknown>[];\n columns?: DataTableServerColumn[];\n affectedRows?: number;\n durationMs?: number;\n message?: string;\n truncated?: boolean;\n limit?: number;\n metadata?: Record<string, unknown>;\n pagination?: QueryBrowserPagination;\n diagnostics?: QueryBrowserDiagnostics;\n};\n\nexport type QueryBrowserRequest = {\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n pagination?: { limit: number; offset?: number; cursor?: string };\n};\n\nexport type QueryBrowserFilterLookupRequest = DataTableFilterLookupRequest & {\n query: string;\n options: Record<string, unknown>;\n filters: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n};\n\nexport type QueryBrowserFilterLookup = (\n request: QueryBrowserFilterLookupRequest,\n) => Promise<DataTableFilterLookupResult>;\n\nexport type QueryBrowserResultContext = {\n result: QueryBrowserResult;\n defaultView: ReactNode;\n};\n\n// The optional props admit an explicit `undefined` — the same convention the\n// rest of the package follows (see data/CodeBlock.tsx). Passing a\n// possibly-absent value straight through, `className={maybe}`, is ordinary\n// React, and under exactOptionalPropertyTypes a bare `?:` rejects it.\nexport type QueryBrowserProps = {\n id: string;\n title?: string | undefined;\n language?: QueryBrowserLanguage | undefined;\n initialQuery?: string | undefined;\n queryLabel?: string | undefined;\n allowEmptyQuery?: boolean | undefined;\n optionsSchema?: JsonSchemaObject | undefined;\n initialOptions?: Record<string, unknown> | undefined;\n completion?: QueryBrowserCompletion | undefined;\n onQueryChange?: ((query: string) => void) | undefined;\n onOptionsChange?: ((options: Record<string, unknown>) => void) | undefined;\n navigator?: ReactNode | undefined;\n execute: (request: QueryBrowserRequest) => Promise<QueryBrowserResult>;\n lookupFilterValues?: QueryBrowserFilterLookup | undefined;\n renderResults?: ((context: QueryBrowserResultContext) => ReactNode) | undefined;\n className?: string | undefined;\n};\n"],"names":[],"mappings":"AAsDO,MAAM,mCAAmC,MAAM;AAAA,EACpD,YACE,SACS,aACA,cACT;AACA,UAAM,OAAO;AAHJ,SAAA,cAAA;AACA,SAAA,eAAA;AAGT,SAAK,OAAO;AAAA,EACd;AACF;"}
@@ -23,60 +23,45 @@ function RuntimeBar({
23
23
  const family = runtimeMode.familyById(families, selection.family);
24
24
  const mode = family.modes.find((entry) => entry.id === selection.mode) ?? runtimeMode.firstMode(family);
25
25
  const modelOptions = runtimeMode.modelsForFamily(models, family, value.backend);
26
- const selectedModel = models.find(
27
- (entry) => {
28
- var _a;
29
- return availability.isSelectableModel(entry) && ((_a = entry.runtime) == null ? void 0 : _a.backend) === value.backend && RuntimeBar_model.runtimeModelMatches(entry, value);
30
- }
31
- );
32
- const resolvedModel = selectedModel ?? models.find(
33
- (entry) => availability.isSelectableModel(entry) && RuntimeBar_model.runtimeModelMatches(entry, value)
34
- );
26
+ const resolvedModel = RuntimeBar_model.runtimeModelForValue(models, value, availability.isSelectableModel);
35
27
  const selectedModelUnavailable = Boolean(
36
- value.model && models.some(
37
- (entry) => !availability.isSelectableModel(entry) && RuntimeBar_model.runtimeModelMatches(entry, value)
38
- )
28
+ (value.id || value.model) && RuntimeBar_model.runtimeModelForValue(models, value, (entry) => !availability.isSelectableModel(entry))
39
29
  );
40
30
  const supportedEfforts = modelCapabilities.effortOptionsForModel(
41
31
  resolvedModel,
42
32
  reasoningEfforts
43
33
  );
44
34
  const applyBackend = (familyId, modeId) => {
45
- const backend = runtimeMode.backendForFamilyMode(families, familyId, modeId);
46
- if (backend === (value.backend ?? "")) return;
47
- let next = withOptionalRuntimeValue(
48
- withRuntimeValue(value, { backend }),
49
- "cliArgs",
50
- void 0
51
- );
52
- if (!runtimeMode.modelBelongsToFamily(
53
- value.model,
35
+ const next = RuntimeBar_model.applyRuntimeBackend(
36
+ value,
54
37
  models,
55
- runtimeMode.familyById(families, familyId),
56
- backend
57
- )) {
58
- next = withoutCatalogModel(next);
59
- }
60
- onChange(next);
38
+ families,
39
+ familyId,
40
+ modeId,
41
+ reasoningEfforts
42
+ );
43
+ if (next !== value) onChange(next);
61
44
  };
62
- const applyCustomModel = (model) => onChange(
63
- withOptionalRuntimeValue(withoutCatalogModel(value), "model", model)
64
- );
65
- const applyModel = (model) => {
66
- const next = modelCapabilities.reconcileModelCapabilities(value, model, reasoningEfforts);
67
- if (!mode.provider || model.provider !== mode.provider) {
68
- onChange(next);
69
- return;
70
- }
45
+ const preserveSelectedMode = (next) => value.backend === mode.backend ? withRuntimeValue(next, { mode: mode.id }) : next;
46
+ const applyCustomModel = (model) => {
71
47
  onChange(
72
- withOptionalRuntimeValue(
73
- withOptionalRuntimeValue(next, "backend", mode.backend),
74
- "mode",
75
- mode.id
48
+ preserveSelectedMode(
49
+ withOptionalRuntimeValue(withoutCatalogModel(value), "model", model)
76
50
  )
77
51
  );
78
52
  };
79
- const clearModel = () => onChange(withoutCatalogModel(value));
53
+ const applyModel = (model) => {
54
+ const next = modelCapabilities.reconcileModelCapabilities(
55
+ withoutCatalogModel(value),
56
+ model,
57
+ reasoningEfforts,
58
+ { backend: mode.backend, mode: mode.id }
59
+ );
60
+ onChange(next);
61
+ };
62
+ const clearModel = () => {
63
+ onChange(preserveSelectedMode(withoutCatalogModel(value)));
64
+ };
80
65
  const applyEffort = (effort) => onChange(withOptionalRuntimeValue(value, "effort", effort));
81
66
  if (variant === "combo") {
82
67
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.cjs","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { runtimeModelMatches } from \"./RuntimeBar.model\";\nimport { RuntimeBarCombo } from \"./RuntimeBarCombo\";\nimport { RuntimeBarSegments } from \"./RuntimeBarSegments\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n backendForFamilyMode,\n familyById,\n firstMode,\n modelBelongsToFamily,\n modelsForFamily,\n selectionForBackend,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** `segmented` uses field triggers; `combo` uses one direct-edit menu. */\n variant?: \"combo\" | \"segmented\";\n /** Model catalog. Only the selected family's models are listed; a family the\n * catalog does not describe is served by the segment's free-text entry. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, backend, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Self-describing runtime controls with segmented and combo presentations. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n variant = \"segmented\",\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const selection = selectionForBackend(families, value.backend);\n const family = familyById(families, selection.family);\n const mode =\n family.modes.find((entry) => entry.id === selection.mode) ??\n firstMode(family);\n const modelOptions = modelsForFamily(models, family, value.backend);\n const selectedModel = models.find(\n (entry) =>\n isSelectableModel(entry) &&\n entry.runtime?.backend === value.backend &&\n runtimeModelMatches(entry, value),\n );\n const resolvedModel =\n selectedModel ??\n models.find(\n (entry) => isSelectableModel(entry) && runtimeModelMatches(entry, value),\n );\n const selectedModelUnavailable = Boolean(\n value.model &&\n models.some(\n (entry) => !isSelectableModel(entry) && runtimeModelMatches(entry, value),\n ),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n\n const applyBackend = (familyId: string, modeId: string) => {\n const backend = backendForFamilyMode(families, familyId, modeId);\n if (backend === (value.backend ?? \"\")) return;\n let next = withOptionalRuntimeValue(\n withRuntimeValue(value, { backend }),\n \"cliArgs\",\n undefined,\n );\n if (\n !modelBelongsToFamily(\n value.model,\n models,\n familyById(families, familyId),\n backend,\n )\n ) {\n next = withoutCatalogModel(next);\n }\n onChange(next);\n };\n\n const applyCustomModel = (model: string) =>\n onChange(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n );\n // A menu row carries the backend of the catalog it was listed under, and one\n // catalog serves several backends — claude-cli and claude-cmux models are\n // listed as claude-agent rows. Copying the row's runtime verbatim would let\n // picking a model silently move the user off the mode they chose, so a row\n // drawn from the selected mode's own catalog keeps that mode.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(value, model, reasoningEfforts);\n if (!mode.provider || model.provider !== mode.provider) {\n onChange(next);\n return;\n }\n onChange(\n withOptionalRuntimeValue(\n withOptionalRuntimeValue(next, \"backend\", mode.backend),\n \"mode\",\n mode.id,\n ),\n );\n };\n const clearModel = () => onChange(withoutCatalogModel(value));\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n if (variant === \"combo\") {\n return (\n <RuntimeBarCombo\n value={value}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n models={modelOptions}\n selectedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n supportedEfforts={supportedEfforts}\n locked={locked}\n ariaLabel={ariaLabel}\n className={className}\n onFamilyChange={(familyId) => applyBackend(familyId, selection.mode)}\n onModeChange={(modeId) => applyBackend(family.id, modeId)}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onEffortChange={applyEffort}\n />\n );\n }\n\n return (\n <RuntimeBarSegments\n value={value}\n models={models}\n modelOptions={modelOptions}\n resolvedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n reasoningEfforts={reasoningEfforts}\n supportedEfforts={supportedEfforts}\n locked={locked}\n ariaLabel={ariaLabel}\n className={className}\n onBackendChange={applyBackend}\n onCustomModel={applyCustomModel}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onEffortChange={applyEffort}\n />\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n patch: Partial<RuntimeBarValue>,\n): T {\n return { ...value, ...patch };\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":["SPEC_RUNTIME_FAMILIES","DEFAULT_REASONING_EFFORTS","selectionForBackend","familyById","firstMode","modelsForFamily","isSelectableModel","runtimeModelMatches","effortOptionsForModel","backendForFamilyMode","modelBelongsToFamily","reconcileModelCapabilities","jsx","RuntimeBarCombo","RuntimeBarSegments"],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeBar.cjs","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { applyRuntimeBackend, runtimeModelForValue } from \"./RuntimeBar.model\";\nimport { RuntimeBarCombo } from \"./RuntimeBarCombo\";\nimport { RuntimeBarSegments } from \"./RuntimeBarSegments\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n familyById,\n firstMode,\n modelsForFamily,\n selectionForBackend,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** `segmented` uses field triggers; `combo` uses one direct-edit menu. */\n variant?: \"combo\" | \"segmented\";\n /** Model catalog. Only the selected family's models are listed; a family the\n * catalog does not describe is served by the segment's free-text entry. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, backend, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Self-describing runtime controls with segmented and combo presentations. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n variant = \"segmented\",\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const selection = selectionForBackend(families, value.backend);\n const family = familyById(families, selection.family);\n const mode =\n family.modes.find((entry) => entry.id === selection.mode) ??\n firstMode(family);\n const modelOptions = modelsForFamily(models, family, value.backend);\n const resolvedModel = runtimeModelForValue(models, value, isSelectableModel);\n const selectedModelUnavailable = Boolean(\n (value.id || value.model) &&\n runtimeModelForValue(models, value, (entry) => !isSelectableModel(entry)),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n\n const applyBackend = (familyId: string, modeId: string) => {\n const next = applyRuntimeBackend(\n value,\n models,\n families,\n familyId,\n modeId,\n reasoningEfforts,\n );\n if (next !== value) onChange(next);\n };\n\n const preserveSelectedMode = (next: T) =>\n value.backend === mode.backend\n ? withRuntimeValue(next, { mode: mode.id })\n : next;\n const applyCustomModel = (model: string) => {\n onChange(\n preserveSelectedMode(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n ),\n );\n };\n // A menu row carries the backend of the catalog it was listed under, and one\n // catalog serves several backends — claude-cli and claude-cmux models are\n // listed as claude-agent rows. Copying the row's runtime verbatim would let\n // picking a model silently move the user off the mode they chose, so a row\n // drawn from the selected mode's own catalog keeps that mode.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(\n withoutCatalogModel(value),\n model,\n reasoningEfforts,\n { backend: mode.backend, mode: mode.id },\n );\n onChange(next);\n };\n const clearModel = () => {\n onChange(preserveSelectedMode(withoutCatalogModel(value)));\n };\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n if (variant === \"combo\") {\n return (\n <RuntimeBarCombo\n value={value}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n models={modelOptions}\n selectedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n supportedEfforts={supportedEfforts}\n locked={locked}\n ariaLabel={ariaLabel}\n className={className}\n onFamilyChange={(familyId) => applyBackend(familyId, selection.mode)}\n onModeChange={(modeId) => applyBackend(family.id, modeId)}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onEffortChange={applyEffort}\n />\n );\n }\n\n return (\n <RuntimeBarSegments\n value={value}\n models={models}\n modelOptions={modelOptions}\n resolvedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n reasoningEfforts={reasoningEfforts}\n supportedEfforts={supportedEfforts}\n locked={locked}\n ariaLabel={ariaLabel}\n className={className}\n onBackendChange={applyBackend}\n onCustomModel={applyCustomModel}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onEffortChange={applyEffort}\n />\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n patch: Partial<RuntimeBarValue>,\n): T {\n return { ...value, ...patch };\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":["SPEC_RUNTIME_FAMILIES","DEFAULT_REASONING_EFFORTS","selectionForBackend","familyById","firstMode","modelsForFamily","runtimeModelForValue","isSelectableModel","effortOptionsForModel","applyRuntimeBackend","reconcileModelCapabilities","jsx","RuntimeBarCombo","RuntimeBarSegments"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AASjE,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAAI;IACzE,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAChC;gFAC4E;IAC5E,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC3C,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,uFAAuF;IACvF,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,CAAC,SAAS,eAAe,EAAE,EACpD,KAAK,EACL,QAAQ,EACR,OAAqB,EACrB,MAAW,EACX,QAAgC,EAChC,gBAA4C,EAC5C,MAAc,EACd,SAAqB,EACrB,SAAS,GACV,EAAE,eAAe,CAAC,CAAC,CAAC,2CA4HpB"}
1
+ {"version":3,"file":"RuntimeBar.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AASjE,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAAI;IACzE,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAChC;gFAC4E;IAC5E,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC3C,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,uFAAuF;IACvF,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,CAAC,SAAS,eAAe,EAAE,EACpD,KAAK,EACL,QAAQ,EACR,OAAqB,EACrB,MAAW,EACX,QAAgC,EAChC,gBAA4C,EAC5C,MAAc,EACd,SAAqB,EACrB,SAAS,GACV,EAAE,eAAe,CAAC,CAAC,CAAC,2CA2GpB"}
@@ -1,11 +1,11 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { DEFAULT_REASONING_EFFORTS } from "../chat/effort-icons.js";
3
- import { runtimeModelMatches } from "./RuntimeBar.model.js";
3
+ import { runtimeModelForValue, applyRuntimeBackend } from "./RuntimeBar.model.js";
4
4
  import { RuntimeBarCombo } from "./RuntimeBarCombo.js";
5
5
  import { RuntimeBarSegments } from "./RuntimeBarSegments.js";
6
6
  import { isSelectableModel } from "./availability.js";
7
7
  import { effortOptionsForModel, reconcileModelCapabilities } from "./model-capabilities.js";
8
- import { selectionForBackend, SPEC_RUNTIME_FAMILIES, familyById, firstMode, modelsForFamily, backendForFamilyMode, modelBelongsToFamily } from "./runtime-mode.js";
8
+ import { selectionForBackend, SPEC_RUNTIME_FAMILIES, familyById, firstMode, modelsForFamily } from "./runtime-mode.js";
9
9
  function RuntimeBar({
10
10
  value,
11
11
  onChange,
@@ -21,60 +21,45 @@ function RuntimeBar({
21
21
  const family = familyById(families, selection.family);
22
22
  const mode = family.modes.find((entry) => entry.id === selection.mode) ?? firstMode(family);
23
23
  const modelOptions = modelsForFamily(models, family, value.backend);
24
- const selectedModel = models.find(
25
- (entry) => {
26
- var _a;
27
- return isSelectableModel(entry) && ((_a = entry.runtime) == null ? void 0 : _a.backend) === value.backend && runtimeModelMatches(entry, value);
28
- }
29
- );
30
- const resolvedModel = selectedModel ?? models.find(
31
- (entry) => isSelectableModel(entry) && runtimeModelMatches(entry, value)
32
- );
24
+ const resolvedModel = runtimeModelForValue(models, value, isSelectableModel);
33
25
  const selectedModelUnavailable = Boolean(
34
- value.model && models.some(
35
- (entry) => !isSelectableModel(entry) && runtimeModelMatches(entry, value)
36
- )
26
+ (value.id || value.model) && runtimeModelForValue(models, value, (entry) => !isSelectableModel(entry))
37
27
  );
38
28
  const supportedEfforts = effortOptionsForModel(
39
29
  resolvedModel,
40
30
  reasoningEfforts
41
31
  );
42
32
  const applyBackend = (familyId, modeId) => {
43
- const backend = backendForFamilyMode(families, familyId, modeId);
44
- if (backend === (value.backend ?? "")) return;
45
- let next = withOptionalRuntimeValue(
46
- withRuntimeValue(value, { backend }),
47
- "cliArgs",
48
- void 0
49
- );
50
- if (!modelBelongsToFamily(
51
- value.model,
33
+ const next = applyRuntimeBackend(
34
+ value,
52
35
  models,
53
- familyById(families, familyId),
54
- backend
55
- )) {
56
- next = withoutCatalogModel(next);
57
- }
58
- onChange(next);
36
+ families,
37
+ familyId,
38
+ modeId,
39
+ reasoningEfforts
40
+ );
41
+ if (next !== value) onChange(next);
59
42
  };
60
- const applyCustomModel = (model) => onChange(
61
- withOptionalRuntimeValue(withoutCatalogModel(value), "model", model)
62
- );
63
- const applyModel = (model) => {
64
- const next = reconcileModelCapabilities(value, model, reasoningEfforts);
65
- if (!mode.provider || model.provider !== mode.provider) {
66
- onChange(next);
67
- return;
68
- }
43
+ const preserveSelectedMode = (next) => value.backend === mode.backend ? withRuntimeValue(next, { mode: mode.id }) : next;
44
+ const applyCustomModel = (model) => {
69
45
  onChange(
70
- withOptionalRuntimeValue(
71
- withOptionalRuntimeValue(next, "backend", mode.backend),
72
- "mode",
73
- mode.id
46
+ preserveSelectedMode(
47
+ withOptionalRuntimeValue(withoutCatalogModel(value), "model", model)
74
48
  )
75
49
  );
76
50
  };
77
- const clearModel = () => onChange(withoutCatalogModel(value));
51
+ const applyModel = (model) => {
52
+ const next = reconcileModelCapabilities(
53
+ withoutCatalogModel(value),
54
+ model,
55
+ reasoningEfforts,
56
+ { backend: mode.backend, mode: mode.id }
57
+ );
58
+ onChange(next);
59
+ };
60
+ const clearModel = () => {
61
+ onChange(preserveSelectedMode(withoutCatalogModel(value)));
62
+ };
78
63
  const applyEffort = (effort) => onChange(withOptionalRuntimeValue(value, "effort", effort));
79
64
  if (variant === "combo") {
80
65
  return /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.js","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { runtimeModelMatches } from \"./RuntimeBar.model\";\nimport { RuntimeBarCombo } from \"./RuntimeBarCombo\";\nimport { RuntimeBarSegments } from \"./RuntimeBarSegments\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n backendForFamilyMode,\n familyById,\n firstMode,\n modelBelongsToFamily,\n modelsForFamily,\n selectionForBackend,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** `segmented` uses field triggers; `combo` uses one direct-edit menu. */\n variant?: \"combo\" | \"segmented\";\n /** Model catalog. Only the selected family's models are listed; a family the\n * catalog does not describe is served by the segment's free-text entry. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, backend, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Self-describing runtime controls with segmented and combo presentations. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n variant = \"segmented\",\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const selection = selectionForBackend(families, value.backend);\n const family = familyById(families, selection.family);\n const mode =\n family.modes.find((entry) => entry.id === selection.mode) ??\n firstMode(family);\n const modelOptions = modelsForFamily(models, family, value.backend);\n const selectedModel = models.find(\n (entry) =>\n isSelectableModel(entry) &&\n entry.runtime?.backend === value.backend &&\n runtimeModelMatches(entry, value),\n );\n const resolvedModel =\n selectedModel ??\n models.find(\n (entry) => isSelectableModel(entry) && runtimeModelMatches(entry, value),\n );\n const selectedModelUnavailable = Boolean(\n value.model &&\n models.some(\n (entry) => !isSelectableModel(entry) && runtimeModelMatches(entry, value),\n ),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n\n const applyBackend = (familyId: string, modeId: string) => {\n const backend = backendForFamilyMode(families, familyId, modeId);\n if (backend === (value.backend ?? \"\")) return;\n let next = withOptionalRuntimeValue(\n withRuntimeValue(value, { backend }),\n \"cliArgs\",\n undefined,\n );\n if (\n !modelBelongsToFamily(\n value.model,\n models,\n familyById(families, familyId),\n backend,\n )\n ) {\n next = withoutCatalogModel(next);\n }\n onChange(next);\n };\n\n const applyCustomModel = (model: string) =>\n onChange(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n );\n // A menu row carries the backend of the catalog it was listed under, and one\n // catalog serves several backends — claude-cli and claude-cmux models are\n // listed as claude-agent rows. Copying the row's runtime verbatim would let\n // picking a model silently move the user off the mode they chose, so a row\n // drawn from the selected mode's own catalog keeps that mode.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(value, model, reasoningEfforts);\n if (!mode.provider || model.provider !== mode.provider) {\n onChange(next);\n return;\n }\n onChange(\n withOptionalRuntimeValue(\n withOptionalRuntimeValue(next, \"backend\", mode.backend),\n \"mode\",\n mode.id,\n ),\n );\n };\n const clearModel = () => onChange(withoutCatalogModel(value));\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n if (variant === \"combo\") {\n return (\n <RuntimeBarCombo\n value={value}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n models={modelOptions}\n selectedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n supportedEfforts={supportedEfforts}\n locked={locked}\n ariaLabel={ariaLabel}\n className={className}\n onFamilyChange={(familyId) => applyBackend(familyId, selection.mode)}\n onModeChange={(modeId) => applyBackend(family.id, modeId)}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onEffortChange={applyEffort}\n />\n );\n }\n\n return (\n <RuntimeBarSegments\n value={value}\n models={models}\n modelOptions={modelOptions}\n resolvedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n reasoningEfforts={reasoningEfforts}\n supportedEfforts={supportedEfforts}\n locked={locked}\n ariaLabel={ariaLabel}\n className={className}\n onBackendChange={applyBackend}\n onCustomModel={applyCustomModel}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onEffortChange={applyEffort}\n />\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n patch: Partial<RuntimeBarValue>,\n): T {\n return { ...value, ...patch };\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeBar.js","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { applyRuntimeBackend, runtimeModelForValue } from \"./RuntimeBar.model\";\nimport { RuntimeBarCombo } from \"./RuntimeBarCombo\";\nimport { RuntimeBarSegments } from \"./RuntimeBarSegments\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n familyById,\n firstMode,\n modelsForFamily,\n selectionForBackend,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** `segmented` uses field triggers; `combo` uses one direct-edit menu. */\n variant?: \"combo\" | \"segmented\";\n /** Model catalog. Only the selected family's models are listed; a family the\n * catalog does not describe is served by the segment's free-text entry. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, backend, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Self-describing runtime controls with segmented and combo presentations. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n variant = \"segmented\",\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const selection = selectionForBackend(families, value.backend);\n const family = familyById(families, selection.family);\n const mode =\n family.modes.find((entry) => entry.id === selection.mode) ??\n firstMode(family);\n const modelOptions = modelsForFamily(models, family, value.backend);\n const resolvedModel = runtimeModelForValue(models, value, isSelectableModel);\n const selectedModelUnavailable = Boolean(\n (value.id || value.model) &&\n runtimeModelForValue(models, value, (entry) => !isSelectableModel(entry)),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n\n const applyBackend = (familyId: string, modeId: string) => {\n const next = applyRuntimeBackend(\n value,\n models,\n families,\n familyId,\n modeId,\n reasoningEfforts,\n );\n if (next !== value) onChange(next);\n };\n\n const preserveSelectedMode = (next: T) =>\n value.backend === mode.backend\n ? withRuntimeValue(next, { mode: mode.id })\n : next;\n const applyCustomModel = (model: string) => {\n onChange(\n preserveSelectedMode(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n ),\n );\n };\n // A menu row carries the backend of the catalog it was listed under, and one\n // catalog serves several backends — claude-cli and claude-cmux models are\n // listed as claude-agent rows. Copying the row's runtime verbatim would let\n // picking a model silently move the user off the mode they chose, so a row\n // drawn from the selected mode's own catalog keeps that mode.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(\n withoutCatalogModel(value),\n model,\n reasoningEfforts,\n { backend: mode.backend, mode: mode.id },\n );\n onChange(next);\n };\n const clearModel = () => {\n onChange(preserveSelectedMode(withoutCatalogModel(value)));\n };\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n if (variant === \"combo\") {\n return (\n <RuntimeBarCombo\n value={value}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n models={modelOptions}\n selectedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n supportedEfforts={supportedEfforts}\n locked={locked}\n ariaLabel={ariaLabel}\n className={className}\n onFamilyChange={(familyId) => applyBackend(familyId, selection.mode)}\n onModeChange={(modeId) => applyBackend(family.id, modeId)}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onEffortChange={applyEffort}\n />\n );\n }\n\n return (\n <RuntimeBarSegments\n value={value}\n models={models}\n modelOptions={modelOptions}\n resolvedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n reasoningEfforts={reasoningEfforts}\n supportedEfforts={supportedEfforts}\n locked={locked}\n ariaLabel={ariaLabel}\n className={className}\n onBackendChange={applyBackend}\n onCustomModel={applyCustomModel}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onEffortChange={applyEffort}\n />\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n patch: Partial<RuntimeBarValue>,\n): T {\n return { ...value, ...patch };\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":[],"mappings":"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"}
@@ -1,14 +1,79 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const providerIcons = require("../chat/provider-icons.cjs");
4
+ const modelCapabilities = require("./model-capabilities.cjs");
5
+ const runtimeMode = require("./runtime-mode.cjs");
4
6
  function runtimeFamilyBrand(family) {
5
7
  const key = providerIcons.providerIcon(family.id) ? family.id : family.provider;
6
8
  return { icon: providerIcons.providerIcon(key), color: providerIcons.providerIconColor(key) };
7
9
  }
8
10
  function runtimeModelMatches(model, value) {
11
+ var _a, _b;
12
+ if (!runtimeModelIdentityMatches(model, value)) return false;
13
+ if (!runtimeMode.modelMatchesBackend(model, value.backend)) return false;
14
+ if (value.backend !== void 0 && ((_a = model.runtime) == null ? void 0 : _a.backend) !== void 0 && model.runtime.backend !== value.backend) {
15
+ return false;
16
+ }
17
+ if (value.mode !== void 0 && ((_b = model.runtime) == null ? void 0 : _b.mode) !== void 0 && model.runtime.mode !== value.mode) {
18
+ return false;
19
+ }
20
+ return true;
21
+ }
22
+ function runtimeModelForValue(models, value, isEligible = () => true) {
23
+ var _a;
24
+ const exact = models.find(
25
+ (model) => isEligible(model) && runtimeModelMatches(model, value)
26
+ );
27
+ if (exact) return exact;
28
+ const identityMatches = models.filter(
29
+ (model) => isEligible(model) && runtimeModelIdentityMatches(model, value) && runtimeMode.modelMatchesBackend(model, value.backend)
30
+ );
31
+ const canonicalMatches = identityMatches.filter(
32
+ (model) => model.id === value.id || model.id === value.model
33
+ );
34
+ const provider = canonicalMatches.length === 1 ? (_a = canonicalMatches[0]) == null ? void 0 : _a.provider : void 0;
35
+ const scopedMatches = provider ? identityMatches.filter((model) => model.provider === provider) : identityMatches;
36
+ return scopedMatches.length === 1 ? scopedMatches[0] : void 0;
37
+ }
38
+ function runtimeModelIdentityMatches(model, value) {
9
39
  var _a, _b;
10
40
  return value.id !== void 0 && (model.id === value.id || ((_a = model.runtime) == null ? void 0 : _a.id) === value.id) || value.model !== void 0 && (model.id === value.model || ((_b = model.runtime) == null ? void 0 : _b.model) === value.model);
11
41
  }
42
+ function applyRuntimeBackend(value, models, families, familyId, modeId, reasoningEfforts) {
43
+ var _a;
44
+ const backend = runtimeMode.backendForFamilyMode(families, familyId, modeId);
45
+ const mode = runtimeMode.selectionForBackend(families, backend).mode;
46
+ if (backend === (value.backend ?? "") && (value.mode === void 0 || mode === value.mode)) {
47
+ return value;
48
+ }
49
+ const currentModel = runtimeModelForValue(models, value);
50
+ const modelId = ((_a = currentModel == null ? void 0 : currentModel.runtime) == null ? void 0 : _a.model) ?? value.model ?? (currentModel == null ? void 0 : currentModel.id) ?? value.id;
51
+ const nextModel = runtimeMode.modelForFamily(
52
+ modelId,
53
+ models,
54
+ runtimeMode.familyById(families, familyId),
55
+ backend
56
+ );
57
+ let next = withoutCatalogModel(value);
58
+ if (nextModel) {
59
+ next = modelCapabilities.reconcileModelCapabilities(next, nextModel, reasoningEfforts, {
60
+ backend,
61
+ mode
62
+ });
63
+ } else {
64
+ next = { ...next, backend, mode };
65
+ }
66
+ delete next.cliArgs;
67
+ return next;
68
+ }
69
+ function withoutCatalogModel(value) {
70
+ const next = { ...value };
71
+ delete next.model;
72
+ delete next.id;
73
+ return next;
74
+ }
75
+ exports.applyRuntimeBackend = applyRuntimeBackend;
12
76
  exports.runtimeFamilyBrand = runtimeFamilyBrand;
77
+ exports.runtimeModelForValue = runtimeModelForValue;
13
78
  exports.runtimeModelMatches = runtimeModelMatches;
14
79
  //# sourceMappingURL=RuntimeBar.model.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.model.cjs","sources":["../../../src/data/runtime/RuntimeBar.model.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { providerIcon, providerIconColor } from \"../chat/provider-icons\";\nimport type { ChatModel } from \"../chat/types\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport type { SpecRuntimeFamily } from \"./runtime-mode\";\n\nexport function runtimeFamilyBrand(family: SpecRuntimeFamily): {\n icon: StaticIconComponent | undefined;\n color: string | undefined;\n} {\n const key = providerIcon(family.id) ? family.id : family.provider;\n return { icon: providerIcon(key), color: providerIconColor(key) };\n}\n\nexport function runtimeModelMatches(\n model: ChatModel,\n value: RuntimeBarValue,\n): boolean {\n return (\n (value.id !== undefined &&\n (model.id === value.id || model.runtime?.id === value.id)) ||\n (value.model !== undefined &&\n (model.id === value.model || model.runtime?.model === value.model))\n );\n}\n"],"names":["providerIcon","providerIconColor"],"mappings":";;;AAMO,SAAS,mBAAmB,QAGjC;AACA,QAAM,MAAMA,cAAAA,aAAa,OAAO,EAAE,IAAI,OAAO,KAAK,OAAO;AACzD,SAAO,EAAE,MAAMA,2BAAa,GAAG,GAAG,OAAOC,cAAAA,kBAAkB,GAAG,EAAA;AAChE;AAEO,SAAS,oBACd,OACA,OACS;;AACT,SACG,MAAM,OAAO,WACX,MAAM,OAAO,MAAM,QAAM,WAAM,YAAN,mBAAe,QAAO,MAAM,OACvD,MAAM,UAAU,WACd,MAAM,OAAO,MAAM,WAAS,WAAM,YAAN,mBAAe,WAAU,MAAM;AAElE;;;"}
1
+ {"version":3,"file":"RuntimeBar.model.cjs","sources":["../../../src/data/runtime/RuntimeBar.model.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { providerIcon, providerIconColor } from \"../chat/provider-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { reconcileModelCapabilities } from \"./model-capabilities\";\nimport {\n backendForFamilyMode,\n familyById,\n modelForFamily,\n modelMatchesBackend,\n selectionForBackend,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\ntype RuntimeBackendValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown> | undefined;\n};\n\nexport function runtimeFamilyBrand(family: SpecRuntimeFamily): {\n icon: StaticIconComponent | undefined;\n color: string | undefined;\n} {\n const key = providerIcon(family.id) ? family.id : family.provider;\n return { icon: providerIcon(key), color: providerIconColor(key) };\n}\n\n/** Matches a catalog row against both runtime identity and execution selectors. */\nexport function runtimeModelMatches(\n model: ChatModel,\n value: ChatModelRuntime,\n): boolean {\n if (!runtimeModelIdentityMatches(model, value)) return false;\n if (!modelMatchesBackend(model, value.backend)) return false;\n if (\n value.backend !== undefined &&\n model.runtime?.backend !== undefined &&\n model.runtime.backend !== value.backend\n ) {\n return false;\n }\n if (\n value.mode !== undefined &&\n model.runtime?.mode !== undefined &&\n model.runtime.mode !== value.mode\n ) {\n return false;\n }\n return true;\n}\n\n/** Finds one exact runtime row, scoping shared aliases by their canonical provider. */\nexport function runtimeModelForValue(\n models: ChatModel[],\n value: ChatModelRuntime,\n isEligible: (model: ChatModel) => boolean = () => true,\n): ChatModel | undefined {\n const exact = models.find(\n (model) => isEligible(model) && runtimeModelMatches(model, value),\n );\n if (exact) return exact;\n const identityMatches = models.filter(\n (model) =>\n isEligible(model) &&\n runtimeModelIdentityMatches(model, value) &&\n modelMatchesBackend(model, value.backend),\n );\n const canonicalMatches = identityMatches.filter(\n (model) => model.id === value.id || model.id === value.model,\n );\n const provider =\n canonicalMatches.length === 1 ? canonicalMatches[0]?.provider : undefined;\n const scopedMatches = provider\n ? identityMatches.filter((model) => model.provider === provider)\n : identityMatches;\n return scopedMatches.length === 1 ? scopedMatches[0] : undefined;\n}\n\nfunction runtimeModelIdentityMatches(\n model: ChatModel,\n value: ChatModelRuntime,\n): boolean {\n return (\n (value.id !== undefined &&\n (model.id === value.id || model.runtime?.id === value.id)) ||\n (value.model !== undefined &&\n (model.id === value.model || model.runtime?.model === value.model))\n );\n}\n\n/** Applies a family/mode transition without replacing user-owned runtime options. */\nexport function applyRuntimeBackend<T extends RuntimeBackendValue>(\n value: T,\n models: ChatModel[],\n families: SpecRuntimeFamily[],\n familyId: string,\n modeId: string,\n reasoningEfforts: readonly string[],\n): T {\n const backend = backendForFamilyMode(families, familyId, modeId);\n const mode = selectionForBackend(families, backend).mode;\n if (\n backend === (value.backend ?? \"\") &&\n (value.mode === undefined || mode === value.mode)\n ) {\n return value;\n }\n\n const currentModel = runtimeModelForValue(models, value);\n const modelId =\n currentModel?.runtime?.model ?? value.model ?? currentModel?.id ?? value.id;\n const nextModel = modelForFamily(\n modelId,\n models,\n familyById(families, familyId),\n backend,\n );\n let next = withoutCatalogModel(value);\n if (nextModel) {\n next = reconcileModelCapabilities(next, nextModel, reasoningEfforts, {\n backend,\n mode,\n });\n } else {\n next = { ...next, backend, mode };\n }\n delete next.cliArgs;\n return next;\n}\n\nfunction withoutCatalogModel<T extends RuntimeBackendValue>(value: T): T {\n const next = { ...value };\n delete next.model;\n delete next.id;\n return next;\n}\n"],"names":["providerIcon","providerIconColor","modelMatchesBackend","backendForFamilyMode","selectionForBackend","modelForFamily","familyById","reconcileModelCapabilities"],"mappings":";;;;;AAiBO,SAAS,mBAAmB,QAGjC;AACA,QAAM,MAAMA,cAAAA,aAAa,OAAO,EAAE,IAAI,OAAO,KAAK,OAAO;AACzD,SAAO,EAAE,MAAMA,2BAAa,GAAG,GAAG,OAAOC,cAAAA,kBAAkB,GAAG,EAAA;AAChE;AAGO,SAAS,oBACd,OACA,OACS;;AACT,MAAI,CAAC,4BAA4B,OAAO,KAAK,EAAG,QAAO;AACvD,MAAI,CAACC,YAAAA,oBAAoB,OAAO,MAAM,OAAO,EAAG,QAAO;AACvD,MACE,MAAM,YAAY,YAClB,WAAM,YAAN,mBAAe,aAAY,UAC3B,MAAM,QAAQ,YAAY,MAAM,SAChC;AACA,WAAO;AAAA,EACT;AACA,MACE,MAAM,SAAS,YACf,WAAM,YAAN,mBAAe,UAAS,UACxB,MAAM,QAAQ,SAAS,MAAM,MAC7B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGO,SAAS,qBACd,QACA,OACA,aAA4C,MAAM,MAC3B;;AACvB,QAAM,QAAQ,OAAO;AAAA,IACnB,CAAC,UAAU,WAAW,KAAK,KAAK,oBAAoB,OAAO,KAAK;AAAA,EAAA;AAElE,MAAI,MAAO,QAAO;AAClB,QAAM,kBAAkB,OAAO;AAAA,IAC7B,CAAC,UACC,WAAW,KAAK,KAChB,4BAA4B,OAAO,KAAK,KACxCA,YAAAA,oBAAoB,OAAO,MAAM,OAAO;AAAA,EAAA;AAE5C,QAAM,mBAAmB,gBAAgB;AAAA,IACvC,CAAC,UAAU,MAAM,OAAO,MAAM,MAAM,MAAM,OAAO,MAAM;AAAA,EAAA;AAEzD,QAAM,WACJ,iBAAiB,WAAW,KAAI,sBAAiB,CAAC,MAAlB,mBAAqB,WAAW;AAClE,QAAM,gBAAgB,WAClB,gBAAgB,OAAO,CAAC,UAAU,MAAM,aAAa,QAAQ,IAC7D;AACJ,SAAO,cAAc,WAAW,IAAI,cAAc,CAAC,IAAI;AACzD;AAEA,SAAS,4BACP,OACA,OACS;;AACT,SACG,MAAM,OAAO,WACX,MAAM,OAAO,MAAM,QAAM,WAAM,YAAN,mBAAe,QAAO,MAAM,OACvD,MAAM,UAAU,WACd,MAAM,OAAO,MAAM,WAAS,WAAM,YAAN,mBAAe,WAAU,MAAM;AAElE;AAGO,SAAS,oBACd,OACA,QACA,UACA,UACA,QACA,kBACG;;AACH,QAAM,UAAUC,YAAAA,qBAAqB,UAAU,UAAU,MAAM;AAC/D,QAAM,OAAOC,YAAAA,oBAAoB,UAAU,OAAO,EAAE;AACpD,MACE,aAAa,MAAM,WAAW,QAC7B,MAAM,SAAS,UAAa,SAAS,MAAM,OAC5C;AACA,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,qBAAqB,QAAQ,KAAK;AACvD,QAAM,YACJ,kDAAc,YAAd,mBAAuB,UAAS,MAAM,UAAS,6CAAc,OAAM,MAAM;AAC3E,QAAM,YAAYC,YAAAA;AAAAA,IAChB;AAAA,IACA;AAAA,IACAC,YAAAA,WAAW,UAAU,QAAQ;AAAA,IAC7B;AAAA,EAAA;AAEF,MAAI,OAAO,oBAAoB,KAAK;AACpC,MAAI,WAAW;AACb,WAAOC,kBAAAA,2BAA2B,MAAM,WAAW,kBAAkB;AAAA,MACnE;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH,OAAO;AACL,WAAO,EAAE,GAAG,MAAM,SAAS,KAAA;AAAA,EAC7B;AACA,SAAO,KAAK;AACZ,SAAO;AACT;AAEA,SAAS,oBAAmD,OAAa;AACvE,QAAM,OAAO,EAAE,GAAG,MAAA;AAClB,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO;AACT;;;;;"}
@@ -1,10 +1,18 @@
1
1
  import { StaticIconComponent } from '../Icon';
2
- import { ChatModel } from '../chat/types';
3
- import { RuntimeBarValue } from './RuntimeBar';
2
+ import { ChatModel, ChatModelRuntime } from '../chat/types';
4
3
  import { SpecRuntimeFamily } from './runtime-mode';
4
+ type RuntimeBackendValue = ChatModelRuntime & {
5
+ cliArgs?: Record<string, unknown> | undefined;
6
+ };
5
7
  export declare function runtimeFamilyBrand(family: SpecRuntimeFamily): {
6
8
  icon: StaticIconComponent | undefined;
7
9
  color: string | undefined;
8
10
  };
9
- export declare function runtimeModelMatches(model: ChatModel, value: RuntimeBarValue): boolean;
11
+ /** Matches a catalog row against both runtime identity and execution selectors. */
12
+ export declare function runtimeModelMatches(model: ChatModel, value: ChatModelRuntime): boolean;
13
+ /** Finds one exact runtime row, scoping shared aliases by their canonical provider. */
14
+ export declare function runtimeModelForValue(models: ChatModel[], value: ChatModelRuntime, isEligible?: (model: ChatModel) => boolean): ChatModel | undefined;
15
+ /** Applies a family/mode transition without replacing user-owned runtime options. */
16
+ export declare function applyRuntimeBackend<T extends RuntimeBackendValue>(value: T, models: ChatModel[], families: SpecRuntimeFamily[], familyId: string, modeId: string, reasoningEfforts: readonly string[]): T;
17
+ export {};
10
18
  //# sourceMappingURL=RuntimeBar.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.model.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG;IAC7D,IAAI,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACtC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAGA;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,eAAe,GACrB,OAAO,CAOT"}
1
+ {"version":3,"file":"RuntimeBar.model.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,KAAK,mBAAmB,GAAG,gBAAgB,GAAG;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAC/C,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG;IAC7D,IAAI,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACtC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAGA;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAkBT;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EAAE,EACnB,KAAK,EAAE,gBAAgB,EACvB,UAAU,GAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAoB,GACrD,SAAS,GAAG,SAAS,CAoBvB;AAcD,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,mBAAmB,EAC/D,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,SAAS,EAAE,EACnB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAClC,CAAC,CA8BH"}
@@ -1,14 +1,79 @@
1
1
  import { providerIcon, providerIconColor } from "../chat/provider-icons.js";
2
+ import { reconcileModelCapabilities } from "./model-capabilities.js";
3
+ import { modelMatchesBackend, backendForFamilyMode, selectionForBackend, modelForFamily, familyById } from "./runtime-mode.js";
2
4
  function runtimeFamilyBrand(family) {
3
5
  const key = providerIcon(family.id) ? family.id : family.provider;
4
6
  return { icon: providerIcon(key), color: providerIconColor(key) };
5
7
  }
6
8
  function runtimeModelMatches(model, value) {
9
+ var _a, _b;
10
+ if (!runtimeModelIdentityMatches(model, value)) return false;
11
+ if (!modelMatchesBackend(model, value.backend)) return false;
12
+ if (value.backend !== void 0 && ((_a = model.runtime) == null ? void 0 : _a.backend) !== void 0 && model.runtime.backend !== value.backend) {
13
+ return false;
14
+ }
15
+ if (value.mode !== void 0 && ((_b = model.runtime) == null ? void 0 : _b.mode) !== void 0 && model.runtime.mode !== value.mode) {
16
+ return false;
17
+ }
18
+ return true;
19
+ }
20
+ function runtimeModelForValue(models, value, isEligible = () => true) {
21
+ var _a;
22
+ const exact = models.find(
23
+ (model) => isEligible(model) && runtimeModelMatches(model, value)
24
+ );
25
+ if (exact) return exact;
26
+ const identityMatches = models.filter(
27
+ (model) => isEligible(model) && runtimeModelIdentityMatches(model, value) && modelMatchesBackend(model, value.backend)
28
+ );
29
+ const canonicalMatches = identityMatches.filter(
30
+ (model) => model.id === value.id || model.id === value.model
31
+ );
32
+ const provider = canonicalMatches.length === 1 ? (_a = canonicalMatches[0]) == null ? void 0 : _a.provider : void 0;
33
+ const scopedMatches = provider ? identityMatches.filter((model) => model.provider === provider) : identityMatches;
34
+ return scopedMatches.length === 1 ? scopedMatches[0] : void 0;
35
+ }
36
+ function runtimeModelIdentityMatches(model, value) {
7
37
  var _a, _b;
8
38
  return value.id !== void 0 && (model.id === value.id || ((_a = model.runtime) == null ? void 0 : _a.id) === value.id) || value.model !== void 0 && (model.id === value.model || ((_b = model.runtime) == null ? void 0 : _b.model) === value.model);
9
39
  }
40
+ function applyRuntimeBackend(value, models, families, familyId, modeId, reasoningEfforts) {
41
+ var _a;
42
+ const backend = backendForFamilyMode(families, familyId, modeId);
43
+ const mode = selectionForBackend(families, backend).mode;
44
+ if (backend === (value.backend ?? "") && (value.mode === void 0 || mode === value.mode)) {
45
+ return value;
46
+ }
47
+ const currentModel = runtimeModelForValue(models, value);
48
+ const modelId = ((_a = currentModel == null ? void 0 : currentModel.runtime) == null ? void 0 : _a.model) ?? value.model ?? (currentModel == null ? void 0 : currentModel.id) ?? value.id;
49
+ const nextModel = modelForFamily(
50
+ modelId,
51
+ models,
52
+ familyById(families, familyId),
53
+ backend
54
+ );
55
+ let next = withoutCatalogModel(value);
56
+ if (nextModel) {
57
+ next = reconcileModelCapabilities(next, nextModel, reasoningEfforts, {
58
+ backend,
59
+ mode
60
+ });
61
+ } else {
62
+ next = { ...next, backend, mode };
63
+ }
64
+ delete next.cliArgs;
65
+ return next;
66
+ }
67
+ function withoutCatalogModel(value) {
68
+ const next = { ...value };
69
+ delete next.model;
70
+ delete next.id;
71
+ return next;
72
+ }
10
73
  export {
74
+ applyRuntimeBackend,
11
75
  runtimeFamilyBrand,
76
+ runtimeModelForValue,
12
77
  runtimeModelMatches
13
78
  };
14
79
  //# sourceMappingURL=RuntimeBar.model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.model.js","sources":["../../../src/data/runtime/RuntimeBar.model.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { providerIcon, providerIconColor } from \"../chat/provider-icons\";\nimport type { ChatModel } from \"../chat/types\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport type { SpecRuntimeFamily } from \"./runtime-mode\";\n\nexport function runtimeFamilyBrand(family: SpecRuntimeFamily): {\n icon: StaticIconComponent | undefined;\n color: string | undefined;\n} {\n const key = providerIcon(family.id) ? family.id : family.provider;\n return { icon: providerIcon(key), color: providerIconColor(key) };\n}\n\nexport function runtimeModelMatches(\n model: ChatModel,\n value: RuntimeBarValue,\n): boolean {\n return (\n (value.id !== undefined &&\n (model.id === value.id || model.runtime?.id === value.id)) ||\n (value.model !== undefined &&\n (model.id === value.model || model.runtime?.model === value.model))\n );\n}\n"],"names":[],"mappings":";AAMO,SAAS,mBAAmB,QAGjC;AACA,QAAM,MAAM,aAAa,OAAO,EAAE,IAAI,OAAO,KAAK,OAAO;AACzD,SAAO,EAAE,MAAM,aAAa,GAAG,GAAG,OAAO,kBAAkB,GAAG,EAAA;AAChE;AAEO,SAAS,oBACd,OACA,OACS;;AACT,SACG,MAAM,OAAO,WACX,MAAM,OAAO,MAAM,QAAM,WAAM,YAAN,mBAAe,QAAO,MAAM,OACvD,MAAM,UAAU,WACd,MAAM,OAAO,MAAM,WAAS,WAAM,YAAN,mBAAe,WAAU,MAAM;AAElE;"}
1
+ {"version":3,"file":"RuntimeBar.model.js","sources":["../../../src/data/runtime/RuntimeBar.model.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { providerIcon, providerIconColor } from \"../chat/provider-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { reconcileModelCapabilities } from \"./model-capabilities\";\nimport {\n backendForFamilyMode,\n familyById,\n modelForFamily,\n modelMatchesBackend,\n selectionForBackend,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\ntype RuntimeBackendValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown> | undefined;\n};\n\nexport function runtimeFamilyBrand(family: SpecRuntimeFamily): {\n icon: StaticIconComponent | undefined;\n color: string | undefined;\n} {\n const key = providerIcon(family.id) ? family.id : family.provider;\n return { icon: providerIcon(key), color: providerIconColor(key) };\n}\n\n/** Matches a catalog row against both runtime identity and execution selectors. */\nexport function runtimeModelMatches(\n model: ChatModel,\n value: ChatModelRuntime,\n): boolean {\n if (!runtimeModelIdentityMatches(model, value)) return false;\n if (!modelMatchesBackend(model, value.backend)) return false;\n if (\n value.backend !== undefined &&\n model.runtime?.backend !== undefined &&\n model.runtime.backend !== value.backend\n ) {\n return false;\n }\n if (\n value.mode !== undefined &&\n model.runtime?.mode !== undefined &&\n model.runtime.mode !== value.mode\n ) {\n return false;\n }\n return true;\n}\n\n/** Finds one exact runtime row, scoping shared aliases by their canonical provider. */\nexport function runtimeModelForValue(\n models: ChatModel[],\n value: ChatModelRuntime,\n isEligible: (model: ChatModel) => boolean = () => true,\n): ChatModel | undefined {\n const exact = models.find(\n (model) => isEligible(model) && runtimeModelMatches(model, value),\n );\n if (exact) return exact;\n const identityMatches = models.filter(\n (model) =>\n isEligible(model) &&\n runtimeModelIdentityMatches(model, value) &&\n modelMatchesBackend(model, value.backend),\n );\n const canonicalMatches = identityMatches.filter(\n (model) => model.id === value.id || model.id === value.model,\n );\n const provider =\n canonicalMatches.length === 1 ? canonicalMatches[0]?.provider : undefined;\n const scopedMatches = provider\n ? identityMatches.filter((model) => model.provider === provider)\n : identityMatches;\n return scopedMatches.length === 1 ? scopedMatches[0] : undefined;\n}\n\nfunction runtimeModelIdentityMatches(\n model: ChatModel,\n value: ChatModelRuntime,\n): boolean {\n return (\n (value.id !== undefined &&\n (model.id === value.id || model.runtime?.id === value.id)) ||\n (value.model !== undefined &&\n (model.id === value.model || model.runtime?.model === value.model))\n );\n}\n\n/** Applies a family/mode transition without replacing user-owned runtime options. */\nexport function applyRuntimeBackend<T extends RuntimeBackendValue>(\n value: T,\n models: ChatModel[],\n families: SpecRuntimeFamily[],\n familyId: string,\n modeId: string,\n reasoningEfforts: readonly string[],\n): T {\n const backend = backendForFamilyMode(families, familyId, modeId);\n const mode = selectionForBackend(families, backend).mode;\n if (\n backend === (value.backend ?? \"\") &&\n (value.mode === undefined || mode === value.mode)\n ) {\n return value;\n }\n\n const currentModel = runtimeModelForValue(models, value);\n const modelId =\n currentModel?.runtime?.model ?? value.model ?? currentModel?.id ?? value.id;\n const nextModel = modelForFamily(\n modelId,\n models,\n familyById(families, familyId),\n backend,\n );\n let next = withoutCatalogModel(value);\n if (nextModel) {\n next = reconcileModelCapabilities(next, nextModel, reasoningEfforts, {\n backend,\n mode,\n });\n } else {\n next = { ...next, backend, mode };\n }\n delete next.cliArgs;\n return next;\n}\n\nfunction withoutCatalogModel<T extends RuntimeBackendValue>(value: T): T {\n const next = { ...value };\n delete next.model;\n delete next.id;\n return next;\n}\n"],"names":[],"mappings":";;;AAiBO,SAAS,mBAAmB,QAGjC;AACA,QAAM,MAAM,aAAa,OAAO,EAAE,IAAI,OAAO,KAAK,OAAO;AACzD,SAAO,EAAE,MAAM,aAAa,GAAG,GAAG,OAAO,kBAAkB,GAAG,EAAA;AAChE;AAGO,SAAS,oBACd,OACA,OACS;;AACT,MAAI,CAAC,4BAA4B,OAAO,KAAK,EAAG,QAAO;AACvD,MAAI,CAAC,oBAAoB,OAAO,MAAM,OAAO,EAAG,QAAO;AACvD,MACE,MAAM,YAAY,YAClB,WAAM,YAAN,mBAAe,aAAY,UAC3B,MAAM,QAAQ,YAAY,MAAM,SAChC;AACA,WAAO;AAAA,EACT;AACA,MACE,MAAM,SAAS,YACf,WAAM,YAAN,mBAAe,UAAS,UACxB,MAAM,QAAQ,SAAS,MAAM,MAC7B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGO,SAAS,qBACd,QACA,OACA,aAA4C,MAAM,MAC3B;;AACvB,QAAM,QAAQ,OAAO;AAAA,IACnB,CAAC,UAAU,WAAW,KAAK,KAAK,oBAAoB,OAAO,KAAK;AAAA,EAAA;AAElE,MAAI,MAAO,QAAO;AAClB,QAAM,kBAAkB,OAAO;AAAA,IAC7B,CAAC,UACC,WAAW,KAAK,KAChB,4BAA4B,OAAO,KAAK,KACxC,oBAAoB,OAAO,MAAM,OAAO;AAAA,EAAA;AAE5C,QAAM,mBAAmB,gBAAgB;AAAA,IACvC,CAAC,UAAU,MAAM,OAAO,MAAM,MAAM,MAAM,OAAO,MAAM;AAAA,EAAA;AAEzD,QAAM,WACJ,iBAAiB,WAAW,KAAI,sBAAiB,CAAC,MAAlB,mBAAqB,WAAW;AAClE,QAAM,gBAAgB,WAClB,gBAAgB,OAAO,CAAC,UAAU,MAAM,aAAa,QAAQ,IAC7D;AACJ,SAAO,cAAc,WAAW,IAAI,cAAc,CAAC,IAAI;AACzD;AAEA,SAAS,4BACP,OACA,OACS;;AACT,SACG,MAAM,OAAO,WACX,MAAM,OAAO,MAAM,QAAM,WAAM,YAAN,mBAAe,QAAO,MAAM,OACvD,MAAM,UAAU,WACd,MAAM,OAAO,MAAM,WAAS,WAAM,YAAN,mBAAe,WAAU,MAAM;AAElE;AAGO,SAAS,oBACd,OACA,QACA,UACA,UACA,QACA,kBACG;;AACH,QAAM,UAAU,qBAAqB,UAAU,UAAU,MAAM;AAC/D,QAAM,OAAO,oBAAoB,UAAU,OAAO,EAAE;AACpD,MACE,aAAa,MAAM,WAAW,QAC7B,MAAM,SAAS,UAAa,SAAS,MAAM,OAC5C;AACA,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,qBAAqB,QAAQ,KAAK;AACvD,QAAM,YACJ,kDAAc,YAAd,mBAAuB,UAAS,MAAM,UAAS,6CAAc,OAAM,MAAM;AAC3E,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA,WAAW,UAAU,QAAQ;AAAA,IAC7B;AAAA,EAAA;AAEF,MAAI,OAAO,oBAAoB,KAAK;AACpC,MAAI,WAAW;AACb,WAAO,2BAA2B,MAAM,WAAW,kBAAkB;AAAA,MACnE;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH,OAAO;AACL,WAAO,EAAE,GAAG,MAAM,SAAS,KAAA;AAAA,EAC7B;AACA,SAAO,KAAK;AACZ,SAAO;AACT;AAEA,SAAS,oBAAmD,OAAa;AACvE,QAAM,OAAO,EAAE,GAAG,MAAA;AAClB,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO;AACT;"}
@@ -5,20 +5,23 @@ function effortOptionsForModel(model, fallbackEfforts) {
5
5
  if (!model.reasoning) return [];
6
6
  return [...model.supportedEfforts ?? []];
7
7
  }
8
- function reconcileModelCapabilities(value, model, fallbackEfforts) {
8
+ function reconcileModelCapabilities(value, model, fallbackEfforts, execution) {
9
9
  const next = { ...value };
10
10
  if (model == null ? void 0 : model.runtime) {
11
11
  delete next.model;
12
12
  delete next.id;
13
13
  delete next.backend;
14
- delete next.temperature;
15
- delete next.effort;
16
- delete next.noCache;
17
- delete next.fallbacks;
14
+ delete next.mode;
18
15
  Object.assign(next, model.runtime);
19
16
  } else if (model) {
20
17
  next.model = model.id;
21
18
  }
19
+ if (execution) {
20
+ if (execution.backend) next.backend = execution.backend;
21
+ else delete next.backend;
22
+ if (execution.mode) next.mode = execution.mode;
23
+ else delete next.mode;
24
+ }
22
25
  const efforts = effortOptionsForModel(model, fallbackEfforts);
23
26
  if ((model == null ? void 0 : model.capabilitiesKnown) && efforts.length === 0) {
24
27
  delete next.effort;
@@ -1 +1 @@
1
- {"version":3,"file":"model-capabilities.cjs","sources":["../../../src/data/runtime/model-capabilities.ts"],"sourcesContent":["import type { ChatModel, ChatModelRuntime } from \"../chat/types\";\n\n// A runtime control edits exactly the wire value a catalog row\n// carries (`reconcileModelCapabilities` copies one onto the other), so it stays\n// one declaration a field added to the catalog shape cannot drift out of the\n// editable shape.\nexport type ModelRuntimeSelection = ChatModelRuntime;\n\nexport function effortOptionsForModel(\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n): string[] {\n if (!model?.capabilitiesKnown) return [...fallbackEfforts];\n if (!model.reasoning) return [];\n return [...(model.supportedEfforts ?? [])];\n}\n\nexport function reconcileModelCapabilities<T extends ModelRuntimeSelection>(\n value: T,\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n): T {\n const next = { ...value } as ModelRuntimeSelection;\n if (model?.runtime) {\n delete next.model;\n delete next.id;\n delete next.backend;\n delete next.temperature;\n delete next.effort;\n delete next.noCache;\n delete next.fallbacks;\n Object.assign(next, model.runtime);\n } else if (model) {\n next.model = model.id;\n }\n\n const efforts = effortOptionsForModel(model, fallbackEfforts);\n if (model?.capabilitiesKnown && efforts.length === 0) {\n delete next.effort;\n } else if (\n efforts.length > 0 &&\n (!next.effort || !efforts.includes(next.effort))\n ) {\n const preferred = model?.defaultEffort;\n next.effort =\n preferred && efforts.includes(preferred)\n ? preferred\n : efforts.includes(\"medium\")\n ? \"medium\"\n : efforts[0]!;\n }\n\n if (model?.temperature === false) delete next.temperature;\n return next as T;\n}\n"],"names":[],"mappings":";;AAQO,SAAS,sBACd,OACA,iBACU;AACV,MAAI,EAAC,+BAAO,mBAAmB,QAAO,CAAC,GAAG,eAAe;AACzD,MAAI,CAAC,MAAM,UAAW,QAAO,CAAA;AAC7B,SAAO,CAAC,GAAI,MAAM,oBAAoB,EAAG;AAC3C;AAEO,SAAS,2BACd,OACA,OACA,iBACG;AACH,QAAM,OAAO,EAAE,GAAG,MAAA;AAClB,MAAI,+BAAO,SAAS;AAClB,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,OAAO,MAAM,MAAM,OAAO;AAAA,EACnC,WAAW,OAAO;AAChB,SAAK,QAAQ,MAAM;AAAA,EACrB;AAEA,QAAM,UAAU,sBAAsB,OAAO,eAAe;AAC5D,OAAI,+BAAO,sBAAqB,QAAQ,WAAW,GAAG;AACpD,WAAO,KAAK;AAAA,EACd,WACE,QAAQ,SAAS,MAChB,CAAC,KAAK,UAAU,CAAC,QAAQ,SAAS,KAAK,MAAM,IAC9C;AACA,UAAM,YAAY,+BAAO;AACzB,SAAK,SACH,aAAa,QAAQ,SAAS,SAAS,IACnC,YACA,QAAQ,SAAS,QAAQ,IACvB,WACF,QAAQ,CAAC;AAAA,EACjB;AAEA,OAAI,+BAAO,iBAAgB,MAAO,QAAO,KAAK;AAC9C,SAAO;AACT;;;"}
1
+ {"version":3,"file":"model-capabilities.cjs","sources":["../../../src/data/runtime/model-capabilities.ts"],"sourcesContent":["import type { ChatModel, ChatModelRuntime } from \"../chat/types\";\n\n// Runtime controls and catalog rows share one wire shape. Reconciliation copies\n// catalog identity while retaining user-owned runtime options that remain valid.\nexport type ModelRuntimeSelection = ChatModelRuntime;\n\n/** Lists the effort values accepted by the selected catalog model. */\nexport function effortOptionsForModel(\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n): string[] {\n if (!model?.capabilitiesKnown) return [...fallbackEfforts];\n if (!model.reasoning) return [];\n return [...(model.supportedEfforts ?? [])];\n}\n\n/** Applies catalog identity and capabilities under the caller's execution policy. */\nexport function reconcileModelCapabilities<T extends ModelRuntimeSelection>(\n value: T,\n model: ChatModel | undefined,\n fallbackEfforts: readonly string[],\n execution?: {\n backend: string | undefined;\n mode: string | undefined;\n },\n): T {\n const next = { ...value } as ModelRuntimeSelection;\n if (model?.runtime) {\n delete next.model;\n delete next.id;\n delete next.backend;\n delete next.mode;\n Object.assign(next, model.runtime);\n } else if (model) {\n next.model = model.id;\n }\n\n if (execution) {\n if (execution.backend) next.backend = execution.backend;\n else delete next.backend;\n if (execution.mode) next.mode = execution.mode;\n else delete next.mode;\n }\n\n const efforts = effortOptionsForModel(model, fallbackEfforts);\n if (model?.capabilitiesKnown && efforts.length === 0) {\n delete next.effort;\n } else if (\n efforts.length > 0 &&\n (!next.effort || !efforts.includes(next.effort))\n ) {\n const preferred = model?.defaultEffort;\n next.effort =\n preferred && efforts.includes(preferred)\n ? preferred\n : efforts.includes(\"medium\")\n ? \"medium\"\n : efforts[0]!;\n }\n\n if (model?.temperature === false) delete next.temperature;\n return next as T;\n}\n"],"names":[],"mappings":";;AAOO,SAAS,sBACd,OACA,iBACU;AACV,MAAI,EAAC,+BAAO,mBAAmB,QAAO,CAAC,GAAG,eAAe;AACzD,MAAI,CAAC,MAAM,UAAW,QAAO,CAAA;AAC7B,SAAO,CAAC,GAAI,MAAM,oBAAoB,EAAG;AAC3C;AAGO,SAAS,2BACd,OACA,OACA,iBACA,WAIG;AACH,QAAM,OAAO,EAAE,GAAG,MAAA;AAClB,MAAI,+BAAO,SAAS;AAClB,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,OAAO,MAAM,MAAM,OAAO;AAAA,EACnC,WAAW,OAAO;AAChB,SAAK,QAAQ,MAAM;AAAA,EACrB;AAEA,MAAI,WAAW;AACb,QAAI,UAAU,QAAS,MAAK,UAAU,UAAU;AAAA,gBACpC,KAAK;AACjB,QAAI,UAAU,KAAM,MAAK,OAAO,UAAU;AAAA,gBAC9B,KAAK;AAAA,EACnB;AAEA,QAAM,UAAU,sBAAsB,OAAO,eAAe;AAC5D,OAAI,+BAAO,sBAAqB,QAAQ,WAAW,GAAG;AACpD,WAAO,KAAK;AAAA,EACd,WACE,QAAQ,SAAS,MAChB,CAAC,KAAK,UAAU,CAAC,QAAQ,SAAS,KAAK,MAAM,IAC9C;AACA,UAAM,YAAY,+BAAO;AACzB,SAAK,SACH,aAAa,QAAQ,SAAS,SAAS,IACnC,YACA,QAAQ,SAAS,QAAQ,IACvB,WACF,QAAQ,CAAC;AAAA,EACjB;AAEA,OAAI,+BAAO,iBAAgB,MAAO,QAAO,KAAK;AAC9C,SAAO;AACT;;;"}
@@ -1,5 +1,10 @@
1
1
  import { ChatModel, ChatModelRuntime } from '../chat/types';
2
2
  export type ModelRuntimeSelection = ChatModelRuntime;
3
+ /** Lists the effort values accepted by the selected catalog model. */
3
4
  export declare function effortOptionsForModel(model: ChatModel | undefined, fallbackEfforts: readonly string[]): string[];
4
- export declare function reconcileModelCapabilities<T extends ModelRuntimeSelection>(value: T, model: ChatModel | undefined, fallbackEfforts: readonly string[]): T;
5
+ /** Applies catalog identity and capabilities under the caller's execution policy. */
6
+ export declare function reconcileModelCapabilities<T extends ModelRuntimeSelection>(value: T, model: ChatModel | undefined, fallbackEfforts: readonly string[], execution?: {
7
+ backend: string | undefined;
8
+ mode: string | undefined;
9
+ }): T;
5
10
  //# sourceMappingURL=model-capabilities.d.ts.map