@flanksource/clicky-ui 0.3.16 → 0.3.18

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 (871) hide show
  1. package/dist/ai.cjs +12 -6
  2. package/dist/ai.cjs.map +1 -1
  3. package/dist/ai.js +10 -4
  4. package/dist/ai.js.map +1 -1
  5. package/dist/chat.cjs +36 -0
  6. package/dist/chat.cjs.map +1 -1
  7. package/dist/chat.js +37 -1
  8. package/dist/chat.js.map +1 -1
  9. package/dist/components/Combobox.cjs +122 -153
  10. package/dist/components/Combobox.cjs.map +1 -1
  11. package/dist/components/Combobox.d.ts.map +1 -1
  12. package/dist/components/Combobox.js +124 -155
  13. package/dist/components/Combobox.js.map +1 -1
  14. package/dist/components/ComboboxControl.cjs +145 -0
  15. package/dist/components/ComboboxControl.cjs.map +1 -0
  16. package/dist/components/ComboboxControl.d.ts +37 -0
  17. package/dist/components/ComboboxControl.d.ts.map +1 -0
  18. package/dist/components/ComboboxControl.js +145 -0
  19. package/dist/components/ComboboxControl.js.map +1 -0
  20. package/dist/components/ComboboxMenu.cjs +31 -14
  21. package/dist/components/ComboboxMenu.cjs.map +1 -1
  22. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  23. package/dist/components/ComboboxMenu.js +31 -14
  24. package/dist/components/ComboboxMenu.js.map +1 -1
  25. package/dist/components/ComboboxTags.cjs +40 -0
  26. package/dist/components/ComboboxTags.cjs.map +1 -0
  27. package/dist/components/ComboboxTags.d.ts +8 -0
  28. package/dist/components/ComboboxTags.d.ts.map +1 -0
  29. package/dist/components/ComboboxTags.js +40 -0
  30. package/dist/components/ComboboxTags.js.map +1 -0
  31. package/dist/components/ErrorWrapper.cjs +168 -0
  32. package/dist/components/ErrorWrapper.cjs.map +1 -0
  33. package/dist/components/ErrorWrapper.d.ts +19 -0
  34. package/dist/components/ErrorWrapper.d.ts.map +1 -0
  35. package/dist/components/ErrorWrapper.js +168 -0
  36. package/dist/components/ErrorWrapper.js.map +1 -0
  37. package/dist/components/FilterBar.cjs +64 -2
  38. package/dist/components/FilterBar.cjs.map +1 -1
  39. package/dist/components/FilterBar.d.ts +18 -1
  40. package/dist/components/FilterBar.d.ts.map +1 -1
  41. package/dist/components/FilterBar.js +64 -2
  42. package/dist/components/FilterBar.js.map +1 -1
  43. package/dist/components/JSONPathField.cjs +91 -0
  44. package/dist/components/JSONPathField.cjs.map +1 -0
  45. package/dist/components/JSONPathField.d.ts +19 -0
  46. package/dist/components/JSONPathField.d.ts.map +1 -0
  47. package/dist/components/JSONPathField.js +91 -0
  48. package/dist/components/JSONPathField.js.map +1 -0
  49. package/dist/components/JsonSchemaForm.cjs +8 -4
  50. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  51. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  52. package/dist/components/JsonSchemaForm.js +8 -4
  53. package/dist/components/JsonSchemaForm.js.map +1 -1
  54. package/dist/components/TreePickerField.cjs +22 -4
  55. package/dist/components/TreePickerField.cjs.map +1 -1
  56. package/dist/components/TreePickerField.d.ts +22 -2
  57. package/dist/components/TreePickerField.d.ts.map +1 -1
  58. package/dist/components/TreePickerField.js +22 -4
  59. package/dist/components/TreePickerField.js.map +1 -1
  60. package/dist/components/TriStateToggle.cjs +53 -0
  61. package/dist/components/TriStateToggle.cjs.map +1 -0
  62. package/dist/components/TriStateToggle.d.ts +27 -0
  63. package/dist/components/TriStateToggle.d.ts.map +1 -0
  64. package/dist/components/TriStateToggle.js +53 -0
  65. package/dist/components/TriStateToggle.js.map +1 -0
  66. package/dist/components/combobox-types.d.ts +16 -1
  67. package/dist/components/combobox-types.d.ts.map +1 -1
  68. package/dist/components/combobox-utils.cjs +26 -0
  69. package/dist/components/combobox-utils.cjs.map +1 -1
  70. package/dist/components/combobox-utils.d.ts +10 -0
  71. package/dist/components/combobox-utils.d.ts.map +1 -1
  72. package/dist/components/combobox-utils.js +26 -0
  73. package/dist/components/combobox-utils.js.map +1 -1
  74. package/dist/components/filter-bar-utils.cjs +5 -0
  75. package/dist/components/filter-bar-utils.cjs.map +1 -1
  76. package/dist/components/filter-bar-utils.d.ts.map +1 -1
  77. package/dist/components/filter-bar-utils.js +5 -0
  78. package/dist/components/filter-bar-utils.js.map +1 -1
  79. package/dist/components/json-schema-form-accordion-array.cjs +290 -0
  80. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -0
  81. package/dist/components/json-schema-form-accordion-array.d.ts +7 -0
  82. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -0
  83. package/dist/components/json-schema-form-accordion-array.js +290 -0
  84. package/dist/components/json-schema-form-accordion-array.js.map +1 -0
  85. package/dist/components/json-schema-form-array.cjs +99 -110
  86. package/dist/components/json-schema-form-array.cjs.map +1 -1
  87. package/dist/components/json-schema-form-array.d.ts +1 -1
  88. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  89. package/dist/components/json-schema-form-array.js +98 -109
  90. package/dist/components/json-schema-form-array.js.map +1 -1
  91. package/dist/components/json-schema-form-error-display.cjs +4 -2
  92. package/dist/components/json-schema-form-error-display.cjs.map +1 -1
  93. package/dist/components/json-schema-form-error-display.d.ts +4 -2
  94. package/dist/components/json-schema-form-error-display.d.ts.map +1 -1
  95. package/dist/components/json-schema-form-error-display.js +4 -2
  96. package/dist/components/json-schema-form-error-display.js.map +1 -1
  97. package/dist/components/json-schema-form-extensions.cjs +10 -0
  98. package/dist/components/json-schema-form-extensions.cjs.map +1 -0
  99. package/dist/components/json-schema-form-extensions.d.ts +8 -0
  100. package/dist/components/json-schema-form-extensions.d.ts.map +1 -0
  101. package/dist/components/json-schema-form-extensions.js +10 -0
  102. package/dist/components/json-schema-form-extensions.js.map +1 -0
  103. package/dist/components/json-schema-form-fields.cjs +25 -101
  104. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  105. package/dist/components/json-schema-form-fields.d.ts +1 -32
  106. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  107. package/dist/components/json-schema-form-fields.js +28 -104
  108. package/dist/components/json-schema-form-fields.js.map +1 -1
  109. package/dist/components/json-schema-form-item-summary.cjs +131 -0
  110. package/dist/components/json-schema-form-item-summary.cjs.map +1 -0
  111. package/dist/components/json-schema-form-item-summary.d.ts +13 -0
  112. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -0
  113. package/dist/components/json-schema-form-item-summary.js +131 -0
  114. package/dist/components/json-schema-form-item-summary.js.map +1 -0
  115. package/dist/components/json-schema-form-layout.cjs +156 -0
  116. package/dist/components/json-schema-form-layout.cjs.map +1 -0
  117. package/dist/components/json-schema-form-layout.d.ts +43 -0
  118. package/dist/components/json-schema-form-layout.d.ts.map +1 -0
  119. package/dist/components/json-schema-form-layout.js +156 -0
  120. package/dist/components/json-schema-form-layout.js.map +1 -0
  121. package/dist/components/json-schema-form-lookup-tree.cjs +149 -0
  122. package/dist/components/json-schema-form-lookup-tree.cjs.map +1 -0
  123. package/dist/components/json-schema-form-lookup-tree.d.ts +22 -0
  124. package/dist/components/json-schema-form-lookup-tree.d.ts.map +1 -0
  125. package/dist/components/json-schema-form-lookup-tree.js +149 -0
  126. package/dist/components/json-schema-form-lookup-tree.js.map +1 -0
  127. package/dist/components/json-schema-form-object.cjs +11 -4
  128. package/dist/components/json-schema-form-object.cjs.map +1 -1
  129. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  130. package/dist/components/json-schema-form-object.js +11 -4
  131. package/dist/components/json-schema-form-object.js.map +1 -1
  132. package/dist/components/json-schema-form-render.cjs +51 -28
  133. package/dist/components/json-schema-form-render.cjs.map +1 -1
  134. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  135. package/dist/components/json-schema-form-render.js +51 -28
  136. package/dist/components/json-schema-form-render.js.map +1 -1
  137. package/dist/components/json-schema-form-resolve.cjs +62 -13
  138. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  139. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  140. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  141. package/dist/components/json-schema-form-resolve.js +62 -13
  142. package/dist/components/json-schema-form-resolve.js.map +1 -1
  143. package/dist/components/json-schema-form-table-array.cjs +123 -0
  144. package/dist/components/json-schema-form-table-array.cjs.map +1 -0
  145. package/dist/components/json-schema-form-table-array.d.ts +7 -0
  146. package/dist/components/json-schema-form-table-array.d.ts.map +1 -0
  147. package/dist/components/json-schema-form-table-array.js +123 -0
  148. package/dist/components/json-schema-form-table-array.js.map +1 -0
  149. package/dist/components/json-schema-form-tone.cjs +34 -0
  150. package/dist/components/json-schema-form-tone.cjs.map +1 -0
  151. package/dist/components/json-schema-form-tone.d.ts +8 -0
  152. package/dist/components/json-schema-form-tone.d.ts.map +1 -0
  153. package/dist/components/json-schema-form-tone.js +34 -0
  154. package/dist/components/json-schema-form-tone.js.map +1 -0
  155. package/dist/components/json-schema-form-types.d.ts +79 -10
  156. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  157. package/dist/components/json-schema-form-utils.cjs +47 -4
  158. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  159. package/dist/components/json-schema-form-utils.d.ts +19 -4
  160. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  161. package/dist/components/json-schema-form-utils.js +47 -4
  162. package/dist/components/json-schema-form-utils.js.map +1 -1
  163. package/dist/components/tri-state.cjs +8 -0
  164. package/dist/components/tri-state.cjs.map +1 -0
  165. package/dist/components/tri-state.d.ts +5 -0
  166. package/dist/components/tri-state.d.ts.map +1 -0
  167. package/dist/components/tri-state.js +8 -0
  168. package/dist/components/tri-state.js.map +1 -0
  169. package/dist/components/useComboboxLayout.cjs +59 -0
  170. package/dist/components/useComboboxLayout.cjs.map +1 -0
  171. package/dist/components/useComboboxLayout.d.ts +5 -0
  172. package/dist/components/useComboboxLayout.d.ts.map +1 -0
  173. package/dist/components/useComboboxLayout.js +59 -0
  174. package/dist/components/useComboboxLayout.js.map +1 -0
  175. package/dist/components.cjs +21 -0
  176. package/dist/components.cjs.map +1 -1
  177. package/dist/components.d.ts +14 -4
  178. package/dist/components.d.ts.map +1 -1
  179. package/dist/components.js +22 -1
  180. package/dist/components.js.map +1 -1
  181. package/dist/data/Clicky.cjs +51 -2
  182. package/dist/data/Clicky.cjs.map +1 -1
  183. package/dist/data/Clicky.d.ts +10 -1
  184. package/dist/data/Clicky.d.ts.map +1 -1
  185. package/dist/data/Clicky.js +51 -2
  186. package/dist/data/Clicky.js.map +1 -1
  187. package/dist/data/DataTable.cjs +215 -63
  188. package/dist/data/DataTable.cjs.map +1 -1
  189. package/dist/data/DataTable.d.ts +65 -3
  190. package/dist/data/DataTable.d.ts.map +1 -1
  191. package/dist/data/DataTable.js +215 -63
  192. package/dist/data/DataTable.js.map +1 -1
  193. package/dist/data/LogsTable.cjs +10 -1
  194. package/dist/data/LogsTable.cjs.map +1 -1
  195. package/dist/data/LogsTable.d.ts +3 -1
  196. package/dist/data/LogsTable.d.ts.map +1 -1
  197. package/dist/data/LogsTable.js +10 -1
  198. package/dist/data/LogsTable.js.map +1 -1
  199. package/dist/data/ServerTimingBadge.cjs +64 -0
  200. package/dist/data/ServerTimingBadge.cjs.map +1 -0
  201. package/dist/data/ServerTimingBadge.d.ts +9 -0
  202. package/dist/data/ServerTimingBadge.d.ts.map +1 -0
  203. package/dist/data/ServerTimingBadge.js +64 -0
  204. package/dist/data/ServerTimingBadge.js.map +1 -0
  205. package/dist/data/TaskManager.cjs +99 -14
  206. package/dist/data/TaskManager.cjs.map +1 -1
  207. package/dist/data/TaskManager.d.ts.map +1 -1
  208. package/dist/data/TaskManager.js +100 -15
  209. package/dist/data/TaskManager.js.map +1 -1
  210. package/dist/data/TaskProgress.cjs +50 -11
  211. package/dist/data/TaskProgress.cjs.map +1 -1
  212. package/dist/data/TaskProgress.d.ts +2 -1
  213. package/dist/data/TaskProgress.d.ts.map +1 -1
  214. package/dist/data/TaskProgress.js +50 -11
  215. package/dist/data/TaskProgress.js.map +1 -1
  216. package/dist/data/ai/AdvancedChatConfig.cjs +289 -0
  217. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -0
  218. package/dist/data/ai/AdvancedChatConfig.d.ts +21 -0
  219. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -0
  220. package/dist/data/ai/AdvancedChatConfig.js +289 -0
  221. package/dist/data/ai/AdvancedChatConfig.js.map +1 -0
  222. package/dist/data/ai/AdvancedCostsPanel.cjs +120 -0
  223. package/dist/data/ai/AdvancedCostsPanel.cjs.map +1 -0
  224. package/dist/data/ai/AdvancedCostsPanel.d.ts +16 -0
  225. package/dist/data/ai/AdvancedCostsPanel.d.ts.map +1 -0
  226. package/dist/data/ai/AdvancedCostsPanel.js +120 -0
  227. package/dist/data/ai/AdvancedCostsPanel.js.map +1 -0
  228. package/dist/data/ai/ChatWindow.catalogs.cjs +74 -0
  229. package/dist/data/ai/ChatWindow.catalogs.cjs.map +1 -0
  230. package/dist/data/ai/ChatWindow.catalogs.d.ts +16 -0
  231. package/dist/data/ai/ChatWindow.catalogs.d.ts.map +1 -0
  232. package/dist/data/ai/ChatWindow.catalogs.js +74 -0
  233. package/dist/data/ai/ChatWindow.catalogs.js.map +1 -0
  234. package/dist/data/ai/ChatWindow.cjs +86 -100
  235. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  236. package/dist/data/ai/ChatWindow.d.ts +1 -1
  237. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  238. package/dist/data/ai/ChatWindow.js +88 -102
  239. package/dist/data/ai/ChatWindow.js.map +1 -1
  240. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
  241. package/dist/data/ai/ChatWindow.preferences.d.ts +2 -4
  242. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
  243. package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
  244. package/dist/data/ai/ChatWindow.runtime.cjs +120 -0
  245. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -0
  246. package/dist/data/ai/ChatWindow.runtime.d.ts +20 -0
  247. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -0
  248. package/dist/data/ai/ChatWindow.runtime.js +120 -0
  249. package/dist/data/ai/ChatWindow.runtime.js.map +1 -0
  250. package/dist/data/ai/ChatWindow.thread-status.cjs +14 -0
  251. package/dist/data/ai/ChatWindow.thread-status.cjs.map +1 -0
  252. package/dist/data/ai/ChatWindow.thread-status.d.ts +5 -0
  253. package/dist/data/ai/ChatWindow.thread-status.d.ts.map +1 -0
  254. package/dist/data/ai/ChatWindow.thread-status.js +14 -0
  255. package/dist/data/ai/ChatWindow.thread-status.js.map +1 -0
  256. package/dist/data/ai/ChatWindow.thread.cjs +68 -0
  257. package/dist/data/ai/ChatWindow.thread.cjs.map +1 -0
  258. package/dist/data/ai/ChatWindow.thread.d.ts +16 -0
  259. package/dist/data/ai/ChatWindow.thread.d.ts.map +1 -0
  260. package/dist/data/ai/ChatWindow.thread.js +68 -0
  261. package/dist/data/ai/ChatWindow.thread.js.map +1 -0
  262. package/dist/data/ai/ChatWindow.tool-catalog.cjs +20 -0
  263. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
  264. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +17 -1
  265. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
  266. package/dist/data/ai/ChatWindow.tool-catalog.js +20 -0
  267. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
  268. package/dist/data/ai/ChatWindow.types.d.ts +13 -5
  269. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
  270. package/dist/data/ai/ChatWindowManager.cjs +3 -1
  271. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  272. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  273. package/dist/data/ai/ChatWindowManager.js +3 -1
  274. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  275. package/dist/data/ai/PromptPicker/PromptPicker.cjs +1 -1
  276. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  277. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +1 -1
  278. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
  279. package/dist/data/ai/PromptPicker/PromptPicker.js +1 -1
  280. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  281. package/dist/data/ai/PromptRunEditor/index.cjs +101 -89
  282. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  283. package/dist/data/ai/PromptRunEditor/index.d.ts +6 -10
  284. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  285. package/dist/data/ai/PromptRunEditor/index.js +103 -91
  286. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  287. package/dist/data/ai/PromptRunEditor/model.cjs +47 -0
  288. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -0
  289. package/dist/data/ai/PromptRunEditor/model.d.ts +17 -0
  290. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -0
  291. package/dist/data/ai/PromptRunEditor/model.js +47 -0
  292. package/dist/data/ai/PromptRunEditor/model.js.map +1 -0
  293. package/dist/data/ai/RuntimeModePicker.cjs +1 -1
  294. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
  295. package/dist/data/ai/RuntimeModePicker.d.ts +1 -1
  296. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
  297. package/dist/data/ai/RuntimeModePicker.js +1 -1
  298. package/dist/data/ai/RuntimeModePicker.js.map +1 -1
  299. package/dist/data/ai/SessionInspector.files.cjs +26 -43
  300. package/dist/data/ai/SessionInspector.files.cjs.map +1 -1
  301. package/dist/data/ai/SessionInspector.files.d.ts.map +1 -1
  302. package/dist/data/ai/SessionInspector.files.js +26 -43
  303. package/dist/data/ai/SessionInspector.files.js.map +1 -1
  304. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  305. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  306. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  307. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  308. package/dist/data/ai/SessionInspector.model.cjs +1 -1
  309. package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
  310. package/dist/data/ai/SessionInspector.model.js +1 -1
  311. package/dist/data/ai/SessionInspector.model.js.map +1 -1
  312. package/dist/data/ai/SessionViewer.header.cjs +17 -9
  313. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  314. package/dist/data/ai/SessionViewer.header.d.ts.map +1 -1
  315. package/dist/data/ai/SessionViewer.header.js +17 -9
  316. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  317. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  318. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  319. package/dist/data/ai/SessionViewer.model.d.ts +4 -0
  320. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  321. package/dist/data/ai/SessionViewer.model.js +2 -0
  322. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  323. package/dist/data/ai/SessionViewer.rows.cjs +4 -16
  324. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  325. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  326. package/dist/data/ai/SessionViewer.rows.js +4 -16
  327. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  328. package/dist/data/ai/SessionViewer.unified.d.ts +1 -0
  329. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  330. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +12 -3
  331. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  332. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +1 -1
  333. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  334. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +12 -3
  335. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  336. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  337. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +1 -1
  338. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  339. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  340. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  341. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +2 -2
  342. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  343. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  344. package/dist/data/ai/ThreadPicker.cjs +65 -3
  345. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  346. package/dist/data/ai/ThreadPicker.d.ts +13 -5
  347. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  348. package/dist/data/ai/ThreadPicker.js +65 -3
  349. package/dist/data/ai/ThreadPicker.js.map +1 -1
  350. package/dist/data/ai/ToolPreferences.cjs +65 -685
  351. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  352. package/dist/data/ai/ToolPreferences.d.ts +15 -17
  353. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  354. package/dist/data/ai/ToolPreferences.js +64 -683
  355. package/dist/data/ai/ToolPreferences.js.map +1 -1
  356. package/dist/data/ai/ToolPreferences.model.cjs +148 -0
  357. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -0
  358. package/dist/data/ai/ToolPreferences.model.d.ts +31 -0
  359. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -0
  360. package/dist/data/ai/ToolPreferences.model.js +148 -0
  361. package/dist/data/ai/ToolPreferences.model.js.map +1 -0
  362. package/dist/data/ai/ToolPreferencesList.cjs +270 -0
  363. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -0
  364. package/dist/data/ai/ToolPreferencesList.d.ts +18 -0
  365. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -0
  366. package/dist/data/ai/ToolPreferencesList.js +270 -0
  367. package/dist/data/ai/ToolPreferencesList.js.map +1 -0
  368. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  369. package/dist/data/ai/agent-action-icons.js.map +1 -1
  370. package/dist/data/ai/chat-window-context.cjs +4 -1
  371. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  372. package/dist/data/ai/chat-window-context.d.ts +7 -0
  373. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  374. package/dist/data/ai/chat-window-context.js +4 -1
  375. package/dist/data/ai/chat-window-context.js.map +1 -1
  376. package/dist/data/ai/index.d.ts +7 -3
  377. package/dist/data/ai/index.d.ts.map +1 -1
  378. package/dist/data/ai/session-tones.cjs +67 -0
  379. package/dist/data/ai/session-tones.cjs.map +1 -0
  380. package/dist/data/ai/session-tones.d.ts +34 -0
  381. package/dist/data/ai/session-tones.d.ts.map +1 -0
  382. package/dist/data/ai/session-tones.js +67 -0
  383. package/dist/data/ai/session-tones.js.map +1 -0
  384. package/dist/data/ai/thread-costs.cjs +39 -0
  385. package/dist/data/ai/thread-costs.cjs.map +1 -0
  386. package/dist/data/ai/thread-costs.d.ts +62 -0
  387. package/dist/data/ai/thread-costs.d.ts.map +1 -0
  388. package/dist/data/ai/thread-costs.js +39 -0
  389. package/dist/data/ai/thread-costs.js.map +1 -0
  390. package/dist/data/cells/CellFilterActions.cjs +68 -0
  391. package/dist/data/cells/CellFilterActions.cjs.map +1 -0
  392. package/dist/data/cells/CellFilterActions.d.ts +15 -0
  393. package/dist/data/cells/CellFilterActions.d.ts.map +1 -0
  394. package/dist/data/cells/CellFilterActions.js +68 -0
  395. package/dist/data/cells/CellFilterActions.js.map +1 -0
  396. package/dist/data/chat/Chat.cjs +192 -80
  397. package/dist/data/chat/Chat.cjs.map +1 -1
  398. package/dist/data/chat/Chat.d.ts +24 -4
  399. package/dist/data/chat/Chat.d.ts.map +1 -1
  400. package/dist/data/chat/Chat.fixtures.cjs +48 -3
  401. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  402. package/dist/data/chat/Chat.fixtures.d.ts +1 -1
  403. package/dist/data/chat/Chat.fixtures.d.ts.map +1 -1
  404. package/dist/data/chat/Chat.fixtures.js +48 -3
  405. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  406. package/dist/data/chat/Chat.js +195 -83
  407. package/dist/data/chat/Chat.js.map +1 -1
  408. package/dist/data/chat/Chat.runtime.cjs +63 -0
  409. package/dist/data/chat/Chat.runtime.cjs.map +1 -0
  410. package/dist/data/chat/Chat.runtime.d.ts +16 -0
  411. package/dist/data/chat/Chat.runtime.d.ts.map +1 -0
  412. package/dist/data/chat/Chat.runtime.js +63 -0
  413. package/dist/data/chat/Chat.runtime.js.map +1 -0
  414. package/dist/data/chat/ChatRuntimeToolbar.cjs +62 -0
  415. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -0
  416. package/dist/data/chat/ChatRuntimeToolbar.d.ts +14 -0
  417. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -0
  418. package/dist/data/chat/ChatRuntimeToolbar.js +62 -0
  419. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -0
  420. package/dist/data/chat/ContextMeter.cjs +144 -73
  421. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  422. package/dist/data/chat/ContextMeter.d.ts +8 -3
  423. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  424. package/dist/data/chat/ContextMeter.js +144 -73
  425. package/dist/data/chat/ContextMeter.js.map +1 -1
  426. package/dist/data/chat/ToolCall.cjs +86 -24
  427. package/dist/data/chat/ToolCall.cjs.map +1 -1
  428. package/dist/data/chat/ToolCall.d.ts +12 -5
  429. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  430. package/dist/data/chat/ToolCall.js +86 -24
  431. package/dist/data/chat/ToolCall.js.map +1 -1
  432. package/dist/data/chat/approval.cjs +64 -0
  433. package/dist/data/chat/approval.cjs.map +1 -0
  434. package/dist/data/chat/approval.d.ts +18 -0
  435. package/dist/data/chat/approval.d.ts.map +1 -0
  436. package/dist/data/chat/approval.js +64 -0
  437. package/dist/data/chat/approval.js.map +1 -0
  438. package/dist/data/chat/index.d.ts +5 -3
  439. package/dist/data/chat/index.d.ts.map +1 -1
  440. package/dist/data/chat/tool-render/ToolArgs.cjs +50 -0
  441. package/dist/data/chat/tool-render/ToolArgs.cjs.map +1 -0
  442. package/dist/data/chat/tool-render/ToolArgs.d.ts +7 -0
  443. package/dist/data/chat/tool-render/ToolArgs.d.ts.map +1 -0
  444. package/dist/data/chat/tool-render/ToolArgs.js +50 -0
  445. package/dist/data/chat/tool-render/ToolArgs.js.map +1 -0
  446. package/dist/data/chat/tool-render/ToolParams.cjs +155 -0
  447. package/dist/data/chat/tool-render/ToolParams.cjs.map +1 -0
  448. package/dist/data/chat/tool-render/ToolParams.d.ts +20 -0
  449. package/dist/data/chat/tool-render/ToolParams.d.ts.map +1 -0
  450. package/dist/data/chat/tool-render/ToolParams.js +155 -0
  451. package/dist/data/chat/tool-render/ToolParams.js.map +1 -0
  452. package/dist/data/chat/tool-render/ToolValue.cjs +140 -0
  453. package/dist/data/chat/tool-render/ToolValue.cjs.map +1 -0
  454. package/dist/data/chat/tool-render/ToolValue.d.ts +16 -0
  455. package/dist/data/chat/tool-render/ToolValue.d.ts.map +1 -0
  456. package/dist/data/chat/tool-render/ToolValue.js +140 -0
  457. package/dist/data/chat/tool-render/ToolValue.js.map +1 -0
  458. package/dist/data/chat/tool-render/adapter.cjs +48 -0
  459. package/dist/data/chat/tool-render/adapter.cjs.map +1 -0
  460. package/dist/data/chat/tool-render/adapter.d.ts +57 -0
  461. package/dist/data/chat/tool-render/adapter.d.ts.map +1 -0
  462. package/dist/data/chat/tool-render/adapter.js +48 -0
  463. package/dist/data/chat/tool-render/adapter.js.map +1 -0
  464. package/dist/data/chat/tool-render/context.cjs +16 -0
  465. package/dist/data/chat/tool-render/context.cjs.map +1 -0
  466. package/dist/data/chat/tool-render/context.d.ts +6 -0
  467. package/dist/data/chat/tool-render/context.d.ts.map +1 -0
  468. package/dist/data/chat/tool-render/context.js +16 -0
  469. package/dist/data/chat/tool-render/context.js.map +1 -0
  470. package/dist/data/chat/tool-render/defaults.cjs +45 -0
  471. package/dist/data/chat/tool-render/defaults.cjs.map +1 -0
  472. package/dist/data/chat/tool-render/defaults.d.ts +11 -0
  473. package/dist/data/chat/tool-render/defaults.d.ts.map +1 -0
  474. package/dist/data/chat/tool-render/defaults.js +45 -0
  475. package/dist/data/chat/tool-render/defaults.js.map +1 -0
  476. package/dist/data/chat/tool-render/index.d.ts +13 -0
  477. package/dist/data/chat/tool-render/index.d.ts.map +1 -0
  478. package/dist/data/chat/tool-render/known-tool-views.cjs +208 -0
  479. package/dist/data/chat/tool-render/known-tool-views.cjs.map +1 -0
  480. package/dist/data/chat/tool-render/known-tool-views.d.ts +10 -0
  481. package/dist/data/chat/tool-render/known-tool-views.d.ts.map +1 -0
  482. package/dist/data/chat/tool-render/known-tool-views.js +208 -0
  483. package/dist/data/chat/tool-render/known-tool-views.js.map +1 -0
  484. package/dist/data/chat/tool-render/known-tools.cjs +58 -0
  485. package/dist/data/chat/tool-render/known-tools.cjs.map +1 -0
  486. package/dist/data/chat/tool-render/known-tools.d.ts +4 -0
  487. package/dist/data/chat/tool-render/known-tools.d.ts.map +1 -0
  488. package/dist/data/chat/tool-render/known-tools.js +58 -0
  489. package/dist/data/chat/tool-render/known-tools.js.map +1 -0
  490. package/dist/data/chat/tool-render/normalize.cjs +42 -0
  491. package/dist/data/chat/tool-render/normalize.cjs.map +1 -0
  492. package/dist/data/chat/tool-render/normalize.d.ts +13 -0
  493. package/dist/data/chat/tool-render/normalize.d.ts.map +1 -0
  494. package/dist/data/chat/tool-render/normalize.js +42 -0
  495. package/dist/data/chat/tool-render/normalize.js.map +1 -0
  496. package/dist/data/chat/tool-render/registry.cjs +14 -0
  497. package/dist/data/chat/tool-render/registry.cjs.map +1 -0
  498. package/dist/data/chat/tool-render/registry.d.ts +7 -0
  499. package/dist/data/chat/tool-render/registry.d.ts.map +1 -0
  500. package/dist/data/chat/tool-render/registry.js +14 -0
  501. package/dist/data/chat/tool-render/registry.js.map +1 -0
  502. package/dist/data/chat/tool-render/schema.cjs +57 -0
  503. package/dist/data/chat/tool-render/schema.cjs.map +1 -0
  504. package/dist/data/chat/tool-render/schema.d.ts +28 -0
  505. package/dist/data/chat/tool-render/schema.d.ts.map +1 -0
  506. package/dist/data/chat/tool-render/schema.js +57 -0
  507. package/dist/data/chat/tool-render/schema.js.map +1 -0
  508. package/dist/data/chat/tool-render/shape.cjs +94 -0
  509. package/dist/data/chat/tool-render/shape.cjs.map +1 -0
  510. package/dist/data/chat/tool-render/shape.d.ts +39 -0
  511. package/dist/data/chat/tool-render/shape.d.ts.map +1 -0
  512. package/dist/data/chat/tool-render/shape.js +94 -0
  513. package/dist/data/chat/tool-render/shape.js.map +1 -0
  514. package/dist/data/chat/tool-render/summary.cjs +34 -0
  515. package/dist/data/chat/tool-render/summary.cjs.map +1 -0
  516. package/dist/data/chat/tool-render/summary.d.ts +8 -0
  517. package/dist/data/chat/tool-render/summary.d.ts.map +1 -0
  518. package/dist/data/chat/tool-render/summary.js +34 -0
  519. package/dist/data/chat/tool-render/summary.js.map +1 -0
  520. package/dist/data/chat/types.cjs.map +1 -1
  521. package/dist/data/chat/types.d.ts +19 -0
  522. package/dist/data/chat/types.d.ts.map +1 -1
  523. package/dist/data/chat/types.js.map +1 -1
  524. package/dist/data/chat/usage-snapshot.cjs +17 -0
  525. package/dist/data/chat/usage-snapshot.cjs.map +1 -0
  526. package/dist/data/chat/usage-snapshot.d.ts +21 -0
  527. package/dist/data/chat/usage-snapshot.d.ts.map +1 -0
  528. package/dist/data/chat/usage-snapshot.js +17 -0
  529. package/dist/data/chat/usage-snapshot.js.map +1 -0
  530. package/dist/data/data-table-filter-values.cjs +83 -0
  531. package/dist/data/data-table-filter-values.cjs.map +1 -0
  532. package/dist/data/data-table-filter-values.d.ts +18 -0
  533. package/dist/data/data-table-filter-values.d.ts.map +1 -0
  534. package/dist/data/data-table-filter-values.js +83 -0
  535. package/dist/data/data-table-filter-values.js.map +1 -0
  536. package/dist/data/data-table-server-filters.cjs +171 -0
  537. package/dist/data/data-table-server-filters.cjs.map +1 -0
  538. package/dist/data/data-table-server-filters.d.ts +128 -0
  539. package/dist/data/data-table-server-filters.d.ts.map +1 -0
  540. package/dist/data/data-table-server-filters.js +171 -0
  541. package/dist/data/data-table-server-filters.js.map +1 -0
  542. package/dist/data/query-browser/QueryBrowser.cjs +96 -19
  543. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  544. package/dist/data/query-browser/QueryBrowser.d.ts +37 -6
  545. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  546. package/dist/data/query-browser/QueryBrowser.js +96 -19
  547. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  548. package/dist/data/query-browser/index.d.ts +1 -1
  549. package/dist/data/query-browser/index.d.ts.map +1 -1
  550. package/dist/data/runtime/ProviderStatusPanel.cjs +187 -0
  551. package/dist/data/runtime/ProviderStatusPanel.cjs.map +1 -0
  552. package/dist/data/runtime/ProviderStatusPanel.d.ts +10 -0
  553. package/dist/data/runtime/ProviderStatusPanel.d.ts.map +1 -0
  554. package/dist/data/runtime/ProviderStatusPanel.js +187 -0
  555. package/dist/data/runtime/ProviderStatusPanel.js.map +1 -0
  556. package/dist/data/runtime/RuntimeBar.cjs +147 -0
  557. package/dist/data/runtime/RuntimeBar.cjs.map +1 -0
  558. package/dist/data/runtime/RuntimeBar.d.ts +22 -0
  559. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -0
  560. package/dist/data/runtime/RuntimeBar.js +147 -0
  561. package/dist/data/runtime/RuntimeBar.js.map +1 -0
  562. package/dist/data/runtime/RuntimeBar.model.cjs +14 -0
  563. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -0
  564. package/dist/data/runtime/RuntimeBar.model.d.ts +10 -0
  565. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -0
  566. package/dist/data/runtime/RuntimeBar.model.js +14 -0
  567. package/dist/data/runtime/RuntimeBar.model.js.map +1 -0
  568. package/dist/data/runtime/RuntimeBarCombo.cjs +354 -0
  569. package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -0
  570. package/dist/data/runtime/RuntimeBarCombo.d.ts +23 -0
  571. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -0
  572. package/dist/data/runtime/RuntimeBarCombo.js +354 -0
  573. package/dist/data/runtime/RuntimeBarCombo.js.map +1 -0
  574. package/dist/data/{ai/RuntimeBar.cjs → runtime/RuntimeBarSegments.cjs} +93 -87
  575. package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -0
  576. package/dist/data/runtime/RuntimeBarSegments.d.ts +25 -0
  577. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -0
  578. package/dist/data/{ai/RuntimeBar.js → runtime/RuntimeBarSegments.js} +96 -90
  579. package/dist/data/runtime/RuntimeBarSegments.js.map +1 -0
  580. package/dist/data/runtime/availability.cjs +11 -0
  581. package/dist/data/runtime/availability.cjs.map +1 -0
  582. package/dist/data/runtime/availability.d.ts +6 -0
  583. package/dist/data/runtime/availability.d.ts.map +1 -0
  584. package/dist/data/runtime/availability.js +11 -0
  585. package/dist/data/runtime/availability.js.map +1 -0
  586. package/dist/data/{ai → runtime}/model-capabilities.cjs +12 -1
  587. package/dist/data/runtime/model-capabilities.cjs.map +1 -0
  588. package/dist/data/{ai → runtime}/model-capabilities.d.ts +2 -6
  589. package/dist/data/runtime/model-capabilities.d.ts.map +1 -0
  590. package/dist/data/{ai → runtime}/model-capabilities.js +12 -1
  591. package/dist/data/runtime/model-capabilities.js.map +1 -0
  592. package/dist/data/runtime/provider-status.cjs +106 -0
  593. package/dist/data/runtime/provider-status.cjs.map +1 -0
  594. package/dist/data/runtime/provider-status.d.ts +24 -0
  595. package/dist/data/runtime/provider-status.d.ts.map +1 -0
  596. package/dist/data/runtime/provider-status.js +106 -0
  597. package/dist/data/runtime/provider-status.js.map +1 -0
  598. package/dist/data/{ai → runtime}/runtime-mode.cjs +123 -22
  599. package/dist/data/runtime/runtime-mode.cjs.map +1 -0
  600. package/dist/data/{ai → runtime}/runtime-mode.d.ts +8 -1
  601. package/dist/data/runtime/runtime-mode.d.ts.map +1 -0
  602. package/dist/data/{ai → runtime}/runtime-mode.js +123 -22
  603. package/dist/data/runtime/runtime-mode.js.map +1 -0
  604. package/dist/data/server-timing.cjs +120 -0
  605. package/dist/data/server-timing.cjs.map +1 -0
  606. package/dist/data/server-timing.d.ts +11 -0
  607. package/dist/data/server-timing.d.ts.map +1 -0
  608. package/dist/data/server-timing.js +120 -0
  609. package/dist/data/server-timing.js.map +1 -0
  610. package/dist/data/task-query-keys.cjs +26 -0
  611. package/dist/data/task-query-keys.cjs.map +1 -0
  612. package/dist/data/task-query-keys.d.ts +27 -0
  613. package/dist/data/task-query-keys.d.ts.map +1 -0
  614. package/dist/data/task-query-keys.js +26 -0
  615. package/dist/data/task-query-keys.js.map +1 -0
  616. package/dist/data/version-info.cjs +3 -3
  617. package/dist/data/version-info.js +3 -3
  618. package/dist/data.cjs +23 -0
  619. package/dist/data.cjs.map +1 -1
  620. package/dist/data.d.ts +8 -2
  621. package/dist/data.d.ts.map +1 -1
  622. package/dist/data.js +23 -0
  623. package/dist/data.js.map +1 -1
  624. package/dist/hooks/use-hotkey.cjs +6 -1
  625. package/dist/hooks/use-hotkey.cjs.map +1 -1
  626. package/dist/hooks/use-hotkey.d.ts.map +1 -1
  627. package/dist/hooks/use-hotkey.js +6 -1
  628. package/dist/hooks/use-hotkey.js.map +1 -1
  629. package/dist/hooks/use-task-run.cjs +7 -4
  630. package/dist/hooks/use-task-run.cjs.map +1 -1
  631. package/dist/hooks/use-task-run.d.ts +12 -0
  632. package/dist/hooks/use-task-run.d.ts.map +1 -1
  633. package/dist/hooks/use-task-run.js +7 -4
  634. package/dist/hooks/use-task-run.js.map +1 -1
  635. package/dist/icons/index.d.ts +1 -0
  636. package/dist/icons/index.d.ts.map +1 -1
  637. package/dist/icons/registry.cjs +692 -0
  638. package/dist/icons/registry.cjs.map +1 -0
  639. package/dist/icons/registry.d.ts +21 -0
  640. package/dist/icons/registry.d.ts.map +1 -0
  641. package/dist/icons/registry.js +692 -0
  642. package/dist/icons/registry.js.map +1 -0
  643. package/dist/icons.cjs +3 -0
  644. package/dist/icons.cjs.map +1 -1
  645. package/dist/icons.js +4 -1
  646. package/dist/icons.js.map +1 -1
  647. package/dist/index.cjs +54 -0
  648. package/dist/index.cjs.map +1 -1
  649. package/dist/index.js +56 -2
  650. package/dist/index.js.map +1 -1
  651. package/dist/layout/AppShell.cjs +93 -57
  652. package/dist/layout/AppShell.cjs.map +1 -1
  653. package/dist/layout/AppShell.d.ts +49 -1
  654. package/dist/layout/AppShell.d.ts.map +1 -1
  655. package/dist/layout/AppShell.js +93 -57
  656. package/dist/layout/AppShell.js.map +1 -1
  657. package/dist/layout/AppShell.nav.cjs +144 -19
  658. package/dist/layout/AppShell.nav.cjs.map +1 -1
  659. package/dist/layout/AppShell.nav.d.ts +6 -1
  660. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  661. package/dist/layout/AppShell.nav.js +144 -19
  662. package/dist/layout/AppShell.nav.js.map +1 -1
  663. package/dist/layout/SplitPane.cjs +23 -7
  664. package/dist/layout/SplitPane.cjs.map +1 -1
  665. package/dist/layout/SplitPane.d.ts +3 -1
  666. package/dist/layout/SplitPane.d.ts.map +1 -1
  667. package/dist/layout/SplitPane.js +23 -7
  668. package/dist/layout/SplitPane.js.map +1 -1
  669. package/dist/lib/format.cjs +86 -4
  670. package/dist/lib/format.cjs.map +1 -1
  671. package/dist/lib/format.d.ts +69 -0
  672. package/dist/lib/format.d.ts.map +1 -1
  673. package/dist/lib/format.js +86 -4
  674. package/dist/lib/format.js.map +1 -1
  675. package/dist/lib/path-tree.cjs +69 -0
  676. package/dist/lib/path-tree.cjs.map +1 -0
  677. package/dist/lib/path-tree.d.ts +54 -0
  678. package/dist/lib/path-tree.d.ts.map +1 -0
  679. package/dist/lib/path-tree.js +69 -0
  680. package/dist/lib/path-tree.js.map +1 -0
  681. package/dist/monaco.d.ts +1 -0
  682. package/dist/monaco.d.ts.map +1 -1
  683. package/dist/overlay/DropdownMenuSubmenu.cjs +13 -7
  684. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  685. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  686. package/dist/overlay/DropdownMenuSubmenu.js +13 -7
  687. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  688. package/dist/overlay/HoverCard.cjs.map +1 -1
  689. package/dist/overlay/HoverCard.d.ts +2 -2
  690. package/dist/overlay/HoverCard.d.ts.map +1 -1
  691. package/dist/overlay/HoverCard.js.map +1 -1
  692. package/dist/overlay/Tour.cjs +173 -0
  693. package/dist/overlay/Tour.cjs.map +1 -0
  694. package/dist/overlay/Tour.d.ts +61 -0
  695. package/dist/overlay/Tour.d.ts.map +1 -0
  696. package/dist/overlay/Tour.js +173 -0
  697. package/dist/overlay/Tour.js.map +1 -0
  698. package/dist/overlay/TourCard.cjs +108 -0
  699. package/dist/overlay/TourCard.cjs.map +1 -0
  700. package/dist/overlay/TourCard.d.ts +23 -0
  701. package/dist/overlay/TourCard.d.ts.map +1 -0
  702. package/dist/overlay/TourCard.js +108 -0
  703. package/dist/overlay/TourCard.js.map +1 -0
  704. package/dist/overlay/TourProvider.cjs +160 -0
  705. package/dist/overlay/TourProvider.cjs.map +1 -0
  706. package/dist/overlay/TourProvider.d.ts +31 -0
  707. package/dist/overlay/TourProvider.d.ts.map +1 -0
  708. package/dist/overlay/TourProvider.js +160 -0
  709. package/dist/overlay/TourProvider.js.map +1 -0
  710. package/dist/overlay/TourSpotlight.cjs +47 -0
  711. package/dist/overlay/TourSpotlight.cjs.map +1 -0
  712. package/dist/overlay/TourSpotlight.d.ts +12 -0
  713. package/dist/overlay/TourSpotlight.d.ts.map +1 -0
  714. package/dist/overlay/TourSpotlight.js +47 -0
  715. package/dist/overlay/TourSpotlight.js.map +1 -0
  716. package/dist/overlay/modalStack.cjs +18 -4
  717. package/dist/overlay/modalStack.cjs.map +1 -1
  718. package/dist/overlay/modalStack.d.ts +10 -2
  719. package/dist/overlay/modalStack.d.ts.map +1 -1
  720. package/dist/overlay/modalStack.js +19 -5
  721. package/dist/overlay/modalStack.js.map +1 -1
  722. package/dist/overlay/tour-anchor.cjs +114 -0
  723. package/dist/overlay/tour-anchor.cjs.map +1 -0
  724. package/dist/overlay/tour-anchor.d.ts +30 -0
  725. package/dist/overlay/tour-anchor.d.ts.map +1 -0
  726. package/dist/overlay/tour-anchor.js +114 -0
  727. package/dist/overlay/tour-anchor.js.map +1 -0
  728. package/dist/overlay/tour-context.cjs +12 -0
  729. package/dist/overlay/tour-context.cjs.map +1 -0
  730. package/dist/overlay/tour-context.d.ts +40 -0
  731. package/dist/overlay/tour-context.d.ts.map +1 -0
  732. package/dist/overlay/tour-context.js +12 -0
  733. package/dist/overlay/tour-context.js.map +1 -0
  734. package/dist/overlay/tour-geometry.cjs +65 -0
  735. package/dist/overlay/tour-geometry.cjs.map +1 -0
  736. package/dist/overlay/tour-geometry.d.ts +47 -0
  737. package/dist/overlay/tour-geometry.d.ts.map +1 -0
  738. package/dist/overlay/tour-geometry.js +65 -0
  739. package/dist/overlay/tour-geometry.js.map +1 -0
  740. package/dist/overlay/tour-model.cjs +79 -0
  741. package/dist/overlay/tour-model.cjs.map +1 -0
  742. package/dist/overlay/tour-model.d.ts +29 -0
  743. package/dist/overlay/tour-model.d.ts.map +1 -0
  744. package/dist/overlay/tour-model.js +79 -0
  745. package/dist/overlay/tour-model.js.map +1 -0
  746. package/dist/overlay/tour-progress.cjs +54 -0
  747. package/dist/overlay/tour-progress.cjs.map +1 -0
  748. package/dist/overlay/tour-progress.d.ts +40 -0
  749. package/dist/overlay/tour-progress.d.ts.map +1 -0
  750. package/dist/overlay/tour-progress.js +54 -0
  751. package/dist/overlay/tour-progress.js.map +1 -0
  752. package/dist/overlay/tour-types.d.ts +144 -0
  753. package/dist/overlay/tour-types.d.ts.map +1 -0
  754. package/dist/overlay/use-tour-anchor.cjs +43 -0
  755. package/dist/overlay/use-tour-anchor.cjs.map +1 -0
  756. package/dist/overlay/use-tour-anchor.d.ts +23 -0
  757. package/dist/overlay/use-tour-anchor.d.ts.map +1 -0
  758. package/dist/overlay/use-tour-anchor.js +43 -0
  759. package/dist/overlay/use-tour-anchor.js.map +1 -0
  760. package/dist/overlay/use-tour-rect.cjs +33 -0
  761. package/dist/overlay/use-tour-rect.cjs.map +1 -0
  762. package/dist/overlay/use-tour-rect.d.ts +12 -0
  763. package/dist/overlay/use-tour-rect.d.ts.map +1 -0
  764. package/dist/overlay/use-tour-rect.js +33 -0
  765. package/dist/overlay/use-tour-rect.js.map +1 -0
  766. package/dist/overlay/use-tour-step.cjs +66 -0
  767. package/dist/overlay/use-tour-step.cjs.map +1 -0
  768. package/dist/overlay/use-tour-step.d.ts +45 -0
  769. package/dist/overlay/use-tour-step.d.ts.map +1 -0
  770. package/dist/overlay/use-tour-step.js +66 -0
  771. package/dist/overlay/use-tour-step.js.map +1 -0
  772. package/dist/overlay/zIndex.cjs +8 -0
  773. package/dist/overlay/zIndex.cjs.map +1 -1
  774. package/dist/overlay/zIndex.d.ts +8 -0
  775. package/dist/overlay/zIndex.d.ts.map +1 -1
  776. package/dist/overlay/zIndex.js +8 -0
  777. package/dist/overlay/zIndex.js.map +1 -1
  778. package/dist/rpc/CommandOutput.cjs +8 -0
  779. package/dist/rpc/CommandOutput.cjs.map +1 -1
  780. package/dist/rpc/CommandOutput.d.ts +4 -1
  781. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  782. package/dist/rpc/CommandOutput.js +8 -0
  783. package/dist/rpc/CommandOutput.js.map +1 -1
  784. package/dist/rpc/EntityExplorerApp.cjs +10 -16
  785. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  786. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  787. package/dist/rpc/EntityExplorerApp.js +10 -16
  788. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  789. package/dist/rpc/OperationActionBar.cjs +1 -1
  790. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  791. package/dist/rpc/OperationActionBar.js +1 -1
  792. package/dist/rpc/OperationActionBar.js.map +1 -1
  793. package/dist/rpc/OperationCatalog.cjs +111 -58
  794. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  795. package/dist/rpc/OperationCatalog.d.ts +1 -6
  796. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  797. package/dist/rpc/OperationCatalog.js +112 -59
  798. package/dist/rpc/OperationCatalog.js.map +1 -1
  799. package/dist/rpc/OperationResultView.cjs +44 -0
  800. package/dist/rpc/OperationResultView.cjs.map +1 -1
  801. package/dist/rpc/OperationResultView.d.ts +8 -1
  802. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  803. package/dist/rpc/OperationResultView.js +44 -0
  804. package/dist/rpc/OperationResultView.js.map +1 -1
  805. package/dist/rpc/SchemaActionForm.cjs +2 -21
  806. package/dist/rpc/SchemaActionForm.cjs.map +1 -1
  807. package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
  808. package/dist/rpc/SchemaActionForm.js +3 -22
  809. package/dist/rpc/SchemaActionForm.js.map +1 -1
  810. package/dist/rpc/apiClient.cjs +16 -2
  811. package/dist/rpc/apiClient.cjs.map +1 -1
  812. package/dist/rpc/apiClient.d.ts.map +1 -1
  813. package/dist/rpc/apiClient.js +16 -2
  814. package/dist/rpc/apiClient.js.map +1 -1
  815. package/dist/rpc/formMetadata.cjs +89 -49
  816. package/dist/rpc/formMetadata.cjs.map +1 -1
  817. package/dist/rpc/formMetadata.d.ts +14 -6
  818. package/dist/rpc/formMetadata.d.ts.map +1 -1
  819. package/dist/rpc/formMetadata.js +87 -47
  820. package/dist/rpc/formMetadata.js.map +1 -1
  821. package/dist/rpc/operationFilterSearch.cjs +23 -0
  822. package/dist/rpc/operationFilterSearch.cjs.map +1 -0
  823. package/dist/rpc/operationFilterSearch.d.ts +22 -0
  824. package/dist/rpc/operationFilterSearch.d.ts.map +1 -0
  825. package/dist/rpc/operationFilterSearch.js +23 -0
  826. package/dist/rpc/operationFilterSearch.js.map +1 -0
  827. package/dist/rpc/operationLookupFetcher.cjs +28 -0
  828. package/dist/rpc/operationLookupFetcher.cjs.map +1 -0
  829. package/dist/rpc/operationLookupFetcher.d.ts +17 -0
  830. package/dist/rpc/operationLookupFetcher.d.ts.map +1 -0
  831. package/dist/rpc/operationLookupFetcher.js +28 -0
  832. package/dist/rpc/operationLookupFetcher.js.map +1 -0
  833. package/dist/rpc/surfaceNav.cjs +77 -0
  834. package/dist/rpc/surfaceNav.cjs.map +1 -0
  835. package/dist/rpc/surfaceNav.d.ts +19 -0
  836. package/dist/rpc/surfaceNav.d.ts.map +1 -0
  837. package/dist/rpc/surfaceNav.js +77 -0
  838. package/dist/rpc/surfaceNav.js.map +1 -0
  839. package/dist/rpc/types.cjs.map +1 -1
  840. package/dist/rpc/types.d.ts +12 -1
  841. package/dist/rpc/types.d.ts.map +1 -1
  842. package/dist/rpc/types.js.map +1 -1
  843. package/dist/rpc.cjs +2 -0
  844. package/dist/rpc.cjs.map +1 -1
  845. package/dist/rpc.d.ts +1 -0
  846. package/dist/rpc.d.ts.map +1 -1
  847. package/dist/rpc.js +2 -0
  848. package/dist/rpc.js.map +1 -1
  849. package/dist/styles.css +1 -1
  850. package/dist/tailwind-preset.cjs +4 -0
  851. package/dist/tailwind-preset.cjs.map +1 -1
  852. package/dist/tailwind-preset.d.ts.map +1 -1
  853. package/dist/tailwind-preset.js +4 -0
  854. package/dist/tailwind-preset.js.map +1 -1
  855. package/dist/utils.cjs +8 -0
  856. package/dist/utils.cjs.map +1 -1
  857. package/dist/utils.d.ts +2 -1
  858. package/dist/utils.d.ts.map +1 -1
  859. package/dist/utils.js +10 -2
  860. package/dist/utils.js.map +1 -1
  861. package/package.json +1 -1
  862. package/dist/data/ai/RuntimeBar.cjs.map +0 -1
  863. package/dist/data/ai/RuntimeBar.d.ts +0 -27
  864. package/dist/data/ai/RuntimeBar.d.ts.map +0 -1
  865. package/dist/data/ai/RuntimeBar.js.map +0 -1
  866. package/dist/data/ai/model-capabilities.cjs.map +0 -1
  867. package/dist/data/ai/model-capabilities.d.ts.map +0 -1
  868. package/dist/data/ai/model-capabilities.js.map +0 -1
  869. package/dist/data/ai/runtime-mode.cjs.map +0 -1
  870. package/dist/data/ai/runtime-mode.d.ts.map +0 -1
  871. package/dist/data/ai/runtime-mode.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { isUnavailable, isSelectableModel } from "./availability.js";
1
2
  import { UiRobotAi } from "../../icons/components/UiRobotAi.js";
2
3
  import { UiTerminal } from "../../icons/components/UiTerminal.js";
3
4
  import { UiColumns } from "../../icons/components/UiColumns.js";
@@ -8,9 +9,27 @@ const SPEC_RUNTIME_FAMILIES = [
8
9
  label: "Claude",
9
10
  provider: "claude-agent",
10
11
  modes: [
11
- { id: "agent", label: "Agent", backend: "claude-agent", icon: UiRobotAi, title: "Claude Agent SDK" },
12
- { id: "cli", label: "CLI", backend: "claude-cli", icon: UiTerminal, title: "Claude Code CLI" },
13
- { id: "cmux", label: "cmux", backend: "claude-cmux", icon: UiColumns, title: "Claude multiplexer" }
12
+ {
13
+ id: "agent",
14
+ label: "Agent",
15
+ backend: "claude-agent",
16
+ icon: UiRobotAi,
17
+ title: "Claude Agent SDK"
18
+ },
19
+ {
20
+ id: "cli",
21
+ label: "CLI",
22
+ backend: "claude-cli",
23
+ icon: UiTerminal,
24
+ title: "Claude Code CLI"
25
+ },
26
+ {
27
+ id: "cmux",
28
+ label: "cmux",
29
+ backend: "claude-cmux",
30
+ icon: UiColumns,
31
+ title: "Claude multiplexer"
32
+ }
14
33
  ]
15
34
  },
16
35
  {
@@ -18,37 +37,91 @@ const SPEC_RUNTIME_FAMILIES = [
18
37
  label: "Codex",
19
38
  provider: "codex-cli",
20
39
  modes: [
21
- { id: "agent", label: "Agent", backend: "codex-agent", icon: UiRobotAi, title: "Codex agent" },
22
- { id: "cli", label: "CLI", backend: "codex-cli", icon: UiTerminal, title: "Codex CLI" },
23
- { id: "cmux", label: "cmux", backend: "codex-cmux", icon: UiColumns, title: "Codex multiplexer" }
40
+ {
41
+ id: "agent",
42
+ label: "Agent",
43
+ backend: "codex-agent",
44
+ icon: UiRobotAi,
45
+ title: "Codex agent"
46
+ },
47
+ {
48
+ id: "cli",
49
+ label: "CLI",
50
+ backend: "codex-cli",
51
+ icon: UiTerminal,
52
+ title: "Codex CLI"
53
+ },
54
+ {
55
+ id: "cmux",
56
+ label: "cmux",
57
+ backend: "codex-cmux",
58
+ icon: UiColumns,
59
+ title: "Codex multiplexer"
60
+ }
24
61
  ]
25
62
  },
26
63
  {
27
64
  id: "openai",
28
65
  label: "OpenAI",
29
66
  provider: "openai",
30
- modes: [{ id: "api", label: "API", backend: "openai", icon: UiCloud, title: "OpenAI API" }]
67
+ modes: [
68
+ {
69
+ id: "api",
70
+ label: "API",
71
+ backend: "openai",
72
+ icon: UiCloud,
73
+ title: "OpenAI API"
74
+ }
75
+ ]
31
76
  },
32
77
  {
33
78
  id: "anthropic",
34
79
  label: "Anthropic",
35
80
  provider: "anthropic",
36
- modes: [{ id: "api", label: "API", backend: "anthropic", icon: UiCloud, title: "Anthropic API" }]
81
+ modes: [
82
+ {
83
+ id: "api",
84
+ label: "API",
85
+ backend: "anthropic",
86
+ icon: UiCloud,
87
+ title: "Anthropic API"
88
+ }
89
+ ]
37
90
  },
38
91
  {
39
92
  id: "gemini",
40
93
  label: "Gemini",
41
94
  provider: "googleai",
42
95
  modes: [
43
- { id: "api", label: "API", backend: "gemini", icon: UiCloud, title: "Gemini API" },
44
- { id: "cli", label: "CLI", backend: "gemini-cli", icon: UiTerminal, title: "Gemini CLI" }
96
+ {
97
+ id: "api",
98
+ label: "API",
99
+ backend: "gemini",
100
+ icon: UiCloud,
101
+ title: "Gemini API"
102
+ },
103
+ {
104
+ id: "cli",
105
+ label: "CLI",
106
+ backend: "gemini-cli",
107
+ icon: UiTerminal,
108
+ title: "Gemini CLI"
109
+ }
45
110
  ]
46
111
  },
47
112
  {
48
113
  id: "deepseek",
49
114
  label: "DeepSeek",
50
115
  provider: "deepseek",
51
- modes: [{ id: "api", label: "API", backend: "deepseek", icon: UiCloud, title: "DeepSeek API" }]
116
+ modes: [
117
+ {
118
+ id: "api",
119
+ label: "API",
120
+ backend: "deepseek",
121
+ icon: UiCloud,
122
+ title: "DeepSeek API"
123
+ }
124
+ ]
52
125
  }
53
126
  ];
54
127
  const MODE_ICONS = {
@@ -57,7 +130,11 @@ const MODE_ICONS = {
57
130
  cli: UiTerminal,
58
131
  cmux: UiColumns
59
132
  };
60
- const MODE_LABELS = { api: "API", cli: "CLI", cmux: "cmux" };
133
+ const MODE_LABELS = {
134
+ api: "API",
135
+ cli: "CLI",
136
+ cmux: "cmux"
137
+ };
61
138
  const MODE_TITLES = {
62
139
  api: "API",
63
140
  agent: "Agent SDK",
@@ -73,14 +150,21 @@ function familiesFromRuntimeCatalog(catalog) {
73
150
  const families = [];
74
151
  for (const entry of catalog) {
75
152
  const label = FAMILY_LABELS[entry.family] ?? titleCase(entry.family);
76
- const modes = entry.modes.filter((mode) => !mode.disabled).map((mode) => ({
153
+ const modes = entry.modes.map((mode) => ({
77
154
  id: mode.mode,
78
155
  label: MODE_LABELS[mode.mode] ?? titleCase(mode.mode),
79
156
  backend: mode.backend,
80
157
  icon: MODE_ICONS[mode.mode],
81
- title: `${label} ${MODE_TITLES[mode.mode] ?? titleCase(mode.mode)}`
158
+ title: `${label} ${MODE_TITLES[mode.mode] ?? titleCase(mode.mode)}`,
159
+ provider: mode.catalogProvider ?? entry.catalogPrefix,
160
+ ...mode.availability ? { availability: mode.availability } : mode.disabled ? {
161
+ availability: {
162
+ state: "disabled",
163
+ reason: `Disabled by ${mode.disabledReason ?? mode.backend} in Captain configuration.`,
164
+ remediation: `Enable ${mode.disabledReason ?? mode.backend} on the Whoami page, then refresh.`
165
+ }
166
+ } : {}
82
167
  }));
83
- if (!modes.length) continue;
84
168
  families.push({
85
169
  id: entry.family,
86
170
  label,
@@ -98,9 +182,11 @@ function familyById(families, id) {
98
182
  return first;
99
183
  }
100
184
  function firstMode(family) {
101
- const mode = family.modes[0];
185
+ const mode = family.modes.find((candidate) => !isUnavailable(candidate.availability)) ?? family.modes[0];
102
186
  if (!mode) {
103
- throw new Error(`SpecRuntimeFamily "${family.id}" must have at least one mode`);
187
+ throw new Error(
188
+ `SpecRuntimeFamily "${family.id}" must have at least one mode`
189
+ );
104
190
  }
105
191
  return mode;
106
192
  }
@@ -115,7 +201,13 @@ function runtimeModeOptions(families) {
115
201
  }
116
202
  function backendForFamilyMode(families, familyId, modeId) {
117
203
  const family = familyById(families, familyId);
118
- const mode = family.modes.find((candidate) => candidate.id === modeId) ?? firstMode(family);
204
+ const requested = family.modes.find((candidate) => candidate.id === modeId);
205
+ const mode = requested && !isUnavailable(requested.availability) ? requested : firstMode(family);
206
+ if (isUnavailable(mode.availability)) {
207
+ throw new Error(
208
+ `SpecRuntimeFamily "${family.id}" has no available runtime modes`
209
+ );
210
+ }
119
211
  return mode.backend;
120
212
  }
121
213
  function selectionForBackend(families, backend) {
@@ -159,16 +251,25 @@ function labelForBackend(backend, families = SPEC_RUNTIME_FAMILIES) {
159
251
  return "Prompt default";
160
252
  }
161
253
  function modelsForFamily(models, family, backend) {
162
- if (!family) return models;
254
+ var _a;
255
+ if (!family) return models.filter(isSelectableModel);
256
+ const provider = ((_a = family.modes.find((mode) => mode.backend === backend)) == null ? void 0 : _a.provider) ?? family.provider;
163
257
  return models.filter(
164
- (model) => model.provider === family.provider && modelMatchesBackend(model, backend)
258
+ (model) => isSelectableModel(model) && model.provider === provider && modelMatchesBackend(model, backend)
165
259
  );
166
260
  }
167
261
  function modelBelongsToFamily(modelId, models, family, backend) {
262
+ var _a;
168
263
  if (!modelId) return true;
169
- const selected = models.find((model) => model.id === modelId);
264
+ const selected = models.find(
265
+ (model) => {
266
+ var _a2, _b;
267
+ return isSelectableModel(model) && (model.id === modelId || ((_a2 = model.runtime) == null ? void 0 : _a2.model) === modelId || ((_b = model.runtime) == null ? void 0 : _b.id) === modelId);
268
+ }
269
+ );
170
270
  if (!selected) return false;
171
- const providerMatches = !family || selected.provider === family.provider;
271
+ const provider = ((_a = family == null ? void 0 : family.modes.find((mode) => mode.backend === backend)) == null ? void 0 : _a.provider) ?? (family == null ? void 0 : family.provider);
272
+ const providerMatches = !provider || selected.provider === provider;
172
273
  return providerMatches && modelMatchesBackend(selected, backend);
173
274
  }
174
275
  function modelMatchesBackend(model, backend) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-mode.js","sources":["../../../src/data/runtime/runtime-mode.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { UiCloud, UiColumns, UiRobotAi, UiTerminal } from \"../../icons\";\nimport type { ChatModel, RuntimeAvailability } from \"../chat/types\";\nimport {\n availabilityText,\n isSelectableModel,\n isUnavailable,\n unsupportedAvailability,\n} from \"./availability\";\n\n// A backend runtime is factored into two UI axes — a provider\n// **family** (Claude, OpenAI, …) and a **mode** within it (Agent, CLI, cmux,\n// API) — that together resolve to a single `spec.backend` string. This is the\n// only place that mapping lives; both the inline PromptRunEditor and the modal\n// SpecRuntimeEditor drive their Mode pickers from it.\n\nexport type SpecRuntimeModeOption = {\n /** UI mode id within a family (e.g. \"agent\", \"cli\", \"cmux\", \"api\"). */\n id: string;\n label: string;\n /** The concrete `spec.backend` this (family, mode) resolves to. */\n backend: string;\n icon?: StaticIconComponent | undefined;\n title?: string | undefined;\n provider?: string | undefined;\n availability?: RuntimeAvailability | undefined;\n};\n\nexport type SpecRuntimeFamily = {\n id: string;\n label: string;\n /** The model-catalog provider (`ChatModel.provider`) whose models this family runs. */\n provider: string;\n modes: SpecRuntimeModeOption[];\n};\n\n// Default catalog covering the captain/gavel backend set. Hosts may pass their\n// own via the `families` prop when their catalog differs.\nexport const SPEC_RUNTIME_FAMILIES: SpecRuntimeFamily[] = [\n {\n id: \"claude\",\n label: \"Claude\",\n provider: \"claude-agent\",\n modes: [\n {\n id: \"agent\",\n label: \"Agent\",\n backend: \"claude-agent\",\n icon: UiRobotAi,\n title: \"Claude Agent SDK\",\n },\n {\n id: \"cli\",\n label: \"CLI\",\n backend: \"claude-cli\",\n icon: UiTerminal,\n title: \"Claude Code CLI\",\n },\n {\n id: \"cmux\",\n label: \"cmux\",\n backend: \"claude-cmux\",\n icon: UiColumns,\n title: \"Claude multiplexer\",\n },\n ],\n },\n {\n id: \"codex\",\n label: \"Codex\",\n provider: \"codex-cli\",\n modes: [\n {\n id: \"agent\",\n label: \"Agent\",\n backend: \"codex-agent\",\n icon: UiRobotAi,\n title: \"Codex agent\",\n },\n {\n id: \"cli\",\n label: \"CLI\",\n backend: \"codex-cli\",\n icon: UiTerminal,\n title: \"Codex CLI\",\n },\n {\n id: \"cmux\",\n label: \"cmux\",\n backend: \"codex-cmux\",\n icon: UiColumns,\n title: \"Codex multiplexer\",\n },\n ],\n },\n {\n id: \"openai\",\n label: \"OpenAI\",\n provider: \"openai\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n backend: \"openai\",\n icon: UiCloud,\n title: \"OpenAI API\",\n },\n ],\n },\n {\n id: \"anthropic\",\n label: \"Anthropic\",\n provider: \"anthropic\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n backend: \"anthropic\",\n icon: UiCloud,\n title: \"Anthropic API\",\n },\n ],\n },\n {\n id: \"gemini\",\n label: \"Gemini\",\n provider: \"googleai\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n backend: \"gemini\",\n icon: UiCloud,\n title: \"Gemini API\",\n },\n {\n id: \"cli\",\n label: \"CLI\",\n backend: \"gemini-cli\",\n icon: UiTerminal,\n title: \"Gemini CLI\",\n },\n ],\n },\n {\n id: \"deepseek\",\n label: \"DeepSeek\",\n provider: \"deepseek\",\n modes: [\n {\n id: \"api\",\n label: \"API\",\n backend: \"deepseek\",\n icon: UiCloud,\n title: \"DeepSeek API\",\n },\n ],\n },\n];\n\n// One provider×mode cell as captain serves it (`/whoami`.runtimes and the prompt\n// schema document's `runtimes`), projected from its model registry. It carries\n// ids, not display text: `claude`/`api` are enough to render both, and a served\n// label would be a second place for presentation to drift.\nexport type RuntimeCatalogMode = {\n /** api | agent | cli | cmux */\n mode: string;\n /** The concrete `spec.backend`, e.g. \"claude-cmux\". */\n backend: string;\n /** \"api\" (remote, in-process) or \"cli\" (supervised local binary). */\n kind?: string | undefined;\n /** Rides the local CLI's own login; never consults an API key. */\n keyless?: boolean | undefined;\n /** The model id a picker should seed this mode with. */\n defaultModel?: string | undefined;\n /** The user switched this off in `~/.captain.yaml`. */\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n /** Model-catalog provider used by this exact mode. */\n catalogProvider?: string | undefined;\n availability?: RuntimeAvailability | undefined;\n};\n\nexport type RuntimeCatalogFamily = {\n /** The coding-agent name: claude | codex | gemini | deepseek. */\n family: string;\n /** The canonical provider key: anthropic | openai | google | deepseek. */\n provider: string;\n /** The namespace this provider's model ids carry (`ChatModel.provider`). */\n catalogPrefix: string;\n modes: RuntimeCatalogMode[];\n};\n\nconst MODE_ICONS: Record<string, StaticIconComponent> = {\n api: UiCloud,\n agent: UiRobotAi,\n cli: UiTerminal,\n cmux: UiColumns,\n};\n\n// Mode ids are lowercase tokens; only the acronyms and the lowercase brand\n// \"cmux\" need spelling out. `agent` falls through to plain title case.\nconst MODE_LABELS: Record<string, string> = {\n api: \"API\",\n cli: \"CLI\",\n cmux: \"cmux\",\n};\n\n// Tooltip text, so \"Claude cmux\" reads as \"Claude multiplexer\".\nconst MODE_TITLES: Record<string, string> = {\n api: \"API\",\n agent: \"Agent SDK\",\n cli: \"CLI\",\n cmux: \"multiplexer\",\n};\n\n// The one brand whose title case is not just an initial capital.\nconst FAMILY_LABELS: Record<string, string> = { deepseek: \"DeepSeek\" };\n\nfunction titleCase(token: string): string {\n return token ? token.charAt(0).toUpperCase() + token.slice(1) : token;\n}\n\n// Turns the served catalog into the shared family list. Unavailable entries\n// stay present for Provider Status while runtime controls filter them out.\n//\n// The registry has one provider per family, so Claude's API mode sits beside its\n// Agent/CLI/cmux modes here rather than in a separate \"Anthropic\" family the way\n// SPEC_RUNTIME_FAMILIES splits them.\nexport function familiesFromRuntimeCatalog(\n catalog: RuntimeCatalogFamily[] | undefined\n): SpecRuntimeFamily[] {\n if (!catalog?.length) return SPEC_RUNTIME_FAMILIES;\n const families: SpecRuntimeFamily[] = [];\n for (const entry of catalog) {\n const label = FAMILY_LABELS[entry.family] ?? titleCase(entry.family);\n const modes = entry.modes.map((mode) => ({\n id: mode.mode,\n label: MODE_LABELS[mode.mode] ?? titleCase(mode.mode),\n backend: mode.backend,\n icon: MODE_ICONS[mode.mode],\n title: `${label} ${MODE_TITLES[mode.mode] ?? titleCase(mode.mode)}`,\n provider: mode.catalogProvider ?? entry.catalogPrefix,\n ...(mode.availability\n ? { availability: mode.availability }\n : mode.disabled\n ? {\n availability: {\n state: \"disabled\" as const,\n reason: `Disabled by ${\n mode.disabledReason ?? mode.backend\n } in Captain configuration.`,\n remediation: `Enable ${\n mode.disabledReason ?? mode.backend\n } on the Whoami page, then refresh.`,\n },\n }\n : {}),\n }));\n families.push({\n id: entry.family,\n label,\n provider: entry.catalogPrefix,\n modes,\n });\n }\n return families.length ? families : SPEC_RUNTIME_FAMILIES;\n}\n\nexport function familyById(\n families: SpecRuntimeFamily[],\n id: string\n): SpecRuntimeFamily {\n const match = families.find((family) => family.id === id);\n if (match) return match;\n const first = families[0];\n if (!first) throw new Error(\"SpecRuntimeFamily catalog must not be empty\");\n return first;\n}\n\nexport function firstMode(family: SpecRuntimeFamily): SpecRuntimeModeOption {\n const mode =\n family.modes.find((candidate) => !isUnavailable(candidate.availability)) ??\n family.modes[0];\n if (!mode) {\n throw new Error(\n `SpecRuntimeFamily \"${family.id}\" must have at least one mode`\n );\n }\n return mode;\n}\n\n// Every mode id in the catalog, first-seen order. The returned `backend` belongs\n// to the family that declared the mode first — resolve the real one with\n// `backendForFamilyMode`.\nexport function runtimeModeOptions(\n families: SpecRuntimeFamily[]\n): SpecRuntimeModeOption[] {\n const modes = new Map<string, SpecRuntimeModeOption>();\n for (const family of families) {\n for (const mode of family.modes) {\n if (!modes.has(mode.id)) modes.set(mode.id, mode);\n }\n }\n return [...modes.values()];\n}\n\n// One phrasing for \"this family does not offer that mode\", shared by every\n// runtime presentation so the same state never reads two ways.\nexport function unsupportedModeTitle(family: SpecRuntimeFamily): string {\n return availabilityText(\n unsupportedAvailability(\n family.label,\n \"this\",\n family.modes\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => mode.label)\n )\n )!;\n}\n\nexport function unsupportedModeAvailability(\n family: SpecRuntimeFamily,\n mode: SpecRuntimeModeOption\n): RuntimeAvailability {\n return unsupportedAvailability(\n family.label,\n mode.label,\n family.modes\n .filter((candidate) => !isUnavailable(candidate.availability))\n .map((candidate) => candidate.label)\n );\n}\n\nexport function backendForFamilyMode(\n families: SpecRuntimeFamily[],\n familyId: string,\n modeId: string\n): string {\n const family = familyById(families, familyId);\n const requested = family.modes.find((candidate) => candidate.id === modeId);\n const mode =\n requested && !isUnavailable(requested.availability)\n ? requested\n : firstMode(family);\n if (isUnavailable(mode.availability)) {\n throw new Error(\n `SpecRuntimeFamily \"${family.id}\" has no available runtime modes`\n );\n }\n return mode.backend;\n}\n\nexport function selectionForBackend(\n families: SpecRuntimeFamily[],\n backend: string | undefined\n): { family: string; mode: string } {\n const target = (backend ?? \"\").toLowerCase();\n for (const family of families) {\n for (const mode of family.modes) {\n if (mode.backend.toLowerCase() === target) {\n return { family: family.id, mode: mode.id };\n }\n }\n }\n const first = familyById(families, \"\");\n return { family: first.id, mode: firstMode(first).id };\n}\n\nexport function familyForBackend(\n families: SpecRuntimeFamily[],\n backend: string | undefined\n): SpecRuntimeFamily | undefined {\n const target = (backend ?? \"\").toLowerCase();\n return families.find((family) =>\n family.modes.some((mode) => mode.backend.toLowerCase() === target)\n );\n}\n\n// The mode a backend id names, or undefined when the catalog does not declare\n// it. Unlike `selectionForBackend` this does not fall back to the first family,\n// so a summary can stay silent about a runtime it cannot identify.\nexport function modeForBackend(\n families: SpecRuntimeFamily[],\n backend: string | undefined\n): SpecRuntimeModeOption | undefined {\n const target = (backend ?? \"\").toLowerCase();\n if (!target) return undefined;\n for (const family of families) {\n const mode = family.modes.find(\n (entry) => entry.backend.toLowerCase() === target\n );\n if (mode) return mode;\n }\n return undefined;\n}\n\n// \"claude-agent\" -> \"Claude Agent\"; unknown/empty -> \"Prompt default\".\nexport function labelForBackend(\n backend: string | undefined,\n families: SpecRuntimeFamily[] = SPEC_RUNTIME_FAMILIES\n): string {\n const target = (backend ?? \"\").toLowerCase();\n for (const family of families) {\n for (const mode of family.modes) {\n if (mode.backend.toLowerCase() === target) {\n return `${family.label} ${mode.label}`;\n }\n }\n }\n return \"Prompt default\";\n}\n\nexport function modelsForFamily(\n models: ChatModel[],\n family: SpecRuntimeFamily | undefined,\n backend?: string | undefined\n): ChatModel[] {\n if (!family) return models.filter(isSelectableModel);\n const provider =\n family.modes.find((mode) => mode.backend === backend)?.provider ??\n family.provider;\n return models.filter(\n (model) =>\n isSelectableModel(model) &&\n model.provider === provider &&\n modelMatchesBackend(model, backend)\n );\n}\n\nexport function modelBelongsToFamily(\n modelId: string | undefined,\n models: ChatModel[],\n family: SpecRuntimeFamily | undefined,\n backend?: string | undefined\n): boolean {\n if (!modelId) return true;\n const selected = models.find(\n (model) =>\n isSelectableModel(model) &&\n (model.id === modelId ||\n model.runtime?.model === modelId ||\n model.runtime?.id === modelId)\n );\n if (!selected) return false;\n const provider =\n family?.modes.find((mode) => mode.backend === backend)?.provider ??\n family?.provider;\n const providerMatches = !provider || selected.provider === provider;\n return providerMatches && modelMatchesBackend(selected, backend);\n}\n\nfunction modelMatchesBackend(\n model: ChatModel,\n backend: string | undefined\n): boolean {\n if (!backend) return true;\n const backends = model.backends?.filter(Boolean);\n if (!backends || backends.length === 0) return true;\n return backends.includes(backend);\n}\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const METRIC_LABELS = {
4
+ total: "Total",
5
+ command: "Command",
6
+ format: "Format response",
7
+ sql: "SQL",
8
+ redis: "Redis"
9
+ };
10
+ const COUNTER_LABELS = {
11
+ queries: ["query", "queries"],
12
+ rows_returned: ["row returned", "rows returned"],
13
+ rows_scanned: ["row scanned", "rows scanned"],
14
+ ops: ["operation", "operations"],
15
+ hits: ["hit", "hits"],
16
+ misses: ["miss", "misses"],
17
+ errors: ["error", "errors"]
18
+ };
19
+ function splitOutsideQuotes(value, delimiter) {
20
+ const parts = [];
21
+ let start = 0;
22
+ let quoted = false;
23
+ let escaped = false;
24
+ for (let index = 0; index < value.length; index += 1) {
25
+ const character = value[index];
26
+ if (escaped) {
27
+ escaped = false;
28
+ continue;
29
+ }
30
+ if (quoted && character === "\\") {
31
+ escaped = true;
32
+ continue;
33
+ }
34
+ if (character === '"') {
35
+ quoted = !quoted;
36
+ continue;
37
+ }
38
+ if (!quoted && character === delimiter) {
39
+ parts.push(value.slice(start, index).trim());
40
+ start = index + 1;
41
+ }
42
+ }
43
+ parts.push(value.slice(start).trim());
44
+ return parts.filter(Boolean);
45
+ }
46
+ function decodeParameterValue(value) {
47
+ if (!value.startsWith('"') || !value.endsWith('"')) return value;
48
+ return value.slice(1, -1).replace(/\\(["\\])/g, "$1");
49
+ }
50
+ function parseCounters(description) {
51
+ if (!description) return {};
52
+ const counters = {};
53
+ const pattern = /(?:^|\s)([A-Za-z][A-Za-z0-9_.-]*)=(-?\d+(?:\.\d+)?)(?=\s|$)/g;
54
+ for (const match of description.matchAll(pattern)) {
55
+ const name = match[1];
56
+ const rawValue = match[2];
57
+ if (!name || !rawValue) continue;
58
+ const value = Number(rawValue);
59
+ if (Number.isFinite(value)) counters[name] = value;
60
+ }
61
+ return counters;
62
+ }
63
+ function humanize(value) {
64
+ const words = value.replace(/[_-]+/g, " ").trim();
65
+ return words ? words[0].toUpperCase() + words.slice(1) : value;
66
+ }
67
+ function parseServerTiming(header) {
68
+ if (!(header == null ? void 0 : header.trim())) return [];
69
+ return splitOutsideQuotes(header, ",").flatMap((entry) => {
70
+ const tokens = splitOutsideQuotes(entry, ";");
71
+ const name = tokens[0];
72
+ if (!name) return [];
73
+ let duration = 0;
74
+ let description;
75
+ let durationSeen = false;
76
+ for (const token of tokens.slice(1)) {
77
+ const separator = token.indexOf("=");
78
+ if (separator < 0) continue;
79
+ const key = token.slice(0, separator).trim().toLowerCase();
80
+ const value = decodeParameterValue(token.slice(separator + 1).trim());
81
+ if (key === "desc" && description === void 0) description = value;
82
+ if (key === "dur" && !durationSeen) {
83
+ durationSeen = true;
84
+ const parsed = Number(value);
85
+ if (Number.isFinite(parsed) && parsed >= 0) duration = parsed;
86
+ }
87
+ }
88
+ return [{
89
+ name,
90
+ duration,
91
+ counters: parseCounters(description),
92
+ ...description !== void 0 ? { description } : {}
93
+ }];
94
+ });
95
+ }
96
+ function formatServerTimingDuration(milliseconds) {
97
+ if (milliseconds >= 1e3) return `${(milliseconds / 1e3).toFixed(1)} s`;
98
+ if (milliseconds < 10) return `${milliseconds.toFixed(1)} ms`;
99
+ return `${Math.round(milliseconds)} ms`;
100
+ }
101
+ function serverTimingMetricLabel(metric) {
102
+ if (metric.description && Object.keys(metric.counters).length === 0) {
103
+ return metric.description;
104
+ }
105
+ return METRIC_LABELS[metric.name] ?? humanize(metric.name);
106
+ }
107
+ function serverTimingCounterSummary(metric) {
108
+ const counters = Object.entries(metric.counters);
109
+ if (counters.length === 0) return void 0;
110
+ return counters.map(([name, value]) => {
111
+ const labels = COUNTER_LABELS[name];
112
+ const label = (labels == null ? void 0 : labels[Math.abs(value) === 1 ? 0 : 1]) ?? humanize(name).toLowerCase();
113
+ return `${value.toLocaleString("en-US")} ${label}`;
114
+ }).join(" · ");
115
+ }
116
+ exports.formatServerTimingDuration = formatServerTimingDuration;
117
+ exports.parseServerTiming = parseServerTiming;
118
+ exports.serverTimingCounterSummary = serverTimingCounterSummary;
119
+ exports.serverTimingMetricLabel = serverTimingMetricLabel;
120
+ //# sourceMappingURL=server-timing.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-timing.cjs","sources":["../../src/data/server-timing.ts"],"sourcesContent":["export interface ServerTimingMetric {\n name: string;\n duration: number;\n description?: string;\n counters: Record<string, number>;\n}\n\nconst METRIC_LABELS: Record<string, string> = {\n total: \"Total\",\n command: \"Command\",\n format: \"Format response\",\n sql: \"SQL\",\n redis: \"Redis\",\n};\n\nconst COUNTER_LABELS: Record<string, readonly [singular: string, plural: string]> = {\n queries: [\"query\", \"queries\"],\n rows_returned: [\"row returned\", \"rows returned\"],\n rows_scanned: [\"row scanned\", \"rows scanned\"],\n ops: [\"operation\", \"operations\"],\n hits: [\"hit\", \"hits\"],\n misses: [\"miss\", \"misses\"],\n errors: [\"error\", \"errors\"],\n};\n\nfunction splitOutsideQuotes(value: string, delimiter: \",\" | \";\"): string[] {\n const parts: string[] = [];\n let start = 0;\n let quoted = false;\n let escaped = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (quoted && character === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (character === '\"') {\n quoted = !quoted;\n continue;\n }\n if (!quoted && character === delimiter) {\n parts.push(value.slice(start, index).trim());\n start = index + 1;\n }\n }\n parts.push(value.slice(start).trim());\n return parts.filter(Boolean);\n}\n\nfunction decodeParameterValue(value: string): string {\n if (!value.startsWith('\"') || !value.endsWith('\"')) return value;\n return value.slice(1, -1).replace(/\\\\([\"\\\\])/g, \"$1\");\n}\n\nfunction parseCounters(description: string | undefined): Record<string, number> {\n if (!description) return {};\n const counters: Record<string, number> = {};\n const pattern = /(?:^|\\s)([A-Za-z][A-Za-z0-9_.-]*)=(-?\\d+(?:\\.\\d+)?)(?=\\s|$)/g;\n for (const match of description.matchAll(pattern)) {\n const name = match[1];\n const rawValue = match[2];\n if (!name || !rawValue) continue;\n const value = Number(rawValue);\n if (Number.isFinite(value)) counters[name] = value;\n }\n return counters;\n}\n\nfunction humanize(value: string): string {\n const words = value.replace(/[_-]+/g, \" \").trim();\n return words ? words[0]!.toUpperCase() + words.slice(1) : value;\n}\n\nexport function parseServerTiming(\n header: string | null | undefined,\n): ServerTimingMetric[] {\n if (!header?.trim()) return [];\n return splitOutsideQuotes(header, \",\").flatMap((entry) => {\n const tokens = splitOutsideQuotes(entry, \";\");\n const name = tokens[0];\n if (!name) return [];\n let duration = 0;\n let description: string | undefined;\n let durationSeen = false;\n for (const token of tokens.slice(1)) {\n const separator = token.indexOf(\"=\");\n if (separator < 0) continue;\n const key = token.slice(0, separator).trim().toLowerCase();\n const value = decodeParameterValue(token.slice(separator + 1).trim());\n // Server-Timing keeps the first instance of a duplicated parameter name\n // within one metric and ignores the rest.\n if (key === \"desc\" && description === undefined) description = value;\n if (key === \"dur\" && !durationSeen) {\n durationSeen = true;\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed >= 0) duration = parsed;\n }\n }\n return [{\n name,\n duration,\n counters: parseCounters(description),\n ...(description !== undefined ? { description } : {}),\n }];\n });\n}\n\nexport function formatServerTimingDuration(milliseconds: number): string {\n if (milliseconds >= 1000) return `${(milliseconds / 1000).toFixed(1)} s`;\n if (milliseconds < 10) return `${milliseconds.toFixed(1)} ms`;\n return `${Math.round(milliseconds)} ms`;\n}\n\nexport function serverTimingMetricLabel(metric: ServerTimingMetric): string {\n if (metric.description && Object.keys(metric.counters).length === 0) {\n return metric.description;\n }\n return METRIC_LABELS[metric.name] ?? humanize(metric.name);\n}\n\nexport function serverTimingCounterSummary(metric: ServerTimingMetric): string | undefined {\n const counters = Object.entries(metric.counters);\n if (counters.length === 0) return undefined;\n return counters\n .map(([name, value]) => {\n const labels = COUNTER_LABELS[name];\n const label = labels?.[Math.abs(value) === 1 ? 0 : 1] ?? humanize(name).toLowerCase();\n return `${value.toLocaleString(\"en-US\")} ${label}`;\n })\n .join(\" · \");\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface ServerTimingMetric {
2
+ name: string;
3
+ duration: number;
4
+ description?: string;
5
+ counters: Record<string, number>;
6
+ }
7
+ export declare function parseServerTiming(header: string | null | undefined): ServerTimingMetric[];
8
+ export declare function formatServerTimingDuration(milliseconds: number): string;
9
+ export declare function serverTimingMetricLabel(metric: ServerTimingMetric): string;
10
+ export declare function serverTimingCounterSummary(metric: ServerTimingMetric): string | undefined;
11
+ //# sourceMappingURL=server-timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-timing.d.ts","sourceRoot":"","sources":["../../src/data/server-timing.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAyED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,kBAAkB,EAAE,CA8BtB;AAED,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAK1E;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAUzF"}
@@ -0,0 +1,120 @@
1
+ const METRIC_LABELS = {
2
+ total: "Total",
3
+ command: "Command",
4
+ format: "Format response",
5
+ sql: "SQL",
6
+ redis: "Redis"
7
+ };
8
+ const COUNTER_LABELS = {
9
+ queries: ["query", "queries"],
10
+ rows_returned: ["row returned", "rows returned"],
11
+ rows_scanned: ["row scanned", "rows scanned"],
12
+ ops: ["operation", "operations"],
13
+ hits: ["hit", "hits"],
14
+ misses: ["miss", "misses"],
15
+ errors: ["error", "errors"]
16
+ };
17
+ function splitOutsideQuotes(value, delimiter) {
18
+ const parts = [];
19
+ let start = 0;
20
+ let quoted = false;
21
+ let escaped = false;
22
+ for (let index = 0; index < value.length; index += 1) {
23
+ const character = value[index];
24
+ if (escaped) {
25
+ escaped = false;
26
+ continue;
27
+ }
28
+ if (quoted && character === "\\") {
29
+ escaped = true;
30
+ continue;
31
+ }
32
+ if (character === '"') {
33
+ quoted = !quoted;
34
+ continue;
35
+ }
36
+ if (!quoted && character === delimiter) {
37
+ parts.push(value.slice(start, index).trim());
38
+ start = index + 1;
39
+ }
40
+ }
41
+ parts.push(value.slice(start).trim());
42
+ return parts.filter(Boolean);
43
+ }
44
+ function decodeParameterValue(value) {
45
+ if (!value.startsWith('"') || !value.endsWith('"')) return value;
46
+ return value.slice(1, -1).replace(/\\(["\\])/g, "$1");
47
+ }
48
+ function parseCounters(description) {
49
+ if (!description) return {};
50
+ const counters = {};
51
+ const pattern = /(?:^|\s)([A-Za-z][A-Za-z0-9_.-]*)=(-?\d+(?:\.\d+)?)(?=\s|$)/g;
52
+ for (const match of description.matchAll(pattern)) {
53
+ const name = match[1];
54
+ const rawValue = match[2];
55
+ if (!name || !rawValue) continue;
56
+ const value = Number(rawValue);
57
+ if (Number.isFinite(value)) counters[name] = value;
58
+ }
59
+ return counters;
60
+ }
61
+ function humanize(value) {
62
+ const words = value.replace(/[_-]+/g, " ").trim();
63
+ return words ? words[0].toUpperCase() + words.slice(1) : value;
64
+ }
65
+ function parseServerTiming(header) {
66
+ if (!(header == null ? void 0 : header.trim())) return [];
67
+ return splitOutsideQuotes(header, ",").flatMap((entry) => {
68
+ const tokens = splitOutsideQuotes(entry, ";");
69
+ const name = tokens[0];
70
+ if (!name) return [];
71
+ let duration = 0;
72
+ let description;
73
+ let durationSeen = false;
74
+ for (const token of tokens.slice(1)) {
75
+ const separator = token.indexOf("=");
76
+ if (separator < 0) continue;
77
+ const key = token.slice(0, separator).trim().toLowerCase();
78
+ const value = decodeParameterValue(token.slice(separator + 1).trim());
79
+ if (key === "desc" && description === void 0) description = value;
80
+ if (key === "dur" && !durationSeen) {
81
+ durationSeen = true;
82
+ const parsed = Number(value);
83
+ if (Number.isFinite(parsed) && parsed >= 0) duration = parsed;
84
+ }
85
+ }
86
+ return [{
87
+ name,
88
+ duration,
89
+ counters: parseCounters(description),
90
+ ...description !== void 0 ? { description } : {}
91
+ }];
92
+ });
93
+ }
94
+ function formatServerTimingDuration(milliseconds) {
95
+ if (milliseconds >= 1e3) return `${(milliseconds / 1e3).toFixed(1)} s`;
96
+ if (milliseconds < 10) return `${milliseconds.toFixed(1)} ms`;
97
+ return `${Math.round(milliseconds)} ms`;
98
+ }
99
+ function serverTimingMetricLabel(metric) {
100
+ if (metric.description && Object.keys(metric.counters).length === 0) {
101
+ return metric.description;
102
+ }
103
+ return METRIC_LABELS[metric.name] ?? humanize(metric.name);
104
+ }
105
+ function serverTimingCounterSummary(metric) {
106
+ const counters = Object.entries(metric.counters);
107
+ if (counters.length === 0) return void 0;
108
+ return counters.map(([name, value]) => {
109
+ const labels = COUNTER_LABELS[name];
110
+ const label = (labels == null ? void 0 : labels[Math.abs(value) === 1 ? 0 : 1]) ?? humanize(name).toLowerCase();
111
+ return `${value.toLocaleString("en-US")} ${label}`;
112
+ }).join(" · ");
113
+ }
114
+ export {
115
+ formatServerTimingDuration,
116
+ parseServerTiming,
117
+ serverTimingCounterSummary,
118
+ serverTimingMetricLabel
119
+ };
120
+ //# sourceMappingURL=server-timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-timing.js","sources":["../../src/data/server-timing.ts"],"sourcesContent":["export interface ServerTimingMetric {\n name: string;\n duration: number;\n description?: string;\n counters: Record<string, number>;\n}\n\nconst METRIC_LABELS: Record<string, string> = {\n total: \"Total\",\n command: \"Command\",\n format: \"Format response\",\n sql: \"SQL\",\n redis: \"Redis\",\n};\n\nconst COUNTER_LABELS: Record<string, readonly [singular: string, plural: string]> = {\n queries: [\"query\", \"queries\"],\n rows_returned: [\"row returned\", \"rows returned\"],\n rows_scanned: [\"row scanned\", \"rows scanned\"],\n ops: [\"operation\", \"operations\"],\n hits: [\"hit\", \"hits\"],\n misses: [\"miss\", \"misses\"],\n errors: [\"error\", \"errors\"],\n};\n\nfunction splitOutsideQuotes(value: string, delimiter: \",\" | \";\"): string[] {\n const parts: string[] = [];\n let start = 0;\n let quoted = false;\n let escaped = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (quoted && character === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (character === '\"') {\n quoted = !quoted;\n continue;\n }\n if (!quoted && character === delimiter) {\n parts.push(value.slice(start, index).trim());\n start = index + 1;\n }\n }\n parts.push(value.slice(start).trim());\n return parts.filter(Boolean);\n}\n\nfunction decodeParameterValue(value: string): string {\n if (!value.startsWith('\"') || !value.endsWith('\"')) return value;\n return value.slice(1, -1).replace(/\\\\([\"\\\\])/g, \"$1\");\n}\n\nfunction parseCounters(description: string | undefined): Record<string, number> {\n if (!description) return {};\n const counters: Record<string, number> = {};\n const pattern = /(?:^|\\s)([A-Za-z][A-Za-z0-9_.-]*)=(-?\\d+(?:\\.\\d+)?)(?=\\s|$)/g;\n for (const match of description.matchAll(pattern)) {\n const name = match[1];\n const rawValue = match[2];\n if (!name || !rawValue) continue;\n const value = Number(rawValue);\n if (Number.isFinite(value)) counters[name] = value;\n }\n return counters;\n}\n\nfunction humanize(value: string): string {\n const words = value.replace(/[_-]+/g, \" \").trim();\n return words ? words[0]!.toUpperCase() + words.slice(1) : value;\n}\n\nexport function parseServerTiming(\n header: string | null | undefined,\n): ServerTimingMetric[] {\n if (!header?.trim()) return [];\n return splitOutsideQuotes(header, \",\").flatMap((entry) => {\n const tokens = splitOutsideQuotes(entry, \";\");\n const name = tokens[0];\n if (!name) return [];\n let duration = 0;\n let description: string | undefined;\n let durationSeen = false;\n for (const token of tokens.slice(1)) {\n const separator = token.indexOf(\"=\");\n if (separator < 0) continue;\n const key = token.slice(0, separator).trim().toLowerCase();\n const value = decodeParameterValue(token.slice(separator + 1).trim());\n // Server-Timing keeps the first instance of a duplicated parameter name\n // within one metric and ignores the rest.\n if (key === \"desc\" && description === undefined) description = value;\n if (key === \"dur\" && !durationSeen) {\n durationSeen = true;\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed >= 0) duration = parsed;\n }\n }\n return [{\n name,\n duration,\n counters: parseCounters(description),\n ...(description !== undefined ? { description } : {}),\n }];\n });\n}\n\nexport function formatServerTimingDuration(milliseconds: number): string {\n if (milliseconds >= 1000) return `${(milliseconds / 1000).toFixed(1)} s`;\n if (milliseconds < 10) return `${milliseconds.toFixed(1)} ms`;\n return `${Math.round(milliseconds)} ms`;\n}\n\nexport function serverTimingMetricLabel(metric: ServerTimingMetric): string {\n if (metric.description && Object.keys(metric.counters).length === 0) {\n return metric.description;\n }\n return METRIC_LABELS[metric.name] ?? humanize(metric.name);\n}\n\nexport function serverTimingCounterSummary(metric: ServerTimingMetric): string | undefined {\n const counters = Object.entries(metric.counters);\n if (counters.length === 0) return undefined;\n return counters\n .map(([name, value]) => {\n const labels = COUNTER_LABELS[name];\n const label = labels?.[Math.abs(value) === 1 ? 0 : 1] ?? humanize(name).toLowerCase();\n return `${value.toLocaleString(\"en-US\")} ${label}`;\n })\n .join(\" · \");\n}\n"],"names":[],"mappings":"AAOA,MAAM,gBAAwC;AAAA,EAC5C,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,OAAO;AACT;AAEA,MAAM,iBAA8E;AAAA,EAClF,SAAS,CAAC,SAAS,SAAS;AAAA,EAC5B,eAAe,CAAC,gBAAgB,eAAe;AAAA,EAC/C,cAAc,CAAC,eAAe,cAAc;AAAA,EAC5C,KAAK,CAAC,aAAa,YAAY;AAAA,EAC/B,MAAM,CAAC,OAAO,MAAM;AAAA,EACpB,QAAQ,CAAC,QAAQ,QAAQ;AAAA,EACzB,QAAQ,CAAC,SAAS,QAAQ;AAC5B;AAEA,SAAS,mBAAmB,OAAe,WAAgC;AACzE,QAAM,QAAkB,CAAA;AACxB,MAAI,QAAQ;AACZ,MAAI,SAAS;AACb,MAAI,UAAU;AAEd,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,YAAY,MAAM,KAAK;AAC7B,QAAI,SAAS;AACX,gBAAU;AACV;AAAA,IACF;AACA,QAAI,UAAU,cAAc,MAAM;AAChC,gBAAU;AACV;AAAA,IACF;AACA,QAAI,cAAc,KAAK;AACrB,eAAS,CAAC;AACV;AAAA,IACF;AACA,QAAI,CAAC,UAAU,cAAc,WAAW;AACtC,YAAM,KAAK,MAAM,MAAM,OAAO,KAAK,EAAE,MAAM;AAC3C,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AACA,QAAM,KAAK,MAAM,MAAM,KAAK,EAAE,MAAM;AACpC,SAAO,MAAM,OAAO,OAAO;AAC7B;AAEA,SAAS,qBAAqB,OAAuB;AACnD,MAAI,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,SAAS,GAAG,EAAG,QAAO;AAC3D,SAAO,MAAM,MAAM,GAAG,EAAE,EAAE,QAAQ,cAAc,IAAI;AACtD;AAEA,SAAS,cAAc,aAAyD;AAC9E,MAAI,CAAC,YAAa,QAAO,CAAA;AACzB,QAAM,WAAmC,CAAA;AACzC,QAAM,UAAU;AAChB,aAAW,SAAS,YAAY,SAAS,OAAO,GAAG;AACjD,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,WAAW,MAAM,CAAC;AACxB,QAAI,CAAC,QAAQ,CAAC,SAAU;AACxB,UAAM,QAAQ,OAAO,QAAQ;AAC7B,QAAI,OAAO,SAAS,KAAK,EAAG,UAAS,IAAI,IAAI;AAAA,EAC/C;AACA,SAAO;AACT;AAEA,SAAS,SAAS,OAAuB;AACvC,QAAM,QAAQ,MAAM,QAAQ,UAAU,GAAG,EAAE,KAAA;AAC3C,SAAO,QAAQ,MAAM,CAAC,EAAG,gBAAgB,MAAM,MAAM,CAAC,IAAI;AAC5D;AAEO,SAAS,kBACd,QACsB;AACtB,MAAI,EAAC,iCAAQ,gBAAe,CAAA;AAC5B,SAAO,mBAAmB,QAAQ,GAAG,EAAE,QAAQ,CAAC,UAAU;AACxD,UAAM,SAAS,mBAAmB,OAAO,GAAG;AAC5C,UAAM,OAAO,OAAO,CAAC;AACrB,QAAI,CAAC,KAAM,QAAO,CAAA;AAClB,QAAI,WAAW;AACf,QAAI;AACJ,QAAI,eAAe;AACnB,eAAW,SAAS,OAAO,MAAM,CAAC,GAAG;AACnC,YAAM,YAAY,MAAM,QAAQ,GAAG;AACnC,UAAI,YAAY,EAAG;AACnB,YAAM,MAAM,MAAM,MAAM,GAAG,SAAS,EAAE,KAAA,EAAO,YAAA;AAC7C,YAAM,QAAQ,qBAAqB,MAAM,MAAM,YAAY,CAAC,EAAE,MAAM;AAGpE,UAAI,QAAQ,UAAU,gBAAgB,OAAW,eAAc;AAC/D,UAAI,QAAQ,SAAS,CAAC,cAAc;AAClC,uBAAe;AACf,cAAM,SAAS,OAAO,KAAK;AAC3B,YAAI,OAAO,SAAS,MAAM,KAAK,UAAU,EAAG,YAAW;AAAA,MACzD;AAAA,IACF;AACA,WAAO,CAAC;AAAA,MACN;AAAA,MACA;AAAA,MACA,UAAU,cAAc,WAAW;AAAA,MACnC,GAAI,gBAAgB,SAAY,EAAE,gBAAgB,CAAA;AAAA,IAAC,CACpD;AAAA,EACH,CAAC;AACH;AAEO,SAAS,2BAA2B,cAA8B;AACvE,MAAI,gBAAgB,IAAM,QAAO,IAAI,eAAe,KAAM,QAAQ,CAAC,CAAC;AACpE,MAAI,eAAe,GAAI,QAAO,GAAG,aAAa,QAAQ,CAAC,CAAC;AACxD,SAAO,GAAG,KAAK,MAAM,YAAY,CAAC;AACpC;AAEO,SAAS,wBAAwB,QAAoC;AAC1E,MAAI,OAAO,eAAe,OAAO,KAAK,OAAO,QAAQ,EAAE,WAAW,GAAG;AACnE,WAAO,OAAO;AAAA,EAChB;AACA,SAAO,cAAc,OAAO,IAAI,KAAK,SAAS,OAAO,IAAI;AAC3D;AAEO,SAAS,2BAA2B,QAAgD;AACzF,QAAM,WAAW,OAAO,QAAQ,OAAO,QAAQ;AAC/C,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,SAAO,SACJ,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;AACtB,UAAM,SAAS,eAAe,IAAI;AAClC,UAAM,SAAQ,iCAAS,KAAK,IAAI,KAAK,MAAM,IAAI,IAAI,OAAM,SAAS,IAAI,EAAE,YAAA;AACxE,WAAO,GAAG,MAAM,eAAe,OAAO,CAAC,IAAI,KAAK;AAAA,EAClD,CAAC,EACA,KAAK,KAAK;AACf;"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const taskQueryKeys = {
4
+ runs: ({ basePath, kind, status, labels }) => [
5
+ "tasks",
6
+ "runs",
7
+ {
8
+ basePath: basePath ?? "/api/v1",
9
+ kind: kind ?? "",
10
+ status: status ?? "",
11
+ labels: Object.entries(labels ?? {}).sort(([left], [right]) => left.localeCompare(right))
12
+ }
13
+ ],
14
+ run: ({ basePath, runId }) => [
15
+ "tasks",
16
+ "run",
17
+ { basePath: basePath ?? "/api/v1", runId }
18
+ ],
19
+ control: ({ basePath, runId }) => [
20
+ "tasks",
21
+ "control",
22
+ { basePath: basePath ?? "/api/v1", runId }
23
+ ]
24
+ };
25
+ exports.taskQueryKeys = taskQueryKeys;
26
+ //# sourceMappingURL=task-query-keys.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-query-keys.cjs","sources":["../../src/data/task-query-keys.ts"],"sourcesContent":["export interface TaskRunsQueryKeyOptions {\n basePath?: string | undefined;\n kind?: string | undefined;\n status?: string | undefined;\n labels?: Record<string, string> | undefined;\n}\n\nexport interface TaskRunQueryKeyOptions {\n basePath?: string | undefined;\n runId: string;\n}\n\nexport const taskQueryKeys = {\n runs: ({ basePath, kind, status, labels }: TaskRunsQueryKeyOptions) => [\n \"tasks\",\n \"runs\",\n {\n basePath: basePath ?? \"/api/v1\",\n kind: kind ?? \"\",\n status: status ?? \"\",\n labels: Object.entries(labels ?? {}).sort(([left], [right]) => left.localeCompare(right)),\n },\n ] as const,\n run: ({ basePath, runId }: TaskRunQueryKeyOptions) => [\n \"tasks\",\n \"run\",\n { basePath: basePath ?? \"/api/v1\", runId },\n ] as const,\n control: ({ basePath, runId }: TaskRunQueryKeyOptions) => [\n \"tasks\",\n \"control\",\n { basePath: basePath ?? \"/api/v1\", runId },\n ] as const,\n};\n"],"names":[],"mappings":";;AAYO,MAAM,gBAAgB;AAAA,EAC3B,MAAM,CAAC,EAAE,UAAU,MAAM,QAAQ,aAAsC;AAAA,IACrE;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAU,YAAY;AAAA,MACtB,MAAM,QAAQ;AAAA,MACd,QAAQ,UAAU;AAAA,MAClB,QAAQ,OAAO,QAAQ,UAAU,CAAA,CAAE,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC;AAAA,IAAA;AAAA,EAC1F;AAAA,EAEF,KAAK,CAAC,EAAE,UAAU,YAAoC;AAAA,IACpD;AAAA,IACA;AAAA,IACA,EAAE,UAAU,YAAY,WAAW,MAAA;AAAA,EAAM;AAAA,EAE3C,SAAS,CAAC,EAAE,UAAU,YAAoC;AAAA,IACxD;AAAA,IACA;AAAA,IACA,EAAE,UAAU,YAAY,WAAW,MAAA;AAAA,EAAM;AAE7C;;"}
@@ -0,0 +1,27 @@
1
+ export interface TaskRunsQueryKeyOptions {
2
+ basePath?: string | undefined;
3
+ kind?: string | undefined;
4
+ status?: string | undefined;
5
+ labels?: Record<string, string> | undefined;
6
+ }
7
+ export interface TaskRunQueryKeyOptions {
8
+ basePath?: string | undefined;
9
+ runId: string;
10
+ }
11
+ export declare const taskQueryKeys: {
12
+ runs: ({ basePath, kind, status, labels }: TaskRunsQueryKeyOptions) => readonly ["tasks", "runs", {
13
+ readonly basePath: string;
14
+ readonly kind: string;
15
+ readonly status: string;
16
+ readonly labels: [string, string][];
17
+ }];
18
+ run: ({ basePath, runId }: TaskRunQueryKeyOptions) => readonly ["tasks", "run", {
19
+ readonly basePath: string;
20
+ readonly runId: string;
21
+ }];
22
+ control: ({ basePath, runId }: TaskRunQueryKeyOptions) => readonly ["tasks", "control", {
23
+ readonly basePath: string;
24
+ readonly runId: string;
25
+ }];
26
+ };
27
+ //# sourceMappingURL=task-query-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-query-keys.d.ts","sourceRoot":"","sources":["../../src/data/task-query-keys.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,aAAa;+CACmB,uBAAuB;;;;;;+BAUvC,sBAAsB;;;;mCAKlB,sBAAsB;;;;CAKtD,CAAC"}