@flanksource/clicky-ui 0.3.26 → 0.3.28

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 (725) hide show
  1. package/NOTICE.md +14 -0
  2. package/dist/ai.cjs +52 -6
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +53 -7
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentCard.cjs +24 -39
  7. package/dist/comments/CommentCard.cjs.map +1 -1
  8. package/dist/comments/CommentCard.d.ts +9 -2
  9. package/dist/comments/CommentCard.d.ts.map +1 -1
  10. package/dist/comments/CommentCard.js +24 -39
  11. package/dist/comments/CommentCard.js.map +1 -1
  12. package/dist/comments/CommentProvider.cjs +4 -3
  13. package/dist/comments/CommentProvider.cjs.map +1 -1
  14. package/dist/comments/CommentProvider.d.ts +6 -1
  15. package/dist/comments/CommentProvider.d.ts.map +1 -1
  16. package/dist/comments/CommentProvider.js +4 -3
  17. package/dist/comments/CommentProvider.js.map +1 -1
  18. package/dist/comments/CommentSidePanel.cjs +65 -52
  19. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  20. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  21. package/dist/comments/CommentSidePanel.js +67 -54
  22. package/dist/comments/CommentSidePanel.js.map +1 -1
  23. package/dist/comments/CommentThread.cjs +2 -2
  24. package/dist/comments/CommentThread.cjs.map +1 -1
  25. package/dist/comments/CommentThread.d.ts +3 -3
  26. package/dist/comments/CommentThread.d.ts.map +1 -1
  27. package/dist/comments/CommentThread.js +2 -2
  28. package/dist/comments/CommentThread.js.map +1 -1
  29. package/dist/comments/CommentThreadList.cjs +85 -37
  30. package/dist/comments/CommentThreadList.cjs.map +1 -1
  31. package/dist/comments/CommentThreadList.d.ts +3 -3
  32. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  33. package/dist/comments/CommentThreadList.js +86 -38
  34. package/dist/comments/CommentThreadList.js.map +1 -1
  35. package/dist/comments/comment-utils.cjs +26 -0
  36. package/dist/comments/comment-utils.cjs.map +1 -1
  37. package/dist/comments/comment-utils.d.ts +11 -0
  38. package/dist/comments/comment-utils.d.ts.map +1 -1
  39. package/dist/comments/comment-utils.js +26 -0
  40. package/dist/comments/comment-utils.js.map +1 -1
  41. package/dist/comments.cjs +2 -0
  42. package/dist/comments.cjs.map +1 -1
  43. package/dist/comments.js +3 -1
  44. package/dist/components/AccordionList.cjs +3 -0
  45. package/dist/components/AccordionList.cjs.map +1 -1
  46. package/dist/components/AccordionList.d.ts +3 -1
  47. package/dist/components/AccordionList.d.ts.map +1 -1
  48. package/dist/components/AccordionList.js +3 -0
  49. package/dist/components/AccordionList.js.map +1 -1
  50. package/dist/components/CopyButton.cjs +35 -0
  51. package/dist/components/CopyButton.cjs.map +1 -0
  52. package/dist/components/CopyButton.d.ts +20 -0
  53. package/dist/components/CopyButton.d.ts.map +1 -0
  54. package/dist/components/CopyButton.js +35 -0
  55. package/dist/components/CopyButton.js.map +1 -0
  56. package/dist/components/FilterBar.cjs +29 -6
  57. package/dist/components/FilterBar.cjs.map +1 -1
  58. package/dist/components/FilterBar.d.ts +10 -1
  59. package/dist/components/FilterBar.d.ts.map +1 -1
  60. package/dist/components/FilterBar.js +29 -6
  61. package/dist/components/FilterBar.js.map +1 -1
  62. package/dist/components/ListMenu.cjs +4 -1
  63. package/dist/components/ListMenu.cjs.map +1 -1
  64. package/dist/components/ListMenu.d.ts +5 -1
  65. package/dist/components/ListMenu.d.ts.map +1 -1
  66. package/dist/components/ListMenu.js +4 -1
  67. package/dist/components/ListMenu.js.map +1 -1
  68. package/dist/components/SegmentedControl.cjs +4 -2
  69. package/dist/components/SegmentedControl.cjs.map +1 -1
  70. package/dist/components/SegmentedControl.d.ts +4 -0
  71. package/dist/components/SegmentedControl.d.ts.map +1 -1
  72. package/dist/components/SegmentedControl.js +4 -2
  73. package/dist/components/SegmentedControl.js.map +1 -1
  74. package/dist/components/clipboard.cjs +60 -0
  75. package/dist/components/clipboard.cjs.map +1 -0
  76. package/dist/components/clipboard.d.ts +13 -0
  77. package/dist/components/clipboard.d.ts.map +1 -0
  78. package/dist/components/clipboard.js +60 -0
  79. package/dist/components/clipboard.js.map +1 -0
  80. package/dist/components/json-schema-form-array.cjs +15 -1
  81. package/dist/components/json-schema-form-array.cjs.map +1 -1
  82. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  83. package/dist/components/json-schema-form-array.js +15 -1
  84. package/dist/components/json-schema-form-array.js.map +1 -1
  85. package/dist/components/json-schema-form-list-array.cjs +113 -0
  86. package/dist/components/json-schema-form-list-array.cjs.map +1 -0
  87. package/dist/components/json-schema-form-list-array.d.ts +7 -0
  88. package/dist/components/json-schema-form-list-array.d.ts.map +1 -0
  89. package/dist/components/json-schema-form-list-array.js +113 -0
  90. package/dist/components/json-schema-form-list-array.js.map +1 -0
  91. package/dist/components/json-schema-form-resolve.cjs +1 -1
  92. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  93. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  94. package/dist/components/json-schema-form-resolve.js +1 -1
  95. package/dist/components/json-schema-form-resolve.js.map +1 -1
  96. package/dist/components/json-schema-form-types.d.ts +1 -1
  97. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  98. package/dist/components.cjs +5 -0
  99. package/dist/components.cjs.map +1 -1
  100. package/dist/components.d.ts +2 -0
  101. package/dist/components.d.ts.map +1 -1
  102. package/dist/components.js +5 -0
  103. package/dist/components.js.map +1 -1
  104. package/dist/data/Clicky.cjs +4 -1
  105. package/dist/data/Clicky.cjs.map +1 -1
  106. package/dist/data/Clicky.js +4 -1
  107. package/dist/data/Clicky.js.map +1 -1
  108. package/dist/data/DataTable.cjs +202 -40
  109. package/dist/data/DataTable.cjs.map +1 -1
  110. package/dist/data/DataTable.d.ts +163 -3
  111. package/dist/data/DataTable.d.ts.map +1 -1
  112. package/dist/data/DataTable.js +202 -40
  113. package/dist/data/DataTable.js.map +1 -1
  114. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs +1 -1
  115. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs.map +1 -1
  116. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js +1 -1
  117. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js.map +1 -1
  118. package/dist/data/FixtureEditor/fixture-frontmatter.cjs +8 -6
  119. package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
  120. package/dist/data/FixtureEditor/fixture-frontmatter.js +8 -6
  121. package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -1
  122. package/dist/data/SelectionActionBar.cjs +242 -0
  123. package/dist/data/SelectionActionBar.cjs.map +1 -0
  124. package/dist/data/SelectionActionBar.d.ts +28 -0
  125. package/dist/data/SelectionActionBar.d.ts.map +1 -0
  126. package/dist/data/SelectionActionBar.js +242 -0
  127. package/dist/data/SelectionActionBar.js.map +1 -0
  128. package/dist/data/TaskManager.cjs +34 -12
  129. package/dist/data/TaskManager.cjs.map +1 -1
  130. package/dist/data/TaskManager.d.ts.map +1 -1
  131. package/dist/data/TaskManager.js +34 -12
  132. package/dist/data/TaskManager.js.map +1 -1
  133. package/dist/data/TaskManagerButton.cjs +11 -7
  134. package/dist/data/TaskManagerButton.cjs.map +1 -1
  135. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  136. package/dist/data/TaskManagerButton.js +11 -7
  137. package/dist/data/TaskManagerButton.js.map +1 -1
  138. package/dist/data/TaskProgress.cjs +55 -11
  139. package/dist/data/TaskProgress.cjs.map +1 -1
  140. package/dist/data/TaskProgress.d.ts.map +1 -1
  141. package/dist/data/TaskProgress.js +53 -9
  142. package/dist/data/TaskProgress.js.map +1 -1
  143. package/dist/data/ai/ChatWindow.cjs +2 -4
  144. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  145. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  146. package/dist/data/ai/ChatWindow.js +2 -4
  147. package/dist/data/ai/ChatWindow.js.map +1 -1
  148. package/dist/data/ai/ChatWindow.runtime.cjs +1 -2
  149. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  150. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  151. package/dist/data/ai/ChatWindow.runtime.js +1 -2
  152. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  153. package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs +262 -0
  154. package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs.map +1 -0
  155. package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts +16 -0
  156. package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts.map +1 -0
  157. package/dist/data/ai/PromptCatalog/PromptCatalogTable.js +262 -0
  158. package/dist/data/ai/PromptCatalog/PromptCatalogTable.js.map +1 -0
  159. package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs +77 -0
  160. package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs.map +1 -0
  161. package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts +8 -0
  162. package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts.map +1 -0
  163. package/dist/data/ai/PromptCatalog/PromptLayerStrip.js +77 -0
  164. package/dist/data/ai/PromptCatalog/PromptLayerStrip.js.map +1 -0
  165. package/dist/data/ai/PromptCatalog/PromptPage.cjs +332 -0
  166. package/dist/data/ai/PromptCatalog/PromptPage.cjs.map +1 -0
  167. package/dist/data/ai/PromptCatalog/PromptPage.d.ts +17 -0
  168. package/dist/data/ai/PromptCatalog/PromptPage.d.ts.map +1 -0
  169. package/dist/data/ai/PromptCatalog/PromptPage.js +332 -0
  170. package/dist/data/ai/PromptCatalog/PromptPage.js.map +1 -0
  171. package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs +102 -0
  172. package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs.map +1 -0
  173. package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts +16 -0
  174. package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts.map +1 -0
  175. package/dist/data/ai/PromptCatalog/PromptPageEditor.js +102 -0
  176. package/dist/data/ai/PromptCatalog/PromptPageEditor.js.map +1 -0
  177. package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs +102 -0
  178. package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs.map +1 -0
  179. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +10 -0
  180. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts.map +1 -0
  181. package/dist/data/ai/PromptCatalog/PromptPageHeader.js +102 -0
  182. package/dist/data/ai/PromptCatalog/PromptPageHeader.js.map +1 -0
  183. package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs +90 -0
  184. package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs.map +1 -0
  185. package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts +8 -0
  186. package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts.map +1 -0
  187. package/dist/data/ai/PromptCatalog/PromptPagePreview.js +90 -0
  188. package/dist/data/ai/PromptCatalog/PromptPagePreview.js.map +1 -0
  189. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs +168 -0
  190. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs.map +1 -0
  191. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts +17 -0
  192. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts.map +1 -0
  193. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js +168 -0
  194. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js.map +1 -0
  195. package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs +36 -0
  196. package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs.map +1 -0
  197. package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts +7 -0
  198. package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts.map +1 -0
  199. package/dist/data/ai/PromptCatalog/PromptSourceBadge.js +36 -0
  200. package/dist/data/ai/PromptCatalog/PromptSourceBadge.js.map +1 -0
  201. package/dist/data/ai/PromptCatalog/index.d.ts +9 -0
  202. package/dist/data/ai/PromptCatalog/index.d.ts.map +1 -0
  203. package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs +137 -0
  204. package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs.map +1 -0
  205. package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts +28 -0
  206. package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts.map +1 -0
  207. package/dist/data/ai/PromptCatalog/prompt-catalog-model.js +137 -0
  208. package/dist/data/ai/PromptCatalog/prompt-catalog-model.js.map +1 -0
  209. package/dist/data/ai/PromptCatalog/prompt-page-model.cjs +114 -0
  210. package/dist/data/ai/PromptCatalog/prompt-page-model.cjs.map +1 -0
  211. package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts +45 -0
  212. package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts.map +1 -0
  213. package/dist/data/ai/PromptCatalog/prompt-page-model.js +114 -0
  214. package/dist/data/ai/PromptCatalog/prompt-page-model.js.map +1 -0
  215. package/dist/data/ai/PromptCatalog/types.d.ts +70 -0
  216. package/dist/data/ai/PromptCatalog/types.d.ts.map +1 -0
  217. package/dist/data/ai/PromptPicker/PromptPicker.cjs +9 -12
  218. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  219. package/dist/data/ai/PromptPicker/PromptPicker.js +9 -12
  220. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  221. package/dist/data/ai/PromptPicker/index.d.ts +1 -1
  222. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
  223. package/dist/data/ai/PromptPicker/types.cjs.map +1 -1
  224. package/dist/data/ai/PromptPicker/types.d.ts +9 -0
  225. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
  226. package/dist/data/ai/PromptPicker/types.js.map +1 -1
  227. package/dist/data/ai/PromptRunEditor/index.cjs +4 -5
  228. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  229. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  230. package/dist/data/ai/PromptRunEditor/index.js +5 -6
  231. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  232. package/dist/data/ai/PromptRunEditor/model.cjs +1 -1
  233. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
  234. package/dist/data/ai/PromptRunEditor/model.d.ts +1 -1
  235. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
  236. package/dist/data/ai/PromptRunEditor/model.js +1 -1
  237. package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
  238. package/dist/data/ai/RuntimeModePicker.cjs +25 -14
  239. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
  240. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
  241. package/dist/data/ai/RuntimeModePicker.js +26 -15
  242. package/dist/data/ai/RuntimeModePicker.js.map +1 -1
  243. package/dist/data/ai/SessionInspector.collection-types.d.ts +1 -1
  244. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
  245. package/dist/data/ai/SessionInspector.collection.cjs +3 -3
  246. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
  247. package/dist/data/ai/SessionInspector.collection.js +3 -3
  248. package/dist/data/ai/SessionInspector.collection.js.map +1 -1
  249. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  250. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  251. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  252. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  253. package/dist/data/ai/SessionInspector.model.cjs +3 -3
  254. package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
  255. package/dist/data/ai/SessionInspector.model.d.ts +1 -1
  256. package/dist/data/ai/SessionInspector.model.d.ts.map +1 -1
  257. package/dist/data/ai/SessionInspector.model.js +3 -3
  258. package/dist/data/ai/SessionInspector.model.js.map +1 -1
  259. package/dist/data/ai/SessionInspector.panels.cjs +1 -1
  260. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  261. package/dist/data/ai/SessionInspector.panels.js +1 -1
  262. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  263. package/dist/data/ai/SessionInspector.summary.cjs +3 -3
  264. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  265. package/dist/data/ai/SessionInspector.summary.js +3 -3
  266. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  267. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  268. package/dist/data/ai/SessionViewer.unified.d.ts +3 -2
  269. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  270. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +18 -30
  271. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  272. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  273. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +19 -31
  274. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  275. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs +71 -86
  276. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs.map +1 -1
  277. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts.map +1 -1
  278. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js +72 -87
  279. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js.map +1 -1
  280. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs +99 -0
  281. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs.map +1 -0
  282. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts +13 -0
  283. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts.map +1 -0
  284. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js +99 -0
  285. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js.map +1 -0
  286. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +37 -21
  287. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  288. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +6 -2
  289. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  290. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +38 -22
  291. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  292. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs +114 -0
  293. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs.map +1 -0
  294. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts +10 -0
  295. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts.map +1 -0
  296. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js +114 -0
  297. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js.map +1 -0
  298. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs +160 -0
  299. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs.map +1 -0
  300. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts +9 -0
  301. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts.map +1 -0
  302. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js +160 -0
  303. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js.map +1 -0
  304. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs +27 -241
  305. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs.map +1 -1
  306. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts +5 -6
  307. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts.map +1 -1
  308. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js +25 -239
  309. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js.map +1 -1
  310. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +21 -8
  311. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  312. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts +4 -1
  313. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
  314. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +22 -9
  315. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  316. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs +207 -164
  317. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs.map +1 -1
  318. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts +4 -3
  319. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts.map +1 -1
  320. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js +210 -167
  321. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js.map +1 -1
  322. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs +15 -15
  323. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs.map +1 -1
  324. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts.map +1 -1
  325. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js +15 -15
  326. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js.map +1 -1
  327. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +120 -42
  328. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
  329. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts +4 -1
  330. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
  331. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +123 -45
  332. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
  333. package/dist/data/ai/SpecRuntimeEditor/env-model.cjs.map +1 -1
  334. package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts.map +1 -1
  335. package/dist/data/ai/SpecRuntimeEditor/env-model.js.map +1 -1
  336. package/dist/data/ai/SpecRuntimeEditor/index.cjs +136 -48
  337. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  338. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +13 -3
  339. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  340. package/dist/data/ai/SpecRuntimeEditor/index.js +137 -49
  341. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  342. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +93 -0
  343. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs.map +1 -0
  344. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts +6 -0
  345. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts.map +1 -0
  346. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +93 -0
  347. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js.map +1 -0
  348. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs +35 -0
  349. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs.map +1 -0
  350. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts +5 -0
  351. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts.map +1 -0
  352. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js +35 -0
  353. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js.map +1 -0
  354. package/dist/data/ai/SpecRuntimeEditor/presets.cjs +2 -9
  355. package/dist/data/ai/SpecRuntimeEditor/presets.cjs.map +1 -1
  356. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts +1 -2
  357. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts.map +1 -1
  358. package/dist/data/ai/SpecRuntimeEditor/presets.js +2 -9
  359. package/dist/data/ai/SpecRuntimeEditor/presets.js.map +1 -1
  360. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  361. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +1 -1
  362. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  363. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  364. package/dist/data/ai/SpecRuntimeEditor/types.cjs +2 -7
  365. package/dist/data/ai/SpecRuntimeEditor/types.cjs.map +1 -1
  366. package/dist/data/ai/SpecRuntimeEditor/types.d.ts +0 -1
  367. package/dist/data/ai/SpecRuntimeEditor/types.d.ts.map +1 -1
  368. package/dist/data/ai/SpecRuntimeEditor/types.js +3 -8
  369. package/dist/data/ai/SpecRuntimeEditor/types.js.map +1 -1
  370. package/dist/data/ai/SpecRuntimeEditor/update.cjs +43 -33
  371. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  372. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +7 -13
  373. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  374. package/dist/data/ai/SpecRuntimeEditor/update.js +43 -33
  375. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  376. package/dist/data/ai/SpecRuntimeEditor.model.cjs +33 -45
  377. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  378. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +54 -29
  379. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  380. package/dist/data/ai/SpecRuntimeEditor.model.js +33 -44
  381. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  382. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs +276 -0
  383. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs.map +1 -0
  384. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts +58 -0
  385. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts.map +1 -0
  386. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js +276 -0
  387. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js.map +1 -0
  388. package/dist/data/ai/ThreadPicker.cjs +55 -42
  389. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  390. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  391. package/dist/data/ai/ThreadPicker.js +56 -43
  392. package/dist/data/ai/ThreadPicker.js.map +1 -1
  393. package/dist/data/ai/ToolPreferences.cjs +9 -1
  394. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  395. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  396. package/dist/data/ai/ToolPreferences.js +9 -1
  397. package/dist/data/ai/ToolPreferences.js.map +1 -1
  398. package/dist/data/ai/ToolSchemaBrowser.cjs +41 -487
  399. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  400. package/dist/data/ai/ToolSchemaBrowser.d.ts +7 -2
  401. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  402. package/dist/data/ai/ToolSchemaBrowser.detail.cjs +238 -0
  403. package/dist/data/ai/ToolSchemaBrowser.detail.cjs.map +1 -0
  404. package/dist/data/ai/ToolSchemaBrowser.detail.d.ts +8 -0
  405. package/dist/data/ai/ToolSchemaBrowser.detail.d.ts.map +1 -0
  406. package/dist/data/ai/ToolSchemaBrowser.detail.js +238 -0
  407. package/dist/data/ai/ToolSchemaBrowser.detail.js.map +1 -0
  408. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +57 -0
  409. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -0
  410. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +9 -0
  411. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -0
  412. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +57 -0
  413. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -0
  414. package/dist/data/ai/ToolSchemaBrowser.js +42 -488
  415. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  416. package/dist/data/ai/ToolSchemaBrowser.model.cjs +130 -0
  417. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -0
  418. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +35 -0
  419. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -0
  420. package/dist/data/ai/ToolSchemaBrowser.model.js +130 -0
  421. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -0
  422. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +57 -0
  423. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +1 -0
  424. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +7 -0
  425. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +1 -0
  426. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +57 -0
  427. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +1 -0
  428. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +389 -0
  429. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -0
  430. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +23 -0
  431. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -0
  432. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +389 -0
  433. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -0
  434. package/dist/data/ai/agent-action-icons.cjs +14 -6
  435. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  436. package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
  437. package/dist/data/ai/agent-action-icons.js +14 -6
  438. package/dist/data/ai/agent-action-icons.js.map +1 -1
  439. package/dist/data/ai/examples/sessions/claude-complete.cjs +17 -9
  440. package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -1
  441. package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -1
  442. package/dist/data/ai/examples/sessions/claude-complete.js +17 -9
  443. package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -1
  444. package/dist/data/ai/examples/sessions/claude.cjs +7 -4
  445. package/dist/data/ai/examples/sessions/claude.cjs.map +1 -1
  446. package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -1
  447. package/dist/data/ai/examples/sessions/claude.js +7 -4
  448. package/dist/data/ai/examples/sessions/claude.js.map +1 -1
  449. package/dist/data/ai/examples/sessions/codex-complete.cjs +17 -10
  450. package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -1
  451. package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -1
  452. package/dist/data/ai/examples/sessions/codex-complete.js +17 -10
  453. package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -1
  454. package/dist/data/ai/examples/sessions/codex.cjs +7 -4
  455. package/dist/data/ai/examples/sessions/codex.cjs.map +1 -1
  456. package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -1
  457. package/dist/data/ai/examples/sessions/codex.js +7 -4
  458. package/dist/data/ai/examples/sessions/codex.js.map +1 -1
  459. package/dist/data/ai/index.d.ts +6 -3
  460. package/dist/data/ai/index.d.ts.map +1 -1
  461. package/dist/data/ai/runtime-profile.cjs +93 -0
  462. package/dist/data/ai/runtime-profile.cjs.map +1 -0
  463. package/dist/data/ai/runtime-profile.d.ts +73 -0
  464. package/dist/data/ai/runtime-profile.d.ts.map +1 -0
  465. package/dist/data/ai/runtime-profile.js +93 -0
  466. package/dist/data/ai/runtime-profile.js.map +1 -0
  467. package/dist/data/ai/sandbox-kind-meta.cjs +38 -4
  468. package/dist/data/ai/sandbox-kind-meta.cjs.map +1 -1
  469. package/dist/data/ai/sandbox-kind-meta.d.ts +3 -0
  470. package/dist/data/ai/sandbox-kind-meta.d.ts.map +1 -1
  471. package/dist/data/ai/sandbox-kind-meta.js +38 -4
  472. package/dist/data/ai/sandbox-kind-meta.js.map +1 -1
  473. package/dist/data/chat/Chat.cjs +17 -5
  474. package/dist/data/chat/Chat.cjs.map +1 -1
  475. package/dist/data/chat/Chat.d.ts.map +1 -1
  476. package/dist/data/chat/Chat.fixtures.cjs +3 -3
  477. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  478. package/dist/data/chat/Chat.fixtures.js +3 -3
  479. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  480. package/dist/data/chat/Chat.js +18 -6
  481. package/dist/data/chat/Chat.js.map +1 -1
  482. package/dist/data/chat/Chat.runtime.cjs +15 -9
  483. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  484. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  485. package/dist/data/chat/Chat.runtime.js +16 -10
  486. package/dist/data/chat/Chat.runtime.js.map +1 -1
  487. package/dist/data/chat/ChatRuntimeToolbar.cjs +5 -5
  488. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  489. package/dist/data/chat/ChatRuntimeToolbar.js +5 -5
  490. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  491. package/dist/data/chat/ContextMeter.cjs +3 -3
  492. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  493. package/dist/data/chat/ContextMeter.d.ts +3 -3
  494. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  495. package/dist/data/chat/ContextMeter.js +3 -3
  496. package/dist/data/chat/ContextMeter.js.map +1 -1
  497. package/dist/data/chat/approval.cjs.map +1 -1
  498. package/dist/data/chat/approval.d.ts +21 -1
  499. package/dist/data/chat/approval.d.ts.map +1 -1
  500. package/dist/data/chat/approval.js.map +1 -1
  501. package/dist/data/chat/clickyOperationsToTools.cjs +5 -0
  502. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  503. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  504. package/dist/data/chat/clickyOperationsToTools.js +5 -0
  505. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  506. package/dist/data/chat/types.cjs.map +1 -1
  507. package/dist/data/chat/types.d.ts +7 -5
  508. package/dist/data/chat/types.d.ts.map +1 -1
  509. package/dist/data/chat/types.js.map +1 -1
  510. package/dist/data/chat/usage-snapshot.cjs +21 -1
  511. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  512. package/dist/data/chat/usage-snapshot.d.ts +2 -0
  513. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  514. package/dist/data/chat/usage-snapshot.js +22 -2
  515. package/dist/data/chat/usage-snapshot.js.map +1 -1
  516. package/dist/data/runtime/RuntimeBar.cjs +49 -51
  517. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  518. package/dist/data/runtime/RuntimeBar.d.ts +10 -2
  519. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  520. package/dist/data/runtime/RuntimeBar.js +51 -53
  521. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  522. package/dist/data/runtime/RuntimeBar.model.cjs +55 -0
  523. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
  524. package/dist/data/runtime/RuntimeBar.model.d.ts +11 -3
  525. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
  526. package/dist/data/runtime/RuntimeBar.model.js +55 -0
  527. package/dist/data/runtime/RuntimeBar.model.js.map +1 -1
  528. package/dist/data/runtime/RuntimeBarCombo.cjs +11 -6
  529. package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -1
  530. package/dist/data/runtime/RuntimeBarCombo.d.ts +3 -1
  531. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -1
  532. package/dist/data/runtime/RuntimeBarCombo.js +11 -6
  533. package/dist/data/runtime/RuntimeBarCombo.js.map +1 -1
  534. package/dist/data/runtime/RuntimeBarSegments.cjs +7 -5
  535. package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -1
  536. package/dist/data/runtime/RuntimeBarSegments.d.ts +4 -2
  537. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -1
  538. package/dist/data/runtime/RuntimeBarSegments.js +7 -5
  539. package/dist/data/runtime/RuntimeBarSegments.js.map +1 -1
  540. package/dist/data/runtime/model-capabilities.cjs +6 -6
  541. package/dist/data/runtime/model-capabilities.cjs.map +1 -1
  542. package/dist/data/runtime/model-capabilities.d.ts +5 -1
  543. package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
  544. package/dist/data/runtime/model-capabilities.js +6 -6
  545. package/dist/data/runtime/model-capabilities.js.map +1 -1
  546. package/dist/data/runtime/provider-status.cjs +1 -1
  547. package/dist/data/runtime/provider-status.cjs.map +1 -1
  548. package/dist/data/runtime/provider-status.js +1 -1
  549. package/dist/data/runtime/provider-status.js.map +1 -1
  550. package/dist/data/runtime/runtime-field-support.cjs +63 -0
  551. package/dist/data/runtime/runtime-field-support.cjs.map +1 -0
  552. package/dist/data/runtime/runtime-field-support.d.ts +13 -0
  553. package/dist/data/runtime/runtime-field-support.d.ts.map +1 -0
  554. package/dist/data/runtime/runtime-field-support.js +63 -0
  555. package/dist/data/runtime/runtime-field-support.js.map +1 -0
  556. package/dist/data/runtime/runtime-mode.cjs +170 -111
  557. package/dist/data/runtime/runtime-mode.cjs.map +1 -1
  558. package/dist/data/runtime/runtime-mode.d.ts +58 -14
  559. package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
  560. package/dist/data/runtime/runtime-mode.js +170 -111
  561. package/dist/data/runtime/runtime-mode.js.map +1 -1
  562. package/dist/data/selectionActionSplit.cjs +33 -0
  563. package/dist/data/selectionActionSplit.cjs.map +1 -0
  564. package/dist/data/selectionActionSplit.d.ts +36 -0
  565. package/dist/data/selectionActionSplit.d.ts.map +1 -0
  566. package/dist/data/selectionActionSplit.js +33 -0
  567. package/dist/data/selectionActionSplit.js.map +1 -0
  568. package/dist/data/task-copy.cjs +76 -0
  569. package/dist/data/task-copy.cjs.map +1 -0
  570. package/dist/data/task-copy.d.ts +12 -0
  571. package/dist/data/task-copy.d.ts.map +1 -0
  572. package/dist/data/task-copy.js +76 -0
  573. package/dist/data/task-copy.js.map +1 -0
  574. package/dist/data/version-info.cjs +3 -3
  575. package/dist/data/version-info.js +3 -3
  576. package/dist/data.cjs +34 -0
  577. package/dist/data.cjs.map +1 -1
  578. package/dist/data.d.ts +4 -1
  579. package/dist/data.d.ts.map +1 -1
  580. package/dist/data.js +34 -0
  581. package/dist/data.js.map +1 -1
  582. package/dist/hooks/use-task-run.cjs +24 -17
  583. package/dist/hooks/use-task-run.cjs.map +1 -1
  584. package/dist/hooks/use-task-run.d.ts +3 -1
  585. package/dist/hooks/use-task-run.d.ts.map +1 -1
  586. package/dist/hooks/use-task-run.js +25 -18
  587. package/dist/hooks/use-task-run.js.map +1 -1
  588. package/dist/icons/components/UiCalendarCheck.cjs +15 -0
  589. package/dist/icons/components/UiCalendarCheck.cjs.map +1 -0
  590. package/dist/icons/components/UiCalendarCheck.d.ts +15 -0
  591. package/dist/icons/components/UiCalendarCheck.d.ts.map +1 -0
  592. package/dist/icons/components/UiCalendarCheck.js +15 -0
  593. package/dist/icons/components/UiCalendarCheck.js.map +1 -0
  594. package/dist/icons/components/UiChartLineUp.cjs +15 -0
  595. package/dist/icons/components/UiChartLineUp.cjs.map +1 -0
  596. package/dist/icons/components/UiChartLineUp.d.ts +15 -0
  597. package/dist/icons/components/UiChartLineUp.d.ts.map +1 -0
  598. package/dist/icons/components/UiChartLineUp.js +15 -0
  599. package/dist/icons/components/UiChartLineUp.js.map +1 -0
  600. package/dist/icons/components/UiClockCountdown.cjs +15 -0
  601. package/dist/icons/components/UiClockCountdown.cjs.map +1 -0
  602. package/dist/icons/components/UiClockCountdown.d.ts +15 -0
  603. package/dist/icons/components/UiClockCountdown.d.ts.map +1 -0
  604. package/dist/icons/components/UiClockCountdown.js +15 -0
  605. package/dist/icons/components/UiClockCountdown.js.map +1 -0
  606. package/dist/icons/components/UiFactory.cjs +15 -0
  607. package/dist/icons/components/UiFactory.cjs.map +1 -0
  608. package/dist/icons/components/UiFactory.d.ts +15 -0
  609. package/dist/icons/components/UiFactory.d.ts.map +1 -0
  610. package/dist/icons/components/UiFactory.js +15 -0
  611. package/dist/icons/components/UiFactory.js.map +1 -0
  612. package/dist/icons/components/UiHandCoins.cjs +15 -0
  613. package/dist/icons/components/UiHandCoins.cjs.map +1 -0
  614. package/dist/icons/components/UiHandCoins.d.ts +15 -0
  615. package/dist/icons/components/UiHandCoins.d.ts.map +1 -0
  616. package/dist/icons/components/UiHandCoins.js +15 -0
  617. package/dist/icons/components/UiHandCoins.js.map +1 -0
  618. package/dist/icons/components/UiInvoice.cjs +15 -0
  619. package/dist/icons/components/UiInvoice.cjs.map +1 -0
  620. package/dist/icons/components/UiInvoice.d.ts +15 -0
  621. package/dist/icons/components/UiInvoice.d.ts.map +1 -0
  622. package/dist/icons/components/UiInvoice.js +15 -0
  623. package/dist/icons/components/UiInvoice.js.map +1 -0
  624. package/dist/icons/components/UiTax.cjs +15 -0
  625. package/dist/icons/components/UiTax.cjs.map +1 -0
  626. package/dist/icons/components/UiTax.d.ts +15 -0
  627. package/dist/icons/components/UiTax.d.ts.map +1 -0
  628. package/dist/icons/components/UiTax.js +15 -0
  629. package/dist/icons/components/UiTax.js.map +1 -0
  630. package/dist/icons/index.d.ts +14 -0
  631. package/dist/icons/index.d.ts.map +1 -1
  632. package/dist/icons/registry.cjs +14 -0
  633. package/dist/icons/registry.cjs.map +1 -1
  634. package/dist/icons/registry.d.ts.map +1 -1
  635. package/dist/icons/registry.js +14 -0
  636. package/dist/icons/registry.js.map +1 -1
  637. package/dist/icons.cjs +21 -0
  638. package/dist/icons.cjs.map +1 -1
  639. package/dist/icons.js +21 -0
  640. package/dist/icons.js.map +1 -1
  641. package/dist/index.cjs +43 -0
  642. package/dist/index.cjs.map +1 -1
  643. package/dist/index.js +44 -1
  644. package/dist/index.js.map +1 -1
  645. package/dist/layout/AppShell.cjs +17 -3
  646. package/dist/layout/AppShell.cjs.map +1 -1
  647. package/dist/layout/AppShell.d.ts.map +1 -1
  648. package/dist/layout/AppShell.js +17 -3
  649. package/dist/layout/AppShell.js.map +1 -1
  650. package/dist/overlay/DropdownMenu.cjs +46 -35
  651. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  652. package/dist/overlay/DropdownMenu.js +46 -35
  653. package/dist/overlay/DropdownMenu.js.map +1 -1
  654. package/dist/rpc/FilterForm.cjs +26 -11
  655. package/dist/rpc/FilterForm.cjs.map +1 -1
  656. package/dist/rpc/FilterForm.d.ts +4 -1
  657. package/dist/rpc/FilterForm.d.ts.map +1 -1
  658. package/dist/rpc/FilterForm.js +26 -11
  659. package/dist/rpc/FilterForm.js.map +1 -1
  660. package/dist/rpc/FilterFormFields.cjs +3 -2
  661. package/dist/rpc/FilterFormFields.cjs.map +1 -1
  662. package/dist/rpc/FilterFormFields.d.ts +2 -1
  663. package/dist/rpc/FilterFormFields.d.ts.map +1 -1
  664. package/dist/rpc/FilterFormFields.js +3 -2
  665. package/dist/rpc/FilterFormFields.js.map +1 -1
  666. package/dist/rpc/OperationActionBar.cjs +67 -15
  667. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  668. package/dist/rpc/OperationActionBar.d.ts +11 -3
  669. package/dist/rpc/OperationActionBar.d.ts.map +1 -1
  670. package/dist/rpc/OperationActionBar.js +68 -16
  671. package/dist/rpc/OperationActionBar.js.map +1 -1
  672. package/dist/rpc/OperationCatalog.cjs +69 -76
  673. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  674. package/dist/rpc/OperationCatalog.d.ts +3 -1
  675. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  676. package/dist/rpc/OperationCatalog.js +69 -76
  677. package/dist/rpc/OperationCatalog.js.map +1 -1
  678. package/dist/rpc/OperationCatalogActions.cjs +69 -0
  679. package/dist/rpc/OperationCatalogActions.cjs.map +1 -0
  680. package/dist/rpc/OperationCatalogActions.d.ts +17 -0
  681. package/dist/rpc/OperationCatalogActions.d.ts.map +1 -0
  682. package/dist/rpc/OperationCatalogActions.js +69 -0
  683. package/dist/rpc/OperationCatalogActions.js.map +1 -0
  684. package/dist/rpc/OperationEntityContextPicker.cjs +129 -116
  685. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
  686. package/dist/rpc/OperationEntityContextPicker.d.ts +18 -1
  687. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
  688. package/dist/rpc/OperationEntityContextPicker.js +130 -117
  689. package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
  690. package/dist/rpc/OperationResultView.cjs +7 -4
  691. package/dist/rpc/OperationResultView.cjs.map +1 -1
  692. package/dist/rpc/OperationResultView.d.ts +4 -2
  693. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  694. package/dist/rpc/OperationResultView.js +7 -4
  695. package/dist/rpc/OperationResultView.js.map +1 -1
  696. package/dist/rpc/operationCatalogUrl.cjs +28 -0
  697. package/dist/rpc/operationCatalogUrl.cjs.map +1 -0
  698. package/dist/rpc/operationCatalogUrl.d.ts +3 -0
  699. package/dist/rpc/operationCatalogUrl.d.ts.map +1 -0
  700. package/dist/rpc/operationCatalogUrl.js +28 -0
  701. package/dist/rpc/operationCatalogUrl.js.map +1 -0
  702. package/dist/rpc/rowNavigation.cjs +4 -3
  703. package/dist/rpc/rowNavigation.cjs.map +1 -1
  704. package/dist/rpc/rowNavigation.d.ts +1 -1
  705. package/dist/rpc/rowNavigation.d.ts.map +1 -1
  706. package/dist/rpc/rowNavigation.js +4 -3
  707. package/dist/rpc/rowNavigation.js.map +1 -1
  708. package/dist/rpc/types.cjs.map +1 -1
  709. package/dist/rpc/types.d.ts +2 -2
  710. package/dist/rpc/types.d.ts.map +1 -1
  711. package/dist/rpc/types.js.map +1 -1
  712. package/dist/rpc.cjs +2 -0
  713. package/dist/rpc.cjs.map +1 -1
  714. package/dist/rpc.d.ts +2 -1
  715. package/dist/rpc.d.ts.map +1 -1
  716. package/dist/rpc.js +2 -0
  717. package/dist/rpc.js.map +1 -1
  718. package/dist/runtime-profile.cjs +7 -0
  719. package/dist/runtime-profile.cjs.map +1 -0
  720. package/dist/runtime-profile.d.ts +2 -0
  721. package/dist/runtime-profile.d.ts.map +1 -0
  722. package/dist/runtime-profile.js +7 -0
  723. package/dist/runtime-profile.js.map +1 -0
  724. package/dist/styles.css +1 -1
  725. package/package.json +6 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChatWindow.js","sources":["../../../src/data/ai/ChatWindow.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n} from \"react\";\nimport type { Props as RndProps } from \"react-rnd\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Icon } from \"../Icon\";\nimport { UiAdd, UiClose, UiFullscreen, UiGitBranch } from \"../../icons\";\nimport { Chat } from \"../chat/Chat\";\nimport { forkChatSession, type CaptainChatSession } from \"../chat/approval\";\nimport type {\n ChatBudgetConfig,\n ChatUsageSummary,\n ClaudePermissionMode,\n} from \"../chat/types\";\nimport { useChatWindowManager } from \"./chat-window-context\";\nimport { ThreadPicker } from \"./ThreadPicker\";\nimport { ContextBadges } from \"./ContextBadges\";\nimport { ToolPreferences, type ToolMeta } from \"./ToolPreferences\";\nimport type { ChatContextItem } from \"./context\";\nimport { chatWindowRequestBody } from \"./ChatWindowRequestBody\";\nimport {\n loadChatPreferences,\n saveChatPreferences,\n type StoredChatPreferences,\n} from \"./ChatWindow.preferences\";\nimport { useChatWindowRuntime } from \"./ChatWindow.runtime\";\nimport { useChatWindowCatalogs } from \"./ChatWindow.catalogs\";\nimport { normalizeToolCatalog } from \"./ChatWindow.tool-catalog\";\nimport {\n effectiveToolPolicies,\n withUserRule,\n} from \"./ToolPreferences.model\";\nimport type {\n PermissionPolicy,\n PermissionRule,\n} from \"../chat/tool-policy\";\nimport { useChatThreadSetup } from \"./ChatWindow.thread\";\nimport { ChatThreadSetupStatus } from \"./ChatWindow.thread-status\";\nimport type { ChatWindowProps } from \"./ChatWindow.types\";\nexport type {\n ChatContextPickerRenderProps,\n ChatWindowProps,\n} from \"./ChatWindow.types\";\n\nconst EMPTY_TOOLS: ToolMeta[] = [];\n\nconst MAXIMIZE_CSS = `\n.chat-maximized .react-draggable {\n transform: none !important;\n width: auto !important;\n height: auto !important;\n inset: 0 !important;\n position: absolute !important;\n}`;\n\n/** A draggable, resizable floating chat window. It lazy-loads `react-rnd` (an\n * optional dependency, so consumers of just the inner <Chat> never pull it)\n * and renders the existing <Chat> beneath a drag-handle header with thread\n * switching, a context-badge row and optional tool preferences. */\nexport function ChatWindow({\n panel,\n chat,\n title = \"Assistant\",\n sessionsApi = \"/api/chat/sessions\",\n threadsSource,\n contextTypeConfig,\n tools,\n defaultToolPolicy = \"ask\",\n toolsApi = \"/api/chat/tools\",\n runtimesApi = null,\n toolRenderers,\n headerExtras,\n renderContextPicker,\n}: ChatWindowProps) {\n const { updatePanel, closePanel, bringToFront, maximizePanel, openPanel } =\n useChatWindowManager();\n const threadSetup = useChatThreadSetup({\n threadId: panel.threadId,\n api: sessionsApi,\n source: threadsSource,\n onCreated: (threadId) => updatePanel(panel.id, { threadId }),\n });\n const [Rnd, setRnd] = useState<ComponentType<RndProps> | null>(null);\n const [storedPrefs] = useState<StoredChatPreferences>(() =>\n loadChatPreferences(),\n );\n const [budget, setBudget] = useState<ChatBudgetConfig>(\n chat?.budget ?? storedPrefs.budget ?? {},\n );\n const [permissionMode, setPermissionMode] = useState<ClaudePermissionMode>(\n chat?.permissionMode ?? storedPrefs.permissionMode ?? \"default\",\n );\n const [usage, setUsage] = useState<ChatUsageSummary | null>(null);\n const [titleRefresh, setTitleRefresh] = useState(0);\n // Only the rules the user actually toggled are stored. Everything else is\n // derived, so a surface's rules still reach tools the user never touched, and\n // a group toggle keeps applying as the catalog grows.\n const [userToolRules, setUserToolRules] = useState<PermissionPolicy>(\n storedPrefs.toolRules ?? [],\n );\n const [fetchedTools, setFetchedTools] = useState<ToolMeta[] | undefined>(\n undefined,\n );\n const [toolsLoading, setToolsLoading] = useState(false);\n const [toolsError, setToolsError] = useState<string | null>(null);\n const resolvedTools = tools ?? fetchedTools ?? EMPTY_TOOLS;\n const modelsApi =\n chat?.modelsApi === undefined ? \"/api/chat/models\" : chat.modelsApi;\n const {\n models: resolvedModels,\n runtimeFamilies,\n loading: catalogLoading,\n error: catalogError,\n retry: retryCatalogs,\n } = useChatWindowCatalogs({\n models: chat?.models,\n modelsApi,\n runtimesApi,\n });\n const {\n runtime,\n temperature,\n reasoningEfforts,\n handleRuntimeChange,\n handleModelChange,\n handleReasoningEffortChange,\n handleTemperatureChange,\n replaceRuntimeIdentity,\n replaceRuntime,\n } = useChatWindowRuntime({\n chat,\n initialModel: panel.initialModel,\n models: resolvedModels,\n storedRuntime: storedPrefs.runtime,\n });\n const [messageCount, setMessageCount] = useState(0);\n const [runtimeBound, setRuntimeBound] = useState(false);\n const [forking, setForking] = useState(false);\n const runtimeLocked = runtimeBound || messageCount > 0;\n const preferredRuntimeRef = useRef(runtime);\n const threadIdRef = useRef(panel.threadId);\n threadIdRef.current = panel.threadId;\n\n useEffect(() => {\n if (!runtimeLocked) preferredRuntimeRef.current = runtime;\n }, [runtime, runtimeLocked]);\n\n useEffect(() => {\n setMessageCount(0);\n setRuntimeBound(false);\n setUsage(null);\n replaceRuntime(preferredRuntimeRef.current);\n }, [panel.threadId, replaceRuntime]);\n\n useEffect(() => {\n if (chat?.budget !== undefined) setBudget(chat.budget);\n }, [chat?.budget]);\n\n useEffect(() => {\n if (chat?.permissionMode !== undefined)\n setPermissionMode(chat.permissionMode);\n }, [chat?.permissionMode]);\n\n useEffect(() => {\n if (tools || toolsApi === null) return;\n let active = true;\n setToolsLoading(true);\n setToolsError(null);\n fetch(toolsApi)\n .then((r) =>\n r.ok ? r.json() : Promise.reject(new Error(`tools ${r.status}`)),\n )\n .then((data) => {\n if (!active) return;\n setFetchedTools(normalizeToolCatalog(data));\n })\n .catch((err) => {\n if (!active) return;\n setToolsError(err instanceof Error ? err.message : String(err));\n })\n .finally(() => {\n if (active) setToolsLoading(false);\n });\n return () => {\n active = false;\n };\n }, [tools, toolsApi]);\n\n useEffect(() => {\n saveChatPreferences({\n runtime: runtimeLocked ? preferredRuntimeRef.current : runtime,\n ...(budget.cost !== undefined || budget.maxTokens !== undefined\n ? { budget }\n : {}),\n permissionMode,\n toolRules: userToolRules,\n });\n }, [budget, permissionMode, runtime, runtimeLocked, userToolRules]);\n\n const toolPrefs = useMemo(\n () =>\n effectiveToolPolicies({\n tools: resolvedTools,\n surfacePolicy: panel.toolPolicy,\n userRules: userToolRules,\n fallback: defaultToolPolicy,\n }),\n [defaultToolPolicy, panel.toolPolicy, resolvedTools, userToolRules],\n );\n\n // The popover hands back the one rule the toggle means, not a whole map, so\n // which control was used survives into the request.\n const handleToolRule = useCallback((rule: PermissionRule) => {\n setUserToolRules((prev) => withUserRule(prev, rule));\n }, []);\n\n useEffect(() => {\n let active = true;\n import(\"react-rnd\").then((m) => {\n if (active) setRnd(() => m.Rnd as unknown as ComponentType<RndProps>);\n });\n return () => {\n active = false;\n };\n }, []);\n\n const removeContext = useCallback(\n (id: string) =>\n updatePanel(panel.id, {\n contextItems: panel.contextItems.filter((c) => c.id !== id),\n }),\n [updatePanel, panel.id, panel.contextItems],\n );\n\n const addContextItems = useCallback(\n (items: ChatContextItem[]) =>\n updatePanel(panel.id, {\n contextItems: [\n ...panel.contextItems,\n ...items.filter(\n (item, index) =>\n !panel.contextItems.some((existing) => existing.id === item.id) &&\n items.findIndex((candidate) => candidate.id === item.id) ===\n index,\n ),\n ],\n }),\n [panel.contextItems, panel.id, updatePanel],\n );\n const addContext = useCallback(\n (item: ChatContextItem) => addContextItems([item]),\n [addContextItems],\n );\n\n const mergedBody = chatWindowRequestBody({\n base: chat?.body,\n contextItems: panel.contextItems,\n tools: resolvedTools,\n surfacePolicy: panel.toolPolicy,\n userPolicy: userToolRules,\n });\n\n const initialPrompt = panel.initialPrompt ?? chat?.initialPrompt ?? null;\n const handleInitialPromptSent = useCallback(() => {\n if (panel.initialPrompt) updatePanel(panel.id, { initialPrompt: null });\n chat?.onInitialPromptSent?.();\n }, [chat, panel.id, panel.initialPrompt, updatePanel]);\n const handleUsage = useCallback(\n (snapshot: ChatUsageSummary) => {\n setUsage(snapshot);\n // A settled turn is also when the backend has named the conversation, so\n // this is what refreshes the picker's label.\n setTitleRefresh((value) => value + 1);\n chat?.onUsage?.(snapshot);\n },\n [chat],\n );\n const handlePermissionModeChange = useCallback(\n (next: ClaudePermissionMode) => {\n setPermissionMode(next);\n chat?.onPermissionModeChange?.(next);\n },\n [chat],\n );\n const handleSessionHydrated = useCallback(\n (session: CaptainChatSession) => {\n if (session.id !== panel.threadId) return;\n setRuntimeBound(\n Boolean(session.runtime?.model && session.runtime.backend),\n );\n if (session.runtime?.model && session.runtime.backend) {\n replaceRuntimeIdentity(session.runtime);\n }\n chat?.onSessionHydrated?.(session);\n },\n [chat, panel.threadId, replaceRuntimeIdentity],\n );\n const handleMessageCountChange = useCallback(\n (count: number) => {\n setMessageCount(count);\n chat?.onMessageCountChange?.(count);\n },\n [chat],\n );\n const handleFork = useCallback(async () => {\n if (!sessionsApi || !panel.threadId || messageCount === 0 || forking)\n return;\n const sourceThreadId = panel.threadId;\n setForking(true);\n try {\n const fork = await forkChatSession(sessionsApi, sourceThreadId);\n if (threadIdRef.current !== sourceThreadId) return;\n openPanel({ threadId: fork.id });\n } catch (error) {\n console.warn(\"clicky-ui: failed to fork chat session\", error);\n } finally {\n setForking(false);\n }\n }, [forking, messageCount, openPanel, panel.threadId, sessionsApi]);\n\n const header = (\n <div className=\"chat-drag-handle flex cursor-move items-center gap-1 border-b border-border bg-muted/40 px-2 py-1.5\">\n {threadsSource != null || sessionsApi !== null ? (\n <ThreadPicker\n threadId={panel.threadId}\n onSelect={(tid) => updatePanel(panel.id, { threadId: tid })}\n onNew={() => updatePanel(panel.id, { threadId: null })}\n refreshToken={titleRefresh}\n {...(threadsSource\n ? { source: threadsSource }\n : sessionsApi !== null\n ? { api: sessionsApi }\n : {})}\n />\n ) : (\n <span className=\"px-1 text-sm font-medium\">{title}</span>\n )}\n <div className=\"flex-1\" />\n {headerExtras}\n <ToolPreferences\n tools={resolvedTools}\n value={toolPrefs}\n onRule={handleToolRule}\n models={resolvedModels}\n runtime={runtime}\n onRuntimeChange={handleRuntimeChange}\n runtimeFamilies={runtimeFamilies}\n reasoningEfforts={reasoningEfforts}\n permissionMode={permissionMode}\n onPermissionModeChange={handlePermissionModeChange}\n temperature={temperature}\n onTemperatureChange={handleTemperatureChange}\n budget={budget}\n onBudgetChange={setBudget}\n usage={usage}\n runtimeLocked={runtimeLocked}\n {...(sessionsApi ? { costsApi: sessionsApi } : {})}\n {...(panel.threadId ? { threadId: panel.threadId } : {})}\n toolsLoading={toolsLoading}\n toolsError={toolsError}\n catalogLoading={catalogLoading}\n catalogError={catalogError}\n onCatalogRetry={retryCatalogs}\n />\n {sessionsApi && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={\n messageCount === 0\n ? \"Send a message before forking this conversation\"\n : \"Fork conversation into a new window\"\n }\n disabled={!panel.threadId || messageCount === 0 || forking}\n onClick={() => void handleFork()}\n >\n <Icon icon={UiGitBranch} className=\"size-4\" />\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"New window\"\n onClick={() => openPanel()}\n >\n <Icon icon={UiAdd} className=\"size-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={panel.maximized ? \"Restore\" : \"Maximize\"}\n onClick={() => maximizePanel(panel.id)}\n >\n <Icon icon={UiFullscreen} className=\"size-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Close\"\n onClick={() => closePanel(panel.id)}\n >\n <Icon icon={UiClose} className=\"size-4\" />\n </Button>\n </div>\n );\n\n const frame = (\n <div className=\"flex h-full flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl\">\n {header}\n {(renderContextPicker || panel.contextItems.length > 0) && (\n <div className=\"flex flex-wrap items-center gap-1.5 border-b border-border px-2 py-1.5\">\n {renderContextPicker?.({\n items: panel.contextItems,\n onAdd: addContext,\n onAddMany: addContextItems,\n })}\n <ContextBadges\n items={panel.contextItems}\n onRemove={removeContext}\n className=\"px-0 py-0\"\n {...(contextTypeConfig ? { typeConfig: contextTypeConfig } : {})}\n />\n </div>\n )}\n <div className=\"min-h-0 flex-1\">\n {threadSetup.blocked ? (\n <ChatThreadSetupStatus setup={threadSetup} />\n ) : (\n <Chat\n key={panel.threadId ?? `new-${panel.id}`}\n {...chat}\n {...(resolvedModels.length\n ? { models: resolvedModels, modelsApi: null }\n : {})}\n runtime={runtime}\n {...(runtimeFamilies ? { runtimeFamilies } : {})}\n permissionMode={permissionMode}\n onRuntimeChange={handleRuntimeChange}\n onModelChange={handleModelChange}\n onReasoningEffortChange={handleReasoningEffortChange}\n budget={budget}\n onUsage={handleUsage}\n runtimeLocked={runtimeLocked}\n onMessageCountChange={handleMessageCountChange}\n onSessionHydrated={handleSessionHydrated}\n {...(panel.threadId ? { threadId: panel.threadId } : {})}\n sessionsApi={sessionsApi}\n tools={resolvedTools}\n {...(toolRenderers ? { toolRenderers } : {})}\n body={mergedBody}\n initialPrompt={initialPrompt}\n onInitialPromptSent={handleInitialPromptSent}\n />\n )}\n </div>\n </div>\n );\n\n const outerClass = cn(\n \"fixed pointer-events-none\",\n panel.maximized ? \"inset-4 chat-maximized\" : \"inset-0\",\n );\n\n // Until react-rnd loads (and as a graceful fallback if it never does) the\n // window is statically positioned — still usable, just not draggable.\n if (!Rnd) {\n return (\n <div className={outerClass} style={{ zIndex: panel.zIndex }}>\n <div\n className=\"pointer-events-auto h-full\"\n style={\n panel.maximized\n ? { position: \"relative\", width: \"100%\", height: \"100%\" }\n : {\n position: \"absolute\",\n left: panel.x,\n top: panel.y,\n width: panel.width,\n height: panel.height,\n }\n }\n >\n {frame}\n </div>\n </div>\n );\n }\n\n return (\n <div className={outerClass} style={{ zIndex: panel.zIndex }}>\n <style>{MAXIMIZE_CSS}</style>\n <Rnd\n default={{\n x: panel.x,\n y: panel.y,\n width: panel.width,\n height: panel.height,\n }}\n style={{ pointerEvents: \"auto\" }}\n minWidth={360}\n minHeight={400}\n bounds=\"parent\"\n dragHandleClassName=\"chat-drag-handle\"\n disableDragging={panel.maximized}\n enableResizing={!panel.maximized}\n onDragStart={() => bringToFront(panel.id)}\n onDragStop={(_e, d) => updatePanel(panel.id, { x: d.x, y: d.y })}\n onResizeStop={(_e, _dir, ref, _delta, pos) =>\n updatePanel(panel.id, {\n width: ref.offsetWidth,\n height: ref.offsetHeight,\n x: pos.x,\n y: pos.y,\n })\n }\n >\n {frame}\n </Rnd>\n </div>\n );\n}\n\n/** Renders every open window for the current {@link useChatWindowManager}.\n * Drop one of these near the root alongside a <ChatFab/>. */\nexport function ChatWindowLayer(props: Omit<ChatWindowProps, \"panel\">) {\n const { panels } = useChatWindowManager();\n return (\n <>\n {panels.map((panel) => (\n <ChatWindow key={panel.id} panel={panel} {...props} />\n ))}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatWindow.js","sources":["../../../src/data/ai/ChatWindow.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n} from \"react\";\nimport type { Props as RndProps } from \"react-rnd\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Icon } from \"../Icon\";\nimport { UiAdd, UiClose, UiFullscreen, UiGitBranch } from \"../../icons\";\nimport { Chat } from \"../chat/Chat\";\nimport { forkChatSession, type CaptainChatSession } from \"../chat/approval\";\nimport type {\n ChatBudgetConfig,\n ChatUsageSummary,\n ClaudePermissionMode,\n} from \"../chat/types\";\nimport { useChatWindowManager } from \"./chat-window-context\";\nimport { ThreadPicker } from \"./ThreadPicker\";\nimport { ContextBadges } from \"./ContextBadges\";\nimport { ToolPreferences, type ToolMeta } from \"./ToolPreferences\";\nimport type { ChatContextItem } from \"./context\";\nimport { chatWindowRequestBody } from \"./ChatWindowRequestBody\";\nimport {\n loadChatPreferences,\n saveChatPreferences,\n type StoredChatPreferences,\n} from \"./ChatWindow.preferences\";\nimport { useChatWindowRuntime } from \"./ChatWindow.runtime\";\nimport { useChatWindowCatalogs } from \"./ChatWindow.catalogs\";\nimport { normalizeToolCatalog } from \"./ChatWindow.tool-catalog\";\nimport {\n effectiveToolPolicies,\n withUserRule,\n} from \"./ToolPreferences.model\";\nimport type {\n PermissionPolicy,\n PermissionRule,\n} from \"../chat/tool-policy\";\nimport { useChatThreadSetup } from \"./ChatWindow.thread\";\nimport { ChatThreadSetupStatus } from \"./ChatWindow.thread-status\";\nimport type { ChatWindowProps } from \"./ChatWindow.types\";\nexport type {\n ChatContextPickerRenderProps,\n ChatWindowProps,\n} from \"./ChatWindow.types\";\n\nconst EMPTY_TOOLS: ToolMeta[] = [];\n\nconst MAXIMIZE_CSS = `\n.chat-maximized .react-draggable {\n transform: none !important;\n width: auto !important;\n height: auto !important;\n inset: 0 !important;\n position: absolute !important;\n}`;\n\n/** A draggable, resizable floating chat window. It lazy-loads `react-rnd` (an\n * optional dependency, so consumers of just the inner <Chat> never pull it)\n * and renders the existing <Chat> beneath a drag-handle header with thread\n * switching, a context-badge row and optional tool preferences. */\nexport function ChatWindow({\n panel,\n chat,\n title = \"Assistant\",\n sessionsApi = \"/api/chat/sessions\",\n threadsSource,\n contextTypeConfig,\n tools,\n defaultToolPolicy = \"ask\",\n toolsApi = \"/api/chat/tools\",\n runtimesApi = null,\n toolRenderers,\n headerExtras,\n renderContextPicker,\n}: ChatWindowProps) {\n const { updatePanel, closePanel, bringToFront, maximizePanel, openPanel } =\n useChatWindowManager();\n const threadSetup = useChatThreadSetup({\n threadId: panel.threadId,\n api: sessionsApi,\n source: threadsSource,\n onCreated: (threadId) => updatePanel(panel.id, { threadId }),\n });\n const [Rnd, setRnd] = useState<ComponentType<RndProps> | null>(null);\n const [storedPrefs] = useState<StoredChatPreferences>(() =>\n loadChatPreferences(),\n );\n const [budget, setBudget] = useState<ChatBudgetConfig>(\n chat?.budget ?? storedPrefs.budget ?? {},\n );\n const [permissionMode, setPermissionMode] = useState<ClaudePermissionMode>(\n chat?.permissionMode ?? storedPrefs.permissionMode ?? \"default\",\n );\n const [usage, setUsage] = useState<ChatUsageSummary | null>(null);\n const [titleRefresh, setTitleRefresh] = useState(0);\n // Only the rules the user actually toggled are stored. Everything else is\n // derived, so a surface's rules still reach tools the user never touched, and\n // a group toggle keeps applying as the catalog grows.\n const [userToolRules, setUserToolRules] = useState<PermissionPolicy>(\n storedPrefs.toolRules ?? [],\n );\n const [fetchedTools, setFetchedTools] = useState<ToolMeta[] | undefined>(\n undefined,\n );\n const [toolsLoading, setToolsLoading] = useState(false);\n const [toolsError, setToolsError] = useState<string | null>(null);\n const resolvedTools = tools ?? fetchedTools ?? EMPTY_TOOLS;\n const modelsApi =\n chat?.modelsApi === undefined ? \"/api/chat/models\" : chat.modelsApi;\n const {\n models: resolvedModels,\n runtimeFamilies,\n loading: catalogLoading,\n error: catalogError,\n retry: retryCatalogs,\n } = useChatWindowCatalogs({\n models: chat?.models,\n modelsApi,\n runtimesApi,\n });\n const {\n runtime,\n temperature,\n reasoningEfforts,\n handleRuntimeChange,\n handleModelChange,\n handleReasoningEffortChange,\n handleTemperatureChange,\n replaceRuntimeIdentity,\n replaceRuntime,\n } = useChatWindowRuntime({\n chat,\n initialModel: panel.initialModel,\n models: resolvedModels,\n storedRuntime: storedPrefs.runtime,\n });\n const [messageCount, setMessageCount] = useState(0);\n const [runtimeBound, setRuntimeBound] = useState(false);\n const [forking, setForking] = useState(false);\n const runtimeLocked = runtimeBound || messageCount > 0;\n const preferredRuntimeRef = useRef(runtime);\n const threadIdRef = useRef(panel.threadId);\n threadIdRef.current = panel.threadId;\n\n useEffect(() => {\n if (!runtimeLocked) preferredRuntimeRef.current = runtime;\n }, [runtime, runtimeLocked]);\n\n useEffect(() => {\n setMessageCount(0);\n setRuntimeBound(false);\n setUsage(null);\n replaceRuntime(preferredRuntimeRef.current);\n }, [panel.threadId, replaceRuntime]);\n\n useEffect(() => {\n if (chat?.budget !== undefined) setBudget(chat.budget);\n }, [chat?.budget]);\n\n useEffect(() => {\n if (chat?.permissionMode !== undefined)\n setPermissionMode(chat.permissionMode);\n }, [chat?.permissionMode]);\n\n useEffect(() => {\n if (tools || toolsApi === null) return;\n let active = true;\n setToolsLoading(true);\n setToolsError(null);\n fetch(toolsApi)\n .then((r) =>\n r.ok ? r.json() : Promise.reject(new Error(`tools ${r.status}`)),\n )\n .then((data) => {\n if (!active) return;\n setFetchedTools(normalizeToolCatalog(data));\n })\n .catch((err) => {\n if (!active) return;\n setToolsError(err instanceof Error ? err.message : String(err));\n })\n .finally(() => {\n if (active) setToolsLoading(false);\n });\n return () => {\n active = false;\n };\n }, [tools, toolsApi]);\n\n useEffect(() => {\n saveChatPreferences({\n runtime: runtimeLocked ? preferredRuntimeRef.current : runtime,\n ...(budget.cost !== undefined || budget.maxTokens !== undefined\n ? { budget }\n : {}),\n permissionMode,\n toolRules: userToolRules,\n });\n }, [budget, permissionMode, runtime, runtimeLocked, userToolRules]);\n\n const toolPrefs = useMemo(\n () =>\n effectiveToolPolicies({\n tools: resolvedTools,\n surfacePolicy: panel.toolPolicy,\n userRules: userToolRules,\n fallback: defaultToolPolicy,\n }),\n [defaultToolPolicy, panel.toolPolicy, resolvedTools, userToolRules],\n );\n\n // The popover hands back the one rule the toggle means, not a whole map, so\n // which control was used survives into the request.\n const handleToolRule = useCallback((rule: PermissionRule) => {\n setUserToolRules((prev) => withUserRule(prev, rule));\n }, []);\n\n useEffect(() => {\n let active = true;\n import(\"react-rnd\").then((m) => {\n if (active) setRnd(() => m.Rnd as unknown as ComponentType<RndProps>);\n });\n return () => {\n active = false;\n };\n }, []);\n\n const removeContext = useCallback(\n (id: string) =>\n updatePanel(panel.id, {\n contextItems: panel.contextItems.filter((c) => c.id !== id),\n }),\n [updatePanel, panel.id, panel.contextItems],\n );\n\n const addContextItems = useCallback(\n (items: ChatContextItem[]) =>\n updatePanel(panel.id, {\n contextItems: [\n ...panel.contextItems,\n ...items.filter(\n (item, index) =>\n !panel.contextItems.some((existing) => existing.id === item.id) &&\n items.findIndex((candidate) => candidate.id === item.id) ===\n index,\n ),\n ],\n }),\n [panel.contextItems, panel.id, updatePanel],\n );\n const addContext = useCallback(\n (item: ChatContextItem) => addContextItems([item]),\n [addContextItems],\n );\n\n const mergedBody = chatWindowRequestBody({\n base: chat?.body,\n contextItems: panel.contextItems,\n tools: resolvedTools,\n surfacePolicy: panel.toolPolicy,\n userPolicy: userToolRules,\n });\n\n const initialPrompt = panel.initialPrompt ?? chat?.initialPrompt ?? null;\n const handleInitialPromptSent = useCallback(() => {\n if (panel.initialPrompt) updatePanel(panel.id, { initialPrompt: null });\n chat?.onInitialPromptSent?.();\n }, [chat, panel.id, panel.initialPrompt, updatePanel]);\n const handleUsage = useCallback(\n (snapshot: ChatUsageSummary) => {\n setUsage(snapshot);\n // A settled turn is also when the backend has named the conversation, so\n // this is what refreshes the picker's label.\n setTitleRefresh((value) => value + 1);\n chat?.onUsage?.(snapshot);\n },\n [chat],\n );\n const handlePermissionModeChange = useCallback(\n (next: ClaudePermissionMode) => {\n setPermissionMode(next);\n chat?.onPermissionModeChange?.(next);\n },\n [chat],\n );\n const handleSessionHydrated = useCallback(\n (session: CaptainChatSession) => {\n if (session.id !== panel.threadId) return;\n // A hydrated session names its runtime as (model, mode). Requiring a\n // `backend` key here left every loaded session unbound — the picker kept\n // its defaults and the next send posted a runtime the thread had not\n // agreed to.\n setRuntimeBound(Boolean(session.runtime?.model && session.runtime.mode));\n if (session.runtime?.model && session.runtime.mode) {\n replaceRuntimeIdentity(session.runtime);\n }\n chat?.onSessionHydrated?.(session);\n },\n [chat, panel.threadId, replaceRuntimeIdentity],\n );\n const handleMessageCountChange = useCallback(\n (count: number) => {\n setMessageCount(count);\n chat?.onMessageCountChange?.(count);\n },\n [chat],\n );\n const handleFork = useCallback(async () => {\n if (!sessionsApi || !panel.threadId || messageCount === 0 || forking)\n return;\n const sourceThreadId = panel.threadId;\n setForking(true);\n try {\n const fork = await forkChatSession(sessionsApi, sourceThreadId);\n if (threadIdRef.current !== sourceThreadId) return;\n openPanel({ threadId: fork.id });\n } catch (error) {\n console.warn(\"clicky-ui: failed to fork chat session\", error);\n } finally {\n setForking(false);\n }\n }, [forking, messageCount, openPanel, panel.threadId, sessionsApi]);\n\n const header = (\n <div className=\"chat-drag-handle flex cursor-move items-center gap-1 border-b border-border bg-muted/40 px-2 py-1.5\">\n {threadsSource != null || sessionsApi !== null ? (\n <ThreadPicker\n threadId={panel.threadId}\n onSelect={(tid) => updatePanel(panel.id, { threadId: tid })}\n onNew={() => updatePanel(panel.id, { threadId: null })}\n refreshToken={titleRefresh}\n {...(threadsSource\n ? { source: threadsSource }\n : sessionsApi !== null\n ? { api: sessionsApi }\n : {})}\n />\n ) : (\n <span className=\"px-1 text-sm font-medium\">{title}</span>\n )}\n <div className=\"flex-1\" />\n {headerExtras}\n <ToolPreferences\n tools={resolvedTools}\n value={toolPrefs}\n onRule={handleToolRule}\n models={resolvedModels}\n runtime={runtime}\n onRuntimeChange={handleRuntimeChange}\n runtimeFamilies={runtimeFamilies}\n reasoningEfforts={reasoningEfforts}\n permissionMode={permissionMode}\n onPermissionModeChange={handlePermissionModeChange}\n temperature={temperature}\n onTemperatureChange={handleTemperatureChange}\n budget={budget}\n onBudgetChange={setBudget}\n usage={usage}\n runtimeLocked={runtimeLocked}\n {...(sessionsApi ? { costsApi: sessionsApi } : {})}\n {...(panel.threadId ? { threadId: panel.threadId } : {})}\n toolsLoading={toolsLoading}\n toolsError={toolsError}\n catalogLoading={catalogLoading}\n catalogError={catalogError}\n onCatalogRetry={retryCatalogs}\n />\n {sessionsApi && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={\n messageCount === 0\n ? \"Send a message before forking this conversation\"\n : \"Fork conversation into a new window\"\n }\n disabled={!panel.threadId || messageCount === 0 || forking}\n onClick={() => void handleFork()}\n >\n <Icon icon={UiGitBranch} className=\"size-4\" />\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"New window\"\n onClick={() => openPanel()}\n >\n <Icon icon={UiAdd} className=\"size-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={panel.maximized ? \"Restore\" : \"Maximize\"}\n onClick={() => maximizePanel(panel.id)}\n >\n <Icon icon={UiFullscreen} className=\"size-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Close\"\n onClick={() => closePanel(panel.id)}\n >\n <Icon icon={UiClose} className=\"size-4\" />\n </Button>\n </div>\n );\n\n const frame = (\n <div className=\"flex h-full flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl\">\n {header}\n {(renderContextPicker || panel.contextItems.length > 0) && (\n <div className=\"flex flex-wrap items-center gap-1.5 border-b border-border px-2 py-1.5\">\n {renderContextPicker?.({\n items: panel.contextItems,\n onAdd: addContext,\n onAddMany: addContextItems,\n })}\n <ContextBadges\n items={panel.contextItems}\n onRemove={removeContext}\n className=\"px-0 py-0\"\n {...(contextTypeConfig ? { typeConfig: contextTypeConfig } : {})}\n />\n </div>\n )}\n <div className=\"min-h-0 flex-1\">\n {threadSetup.blocked ? (\n <ChatThreadSetupStatus setup={threadSetup} />\n ) : (\n <Chat\n key={panel.threadId ?? `new-${panel.id}`}\n {...chat}\n {...(resolvedModels.length\n ? { models: resolvedModels, modelsApi: null }\n : {})}\n runtime={runtime}\n {...(runtimeFamilies ? { runtimeFamilies } : {})}\n permissionMode={permissionMode}\n onRuntimeChange={handleRuntimeChange}\n onModelChange={handleModelChange}\n onReasoningEffortChange={handleReasoningEffortChange}\n budget={budget}\n onUsage={handleUsage}\n runtimeLocked={runtimeLocked}\n onMessageCountChange={handleMessageCountChange}\n onSessionHydrated={handleSessionHydrated}\n {...(panel.threadId ? { threadId: panel.threadId } : {})}\n sessionsApi={sessionsApi}\n tools={resolvedTools}\n {...(toolRenderers ? { toolRenderers } : {})}\n body={mergedBody}\n initialPrompt={initialPrompt}\n onInitialPromptSent={handleInitialPromptSent}\n />\n )}\n </div>\n </div>\n );\n\n const outerClass = cn(\n \"fixed pointer-events-none\",\n panel.maximized ? \"inset-4 chat-maximized\" : \"inset-0\",\n );\n\n // Until react-rnd loads (and as a graceful fallback if it never does) the\n // window is statically positioned — still usable, just not draggable.\n if (!Rnd) {\n return (\n <div className={outerClass} style={{ zIndex: panel.zIndex }}>\n <div\n className=\"pointer-events-auto h-full\"\n style={\n panel.maximized\n ? { position: \"relative\", width: \"100%\", height: \"100%\" }\n : {\n position: \"absolute\",\n left: panel.x,\n top: panel.y,\n width: panel.width,\n height: panel.height,\n }\n }\n >\n {frame}\n </div>\n </div>\n );\n }\n\n return (\n <div className={outerClass} style={{ zIndex: panel.zIndex }}>\n <style>{MAXIMIZE_CSS}</style>\n <Rnd\n default={{\n x: panel.x,\n y: panel.y,\n width: panel.width,\n height: panel.height,\n }}\n style={{ pointerEvents: \"auto\" }}\n minWidth={360}\n minHeight={400}\n bounds=\"parent\"\n dragHandleClassName=\"chat-drag-handle\"\n disableDragging={panel.maximized}\n enableResizing={!panel.maximized}\n onDragStart={() => bringToFront(panel.id)}\n onDragStop={(_e, d) => updatePanel(panel.id, { x: d.x, y: d.y })}\n onResizeStop={(_e, _dir, ref, _delta, pos) =>\n updatePanel(panel.id, {\n width: ref.offsetWidth,\n height: ref.offsetHeight,\n x: pos.x,\n y: pos.y,\n })\n }\n >\n {frame}\n </Rnd>\n </div>\n );\n}\n\n/** Renders every open window for the current {@link useChatWindowManager}.\n * Drop one of these near the root alongside a <ChatFab/>. */\nexport function ChatWindowLayer(props: Omit<ChatWindowProps, \"panel\">) {\n const { panels } = useChatWindowManager();\n return (\n <>\n {panels.map((panel) => (\n <ChatWindow key={panel.id} panel={panel} {...props} />\n ))}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAkDA,MAAM,cAA0B,CAAA;AAEhC,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAad,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,GAAoB;AAClB,QAAM,EAAE,aAAa,YAAY,cAAc,eAAe,UAAA,IAC5D,qBAAA;AACF,QAAM,cAAc,mBAAmB;AAAA,IACrC,UAAU,MAAM;AAAA,IAChB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,WAAW,CAAC,aAAa,YAAY,MAAM,IAAI,EAAE,UAAU;AAAA,EAAA,CAC5D;AACD,QAAM,CAAC,KAAK,MAAM,IAAI,SAAyC,IAAI;AACnE,QAAM,CAAC,WAAW,IAAI;AAAA,IAAgC,MACpD,oBAAA;AAAA,EAAoB;AAEtB,QAAM,CAAC,QAAQ,SAAS,IAAI;AAAA,KAC1B,6BAAM,WAAU,YAAY,UAAU,CAAA;AAAA,EAAC;AAEzC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI;AAAA,KAC1C,6BAAM,mBAAkB,YAAY,kBAAkB;AAAA,EAAA;AAExD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAkC,IAAI;AAChE,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAIlD,QAAM,CAAC,eAAe,gBAAgB,IAAI;AAAA,IACxC,YAAY,aAAa,CAAA;AAAA,EAAC;AAE5B,QAAM,CAAC,cAAc,eAAe,IAAI;AAAA,IACtC;AAAA,EAAA;AAEF,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,CAAC,YAAY,aAAa,IAAI,SAAwB,IAAI;AAChE,QAAM,gBAAgB,SAAS,gBAAgB;AAC/C,QAAM,aACJ,6BAAM,eAAc,SAAY,qBAAqB,KAAK;AAC5D,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR;AAAA,IACA,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,EAAA,IACL,sBAAsB;AAAA,IACxB,QAAQ,6BAAM;AAAA,IACd;AAAA,IACA;AAAA,EAAA,CACD;AACD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE,qBAAqB;AAAA,IACvB;AAAA,IACA,cAAc,MAAM;AAAA,IACpB,QAAQ;AAAA,IACR,eAAe,YAAY;AAAA,EAAA,CAC5B;AACD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAClD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,gBAAgB,gBAAgB,eAAe;AACrD,QAAM,sBAAsB,OAAO,OAAO;AAC1C,QAAM,cAAc,OAAO,MAAM,QAAQ;AACzC,cAAY,UAAU,MAAM;AAE5B,YAAU,MAAM;AACd,QAAI,CAAC,cAAe,qBAAoB,UAAU;AAAA,EACpD,GAAG,CAAC,SAAS,aAAa,CAAC;AAE3B,YAAU,MAAM;AACd,oBAAgB,CAAC;AACjB,oBAAgB,KAAK;AACrB,aAAS,IAAI;AACb,mBAAe,oBAAoB,OAAO;AAAA,EAC5C,GAAG,CAAC,MAAM,UAAU,cAAc,CAAC;AAEnC,YAAU,MAAM;AACd,SAAI,6BAAM,YAAW,OAAW,WAAU,KAAK,MAAM;AAAA,EACvD,GAAG,CAAC,6BAAM,MAAM,CAAC;AAEjB,YAAU,MAAM;AACd,SAAI,6BAAM,oBAAmB;AAC3B,wBAAkB,KAAK,cAAc;AAAA,EACzC,GAAG,CAAC,6BAAM,cAAc,CAAC;AAEzB,YAAU,MAAM;AACd,QAAI,SAAS,aAAa,KAAM;AAChC,QAAI,SAAS;AACb,oBAAgB,IAAI;AACpB,kBAAc,IAAI;AAClB,UAAM,QAAQ,EACX;AAAA,MAAK,CAAC,MACL,EAAE,KAAK,EAAE,KAAA,IAAS,QAAQ,OAAO,IAAI,MAAM,SAAS,EAAE,MAAM,EAAE,CAAC;AAAA,IAAA,EAEhE,KAAK,CAAC,SAAS;AACd,UAAI,CAAC,OAAQ;AACb,sBAAgB,qBAAqB,IAAI,CAAC;AAAA,IAC5C,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,UAAI,CAAC,OAAQ;AACb,oBAAc,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IAChE,CAAC,EACA,QAAQ,MAAM;AACb,UAAI,wBAAwB,KAAK;AAAA,IACnC,CAAC;AACH,WAAO,MAAM;AACX,eAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,YAAU,MAAM;AACd,wBAAoB;AAAA,MAClB,SAAS,gBAAgB,oBAAoB,UAAU;AAAA,MACvD,GAAI,OAAO,SAAS,UAAa,OAAO,cAAc,SAClD,EAAE,OAAA,IACF,CAAA;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,IAAA,CACZ;AAAA,EACH,GAAG,CAAC,QAAQ,gBAAgB,SAAS,eAAe,aAAa,CAAC;AAElE,QAAM,YAAY;AAAA,IAChB,MACE,sBAAsB;AAAA,MACpB,OAAO;AAAA,MACP,eAAe,MAAM;AAAA,MACrB,WAAW;AAAA,MACX,UAAU;AAAA,IAAA,CACX;AAAA,IACH,CAAC,mBAAmB,MAAM,YAAY,eAAe,aAAa;AAAA,EAAA;AAKpE,QAAM,iBAAiB,YAAY,CAAC,SAAyB;AAC3D,qBAAiB,CAAC,SAAS,aAAa,MAAM,IAAI,CAAC;AAAA,EACrD,GAAG,CAAA,CAAE;AAEL,YAAU,MAAM;AACd,QAAI,SAAS;AACb,WAAO,WAAW,EAAE,KAAK,CAAC,MAAM;AAC9B,UAAI,OAAQ,QAAO,MAAM,EAAE,GAAyC;AAAA,IACtE,CAAC;AACD,WAAO,MAAM;AACX,eAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM,gBAAgB;AAAA,IACpB,CAAC,OACC,YAAY,MAAM,IAAI;AAAA,MACpB,cAAc,MAAM,aAAa,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,IAAA,CAC3D;AAAA,IACH,CAAC,aAAa,MAAM,IAAI,MAAM,YAAY;AAAA,EAAA;AAG5C,QAAM,kBAAkB;AAAA,IACtB,CAAC,UACC,YAAY,MAAM,IAAI;AAAA,MACpB,cAAc;AAAA,QACZ,GAAG,MAAM;AAAA,QACT,GAAG,MAAM;AAAA,UACP,CAAC,MAAM,UACL,CAAC,MAAM,aAAa,KAAK,CAAC,aAAa,SAAS,OAAO,KAAK,EAAE,KAC9D,MAAM,UAAU,CAAC,cAAc,UAAU,OAAO,KAAK,EAAE,MACrD;AAAA,QAAA;AAAA,MACN;AAAA,IACF,CACD;AAAA,IACH,CAAC,MAAM,cAAc,MAAM,IAAI,WAAW;AAAA,EAAA;AAE5C,QAAM,aAAa;AAAA,IACjB,CAAC,SAA0B,gBAAgB,CAAC,IAAI,CAAC;AAAA,IACjD,CAAC,eAAe;AAAA,EAAA;AAGlB,QAAM,aAAa,sBAAsB;AAAA,IACvC,MAAM,6BAAM;AAAA,IACZ,cAAc,MAAM;AAAA,IACpB,OAAO;AAAA,IACP,eAAe,MAAM;AAAA,IACrB,YAAY;AAAA,EAAA,CACb;AAED,QAAM,gBAAgB,MAAM,kBAAiB,6BAAM,kBAAiB;AACpE,QAAM,0BAA0B,YAAY,MAAM;;AAChD,QAAI,MAAM,cAAe,aAAY,MAAM,IAAI,EAAE,eAAe,MAAM;AACtE,uCAAM,wBAAN;AAAA,EACF,GAAG,CAAC,MAAM,MAAM,IAAI,MAAM,eAAe,WAAW,CAAC;AACrD,QAAM,cAAc;AAAA,IAClB,CAAC,aAA+B;;AAC9B,eAAS,QAAQ;AAGjB,sBAAgB,CAAC,UAAU,QAAQ,CAAC;AACpC,yCAAM,YAAN,8BAAgB;AAAA,IAClB;AAAA,IACA,CAAC,IAAI;AAAA,EAAA;AAEP,QAAM,6BAA6B;AAAA,IACjC,CAAC,SAA+B;;AAC9B,wBAAkB,IAAI;AACtB,yCAAM,2BAAN,8BAA+B;AAAA,IACjC;AAAA,IACA,CAAC,IAAI;AAAA,EAAA;AAEP,QAAM,wBAAwB;AAAA,IAC5B,CAAC,YAAgC;;AAC/B,UAAI,QAAQ,OAAO,MAAM,SAAU;AAKnC,sBAAgB,UAAQ,aAAQ,YAAR,mBAAiB,UAAS,QAAQ,QAAQ,IAAI,CAAC;AACvE,YAAI,aAAQ,YAAR,mBAAiB,UAAS,QAAQ,QAAQ,MAAM;AAClD,+BAAuB,QAAQ,OAAO;AAAA,MACxC;AACA,yCAAM,sBAAN,8BAA0B;AAAA,IAC5B;AAAA,IACA,CAAC,MAAM,MAAM,UAAU,sBAAsB;AAAA,EAAA;AAE/C,QAAM,2BAA2B;AAAA,IAC/B,CAAC,UAAkB;;AACjB,sBAAgB,KAAK;AACrB,yCAAM,yBAAN,8BAA6B;AAAA,IAC/B;AAAA,IACA,CAAC,IAAI;AAAA,EAAA;AAEP,QAAM,aAAa,YAAY,YAAY;AACzC,QAAI,CAAC,eAAe,CAAC,MAAM,YAAY,iBAAiB,KAAK;AAC3D;AACF,UAAM,iBAAiB,MAAM;AAC7B,eAAW,IAAI;AACf,QAAI;AACF,YAAM,OAAO,MAAM,gBAAgB,aAAa,cAAc;AAC9D,UAAI,YAAY,YAAY,eAAgB;AAC5C,gBAAU,EAAE,UAAU,KAAK,GAAA,CAAI;AAAA,IACjC,SAAS,OAAO;AACd,cAAQ,KAAK,0CAA0C,KAAK;AAAA,IAC9D,UAAA;AACE,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,SAAS,cAAc,WAAW,MAAM,UAAU,WAAW,CAAC;AAElE,QAAM,SACJ,qBAAC,OAAA,EAAI,WAAU,uGACZ,UAAA;AAAA,IAAA,iBAAiB,QAAQ,gBAAgB,OACxC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAU,MAAM;AAAA,QAChB,UAAU,CAAC,QAAQ,YAAY,MAAM,IAAI,EAAE,UAAU,KAAK;AAAA,QAC1D,OAAO,MAAM,YAAY,MAAM,IAAI,EAAE,UAAU,MAAM;AAAA,QACrD,cAAc;AAAA,QACb,GAAI,gBACD,EAAE,QAAQ,cAAA,IACV,gBAAgB,OACd,EAAE,KAAK,gBACP,CAAA;AAAA,MAAC;AAAA,IAAA,IAGT,oBAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA,OAAM;AAAA,IAEpD,oBAAC,OAAA,EAAI,WAAU,SAAA,CAAS;AAAA,IACvB;AAAA,IACD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR;AAAA,QACA,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA,wBAAwB;AAAA,QACxB;AAAA,QACA,qBAAqB;AAAA,QACrB;AAAA,QACA,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA,QACC,GAAI,cAAc,EAAE,UAAU,YAAA,IAAgB,CAAA;AAAA,QAC9C,GAAI,MAAM,WAAW,EAAE,UAAU,MAAM,SAAA,IAAa,CAAA;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjB,eACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,OACE,iBAAiB,IACb,oDACA;AAAA,QAEN,UAAU,CAAC,MAAM,YAAY,iBAAiB,KAAK;AAAA,QACnD,SAAS,MAAM,KAAK,WAAA;AAAA,QAEpB,UAAA,oBAAC,MAAA,EAAK,MAAM,aAAa,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAGhD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,OAAM;AAAA,QACN,SAAS,MAAM,UAAA;AAAA,QAEf,UAAA,oBAAC,MAAA,EAAK,MAAM,OAAO,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAExC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,OAAO,MAAM,YAAY,YAAY;AAAA,QACrC,SAAS,MAAM,cAAc,MAAM,EAAE;AAAA,QAErC,UAAA,oBAAC,MAAA,EAAK,MAAM,cAAc,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAE/C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,OAAM;AAAA,QACN,SAAS,MAAM,WAAW,MAAM,EAAE;AAAA,QAElC,UAAA,oBAAC,MAAA,EAAK,MAAM,SAAS,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAC1C,GACF;AAGF,QAAM,QACJ,qBAAC,OAAA,EAAI,WAAU,gGACZ,UAAA;AAAA,IAAA;AAAA,KACC,uBAAuB,MAAM,aAAa,SAAS,MACnD,qBAAC,OAAA,EAAI,WAAU,0EACZ,UAAA;AAAA,MAAA,2DAAsB;AAAA,QACrB,OAAO,MAAM;AAAA,QACb,OAAO;AAAA,QACP,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,MAAM;AAAA,UACb,UAAU;AAAA,UACV,WAAU;AAAA,UACT,GAAI,oBAAoB,EAAE,YAAY,sBAAsB,CAAA;AAAA,QAAC;AAAA,MAAA;AAAA,IAChE,GACF;AAAA,IAEF,oBAAC,OAAA,EAAI,WAAU,kBACZ,UAAA,YAAY,UACX,oBAAC,uBAAA,EAAsB,OAAO,YAAA,CAAa,IAE3C;AAAA,MAAC;AAAA,MAAA;AAAA,QAEE,GAAG;AAAA,QACH,GAAI,eAAe,SAChB,EAAE,QAAQ,gBAAgB,WAAW,KAAA,IACrC,CAAA;AAAA,QACJ;AAAA,QACC,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,QAC7C;AAAA,QACA,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,yBAAyB;AAAA,QACzB;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,sBAAsB;AAAA,QACtB,mBAAmB;AAAA,QAClB,GAAI,MAAM,WAAW,EAAE,UAAU,MAAM,SAAA,IAAa,CAAA;AAAA,QACrD;AAAA,QACA,OAAO;AAAA,QACN,GAAI,gBAAgB,EAAE,cAAA,IAAkB,CAAA;AAAA,QACzC,MAAM;AAAA,QACN;AAAA,QACA,qBAAqB;AAAA,MAAA;AAAA,MAtBhB,MAAM,YAAY,OAAO,MAAM,EAAE;AAAA,IAAA,EAuBxC,CAEJ;AAAA,EAAA,GACF;AAGF,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,MAAM,YAAY,2BAA2B;AAAA,EAAA;AAK/C,MAAI,CAAC,KAAK;AACR,WACE,oBAAC,SAAI,WAAW,YAAY,OAAO,EAAE,QAAQ,MAAM,OAAA,GACjD,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OACE,MAAM,YACF,EAAE,UAAU,YAAY,OAAO,QAAQ,QAAQ,WAC/C;AAAA,UACE,UAAU;AAAA,UACV,MAAM,MAAM;AAAA,UACZ,KAAK,MAAM;AAAA,UACX,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM;AAAA,QAAA;AAAA,QAIrB,UAAA;AAAA,MAAA;AAAA,IAAA,GAEL;AAAA,EAEJ;AAEA,SACE,qBAAC,SAAI,WAAW,YAAY,OAAO,EAAE,QAAQ,MAAM,OAAA,GACjD,UAAA;AAAA,IAAA,oBAAC,WAAO,UAAA,aAAA,CAAa;AAAA,IACrB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,UACP,GAAG,MAAM;AAAA,UACT,GAAG,MAAM;AAAA,UACT,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM;AAAA,QAAA;AAAA,QAEhB,OAAO,EAAE,eAAe,OAAA;AAAA,QACxB,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAO;AAAA,QACP,qBAAoB;AAAA,QACpB,iBAAiB,MAAM;AAAA,QACvB,gBAAgB,CAAC,MAAM;AAAA,QACvB,aAAa,MAAM,aAAa,MAAM,EAAE;AAAA,QACxC,YAAY,CAAC,IAAI,MAAM,YAAY,MAAM,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG;AAAA,QAC/D,cAAc,CAAC,IAAI,MAAM,KAAK,QAAQ,QACpC,YAAY,MAAM,IAAI;AAAA,UACpB,OAAO,IAAI;AAAA,UACX,QAAQ,IAAI;AAAA,UACZ,GAAG,IAAI;AAAA,UACP,GAAG,IAAI;AAAA,QAAA,CACR;AAAA,QAGF,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;AAIO,SAAS,gBAAgB,OAAuC;AACrE,QAAM,EAAE,OAAA,IAAW,qBAAA;AACnB,SACE,oBAAA,UAAA,EACG,UAAA,OAAO,IAAI,CAAC,UACX,oBAAC,YAAA,EAA0B,OAAe,GAAG,MAAA,GAA5B,MAAM,EAA6B,CACrD,GACH;AAEJ;"}
@@ -108,9 +108,8 @@ function useChatWindowRuntime({
108
108
  delete next.id;
109
109
  delete next.mode;
110
110
  delete next.model;
111
- delete next.backend;
112
111
  if (identity.model) next.model = identity.model;
113
- if (identity.backend) next.backend = identity.backend;
112
+ if (identity.mode) next.mode = identity.mode;
114
113
  return next;
115
114
  });
116
115
  }, []);
@@ -1 +1 @@
1
- {"version":3,"file":"ChatWindow.runtime.cjs","sources":["../../../src/data/ai/ChatWindow.runtime.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport type { ChatProps } from \"../chat/Chat\";\nimport {\n resolveChatRuntime,\n selectedChatModel,\n withRuntimeField,\n} from \"../chat/Chat.runtime\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { selectConfiguredChatModel } from \"./ChatWindow.models\";\n\nexport type ChatWindowRuntimeOptions = {\n chat?: Partial<ChatProps> | undefined;\n initialModel?: string | null | undefined;\n models: ChatModel[];\n storedRuntime?: ChatModelRuntime | undefined;\n};\n\nexport function useChatWindowRuntime({\n chat,\n initialModel,\n models,\n storedRuntime,\n}: ChatWindowRuntimeOptions) {\n const reasoningEfforts = chat?.reasoningEfforts ?? DEFAULT_REASONING_EFFORTS;\n const [runtime, setRuntime] = useState<ChatModelRuntime>(() =>\n resolveChatRuntime({\n models,\n current: chat?.runtime ?? chat?.defaultRuntime ?? storedRuntime,\n preferredModel:\n initialModel ??\n chat?.model ??\n (chat?.runtime || chat?.defaultRuntime || storedRuntime\n ? undefined\n : chat?.defaultModel),\n effort: chat?.reasoningEffort ?? chat?.defaultReasoningEffort,\n temperature: chat?.temperature,\n reasoningEfforts,\n }),\n );\n\n useEffect(() => {\n if (chat?.runtime) {\n setRuntime(chat.runtime);\n return;\n }\n setRuntime((current) => {\n const currentModel = selectedChatModel(models, current)?.id;\n const preferred =\n initialModel ??\n chat?.model ??\n currentModel ??\n current.id ??\n current.model ??\n chat?.defaultModel;\n const configured = models.length\n ? selectConfiguredChatModel(preferred, models)\n : preferred;\n return resolveChatRuntime({\n models,\n current,\n preferredModel: configured,\n effort: chat?.reasoningEffort,\n temperature: chat?.temperature,\n reasoningEfforts,\n });\n });\n }, [\n chat?.defaultModel,\n chat?.model,\n chat?.reasoningEffort,\n chat?.runtime,\n chat?.temperature,\n initialModel,\n models,\n reasoningEfforts,\n ]);\n\n const selectedModel = selectedChatModel(models, runtime);\n const model = selectedModel?.id ?? runtime.id ?? runtime.model;\n const reasoningEffort = runtime.effort ?? \"\";\n\n const handleRuntimeChange = useCallback(\n (next: ChatModelRuntime) => {\n setRuntime(next);\n chat?.onRuntimeChange?.(next);\n },\n [chat],\n );\n const handleModelChange = useCallback(\n (next: string) => {\n setRuntime((current) => {\n if (!next) {\n return withRuntimeField(\n withRuntimeField(current, \"id\", undefined),\n \"model\",\n undefined,\n );\n }\n const selected = models.find((candidate) => candidate.id === next);\n if (!selected) {\n return withRuntimeField(\n withRuntimeField(current, \"id\", undefined),\n \"model\",\n next,\n );\n }\n return resolveChatRuntime({\n models,\n current,\n preferredModel: selected.id,\n reasoningEfforts,\n });\n });\n chat?.onModelChange?.(next);\n },\n [chat, models, reasoningEfforts],\n );\n const handleReasoningEffortChange = useCallback(\n (next: string) => {\n setRuntime((current) => withRuntimeField(current, \"effort\", next));\n chat?.onReasoningEffortChange?.(next);\n },\n [chat],\n );\n const handleTemperatureChange = useCallback((next: number | undefined) => {\n setRuntime((current) => withRuntimeField(current, \"temperature\", next));\n }, []);\n const replaceRuntimeIdentity = useCallback((identity: ChatModelRuntime) => {\n setRuntime((current) => {\n const next: ChatModelRuntime = { ...current };\n delete next.id;\n delete next.mode;\n delete next.model;\n delete next.backend;\n if (identity.model) next.model = identity.model;\n if (identity.backend) next.backend = identity.backend;\n return next;\n });\n }, []);\n const replaceRuntime = useCallback((next: ChatModelRuntime) => {\n setRuntime(next);\n }, []);\n\n return {\n runtime,\n model,\n reasoningEffort,\n temperature: runtime.temperature,\n reasoningEfforts,\n handleRuntimeChange,\n handleModelChange,\n handleReasoningEffortChange,\n handleTemperatureChange,\n replaceRuntimeIdentity,\n replaceRuntime,\n };\n}\n"],"names":["DEFAULT_REASONING_EFFORTS","useState","resolveChatRuntime","useEffect","selectedChatModel","selectConfiguredChatModel","useCallback","withRuntimeField"],"mappings":"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"}
1
+ {"version":3,"file":"ChatWindow.runtime.cjs","sources":["../../../src/data/ai/ChatWindow.runtime.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport type { ChatProps } from \"../chat/Chat\";\nimport {\n resolveChatRuntime,\n selectedChatModel,\n withRuntimeField,\n} from \"../chat/Chat.runtime\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { selectConfiguredChatModel } from \"./ChatWindow.models\";\n\nexport type ChatWindowRuntimeOptions = {\n chat?: Partial<ChatProps> | undefined;\n initialModel?: string | null | undefined;\n models: ChatModel[];\n storedRuntime?: ChatModelRuntime | undefined;\n};\n\nexport function useChatWindowRuntime({\n chat,\n initialModel,\n models,\n storedRuntime,\n}: ChatWindowRuntimeOptions) {\n const reasoningEfforts = chat?.reasoningEfforts ?? DEFAULT_REASONING_EFFORTS;\n const [runtime, setRuntime] = useState<ChatModelRuntime>(() =>\n resolveChatRuntime({\n models,\n current: chat?.runtime ?? chat?.defaultRuntime ?? storedRuntime,\n preferredModel:\n initialModel ??\n chat?.model ??\n (chat?.runtime || chat?.defaultRuntime || storedRuntime\n ? undefined\n : chat?.defaultModel),\n effort: chat?.reasoningEffort ?? chat?.defaultReasoningEffort,\n temperature: chat?.temperature,\n reasoningEfforts,\n }),\n );\n\n useEffect(() => {\n if (chat?.runtime) {\n setRuntime(chat.runtime);\n return;\n }\n setRuntime((current) => {\n const currentModel = selectedChatModel(models, current)?.id;\n const preferred =\n initialModel ??\n chat?.model ??\n currentModel ??\n current.id ??\n current.model ??\n chat?.defaultModel;\n const configured = models.length\n ? selectConfiguredChatModel(preferred, models)\n : preferred;\n return resolveChatRuntime({\n models,\n current,\n preferredModel: configured,\n effort: chat?.reasoningEffort,\n temperature: chat?.temperature,\n reasoningEfforts,\n });\n });\n }, [\n chat?.defaultModel,\n chat?.model,\n chat?.reasoningEffort,\n chat?.runtime,\n chat?.temperature,\n initialModel,\n models,\n reasoningEfforts,\n ]);\n\n const selectedModel = selectedChatModel(models, runtime);\n const model = selectedModel?.id ?? runtime.id ?? runtime.model;\n const reasoningEffort = runtime.effort ?? \"\";\n\n const handleRuntimeChange = useCallback(\n (next: ChatModelRuntime) => {\n setRuntime(next);\n chat?.onRuntimeChange?.(next);\n },\n [chat],\n );\n const handleModelChange = useCallback(\n (next: string) => {\n setRuntime((current) => {\n if (!next) {\n return withRuntimeField(\n withRuntimeField(current, \"id\", undefined),\n \"model\",\n undefined,\n );\n }\n const selected = models.find((candidate) => candidate.id === next);\n if (!selected) {\n return withRuntimeField(\n withRuntimeField(current, \"id\", undefined),\n \"model\",\n next,\n );\n }\n return resolveChatRuntime({\n models,\n current,\n preferredModel: selected.id,\n reasoningEfforts,\n });\n });\n chat?.onModelChange?.(next);\n },\n [chat, models, reasoningEfforts],\n );\n const handleReasoningEffortChange = useCallback(\n (next: string) => {\n setRuntime((current) => withRuntimeField(current, \"effort\", next));\n chat?.onReasoningEffortChange?.(next);\n },\n [chat],\n );\n const handleTemperatureChange = useCallback((next: number | undefined) => {\n setRuntime((current) => withRuntimeField(current, \"temperature\", next));\n }, []);\n const replaceRuntimeIdentity = useCallback((identity: ChatModelRuntime) => {\n setRuntime((current) => {\n const next: ChatModelRuntime = { ...current };\n delete next.id;\n delete next.mode;\n delete next.model;\n if (identity.model) next.model = identity.model;\n if (identity.mode) next.mode = identity.mode;\n return next;\n });\n }, []);\n const replaceRuntime = useCallback((next: ChatModelRuntime) => {\n setRuntime(next);\n }, []);\n\n return {\n runtime,\n model,\n reasoningEffort,\n temperature: runtime.temperature,\n reasoningEfforts,\n handleRuntimeChange,\n handleModelChange,\n handleReasoningEffortChange,\n handleTemperatureChange,\n replaceRuntimeIdentity,\n replaceRuntime,\n };\n}\n"],"names":["DEFAULT_REASONING_EFFORTS","useState","resolveChatRuntime","useEffect","selectedChatModel","selectConfiguredChatModel","useCallback","withRuntimeField"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatWindow.runtime.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindow.runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjE,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,aAAa,GACd,EAAE,wBAAwB;;;;;;gCA4DhB,gBAAgB;8BAOhB,MAAM;wCA6BN,MAAM;oCAMoC,MAAM,GAAG,SAAS;uCAGf,gBAAgB;2BAY5B,gBAAgB;EAiB3D"}
1
+ {"version":3,"file":"ChatWindow.runtime.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindow.runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjE,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,aAAa,GACd,EAAE,wBAAwB;;;;;;gCA4DhB,gBAAgB;8BAOhB,MAAM;wCA6BN,MAAM;oCAMoC,MAAM,GAAG,SAAS;uCAGf,gBAAgB;2BAW5B,gBAAgB;EAiB3D"}
@@ -106,9 +106,8 @@ function useChatWindowRuntime({
106
106
  delete next.id;
107
107
  delete next.mode;
108
108
  delete next.model;
109
- delete next.backend;
110
109
  if (identity.model) next.model = identity.model;
111
- if (identity.backend) next.backend = identity.backend;
110
+ if (identity.mode) next.mode = identity.mode;
112
111
  return next;
113
112
  });
114
113
  }, []);
@@ -1 +1 @@
1
- {"version":3,"file":"ChatWindow.runtime.js","sources":["../../../src/data/ai/ChatWindow.runtime.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport type { ChatProps } from \"../chat/Chat\";\nimport {\n resolveChatRuntime,\n selectedChatModel,\n withRuntimeField,\n} from \"../chat/Chat.runtime\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { selectConfiguredChatModel } from \"./ChatWindow.models\";\n\nexport type ChatWindowRuntimeOptions = {\n chat?: Partial<ChatProps> | undefined;\n initialModel?: string | null | undefined;\n models: ChatModel[];\n storedRuntime?: ChatModelRuntime | undefined;\n};\n\nexport function useChatWindowRuntime({\n chat,\n initialModel,\n models,\n storedRuntime,\n}: ChatWindowRuntimeOptions) {\n const reasoningEfforts = chat?.reasoningEfforts ?? DEFAULT_REASONING_EFFORTS;\n const [runtime, setRuntime] = useState<ChatModelRuntime>(() =>\n resolveChatRuntime({\n models,\n current: chat?.runtime ?? chat?.defaultRuntime ?? storedRuntime,\n preferredModel:\n initialModel ??\n chat?.model ??\n (chat?.runtime || chat?.defaultRuntime || storedRuntime\n ? undefined\n : chat?.defaultModel),\n effort: chat?.reasoningEffort ?? chat?.defaultReasoningEffort,\n temperature: chat?.temperature,\n reasoningEfforts,\n }),\n );\n\n useEffect(() => {\n if (chat?.runtime) {\n setRuntime(chat.runtime);\n return;\n }\n setRuntime((current) => {\n const currentModel = selectedChatModel(models, current)?.id;\n const preferred =\n initialModel ??\n chat?.model ??\n currentModel ??\n current.id ??\n current.model ??\n chat?.defaultModel;\n const configured = models.length\n ? selectConfiguredChatModel(preferred, models)\n : preferred;\n return resolveChatRuntime({\n models,\n current,\n preferredModel: configured,\n effort: chat?.reasoningEffort,\n temperature: chat?.temperature,\n reasoningEfforts,\n });\n });\n }, [\n chat?.defaultModel,\n chat?.model,\n chat?.reasoningEffort,\n chat?.runtime,\n chat?.temperature,\n initialModel,\n models,\n reasoningEfforts,\n ]);\n\n const selectedModel = selectedChatModel(models, runtime);\n const model = selectedModel?.id ?? runtime.id ?? runtime.model;\n const reasoningEffort = runtime.effort ?? \"\";\n\n const handleRuntimeChange = useCallback(\n (next: ChatModelRuntime) => {\n setRuntime(next);\n chat?.onRuntimeChange?.(next);\n },\n [chat],\n );\n const handleModelChange = useCallback(\n (next: string) => {\n setRuntime((current) => {\n if (!next) {\n return withRuntimeField(\n withRuntimeField(current, \"id\", undefined),\n \"model\",\n undefined,\n );\n }\n const selected = models.find((candidate) => candidate.id === next);\n if (!selected) {\n return withRuntimeField(\n withRuntimeField(current, \"id\", undefined),\n \"model\",\n next,\n );\n }\n return resolveChatRuntime({\n models,\n current,\n preferredModel: selected.id,\n reasoningEfforts,\n });\n });\n chat?.onModelChange?.(next);\n },\n [chat, models, reasoningEfforts],\n );\n const handleReasoningEffortChange = useCallback(\n (next: string) => {\n setRuntime((current) => withRuntimeField(current, \"effort\", next));\n chat?.onReasoningEffortChange?.(next);\n },\n [chat],\n );\n const handleTemperatureChange = useCallback((next: number | undefined) => {\n setRuntime((current) => withRuntimeField(current, \"temperature\", next));\n }, []);\n const replaceRuntimeIdentity = useCallback((identity: ChatModelRuntime) => {\n setRuntime((current) => {\n const next: ChatModelRuntime = { ...current };\n delete next.id;\n delete next.mode;\n delete next.model;\n delete next.backend;\n if (identity.model) next.model = identity.model;\n if (identity.backend) next.backend = identity.backend;\n return next;\n });\n }, []);\n const replaceRuntime = useCallback((next: ChatModelRuntime) => {\n setRuntime(next);\n }, []);\n\n return {\n runtime,\n model,\n reasoningEffort,\n temperature: runtime.temperature,\n reasoningEfforts,\n handleRuntimeChange,\n handleModelChange,\n handleReasoningEffortChange,\n handleTemperatureChange,\n replaceRuntimeIdentity,\n replaceRuntime,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatWindow.runtime.js","sources":["../../../src/data/ai/ChatWindow.runtime.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport type { ChatProps } from \"../chat/Chat\";\nimport {\n resolveChatRuntime,\n selectedChatModel,\n withRuntimeField,\n} from \"../chat/Chat.runtime\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { selectConfiguredChatModel } from \"./ChatWindow.models\";\n\nexport type ChatWindowRuntimeOptions = {\n chat?: Partial<ChatProps> | undefined;\n initialModel?: string | null | undefined;\n models: ChatModel[];\n storedRuntime?: ChatModelRuntime | undefined;\n};\n\nexport function useChatWindowRuntime({\n chat,\n initialModel,\n models,\n storedRuntime,\n}: ChatWindowRuntimeOptions) {\n const reasoningEfforts = chat?.reasoningEfforts ?? DEFAULT_REASONING_EFFORTS;\n const [runtime, setRuntime] = useState<ChatModelRuntime>(() =>\n resolveChatRuntime({\n models,\n current: chat?.runtime ?? chat?.defaultRuntime ?? storedRuntime,\n preferredModel:\n initialModel ??\n chat?.model ??\n (chat?.runtime || chat?.defaultRuntime || storedRuntime\n ? undefined\n : chat?.defaultModel),\n effort: chat?.reasoningEffort ?? chat?.defaultReasoningEffort,\n temperature: chat?.temperature,\n reasoningEfforts,\n }),\n );\n\n useEffect(() => {\n if (chat?.runtime) {\n setRuntime(chat.runtime);\n return;\n }\n setRuntime((current) => {\n const currentModel = selectedChatModel(models, current)?.id;\n const preferred =\n initialModel ??\n chat?.model ??\n currentModel ??\n current.id ??\n current.model ??\n chat?.defaultModel;\n const configured = models.length\n ? selectConfiguredChatModel(preferred, models)\n : preferred;\n return resolveChatRuntime({\n models,\n current,\n preferredModel: configured,\n effort: chat?.reasoningEffort,\n temperature: chat?.temperature,\n reasoningEfforts,\n });\n });\n }, [\n chat?.defaultModel,\n chat?.model,\n chat?.reasoningEffort,\n chat?.runtime,\n chat?.temperature,\n initialModel,\n models,\n reasoningEfforts,\n ]);\n\n const selectedModel = selectedChatModel(models, runtime);\n const model = selectedModel?.id ?? runtime.id ?? runtime.model;\n const reasoningEffort = runtime.effort ?? \"\";\n\n const handleRuntimeChange = useCallback(\n (next: ChatModelRuntime) => {\n setRuntime(next);\n chat?.onRuntimeChange?.(next);\n },\n [chat],\n );\n const handleModelChange = useCallback(\n (next: string) => {\n setRuntime((current) => {\n if (!next) {\n return withRuntimeField(\n withRuntimeField(current, \"id\", undefined),\n \"model\",\n undefined,\n );\n }\n const selected = models.find((candidate) => candidate.id === next);\n if (!selected) {\n return withRuntimeField(\n withRuntimeField(current, \"id\", undefined),\n \"model\",\n next,\n );\n }\n return resolveChatRuntime({\n models,\n current,\n preferredModel: selected.id,\n reasoningEfforts,\n });\n });\n chat?.onModelChange?.(next);\n },\n [chat, models, reasoningEfforts],\n );\n const handleReasoningEffortChange = useCallback(\n (next: string) => {\n setRuntime((current) => withRuntimeField(current, \"effort\", next));\n chat?.onReasoningEffortChange?.(next);\n },\n [chat],\n );\n const handleTemperatureChange = useCallback((next: number | undefined) => {\n setRuntime((current) => withRuntimeField(current, \"temperature\", next));\n }, []);\n const replaceRuntimeIdentity = useCallback((identity: ChatModelRuntime) => {\n setRuntime((current) => {\n const next: ChatModelRuntime = { ...current };\n delete next.id;\n delete next.mode;\n delete next.model;\n if (identity.model) next.model = identity.model;\n if (identity.mode) next.mode = identity.mode;\n return next;\n });\n }, []);\n const replaceRuntime = useCallback((next: ChatModelRuntime) => {\n setRuntime(next);\n }, []);\n\n return {\n runtime,\n model,\n reasoningEffort,\n temperature: runtime.temperature,\n reasoningEfforts,\n handleRuntimeChange,\n handleModelChange,\n handleReasoningEffortChange,\n handleTemperatureChange,\n replaceRuntimeIdentity,\n replaceRuntime,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const utils = require("../../../lib/utils.cjs");
6
+ const Badge = require("../../Badge.cjs");
7
+ const DataTable = require("../../DataTable.cjs");
8
+ const promptCatalogModel = require("./prompt-catalog-model.cjs");
9
+ const PromptSourceBadge = require("./PromptSourceBadge.cjs");
10
+ function toRow(entry) {
11
+ return {
12
+ id: entry.id,
13
+ entry,
14
+ title: entry.title,
15
+ owner: entry.owner,
16
+ usedBy: (entry.usedBy ?? []).join(", "),
17
+ source: promptCatalogModel.sourceLabel(entry.source),
18
+ model: entry.effective.model ?? "",
19
+ overrides: promptCatalogModel.provenanceSummary(entry),
20
+ variables: (entry.variables ?? []).join(", "),
21
+ version: entry.version ?? ""
22
+ };
23
+ }
24
+ function Chips({ values }) {
25
+ if (values.length === 0)
26
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "—" });
27
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1", children: values.map((value) => /* @__PURE__ */ jsxRuntime.jsx(
28
+ Badge.Badge,
29
+ {
30
+ variant: "soft",
31
+ tone: "neutral",
32
+ size: "xs",
33
+ className: "font-mono",
34
+ clickToCopy: false,
35
+ children: value
36
+ },
37
+ value
38
+ )) });
39
+ }
40
+ function PromptCell({ entry }) {
41
+ const secondary = entry.description || promptCatalogModel.previewText(entry.body);
42
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col gap-0.5", children: [
43
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium", children: entry.title }),
44
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-mono text-xs text-muted-foreground", children: entry.id }),
45
+ secondary ? /* @__PURE__ */ jsxRuntime.jsx(
46
+ "span",
47
+ {
48
+ className: "line-clamp-1 text-xs text-muted-foreground",
49
+ title: secondary,
50
+ children: secondary
51
+ }
52
+ ) : null
53
+ ] });
54
+ }
55
+ function ModelCell({ runtime }) {
56
+ const summary = promptCatalogModel.runtimeSummary(runtime);
57
+ if (runtime.error) {
58
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-destructive", title: runtime.error, children: summary });
59
+ }
60
+ if (!runtime.model)
61
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: summary });
62
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-xs", title: `from ${runtime.modelSource}`, children: summary });
63
+ }
64
+ function catalogColumns(showOwner) {
65
+ const columns = [
66
+ {
67
+ key: "title",
68
+ label: "Prompt",
69
+ sortable: true,
70
+ grow: true,
71
+ minWidth: 240,
72
+ render: (_, row) => /* @__PURE__ */ jsxRuntime.jsx(PromptCell, { entry: row.entry })
73
+ }
74
+ ];
75
+ if (showOwner)
76
+ columns.push({
77
+ key: "owner",
78
+ label: "Owner",
79
+ sortable: true,
80
+ shrink: true
81
+ });
82
+ columns.push(
83
+ {
84
+ key: "usedBy",
85
+ label: "Used by",
86
+ minWidth: 180,
87
+ render: (_, row) => /* @__PURE__ */ jsxRuntime.jsx(Chips, { values: row.entry.usedBy ?? [] })
88
+ },
89
+ {
90
+ key: "source",
91
+ label: "Source",
92
+ sortable: true,
93
+ shrink: true,
94
+ render: (_, row) => /* @__PURE__ */ jsxRuntime.jsx(
95
+ PromptSourceBadge.PromptSourceBadge,
96
+ {
97
+ source: row.entry.source,
98
+ parseError: row.entry.parseError
99
+ }
100
+ )
101
+ },
102
+ {
103
+ key: "model",
104
+ label: "Model",
105
+ sortable: true,
106
+ minWidth: 200,
107
+ render: (_, row) => /* @__PURE__ */ jsxRuntime.jsx(ModelCell, { runtime: row.entry.effective })
108
+ },
109
+ {
110
+ key: "overrides",
111
+ label: "Overrides",
112
+ minWidth: 180,
113
+ render: (value) => value ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: String(value) }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "—" })
114
+ },
115
+ {
116
+ key: "variables",
117
+ label: "Variables",
118
+ minWidth: 160,
119
+ render: (_, row) => /* @__PURE__ */ jsxRuntime.jsx(Chips, { values: row.entry.variables ?? [] })
120
+ },
121
+ {
122
+ key: "version",
123
+ label: "Version",
124
+ shrink: true,
125
+ render: (value) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-xs text-muted-foreground", children: String(value ?? "").slice(0, 8) })
126
+ }
127
+ );
128
+ return columns;
129
+ }
130
+ function PromptCatalogTable({
131
+ entries,
132
+ loading,
133
+ error,
134
+ emptyMessage,
135
+ selectedId,
136
+ onSelect,
137
+ getRowHref,
138
+ filterState,
139
+ onFilterStateChange,
140
+ showOwner,
141
+ className
142
+ }) {
143
+ const [internalFilterState, setInternalFilterState] = react.useState(() => ({
144
+ query: "",
145
+ commands: [],
146
+ sources: [],
147
+ models: [],
148
+ owners: [],
149
+ overriddenOnly: false
150
+ }));
151
+ const activeFilters = filterState ?? internalFilterState;
152
+ const updateFilter = (key, value) => {
153
+ const next = { ...activeFilters, [key]: value };
154
+ if (filterState === void 0) setInternalFilterState(next);
155
+ onFilterStateChange == null ? void 0 : onFilterStateChange(next);
156
+ };
157
+ const { query, commands, sources, models, owners, overriddenOnly } = activeFilters;
158
+ const options = react.useMemo(() => promptCatalogModel.catalogFilterOptions(entries), [entries]);
159
+ const showOwnerColumn = showOwner ?? options.owners.length > 1;
160
+ const columns = react.useMemo(
161
+ () => catalogColumns(showOwnerColumn),
162
+ [showOwnerColumn]
163
+ );
164
+ const rows = react.useMemo(
165
+ () => entries.filter(
166
+ (entry) => promptCatalogModel.entryMatches(entry, {
167
+ query,
168
+ commands,
169
+ sources,
170
+ models,
171
+ owners,
172
+ overriddenOnly
173
+ })
174
+ ).map(toRow),
175
+ [commands, entries, models, overriddenOnly, owners, query, sources]
176
+ );
177
+ const filters = [
178
+ {
179
+ key: "commands",
180
+ kind: "select-multi",
181
+ label: "Used by",
182
+ value: commands,
183
+ options: options.commands.map((value) => ({ value, label: value })),
184
+ onChange: (value) => updateFilter("commands", value)
185
+ },
186
+ {
187
+ key: "sources",
188
+ kind: "select-multi",
189
+ label: "Source",
190
+ value: sources,
191
+ options: options.sources.map((value) => ({
192
+ value,
193
+ label: promptCatalogModel.sourceLabel(value)
194
+ })),
195
+ onChange: (value) => updateFilter(
196
+ "sources",
197
+ value.map((selected) => {
198
+ const source = options.sources.find(
199
+ (candidate) => candidate === selected
200
+ );
201
+ if (!source)
202
+ throw new Error(
203
+ `unknown prompt source ${JSON.stringify(selected)}`
204
+ );
205
+ return source;
206
+ })
207
+ )
208
+ },
209
+ {
210
+ key: "models",
211
+ kind: "select-multi",
212
+ label: "Model",
213
+ value: models,
214
+ options: options.models.map((value) => ({ value, label: value })),
215
+ onChange: (value) => updateFilter("models", value)
216
+ }
217
+ ];
218
+ if (options.owners.length > 1) {
219
+ filters.push({
220
+ key: "owners",
221
+ kind: "select-multi",
222
+ label: "Owner",
223
+ value: owners,
224
+ options: options.owners.map((value) => ({ value, label: value })),
225
+ onChange: (value) => updateFilter("owners", value)
226
+ });
227
+ }
228
+ filters.push({
229
+ key: "overridden",
230
+ kind: "boolean",
231
+ label: "Overridden only",
232
+ value: overriddenOnly,
233
+ onChange: (value) => updateFilter("overriddenOnly", value)
234
+ });
235
+ return /* @__PURE__ */ jsxRuntime.jsx(
236
+ DataTable.DataTable,
237
+ {
238
+ data: rows,
239
+ columns,
240
+ getRowId: (row) => row.id,
241
+ autoFilter: false,
242
+ showGlobalFilter: false,
243
+ manualFilter: true,
244
+ externalSearch: {
245
+ value: query,
246
+ onChange: (value) => updateFilter("query", value),
247
+ placeholder: "Search prompts, commands, body…",
248
+ ariaLabel: "Search prompts"
249
+ },
250
+ externalFilters: filters,
251
+ ...loading !== void 0 ? { loading } : {},
252
+ ...error ? { error } : {},
253
+ emptyMessage: emptyMessage ?? "No prompts match",
254
+ ...onSelect ? { onRowClick: (row) => onSelect(row.entry) } : {},
255
+ ...getRowHref ? { getRowHref: (row) => getRowHref(row.entry) } : {},
256
+ getRowClassName: (row) => row.id === selectedId ? "bg-primary/5" : void 0,
257
+ className: utils.cn("min-h-0 flex-1", className)
258
+ }
259
+ );
260
+ }
261
+ exports.PromptCatalogTable = PromptCatalogTable;
262
+ //# sourceMappingURL=PromptCatalogTable.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptCatalogTable.cjs","sources":["../../../../src/data/ai/PromptCatalog/PromptCatalogTable.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport type { FilterBarFilter } from \"../../../components/FilterBar\";\nimport { cn } from \"../../../lib/utils\";\nimport { Badge } from \"../../Badge\";\nimport { DataTable, type DataTableColumn } from \"../../DataTable\";\nimport {\n catalogFilterOptions,\n entryMatches,\n previewText,\n provenanceSummary,\n runtimeSummary,\n sourceLabel,\n} from \"./prompt-catalog-model\";\nimport { PromptSourceBadge } from \"./PromptSourceBadge\";\nimport type {\n PromptCatalogEntry,\n PromptCatalogFilterState,\n PromptCatalogRuntime,\n} from \"./types\";\n\nexport type PromptCatalogTableProps = {\n entries: PromptCatalogEntry[];\n loading?: boolean | undefined;\n error?: string | null | undefined;\n emptyMessage?: string | undefined;\n selectedId?: string | undefined;\n onSelect?: ((entry: PromptCatalogEntry) => void) | undefined;\n getRowHref?: ((entry: PromptCatalogEntry) => string) | undefined;\n filterState?: PromptCatalogFilterState | undefined;\n onFilterStateChange?: ((state: PromptCatalogFilterState) => void) | undefined;\n showOwner?: boolean | undefined;\n className?: string | undefined;\n};\n\ntype PromptCatalogRow = {\n id: string;\n entry: PromptCatalogEntry;\n title: string;\n owner: string;\n usedBy: string;\n source: string;\n model: string;\n overrides: string;\n variables: string;\n version: string;\n} & Record<string, unknown>;\n\nfunction toRow(entry: PromptCatalogEntry): PromptCatalogRow {\n return {\n id: entry.id,\n entry,\n title: entry.title,\n owner: entry.owner,\n usedBy: (entry.usedBy ?? []).join(\", \"),\n source: sourceLabel(entry.source),\n model: entry.effective.model ?? \"\",\n overrides: provenanceSummary(entry),\n variables: (entry.variables ?? []).join(\", \"),\n version: entry.version ?? \"\",\n };\n}\n\nfunction Chips({ values }: { values: string[] }) {\n if (values.length === 0)\n return <span className=\"text-muted-foreground\">—</span>;\n return (\n <div className=\"flex flex-wrap gap-1\">\n {values.map((value) => (\n <Badge\n key={value}\n variant=\"soft\"\n tone=\"neutral\"\n size=\"xs\"\n className=\"font-mono\"\n clickToCopy={false}\n >\n {value}\n </Badge>\n ))}\n </div>\n );\n}\n\nfunction PromptCell({ entry }: { entry: PromptCatalogEntry }) {\n const secondary = entry.description || previewText(entry.body);\n return (\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"truncate font-medium\">{entry.title}</span>\n <span className=\"truncate font-mono text-xs text-muted-foreground\">\n {entry.id}\n </span>\n {secondary ? (\n <span\n className=\"line-clamp-1 text-xs text-muted-foreground\"\n title={secondary}\n >\n {secondary}\n </span>\n ) : null}\n </div>\n );\n}\n\nfunction ModelCell({ runtime }: { runtime: PromptCatalogRuntime }) {\n const summary = runtimeSummary(runtime);\n if (runtime.error) {\n return (\n <span className=\"text-xs text-destructive\" title={runtime.error}>\n {summary}\n </span>\n );\n }\n if (!runtime.model)\n return <span className=\"text-xs text-muted-foreground\">{summary}</span>;\n return (\n <span className=\"font-mono text-xs\" title={`from ${runtime.modelSource}`}>\n {summary}\n </span>\n );\n}\n\nfunction catalogColumns(\n showOwner: boolean,\n): DataTableColumn<PromptCatalogRow>[] {\n const columns: DataTableColumn<PromptCatalogRow>[] = [\n {\n key: \"title\",\n label: \"Prompt\",\n sortable: true,\n grow: true,\n minWidth: 240,\n render: (_, row) => <PromptCell entry={row.entry} />,\n },\n ];\n if (showOwner)\n columns.push({\n key: \"owner\",\n label: \"Owner\",\n sortable: true,\n shrink: true,\n });\n columns.push(\n {\n key: \"usedBy\",\n label: \"Used by\",\n minWidth: 180,\n render: (_, row) => <Chips values={row.entry.usedBy ?? []} />,\n },\n {\n key: \"source\",\n label: \"Source\",\n sortable: true,\n shrink: true,\n render: (_, row) => (\n <PromptSourceBadge\n source={row.entry.source}\n parseError={row.entry.parseError}\n />\n ),\n },\n {\n key: \"model\",\n label: \"Model\",\n sortable: true,\n minWidth: 200,\n render: (_, row) => <ModelCell runtime={row.entry.effective} />,\n },\n {\n key: \"overrides\",\n label: \"Overrides\",\n minWidth: 180,\n render: (value) =>\n value ? (\n <span className=\"text-xs\">{String(value)}</span>\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n ),\n },\n {\n key: \"variables\",\n label: \"Variables\",\n minWidth: 160,\n render: (_, row) => <Chips values={row.entry.variables ?? []} />,\n },\n {\n key: \"version\",\n label: \"Version\",\n shrink: true,\n render: (value) => (\n <span className=\"font-mono text-xs text-muted-foreground\">\n {String(value ?? \"\").slice(0, 8)}\n </span>\n ),\n },\n );\n return columns;\n}\n\n// PromptCatalogTable lists every prompt a host runs with the document that\n// actually runs, its runtime, and which config layer overrides it. Filtering is\n// done here (not by the DataTable) so the facets reflect the catalog's own\n// vocabulary: commands, sources, effective models.\nexport function PromptCatalogTable({\n entries,\n loading,\n error,\n emptyMessage,\n selectedId,\n onSelect,\n getRowHref,\n filterState,\n onFilterStateChange,\n showOwner,\n className,\n}: PromptCatalogTableProps) {\n const [internalFilterState, setInternalFilterState] =\n useState<PromptCatalogFilterState>(() => ({\n query: \"\",\n commands: [],\n sources: [],\n models: [],\n owners: [],\n overriddenOnly: false,\n }));\n const activeFilters = filterState ?? internalFilterState;\n const updateFilter = <Key extends keyof PromptCatalogFilterState>(\n key: Key,\n value: PromptCatalogFilterState[Key],\n ) => {\n const next = { ...activeFilters, [key]: value };\n if (filterState === undefined) setInternalFilterState(next);\n onFilterStateChange?.(next);\n };\n const { query, commands, sources, models, owners, overriddenOnly } =\n activeFilters;\n\n const options = useMemo(() => catalogFilterOptions(entries), [entries]);\n const showOwnerColumn = showOwner ?? options.owners.length > 1;\n const columns = useMemo(\n () => catalogColumns(showOwnerColumn),\n [showOwnerColumn],\n );\n const rows = useMemo(\n () =>\n entries\n .filter((entry) =>\n entryMatches(entry, {\n query,\n commands,\n sources,\n models,\n owners,\n overriddenOnly,\n }),\n )\n .map(toRow),\n [commands, entries, models, overriddenOnly, owners, query, sources],\n );\n\n const filters: FilterBarFilter[] = [\n {\n key: \"commands\",\n kind: \"select-multi\",\n label: \"Used by\",\n value: commands,\n options: options.commands.map((value) => ({ value, label: value })),\n onChange: (value) => updateFilter(\"commands\", value),\n },\n {\n key: \"sources\",\n kind: \"select-multi\",\n label: \"Source\",\n value: sources,\n options: options.sources.map((value) => ({\n value,\n label: sourceLabel(value),\n })),\n onChange: (value) =>\n updateFilter(\n \"sources\",\n value.map((selected) => {\n const source = options.sources.find(\n (candidate) => candidate === selected,\n );\n if (!source)\n throw new Error(\n `unknown prompt source ${JSON.stringify(selected)}`,\n );\n return source;\n }),\n ),\n },\n {\n key: \"models\",\n kind: \"select-multi\",\n label: \"Model\",\n value: models,\n options: options.models.map((value) => ({ value, label: value })),\n onChange: (value) => updateFilter(\"models\", value),\n },\n ];\n if (options.owners.length > 1) {\n filters.push({\n key: \"owners\",\n kind: \"select-multi\",\n label: \"Owner\",\n value: owners,\n options: options.owners.map((value) => ({ value, label: value })),\n onChange: (value) => updateFilter(\"owners\", value),\n });\n }\n filters.push({\n key: \"overridden\",\n kind: \"boolean\",\n label: \"Overridden only\",\n value: overriddenOnly,\n onChange: (value) => updateFilter(\"overriddenOnly\", value),\n });\n\n return (\n <DataTable<PromptCatalogRow>\n data={rows}\n columns={columns}\n getRowId={(row) => row.id}\n autoFilter={false}\n showGlobalFilter={false}\n manualFilter\n externalSearch={{\n value: query,\n onChange: (value) => updateFilter(\"query\", value),\n placeholder: \"Search prompts, commands, body…\",\n ariaLabel: \"Search prompts\",\n }}\n externalFilters={filters}\n {...(loading !== undefined ? { loading } : {})}\n {...(error ? { error } : {})}\n emptyMessage={emptyMessage ?? \"No prompts match\"}\n {...(onSelect\n ? { onRowClick: (row: PromptCatalogRow) => onSelect(row.entry) }\n : {})}\n {...(getRowHref\n ? { getRowHref: (row: PromptCatalogRow) => getRowHref(row.entry) }\n : {})}\n getRowClassName={(row) =>\n row.id === selectedId ? \"bg-primary/5\" : undefined\n }\n className={cn(\"min-h-0 flex-1\", className)}\n />\n );\n}\n"],"names":["sourceLabel","provenanceSummary","jsx","Badge","previewText","jsxs","runtimeSummary","PromptSourceBadge","useState","useMemo","catalogFilterOptions","entryMatches","DataTable","cn"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { PromptCatalogEntry, PromptCatalogFilterState } from './types';
2
+ export type PromptCatalogTableProps = {
3
+ entries: PromptCatalogEntry[];
4
+ loading?: boolean | undefined;
5
+ error?: string | null | undefined;
6
+ emptyMessage?: string | undefined;
7
+ selectedId?: string | undefined;
8
+ onSelect?: ((entry: PromptCatalogEntry) => void) | undefined;
9
+ getRowHref?: ((entry: PromptCatalogEntry) => string) | undefined;
10
+ filterState?: PromptCatalogFilterState | undefined;
11
+ onFilterStateChange?: ((state: PromptCatalogFilterState) => void) | undefined;
12
+ showOwner?: boolean | undefined;
13
+ className?: string | undefined;
14
+ };
15
+ export declare function PromptCatalogTable({ entries, loading, error, emptyMessage, selectedId, onSelect, getRowHref, filterState, onFilterStateChange, showOwner, className, }: PromptCatalogTableProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=PromptCatalogTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptCatalogTable.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/PromptCatalog/PromptCatalogTable.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EAEzB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7D,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACjE,WAAW,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9E,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AA0KF,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,SAAS,GACV,EAAE,uBAAuB,2CAuIzB"}