@flanksource/clicky-ui 0.3.27 → 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 -10
  119. package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
  120. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -1
  121. package/dist/data/FixtureEditor/fixture-frontmatter.js +8 -10
  122. package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -1
  123. package/dist/data/SelectionActionBar.cjs +242 -0
  124. package/dist/data/SelectionActionBar.cjs.map +1 -0
  125. package/dist/data/SelectionActionBar.d.ts +28 -0
  126. package/dist/data/SelectionActionBar.d.ts.map +1 -0
  127. package/dist/data/SelectionActionBar.js +242 -0
  128. package/dist/data/SelectionActionBar.js.map +1 -0
  129. package/dist/data/TaskManager.cjs +34 -12
  130. package/dist/data/TaskManager.cjs.map +1 -1
  131. package/dist/data/TaskManager.d.ts.map +1 -1
  132. package/dist/data/TaskManager.js +34 -12
  133. package/dist/data/TaskManager.js.map +1 -1
  134. package/dist/data/TaskManagerButton.cjs +11 -7
  135. package/dist/data/TaskManagerButton.cjs.map +1 -1
  136. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  137. package/dist/data/TaskManagerButton.js +11 -7
  138. package/dist/data/TaskManagerButton.js.map +1 -1
  139. package/dist/data/TaskProgress.cjs +55 -11
  140. package/dist/data/TaskProgress.cjs.map +1 -1
  141. package/dist/data/TaskProgress.d.ts.map +1 -1
  142. package/dist/data/TaskProgress.js +53 -9
  143. package/dist/data/TaskProgress.js.map +1 -1
  144. package/dist/data/ai/ChatWindow.cjs +2 -4
  145. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  146. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  147. package/dist/data/ai/ChatWindow.js +2 -4
  148. package/dist/data/ai/ChatWindow.js.map +1 -1
  149. package/dist/data/ai/ChatWindow.runtime.cjs +1 -2
  150. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  151. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  152. package/dist/data/ai/ChatWindow.runtime.js +1 -2
  153. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  154. package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs +262 -0
  155. package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs.map +1 -0
  156. package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts +16 -0
  157. package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts.map +1 -0
  158. package/dist/data/ai/PromptCatalog/PromptCatalogTable.js +262 -0
  159. package/dist/data/ai/PromptCatalog/PromptCatalogTable.js.map +1 -0
  160. package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs +77 -0
  161. package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs.map +1 -0
  162. package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts +8 -0
  163. package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts.map +1 -0
  164. package/dist/data/ai/PromptCatalog/PromptLayerStrip.js +77 -0
  165. package/dist/data/ai/PromptCatalog/PromptLayerStrip.js.map +1 -0
  166. package/dist/data/ai/PromptCatalog/PromptPage.cjs +332 -0
  167. package/dist/data/ai/PromptCatalog/PromptPage.cjs.map +1 -0
  168. package/dist/data/ai/PromptCatalog/PromptPage.d.ts +17 -0
  169. package/dist/data/ai/PromptCatalog/PromptPage.d.ts.map +1 -0
  170. package/dist/data/ai/PromptCatalog/PromptPage.js +332 -0
  171. package/dist/data/ai/PromptCatalog/PromptPage.js.map +1 -0
  172. package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs +102 -0
  173. package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs.map +1 -0
  174. package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts +16 -0
  175. package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts.map +1 -0
  176. package/dist/data/ai/PromptCatalog/PromptPageEditor.js +102 -0
  177. package/dist/data/ai/PromptCatalog/PromptPageEditor.js.map +1 -0
  178. package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs +102 -0
  179. package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs.map +1 -0
  180. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +10 -0
  181. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts.map +1 -0
  182. package/dist/data/ai/PromptCatalog/PromptPageHeader.js +102 -0
  183. package/dist/data/ai/PromptCatalog/PromptPageHeader.js.map +1 -0
  184. package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs +90 -0
  185. package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs.map +1 -0
  186. package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts +8 -0
  187. package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts.map +1 -0
  188. package/dist/data/ai/PromptCatalog/PromptPagePreview.js +90 -0
  189. package/dist/data/ai/PromptCatalog/PromptPagePreview.js.map +1 -0
  190. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs +168 -0
  191. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs.map +1 -0
  192. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts +17 -0
  193. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts.map +1 -0
  194. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js +168 -0
  195. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js.map +1 -0
  196. package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs +36 -0
  197. package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs.map +1 -0
  198. package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts +7 -0
  199. package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts.map +1 -0
  200. package/dist/data/ai/PromptCatalog/PromptSourceBadge.js +36 -0
  201. package/dist/data/ai/PromptCatalog/PromptSourceBadge.js.map +1 -0
  202. package/dist/data/ai/PromptCatalog/index.d.ts +9 -0
  203. package/dist/data/ai/PromptCatalog/index.d.ts.map +1 -0
  204. package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs +137 -0
  205. package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs.map +1 -0
  206. package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts +28 -0
  207. package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts.map +1 -0
  208. package/dist/data/ai/PromptCatalog/prompt-catalog-model.js +137 -0
  209. package/dist/data/ai/PromptCatalog/prompt-catalog-model.js.map +1 -0
  210. package/dist/data/ai/PromptCatalog/prompt-page-model.cjs +114 -0
  211. package/dist/data/ai/PromptCatalog/prompt-page-model.cjs.map +1 -0
  212. package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts +45 -0
  213. package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts.map +1 -0
  214. package/dist/data/ai/PromptCatalog/prompt-page-model.js +114 -0
  215. package/dist/data/ai/PromptCatalog/prompt-page-model.js.map +1 -0
  216. package/dist/data/ai/PromptCatalog/types.d.ts +70 -0
  217. package/dist/data/ai/PromptCatalog/types.d.ts.map +1 -0
  218. package/dist/data/ai/PromptPicker/PromptPicker.cjs +9 -12
  219. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  220. package/dist/data/ai/PromptPicker/PromptPicker.js +9 -12
  221. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  222. package/dist/data/ai/PromptPicker/index.d.ts +1 -1
  223. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
  224. package/dist/data/ai/PromptPicker/types.cjs.map +1 -1
  225. package/dist/data/ai/PromptPicker/types.d.ts +9 -0
  226. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
  227. package/dist/data/ai/PromptPicker/types.js.map +1 -1
  228. package/dist/data/ai/PromptRunEditor/index.cjs +2 -2
  229. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  230. package/dist/data/ai/PromptRunEditor/index.js +3 -3
  231. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  232. package/dist/data/ai/PromptRunEditor/model.cjs +0 -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 +0 -1
  237. package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
  238. package/dist/data/ai/RuntimeModePicker.cjs +15 -6
  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 +17 -8
  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 +34 -23
  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 +35 -24
  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 -49
  377. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  378. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +52 -29
  379. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  380. package/dist/data/ai/SpecRuntimeEditor.model.js +33 -48
  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 +13 -3
  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 +14 -4
  481. package/dist/data/chat/Chat.js.map +1 -1
  482. package/dist/data/chat/Chat.runtime.cjs +4 -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 +4 -9
  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 +29 -16
  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 +31 -18
  521. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  522. package/dist/data/runtime/RuntimeBar.model.cjs +10 -20
  523. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
  524. package/dist/data/runtime/RuntimeBar.model.d.ts +2 -2
  525. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
  526. package/dist/data/runtime/RuntimeBar.model.js +11 -21
  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 +0 -3
  541. package/dist/data/runtime/model-capabilities.cjs.map +1 -1
  542. package/dist/data/runtime/model-capabilities.d.ts +0 -1
  543. package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
  544. package/dist/data/runtime/model-capabilities.js +0 -3
  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 +158 -116
  557. package/dist/data/runtime/runtime-mode.cjs.map +1 -1
  558. package/dist/data/runtime/runtime-mode.d.ts +57 -19
  559. package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
  560. package/dist/data/runtime/runtime-mode.js +158 -116
  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":"ToolSchemaBrowser.js","sources":["../../../src/data/ai/ToolSchemaBrowser.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport {\n ListMenu,\n ListMenuHeader,\n ListMenuItem,\n ListMenuSection,\n} from \"../../components/ListMenu\";\nimport { cn } from \"../../lib/utils\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { Tabs } from \"../../layout/Tabs\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiChevronDown,\n UiChevronRight,\n UiCode2,\n UiLayers,\n UiListDashes,\n UiSearch,\n UiWrench,\n} from \"../../icons\";\nimport { SchemaViewer } from \"../SchemaViewer\";\nimport type {\n ChatToolInputSchema,\n ToolAnnotations,\n ToolMeta,\n} from \"../chat/types\";\n\nexport type ToolSchemaBrowserProps = {\n tools: ToolMeta[];\n className?: string;\n};\n\n/** Which dimension is the outer (primary) grouping. \"group\" nests parents inside\n * each tool-group; \"tree\" nests groups inside each parent surface. Whichever is\n * primary, the other becomes the inner level, so both views stay two-deep. */\ntype ViewMode = \"group\" | \"tree\";\ntype BrowserTab = \"schema\" | \"json\";\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\nconst EMPTY_SCHEMA: ChatToolInputSchema = { type: \"object\", properties: {} };\n\nexport function ToolSchemaBrowser({\n tools,\n className,\n}: ToolSchemaBrowserProps) {\n const [query, setQuery] = useState(\"\");\n const [view, setView] = useState<ViewMode>(\"group\");\n const [tab, setTab] = useState<BrowserTab>(\"schema\");\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set());\n const [selected, setSelected] = useState<string | null>(\n tools[0]?.name ?? null,\n );\n\n const searching = query.trim().length > 0;\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return tools;\n return tools.filter((tool) =>\n [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool.annotations),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q)),\n );\n }, [query, tools]);\n const active =\n tools.find((tool) => tool.name === selected) ?? filtered[0] ?? tools[0];\n const sections = useMemo(\n () => buildSections(filtered, view),\n [filtered, view],\n );\n\n const toggle = (key: string) =>\n setCollapsed((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n // While searching we force-expand so matches are never hidden behind a\n // collapsed node.\n const isOpen = (key: string) => searching || !collapsed.has(key);\n\n return (\n <div\n className={cn(\n \"min-h-0 overflow-hidden rounded-md border border-border bg-background\",\n className,\n )}\n >\n <SplitPane\n defaultSplit={34}\n minLeft={24}\n minRight={42}\n className=\"min-h-0\"\n leftClass=\"flex min-h-0 flex-col overflow-hidden\"\n rightClass=\"min-h-0 overflow-y-auto\"\n left={\n <ToolSidebar\n query={query}\n view={view}\n sections={sections}\n active={active}\n filteredCount={filtered.length}\n isOpen={isOpen}\n onQueryChange={setQuery}\n onViewChange={setView}\n onToggle={toggle}\n onSelect={setSelected}\n />\n }\n right={\n active ? (\n <ToolDetail tool={active} tab={tab} onTabChange={setTab} />\n ) : (\n <div className=\"px-3 py-8 text-center text-xs text-muted-foreground\">\n No tools\n </div>\n )\n }\n />\n </div>\n );\n}\n\nfunction ToolSidebar({\n query,\n view,\n sections,\n active,\n filteredCount,\n isOpen,\n onQueryChange,\n onViewChange,\n onToggle,\n onSelect,\n}: {\n query: string;\n view: ViewMode;\n sections: ToolSection[];\n active: ToolMeta | undefined;\n filteredCount: number;\n isOpen: (key: string) => boolean;\n onQueryChange: (query: string) => void;\n onViewChange: (view: ViewMode) => void;\n onToggle: (key: string) => void;\n onSelect: (name: string) => void;\n}) {\n return (\n <>\n <label className=\"flex h-9 shrink-0 items-center gap-2 border-b border-border px-2 text-xs\">\n <Icon icon={UiSearch} className=\"size-3.5 text-muted-foreground\" />\n <input\n value={query}\n onChange={(event) => onQueryChange(event.target.value)}\n placeholder=\"Search tools\"\n className=\"min-w-0 flex-1 bg-transparent outline-none\"\n />\n </label>\n <div className=\"flex shrink-0 items-center gap-1 border-b border-border px-2 py-1\">\n <ViewToggleButton\n active={view === \"group\"}\n icon={UiListDashes}\n label=\"Group\"\n onClick={() => onViewChange(\"group\")}\n />\n <ViewToggleButton\n active={view === \"tree\"}\n icon={UiLayers}\n label=\"Tree\"\n onClick={() => onViewChange(\"tree\")}\n />\n </div>\n <ListMenu className=\"min-h-0 flex-1 overflow-y-auto divide-y-0\">\n {sections.map((section) => {\n const sectionKey = `p:${section.label}`;\n const sectionOpen = isOpen(sectionKey);\n return (\n <ListMenuSection key={sectionKey}>\n <ListMenuHeader className=\"px-0 py-0\">\n <button\n type=\"button\"\n onClick={() => onToggle(sectionKey)}\n className=\"flex w-full items-center gap-1 px-2 py-1 text-left text-[10px] font-semibold uppercase tracking-wider text-muted-foreground hover:bg-muted\"\n >\n <Icon\n icon={sectionOpen ? UiChevronDown : UiChevronRight}\n className=\"size-3 shrink-0\"\n />\n <span className=\"min-w-0 flex-1 truncate\">\n {section.label}\n </span>\n <span className=\"tabular-nums text-muted-foreground/70\">\n {section.count}\n </span>\n </button>\n </ListMenuHeader>\n {sectionOpen &&\n section.children.map((child) => {\n const childKey = `s:${section.label}///${child.label}`;\n const childOpen = isOpen(childKey);\n return (\n <div key={childKey}>\n <button\n type=\"button\"\n onClick={() => onToggle(childKey)}\n className=\"flex w-full items-center gap-1 border-b border-border bg-background px-2 py-1 pl-3 text-left text-[11px] font-medium text-foreground/80 hover:bg-accent/50\"\n >\n <Icon\n icon={childOpen ? UiChevronDown : UiChevronRight}\n className=\"size-3 shrink-0 text-muted-foreground\"\n />\n <span className=\"min-w-0 flex-1 truncate\">\n {child.label}\n </span>\n <span className=\"tabular-nums text-[10px] text-muted-foreground/70\">\n {child.tools.length}\n </span>\n </button>\n {childOpen &&\n child.tools.map((tool) => (\n <ToolSidebarRow\n key={tool.name}\n tool={tool}\n active={active?.name === tool.name}\n onSelect={() => onSelect(tool.name)}\n />\n ))}\n </div>\n );\n })}\n </ListMenuSection>\n );\n })}\n {filteredCount === 0 && (\n <div className=\"px-3 py-8 text-center text-xs text-muted-foreground\">\n No matching tools\n </div>\n )}\n </ListMenu>\n </>\n );\n}\n\nfunction ToolSidebarRow({\n tool,\n active,\n onSelect,\n}: {\n tool: ToolMeta;\n active: boolean;\n onSelect: () => void;\n}) {\n return (\n <ListMenuItem\n active={active}\n role=\"button\"\n tabIndex={0}\n aria-selected={active}\n className=\"px-2 py-2 pl-6\"\n onClick={onSelect}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onSelect();\n }\n }}\n >\n <div className=\"grid grid-cols-[1rem_minmax(0,1fr)] gap-2\">\n {tool.icon ? (\n <Icon\n name={tool.icon}\n className=\"mt-0.5 size-3.5 text-muted-foreground\"\n />\n ) : (\n <Icon\n icon={UiWrench}\n className=\"mt-0.5 size-3.5 text-muted-foreground\"\n />\n )}\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {tool.label || tool.name}\n </span>\n </div>\n </ListMenuItem>\n );\n}\n\nfunction ToolDetail({\n tool,\n tab,\n onTabChange,\n}: {\n tool: ToolMeta;\n tab: BrowserTab;\n onTabChange: (tab: BrowserTab) => void;\n}) {\n const strict = effectiveToolStrictness(tool);\n const runtimePreview = useMemo(() => buildRuntimeToolPreview(tool), [tool]);\n return (\n <div className=\"space-y-3 p-3\">\n <div className=\"min-w-0 space-y-3\">\n <div className=\"min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {tool.icon ? (\n <Icon name={tool.icon} className=\"size-4 text-muted-foreground\" />\n ) : (\n <Icon icon={UiCode2} className=\"size-4 text-muted-foreground\" />\n )}\n <div className=\"min-w-0 truncate text-sm font-medium\">\n {tool.parent ? `${tool.parent} ` : \"\"}\n {tool.label || tool.name}\n </div>\n <StrictnessBadge strict={strict} />\n </div>\n {tool.description && (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {tool.description}\n </p>\n )}\n </div>\n <dl className=\"grid grid-cols-[auto_minmax(0,1fr)] gap-x-3 gap-y-1 text-xs\">\n <DetailRow label=\"Tool ID\" value={tool.name} mono />\n <DetailRow label=\"Default\" value={tool.defaultPermission} />\n <DetailRow label=\"Strictness\" value={strict ? \"Strict\" : \"Loose\"} />\n <DetailRow label=\"Icon\" value={tool.icon} mono />\n <DetailRow label=\"Source\" value={tool.source} />\n <DetailRow label=\"Group\" value={tool.group} />\n <DetailRow label=\"Parent\" value={tool.parent} />\n <DetailRow label=\"Server\" value={tool.server} />\n <DetailRow label=\"Method\" value={tool.method} />\n <DetailRow label=\"Path\" value={tool.path} mono />\n </dl>\n <HintChips annotations={tool.annotations} />\n <ToolAnnotationsPanel annotations={tool.annotations} />\n {tool.hints && tool.hints.length > 0 && (\n <div className=\"rounded border border-border bg-muted/20 p-2\">\n <div className=\"mb-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n Hints\n </div>\n <ul className=\"space-y-1 text-xs text-muted-foreground\">\n {tool.hints.map((hint) => (\n <li key={hint}>{hint}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n <Tabs\n value={tab}\n onChange={(next) => onTabChange(next as BrowserTab)}\n tabs={[\n { id: \"schema\", label: \"Schema\" },\n { id: \"json\", label: \"JSON\" },\n ]}\n />\n {tab === \"schema\" ? (\n <div role=\"tabpanel\" className=\"space-y-3\">\n <SchemaViewer\n schema={tool.inputSchema ?? EMPTY_SCHEMA}\n defaultOpenDepth={2}\n showControls={false}\n />\n {tool.outputSchema && (\n <div className=\"border-t border-border pt-3\">\n <div className=\"mb-2 text-xs font-semibold\">Output</div>\n <SchemaViewer\n schema={tool.outputSchema}\n defaultOpenDepth={1}\n showControls={false}\n />\n </div>\n )}\n </div>\n ) : (\n <div role=\"tabpanel\">\n <CodeBlock\n language=\"json\"\n source={JSON.stringify(runtimePreview, null, 2)}\n jsonDefaultOpenDepth={2}\n copyable\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction ViewToggleButton({\n active,\n icon,\n label,\n onClick,\n}: {\n active: boolean;\n icon: StaticIconComponent;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-pressed={active}\n className={cn(\n \"flex items-center gap-1 rounded px-2 py-0.5 text-[11px] font-medium\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50\",\n )}\n >\n <Icon icon={icon} className=\"size-3.5\" />\n {label}\n </button>\n );\n}\n\nfunction StrictnessBadge({ strict }: { strict: boolean }) {\n return (\n <span\n className={cn(\n \"shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium\",\n strict\n ? \"bg-emerald-500/10 text-emerald-700 dark:text-emerald-300\"\n : \"bg-amber-500/10 text-amber-700 dark:text-amber-300\",\n )}\n title={strict ? \"Strict input schema\" : \"Loose input schema\"}\n >\n {strict ? \"Strict\" : \"Loose\"}\n </span>\n );\n}\n\nfunction HintChips({\n annotations,\n compact = false,\n}: {\n annotations: ToolAnnotations | undefined;\n compact?: boolean;\n}) {\n const chips = wellKnownHintChips(annotations);\n if (chips.length === 0) return null;\n return (\n <div\n className={cn(\n \"flex flex-wrap gap-1\",\n compact ? \"text-[9px]\" : \"text-[10px]\",\n )}\n >\n {chips.map((chip) => (\n <span\n key={chip.key}\n className={cn(\"rounded px-1.5 py-0.5 font-medium\", chip.className)}\n >\n {chip.label}\n </span>\n ))}\n </div>\n );\n}\n\nfunction ToolAnnotationsPanel({\n annotations,\n}: {\n annotations: ToolAnnotations | undefined;\n}) {\n const entries = annotationEntries(annotations);\n if (entries.length === 0) return null;\n return (\n <div className=\"rounded border border-border bg-muted/20 p-2\">\n <div className=\"mb-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n Annotations\n </div>\n <dl className=\"grid grid-cols-[auto_minmax(0,1fr)] gap-x-3 gap-y-1 text-xs\">\n {entries.map(([key, value]) => (\n <DetailRow\n key={key}\n label={key}\n value={formatAnnotationValue(value)}\n mono={typeof value !== \"boolean\"}\n />\n ))}\n </dl>\n </div>\n );\n}\n\nfunction DetailRow({\n label,\n value,\n mono = false,\n}: {\n label: string;\n value: unknown;\n mono?: boolean;\n}) {\n if (value === undefined || value === null || value === \"\") return null;\n return (\n <>\n <dt className=\"text-muted-foreground\">{label}</dt>\n <dd className={cn(\"min-w-0 break-all\", mono && \"font-mono\")}>\n {String(value)}\n </dd>\n </>\n );\n}\n\ntype ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\n/** Buckets tools two levels deep. In \"group\" view the outer level is the\n * tool-group and the inner level is the parent surface; \"tree\" swaps them so\n * the parent surface is outer and the group nests inside. Either way the\n * non-primary dimension is the nested one. */\nfunction buildSections(tools: ToolMeta[], view: ViewMode): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const o = outerOf(tool);\n const i = innerOf(tool);\n const inner = outer.get(o) ?? new Map<string, ToolMeta[]>();\n (inner.get(i) ?? inner.set(i, []).get(i)!).push(tool);\n outer.set(o, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nfunction effectiveToolStrictness(tool: ToolMeta): boolean {\n if (tool.strict !== undefined) return tool.strict;\n return tool.inputSchema?.additionalProperties === false;\n}\n\nfunction buildRuntimeToolPreview(tool: ToolMeta) {\n return compactObject({\n name: tool.name,\n description:\n tool.description ?? tool.annotations?.title ?? tool.title ?? tool.label,\n inputSchema: tool.inputSchema ?? EMPTY_SCHEMA,\n outputSchema: tool.outputSchema,\n strict: effectiveToolStrictness(tool),\n annotations: tool.annotations,\n metadata: compactObject({\n label: tool.label,\n title: tool.title,\n icon: tool.icon,\n group: tool.group,\n parent: tool.parent,\n entity: tool.entity,\n defaultPermission: tool.defaultPermission,\n source: tool.source,\n server: tool.server,\n method: tool.method,\n path: tool.path,\n operationName: tool.operationName,\n preferenceKey: tool.preferenceKey,\n }),\n });\n}\n\nfunction compactObject(\n record: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(record).filter(([, value]) => {\n if (value === undefined || value === null) return false;\n if (\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n Object.keys(value).length === 0\n ) {\n return false;\n }\n return true;\n }),\n );\n}\n\nfunction annotationSearchText(\n annotations: ToolAnnotations | undefined,\n): string[] {\n if (!annotations) return [];\n return Object.entries(annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nfunction annotationEntries(\n annotations: ToolAnnotations | undefined,\n): Array<[string, unknown]> {\n if (!annotations) return [];\n const order = [\n \"title\",\n \"readOnlyHint\",\n \"destructiveHint\",\n \"idempotentHint\",\n \"openWorldHint\",\n ];\n const seen = new Set(order);\n const known = order\n .filter((key) => annotations[key] !== undefined)\n .map((key) => [key, annotations[key]] as [string, unknown]);\n const rest = Object.entries(annotations).filter(([key]) => !seen.has(key));\n return [...known, ...rest];\n}\n\nfunction formatAnnotationValue(value: unknown): string {\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nfunction wellKnownHintChips(annotations: ToolAnnotations | undefined) {\n if (!annotations) return [];\n return [\n annotations.readOnlyHint\n ? {\n key: \"readOnlyHint\",\n label: \"Read only\",\n className: \"bg-emerald-500/10 text-emerald-700 dark:text-emerald-300\",\n }\n : null,\n annotations.destructiveHint\n ? {\n key: \"destructiveHint\",\n label: \"Destructive\",\n className: \"bg-rose-500/10 text-rose-700 dark:text-rose-300\",\n }\n : null,\n annotations.idempotentHint\n ? {\n key: \"idempotentHint\",\n label: \"Idempotent\",\n className: \"bg-sky-500/10 text-sky-700 dark:text-sky-300\",\n }\n : null,\n annotations.openWorldHint\n ? {\n key: \"openWorldHint\",\n label: \"Open world\",\n className: \"bg-violet-500/10 text-violet-700 dark:text-violet-300\",\n }\n : null,\n ].filter(\n (chip): chip is { key: string; label: string; className: string } =>\n chip !== null,\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ToolSchemaBrowser.js","sources":["../../../src/data/ai/ToolSchemaBrowser.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { useListMenuSelection } from \"../../components/use-list-menu-selection\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { cn } from \"../../lib/utils\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport { ToolSchemaBrowserDetail } from \"./ToolSchemaBrowser.detail\";\nimport {\n EMPTY_TOOL_HINT_FILTERS,\n buildToolSchemaSections,\n filterToolSchemaBrowserTools,\n type ToolHintFilter,\n type ToolHintFilters,\n type ToolHintKey,\n type ToolSchemaBrowserTab,\n type ToolSchemaViewMode,\n} from \"./ToolSchemaBrowser.model\";\nimport { ToolSchemaBrowserSidebar } from \"./ToolSchemaBrowser.sidebar\";\n\nexport type ToolSchemaBrowserProps = {\n tools: ToolMeta[];\n /** Server-resolved effective permission shown beside each tool. */\n value?: Record<string, ToolPolicy> | undefined;\n /** Enables bulk selection and emits one ordered policy rule per action. */\n onRule?: ((rule: PermissionRule) => void) | undefined;\n className?: string;\n};\n\nexport function ToolSchemaBrowser({\n tools,\n value,\n onRule,\n className,\n}: ToolSchemaBrowserProps) {\n const [query, setQuery] = useState(\"\");\n const [view, setView] = useState<ToolSchemaViewMode>(\"group\");\n const [tab, setTab] = useState<ToolSchemaBrowserTab>(\"schema\");\n const [filters, setFilters] = useState<ToolHintFilters>(\n EMPTY_TOOL_HINT_FILTERS,\n );\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set());\n const [selected, setSelected] = useState<string | null>(\n tools[0]?.name ?? null,\n );\n const selection = useListMenuSelection({\n keys: tools.map((tool) => tool.name),\n });\n\n const filtered = useMemo(\n () => filterToolSchemaBrowserTools(tools, query, filters),\n [filters, query, tools],\n );\n const searching =\n query.trim().length > 0 ||\n Object.values(filters).some((value) => value !== \"any\");\n const active =\n filtered.find((tool) => tool.name === selected) ?? filtered[0] ?? tools[0];\n const sections = useMemo(\n () => buildToolSchemaSections(filtered, view),\n [filtered, view],\n );\n\n const toggle = (key: string) =>\n setCollapsed((previous) => {\n const next = new Set(previous);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n const isOpen = (key: string) => searching || !collapsed.has(key);\n const updateFilter = (key: ToolHintKey, value: ToolHintFilter) =>\n setFilters((current) => ({\n ...current,\n [key]: value,\n }));\n\n return (\n <div\n className={cn(\n \"min-h-0 overflow-hidden rounded-md border border-border bg-background\",\n className,\n )}\n >\n <SplitPane\n defaultSplit={34}\n minLeft={24}\n minRight={42}\n className=\"min-h-0\"\n leftClass=\"flex min-h-0 flex-col overflow-hidden\"\n rightClass=\"min-h-0 overflow-y-auto\"\n left={\n <ToolSchemaBrowserSidebar\n query={query}\n view={view}\n filters={filters}\n sections={sections}\n active={active}\n filteredCount={filtered.length}\n isOpen={isOpen}\n value={value}\n onRule={onRule}\n onQueryChange={setQuery}\n onViewChange={setView}\n onFilterChange={updateFilter}\n onClearFilters={() => setFilters({ ...EMPTY_TOOL_HINT_FILTERS })}\n onToggle={toggle}\n onSelect={setSelected}\n {...(onRule ? { selection } : {})}\n />\n }\n right={\n active ? (\n <ToolSchemaBrowserDetail\n tool={active}\n tab={tab}\n onTabChange={setTab}\n />\n ) : (\n <div className=\"px-3 py-8 text-center text-xs text-muted-foreground\">\n No tools\n </div>\n )\n }\n />\n </div>\n );\n}\n"],"names":["value"],"mappings":";;;;;;;;AA4BO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;;AACzB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,MAAM,OAAO,IAAI,SAA6B,OAAO;AAC5D,QAAM,CAAC,KAAK,MAAM,IAAI,SAA+B,QAAQ;AAC7D,QAAM,CAAC,SAAS,UAAU,IAAI;AAAA,IAC5B;AAAA,EAAA;AAEF,QAAM,CAAC,WAAW,YAAY,IAAI,SAAsB,MAAM,oBAAI,KAAK;AACvE,QAAM,CAAC,UAAU,WAAW,IAAI;AAAA,MAC9B,WAAM,CAAC,MAAP,mBAAU,SAAQ;AAAA,EAAA;AAEpB,QAAM,YAAY,qBAAqB;AAAA,IACrC,MAAM,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,EAAA,CACpC;AAED,QAAM,WAAW;AAAA,IACf,MAAM,6BAA6B,OAAO,OAAO,OAAO;AAAA,IACxD,CAAC,SAAS,OAAO,KAAK;AAAA,EAAA;AAExB,QAAM,YACJ,MAAM,KAAA,EAAO,SAAS,KACtB,OAAO,OAAO,OAAO,EAAE,KAAK,CAACA,WAAUA,WAAU,KAAK;AACxD,QAAM,SACJ,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,QAAQ,KAAK,SAAS,CAAC,KAAK,MAAM,CAAC;AAC3E,QAAM,WAAW;AAAA,IACf,MAAM,wBAAwB,UAAU,IAAI;AAAA,IAC5C,CAAC,UAAU,IAAI;AAAA,EAAA;AAGjB,QAAM,SAAS,CAAC,QACd,aAAa,CAAC,aAAa;AACzB,UAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,QAAI,KAAK,IAAI,GAAG,EAAG,MAAK,OAAO,GAAG;AAAA,QAC7B,MAAK,IAAI,GAAG;AACjB,WAAO;AAAA,EACT,CAAC;AACH,QAAM,SAAS,CAAC,QAAgB,aAAa,CAAC,UAAU,IAAI,GAAG;AAC/D,QAAM,eAAe,CAAC,KAAkBA,WACtC,WAAW,CAAC,aAAa;AAAA,IACvB,GAAG;AAAA,IACH,CAAC,GAAG,GAAGA;AAAAA,EAAA,EACP;AAEJ,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,cAAc;AAAA,UACd,SAAS;AAAA,UACT,UAAU;AAAA,UACV,WAAU;AAAA,UACV,WAAU;AAAA,UACV,YAAW;AAAA,UACX,MACE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAe,SAAS;AAAA,cACxB;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAe;AAAA,cACf,cAAc;AAAA,cACd,gBAAgB;AAAA,cAChB,gBAAgB,MAAM,WAAW,EAAE,GAAG,yBAAyB;AAAA,cAC/D,UAAU;AAAA,cACV,UAAU;AAAA,cACT,GAAI,SAAS,EAAE,cAAc,CAAA;AAAA,YAAC;AAAA,UAAA;AAAA,UAGnC,OACE,SACE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAM;AAAA,cACN;AAAA,cACA,aAAa;AAAA,YAAA;AAAA,UAAA,IAGf,oBAAC,OAAA,EAAI,WAAU,uDAAsD,UAAA,WAAA,CAErE;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const TOOL_HINTS = [
4
+ { key: "readOnlyHint", label: "Read only" },
5
+ { key: "destructiveHint", label: "Destructive" },
6
+ { key: "idempotentHint", label: "Idempotent" },
7
+ { key: "openWorldHint", label: "Open world" }
8
+ ];
9
+ const EMPTY_TOOL_HINT_FILTERS = {
10
+ readOnlyHint: "any",
11
+ destructiveHint: "any",
12
+ idempotentHint: "any",
13
+ openWorldHint: "any"
14
+ };
15
+ const NO_GROUP = "Tools";
16
+ const NO_PARENT = "General";
17
+ function filterToolSchemaBrowserTools(tools, query, filters) {
18
+ const q = query.trim().toLowerCase();
19
+ return tools.filter((tool) => {
20
+ if (!matchesHintFilters(tool, filters)) return false;
21
+ if (!q) return true;
22
+ return [
23
+ tool.name,
24
+ tool.label,
25
+ tool.title,
26
+ tool.description,
27
+ tool.group,
28
+ tool.parent,
29
+ tool.entity,
30
+ tool.icon,
31
+ tool.defaultPermission,
32
+ tool.source,
33
+ tool.server,
34
+ ...annotationSearchText(tool),
35
+ ...tool.hints ?? []
36
+ ].filter(Boolean).some((value) => String(value).toLowerCase().includes(q));
37
+ });
38
+ }
39
+ function matchesHintFilters(tool, filters) {
40
+ return TOOL_HINTS.every(({ key }) => {
41
+ var _a;
42
+ const filter = filters[key];
43
+ if (filter === "any") return true;
44
+ const value = (_a = tool.annotations) == null ? void 0 : _a[key];
45
+ return filter === "yes" ? value === true : value !== true;
46
+ });
47
+ }
48
+ function annotationSearchText(tool) {
49
+ if (!tool.annotations) return [];
50
+ return Object.entries(tool.annotations).flatMap(([key, value]) => [key, primitiveAnnotationText(value)]).filter((value) => Boolean(value));
51
+ }
52
+ function primitiveAnnotationText(value) {
53
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
54
+ return String(value);
55
+ }
56
+ return void 0;
57
+ }
58
+ function buildToolSchemaSections(tools, view) {
59
+ const outerOf = (tool) => view === "group" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;
60
+ const innerOf = (tool) => view === "group" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;
61
+ const outer = /* @__PURE__ */ new Map();
62
+ for (const tool of tools) {
63
+ const outerKey = outerOf(tool);
64
+ const innerKey = innerOf(tool);
65
+ const inner = outer.get(outerKey) ?? /* @__PURE__ */ new Map();
66
+ const bucket = inner.get(innerKey) ?? [];
67
+ bucket.push(tool);
68
+ inner.set(innerKey, bucket);
69
+ outer.set(outerKey, inner);
70
+ }
71
+ return [...outer.entries()].map(([label, inner]) => {
72
+ const children = [...inner.entries()].map(([childLabel, childTools]) => ({
73
+ label: childLabel,
74
+ tools: [...childTools].sort(
75
+ (a, b) => (a.label || a.name).localeCompare(b.label || b.name)
76
+ )
77
+ })).sort((a, b) => a.label.localeCompare(b.label));
78
+ return {
79
+ label,
80
+ count: children.reduce((sum, child) => sum + child.tools.length, 0),
81
+ children
82
+ };
83
+ }).sort((a, b) => a.label.localeCompare(b.label));
84
+ }
85
+ function directoryPermissionRule({
86
+ tools,
87
+ view,
88
+ depth
89
+ }) {
90
+ const group = singleDirectoryValue(tools, "group");
91
+ const parent = singleDirectoryValue(tools, "parent");
92
+ const outer = view === "group" ? group : parent;
93
+ const inner = view === "group" ? parent : group;
94
+ if (!outer || depth === "child" && !inner) {
95
+ return { name: tools.map((tool) => tool.name).sort(), policy: "ask" };
96
+ }
97
+ if (depth === "child") {
98
+ if (!inner) throw new Error("Child tool directory has no metadata value");
99
+ return view === "group" ? { group: outer, parent: inner, policy: "ask" } : { parent: outer, group: inner, policy: "ask" };
100
+ }
101
+ return view === "group" ? { group: outer, policy: "ask" } : { parent: outer, policy: "ask" };
102
+ }
103
+ function singleDirectoryValue(tools, key) {
104
+ const values = new Set(tools.map((tool) => tool[key]).filter(Boolean));
105
+ return values.size === 1 ? [...values][0] : void 0;
106
+ }
107
+ function updateSelectedTools(selected, visible) {
108
+ const next = new Set(selected);
109
+ const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));
110
+ for (const name of visible) {
111
+ if (allVisibleSelected) next.delete(name);
112
+ else next.add(name);
113
+ }
114
+ return [...next];
115
+ }
116
+ function selectedToolState(selected, visible) {
117
+ const count = visible.filter((name) => selected.has(name)).length;
118
+ return {
119
+ checked: visible.length > 0 && count === visible.length,
120
+ mixed: count > 0 && count < visible.length
121
+ };
122
+ }
123
+ exports.EMPTY_TOOL_HINT_FILTERS = EMPTY_TOOL_HINT_FILTERS;
124
+ exports.TOOL_HINTS = TOOL_HINTS;
125
+ exports.buildToolSchemaSections = buildToolSchemaSections;
126
+ exports.directoryPermissionRule = directoryPermissionRule;
127
+ exports.filterToolSchemaBrowserTools = filterToolSchemaBrowserTools;
128
+ exports.selectedToolState = selectedToolState;
129
+ exports.updateSelectedTools = updateSelectedTools;
130
+ //# sourceMappingURL=ToolSchemaBrowser.model.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.model.cjs","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"sourcesContent":["import type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta } from \"../chat/types\";\n\nexport type ToolSchemaViewMode = \"group\" | \"tree\";\nexport type ToolSchemaBrowserTab = \"schema\" | \"json\";\nexport type ToolHintKey =\n | \"readOnlyHint\"\n | \"destructiveHint\"\n | \"idempotentHint\"\n | \"openWorldHint\";\nexport type ToolHintFilter = \"any\" | \"yes\" | \"no\";\nexport type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;\n\nexport type ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\nexport const TOOL_HINTS: Array<{ key: ToolHintKey; label: string }> = [\n { key: \"readOnlyHint\", label: \"Read only\" },\n { key: \"destructiveHint\", label: \"Destructive\" },\n { key: \"idempotentHint\", label: \"Idempotent\" },\n { key: \"openWorldHint\", label: \"Open world\" },\n];\n\nexport const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters = {\n readOnlyHint: \"any\",\n destructiveHint: \"any\",\n idempotentHint: \"any\",\n openWorldHint: \"any\",\n};\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\n\nexport function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter {\n if (value === \"any\") return \"yes\";\n if (value === \"yes\") return \"no\";\n return \"any\";\n}\n\nexport function toolHintFilterLabel(value: ToolHintFilter): string {\n if (value === \"yes\") return \"Yes\";\n if (value === \"no\") return \"No\";\n return \"Any\";\n}\n\nexport function filterToolSchemaBrowserTools(\n tools: ToolMeta[],\n query: string,\n filters: ToolHintFilters,\n): ToolMeta[] {\n const q = query.trim().toLowerCase();\n return tools.filter((tool) => {\n if (!matchesHintFilters(tool, filters)) return false;\n if (!q) return true;\n return [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q));\n });\n}\n\nfunction matchesHintFilters(tool: ToolMeta, filters: ToolHintFilters): boolean {\n return TOOL_HINTS.every(({ key }) => {\n const filter = filters[key];\n if (filter === \"any\") return true;\n const value = tool.annotations?.[key];\n return filter === \"yes\" ? value === true : value !== true;\n });\n}\n\nfunction annotationSearchText(tool: ToolMeta): string[] {\n if (!tool.annotations) return [];\n return Object.entries(tool.annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nexport function buildToolSchemaSections(\n tools: ToolMeta[],\n view: ToolSchemaViewMode,\n): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const outerKey = outerOf(tool);\n const innerKey = innerOf(tool);\n const inner = outer.get(outerKey) ?? new Map<string, ToolMeta[]>();\n const bucket = inner.get(innerKey) ?? [];\n bucket.push(tool);\n inner.set(innerKey, bucket);\n outer.set(outerKey, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nexport function directoryPermissionRule({\n tools,\n view,\n depth,\n}: {\n tools: ToolMeta[];\n view: ToolSchemaViewMode;\n depth: \"section\" | \"child\";\n}): PermissionRule {\n const group = singleDirectoryValue(tools, \"group\");\n const parent = singleDirectoryValue(tools, \"parent\");\n const outer = view === \"group\" ? group : parent;\n const inner = view === \"group\" ? parent : group;\n if (!outer || (depth === \"child\" && !inner)) {\n return { name: tools.map((tool) => tool.name).sort(), policy: \"ask\" };\n }\n if (depth === \"child\") {\n if (!inner) throw new Error(\"Child tool directory has no metadata value\");\n return view === \"group\"\n ? { group: outer, parent: inner, policy: \"ask\" }\n : { parent: outer, group: inner, policy: \"ask\" };\n }\n return view === \"group\"\n ? { group: outer, policy: \"ask\" }\n : { parent: outer, policy: \"ask\" };\n}\n\nfunction singleDirectoryValue(\n tools: ToolMeta[],\n key: \"group\" | \"parent\",\n): string | undefined {\n const values = new Set(tools.map((tool) => tool[key]).filter(Boolean));\n return values.size === 1 ? [...values][0] : undefined;\n}\n\nexport function updateSelectedTools(\n selected: readonly string[],\n visible: readonly string[],\n): string[] {\n const next = new Set(selected);\n const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));\n for (const name of visible) {\n if (allVisibleSelected) next.delete(name);\n else next.add(name);\n }\n return [...next];\n}\n\nexport function selectedToolState(\n selected: ReadonlySet<string>,\n visible: readonly string[],\n): { checked: boolean; mixed: boolean } {\n const count = visible.filter((name) => selected.has(name)).length;\n return {\n checked: visible.length > 0 && count === visible.length,\n mixed: count > 0 && count < visible.length,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { PermissionRule } from '../chat/tool-policy';
2
+ import { ToolMeta } from '../chat/types';
3
+ export type ToolSchemaViewMode = "group" | "tree";
4
+ export type ToolSchemaBrowserTab = "schema" | "json";
5
+ export type ToolHintKey = "readOnlyHint" | "destructiveHint" | "idempotentHint" | "openWorldHint";
6
+ export type ToolHintFilter = "any" | "yes" | "no";
7
+ export type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;
8
+ export type ToolSection = {
9
+ label: string;
10
+ count: number;
11
+ children: Array<{
12
+ label: string;
13
+ tools: ToolMeta[];
14
+ }>;
15
+ };
16
+ export declare const TOOL_HINTS: Array<{
17
+ key: ToolHintKey;
18
+ label: string;
19
+ }>;
20
+ export declare const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters;
21
+ export declare function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter;
22
+ export declare function toolHintFilterLabel(value: ToolHintFilter): string;
23
+ export declare function filterToolSchemaBrowserTools(tools: ToolMeta[], query: string, filters: ToolHintFilters): ToolMeta[];
24
+ export declare function buildToolSchemaSections(tools: ToolMeta[], view: ToolSchemaViewMode): ToolSection[];
25
+ export declare function directoryPermissionRule({ tools, view, depth, }: {
26
+ tools: ToolMeta[];
27
+ view: ToolSchemaViewMode;
28
+ depth: "section" | "child";
29
+ }): PermissionRule;
30
+ export declare function updateSelectedTools(selected: readonly string[], visible: readonly string[]): string[];
31
+ export declare function selectedToolState(selected: ReadonlySet<string>, visible: readonly string[]): {
32
+ checked: boolean;
33
+ mixed: boolean;
34
+ };
35
+ //# sourceMappingURL=ToolSchemaBrowser.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,CAAC;AACpB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKjE,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAKrC,CAAC;AAKF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAIzE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAIjE;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,GACvB,QAAQ,EAAE,CAuBZ;AA6BD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,EAAE,EACjB,IAAI,EAAE,kBAAkB,GACvB,WAAW,EAAE,CAkCf;AAED,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,IAAI,EACJ,KAAK,GACN,EAAE;IACD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;CAC5B,GAAG,cAAc,CAiBjB;AAUD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,EAAE,CAQV;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,EAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAMtC"}
@@ -0,0 +1,130 @@
1
+ const TOOL_HINTS = [
2
+ { key: "readOnlyHint", label: "Read only" },
3
+ { key: "destructiveHint", label: "Destructive" },
4
+ { key: "idempotentHint", label: "Idempotent" },
5
+ { key: "openWorldHint", label: "Open world" }
6
+ ];
7
+ const EMPTY_TOOL_HINT_FILTERS = {
8
+ readOnlyHint: "any",
9
+ destructiveHint: "any",
10
+ idempotentHint: "any",
11
+ openWorldHint: "any"
12
+ };
13
+ const NO_GROUP = "Tools";
14
+ const NO_PARENT = "General";
15
+ function filterToolSchemaBrowserTools(tools, query, filters) {
16
+ const q = query.trim().toLowerCase();
17
+ return tools.filter((tool) => {
18
+ if (!matchesHintFilters(tool, filters)) return false;
19
+ if (!q) return true;
20
+ return [
21
+ tool.name,
22
+ tool.label,
23
+ tool.title,
24
+ tool.description,
25
+ tool.group,
26
+ tool.parent,
27
+ tool.entity,
28
+ tool.icon,
29
+ tool.defaultPermission,
30
+ tool.source,
31
+ tool.server,
32
+ ...annotationSearchText(tool),
33
+ ...tool.hints ?? []
34
+ ].filter(Boolean).some((value) => String(value).toLowerCase().includes(q));
35
+ });
36
+ }
37
+ function matchesHintFilters(tool, filters) {
38
+ return TOOL_HINTS.every(({ key }) => {
39
+ var _a;
40
+ const filter = filters[key];
41
+ if (filter === "any") return true;
42
+ const value = (_a = tool.annotations) == null ? void 0 : _a[key];
43
+ return filter === "yes" ? value === true : value !== true;
44
+ });
45
+ }
46
+ function annotationSearchText(tool) {
47
+ if (!tool.annotations) return [];
48
+ return Object.entries(tool.annotations).flatMap(([key, value]) => [key, primitiveAnnotationText(value)]).filter((value) => Boolean(value));
49
+ }
50
+ function primitiveAnnotationText(value) {
51
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
52
+ return String(value);
53
+ }
54
+ return void 0;
55
+ }
56
+ function buildToolSchemaSections(tools, view) {
57
+ const outerOf = (tool) => view === "group" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;
58
+ const innerOf = (tool) => view === "group" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;
59
+ const outer = /* @__PURE__ */ new Map();
60
+ for (const tool of tools) {
61
+ const outerKey = outerOf(tool);
62
+ const innerKey = innerOf(tool);
63
+ const inner = outer.get(outerKey) ?? /* @__PURE__ */ new Map();
64
+ const bucket = inner.get(innerKey) ?? [];
65
+ bucket.push(tool);
66
+ inner.set(innerKey, bucket);
67
+ outer.set(outerKey, inner);
68
+ }
69
+ return [...outer.entries()].map(([label, inner]) => {
70
+ const children = [...inner.entries()].map(([childLabel, childTools]) => ({
71
+ label: childLabel,
72
+ tools: [...childTools].sort(
73
+ (a, b) => (a.label || a.name).localeCompare(b.label || b.name)
74
+ )
75
+ })).sort((a, b) => a.label.localeCompare(b.label));
76
+ return {
77
+ label,
78
+ count: children.reduce((sum, child) => sum + child.tools.length, 0),
79
+ children
80
+ };
81
+ }).sort((a, b) => a.label.localeCompare(b.label));
82
+ }
83
+ function directoryPermissionRule({
84
+ tools,
85
+ view,
86
+ depth
87
+ }) {
88
+ const group = singleDirectoryValue(tools, "group");
89
+ const parent = singleDirectoryValue(tools, "parent");
90
+ const outer = view === "group" ? group : parent;
91
+ const inner = view === "group" ? parent : group;
92
+ if (!outer || depth === "child" && !inner) {
93
+ return { name: tools.map((tool) => tool.name).sort(), policy: "ask" };
94
+ }
95
+ if (depth === "child") {
96
+ if (!inner) throw new Error("Child tool directory has no metadata value");
97
+ return view === "group" ? { group: outer, parent: inner, policy: "ask" } : { parent: outer, group: inner, policy: "ask" };
98
+ }
99
+ return view === "group" ? { group: outer, policy: "ask" } : { parent: outer, policy: "ask" };
100
+ }
101
+ function singleDirectoryValue(tools, key) {
102
+ const values = new Set(tools.map((tool) => tool[key]).filter(Boolean));
103
+ return values.size === 1 ? [...values][0] : void 0;
104
+ }
105
+ function updateSelectedTools(selected, visible) {
106
+ const next = new Set(selected);
107
+ const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));
108
+ for (const name of visible) {
109
+ if (allVisibleSelected) next.delete(name);
110
+ else next.add(name);
111
+ }
112
+ return [...next];
113
+ }
114
+ function selectedToolState(selected, visible) {
115
+ const count = visible.filter((name) => selected.has(name)).length;
116
+ return {
117
+ checked: visible.length > 0 && count === visible.length,
118
+ mixed: count > 0 && count < visible.length
119
+ };
120
+ }
121
+ export {
122
+ EMPTY_TOOL_HINT_FILTERS,
123
+ TOOL_HINTS,
124
+ buildToolSchemaSections,
125
+ directoryPermissionRule,
126
+ filterToolSchemaBrowserTools,
127
+ selectedToolState,
128
+ updateSelectedTools
129
+ };
130
+ //# sourceMappingURL=ToolSchemaBrowser.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.model.js","sources":["../../../src/data/ai/ToolSchemaBrowser.model.ts"],"sourcesContent":["import type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta } from \"../chat/types\";\n\nexport type ToolSchemaViewMode = \"group\" | \"tree\";\nexport type ToolSchemaBrowserTab = \"schema\" | \"json\";\nexport type ToolHintKey =\n | \"readOnlyHint\"\n | \"destructiveHint\"\n | \"idempotentHint\"\n | \"openWorldHint\";\nexport type ToolHintFilter = \"any\" | \"yes\" | \"no\";\nexport type ToolHintFilters = Record<ToolHintKey, ToolHintFilter>;\n\nexport type ToolSection = {\n label: string;\n count: number;\n children: Array<{ label: string; tools: ToolMeta[] }>;\n};\n\nexport const TOOL_HINTS: Array<{ key: ToolHintKey; label: string }> = [\n { key: \"readOnlyHint\", label: \"Read only\" },\n { key: \"destructiveHint\", label: \"Destructive\" },\n { key: \"idempotentHint\", label: \"Idempotent\" },\n { key: \"openWorldHint\", label: \"Open world\" },\n];\n\nexport const EMPTY_TOOL_HINT_FILTERS: ToolHintFilters = {\n readOnlyHint: \"any\",\n destructiveHint: \"any\",\n idempotentHint: \"any\",\n openWorldHint: \"any\",\n};\n\nconst NO_GROUP = \"Tools\";\nconst NO_PARENT = \"General\";\n\nexport function cycleToolHintFilter(value: ToolHintFilter): ToolHintFilter {\n if (value === \"any\") return \"yes\";\n if (value === \"yes\") return \"no\";\n return \"any\";\n}\n\nexport function toolHintFilterLabel(value: ToolHintFilter): string {\n if (value === \"yes\") return \"Yes\";\n if (value === \"no\") return \"No\";\n return \"Any\";\n}\n\nexport function filterToolSchemaBrowserTools(\n tools: ToolMeta[],\n query: string,\n filters: ToolHintFilters,\n): ToolMeta[] {\n const q = query.trim().toLowerCase();\n return tools.filter((tool) => {\n if (!matchesHintFilters(tool, filters)) return false;\n if (!q) return true;\n return [\n tool.name,\n tool.label,\n tool.title,\n tool.description,\n tool.group,\n tool.parent,\n tool.entity,\n tool.icon,\n tool.defaultPermission,\n tool.source,\n tool.server,\n ...annotationSearchText(tool),\n ...(tool.hints ?? []),\n ]\n .filter(Boolean)\n .some((value) => String(value).toLowerCase().includes(q));\n });\n}\n\nfunction matchesHintFilters(tool: ToolMeta, filters: ToolHintFilters): boolean {\n return TOOL_HINTS.every(({ key }) => {\n const filter = filters[key];\n if (filter === \"any\") return true;\n const value = tool.annotations?.[key];\n return filter === \"yes\" ? value === true : value !== true;\n });\n}\n\nfunction annotationSearchText(tool: ToolMeta): string[] {\n if (!tool.annotations) return [];\n return Object.entries(tool.annotations)\n .flatMap(([key, value]) => [key, primitiveAnnotationText(value)])\n .filter((value): value is string => Boolean(value));\n}\n\nfunction primitiveAnnotationText(value: unknown): string | undefined {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n return undefined;\n}\n\nexport function buildToolSchemaSections(\n tools: ToolMeta[],\n view: ToolSchemaViewMode,\n): ToolSection[] {\n const outerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.group || NO_GROUP : tool.parent || NO_PARENT;\n const innerOf = (tool: ToolMeta) =>\n view === \"group\" ? tool.parent || NO_PARENT : tool.group || NO_GROUP;\n\n const outer = new Map<string, Map<string, ToolMeta[]>>();\n for (const tool of tools) {\n const outerKey = outerOf(tool);\n const innerKey = innerOf(tool);\n const inner = outer.get(outerKey) ?? new Map<string, ToolMeta[]>();\n const bucket = inner.get(innerKey) ?? [];\n bucket.push(tool);\n inner.set(innerKey, bucket);\n outer.set(outerKey, inner);\n }\n\n return [...outer.entries()]\n .map(([label, inner]) => {\n const children = [...inner.entries()]\n .map(([childLabel, childTools]) => ({\n label: childLabel,\n tools: [...childTools].sort((a, b) =>\n (a.label || a.name).localeCompare(b.label || b.name),\n ),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return {\n label,\n count: children.reduce((sum, child) => sum + child.tools.length, 0),\n children,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n\nexport function directoryPermissionRule({\n tools,\n view,\n depth,\n}: {\n tools: ToolMeta[];\n view: ToolSchemaViewMode;\n depth: \"section\" | \"child\";\n}): PermissionRule {\n const group = singleDirectoryValue(tools, \"group\");\n const parent = singleDirectoryValue(tools, \"parent\");\n const outer = view === \"group\" ? group : parent;\n const inner = view === \"group\" ? parent : group;\n if (!outer || (depth === \"child\" && !inner)) {\n return { name: tools.map((tool) => tool.name).sort(), policy: \"ask\" };\n }\n if (depth === \"child\") {\n if (!inner) throw new Error(\"Child tool directory has no metadata value\");\n return view === \"group\"\n ? { group: outer, parent: inner, policy: \"ask\" }\n : { parent: outer, group: inner, policy: \"ask\" };\n }\n return view === \"group\"\n ? { group: outer, policy: \"ask\" }\n : { parent: outer, policy: \"ask\" };\n}\n\nfunction singleDirectoryValue(\n tools: ToolMeta[],\n key: \"group\" | \"parent\",\n): string | undefined {\n const values = new Set(tools.map((tool) => tool[key]).filter(Boolean));\n return values.size === 1 ? [...values][0] : undefined;\n}\n\nexport function updateSelectedTools(\n selected: readonly string[],\n visible: readonly string[],\n): string[] {\n const next = new Set(selected);\n const allVisibleSelected = visible.length > 0 && visible.every((name) => next.has(name));\n for (const name of visible) {\n if (allVisibleSelected) next.delete(name);\n else next.add(name);\n }\n return [...next];\n}\n\nexport function selectedToolState(\n selected: ReadonlySet<string>,\n visible: readonly string[],\n): { checked: boolean; mixed: boolean } {\n const count = visible.filter((name) => selected.has(name)).length;\n return {\n checked: visible.length > 0 && count === visible.length,\n mixed: count > 0 && count < visible.length,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
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 button = require("../../components/button.cjs");
6
+ const SegmentedControl = require("../../components/SegmentedControl.cjs");
7
+ const POLICY_OPTIONS = [
8
+ { id: "auto", label: "Auto" },
9
+ { id: "ask", label: "Ask" },
10
+ { id: "deny", label: "Off" },
11
+ { id: "allow", label: "On" }
12
+ ];
13
+ function ToolSelectionStrategyToolbar({
14
+ selection,
15
+ onRule
16
+ }) {
17
+ const [policy, setPolicy] = react.useState("ask");
18
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid shrink-0 gap-1.5 border-b border-border bg-muted px-2 py-1.5", children: [
19
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
20
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs font-medium", children: [
21
+ selection.count,
22
+ " selected"
23
+ ] }),
24
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground", children: "Saves one grouped permission strategy" })
25
+ ] }),
26
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
27
+ /* @__PURE__ */ jsxRuntime.jsx(
28
+ SegmentedControl.SegmentedControl,
29
+ {
30
+ "aria-label": "Selected tools policy",
31
+ value: policy,
32
+ options: POLICY_OPTIONS,
33
+ onChange: setPolicy,
34
+ size: "sm",
35
+ className: "min-w-0 flex-1 justify-stretch"
36
+ }
37
+ ),
38
+ /* @__PURE__ */ jsxRuntime.jsx(
39
+ button.Button,
40
+ {
41
+ type: "button",
42
+ size: "sm",
43
+ onClick: () => {
44
+ onRule({
45
+ name: [...selection.selectedKeys].sort(),
46
+ policy
47
+ });
48
+ selection.clear();
49
+ },
50
+ children: "Save strategy"
51
+ }
52
+ )
53
+ ] })
54
+ ] });
55
+ }
56
+ exports.ToolSelectionStrategyToolbar = ToolSelectionStrategyToolbar;
57
+ //# sourceMappingURL=ToolSchemaBrowser.selection-toolbar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.selection-toolbar.cjs","sources":["../../../src/data/ai/ToolSchemaBrowser.selection-toolbar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../components/SegmentedControl\";\nimport type { ListMenuSelection } from \"../../components/use-list-menu-selection\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolPolicy } from \"../chat/types\";\n\nconst POLICY_OPTIONS: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\" },\n { id: \"ask\", label: \"Ask\" },\n { id: \"deny\", label: \"Off\" },\n { id: \"allow\", label: \"On\" },\n];\n\nexport function ToolSelectionStrategyToolbar({\n selection,\n onRule,\n}: {\n selection: ListMenuSelection;\n onRule: (rule: PermissionRule) => void;\n}) {\n const [policy, setPolicy] = useState<ToolPolicy>(\"ask\");\n return (\n <div className=\"grid shrink-0 gap-1.5 border-b border-border bg-muted px-2 py-1.5\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">\n {selection.count} selected\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n Saves one grouped permission strategy\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <SegmentedControl\n aria-label=\"Selected tools policy\"\n value={policy}\n options={POLICY_OPTIONS}\n onChange={setPolicy}\n size=\"sm\"\n className=\"min-w-0 flex-1 justify-stretch\"\n />\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => {\n onRule({\n name: [...selection.selectedKeys].sort(),\n policy,\n });\n selection.clear();\n }}\n >\n Save strategy\n </Button>\n </div>\n </div>\n );\n}\n"],"names":["useState","jsxs","jsx","SegmentedControl","Button"],"mappings":";;;;;;AAUA,MAAM,iBAAgD;AAAA,EACpD,EAAE,IAAI,QAAQ,OAAO,OAAA;AAAA,EACrB,EAAE,IAAI,OAAO,OAAO,MAAA;AAAA,EACpB,EAAE,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB,EAAE,IAAI,SAAS,OAAO,KAAA;AACxB;AAEO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AACF,GAGG;AACD,QAAM,CAAC,QAAQ,SAAS,IAAIA,MAAAA,SAAqB,KAAK;AACtD,SACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,qEACb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2CACb,UAAA;AAAA,MAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,uBACb,UAAA;AAAA,QAAA,UAAU;AAAA,QAAM;AAAA,MAAA,GACnB;AAAA,MACAC,2BAAAA,IAAC,QAAA,EAAK,WAAU,qCAAoC,UAAA,wCAAA,CAEpD;AAAA,IAAA,GACF;AAAA,IACAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,MAAAC,2BAAAA;AAAAA,QAACC,iBAAAA;AAAAA,QAAA;AAAA,UACC,cAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU;AAAA,UACV,MAAK;AAAA,UACL,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZD,2BAAAA;AAAAA,QAACE,OAAAA;AAAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAS,MAAM;AACb,mBAAO;AAAA,cACL,MAAM,CAAC,GAAG,UAAU,YAAY,EAAE,KAAA;AAAA,cAClC;AAAA,YAAA,CACD;AACD,sBAAU,MAAA;AAAA,UACZ;AAAA,UACD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;;"}
@@ -0,0 +1,7 @@
1
+ import { ListMenuSelection } from '../../components/use-list-menu-selection';
2
+ import { PermissionRule } from '../chat/tool-policy';
3
+ export declare function ToolSelectionStrategyToolbar({ selection, onRule, }: {
4
+ selection: ListMenuSelection;
5
+ onRule: (rule: PermissionRule) => void;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=ToolSchemaBrowser.selection-toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.selection-toolbar.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolSchemaBrowser.selection-toolbar.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAU1D,wBAAgB,4BAA4B,CAAC,EAC3C,SAAS,EACT,MAAM,GACP,EAAE;IACD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CACxC,2CAqCA"}
@@ -0,0 +1,57 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Button } from "../../components/button.js";
4
+ import { SegmentedControl } from "../../components/SegmentedControl.js";
5
+ const POLICY_OPTIONS = [
6
+ { id: "auto", label: "Auto" },
7
+ { id: "ask", label: "Ask" },
8
+ { id: "deny", label: "Off" },
9
+ { id: "allow", label: "On" }
10
+ ];
11
+ function ToolSelectionStrategyToolbar({
12
+ selection,
13
+ onRule
14
+ }) {
15
+ const [policy, setPolicy] = useState("ask");
16
+ return /* @__PURE__ */ jsxs("div", { className: "grid shrink-0 gap-1.5 border-b border-border bg-muted px-2 py-1.5", children: [
17
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
18
+ /* @__PURE__ */ jsxs("span", { className: "text-xs font-medium", children: [
19
+ selection.count,
20
+ " selected"
21
+ ] }),
22
+ /* @__PURE__ */ jsx("span", { className: "text-[10px] text-muted-foreground", children: "Saves one grouped permission strategy" })
23
+ ] }),
24
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
25
+ /* @__PURE__ */ jsx(
26
+ SegmentedControl,
27
+ {
28
+ "aria-label": "Selected tools policy",
29
+ value: policy,
30
+ options: POLICY_OPTIONS,
31
+ onChange: setPolicy,
32
+ size: "sm",
33
+ className: "min-w-0 flex-1 justify-stretch"
34
+ }
35
+ ),
36
+ /* @__PURE__ */ jsx(
37
+ Button,
38
+ {
39
+ type: "button",
40
+ size: "sm",
41
+ onClick: () => {
42
+ onRule({
43
+ name: [...selection.selectedKeys].sort(),
44
+ policy
45
+ });
46
+ selection.clear();
47
+ },
48
+ children: "Save strategy"
49
+ }
50
+ )
51
+ ] })
52
+ ] });
53
+ }
54
+ export {
55
+ ToolSelectionStrategyToolbar
56
+ };
57
+ //# sourceMappingURL=ToolSchemaBrowser.selection-toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.selection-toolbar.js","sources":["../../../src/data/ai/ToolSchemaBrowser.selection-toolbar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../components/SegmentedControl\";\nimport type { ListMenuSelection } from \"../../components/use-list-menu-selection\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolPolicy } from \"../chat/types\";\n\nconst POLICY_OPTIONS: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\" },\n { id: \"ask\", label: \"Ask\" },\n { id: \"deny\", label: \"Off\" },\n { id: \"allow\", label: \"On\" },\n];\n\nexport function ToolSelectionStrategyToolbar({\n selection,\n onRule,\n}: {\n selection: ListMenuSelection;\n onRule: (rule: PermissionRule) => void;\n}) {\n const [policy, setPolicy] = useState<ToolPolicy>(\"ask\");\n return (\n <div className=\"grid shrink-0 gap-1.5 border-b border-border bg-muted px-2 py-1.5\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">\n {selection.count} selected\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n Saves one grouped permission strategy\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <SegmentedControl\n aria-label=\"Selected tools policy\"\n value={policy}\n options={POLICY_OPTIONS}\n onChange={setPolicy}\n size=\"sm\"\n className=\"min-w-0 flex-1 justify-stretch\"\n />\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => {\n onRule({\n name: [...selection.selectedKeys].sort(),\n policy,\n });\n selection.clear();\n }}\n >\n Save strategy\n </Button>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AAUA,MAAM,iBAAgD;AAAA,EACpD,EAAE,IAAI,QAAQ,OAAO,OAAA;AAAA,EACrB,EAAE,IAAI,OAAO,OAAO,MAAA;AAAA,EACpB,EAAE,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB,EAAE,IAAI,SAAS,OAAO,KAAA;AACxB;AAEO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AACF,GAGG;AACD,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAqB,KAAK;AACtD,SACE,qBAAC,OAAA,EAAI,WAAU,qEACb,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,2CACb,UAAA;AAAA,MAAA,qBAAC,QAAA,EAAK,WAAU,uBACb,UAAA;AAAA,QAAA,UAAU;AAAA,QAAM;AAAA,MAAA,GACnB;AAAA,MACA,oBAAC,QAAA,EAAK,WAAU,qCAAoC,UAAA,wCAAA,CAEpD;AAAA,IAAA,GACF;AAAA,IACA,qBAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,cAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU;AAAA,UACV,MAAK;AAAA,UACL,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAS,MAAM;AACb,mBAAO;AAAA,cACL,MAAM,CAAC,GAAG,UAAU,YAAY,EAAE,KAAA;AAAA,cAClC;AAAA,YAAA,CACD;AACD,sBAAU,MAAA;AAAA,UACZ;AAAA,UACD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}