@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 +1 @@
1
- {"version":3,"file":"Chat.cjs","sources":["../../../src/data/chat/Chat.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useChat } from \"@ai-sdk/react\";\nimport {\n DefaultChatTransport,\n lastAssistantMessageIsCompleteWithApprovalResponses,\n type ChatTransport,\n type UIMessage,\n} from \"ai\";\nimport { cn } from \"../../lib/utils\";\nimport { Conversation } from \"./Conversation\";\nimport { PromptInput } from \"./PromptInput\";\nimport { Suggestions } from \"./Suggestion\";\nimport { ModelSelector, EffortSelector } from \"./ModelSelector\";\nimport { providerIcon, providerIconColor } from \"./provider-icons\";\nimport { ContextMeter } from \"./ContextMeter\";\nimport { DEFAULT_REASONING_EFFORTS } from \"./effort-icons\";\nimport { defaultChatModelId } from \"./models\";\nimport {\n createAttachmentUploadAdapter,\n type AttachmentLimits,\n type AttachmentUploadAdapter,\n} from \"./attachment-upload\";\nimport type {\n ChatBudgetConfig,\n ChatModel,\n ChatMessageMetadata,\n ChatUsageSummary,\n ClaudePermissionMode,\n Suggestion,\n ToolResultRenderer,\n} from \"./types\";\n\n/** Assistant messages carry token usage + cost the backend rode on the finish\n * part's `messageMetadata`. */\ntype ChatUIMessage = UIMessage<ChatMessageMetadata>;\n\nexport type ChatProps = {\n /** Endpoint that speaks the AI SDK v6 UI Message Stream protocol.\n * Ignored when `transport` is supplied. Defaults to \"/api/chat\". */\n api?: string;\n /** Model menu. When omitted and `modelsApi` is set, it is fetched. */\n models?: ChatModel[];\n /** Endpoint returning the model menu (ModelInfo[]). Defaults to\n * \"/api/chat/models\". Set to null to disable fetching. */\n modelsApi?: string | null;\n /** Initially selected model id; otherwise the first configured model. */\n defaultModel?: string;\n /** Controlled selected model id. */\n model?: string;\n /** Reasoning-effort options for capable models. */\n reasoningEfforts?: string[];\n /** Initially selected reasoning effort (\"\" = none). */\n defaultReasoningEffort?: string;\n /** Controlled selected reasoning effort (\"\" = none). */\n reasoningEffort?: string;\n /** Sampling temperature forwarded to the backend when set. */\n temperature?: number;\n /** Per-request budget forwarded to the backend when set. */\n budget?: ChatBudgetConfig;\n /** Claude Agent SDK permission mode forwarded to the backend when set. */\n permissionMode?: ClaudePermissionMode;\n /** Notified when the user changes the model. */\n onModelChange?: (id: string) => void;\n /** Notified when the user changes reasoning effort. */\n onReasoningEffortChange?: (effort: string) => void;\n /** Notified when the user changes Claude permission mode. */\n onPermissionModeChange?: (mode: ClaudePermissionMode) => void;\n /** Notified after each assistant turn with a usage snapshot (tokens used out\n * of the model's context window + cumulative cost), for a usage gauge. */\n onUsage?: (usage: ChatUsageSummary) => void;\n /** Suggested prompts shown on the empty state. */\n suggestions?: Suggestion[];\n /** Enables file/image attachments. */\n enableAttachments?: boolean;\n /** Upload endpoint used before an attachment is added to a chat message. */\n attachmentsApi?: string;\n /** Custom durable upload adapter; overrides attachmentsApi. */\n attachmentUpload?: AttachmentUploadAdapter;\n attachmentLimits?: AttachmentLimits;\n /** Thread id to persist this conversation under (forwarded in the body). */\n threadId?: string;\n /** Optional host renderer for recognized completed tool outputs. */\n renderToolResult?: ToolResultRenderer;\n /** Extra fields merged into every request body. */\n body?: Record<string, unknown>;\n /** Pre-built transport (e.g. a mock for stories/tests). */\n transport?: ChatTransport<UIMessage>;\n /** Initial messages to seed the conversation. */\n initialMessages?: UIMessage[];\n /** Prompt to send automatically once. A new `id` sends even when text repeats. */\n initialPrompt?: { id: number; text: string } | null;\n /** Called after `initialPrompt` has been handed to the chat transport. */\n onInitialPromptSent?: () => void;\n placeholder?: string;\n emptyState?: React.ReactNode;\n className?: string;\n};\n\n/** Self-contained AI chat over a v6-compatible `/api/chat`: a streaming\n * conversation with model/effort selectors, suggestions, attachments,\n * per-message copy/regenerate, and human-in-the-loop tool approvals. The\n * backend owns model selection and tool execution; the selected model,\n * effort, permission mode and thread id are forwarded in the request body. */\nexport function Chat({\n api = \"/api/chat\",\n models: modelsProp,\n modelsApi = \"/api/chat/models\",\n defaultModel,\n model: controlledModel,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n defaultReasoningEffort = \"\",\n reasoningEffort: controlledEffort,\n temperature,\n budget,\n permissionMode,\n onModelChange,\n onReasoningEffortChange,\n onUsage,\n suggestions,\n enableAttachments = false,\n attachmentsApi = \"/api/attachments\",\n attachmentUpload,\n attachmentLimits,\n threadId,\n renderToolResult,\n body,\n transport,\n initialMessages,\n initialPrompt,\n onInitialPromptSent,\n placeholder,\n emptyState,\n className,\n}: ChatProps) {\n const [models, setModels] = useState<ChatModel[]>(modelsProp ?? []);\n const [model, setModel] = useState<string | undefined>(controlledModel ?? defaultModel);\n const [effort, setEffort] = useState(controlledEffort ?? defaultReasoningEffort);\n const [usage, setUsage] = useState<ChatUsageSummary | null>(null);\n const lastDefaultModel = useRef(defaultModel);\n const sentInitialPromptId = useRef<number | null>(null);\n\n useEffect(() => {\n if (!modelsProp) return;\n setModels(modelsProp);\n setModel((m) => m ?? controlledModel ?? defaultChatModelId(modelsProp));\n }, [modelsProp, controlledModel]);\n\n // Fetch the model menu unless one was supplied or fetching is disabled.\n useEffect(() => {\n if (modelsProp || !modelsApi) return;\n let cancelled = false;\n fetch(modelsApi)\n .then((r) => (r.ok ? r.json() : Promise.reject(new Error(`models ${r.status}`))))\n .then((data: ChatModel[]) => {\n if (cancelled) return;\n setModels(data);\n setModel((m) => m ?? controlledModel ?? defaultChatModelId(data));\n })\n .catch((err) => console.warn(\"clicky-ui: failed to load chat models\", err));\n return () => {\n cancelled = true;\n };\n }, [modelsProp, modelsApi, controlledModel]);\n\n useEffect(() => {\n if (controlledModel === undefined) return;\n setModel(controlledModel);\n }, [controlledModel]);\n\n useEffect(() => {\n if (controlledEffort === undefined) return;\n setEffort(controlledEffort);\n }, [controlledEffort]);\n\n useEffect(() => {\n if (controlledModel !== undefined) return;\n if (!defaultModel || defaultModel === lastDefaultModel.current) return;\n lastDefaultModel.current = defaultModel;\n setModel(defaultModel);\n }, [controlledModel, defaultModel]);\n\n const selectedModel = models.find((m) => m.id === model);\n const showEffort = !selectedModel || selectedModel.reasoning;\n const resolvedAttachmentUpload = useMemo(\n () =>\n attachmentUpload ??\n createAttachmentUploadAdapter({ endpoint: attachmentsApi }),\n [attachmentUpload, attachmentsApi],\n );\n\n // A function body keeps the transport stable while always sending the latest\n // model/effort/runtime selections.\n const bodyRef = useRef<Record<string, unknown>>({});\n bodyRef.current = {\n ...body,\n ...(model ? { model } : {}),\n ...(effort ? { reasoningEffort: effort } : {}),\n ...(temperature !== undefined ? { temperature } : {}),\n ...(budget && (budget.cost !== undefined || budget.maxTokens !== undefined)\n ? { budget }\n : {}),\n ...(permissionMode ? { permissionMode } : {}),\n ...(threadId ? { threadId } : {}),\n };\n\n const resolvedTransport = useMemo<ChatTransport<UIMessage>>(\n () => transport ?? new DefaultChatTransport({ api, body: () => bodyRef.current }),\n [transport, api],\n );\n\n const { messages, sendMessage, regenerate, addToolApprovalResponse, status, error, clearError, stop } =\n useChat<ChatUIMessage>({\n transport: resolvedTransport,\n sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,\n ...(initialMessages ? { messages: initialMessages as ChatUIMessage[] } : {}),\n });\n\n useEffect(() => {\n if (!initialPrompt || status !== \"ready\") return;\n if (sentInitialPromptId.current === initialPrompt.id) return;\n const text = initialPrompt.text.trim();\n if (!text) return;\n sentInitialPromptId.current = initialPrompt.id;\n void sendMessage({ text });\n onInitialPromptSent?.();\n }, [initialPrompt, onInitialPromptSent, sendMessage, status]);\n\n // Surface a usage snapshot after each settled assistant turn. The backend\n // rides usage/cost on the finish part's messageMetadata; we read it off the\n // last assistant message and resolve maxTokens from the selected model.\n const onUsageRef = useRef(onUsage);\n onUsageRef.current = onUsage;\n useEffect(() => {\n if (status !== \"ready\") return;\n const last = [...messages].reverse().find((m) => m.role === \"assistant\");\n const meta = last?.metadata;\n if (!meta) return;\n const cost = meta.threadCostUsd ?? meta.costBreakdown?.totalUsd ?? meta.cost;\n const snapshot: ChatUsageSummary = {\n usedTokens: meta.contextTokens ?? meta.usage?.totalTokens ?? 0,\n maxTokens: selectedModel?.contextWindow ?? 0,\n messageCount: messages.length,\n ...(cost != null ? { cost } : {}),\n ...(meta.usage ? { usage: meta.usage } : {}),\n ...(meta.costBreakdown ? { costBreakdown: meta.costBreakdown } : {}),\n ...(selectedModel?.label ? { modelLabel: selectedModel.label } : {}),\n };\n setUsage(snapshot);\n onUsageRef.current?.(snapshot);\n }, [messages, status, selectedModel]);\n\n const onModelSelect = (id: string) => {\n setModel(id);\n onModelChange?.(id);\n };\n\n const onEffortSelect = (next: string) => {\n setEffort(next);\n onReasoningEffortChange?.(next);\n };\n\n const ModelGlyph = providerIcon(selectedModel?.provider);\n const toolbar = models.length > 0 || showEffort || (usage && usage.maxTokens > 0) ? (\n <div className=\"flex flex-1 items-center gap-2\">\n <ModelSelector models={models} value={model} onChange={onModelSelect} />\n {showEffort && (\n <EffortSelector efforts={reasoningEfforts} value={effort} onChange={onEffortSelect} />\n )}\n {usage && usage.maxTokens > 0 && (\n <>\n <div className=\"flex-1\" />\n <ContextMeter\n mode=\"gauge\"\n usedPercent={Math.round((usage.usedTokens / usage.maxTokens) * 100)}\n usedTokens={usage.usedTokens}\n windowTokens={usage.maxTokens}\n {...(usage.messageCount != null ? { messageCount: usage.messageCount } : {})}\n {...(usage.cost != null ? { cost: { total: usage.cost } } : {})}\n {...(usage.modelLabel ? { model: usage.modelLabel } : {})}\n {...(effort ? { effort } : {})}\n {...(ModelGlyph ? { modelIcon: ModelGlyph } : {})}\n {...(selectedModel?.provider\n ? { modelIconClassName: providerIconColor(selectedModel.provider) }\n : {})}\n />\n </>\n )}\n </div>\n ) : undefined;\n\n const empty = (messages.length === 0 && (emptyState || suggestions?.length)) ? (\n <div className=\"flex flex-col items-center gap-4\">\n {emptyState}\n {suggestions && suggestions.length > 0 && (\n <Suggestions suggestions={suggestions} onSelect={(text) => void sendMessage({ text })} />\n )}\n </div>\n ) : undefined;\n\n return (\n <div className={cn(\"flex h-full flex-col\", className)}>\n <Conversation\n messages={messages}\n status={status}\n error={error}\n onClearError={clearError}\n {...(threadId ? { sessionId: threadId } : {})}\n {...(model ? { model } : {})}\n emptyState={empty}\n onRegenerate={(messageId) => void regenerate({ messageId })}\n onApprove={(id, approved, reason) =>\n void addToolApprovalResponse(reason ? { id, approved, reason } : { id, approved })\n }\n {...(renderToolResult ? { renderToolResult } : {})}\n />\n <div className=\"p-4 pt-0\">\n <PromptInput\n status={status}\n onStop={() => void stop()}\n placeholder={placeholder}\n enableAttachments={enableAttachments}\n attachmentUpload={resolvedAttachmentUpload}\n {...(selectedModel?.inputMediaTypes\n ? { acceptedMediaTypes: selectedModel.inputMediaTypes }\n : {})}\n {...(attachmentLimits ? { attachmentLimits } : {})}\n toolbar={toolbar}\n onSubmit={(text, files) => void sendMessage({ text, files })}\n />\n </div>\n </div>\n );\n}\n"],"names":["DEFAULT_REASONING_EFFORTS","attachmentUpload","models","useState","useRef","useEffect","defaultChatModelId","useMemo","createAttachmentUploadAdapter","DefaultChatTransport","useChat","lastAssistantMessageIsCompleteWithApprovalResponses","providerIcon","jsxs","jsx","ModelSelector","EffortSelector","Fragment","ContextMeter","providerIconColor","Suggestions","cn","Conversation","PromptInput"],"mappings":"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"}
1
+ {"version":3,"file":"Chat.cjs","sources":["../../../src/data/chat/Chat.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useChat } from \"@ai-sdk/react\";\nimport { DefaultChatTransport, type ChatTransport, type UIMessage } from \"ai\";\nimport { cn } from \"../../lib/utils\";\nimport { Conversation } from \"./Conversation\";\nimport { PromptInput } from \"./PromptInput\";\nimport { Suggestions } from \"./Suggestion\";\nimport { DEFAULT_REASONING_EFFORTS } from \"./effort-icons\";\nimport { defaultChatModelId } from \"./models\";\nimport { getChatSession, postToolApproval } from \"./approval\";\nimport {\n hasStructuredRuntime,\n resolveChatRuntime,\n selectedChatModel,\n} from \"./Chat.runtime\";\nimport {\n createAttachmentUploadAdapter,\n type AttachmentLimits,\n type AttachmentUploadAdapter,\n} from \"./attachment-upload\";\nimport { toToolRenderRegistry } from \"./tool-render/registry\";\nimport { ToolRenderRegistryProvider } from \"./tool-render/context\";\nimport { ChatRuntimeToolbar } from \"./ChatRuntimeToolbar\";\nimport type { SpecRuntimeFamily } from \"../runtime/runtime-mode\";\nimport type {\n ToolRenderAdapter,\n ToolRenderRegistry,\n} from \"./tool-render/adapter\";\nimport type {\n ChatBudgetConfig,\n ChatModel,\n ChatMessageMetadata,\n ChatModelRuntime,\n ChatUsageSummary,\n ClaudePermissionMode,\n Suggestion,\n ToolMeta,\n ToolResultRenderer,\n} from \"./types\";\nimport { usageSnapshotFromMetadata } from \"./usage-snapshot\";\n\n/** Assistant messages carry token usage + cost the backend rode on the finish\n * part's `messageMetadata`. */\ntype ChatUIMessage = UIMessage<ChatMessageMetadata>;\n\nexport type ChatProps = {\n /** Endpoint that speaks the AI SDK v6 UI Message Stream protocol.\n * Ignored when `transport` is supplied. Defaults to \"/api/chat\". */\n api?: string;\n /** Model menu. When omitted and `modelsApi` is set, it is fetched. */\n models?: ChatModel[];\n /** Endpoint returning the model menu (ModelInfo[]). Defaults to\n * \"/api/chat/models\". Set to null to disable fetching. */\n modelsApi?: string | null;\n /** Initially selected model id; otherwise the first configured model. */\n defaultModel?: string;\n /** Controlled selected model id. */\n model?: string;\n /** Initially selected structured runtime. */\n defaultRuntime?: ChatModelRuntime;\n /** Controlled structured runtime. */\n runtime?: ChatModelRuntime;\n /** Runtime families and their host availability. */\n runtimeFamilies?: SpecRuntimeFamily[];\n /** Reasoning-effort options for capable models. */\n reasoningEfforts?: string[];\n /** Initially selected reasoning effort (\"\" = none). */\n defaultReasoningEffort?: string;\n /** Controlled selected reasoning effort (\"\" = none). */\n reasoningEffort?: string;\n /** Sampling temperature forwarded to the backend when set. */\n temperature?: number;\n /** Per-request budget forwarded to the backend when set. */\n budget?: ChatBudgetConfig;\n /** Claude Agent SDK permission mode forwarded to the backend when set. */\n permissionMode?: ClaudePermissionMode;\n /** Notified when the user changes the model. */\n onModelChange?: (id: string) => void;\n /** Notified when the user changes any runtime field. */\n onRuntimeChange?: (runtime: ChatModelRuntime) => void;\n /** Notified when the user changes reasoning effort. */\n onReasoningEffortChange?: (effort: string) => void;\n /** Notified when the user changes Claude permission mode. */\n onPermissionModeChange?: (mode: ClaudePermissionMode) => void;\n /** Notified after each assistant turn with a usage snapshot (tokens used out\n * of the model's context window + cumulative cost), for a usage gauge. */\n onUsage?: (usage: ChatUsageSummary) => void;\n /** Suggested prompts shown on the empty state. */\n suggestions?: Suggestion[];\n /** Enables file/image attachments. */\n enableAttachments?: boolean;\n /** Upload endpoint used before an attachment is added to a chat message. */\n attachmentsApi?: string;\n /** Custom durable upload adapter; overrides attachmentsApi. */\n attachmentUpload?: AttachmentUploadAdapter;\n attachmentLimits?: AttachmentLimits;\n /** Captain thread id used as the AI SDK chat id and forwarded in the body. */\n threadId?: string;\n /** Canonical Captain session endpoint used to hydrate messages and resolve\n * approvals. The session and approval ids are appended to this URL. */\n sessionsApi?: string | null;\n /** Optional host renderer for recognized completed tool outputs. Takes\n * priority over `toolRenderers` on the output surface. */\n renderToolResult?: ToolResultRenderer;\n /** Tool catalog, used to resolve each call's input/output JSON Schema so\n * params and results render with real labels instead of raw JSON. */\n tools?: ToolMeta[];\n /** Domain tool renderers. Host adapters are matched before the built-in\n * heuristics, which stay as the floor. */\n toolRenderers?: ToolRenderAdapter[] | ToolRenderRegistry;\n /** Extra fields merged into every request body. */\n body?: Record<string, unknown>;\n /** Pre-built transport (e.g. a mock for stories/tests). */\n transport?: ChatTransport<UIMessage>;\n /** Initial messages to seed the conversation. */\n initialMessages?: UIMessage[];\n /** Prompt to send automatically once. A new `id` sends even when text repeats. */\n initialPrompt?: { id: number; text: string } | null;\n /** Called after `initialPrompt` has been handed to the chat transport. */\n onInitialPromptSent?: () => void;\n placeholder?: string;\n emptyState?: React.ReactNode;\n className?: string;\n};\n\n/** Self-contained AI chat over a v6-compatible `/api/chat`: a streaming\n * conversation with model/effort selectors, suggestions, attachments,\n * per-message copy/regenerate, and human-in-the-loop tool approvals. The\n * backend owns model selection and tool execution; the selected model,\n * effort, permission mode and thread id are forwarded in the request body. */\nexport function Chat({\n api = \"/api/chat\",\n models: modelsProp,\n modelsApi = \"/api/chat/models\",\n defaultModel,\n model: controlledModel,\n defaultRuntime,\n runtime: controlledRuntime,\n runtimeFamilies,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n defaultReasoningEffort,\n reasoningEffort: controlledEffort,\n temperature,\n budget,\n permissionMode,\n onModelChange,\n onRuntimeChange,\n onReasoningEffortChange,\n onUsage,\n suggestions,\n enableAttachments = false,\n attachmentsApi = \"/api/attachments\",\n attachmentUpload,\n attachmentLimits,\n threadId,\n sessionsApi = null,\n renderToolResult,\n tools,\n toolRenderers,\n body,\n transport,\n initialMessages,\n initialPrompt,\n onInitialPromptSent,\n placeholder,\n emptyState,\n className,\n}: ChatProps) {\n const [models, setModels] = useState<ChatModel[]>(modelsProp ?? []);\n const [internalRuntime, setInternalRuntime] = useState<ChatModelRuntime>(\n () =>\n controlledRuntime ??\n resolveChatRuntime({\n models: modelsProp ?? [],\n current: defaultRuntime,\n preferredModel:\n controlledModel ??\n (defaultRuntime\n ? undefined\n : (defaultModel ?? defaultChatModelId(modelsProp ?? []))),\n effort: controlledEffort ?? defaultReasoningEffort,\n temperature,\n reasoningEfforts,\n }),\n );\n const [usage, setUsage] = useState<ChatUsageSummary | null>(null);\n const [approvalError, setApprovalError] = useState<Error | undefined>();\n const [hydratedSessionId, setHydratedSessionId] = useState<string | null>(\n null,\n );\n const lastDefaultModel = useRef(defaultModel);\n const sentInitialPromptId = useRef<number | null>(null);\n const runtime = controlledRuntime ?? internalRuntime;\n\n // Provided once here; <ToolCall> reads it from context, so no tool-render\n // props thread through Conversation/Message.\n const toolRegistry = useMemo(\n () => toToolRenderRegistry(toolRenderers, tools ? { tools } : {}),\n [toolRenderers, tools],\n );\n\n useEffect(() => {\n if (!modelsProp) return;\n setModels(modelsProp);\n }, [modelsProp]);\n\n // Fetch the model menu unless one was supplied or fetching is disabled.\n useEffect(() => {\n if (modelsProp || !modelsApi) return;\n let cancelled = false;\n fetch(modelsApi)\n .then((r) =>\n r.ok ? r.json() : Promise.reject(new Error(`models ${r.status}`)),\n )\n .then((data: ChatModel[]) => {\n if (cancelled) return;\n setModels(data);\n })\n .catch((err) =>\n console.warn(\"clicky-ui: failed to load chat models\", err),\n );\n return () => {\n cancelled = true;\n };\n }, [modelsProp, modelsApi]);\n\n useEffect(() => {\n if (controlledRuntime !== undefined) return;\n const defaultChanged =\n Boolean(defaultModel) && defaultModel !== lastDefaultModel.current;\n lastDefaultModel.current = defaultModel;\n setInternalRuntime((current) =>\n resolveChatRuntime({\n models,\n current,\n preferredModel:\n controlledModel ??\n (defaultChanged\n ? defaultModel\n : (selectedChatModel(models, current)?.id ??\n defaultModel ??\n defaultChatModelId(models))),\n effort: controlledEffort,\n temperature,\n reasoningEfforts,\n }),\n );\n }, [\n controlledEffort,\n controlledModel,\n controlledRuntime,\n defaultModel,\n models,\n reasoningEfforts,\n temperature,\n ]);\n\n const selectedModel = selectedChatModel(models, runtime);\n const structuredRuntime = hasStructuredRuntime(runtime, selectedModel);\n const resolvedAttachmentUpload = useMemo(\n () =>\n attachmentUpload ??\n createAttachmentUploadAdapter({ endpoint: attachmentsApi }),\n [attachmentUpload, attachmentsApi],\n );\n\n // A function body keeps the transport stable while always sending the latest\n // model/effort/runtime selections.\n const bodyRef = useRef<Record<string, unknown>>({});\n bodyRef.current = {\n ...body,\n ...(structuredRuntime\n ? { runtime }\n : {\n ...(runtime.model ? { model: runtime.model } : {}),\n ...(runtime.effort ? { reasoningEffort: runtime.effort } : {}),\n ...(runtime.temperature !== undefined\n ? { temperature: runtime.temperature }\n : {}),\n }),\n ...(budget && (budget.cost !== undefined || budget.maxTokens !== undefined)\n ? { budget }\n : {}),\n ...(permissionMode ? { permissionMode } : {}),\n ...(threadId ? { threadId } : {}),\n };\n\n const resolvedTransport = useMemo<ChatTransport<UIMessage>>(\n () =>\n transport ??\n new DefaultChatTransport({ api, body: () => bodyRef.current }),\n [transport, api],\n );\n\n const {\n messages,\n setMessages,\n sendMessage,\n regenerate,\n status,\n error,\n clearError,\n stop,\n } = useChat<ChatUIMessage>({\n transport: resolvedTransport,\n ...(threadId ? { id: threadId } : {}),\n ...(initialMessages\n ? { messages: initialMessages as ChatUIMessage[] }\n : {}),\n });\n const setMessagesRef = useRef(setMessages);\n setMessagesRef.current = setMessages;\n\n useEffect(() => {\n if (!sessionsApi || !threadId) return;\n let cancelled = false;\n setHydratedSessionId(null);\n setApprovalError(undefined);\n setMessagesRef.current([]);\n void getChatSession(sessionsApi, threadId)\n .then((session) => {\n if (cancelled) return;\n if (session.id !== threadId) {\n throw new Error(\n `Captain chat session response ID \"${session.id}\" does not match requested session \"${threadId}\".`,\n );\n }\n setMessagesRef.current(session.messages as ChatUIMessage[]);\n setHydratedSessionId(session.id);\n })\n .catch((cause) => {\n if (cancelled) return;\n setApprovalError(\n cause instanceof Error ? cause : new Error(String(cause)),\n );\n });\n return () => {\n cancelled = true;\n };\n }, [sessionsApi, threadId]);\n\n useEffect(() => {\n if (!initialPrompt || status !== \"ready\") return;\n if (sessionsApi && threadId && hydratedSessionId !== threadId) return;\n if (sentInitialPromptId.current === initialPrompt.id) return;\n const text = initialPrompt.text.trim();\n if (!text) return;\n sentInitialPromptId.current = initialPrompt.id;\n void sendMessage({ text });\n onInitialPromptSent?.();\n }, [\n hydratedSessionId,\n initialPrompt,\n onInitialPromptSent,\n sendMessage,\n sessionsApi,\n status,\n threadId,\n ]);\n\n // Surface a usage snapshot after each settled assistant turn. The backend\n // rides usage/cost on the finish part's messageMetadata; we read it off the\n // last assistant message and resolve maxTokens from the selected model.\n const onUsageRef = useRef(onUsage);\n onUsageRef.current = onUsage;\n useEffect(() => {\n if (status !== \"ready\") return;\n const last = [...messages].reverse().find((m) => m.role === \"assistant\");\n const meta = last?.metadata;\n if (!meta) return;\n const snapshot = usageSnapshotFromMetadata(meta, {\n contextWindow: selectedModel?.contextWindow,\n modelLabel: selectedModel?.label,\n messageCount: messages.length,\n });\n setUsage(snapshot);\n onUsageRef.current?.(snapshot);\n }, [messages, status, selectedModel]);\n\n const handleRuntimeChange = (next: ChatModelRuntime) => {\n if (controlledRuntime === undefined) setInternalRuntime(next);\n onRuntimeChange?.(next);\n const nextModel = selectedChatModel(models, next);\n if (nextModel?.id !== selectedModel?.id) {\n onModelChange?.(nextModel?.id ?? next.id ?? next.model ?? \"\");\n }\n if ((next.effort ?? \"\") !== (runtime.effort ?? \"\")) {\n onReasoningEffortChange?.(next.effort ?? \"\");\n }\n };\n\n const resolveToolApproval = async (\n id: string,\n approved: boolean,\n reason?: string,\n ) => {\n setApprovalError(undefined);\n try {\n if (!sessionsApi) {\n throw new Error(\n \"A Captain sessions API is required to resolve tool approvals.\",\n );\n }\n const session = await postToolApproval({\n sessionsApi,\n sessionId: threadId ?? \"\",\n approvalId: id,\n approved,\n ...(reason ? { reason } : {}),\n });\n if (session.id !== threadId) {\n throw new Error(\n `Captain chat session response ID \"${session.id}\" does not match active session \"${threadId ?? \"\"}\".`,\n );\n }\n setMessages(session.messages as ChatUIMessage[]);\n } catch (cause) {\n setApprovalError(\n cause instanceof Error ? cause : new Error(String(cause)),\n );\n }\n };\n\n const toolbar = (\n <ChatRuntimeToolbar\n models={models}\n runtime={runtime}\n runtimeFamilies={runtimeFamilies}\n reasoningEfforts={reasoningEfforts}\n selectedModel={selectedModel}\n usage={usage}\n threadId={threadId}\n onRuntimeChange={handleRuntimeChange}\n />\n );\n\n const empty =\n messages.length === 0 && (emptyState || suggestions?.length) ? (\n <div className=\"flex flex-col items-center gap-4\">\n {emptyState}\n {suggestions && suggestions.length > 0 && (\n <Suggestions\n suggestions={suggestions}\n onSelect={(text) => void sendMessage({ text })}\n />\n )}\n </div>\n ) : undefined;\n\n return (\n <ToolRenderRegistryProvider value={toolRegistry}>\n <div className={cn(\"flex h-full flex-col\", className)}>\n <Conversation\n messages={messages}\n status={status}\n error={approvalError ?? error}\n onClearError={() => {\n setApprovalError(undefined);\n clearError();\n }}\n {...(threadId ? { sessionId: threadId } : {})}\n {...(selectedModel?.id\n ? { model: selectedModel.id }\n : runtime.model\n ? { model: runtime.model }\n : {})}\n emptyState={empty}\n onRegenerate={(messageId) => void regenerate({ messageId })}\n onApprove={(id, approved, reason) =>\n void resolveToolApproval(id, approved, reason)\n }\n {...(renderToolResult ? { renderToolResult } : {})}\n />\n <div className=\"p-4 pt-0\">\n <PromptInput\n status={status}\n onStop={() => void stop()}\n placeholder={placeholder}\n enableAttachments={enableAttachments}\n attachmentUpload={resolvedAttachmentUpload}\n {...(selectedModel?.inputMediaTypes\n ? { acceptedMediaTypes: selectedModel.inputMediaTypes }\n : {})}\n {...(attachmentLimits ? { attachmentLimits } : {})}\n toolbar={toolbar}\n onSubmit={(text, files) => void sendMessage({ text, files })}\n />\n </div>\n </div>\n </ToolRenderRegistryProvider>\n );\n}\n"],"names":["DEFAULT_REASONING_EFFORTS","attachmentUpload","models","useState","resolveChatRuntime","defaultChatModelId","useRef","useMemo","toToolRenderRegistry","useEffect","selectedChatModel","hasStructuredRuntime","createAttachmentUploadAdapter","DefaultChatTransport","useChat","getChatSession","usageSnapshotFromMetadata","postToolApproval","jsx","ChatRuntimeToolbar","jsxs","Suggestions","ToolRenderRegistryProvider","cn","Conversation","PromptInput"],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { ChatTransport, UIMessage } from 'ai';
2
2
  import { AttachmentLimits, AttachmentUploadAdapter } from './attachment-upload';
3
- import { ChatBudgetConfig, ChatModel, ChatUsageSummary, ClaudePermissionMode, Suggestion, ToolResultRenderer } from './types';
3
+ import { SpecRuntimeFamily } from '../runtime/runtime-mode';
4
+ import { ToolRenderAdapter, ToolRenderRegistry } from './tool-render/adapter';
5
+ import { ChatBudgetConfig, ChatModel, ChatModelRuntime, ChatUsageSummary, ClaudePermissionMode, Suggestion, ToolMeta, ToolResultRenderer } from './types';
4
6
  export type ChatProps = {
5
7
  /** Endpoint that speaks the AI SDK v6 UI Message Stream protocol.
6
8
  * Ignored when `transport` is supplied. Defaults to "/api/chat". */
@@ -14,6 +16,12 @@ export type ChatProps = {
14
16
  defaultModel?: string;
15
17
  /** Controlled selected model id. */
16
18
  model?: string;
19
+ /** Initially selected structured runtime. */
20
+ defaultRuntime?: ChatModelRuntime;
21
+ /** Controlled structured runtime. */
22
+ runtime?: ChatModelRuntime;
23
+ /** Runtime families and their host availability. */
24
+ runtimeFamilies?: SpecRuntimeFamily[];
17
25
  /** Reasoning-effort options for capable models. */
18
26
  reasoningEfforts?: string[];
19
27
  /** Initially selected reasoning effort ("" = none). */
@@ -28,6 +36,8 @@ export type ChatProps = {
28
36
  permissionMode?: ClaudePermissionMode;
29
37
  /** Notified when the user changes the model. */
30
38
  onModelChange?: (id: string) => void;
39
+ /** Notified when the user changes any runtime field. */
40
+ onRuntimeChange?: (runtime: ChatModelRuntime) => void;
31
41
  /** Notified when the user changes reasoning effort. */
32
42
  onReasoningEffortChange?: (effort: string) => void;
33
43
  /** Notified when the user changes Claude permission mode. */
@@ -44,10 +54,20 @@ export type ChatProps = {
44
54
  /** Custom durable upload adapter; overrides attachmentsApi. */
45
55
  attachmentUpload?: AttachmentUploadAdapter;
46
56
  attachmentLimits?: AttachmentLimits;
47
- /** Thread id to persist this conversation under (forwarded in the body). */
57
+ /** Captain thread id used as the AI SDK chat id and forwarded in the body. */
48
58
  threadId?: string;
49
- /** Optional host renderer for recognized completed tool outputs. */
59
+ /** Canonical Captain session endpoint used to hydrate messages and resolve
60
+ * approvals. The session and approval ids are appended to this URL. */
61
+ sessionsApi?: string | null;
62
+ /** Optional host renderer for recognized completed tool outputs. Takes
63
+ * priority over `toolRenderers` on the output surface. */
50
64
  renderToolResult?: ToolResultRenderer;
65
+ /** Tool catalog, used to resolve each call's input/output JSON Schema so
66
+ * params and results render with real labels instead of raw JSON. */
67
+ tools?: ToolMeta[];
68
+ /** Domain tool renderers. Host adapters are matched before the built-in
69
+ * heuristics, which stay as the floor. */
70
+ toolRenderers?: ToolRenderAdapter[] | ToolRenderRegistry;
51
71
  /** Extra fields merged into every request body. */
52
72
  body?: Record<string, unknown>;
53
73
  /** Pre-built transport (e.g. a mock for stories/tests). */
@@ -70,5 +90,5 @@ export type ChatProps = {
70
90
  * per-message copy/regenerate, and human-in-the-loop tool approvals. The
71
91
  * backend owns model selection and tool execution; the selected model,
72
92
  * effort, permission mode and thread id are forwarded in the request body. */
73
- export declare function Chat({ api, models: modelsProp, modelsApi, defaultModel, model: controlledModel, reasoningEfforts, defaultReasoningEffort, reasoningEffort: controlledEffort, temperature, budget, permissionMode, onModelChange, onReasoningEffortChange, onUsage, suggestions, enableAttachments, attachmentsApi, attachmentUpload, attachmentLimits, threadId, renderToolResult, body, transport, initialMessages, initialPrompt, onInitialPromptSent, placeholder, emptyState, className, }: ChatProps): import("react/jsx-runtime").JSX.Element;
93
+ export declare function Chat({ api, models: modelsProp, modelsApi, defaultModel, model: controlledModel, defaultRuntime, runtime: controlledRuntime, runtimeFamilies, reasoningEfforts, defaultReasoningEffort, reasoningEffort: controlledEffort, temperature, budget, permissionMode, onModelChange, onRuntimeChange, onReasoningEffortChange, onUsage, suggestions, enableAttachments, attachmentsApi, attachmentUpload, attachmentLimits, threadId, sessionsApi, renderToolResult, tools, toolRenderers, body, transport, initialMessages, initialPrompt, onInitialPromptSent, placeholder, emptyState, className, }: ChatProps): import("react/jsx-runtime").JSX.Element;
74
94
  //# sourceMappingURL=Chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/data/chat/Chat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/data/chat/Chat.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +1,54 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const MOCK_MODELS = [
4
- { id: "anthropic/claude-sonnet-4-5", provider: "anthropic", label: "Claude Sonnet 4.5", reasoning: true, configured: true, contextWindow: 2e5 },
5
- { id: "openai/gpt-4o", provider: "openai", label: "GPT-4o", reasoning: false, configured: true, contextWindow: 128e3 },
6
- { id: "googleai/gemini-2.5-pro", provider: "googleai", label: "Gemini 2.5 Pro", reasoning: true, configured: false, contextWindow: 1048576 }
4
+ {
5
+ id: "anthropic/claude-sonnet-4-5",
6
+ provider: "anthropic",
7
+ label: "Claude Sonnet 4.5",
8
+ reasoning: true,
9
+ capabilitiesKnown: true,
10
+ supportedEfforts: ["low", "medium", "high"],
11
+ defaultEffort: "medium",
12
+ configured: true,
13
+ contextWindow: 2e5,
14
+ runtime: {
15
+ id: "anthropic/claude-sonnet-4-5",
16
+ model: "claude-sonnet-4-5",
17
+ backend: "anthropic",
18
+ effort: "medium"
19
+ }
20
+ },
21
+ {
22
+ id: "openai/gpt-4o",
23
+ provider: "openai",
24
+ label: "GPT-4o",
25
+ reasoning: false,
26
+ capabilitiesKnown: true,
27
+ configured: true,
28
+ contextWindow: 128e3,
29
+ runtime: {
30
+ id: "openai/gpt-4o",
31
+ model: "gpt-4o",
32
+ backend: "openai"
33
+ }
34
+ },
35
+ {
36
+ id: "googleai/gemini-2.5-pro",
37
+ provider: "googleai",
38
+ label: "Gemini 2.5 Pro",
39
+ reasoning: true,
40
+ capabilitiesKnown: true,
41
+ supportedEfforts: ["low", "high"],
42
+ defaultEffort: "high",
43
+ configured: false,
44
+ contextWindow: 1048576,
45
+ runtime: {
46
+ id: "googleai/gemini-2.5-pro",
47
+ model: "gemini-2.5-pro",
48
+ backend: "gemini",
49
+ effort: "high"
50
+ }
51
+ }
7
52
  ];
8
53
  function streamChunks(chunks, delayMs) {
9
54
  let i = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.fixtures.cjs","sources":["../../../src/data/chat/Chat.fixtures.ts"],"sourcesContent":["import type { ChatTransport, UIMessage, UIMessageChunk } from \"ai\";\nimport type { ChatModel } from \"./types\";\n\n/** A sample model menu for stories driving the model selector. */\nexport const MOCK_MODELS: ChatModel[] = [\n { id: \"anthropic/claude-sonnet-4-5\", provider: \"anthropic\", label: \"Claude Sonnet 4.5\", reasoning: true, configured: true, contextWindow: 200_000 },\n { id: \"openai/gpt-4o\", provider: \"openai\", label: \"GPT-4o\", reasoning: false, configured: true, contextWindow: 128_000 },\n { id: \"googleai/gemini-2.5-pro\", provider: \"googleai\", label: \"Gemini 2.5 Pro\", reasoning: true, configured: false, contextWindow: 1_048_576 },\n];\n\n/** A seeded conversation that already contains a completed tool call, so a\n * story shows the collapsible tool-call panel (args → result) on load, without\n * the user sending a message. clicky operations surface as dynamic tools. */\nexport const SAMPLE_TOOL_MESSAGES: UIMessage[] = [\n { id: \"u1\", role: \"user\", parts: [{ type: \"text\", text: \"List the pods in default\" }] },\n {\n id: \"a1\",\n role: \"assistant\",\n parts: [\n {\n type: \"dynamic-tool\",\n toolCallId: \"call_listPods\",\n toolName: \"listPods\",\n state: \"output-available\",\n input: { namespace: \"default\", limit: 5 },\n output: { count: 2, pods: [\"api-7c9\", \"worker-1f2\"] },\n },\n { type: \"text\", text: \"Found **2 pods** in `default`: `api-7c9` and `worker-1f2`.\" },\n ],\n },\n];\n\n/** Emits the given chunks as a ReadableStream, with a small delay between each\n * so the UI visibly streams in Storybook. */\nfunction streamChunks(chunks: UIMessageChunk[], delayMs: number): ReadableStream<UIMessageChunk> {\n let i = 0;\n return new ReadableStream<UIMessageChunk>({\n pull(controller) {\n if (i >= chunks.length) {\n controller.close();\n return;\n }\n const chunk = chunks[i++];\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n controller.enqueue(chunk);\n resolve();\n }, delayMs);\n });\n },\n });\n}\n\nconst TEXT_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"text-start\", id: \"t0\" },\n { type: \"text-delta\", id: \"t0\", delta: \"Here is **markdown** with a list:\\n\\n\" },\n { type: \"text-delta\", id: \"t0\", delta: \"- one\\n- two\\n- three\" },\n { type: \"text-end\", id: \"t0\" },\n { type: \"finish-step\" },\n {\n type: \"finish\",\n messageMetadata: {\n usage: { inputTokens: 920, outputTokens: 280, totalTokens: 1200 },\n contextTokens: 1200,\n cost: 0.004,\n },\n },\n];\n\nconst TOOL_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n {\n type: \"tool-input-available\",\n toolCallId: \"call_1\",\n toolName: \"listPods\",\n input: { namespace: \"default\", limit: 5 },\n dynamic: true,\n },\n {\n type: \"tool-output-available\",\n toolCallId: \"call_1\",\n output: { count: 2, pods: [\"api-7c9\", \"worker-1f2\"] },\n dynamic: true,\n },\n { type: \"text-start\", id: \"t1\" },\n { type: \"text-delta\", id: \"t1\", delta: \"Found **2 pods** in `default`.\" },\n { type: \"text-end\", id: \"t1\" },\n { type: \"finish-step\" },\n {\n type: \"finish\",\n messageMetadata: {\n usage: { inputTokens: 2600, outputTokens: 800, totalTokens: 3400 },\n contextTokens: 3400,\n cost: 0.011,\n },\n },\n];\n\nconst REASONING_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"reasoning-start\", id: \"r0\" },\n { type: \"reasoning-delta\", id: \"r0\", delta: \"The user wants pods. I'll call listPods, then summarize.\" },\n { type: \"reasoning-end\", id: \"r0\" },\n { type: \"text-start\", id: \"t2\" },\n { type: \"text-delta\", id: \"t2\", delta: \"Let me check the pods.\" },\n { type: \"text-end\", id: \"t2\" },\n { type: \"finish-step\" },\n { type: \"finish\" },\n];\n\nconst APPROVAL_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"text-start\", id: \"t3\" },\n { type: \"text-delta\", id: \"t3\", delta: \"This will restart the service.\" },\n { type: \"text-end\", id: \"t3\" },\n {\n type: \"tool-input-available\",\n toolCallId: \"call_restart\",\n toolName: \"restartService\",\n input: { service: \"api\", confirm: true },\n dynamic: true,\n },\n { type: \"tool-approval-request\", approvalId: \"call_restart\", toolCallId: \"call_restart\" },\n { type: \"finish-step\" },\n { type: \"finish\" },\n];\n\n/** A mock ChatTransport that replies with a markdown text turn, then a tool\n * round-trip turn on the next submission. Use in stories/tests to drive the\n * Chat UI without a backend. */\nexport function mockChatTransport(delayMs = 120): ChatTransport<UIMessage> {\n let calls = 0;\n return {\n sendMessages() {\n const chunks = calls++ === 0 ? TEXT_TURN : TOOL_TURN;\n return Promise.resolve(streamChunks(chunks, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n\n/** A mock transport whose first turn requests tool approval, and whose resume\n * (after the user approves/denies) completes the tool and replies. */\nexport function mockApprovalTransport(delayMs = 120): ChatTransport<UIMessage> {\n let calls = 0;\n return {\n sendMessages() {\n const chunks = calls++ === 0 ? APPROVAL_TURN : TOOL_TURN;\n return Promise.resolve(streamChunks(chunks, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n\n/** A mock transport that streams a reasoning (\"thinking\") block before its\n * answer. */\nexport function mockReasoningTransport(delayMs = 120): ChatTransport<UIMessage> {\n return {\n sendMessages() {\n return Promise.resolve(streamChunks(REASONING_TURN, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n"],"names":[],"mappings":";;AAIO,MAAM,cAA2B;AAAA,EACtC,EAAE,IAAI,+BAA+B,UAAU,aAAa,OAAO,qBAAqB,WAAW,MAAM,YAAY,MAAM,eAAe,IAAA;AAAA,EAC1I,EAAE,IAAI,iBAAiB,UAAU,UAAU,OAAO,UAAU,WAAW,OAAO,YAAY,MAAM,eAAe,MAAA;AAAA,EAC/G,EAAE,IAAI,2BAA2B,UAAU,YAAY,OAAO,kBAAkB,WAAW,MAAM,YAAY,OAAO,eAAe,QAAA;AACrI;AA0BA,SAAS,aAAa,QAA0B,SAAiD;AAC/F,MAAI,IAAI;AACR,SAAO,IAAI,eAA+B;AAAA,IACxC,KAAK,YAAY;AACf,UAAI,KAAK,OAAO,QAAQ;AACtB,mBAAW,MAAA;AACX;AAAA,MACF;AACA,YAAM,QAAQ,OAAO,GAAG;AACxB,aAAO,IAAI,QAAc,CAAC,YAAY;AACpC,mBAAW,MAAM;AACf,qBAAW,QAAQ,KAAK;AACxB,kBAAA;AAAA,QACF,GAAG,OAAO;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EAAA,CACD;AACH;AAEA,MAAM,YAA8B;AAAA,EAClC,EAAE,MAAM,QAAA;AAAA,EACR,EAAE,MAAM,aAAA;AAAA,EACR,EAAE,MAAM,cAAc,IAAI,KAAA;AAAA,EAC1B,EAAE,MAAM,cAAc,IAAI,MAAM,OAAO,wCAAA;AAAA,EACvC,EAAE,MAAM,cAAc,IAAI,MAAM,OAAO,wBAAA;AAAA,EACvC,EAAE,MAAM,YAAY,IAAI,KAAA;AAAA,EACxB,EAAE,MAAM,cAAA;AAAA,EACR;AAAA,IACE,MAAM;AAAA,IACN,iBAAiB;AAAA,MACf,OAAO,EAAE,aAAa,KAAK,cAAc,KAAK,aAAa,KAAA;AAAA,MAC3D,eAAe;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAEA,MAAM,YAA8B;AAAA,EAClC,EAAE,MAAM,QAAA;AAAA,EACR,EAAE,MAAM,aAAA;AAAA,EACR;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,OAAO,EAAE,WAAW,WAAW,OAAO,EAAA;AAAA,IACtC,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,WAAW,YAAY,EAAA;AAAA,IAClD,SAAS;AAAA,EAAA;AAAA,EAEX,EAAE,MAAM,cAAc,IAAI,KAAA;AAAA,EAC1B,EAAE,MAAM,cAAc,IAAI,MAAM,OAAO,iCAAA;AAAA,EACvC,EAAE,MAAM,YAAY,IAAI,KAAA;AAAA,EACxB,EAAE,MAAM,cAAA;AAAA,EACR;AAAA,IACE,MAAM;AAAA,IACN,iBAAiB;AAAA,MACf,OAAO,EAAE,aAAa,MAAM,cAAc,KAAK,aAAa,KAAA;AAAA,MAC5D,eAAe;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAoCO,SAAS,kBAAkB,UAAU,KAA+B;AACzE,MAAI,QAAQ;AACZ,SAAO;AAAA,IACL,eAAe;AACb,YAAM,SAAS,YAAY,IAAI,YAAY;AAC3C,aAAO,QAAQ,QAAQ,aAAa,QAAQ,OAAO,CAAC;AAAA,IACtD;AAAA,IACA,oBAAoB;AAClB,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC7B;AAAA,EAAA;AAEJ;;;"}
1
+ {"version":3,"file":"Chat.fixtures.cjs","sources":["../../../src/data/chat/Chat.fixtures.ts"],"sourcesContent":["import type { ChatTransport, UIMessage, UIMessageChunk } from \"ai\";\nimport type { ChatModel } from \"./types\";\n\n/** A sample model menu for stories driving the runtime selector. */\nexport const MOCK_MODELS: ChatModel[] = [\n {\n id: \"anthropic/claude-sonnet-4-5\",\n provider: \"anthropic\",\n label: \"Claude Sonnet 4.5\",\n reasoning: true,\n capabilitiesKnown: true,\n supportedEfforts: [\"low\", \"medium\", \"high\"],\n defaultEffort: \"medium\",\n configured: true,\n contextWindow: 200_000,\n runtime: {\n id: \"anthropic/claude-sonnet-4-5\",\n model: \"claude-sonnet-4-5\",\n backend: \"anthropic\",\n effort: \"medium\",\n },\n },\n {\n id: \"openai/gpt-4o\",\n provider: \"openai\",\n label: \"GPT-4o\",\n reasoning: false,\n capabilitiesKnown: true,\n configured: true,\n contextWindow: 128_000,\n runtime: {\n id: \"openai/gpt-4o\",\n model: \"gpt-4o\",\n backend: \"openai\",\n },\n },\n {\n id: \"googleai/gemini-2.5-pro\",\n provider: \"googleai\",\n label: \"Gemini 2.5 Pro\",\n reasoning: true,\n capabilitiesKnown: true,\n supportedEfforts: [\"low\", \"high\"],\n defaultEffort: \"high\",\n configured: false,\n contextWindow: 1_048_576,\n runtime: {\n id: \"googleai/gemini-2.5-pro\",\n model: \"gemini-2.5-pro\",\n backend: \"gemini\",\n effort: \"high\",\n },\n },\n];\n\n/** A seeded conversation that already contains a completed tool call, so a\n * story shows the collapsible tool-call panel (args → result) on load, without\n * the user sending a message. clicky operations surface as dynamic tools. */\nexport const SAMPLE_TOOL_MESSAGES: UIMessage[] = [\n { id: \"u1\", role: \"user\", parts: [{ type: \"text\", text: \"List the pods in default\" }] },\n {\n id: \"a1\",\n role: \"assistant\",\n parts: [\n {\n type: \"dynamic-tool\",\n toolCallId: \"call_listPods\",\n toolName: \"listPods\",\n state: \"output-available\",\n input: { namespace: \"default\", limit: 5 },\n output: { count: 2, pods: [\"api-7c9\", \"worker-1f2\"] },\n },\n { type: \"text\", text: \"Found **2 pods** in `default`: `api-7c9` and `worker-1f2`.\" },\n ],\n },\n];\n\n/** Emits the given chunks as a ReadableStream, with a small delay between each\n * so the UI visibly streams in Storybook. */\nfunction streamChunks(chunks: UIMessageChunk[], delayMs: number): ReadableStream<UIMessageChunk> {\n let i = 0;\n return new ReadableStream<UIMessageChunk>({\n pull(controller) {\n if (i >= chunks.length) {\n controller.close();\n return;\n }\n const chunk = chunks[i++];\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n controller.enqueue(chunk);\n resolve();\n }, delayMs);\n });\n },\n });\n}\n\nconst TEXT_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"text-start\", id: \"t0\" },\n { type: \"text-delta\", id: \"t0\", delta: \"Here is **markdown** with a list:\\n\\n\" },\n { type: \"text-delta\", id: \"t0\", delta: \"- one\\n- two\\n- three\" },\n { type: \"text-end\", id: \"t0\" },\n { type: \"finish-step\" },\n {\n type: \"finish\",\n messageMetadata: {\n usage: { inputTokens: 920, outputTokens: 280, totalTokens: 1200 },\n contextTokens: 1200,\n cost: 0.004,\n },\n },\n];\n\nconst TOOL_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n {\n type: \"tool-input-available\",\n toolCallId: \"call_1\",\n toolName: \"listPods\",\n input: { namespace: \"default\", limit: 5 },\n dynamic: true,\n },\n {\n type: \"tool-output-available\",\n toolCallId: \"call_1\",\n output: { count: 2, pods: [\"api-7c9\", \"worker-1f2\"] },\n dynamic: true,\n },\n { type: \"text-start\", id: \"t1\" },\n { type: \"text-delta\", id: \"t1\", delta: \"Found **2 pods** in `default`.\" },\n { type: \"text-end\", id: \"t1\" },\n { type: \"finish-step\" },\n {\n type: \"finish\",\n messageMetadata: {\n usage: { inputTokens: 2600, outputTokens: 800, totalTokens: 3400 },\n contextTokens: 3400,\n cost: 0.011,\n },\n },\n];\n\nconst REASONING_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"reasoning-start\", id: \"r0\" },\n { type: \"reasoning-delta\", id: \"r0\", delta: \"The user wants pods. I'll call listPods, then summarize.\" },\n { type: \"reasoning-end\", id: \"r0\" },\n { type: \"text-start\", id: \"t2\" },\n { type: \"text-delta\", id: \"t2\", delta: \"Let me check the pods.\" },\n { type: \"text-end\", id: \"t2\" },\n { type: \"finish-step\" },\n { type: \"finish\" },\n];\n\nconst APPROVAL_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"text-start\", id: \"t3\" },\n { type: \"text-delta\", id: \"t3\", delta: \"This will restart the service.\" },\n { type: \"text-end\", id: \"t3\" },\n {\n type: \"tool-input-available\",\n toolCallId: \"call_restart\",\n toolName: \"restartService\",\n input: { service: \"api\", confirm: true },\n dynamic: true,\n },\n { type: \"tool-approval-request\", approvalId: \"call_restart\", toolCallId: \"call_restart\" },\n { type: \"finish-step\" },\n { type: \"finish\" },\n];\n\n/** A mock ChatTransport that replies with a markdown text turn, then a tool\n * round-trip turn on the next submission. Use in stories/tests to drive the\n * Chat UI without a backend. */\nexport function mockChatTransport(delayMs = 120): ChatTransport<UIMessage> {\n let calls = 0;\n return {\n sendMessages() {\n const chunks = calls++ === 0 ? TEXT_TURN : TOOL_TURN;\n return Promise.resolve(streamChunks(chunks, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n\n/** A mock transport whose first turn requests tool approval, and whose resume\n * (after the user approves/denies) completes the tool and replies. */\nexport function mockApprovalTransport(delayMs = 120): ChatTransport<UIMessage> {\n let calls = 0;\n return {\n sendMessages() {\n const chunks = calls++ === 0 ? APPROVAL_TURN : TOOL_TURN;\n return Promise.resolve(streamChunks(chunks, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n\n/** A mock transport that streams a reasoning (\"thinking\") block before its\n * answer. */\nexport function mockReasoningTransport(delayMs = 120): ChatTransport<UIMessage> {\n return {\n sendMessages() {\n return Promise.resolve(streamChunks(REASONING_TURN, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { ChatTransport, UIMessage } from 'ai';
2
2
  import { ChatModel } from './types';
3
- /** A sample model menu for stories driving the model selector. */
3
+ /** A sample model menu for stories driving the runtime selector. */
4
4
  export declare const MOCK_MODELS: ChatModel[];
5
5
  /** A seeded conversation that already contains a completed tool call, so a
6
6
  * story shows the collapsible tool-call panel (args → result) on load, without
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/chat/Chat.fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAkB,MAAM,IAAI,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,kEAAkE;AAClE,eAAO,MAAM,WAAW,EAAE,SAAS,EAIlC,CAAC;AAEF;;8EAE8E;AAC9E,eAAO,MAAM,oBAAoB,EAAE,SAAS,EAiB3C,CAAC;AAsGF;;iCAEiC;AACjC,wBAAgB,iBAAiB,CAAC,OAAO,SAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAWzE;AAED;uEACuE;AACvE,wBAAgB,qBAAqB,CAAC,OAAO,SAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAW7E;AAED;cACc;AACd,wBAAgB,sBAAsB,CAAC,OAAO,SAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAS9E"}
1
+ {"version":3,"file":"Chat.fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/chat/Chat.fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAkB,MAAM,IAAI,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,oEAAoE;AACpE,eAAO,MAAM,WAAW,EAAE,SAAS,EAiDlC,CAAC;AAEF;;8EAE8E;AAC9E,eAAO,MAAM,oBAAoB,EAAE,SAAS,EAiB3C,CAAC;AAsGF;;iCAEiC;AACjC,wBAAgB,iBAAiB,CAAC,OAAO,SAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAWzE;AAED;uEACuE;AACvE,wBAAgB,qBAAqB,CAAC,OAAO,SAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAW7E;AAED;cACc;AACd,wBAAgB,sBAAsB,CAAC,OAAO,SAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAS9E"}
@@ -1,7 +1,52 @@
1
1
  const MOCK_MODELS = [
2
- { id: "anthropic/claude-sonnet-4-5", provider: "anthropic", label: "Claude Sonnet 4.5", reasoning: true, configured: true, contextWindow: 2e5 },
3
- { id: "openai/gpt-4o", provider: "openai", label: "GPT-4o", reasoning: false, configured: true, contextWindow: 128e3 },
4
- { id: "googleai/gemini-2.5-pro", provider: "googleai", label: "Gemini 2.5 Pro", reasoning: true, configured: false, contextWindow: 1048576 }
2
+ {
3
+ id: "anthropic/claude-sonnet-4-5",
4
+ provider: "anthropic",
5
+ label: "Claude Sonnet 4.5",
6
+ reasoning: true,
7
+ capabilitiesKnown: true,
8
+ supportedEfforts: ["low", "medium", "high"],
9
+ defaultEffort: "medium",
10
+ configured: true,
11
+ contextWindow: 2e5,
12
+ runtime: {
13
+ id: "anthropic/claude-sonnet-4-5",
14
+ model: "claude-sonnet-4-5",
15
+ backend: "anthropic",
16
+ effort: "medium"
17
+ }
18
+ },
19
+ {
20
+ id: "openai/gpt-4o",
21
+ provider: "openai",
22
+ label: "GPT-4o",
23
+ reasoning: false,
24
+ capabilitiesKnown: true,
25
+ configured: true,
26
+ contextWindow: 128e3,
27
+ runtime: {
28
+ id: "openai/gpt-4o",
29
+ model: "gpt-4o",
30
+ backend: "openai"
31
+ }
32
+ },
33
+ {
34
+ id: "googleai/gemini-2.5-pro",
35
+ provider: "googleai",
36
+ label: "Gemini 2.5 Pro",
37
+ reasoning: true,
38
+ capabilitiesKnown: true,
39
+ supportedEfforts: ["low", "high"],
40
+ defaultEffort: "high",
41
+ configured: false,
42
+ contextWindow: 1048576,
43
+ runtime: {
44
+ id: "googleai/gemini-2.5-pro",
45
+ model: "gemini-2.5-pro",
46
+ backend: "gemini",
47
+ effort: "high"
48
+ }
49
+ }
5
50
  ];
6
51
  function streamChunks(chunks, delayMs) {
7
52
  let i = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.fixtures.js","sources":["../../../src/data/chat/Chat.fixtures.ts"],"sourcesContent":["import type { ChatTransport, UIMessage, UIMessageChunk } from \"ai\";\nimport type { ChatModel } from \"./types\";\n\n/** A sample model menu for stories driving the model selector. */\nexport const MOCK_MODELS: ChatModel[] = [\n { id: \"anthropic/claude-sonnet-4-5\", provider: \"anthropic\", label: \"Claude Sonnet 4.5\", reasoning: true, configured: true, contextWindow: 200_000 },\n { id: \"openai/gpt-4o\", provider: \"openai\", label: \"GPT-4o\", reasoning: false, configured: true, contextWindow: 128_000 },\n { id: \"googleai/gemini-2.5-pro\", provider: \"googleai\", label: \"Gemini 2.5 Pro\", reasoning: true, configured: false, contextWindow: 1_048_576 },\n];\n\n/** A seeded conversation that already contains a completed tool call, so a\n * story shows the collapsible tool-call panel (args → result) on load, without\n * the user sending a message. clicky operations surface as dynamic tools. */\nexport const SAMPLE_TOOL_MESSAGES: UIMessage[] = [\n { id: \"u1\", role: \"user\", parts: [{ type: \"text\", text: \"List the pods in default\" }] },\n {\n id: \"a1\",\n role: \"assistant\",\n parts: [\n {\n type: \"dynamic-tool\",\n toolCallId: \"call_listPods\",\n toolName: \"listPods\",\n state: \"output-available\",\n input: { namespace: \"default\", limit: 5 },\n output: { count: 2, pods: [\"api-7c9\", \"worker-1f2\"] },\n },\n { type: \"text\", text: \"Found **2 pods** in `default`: `api-7c9` and `worker-1f2`.\" },\n ],\n },\n];\n\n/** Emits the given chunks as a ReadableStream, with a small delay between each\n * so the UI visibly streams in Storybook. */\nfunction streamChunks(chunks: UIMessageChunk[], delayMs: number): ReadableStream<UIMessageChunk> {\n let i = 0;\n return new ReadableStream<UIMessageChunk>({\n pull(controller) {\n if (i >= chunks.length) {\n controller.close();\n return;\n }\n const chunk = chunks[i++];\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n controller.enqueue(chunk);\n resolve();\n }, delayMs);\n });\n },\n });\n}\n\nconst TEXT_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"text-start\", id: \"t0\" },\n { type: \"text-delta\", id: \"t0\", delta: \"Here is **markdown** with a list:\\n\\n\" },\n { type: \"text-delta\", id: \"t0\", delta: \"- one\\n- two\\n- three\" },\n { type: \"text-end\", id: \"t0\" },\n { type: \"finish-step\" },\n {\n type: \"finish\",\n messageMetadata: {\n usage: { inputTokens: 920, outputTokens: 280, totalTokens: 1200 },\n contextTokens: 1200,\n cost: 0.004,\n },\n },\n];\n\nconst TOOL_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n {\n type: \"tool-input-available\",\n toolCallId: \"call_1\",\n toolName: \"listPods\",\n input: { namespace: \"default\", limit: 5 },\n dynamic: true,\n },\n {\n type: \"tool-output-available\",\n toolCallId: \"call_1\",\n output: { count: 2, pods: [\"api-7c9\", \"worker-1f2\"] },\n dynamic: true,\n },\n { type: \"text-start\", id: \"t1\" },\n { type: \"text-delta\", id: \"t1\", delta: \"Found **2 pods** in `default`.\" },\n { type: \"text-end\", id: \"t1\" },\n { type: \"finish-step\" },\n {\n type: \"finish\",\n messageMetadata: {\n usage: { inputTokens: 2600, outputTokens: 800, totalTokens: 3400 },\n contextTokens: 3400,\n cost: 0.011,\n },\n },\n];\n\nconst REASONING_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"reasoning-start\", id: \"r0\" },\n { type: \"reasoning-delta\", id: \"r0\", delta: \"The user wants pods. I'll call listPods, then summarize.\" },\n { type: \"reasoning-end\", id: \"r0\" },\n { type: \"text-start\", id: \"t2\" },\n { type: \"text-delta\", id: \"t2\", delta: \"Let me check the pods.\" },\n { type: \"text-end\", id: \"t2\" },\n { type: \"finish-step\" },\n { type: \"finish\" },\n];\n\nconst APPROVAL_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"text-start\", id: \"t3\" },\n { type: \"text-delta\", id: \"t3\", delta: \"This will restart the service.\" },\n { type: \"text-end\", id: \"t3\" },\n {\n type: \"tool-input-available\",\n toolCallId: \"call_restart\",\n toolName: \"restartService\",\n input: { service: \"api\", confirm: true },\n dynamic: true,\n },\n { type: \"tool-approval-request\", approvalId: \"call_restart\", toolCallId: \"call_restart\" },\n { type: \"finish-step\" },\n { type: \"finish\" },\n];\n\n/** A mock ChatTransport that replies with a markdown text turn, then a tool\n * round-trip turn on the next submission. Use in stories/tests to drive the\n * Chat UI without a backend. */\nexport function mockChatTransport(delayMs = 120): ChatTransport<UIMessage> {\n let calls = 0;\n return {\n sendMessages() {\n const chunks = calls++ === 0 ? TEXT_TURN : TOOL_TURN;\n return Promise.resolve(streamChunks(chunks, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n\n/** A mock transport whose first turn requests tool approval, and whose resume\n * (after the user approves/denies) completes the tool and replies. */\nexport function mockApprovalTransport(delayMs = 120): ChatTransport<UIMessage> {\n let calls = 0;\n return {\n sendMessages() {\n const chunks = calls++ === 0 ? APPROVAL_TURN : TOOL_TURN;\n return Promise.resolve(streamChunks(chunks, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n\n/** A mock transport that streams a reasoning (\"thinking\") block before its\n * answer. */\nexport function mockReasoningTransport(delayMs = 120): ChatTransport<UIMessage> {\n return {\n sendMessages() {\n return Promise.resolve(streamChunks(REASONING_TURN, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n"],"names":[],"mappings":"AAIO,MAAM,cAA2B;AAAA,EACtC,EAAE,IAAI,+BAA+B,UAAU,aAAa,OAAO,qBAAqB,WAAW,MAAM,YAAY,MAAM,eAAe,IAAA;AAAA,EAC1I,EAAE,IAAI,iBAAiB,UAAU,UAAU,OAAO,UAAU,WAAW,OAAO,YAAY,MAAM,eAAe,MAAA;AAAA,EAC/G,EAAE,IAAI,2BAA2B,UAAU,YAAY,OAAO,kBAAkB,WAAW,MAAM,YAAY,OAAO,eAAe,QAAA;AACrI;AA0BA,SAAS,aAAa,QAA0B,SAAiD;AAC/F,MAAI,IAAI;AACR,SAAO,IAAI,eAA+B;AAAA,IACxC,KAAK,YAAY;AACf,UAAI,KAAK,OAAO,QAAQ;AACtB,mBAAW,MAAA;AACX;AAAA,MACF;AACA,YAAM,QAAQ,OAAO,GAAG;AACxB,aAAO,IAAI,QAAc,CAAC,YAAY;AACpC,mBAAW,MAAM;AACf,qBAAW,QAAQ,KAAK;AACxB,kBAAA;AAAA,QACF,GAAG,OAAO;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EAAA,CACD;AACH;AAEA,MAAM,YAA8B;AAAA,EAClC,EAAE,MAAM,QAAA;AAAA,EACR,EAAE,MAAM,aAAA;AAAA,EACR,EAAE,MAAM,cAAc,IAAI,KAAA;AAAA,EAC1B,EAAE,MAAM,cAAc,IAAI,MAAM,OAAO,wCAAA;AAAA,EACvC,EAAE,MAAM,cAAc,IAAI,MAAM,OAAO,wBAAA;AAAA,EACvC,EAAE,MAAM,YAAY,IAAI,KAAA;AAAA,EACxB,EAAE,MAAM,cAAA;AAAA,EACR;AAAA,IACE,MAAM;AAAA,IACN,iBAAiB;AAAA,MACf,OAAO,EAAE,aAAa,KAAK,cAAc,KAAK,aAAa,KAAA;AAAA,MAC3D,eAAe;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAEA,MAAM,YAA8B;AAAA,EAClC,EAAE,MAAM,QAAA;AAAA,EACR,EAAE,MAAM,aAAA;AAAA,EACR;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,OAAO,EAAE,WAAW,WAAW,OAAO,EAAA;AAAA,IACtC,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,WAAW,YAAY,EAAA;AAAA,IAClD,SAAS;AAAA,EAAA;AAAA,EAEX,EAAE,MAAM,cAAc,IAAI,KAAA;AAAA,EAC1B,EAAE,MAAM,cAAc,IAAI,MAAM,OAAO,iCAAA;AAAA,EACvC,EAAE,MAAM,YAAY,IAAI,KAAA;AAAA,EACxB,EAAE,MAAM,cAAA;AAAA,EACR;AAAA,IACE,MAAM;AAAA,IACN,iBAAiB;AAAA,MACf,OAAO,EAAE,aAAa,MAAM,cAAc,KAAK,aAAa,KAAA;AAAA,MAC5D,eAAe;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAoCO,SAAS,kBAAkB,UAAU,KAA+B;AACzE,MAAI,QAAQ;AACZ,SAAO;AAAA,IACL,eAAe;AACb,YAAM,SAAS,YAAY,IAAI,YAAY;AAC3C,aAAO,QAAQ,QAAQ,aAAa,QAAQ,OAAO,CAAC;AAAA,IACtD;AAAA,IACA,oBAAoB;AAClB,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC7B;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"Chat.fixtures.js","sources":["../../../src/data/chat/Chat.fixtures.ts"],"sourcesContent":["import type { ChatTransport, UIMessage, UIMessageChunk } from \"ai\";\nimport type { ChatModel } from \"./types\";\n\n/** A sample model menu for stories driving the runtime selector. */\nexport const MOCK_MODELS: ChatModel[] = [\n {\n id: \"anthropic/claude-sonnet-4-5\",\n provider: \"anthropic\",\n label: \"Claude Sonnet 4.5\",\n reasoning: true,\n capabilitiesKnown: true,\n supportedEfforts: [\"low\", \"medium\", \"high\"],\n defaultEffort: \"medium\",\n configured: true,\n contextWindow: 200_000,\n runtime: {\n id: \"anthropic/claude-sonnet-4-5\",\n model: \"claude-sonnet-4-5\",\n backend: \"anthropic\",\n effort: \"medium\",\n },\n },\n {\n id: \"openai/gpt-4o\",\n provider: \"openai\",\n label: \"GPT-4o\",\n reasoning: false,\n capabilitiesKnown: true,\n configured: true,\n contextWindow: 128_000,\n runtime: {\n id: \"openai/gpt-4o\",\n model: \"gpt-4o\",\n backend: \"openai\",\n },\n },\n {\n id: \"googleai/gemini-2.5-pro\",\n provider: \"googleai\",\n label: \"Gemini 2.5 Pro\",\n reasoning: true,\n capabilitiesKnown: true,\n supportedEfforts: [\"low\", \"high\"],\n defaultEffort: \"high\",\n configured: false,\n contextWindow: 1_048_576,\n runtime: {\n id: \"googleai/gemini-2.5-pro\",\n model: \"gemini-2.5-pro\",\n backend: \"gemini\",\n effort: \"high\",\n },\n },\n];\n\n/** A seeded conversation that already contains a completed tool call, so a\n * story shows the collapsible tool-call panel (args → result) on load, without\n * the user sending a message. clicky operations surface as dynamic tools. */\nexport const SAMPLE_TOOL_MESSAGES: UIMessage[] = [\n { id: \"u1\", role: \"user\", parts: [{ type: \"text\", text: \"List the pods in default\" }] },\n {\n id: \"a1\",\n role: \"assistant\",\n parts: [\n {\n type: \"dynamic-tool\",\n toolCallId: \"call_listPods\",\n toolName: \"listPods\",\n state: \"output-available\",\n input: { namespace: \"default\", limit: 5 },\n output: { count: 2, pods: [\"api-7c9\", \"worker-1f2\"] },\n },\n { type: \"text\", text: \"Found **2 pods** in `default`: `api-7c9` and `worker-1f2`.\" },\n ],\n },\n];\n\n/** Emits the given chunks as a ReadableStream, with a small delay between each\n * so the UI visibly streams in Storybook. */\nfunction streamChunks(chunks: UIMessageChunk[], delayMs: number): ReadableStream<UIMessageChunk> {\n let i = 0;\n return new ReadableStream<UIMessageChunk>({\n pull(controller) {\n if (i >= chunks.length) {\n controller.close();\n return;\n }\n const chunk = chunks[i++];\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n controller.enqueue(chunk);\n resolve();\n }, delayMs);\n });\n },\n });\n}\n\nconst TEXT_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"text-start\", id: \"t0\" },\n { type: \"text-delta\", id: \"t0\", delta: \"Here is **markdown** with a list:\\n\\n\" },\n { type: \"text-delta\", id: \"t0\", delta: \"- one\\n- two\\n- three\" },\n { type: \"text-end\", id: \"t0\" },\n { type: \"finish-step\" },\n {\n type: \"finish\",\n messageMetadata: {\n usage: { inputTokens: 920, outputTokens: 280, totalTokens: 1200 },\n contextTokens: 1200,\n cost: 0.004,\n },\n },\n];\n\nconst TOOL_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n {\n type: \"tool-input-available\",\n toolCallId: \"call_1\",\n toolName: \"listPods\",\n input: { namespace: \"default\", limit: 5 },\n dynamic: true,\n },\n {\n type: \"tool-output-available\",\n toolCallId: \"call_1\",\n output: { count: 2, pods: [\"api-7c9\", \"worker-1f2\"] },\n dynamic: true,\n },\n { type: \"text-start\", id: \"t1\" },\n { type: \"text-delta\", id: \"t1\", delta: \"Found **2 pods** in `default`.\" },\n { type: \"text-end\", id: \"t1\" },\n { type: \"finish-step\" },\n {\n type: \"finish\",\n messageMetadata: {\n usage: { inputTokens: 2600, outputTokens: 800, totalTokens: 3400 },\n contextTokens: 3400,\n cost: 0.011,\n },\n },\n];\n\nconst REASONING_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"reasoning-start\", id: \"r0\" },\n { type: \"reasoning-delta\", id: \"r0\", delta: \"The user wants pods. I'll call listPods, then summarize.\" },\n { type: \"reasoning-end\", id: \"r0\" },\n { type: \"text-start\", id: \"t2\" },\n { type: \"text-delta\", id: \"t2\", delta: \"Let me check the pods.\" },\n { type: \"text-end\", id: \"t2\" },\n { type: \"finish-step\" },\n { type: \"finish\" },\n];\n\nconst APPROVAL_TURN: UIMessageChunk[] = [\n { type: \"start\" },\n { type: \"start-step\" },\n { type: \"text-start\", id: \"t3\" },\n { type: \"text-delta\", id: \"t3\", delta: \"This will restart the service.\" },\n { type: \"text-end\", id: \"t3\" },\n {\n type: \"tool-input-available\",\n toolCallId: \"call_restart\",\n toolName: \"restartService\",\n input: { service: \"api\", confirm: true },\n dynamic: true,\n },\n { type: \"tool-approval-request\", approvalId: \"call_restart\", toolCallId: \"call_restart\" },\n { type: \"finish-step\" },\n { type: \"finish\" },\n];\n\n/** A mock ChatTransport that replies with a markdown text turn, then a tool\n * round-trip turn on the next submission. Use in stories/tests to drive the\n * Chat UI without a backend. */\nexport function mockChatTransport(delayMs = 120): ChatTransport<UIMessage> {\n let calls = 0;\n return {\n sendMessages() {\n const chunks = calls++ === 0 ? TEXT_TURN : TOOL_TURN;\n return Promise.resolve(streamChunks(chunks, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n\n/** A mock transport whose first turn requests tool approval, and whose resume\n * (after the user approves/denies) completes the tool and replies. */\nexport function mockApprovalTransport(delayMs = 120): ChatTransport<UIMessage> {\n let calls = 0;\n return {\n sendMessages() {\n const chunks = calls++ === 0 ? APPROVAL_TURN : TOOL_TURN;\n return Promise.resolve(streamChunks(chunks, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n\n/** A mock transport that streams a reasoning (\"thinking\") block before its\n * answer. */\nexport function mockReasoningTransport(delayMs = 120): ChatTransport<UIMessage> {\n return {\n sendMessages() {\n return Promise.resolve(streamChunks(REASONING_TURN, delayMs));\n },\n reconnectToStream() {\n return Promise.resolve(null);\n },\n };\n}\n"],"names":[],"mappings":"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"}