@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,9 +1,13 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect } from "react";
2
3
  import { cn } from "../../lib/utils.js";
3
4
  import { compactTokens, formatCost } from "../../lib/tokens.js";
4
5
  import { Icon } from "../Icon.js";
5
6
  import { HoverCard } from "../../overlay/HoverCard.js";
6
7
  import { effortLevelIcon, effortLevelColor, effortLevelLabel } from "./effort-icons.js";
8
+ import { UiCheck } from "../../icons/components/UiCheck.js";
9
+ import { UiCopy } from "../../icons/components/UiCopy.js";
10
+ const COPY_STATUS_RESET_MS = 2e3;
7
11
  const GAUGE_RADIUS = 15;
8
12
  const GAUGE_CIRCUMFERENCE = 2 * Math.PI * GAUGE_RADIUS;
9
13
  function barTone(pct) {
@@ -72,6 +76,8 @@ function ContextMeter({
72
76
  usedTokens,
73
77
  windowTokens,
74
78
  messageCount,
79
+ sessionId,
80
+ executionMode,
75
81
  model,
76
82
  modelIcon: Glyph,
77
83
  modelIconClassName,
@@ -81,11 +87,38 @@ function ContextMeter({
81
87
  budget,
82
88
  className
83
89
  }) {
90
+ const [copyResult, setCopyResult] = useState();
91
+ const copyResetTimer = useRef(void 0);
92
+ useEffect(
93
+ () => () => {
94
+ if (copyResetTimer.current !== void 0) {
95
+ window.clearTimeout(copyResetTimer.current);
96
+ }
97
+ },
98
+ []
99
+ );
84
100
  const pct = Math.min(100, Math.max(0, Math.round(usedPercent)));
85
101
  const totalTokens = (tokens == null ? void 0 : tokens.total) ?? 0;
86
102
  const totalCost = (cost == null ? void 0 : cost.total) ?? 0;
87
103
  const EffortGlyph = effort ? effortLevelIcon(effort) : void 0;
88
104
  const effortColor = effort ? effortLevelColor(effort) : void 0;
105
+ const copyStatus = copyResult && copyResult.sessionId === sessionId ? copyResult.status : void 0;
106
+ const copySessionId = async () => {
107
+ if (!sessionId) return;
108
+ if (copyResetTimer.current !== void 0) {
109
+ window.clearTimeout(copyResetTimer.current);
110
+ }
111
+ try {
112
+ await navigator.clipboard.writeText(sessionId);
113
+ setCopyResult({ sessionId, status: "copied" });
114
+ } catch {
115
+ setCopyResult({ sessionId, status: "failed" });
116
+ }
117
+ copyResetTimer.current = window.setTimeout(
118
+ () => setCopyResult(void 0),
119
+ COPY_STATUS_RESET_MS
120
+ );
121
+ };
89
122
  const trigger = mode === "gauge" ? /* @__PURE__ */ jsx(
90
123
  "span",
91
124
  {
@@ -186,80 +219,118 @@ function ContextMeter({
186
219
  ]
187
220
  }
188
221
  );
189
- return /* @__PURE__ */ jsx(HoverCard, { trigger, placement: "bottom", cardClassName: "w-72 p-3", children: /* @__PURE__ */ jsxs("div", { className: "space-y-2.5 text-xs", children: [
190
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
191
- /* @__PURE__ */ jsx("span", { className: "font-semibold", children: "Context usage" }),
192
- /* @__PURE__ */ jsxs("span", { className: cn("font-semibold tabular-nums", textTone(pct)), children: [
193
- pct,
194
- "%"
195
- ] })
196
- ] }),
197
- (model || effort) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-border pb-2", children: [
198
- model ? /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
199
- Glyph && /* @__PURE__ */ jsx(
200
- Icon,
201
- {
202
- icon: Glyph,
203
- className: cn("size-4 shrink-0", modelIconClassName)
204
- }
205
- ),
206
- /* @__PURE__ */ jsx("span", { className: "truncate font-medium", title: model, children: model })
207
- ] }) : null,
208
- effort ? /* @__PURE__ */ jsxs(
209
- "span",
210
- {
211
- className: cn(
212
- "inline-flex shrink-0 items-center gap-1 font-medium",
213
- effortColor
222
+ return /* @__PURE__ */ jsx(
223
+ HoverCard,
224
+ {
225
+ trigger,
226
+ placement: "bottom",
227
+ delay: 200,
228
+ cardClassName: "w-72 p-3",
229
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-2.5 text-xs", children: [
230
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
231
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: "Context usage" }),
232
+ /* @__PURE__ */ jsxs("span", { className: cn("font-semibold tabular-nums", textTone(pct)), children: [
233
+ pct,
234
+ "%"
235
+ ] })
236
+ ] }),
237
+ (model || effort) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-border pb-2", children: [
238
+ model ? /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
239
+ Glyph && /* @__PURE__ */ jsx(
240
+ Icon,
241
+ {
242
+ icon: Glyph,
243
+ className: cn("size-4 shrink-0", modelIconClassName)
244
+ }
245
+ ),
246
+ /* @__PURE__ */ jsx("span", { className: "truncate font-medium", title: model, children: model })
247
+ ] }) : null,
248
+ effort ? /* @__PURE__ */ jsxs(
249
+ "span",
250
+ {
251
+ className: cn(
252
+ "inline-flex shrink-0 items-center gap-1 font-medium",
253
+ effortColor
254
+ ),
255
+ children: [
256
+ EffortGlyph ? /* @__PURE__ */ jsx(EffortGlyph, { className: "size-3.5" }) : null,
257
+ effortLevelLabel(effort),
258
+ " effort"
259
+ ]
260
+ }
261
+ ) : null
262
+ ] }),
263
+ (sessionId || executionMode) && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5 border-b border-border pb-2", children: [
264
+ sessionId ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
265
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Session" }),
266
+ /* @__PURE__ */ jsxs(
267
+ "button",
268
+ {
269
+ type: "button",
270
+ "aria-label": copyStatus === "copied" ? "Session ID copied" : copyStatus === "failed" ? "Session ID copy failed" : "Copy session ID",
271
+ title: sessionId,
272
+ className: cn(
273
+ "flex min-w-0 max-w-48 items-center gap-1.5 font-medium hover:text-foreground",
274
+ copyStatus === "failed" && "text-destructive"
275
+ ),
276
+ onClick: () => void copySessionId(),
277
+ children: [
278
+ /* @__PURE__ */ jsx("span", { className: "truncate font-mono", children: sessionId }),
279
+ /* @__PURE__ */ jsx(
280
+ Icon,
281
+ {
282
+ icon: copyStatus === "copied" ? UiCheck : UiCopy,
283
+ className: "size-3.5 shrink-0"
284
+ }
285
+ )
286
+ ]
287
+ }
288
+ )
289
+ ] }) : null,
290
+ executionMode ? /* @__PURE__ */ jsx(Row, { label: "Mode", value: executionMode }) : null
291
+ ] }),
292
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
293
+ /* @__PURE__ */ jsx("div", { className: "h-1.5 overflow-hidden rounded-full bg-muted", children: /* @__PURE__ */ jsx(
294
+ "div",
295
+ {
296
+ className: cn("h-full rounded-full", barTone(pct)),
297
+ style: { width: `${pct}%` }
298
+ }
299
+ ) }),
300
+ windowTokens ? /* @__PURE__ */ jsxs(Fragment, { children: [
301
+ /* @__PURE__ */ jsx(
302
+ Row,
303
+ {
304
+ label: "Window",
305
+ value: `${compactTokens(usedTokens ?? 0)} / ${compactTokens(windowTokens)}`
306
+ }
307
+ ),
308
+ /* @__PURE__ */ jsx(Row, { label: "Free", value: `${100 - pct}%` })
309
+ ] }) : /* @__PURE__ */ jsx(Row, { label: "Used", value: `${pct}%` }),
310
+ messageCount != null ? /* @__PURE__ */ jsx(Row, { label: "Messages", value: String(messageCount) }) : null
311
+ ] }),
312
+ (totalTokens > 0 || totalCost > 0 || budget) && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5 border-t border-border pt-2", children: [
313
+ (totalTokens > 0 || totalCost > 0) && /* @__PURE__ */ jsx(
314
+ UsageTable,
315
+ {
316
+ rows: bucketRows(tokens, cost),
317
+ totalTokens,
318
+ totalCost,
319
+ showTokens: totalTokens > 0,
320
+ showCost: totalCost > 0
321
+ }
214
322
  ),
215
- children: [
216
- EffortGlyph ? /* @__PURE__ */ jsx(EffortGlyph, { className: "size-3.5" }) : null,
217
- effortLevelLabel(effort),
218
- " effort"
219
- ]
220
- }
221
- ) : null
222
- ] }),
223
- /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
224
- /* @__PURE__ */ jsx("div", { className: "h-1.5 overflow-hidden rounded-full bg-muted", children: /* @__PURE__ */ jsx(
225
- "div",
226
- {
227
- className: cn("h-full rounded-full", barTone(pct)),
228
- style: { width: `${pct}%` }
229
- }
230
- ) }),
231
- windowTokens ? /* @__PURE__ */ jsxs(Fragment, { children: [
232
- /* @__PURE__ */ jsx(
233
- Row,
234
- {
235
- label: "Window",
236
- value: `${compactTokens(usedTokens ?? 0)} / ${compactTokens(windowTokens)}`
237
- }
238
- ),
239
- /* @__PURE__ */ jsx(Row, { label: "Free", value: `${100 - pct}%` })
240
- ] }) : /* @__PURE__ */ jsx(Row, { label: "Used", value: `${pct}%` }),
241
- messageCount != null ? /* @__PURE__ */ jsx(Row, { label: "Messages", value: String(messageCount) }) : null
242
- ] }),
243
- (totalTokens > 0 || totalCost > 0 || budget) && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5 border-t border-border pt-2", children: [
244
- (totalTokens > 0 || totalCost > 0) && /* @__PURE__ */ jsx(
245
- UsageTable,
246
- {
247
- rows: bucketRows(tokens, cost),
248
- totalTokens,
249
- totalCost,
250
- showTokens: totalTokens > 0,
251
- showCost: totalCost > 0
252
- }
253
- ),
254
- (budget == null ? void 0 : budget.total) != null && budget.total > 0 ? /* @__PURE__ */ jsx(
255
- Row,
256
- {
257
- label: "Budget",
258
- value: `${formatCost(budget.used ?? 0)} / ${formatCost(budget.total)}`
259
- }
260
- ) : (budget == null ? void 0 : budget.remaining) != null ? /* @__PURE__ */ jsx(Row, { label: "Budget left", value: formatCost(budget.remaining) }) : anyPositive(budget == null ? void 0 : budget.used) ? /* @__PURE__ */ jsx(Row, { label: "Budget", value: formatCost((budget == null ? void 0 : budget.used) ?? 0) }) : null
261
- ] })
262
- ] }) });
323
+ (budget == null ? void 0 : budget.total) != null && budget.total > 0 ? /* @__PURE__ */ jsx(
324
+ Row,
325
+ {
326
+ label: "Budget",
327
+ value: `${formatCost(budget.used ?? 0)} / ${formatCost(budget.total)}`
328
+ }
329
+ ) : (budget == null ? void 0 : budget.remaining) != null ? /* @__PURE__ */ jsx(Row, { label: "Budget left", value: formatCost(budget.remaining) }) : anyPositive(budget == null ? void 0 : budget.used) ? /* @__PURE__ */ jsx(Row, { label: "Budget", value: formatCost((budget == null ? void 0 : budget.used) ?? 0) }) : null
330
+ ] })
331
+ ] })
332
+ }
333
+ );
263
334
  }
264
335
  export {
265
336
  ContextMeter
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMeter.js","sources":["../../../src/data/chat/ContextMeter.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport { compactTokens, formatCost } from \"../../lib/tokens\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport { HoverCard } from \"../../overlay/HoverCard\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"./effort-icons\";\n\nexport type ContextMeterMode = \"bar\" | \"gauge\";\n\nexport type ContextMeterTokens = {\n input?: number | undefined;\n output?: number | undefined;\n reasoning?: number | undefined;\n cacheRead?: number | undefined;\n cacheWrite?: number | undefined;\n total?: number | undefined;\n};\n\nexport type ContextMeterCost = {\n input?: number | undefined;\n output?: number | undefined;\n reasoning?: number | undefined;\n cacheRead?: number | undefined;\n cacheWrite?: number | undefined;\n total?: number | undefined;\n};\n\nexport type ContextMeterBudget = {\n used?: number | undefined;\n total?: number | undefined;\n remaining?: number | undefined;\n};\n\nexport type ContextMeterProps = {\n /** Trigger shape: a compact `bar` (session header) or a circular `gauge`\n * (chat toolbar). Both open the same hover popover. */\n mode?: ContextMeterMode;\n /** Share of the context window used, 0–100 — drives the fill and tone. */\n usedPercent: number;\n /** Context-window tokens shown in the popover. */\n usedTokens?: number | undefined;\n windowTokens?: number | undefined;\n /** Message count shown in the popover (chat). */\n messageCount?: number | undefined;\n /** Model id/label and its brand glyph. */\n model?: string | undefined;\n modelIcon?: StaticIconComponent | undefined;\n modelIconClassName?: string | undefined;\n /** Reasoning effort shown with its semantic glyph and color in the hover card. */\n effort?: string | undefined;\n /** Per-bucket token counts for the popover breakdown. */\n tokens?: ContextMeterTokens | undefined;\n /** Per-bucket costs (USD) for the popover breakdown. */\n cost?: ContextMeterCost | undefined;\n budget?: ContextMeterBudget | undefined;\n className?: string | undefined;\n};\n\nconst GAUGE_RADIUS = 15;\nconst GAUGE_CIRCUMFERENCE = 2 * Math.PI * GAUGE_RADIUS;\n\nfunction barTone(pct: number): string {\n return pct > 80\n ? \"bg-red-600 [[data-theme=dark]_&]:bg-red-400\"\n : pct > 50\n ? \"bg-amber-700 [[data-theme=dark]_&]:bg-amber-400\"\n : \"bg-emerald-600 [[data-theme=dark]_&]:bg-emerald-400\";\n}\n\nfunction ringTone(pct: number): string {\n return pct > 80\n ? \"text-red-600 [[data-theme=dark]_&]:text-red-400\"\n : pct > 50\n ? \"text-amber-700 [[data-theme=dark]_&]:text-amber-400\"\n : \"text-emerald-600 [[data-theme=dark]_&]:text-emerald-400\";\n}\n\nfunction textTone(pct: number): string {\n return pct > 80\n ? \"text-red-700 [[data-theme=dark]_&]:text-red-400\"\n : pct > 50\n ? \"text-amber-700 [[data-theme=dark]_&]:text-amber-400\"\n : \"text-emerald-700 [[data-theme=dark]_&]:text-emerald-400\";\n}\n\nfunction Row({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex justify-between gap-4\">\n <span className=\"text-muted-foreground\">{label}</span>\n <span className=\"font-medium tabular-nums\">{value}</span>\n </div>\n );\n}\n\nfunction anyPositive(...values: (number | undefined)[]): boolean {\n return values.some((v) => v != null && v > 0);\n}\n\ntype BucketRow = {\n label: string;\n tokens?: number | undefined;\n cost?: number | undefined;\n};\n\n/** One row per token/cost bucket, kept only when it carries a token or cost\n * value. Cache stays split into read and write on both axes. */\nfunction bucketRows(\n tokens?: ContextMeterTokens,\n cost?: ContextMeterCost,\n): BucketRow[] {\n const rows: BucketRow[] = [\n { label: \"Input\", tokens: tokens?.input, cost: cost?.input },\n { label: \"Output\", tokens: tokens?.output, cost: cost?.output },\n { label: \"Reasoning\", tokens: tokens?.reasoning, cost: cost?.reasoning },\n { label: \"Cache read\", tokens: tokens?.cacheRead, cost: cost?.cacheRead },\n {\n label: \"Cache write\",\n tokens: tokens?.cacheWrite,\n cost: cost?.cacheWrite,\n },\n ];\n return rows.filter((row) => (row.tokens ?? 0) > 0 || (row.cost ?? 0) > 0);\n}\n\nfunction UsageTable({\n rows,\n totalTokens,\n totalCost,\n showTokens,\n showCost,\n}: {\n rows: BucketRow[];\n totalTokens: number;\n totalCost: number;\n showTokens: boolean;\n showCost: boolean;\n}) {\n const numCell = \"px-1 py-0.5 text-right tabular-nums\";\n return (\n <table className=\"w-full border-collapse\">\n <thead>\n <tr className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n <th className=\"px-1 py-0.5 text-left font-medium\" />\n {showTokens && (\n <th className=\"px-1 py-0.5 text-right font-medium\">Tokens</th>\n )}\n {showCost && (\n <th className=\"px-1 py-0.5 text-right font-medium\">Cost</th>\n )}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.label}>\n <td className=\"px-1 py-0.5 text-left text-muted-foreground\">\n {row.label}\n </td>\n {showTokens && (\n <td className={numCell}>\n {row.tokens ? (\n compactTokens(row.tokens)\n ) : (\n <span className=\"text-muted-foreground/50\">—</span>\n )}\n </td>\n )}\n {showCost && (\n <td className={numCell}>\n {row.cost ? (\n formatCost(row.cost)\n ) : (\n <span className=\"text-muted-foreground/50\">—</span>\n )}\n </td>\n )}\n </tr>\n ))}\n <tr className=\"border-t border-border font-medium\">\n <td className=\"px-1 py-0.5 text-left\">Total</td>\n {showTokens && (\n <td className={numCell}>{compactTokens(totalTokens)}</td>\n )}\n {showCost && <td className={numCell}>{formatCost(totalCost)}</td>}\n </tr>\n </tbody>\n </table>\n );\n}\n\n/** Unified context-window meter. Renders as a compact progress `bar` or a\n * circular `gauge`; hovering or focusing it opens a popover with the model, the\n * context-window breakdown, per-bucket token usage and the cost + budget\n * detail. Domain-agnostic — callers feed plain numbers. */\nexport function ContextMeter({\n mode = \"bar\",\n usedPercent,\n usedTokens,\n windowTokens,\n messageCount,\n model,\n modelIcon: Glyph,\n modelIconClassName,\n effort,\n tokens,\n cost,\n budget,\n className,\n}: ContextMeterProps) {\n const pct = Math.min(100, Math.max(0, Math.round(usedPercent)));\n const totalTokens = tokens?.total ?? 0;\n const totalCost = cost?.total ?? 0;\n const EffortGlyph = effort ? effortLevelIcon(effort) : undefined;\n const effortColor = effort ? effortLevelColor(effort) : undefined;\n\n const trigger =\n mode === \"gauge\" ? (\n <span\n className={cn(\n \"inline-flex items-center rounded-md px-2.5 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\",\n className,\n )}\n aria-label={`Context ${pct}% used`}\n >\n <span className=\"relative inline-flex size-9 shrink-0 items-center justify-center\">\n <svg\n data-context-gauge-ring\n aria-hidden=\"true\"\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n className={cn(\"absolute inset-0\", ringTone(pct))}\n >\n <circle\n cx=\"18\"\n cy=\"18\"\n r={GAUGE_RADIUS}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n opacity=\"0.15\"\n />\n <circle\n cx=\"18\"\n cy=\"18\"\n r={GAUGE_RADIUS}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeDasharray={GAUGE_CIRCUMFERENCE}\n strokeDashoffset={(1 - pct / 100) * GAUGE_CIRCUMFERENCE}\n strokeLinecap=\"round\"\n transform=\"rotate(-90 18 18)\"\n />\n </svg>\n {Glyph ? (\n <Icon\n icon={Glyph}\n className={cn(\"relative size-5\", modelIconClassName)}\n />\n ) : (\n <span\n className={cn(\n \"relative text-[9px] font-semibold tabular-nums\",\n textTone(pct),\n )}\n >\n {pct}\n </span>\n )}\n </span>\n </span>\n ) : (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded border border-border px-1.5 py-0.5 text-[11px] text-muted-foreground\",\n className,\n )}\n aria-label={`Context ${pct}% used`}\n >\n <span className=\"shrink-0\">ctx</span>\n <span className=\"h-1.5 w-16 overflow-hidden rounded-full bg-muted\">\n <span\n className={cn(\n \"block h-full rounded-full transition-all\",\n barTone(pct),\n )}\n style={{ width: `${pct}%` }}\n />\n </span>\n <span\n className={cn(\"shrink-0 font-medium tabular-nums\", textTone(pct))}\n >\n {pct}%\n </span>\n </span>\n );\n\n return (\n <HoverCard trigger={trigger} placement=\"bottom\" cardClassName=\"w-72 p-3\">\n <div className=\"space-y-2.5 text-xs\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"font-semibold\">Context usage</span>\n <span className={cn(\"font-semibold tabular-nums\", textTone(pct))}>\n {pct}%\n </span>\n </div>\n\n {(model || effort) && (\n <div className=\"flex items-center justify-between gap-3 border-b border-border pb-2\">\n {model ? (\n <div className=\"flex min-w-0 items-center gap-2\">\n {Glyph && (\n <Icon\n icon={Glyph}\n className={cn(\"size-4 shrink-0\", modelIconClassName)}\n />\n )}\n <span className=\"truncate font-medium\" title={model}>\n {model}\n </span>\n </div>\n ) : null}\n {effort ? (\n <span\n className={cn(\n \"inline-flex shrink-0 items-center gap-1 font-medium\",\n effortColor,\n )}\n >\n {EffortGlyph ? <EffortGlyph className=\"size-3.5\" /> : null}\n {effortLevelLabel(effort)} effort\n </span>\n ) : null}\n </div>\n )}\n\n <div className=\"space-y-1.5\">\n <div className=\"h-1.5 overflow-hidden rounded-full bg-muted\">\n <div\n className={cn(\"h-full rounded-full\", barTone(pct))}\n style={{ width: `${pct}%` }}\n />\n </div>\n {windowTokens ? (\n <>\n <Row\n label=\"Window\"\n value={`${compactTokens(usedTokens ?? 0)} / ${compactTokens(windowTokens)}`}\n />\n <Row label=\"Free\" value={`${100 - pct}%`} />\n </>\n ) : (\n <Row label=\"Used\" value={`${pct}%`} />\n )}\n {messageCount != null ? (\n <Row label=\"Messages\" value={String(messageCount)} />\n ) : null}\n </div>\n\n {(totalTokens > 0 || totalCost > 0 || budget) && (\n <div className=\"space-y-1.5 border-t border-border pt-2\">\n {(totalTokens > 0 || totalCost > 0) && (\n <UsageTable\n rows={bucketRows(tokens, cost)}\n totalTokens={totalTokens}\n totalCost={totalCost}\n showTokens={totalTokens > 0}\n showCost={totalCost > 0}\n />\n )}\n {budget?.total != null && budget.total > 0 ? (\n <Row\n label=\"Budget\"\n value={`${formatCost(budget.used ?? 0)} / ${formatCost(budget.total)}`}\n />\n ) : budget?.remaining != null ? (\n <Row label=\"Budget left\" value={formatCost(budget.remaining)} />\n ) : anyPositive(budget?.used) ? (\n <Row label=\"Budget\" value={formatCost(budget?.used ?? 0)} />\n ) : null}\n </div>\n )}\n </div>\n </HoverCard>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ContextMeter.js","sources":["../../../src/data/chat/ContextMeter.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { compactTokens, formatCost } from \"../../lib/tokens\";\nimport { UiCheck, UiCopy } from \"../../icons\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport { HoverCard } from \"../../overlay/HoverCard\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"./effort-icons\";\n\nexport type ContextMeterMode = \"bar\" | \"gauge\";\n\nexport type ContextMeterTokens = {\n input?: number | undefined;\n output?: number | undefined;\n reasoning?: number | undefined;\n cacheRead?: number | undefined;\n cacheWrite?: number | undefined;\n total?: number | undefined;\n};\n\nexport type ContextMeterCost = {\n input?: number | undefined;\n output?: number | undefined;\n reasoning?: number | undefined;\n cacheRead?: number | undefined;\n cacheWrite?: number | undefined;\n total?: number | undefined;\n};\n\nexport type ContextMeterBudget = {\n used?: number | undefined;\n total?: number | undefined;\n remaining?: number | undefined;\n};\n\nexport type ContextMeterProps = {\n /** Trigger shape: a compact `bar` (session header) or a circular `gauge`\n * (chat toolbar). Both open the same hover popover. */\n mode?: ContextMeterMode;\n /** Share of the context window used, 0–100 — drives the fill and tone. */\n usedPercent: number;\n /** Context-window tokens shown in the popover. */\n usedTokens?: number | undefined;\n windowTokens?: number | undefined;\n /** Message count shown in the popover (chat). */\n messageCount?: number | undefined;\n /** Session identifier exposed as a click-to-copy value in the popover. */\n sessionId?: string | undefined;\n /** Runtime mechanism used to execute the session, such as api or cmux. */\n executionMode?: string | undefined;\n /** Model id/label and its brand glyph. */\n model?: string | undefined;\n modelIcon?: StaticIconComponent | undefined;\n modelIconClassName?: string | undefined;\n /** Reasoning effort shown with its semantic glyph and color in the hover card. */\n effort?: string | undefined;\n /** Per-bucket token counts for the popover breakdown. */\n tokens?: ContextMeterTokens | undefined;\n /** Per-bucket costs (USD) for the popover breakdown. */\n cost?: ContextMeterCost | undefined;\n budget?: ContextMeterBudget | undefined;\n className?: string | undefined;\n};\n\nconst COPY_STATUS_RESET_MS = 2000;\nconst GAUGE_RADIUS = 15;\nconst GAUGE_CIRCUMFERENCE = 2 * Math.PI * GAUGE_RADIUS;\n\nfunction barTone(pct: number): string {\n return pct > 80\n ? \"bg-red-600 [[data-theme=dark]_&]:bg-red-400\"\n : pct > 50\n ? \"bg-amber-700 [[data-theme=dark]_&]:bg-amber-400\"\n : \"bg-emerald-600 [[data-theme=dark]_&]:bg-emerald-400\";\n}\n\nfunction ringTone(pct: number): string {\n return pct > 80\n ? \"text-red-600 [[data-theme=dark]_&]:text-red-400\"\n : pct > 50\n ? \"text-amber-700 [[data-theme=dark]_&]:text-amber-400\"\n : \"text-emerald-600 [[data-theme=dark]_&]:text-emerald-400\";\n}\n\nfunction textTone(pct: number): string {\n return pct > 80\n ? \"text-red-700 [[data-theme=dark]_&]:text-red-400\"\n : pct > 50\n ? \"text-amber-700 [[data-theme=dark]_&]:text-amber-400\"\n : \"text-emerald-700 [[data-theme=dark]_&]:text-emerald-400\";\n}\n\nfunction Row({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex justify-between gap-4\">\n <span className=\"text-muted-foreground\">{label}</span>\n <span className=\"font-medium tabular-nums\">{value}</span>\n </div>\n );\n}\n\nfunction anyPositive(...values: (number | undefined)[]): boolean {\n return values.some((v) => v != null && v > 0);\n}\n\ntype BucketRow = {\n label: string;\n tokens?: number | undefined;\n cost?: number | undefined;\n};\n\n/** One row per token/cost bucket, kept only when it carries a token or cost\n * value. Cache stays split into read and write on both axes. */\nfunction bucketRows(\n tokens?: ContextMeterTokens,\n cost?: ContextMeterCost,\n): BucketRow[] {\n const rows: BucketRow[] = [\n { label: \"Input\", tokens: tokens?.input, cost: cost?.input },\n { label: \"Output\", tokens: tokens?.output, cost: cost?.output },\n { label: \"Reasoning\", tokens: tokens?.reasoning, cost: cost?.reasoning },\n { label: \"Cache read\", tokens: tokens?.cacheRead, cost: cost?.cacheRead },\n {\n label: \"Cache write\",\n tokens: tokens?.cacheWrite,\n cost: cost?.cacheWrite,\n },\n ];\n return rows.filter((row) => (row.tokens ?? 0) > 0 || (row.cost ?? 0) > 0);\n}\n\nfunction UsageTable({\n rows,\n totalTokens,\n totalCost,\n showTokens,\n showCost,\n}: {\n rows: BucketRow[];\n totalTokens: number;\n totalCost: number;\n showTokens: boolean;\n showCost: boolean;\n}) {\n const numCell = \"px-1 py-0.5 text-right tabular-nums\";\n return (\n <table className=\"w-full border-collapse\">\n <thead>\n <tr className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n <th className=\"px-1 py-0.5 text-left font-medium\" />\n {showTokens && (\n <th className=\"px-1 py-0.5 text-right font-medium\">Tokens</th>\n )}\n {showCost && (\n <th className=\"px-1 py-0.5 text-right font-medium\">Cost</th>\n )}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.label}>\n <td className=\"px-1 py-0.5 text-left text-muted-foreground\">\n {row.label}\n </td>\n {showTokens && (\n <td className={numCell}>\n {row.tokens ? (\n compactTokens(row.tokens)\n ) : (\n <span className=\"text-muted-foreground/50\">—</span>\n )}\n </td>\n )}\n {showCost && (\n <td className={numCell}>\n {row.cost ? (\n formatCost(row.cost)\n ) : (\n <span className=\"text-muted-foreground/50\">—</span>\n )}\n </td>\n )}\n </tr>\n ))}\n <tr className=\"border-t border-border font-medium\">\n <td className=\"px-1 py-0.5 text-left\">Total</td>\n {showTokens && (\n <td className={numCell}>{compactTokens(totalTokens)}</td>\n )}\n {showCost && <td className={numCell}>{formatCost(totalCost)}</td>}\n </tr>\n </tbody>\n </table>\n );\n}\n\n/** Unified context-window meter. Renders as a compact progress `bar` or a\n * circular `gauge`; hovering or focusing it opens a popover with the model, the\n * copyable session id, execution mode, context-window breakdown, per-bucket\n * token usage and the cost + budget detail. Domain-agnostic — callers feed\n * plain values. */\nexport function ContextMeter({\n mode = \"bar\",\n usedPercent,\n usedTokens,\n windowTokens,\n messageCount,\n sessionId,\n executionMode,\n model,\n modelIcon: Glyph,\n modelIconClassName,\n effort,\n tokens,\n cost,\n budget,\n className,\n}: ContextMeterProps) {\n const [copyResult, setCopyResult] = useState<\n { sessionId: string; status: \"copied\" | \"failed\" } | undefined\n >();\n const copyResetTimer = useRef<number | undefined>(undefined);\n useEffect(\n () => () => {\n if (copyResetTimer.current !== undefined) {\n window.clearTimeout(copyResetTimer.current);\n }\n },\n [],\n );\n const pct = Math.min(100, Math.max(0, Math.round(usedPercent)));\n const totalTokens = tokens?.total ?? 0;\n const totalCost = cost?.total ?? 0;\n const EffortGlyph = effort ? effortLevelIcon(effort) : undefined;\n const effortColor = effort ? effortLevelColor(effort) : undefined;\n const copyStatus =\n copyResult && copyResult.sessionId === sessionId\n ? copyResult.status\n : undefined;\n // The status is transient feedback for the click that produced it — without\n // this it would greet every later hover of the same session.\n const copySessionId = async () => {\n if (!sessionId) return;\n if (copyResetTimer.current !== undefined) {\n window.clearTimeout(copyResetTimer.current);\n }\n try {\n await navigator.clipboard.writeText(sessionId);\n setCopyResult({ sessionId, status: \"copied\" });\n } catch {\n setCopyResult({ sessionId, status: \"failed\" });\n }\n copyResetTimer.current = window.setTimeout(\n () => setCopyResult(undefined),\n COPY_STATUS_RESET_MS,\n );\n };\n\n const trigger =\n mode === \"gauge\" ? (\n <span\n className={cn(\n \"inline-flex items-center rounded-md px-2.5 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\",\n className,\n )}\n aria-label={`Context ${pct}% used`}\n >\n <span className=\"relative inline-flex size-9 shrink-0 items-center justify-center\">\n <svg\n data-context-gauge-ring\n aria-hidden=\"true\"\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n className={cn(\"absolute inset-0\", ringTone(pct))}\n >\n <circle\n cx=\"18\"\n cy=\"18\"\n r={GAUGE_RADIUS}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n opacity=\"0.15\"\n />\n <circle\n cx=\"18\"\n cy=\"18\"\n r={GAUGE_RADIUS}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeDasharray={GAUGE_CIRCUMFERENCE}\n strokeDashoffset={(1 - pct / 100) * GAUGE_CIRCUMFERENCE}\n strokeLinecap=\"round\"\n transform=\"rotate(-90 18 18)\"\n />\n </svg>\n {Glyph ? (\n <Icon\n icon={Glyph}\n className={cn(\"relative size-5\", modelIconClassName)}\n />\n ) : (\n <span\n className={cn(\n \"relative text-[9px] font-semibold tabular-nums\",\n textTone(pct),\n )}\n >\n {pct}\n </span>\n )}\n </span>\n </span>\n ) : (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded border border-border px-1.5 py-0.5 text-[11px] text-muted-foreground\",\n className,\n )}\n aria-label={`Context ${pct}% used`}\n >\n <span className=\"shrink-0\">ctx</span>\n <span className=\"h-1.5 w-16 overflow-hidden rounded-full bg-muted\">\n <span\n className={cn(\n \"block h-full rounded-full transition-all\",\n barTone(pct),\n )}\n style={{ width: `${pct}%` }}\n />\n </span>\n <span\n className={cn(\"shrink-0 font-medium tabular-nums\", textTone(pct))}\n >\n {pct}%\n </span>\n </span>\n );\n\n return (\n <HoverCard\n trigger={trigger}\n placement=\"bottom\"\n delay={200}\n cardClassName=\"w-72 p-3\"\n >\n <div className=\"space-y-2.5 text-xs\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"font-semibold\">Context usage</span>\n <span className={cn(\"font-semibold tabular-nums\", textTone(pct))}>\n {pct}%\n </span>\n </div>\n\n {(model || effort) && (\n <div className=\"flex items-center justify-between gap-3 border-b border-border pb-2\">\n {model ? (\n <div className=\"flex min-w-0 items-center gap-2\">\n {Glyph && (\n <Icon\n icon={Glyph}\n className={cn(\"size-4 shrink-0\", modelIconClassName)}\n />\n )}\n <span className=\"truncate font-medium\" title={model}>\n {model}\n </span>\n </div>\n ) : null}\n {effort ? (\n <span\n className={cn(\n \"inline-flex shrink-0 items-center gap-1 font-medium\",\n effortColor,\n )}\n >\n {EffortGlyph ? <EffortGlyph className=\"size-3.5\" /> : null}\n {effortLevelLabel(effort)} effort\n </span>\n ) : null}\n </div>\n )}\n\n {(sessionId || executionMode) && (\n <div className=\"space-y-1.5 border-b border-border pb-2\">\n {sessionId ? (\n <div className=\"flex items-center justify-between gap-4\">\n <span className=\"text-muted-foreground\">Session</span>\n <button\n type=\"button\"\n aria-label={\n copyStatus === \"copied\"\n ? \"Session ID copied\"\n : copyStatus === \"failed\"\n ? \"Session ID copy failed\"\n : \"Copy session ID\"\n }\n title={sessionId}\n className={cn(\n \"flex min-w-0 max-w-48 items-center gap-1.5 font-medium hover:text-foreground\",\n copyStatus === \"failed\" && \"text-destructive\",\n )}\n onClick={() => void copySessionId()}\n >\n <span className=\"truncate font-mono\">{sessionId}</span>\n <Icon\n icon={copyStatus === \"copied\" ? UiCheck : UiCopy}\n className=\"size-3.5 shrink-0\"\n />\n </button>\n </div>\n ) : null}\n {executionMode ? <Row label=\"Mode\" value={executionMode} /> : null}\n </div>\n )}\n\n <div className=\"space-y-1.5\">\n <div className=\"h-1.5 overflow-hidden rounded-full bg-muted\">\n <div\n className={cn(\"h-full rounded-full\", barTone(pct))}\n style={{ width: `${pct}%` }}\n />\n </div>\n {windowTokens ? (\n <>\n <Row\n label=\"Window\"\n value={`${compactTokens(usedTokens ?? 0)} / ${compactTokens(windowTokens)}`}\n />\n <Row label=\"Free\" value={`${100 - pct}%`} />\n </>\n ) : (\n <Row label=\"Used\" value={`${pct}%`} />\n )}\n {messageCount != null ? (\n <Row label=\"Messages\" value={String(messageCount)} />\n ) : null}\n </div>\n\n {(totalTokens > 0 || totalCost > 0 || budget) && (\n <div className=\"space-y-1.5 border-t border-border pt-2\">\n {(totalTokens > 0 || totalCost > 0) && (\n <UsageTable\n rows={bucketRows(tokens, cost)}\n totalTokens={totalTokens}\n totalCost={totalCost}\n showTokens={totalTokens > 0}\n showCost={totalCost > 0}\n />\n )}\n {budget?.total != null && budget.total > 0 ? (\n <Row\n label=\"Budget\"\n value={`${formatCost(budget.used ?? 0)} / ${formatCost(budget.total)}`}\n />\n ) : budget?.remaining != null ? (\n <Row label=\"Budget left\" value={formatCost(budget.remaining)} />\n ) : anyPositive(budget?.used) ? (\n <Row label=\"Budget\" value={formatCost(budget?.used ?? 0)} />\n ) : null}\n </div>\n )}\n </div>\n </HoverCard>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -5,8 +5,10 @@ const react = require("react");
5
5
  const utils = require("../../lib/utils.cjs");
6
6
  const button = require("../../components/button.cjs");
7
7
  const Icon = require("../Icon.cjs");
8
- const CodeBlock = require("../CodeBlock.cjs");
9
8
  const types = require("./types.cjs");
9
+ const normalize = require("./tool-render/normalize.cjs");
10
+ const context = require("./tool-render/context.cjs");
11
+ const defaults = require("./tool-render/defaults.cjs");
10
12
  const UiCircleX = require("../../icons/components/UiCircleX.cjs");
11
13
  const UiCheck = require("../../icons/components/UiCheck.cjs");
12
14
  const UiClock = require("../../icons/components/UiClock.cjs");
@@ -25,17 +27,49 @@ const STATUS_LABEL = {
25
27
  const STATUS_ICON = {
26
28
  "approval-requested": { icon: UiClock.UiClock, className: "text-amber-600" },
27
29
  "approval-responded": { icon: UiCheck.UiCheck, className: "text-sky-600" },
28
- "input-streaming": { icon: UiCircleOutline.UiCircleOutline, className: "text-muted-foreground" },
29
- "input-available": { icon: UiClock.UiClock, className: "text-muted-foreground animate-pulse" },
30
+ "input-streaming": {
31
+ icon: UiCircleOutline.UiCircleOutline,
32
+ className: "text-muted-foreground"
33
+ },
34
+ "input-available": {
35
+ icon: UiClock.UiClock,
36
+ className: "text-muted-foreground animate-pulse"
37
+ },
30
38
  "output-available": { icon: UiCheck.UiCheck, className: "text-emerald-600" },
31
39
  "output-denied": { icon: UiCircleX.UiCircleX, className: "text-orange-600" },
32
40
  "output-error": { icon: UiCircleX.UiCircleX, className: "text-destructive" }
33
41
  };
34
- function ToolCall({ part, defaultOpen = false, onApprove, renderToolResult, className }) {
42
+ function ToolCall({
43
+ part,
44
+ defaultOpen = false,
45
+ onApprove,
46
+ renderToolResult,
47
+ tool,
48
+ registry: registryProp,
49
+ className
50
+ }) {
35
51
  const needsApproval = part.state === "approval-requested";
36
52
  const [open, setOpen] = react.useState(defaultOpen || needsApproval);
53
+ const contextRegistry = context.useToolRenderRegistry();
54
+ const registry = registryProp ?? contextRegistry;
37
55
  const status = STATUS_ICON[part.state];
38
56
  const name = types.toolPartName(part);
57
+ const meta = tool ?? registry.tool(name);
58
+ const normalized = normalize.normalizeToolOutput(
59
+ part.state === "output-available" ? part.output : void 0
60
+ );
61
+ const base = {
62
+ part,
63
+ toolName: name,
64
+ tool: meta,
65
+ state: part.state,
66
+ input: part.input,
67
+ output: normalized.value,
68
+ isError: normalized.isError || part.state === "output-error",
69
+ options: registry.options
70
+ };
71
+ const inputView = defaults.defaultToolInputView(base);
72
+ const summary = registry.resolveSummary({ ...base, defaultView: null });
39
73
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("not-prose mb-1 w-full", className), children: [
40
74
  /* @__PURE__ */ jsxRuntime.jsxs(
41
75
  "button",
@@ -55,21 +89,34 @@ function ToolCall({ part, defaultOpen = false, onApprove, renderToolResult, clas
55
89
  title: STATUS_LABEL[part.state],
56
90
  className: utils.cn("size-3 shrink-0", status.className)
57
91
  }
58
- )
92
+ ),
93
+ !open && summary ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate text-xs", children: summary }) : null
59
94
  ] }),
60
95
  /* @__PURE__ */ jsxRuntime.jsx(
61
96
  Icon.Icon,
62
97
  {
63
98
  icon: UiChevronDown.UiChevronDown,
64
- className: utils.cn("size-3 shrink-0 transition-transform", open && "rotate-180")
99
+ className: utils.cn(
100
+ "size-3 shrink-0 transition-transform",
101
+ open && "rotate-180"
102
+ )
65
103
  }
66
104
  )
67
105
  ]
68
106
  }
69
107
  ),
70
- open && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 pl-4 pt-0.5", children: [
71
- /* @__PURE__ */ jsxRuntime.jsx(ToolInput, { input: part.input }),
72
- /* @__PURE__ */ jsxRuntime.jsx(ToolOutput, { part, ...renderToolResult ? { renderToolResult } : {} })
108
+ open && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "tool-call-details", className: "space-y-1 pl-4 pt-0.5", children: [
109
+ registry.resolveInput({ ...base, defaultView: inputView }) ?? inputView,
110
+ /* @__PURE__ */ jsxRuntime.jsx(
111
+ ToolOutput,
112
+ {
113
+ part,
114
+ base,
115
+ registry,
116
+ output: normalized.value,
117
+ ...renderToolResult ? { renderToolResult } : {}
118
+ }
119
+ )
73
120
  ] }),
74
121
  needsApproval && /* @__PURE__ */ jsxRuntime.jsx(ApprovalControls, { part, onApprove })
75
122
  ] });
@@ -81,7 +128,15 @@ function ApprovalControls({
81
128
  const approval = "approval" in part ? part.approval : void 0;
82
129
  if (!approval || !onApprove) return null;
83
130
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1.5 flex items-center gap-2 pl-4", children: [
84
- /* @__PURE__ */ jsxRuntime.jsx(button.Button, { type: "button", size: "sm", onClick: () => onApprove(approval.id, true), children: "Approve" }),
131
+ /* @__PURE__ */ jsxRuntime.jsx(
132
+ button.Button,
133
+ {
134
+ type: "button",
135
+ size: "sm",
136
+ onClick: () => onApprove(approval.id, true),
137
+ children: "Approve"
138
+ }
139
+ ),
85
140
  /* @__PURE__ */ jsxRuntime.jsx(
86
141
  button.Button,
87
142
  {
@@ -94,27 +149,34 @@ function ApprovalControls({
94
149
  )
95
150
  ] });
96
151
  }
97
- function ToolInput({ input }) {
98
- if (input === void 0 || input === null) {
99
- return null;
100
- }
101
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden text-xs", children: /* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { language: "json", source: JSON.stringify(input, null, 2) }) });
102
- }
103
152
  function ToolOutput({
104
153
  part,
154
+ base,
155
+ registry,
156
+ output,
105
157
  renderToolResult
106
158
  }) {
107
159
  const errorText = part.state === "output-error" ? part.errorText : void 0;
108
- const output = part.state === "output-available" ? part.output : void 0;
109
- if (output === void 0 && errorText === void 0) {
160
+ const hasOutput = part.state === "output-available" && output !== void 0;
161
+ if (!hasOutput && errorText === void 0) {
110
162
  return null;
111
163
  }
112
- const name = types.toolPartName(part);
113
- const custom = output !== void 0 ? renderToolResult == null ? void 0 : renderToolResult({ part, toolName: name, output }) : null;
114
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("overflow-x-auto text-xs", errorText ? "text-destructive" : "text-muted-foreground"), children: [
115
- errorText !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { children: errorText }),
116
- custom ?? (output !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { language: "json", source: typeof output === "string" ? output : JSON.stringify(output, null, 2) }))
117
- ] });
164
+ const defaultView = hasOutput ? defaults.defaultToolOutputView(base) : null;
165
+ const custom = hasOutput ? renderToolResult == null ? void 0 : renderToolResult({ part, toolName: base.toolName, output }) : null;
166
+ const resolved = hasOutput ? registry.resolveOutput({ ...base, defaultView }) : null;
167
+ return /* @__PURE__ */ jsxRuntime.jsxs(
168
+ "div",
169
+ {
170
+ className: utils.cn(
171
+ "overflow-x-auto text-xs",
172
+ errorText ? "text-destructive" : "text-muted-foreground"
173
+ ),
174
+ children: [
175
+ errorText !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { children: errorText }),
176
+ custom ?? resolved ?? defaultView
177
+ ]
178
+ }
179
+ );
118
180
  }
119
181
  exports.ToolCall = ToolCall;
120
182
  //# sourceMappingURL=ToolCall.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolCall.cjs","sources":["../../../src/data/chat/ToolCall.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport {\n UiCheck,\n UiChevronDown,\n UiCircleOutline,\n UiCircleX,\n UiClock,\n UiWrench,\n} from \"../../icons\";\nimport type { AnyToolPart, ToolResultRenderer } from \"./types\";\nimport { toolPartName } from \"./types\";\n\nexport type ToolCallProps = {\n /** The tool part from an assistant message (typed or dynamic). */\n part: AnyToolPart;\n /** Whether the call body starts expanded. Defaults to false. */\n defaultOpen?: boolean;\n /** Respond to an approval request (only used when state is\n * `approval-requested`). Receives the approval id, the decision, and an\n * optional reason. */\n onApprove?: ((approvalId: string, approved: boolean, reason?: string) => void) | undefined;\n renderToolResult?: ToolResultRenderer;\n className?: string;\n};\n\ntype ToolState = AnyToolPart[\"state\"];\n\nconst STATUS_LABEL: Record<ToolState, string> = {\n \"approval-requested\": \"Awaiting approval\",\n \"approval-responded\": \"Responded\",\n \"input-streaming\": \"Pending\",\n \"input-available\": \"Running\",\n \"output-available\": \"Completed\",\n \"output-denied\": \"Denied\",\n \"output-error\": \"Error\",\n};\n\nconst STATUS_ICON: Record<ToolState, { icon: StaticIconComponent; className: string }> = {\n \"approval-requested\": { icon: UiClock, className: \"text-amber-600\" },\n \"approval-responded\": { icon: UiCheck, className: \"text-sky-600\" },\n \"input-streaming\": { icon: UiCircleOutline, className: \"text-muted-foreground\" },\n \"input-available\": { icon: UiClock, className: \"text-muted-foreground animate-pulse\" },\n \"output-available\": { icon: UiCheck, className: \"text-emerald-600\" },\n \"output-denied\": { icon: UiCircleX, className: \"text-orange-600\" },\n \"output-error\": { icon: UiCircleX, className: \"text-destructive\" },\n};\n\n/** Generic display of a single AI tool call: a collapsible header showing the\n * tool name + status, expanding to its JSON input and (once available) output\n * or error. Renders both clicky `dynamic-tool` parts and typed `tool-<name>`\n * parts, keyed off `part.state`. */\nexport function ToolCall({ part, defaultOpen = false, onApprove, renderToolResult, className }: ToolCallProps) {\n const needsApproval = part.state === \"approval-requested\";\n const [open, setOpen] = useState(defaultOpen || needsApproval);\n const status = STATUS_ICON[part.state];\n const name = toolPartName(part);\n\n return (\n <div className={cn(\"not-prose mb-1 w-full\", className)}>\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center justify-between gap-2 py-0.5 text-muted-foreground hover:text-foreground\"\n >\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <Icon icon={UiWrench} className=\"size-3 shrink-0\" />\n <span className=\"truncate font-mono text-xs\">{name}</span>\n <Icon\n icon={status.icon}\n title={STATUS_LABEL[part.state]}\n className={cn(\"size-3 shrink-0\", status.className)}\n />\n </span>\n <Icon\n icon={UiChevronDown}\n className={cn(\"size-3 shrink-0 transition-transform\", open && \"rotate-180\")}\n />\n </button>\n\n {open && (\n <div className=\"space-y-1 pl-4 pt-0.5\">\n <ToolInput input={part.input} />\n <ToolOutput part={part} {...(renderToolResult ? { renderToolResult } : {})} />\n </div>\n )}\n\n {needsApproval && <ApprovalControls part={part} onApprove={onApprove} />}\n </div>\n );\n}\n\n/** Approve/Deny controls shown while a tool call awaits human approval. The\n * approval id comes from the part's `approval` envelope (AI SDK v6). */\nfunction ApprovalControls({\n part,\n onApprove,\n}: {\n part: AnyToolPart;\n onApprove: ToolCallProps[\"onApprove\"];\n}) {\n const approval = \"approval\" in part ? part.approval : undefined;\n if (!approval || !onApprove) return null;\n return (\n <div className=\"mt-1.5 flex items-center gap-2 pl-4\">\n <Button type=\"button\" size=\"sm\" onClick={() => onApprove(approval.id, true)}>\n Approve\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => onApprove(approval.id, false)}\n >\n Deny\n </Button>\n </div>\n );\n}\n\nfunction ToolInput({ input }: { input: AnyToolPart[\"input\"] }) {\n if (input === undefined || input === null) {\n return null;\n }\n return (\n <div className=\"overflow-hidden text-xs\">\n <CodeBlock language=\"json\" source={JSON.stringify(input, null, 2)} />\n </div>\n );\n}\n\nfunction ToolOutput({\n part,\n renderToolResult,\n}: {\n part: AnyToolPart;\n renderToolResult?: ToolResultRenderer | undefined;\n}) {\n const errorText = part.state === \"output-error\" ? part.errorText : undefined;\n const output = part.state === \"output-available\" ? part.output : undefined;\n if (output === undefined && errorText === undefined) {\n return null;\n }\n const name = toolPartName(part);\n const custom = output !== undefined ? renderToolResult?.({ part, toolName: name, output }) : null;\n return (\n <div className={cn(\"overflow-x-auto text-xs\", errorText ? \"text-destructive\" : \"text-muted-foreground\")}>\n {errorText !== undefined && <div>{errorText}</div>}\n {custom ?? (output !== undefined && (\n <CodeBlock language=\"json\" source={typeof output === \"string\" ? output : JSON.stringify(output, null, 2)} />\n ))}\n </div>\n );\n}\n"],"names":["UiClock","UiCheck","UiCircleOutline","UiCircleX","useState","toolPartName","cn","jsxs","jsx","Icon","UiWrench","UiChevronDown","Button","CodeBlock"],"mappings":"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"}
1
+ {"version":3,"file":"ToolCall.cjs","sources":["../../../src/data/chat/ToolCall.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiChevronDown,\n UiCircleOutline,\n UiCircleX,\n UiClock,\n UiWrench,\n} from \"../../icons\";\nimport type { AnyToolPart, ToolMeta, ToolResultRenderer } from \"./types\";\nimport { toolPartName } from \"./types\";\nimport { normalizeToolOutput } from \"./tool-render/normalize\";\nimport { useToolRenderRegistry } from \"./tool-render/context\";\nimport {\n defaultToolInputView,\n defaultToolOutputView,\n type ToolRenderBaseContext,\n} from \"./tool-render/defaults\";\nimport type { ToolRenderRegistry } from \"./tool-render/adapter\";\n\nexport type ToolCallProps = {\n /** The tool part from an assistant message (typed or dynamic). */\n part: AnyToolPart;\n /** Whether the call body starts expanded. Defaults to false. */\n defaultOpen?: boolean;\n /** Respond to an approval request (only used when state is\n * `approval-requested`). Receives the approval id, the decision, and an\n * optional reason. */\n onApprove?:\n | ((approvalId: string, approved: boolean, reason?: string) => void)\n | undefined;\n renderToolResult?: ToolResultRenderer;\n /** Catalog entry for this tool. Defaults to the registry's catalog lookup. */\n tool?: ToolMeta | undefined;\n /** Renderer registry override. Defaults to the provided context registry. */\n registry?: ToolRenderRegistry | undefined;\n className?: string;\n};\n\ntype ToolState = AnyToolPart[\"state\"];\n\nconst STATUS_LABEL: Record<ToolState, string> = {\n \"approval-requested\": \"Awaiting approval\",\n \"approval-responded\": \"Responded\",\n \"input-streaming\": \"Pending\",\n \"input-available\": \"Running\",\n \"output-available\": \"Completed\",\n \"output-denied\": \"Denied\",\n \"output-error\": \"Error\",\n};\n\nconst STATUS_ICON: Record<\n ToolState,\n { icon: StaticIconComponent; className: string }\n> = {\n \"approval-requested\": { icon: UiClock, className: \"text-amber-600\" },\n \"approval-responded\": { icon: UiCheck, className: \"text-sky-600\" },\n \"input-streaming\": {\n icon: UiCircleOutline,\n className: \"text-muted-foreground\",\n },\n \"input-available\": {\n icon: UiClock,\n className: \"text-muted-foreground animate-pulse\",\n },\n \"output-available\": { icon: UiCheck, className: \"text-emerald-600\" },\n \"output-denied\": { icon: UiCircleX, className: \"text-orange-600\" },\n \"output-error\": { icon: UiCircleX, className: \"text-destructive\" },\n};\n\n/** Generic display of a single AI tool call: a collapsible header showing the\n * tool name, status and compact input args, expanding to its input params and\n * (once available) output or error. Input and output rendering go through the\n * tool render registry, so a host can contribute domain views. Renders both\n * clicky `dynamic-tool` parts and typed `tool-<name>` parts, keyed off\n * `part.state`. */\nexport function ToolCall({\n part,\n defaultOpen = false,\n onApprove,\n renderToolResult,\n tool,\n registry: registryProp,\n className,\n}: ToolCallProps) {\n const needsApproval = part.state === \"approval-requested\";\n const [open, setOpen] = useState(defaultOpen || needsApproval);\n const contextRegistry = useToolRenderRegistry();\n const registry = registryProp ?? contextRegistry;\n const status = STATUS_ICON[part.state];\n const name = toolPartName(part);\n const meta = tool ?? registry.tool(name);\n\n // The transport double-encodes tool results as `{output: \"<json>\"}`; every\n // surface — including a host's renderToolResult — sees the unwrapped value.\n const normalized = normalizeToolOutput(\n part.state === \"output-available\" ? part.output : undefined,\n );\n const base: ToolRenderBaseContext = {\n part,\n toolName: name,\n tool: meta,\n state: part.state,\n input: part.input,\n output: normalized.value,\n isError: normalized.isError || part.state === \"output-error\",\n options: registry.options,\n };\n\n const inputView = defaultToolInputView(base);\n // The header keeps the tool name in its own element; a summary renders beside\n // it (ToolCall.test.tsx matches the name by exact text).\n const summary = registry.resolveSummary({ ...base, defaultView: null });\n\n return (\n <div className={cn(\"not-prose mb-1 w-full\", className)}>\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center justify-between gap-2 py-0.5 text-muted-foreground hover:text-foreground\"\n >\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <Icon icon={UiWrench} className=\"size-3 shrink-0\" />\n <span className=\"truncate font-mono text-xs\">{name}</span>\n <Icon\n icon={status.icon}\n title={STATUS_LABEL[part.state]}\n className={cn(\"size-3 shrink-0\", status.className)}\n />\n {!open && summary ? (\n <span className=\"min-w-0 flex-1 truncate text-xs\">{summary}</span>\n ) : null}\n </span>\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n\n {open && (\n <div data-slot=\"tool-call-details\" className=\"space-y-1 pl-4 pt-0.5\">\n {/* An approval-requested call force-opens, so this params table is\n what the user reads before approving a write. */}\n {registry.resolveInput({ ...base, defaultView: inputView }) ??\n inputView}\n <ToolOutput\n part={part}\n base={base}\n registry={registry}\n output={normalized.value}\n {...(renderToolResult ? { renderToolResult } : {})}\n />\n </div>\n )}\n\n {needsApproval && <ApprovalControls part={part} onApprove={onApprove} />}\n </div>\n );\n}\n\n/** Approve/Deny controls shown while a tool call awaits human approval. The\n * approval id comes from the part's `approval` envelope (AI SDK v6). */\nfunction ApprovalControls({\n part,\n onApprove,\n}: {\n part: AnyToolPart;\n onApprove: ToolCallProps[\"onApprove\"];\n}) {\n const approval = \"approval\" in part ? part.approval : undefined;\n if (!approval || !onApprove) return null;\n return (\n <div className=\"mt-1.5 flex items-center gap-2 pl-4\">\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => onApprove(approval.id, true)}\n >\n Approve\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => onApprove(approval.id, false)}\n >\n Deny\n </Button>\n </div>\n );\n}\n\n/** The output surface. Priority: the host's `renderToolResult` prop (the\n * pre-registry API, still supported), then a matching adapter, then the\n * built-in shape heuristics. */\nfunction ToolOutput({\n part,\n base,\n registry,\n output,\n renderToolResult,\n}: {\n part: AnyToolPart;\n base: ToolRenderBaseContext;\n registry: ToolRenderRegistry;\n output: unknown;\n renderToolResult?: ToolResultRenderer | undefined;\n}) {\n const errorText = part.state === \"output-error\" ? part.errorText : undefined;\n const hasOutput = part.state === \"output-available\" && output !== undefined;\n if (!hasOutput && errorText === undefined) {\n return null;\n }\n\n const defaultView: ReactNode = hasOutput ? defaultToolOutputView(base) : null;\n\n const custom = hasOutput\n ? renderToolResult?.({ part, toolName: base.toolName, output })\n : null;\n const resolved = hasOutput\n ? registry.resolveOutput({ ...base, defaultView })\n : null;\n\n return (\n <div\n className={cn(\n \"overflow-x-auto text-xs\",\n errorText ? \"text-destructive\" : \"text-muted-foreground\",\n )}\n >\n {errorText !== undefined && <div>{errorText}</div>}\n {custom ?? resolved ?? defaultView}\n </div>\n );\n}\n"],"names":["UiClock","UiCheck","UiCircleOutline","UiCircleX","useState","useToolRenderRegistry","toolPartName","normalizeToolOutput","defaultToolInputView","cn","jsxs","jsx","Icon","UiWrench","UiChevronDown","Button","defaultToolOutputView"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { AnyToolPart, ToolResultRenderer } from './types';
1
+ import { AnyToolPart, ToolMeta, ToolResultRenderer } from './types';
2
+ import { ToolRenderRegistry } from './tool-render/adapter';
2
3
  export type ToolCallProps = {
3
4
  /** The tool part from an assistant message (typed or dynamic). */
4
5
  part: AnyToolPart;
@@ -9,11 +10,17 @@ export type ToolCallProps = {
9
10
  * optional reason. */
10
11
  onApprove?: ((approvalId: string, approved: boolean, reason?: string) => void) | undefined;
11
12
  renderToolResult?: ToolResultRenderer;
13
+ /** Catalog entry for this tool. Defaults to the registry's catalog lookup. */
14
+ tool?: ToolMeta | undefined;
15
+ /** Renderer registry override. Defaults to the provided context registry. */
16
+ registry?: ToolRenderRegistry | undefined;
12
17
  className?: string;
13
18
  };
14
19
  /** Generic display of a single AI tool call: a collapsible header showing the
15
- * tool name + status, expanding to its JSON input and (once available) output
16
- * or error. Renders both clicky `dynamic-tool` parts and typed `tool-<name>`
17
- * parts, keyed off `part.state`. */
18
- export declare function ToolCall({ part, defaultOpen, onApprove, renderToolResult, className }: ToolCallProps): import("react/jsx-runtime").JSX.Element;
20
+ * tool name, status and compact input args, expanding to its input params and
21
+ * (once available) output or error. Input and output rendering go through the
22
+ * tool render registry, so a host can contribute domain views. Renders both
23
+ * clicky `dynamic-tool` parts and typed `tool-<name>` parts, keyed off
24
+ * `part.state`. */
25
+ export declare function ToolCall({ part, defaultOpen, onApprove, renderToolResult, tool, registry: registryProp, className, }: ToolCallProps): import("react/jsx-runtime").JSX.Element;
19
26
  //# sourceMappingURL=ToolCall.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolCall.d.ts","sourceRoot":"","sources":["../../../src/data/chat/ToolCall.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG/D,MAAM,MAAM,aAAa,GAAG;IAC1B,kEAAkE;IAClE,IAAI,EAAE,WAAW,CAAC;IAClB,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;2BAEuB;IACvB,SAAS,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3F,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAwBF;;;qCAGqC;AACrC,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAmB,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,aAAa,2CAuC5G"}
1
+ {"version":3,"file":"ToolCall.d.ts","sourceRoot":"","sources":["../../../src/data/chat/ToolCall.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AASzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG;IAC1B,kEAAkE;IAClE,IAAI,EAAE,WAAW,CAAC;IAClB,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;2BAEuB;IACvB,SAAS,CAAC,EACN,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAClE,SAAS,CAAC;IACd,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;IACtC,8EAA8E;IAC9E,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAiCF;;;;;oBAKoB;AACpB,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,WAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,QAAQ,EAAE,YAAY,EACtB,SAAS,GACV,EAAE,aAAa,2CA8Ef"}