@flanksource/clicky-ui 0.3.44 → 0.3.46

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 (537) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +4 -2
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +3 -1
  5. package/dist/components/MdxEditorField.cjs +40 -22
  6. package/dist/components/MdxEditorField.cjs.map +1 -1
  7. package/dist/components/MdxEditorField.d.ts.map +1 -1
  8. package/dist/components/MdxEditorField.js +41 -23
  9. package/dist/components/MdxEditorField.js.map +1 -1
  10. package/dist/components/json-schema-form-item-summary.cjs +6 -1
  11. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  12. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  13. package/dist/components/json-schema-form-item-summary.js +6 -1
  14. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  15. package/dist/data/AccessMark.cjs +23 -0
  16. package/dist/data/AccessMark.cjs.map +1 -0
  17. package/dist/data/AccessMark.d.ts +11 -0
  18. package/dist/data/AccessMark.d.ts.map +1 -0
  19. package/dist/data/AccessMark.js +23 -0
  20. package/dist/data/AccessMark.js.map +1 -0
  21. package/dist/data/CodeBlock.cjs +3 -2
  22. package/dist/data/CodeBlock.cjs.map +1 -1
  23. package/dist/data/CodeBlock.d.ts +3 -1
  24. package/dist/data/CodeBlock.d.ts.map +1 -1
  25. package/dist/data/CodeBlock.js +3 -2
  26. package/dist/data/CodeBlock.js.map +1 -1
  27. package/dist/data/CodeDiff.cjs +116 -23
  28. package/dist/data/CodeDiff.cjs.map +1 -1
  29. package/dist/data/CodeDiff.d.ts +26 -0
  30. package/dist/data/CodeDiff.d.ts.map +1 -1
  31. package/dist/data/CodeDiff.js +116 -23
  32. package/dist/data/CodeDiff.js.map +1 -1
  33. package/dist/data/GraphDiagram.cjs +75 -11
  34. package/dist/data/GraphDiagram.cjs.map +1 -1
  35. package/dist/data/GraphDiagram.d.ts +17 -2
  36. package/dist/data/GraphDiagram.d.ts.map +1 -1
  37. package/dist/data/GraphDiagram.js +76 -12
  38. package/dist/data/GraphDiagram.js.map +1 -1
  39. package/dist/data/GraphDiagramGroups.cjs +100 -0
  40. package/dist/data/GraphDiagramGroups.cjs.map +1 -0
  41. package/dist/data/GraphDiagramGroups.d.ts +24 -0
  42. package/dist/data/GraphDiagramGroups.d.ts.map +1 -0
  43. package/dist/data/GraphDiagramGroups.js +100 -0
  44. package/dist/data/GraphDiagramGroups.js.map +1 -0
  45. package/dist/data/GraphDiagramNodes.cjs +46 -51
  46. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  47. package/dist/data/GraphDiagramNodes.d.ts +8 -9
  48. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  49. package/dist/data/GraphDiagramNodes.js +46 -51
  50. package/dist/data/GraphDiagramNodes.js.map +1 -1
  51. package/dist/data/JsonView.cjs +118 -49
  52. package/dist/data/JsonView.cjs.map +1 -1
  53. package/dist/data/JsonView.d.ts +13 -10
  54. package/dist/data/JsonView.d.ts.map +1 -1
  55. package/dist/data/JsonView.js +118 -49
  56. package/dist/data/JsonView.js.map +1 -1
  57. package/dist/data/MarkdownEditor.cjs +2 -2
  58. package/dist/data/MarkdownEditor.cjs.map +1 -1
  59. package/dist/data/MarkdownEditor.js +2 -2
  60. package/dist/data/MarkdownEditor.js.map +1 -1
  61. package/dist/data/TreeNode.cjs +1 -1
  62. package/dist/data/TreeNode.cjs.map +1 -1
  63. package/dist/data/TreeNode.d.ts.map +1 -1
  64. package/dist/data/TreeNode.js +1 -1
  65. package/dist/data/TreeNode.js.map +1 -1
  66. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  67. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  68. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  69. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  70. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  71. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  72. package/dist/data/ai/ChatButton.cjs +2 -0
  73. package/dist/data/ai/ChatButton.cjs.map +1 -1
  74. package/dist/data/ai/ChatButton.d.ts +1 -1
  75. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  76. package/dist/data/ai/ChatButton.js +2 -0
  77. package/dist/data/ai/ChatButton.js.map +1 -1
  78. package/dist/data/ai/ChatFab.cjs +5 -1
  79. package/dist/data/ai/ChatFab.cjs.map +1 -1
  80. package/dist/data/ai/ChatFab.d.ts +5 -1
  81. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  82. package/dist/data/ai/ChatFab.js +5 -1
  83. package/dist/data/ai/ChatFab.js.map +1 -1
  84. package/dist/data/ai/ChatWindow.cjs +2 -8
  85. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  86. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  87. package/dist/data/ai/ChatWindow.js +2 -8
  88. package/dist/data/ai/ChatWindow.js.map +1 -1
  89. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  90. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  91. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  92. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  93. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  94. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  95. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  96. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  97. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  98. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  99. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  100. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  101. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  102. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  103. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  104. package/dist/data/ai/SessionViewer.cjs +13 -4
  105. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  106. package/dist/data/ai/SessionViewer.d.ts +5 -1
  107. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  108. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  109. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  110. package/dist/data/ai/SessionViewer.header.js +1 -1
  111. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  112. package/dist/data/ai/SessionViewer.js +13 -4
  113. package/dist/data/ai/SessionViewer.js.map +1 -1
  114. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  115. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  116. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  117. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  118. package/dist/data/ai/SessionViewer.model.js +2 -0
  119. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  120. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  121. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  122. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  123. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.rows.js +41 -27
  125. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  127. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  128. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  129. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  130. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  131. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  132. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  133. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  134. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  135. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  136. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  137. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  138. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  139. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  140. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  141. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  142. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  143. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  144. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  145. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  146. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  147. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  148. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  149. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  150. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  151. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  152. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  153. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  154. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  155. package/dist/data/ai/SessionViewerMenu.js +18 -1
  156. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  157. package/dist/data/ai/ToolPreferences.cjs +149 -143
  158. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  159. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  160. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  161. package/dist/data/ai/ToolPreferences.js +151 -146
  162. package/dist/data/ai/ToolPreferences.js.map +1 -1
  163. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  164. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  165. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  166. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  167. package/dist/data/ai/ToolPreferences.model.js +15 -11
  168. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  169. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  170. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  171. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  172. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  173. package/dist/data/ai/ToolPreferencesList.js +2 -1
  174. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  175. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  176. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  177. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  178. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  179. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  180. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  181. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  182. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  183. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  184. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  185. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  186. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  187. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  188. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  189. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  190. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  191. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  192. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  193. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  194. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  195. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  196. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  197. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  198. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  199. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  200. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  201. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  202. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  203. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  204. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  205. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  206. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  207. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  208. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  209. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  210. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  211. package/dist/data/ai/index.d.ts +2 -2
  212. package/dist/data/ai/index.d.ts.map +1 -1
  213. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  214. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  215. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  216. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  217. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  218. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  219. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  220. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  221. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  222. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  223. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  224. package/dist/data/ai/use-session-token-sizing.js +73 -0
  225. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  226. package/dist/data/call-graph/CallGraph.cjs +269 -0
  227. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  228. package/dist/data/call-graph/CallGraph.d.ts +78 -0
  229. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  230. package/dist/data/call-graph/CallGraph.js +269 -0
  231. package/dist/data/call-graph/CallGraph.js.map +1 -0
  232. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  233. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  234. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  235. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  236. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  237. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  238. package/dist/data/call-graph/CallGraphMembers.cjs +51 -0
  239. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  240. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  241. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  242. package/dist/data/call-graph/CallGraphMembers.js +51 -0
  243. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  244. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  245. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  246. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  247. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  248. package/dist/data/call-graph/CallGraphParts.js +204 -0
  249. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  250. package/dist/data/call-graph/CallGraphToolbar.cjs +198 -0
  251. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  252. package/dist/data/call-graph/CallGraphToolbar.d.ts +55 -0
  253. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  254. package/dist/data/call-graph/CallGraphToolbar.js +198 -0
  255. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  256. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  257. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  258. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  259. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  260. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  261. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  262. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  263. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  264. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  265. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  266. package/dist/data/call-graph/call-graph-labels.js +96 -0
  267. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  268. package/dist/data/call-graph/call-graph-model.cjs +312 -0
  269. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  270. package/dist/data/call-graph/call-graph-model.d.ts +138 -0
  271. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  272. package/dist/data/call-graph/call-graph-model.js +312 -0
  273. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  274. package/dist/data/call-graph/call-graph-vocabulary.cjs +195 -0
  275. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  276. package/dist/data/call-graph/call-graph-vocabulary.d.ts +76 -0
  277. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  278. package/dist/data/call-graph/call-graph-vocabulary.js +195 -0
  279. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  280. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  281. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  282. package/dist/data/call-graph/index.d.ts +7 -0
  283. package/dist/data/call-graph/index.d.ts.map +1 -0
  284. package/dist/data/call-graph/types.cjs +5 -0
  285. package/dist/data/call-graph/types.cjs.map +1 -0
  286. package/dist/data/call-graph/types.d.ts +140 -0
  287. package/dist/data/call-graph/types.d.ts.map +1 -0
  288. package/dist/data/call-graph/types.js +5 -0
  289. package/dist/data/call-graph/types.js.map +1 -0
  290. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  291. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  292. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  293. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  294. package/dist/data/call-graph/use-call-graph.js +93 -0
  295. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  296. package/dist/data/chat/Chat.cjs +39 -15
  297. package/dist/data/chat/Chat.cjs.map +1 -1
  298. package/dist/data/chat/Chat.d.ts.map +1 -1
  299. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  300. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  301. package/dist/data/chat/Chat.fixtures.js +2 -2
  302. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  303. package/dist/data/chat/Chat.js +40 -16
  304. package/dist/data/chat/Chat.js.map +1 -1
  305. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  306. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  307. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  308. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  309. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  310. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  311. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  312. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  313. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  314. package/dist/data/chat/ContextMeter.bar.js +5 -8
  315. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  316. package/dist/data/chat/ContextMeter.cjs +18 -19
  317. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  318. package/dist/data/chat/ContextMeter.d.ts +1 -1
  319. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  320. package/dist/data/chat/ContextMeter.js +18 -19
  321. package/dist/data/chat/ContextMeter.js.map +1 -1
  322. package/dist/data/chat/Conversation.cjs +2 -1
  323. package/dist/data/chat/Conversation.cjs.map +1 -1
  324. package/dist/data/chat/Conversation.d.ts +4 -1
  325. package/dist/data/chat/Conversation.d.ts.map +1 -1
  326. package/dist/data/chat/Conversation.js +2 -1
  327. package/dist/data/chat/Conversation.js.map +1 -1
  328. package/dist/data/chat/Message.cjs +39 -12
  329. package/dist/data/chat/Message.cjs.map +1 -1
  330. package/dist/data/chat/Message.d.ts +1 -1
  331. package/dist/data/chat/Message.d.ts.map +1 -1
  332. package/dist/data/chat/Message.js +40 -13
  333. package/dist/data/chat/Message.js.map +1 -1
  334. package/dist/data/chat/ToolCall.cjs +60 -5
  335. package/dist/data/chat/ToolCall.cjs.map +1 -1
  336. package/dist/data/chat/ToolCall.d.ts +7 -2
  337. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  338. package/dist/data/chat/ToolCall.js +60 -5
  339. package/dist/data/chat/ToolCall.js.map +1 -1
  340. package/dist/data/chat/approval.cjs.map +1 -1
  341. package/dist/data/chat/approval.d.ts +2 -2
  342. package/dist/data/chat/approval.d.ts.map +1 -1
  343. package/dist/data/chat/approval.js.map +1 -1
  344. package/dist/data/chat/tool-policy.cjs +59 -2
  345. package/dist/data/chat/tool-policy.cjs.map +1 -1
  346. package/dist/data/chat/tool-policy.d.ts +9 -0
  347. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  348. package/dist/data/chat/tool-policy.js +59 -2
  349. package/dist/data/chat/tool-policy.js.map +1 -1
  350. package/dist/data/chat/types.cjs +6 -0
  351. package/dist/data/chat/types.cjs.map +1 -1
  352. package/dist/data/chat/types.d.ts +13 -4
  353. package/dist/data/chat/types.d.ts.map +1 -1
  354. package/dist/data/chat/types.js +7 -1
  355. package/dist/data/chat/types.js.map +1 -1
  356. package/dist/data/chat/usage-snapshot.cjs +11 -6
  357. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  358. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  359. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  360. package/dist/data/chat/usage-snapshot.js +11 -6
  361. package/dist/data/chat/usage-snapshot.js.map +1 -1
  362. package/dist/data/data-access.cjs +8 -0
  363. package/dist/data/data-access.cjs.map +1 -0
  364. package/dist/data/data-access.d.ts +5 -0
  365. package/dist/data/data-access.d.ts.map +1 -0
  366. package/dist/data/data-access.js +8 -0
  367. package/dist/data/data-access.js.map +1 -0
  368. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  369. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  370. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  371. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  372. package/dist/data/git/GitChangeList.cjs +6 -2
  373. package/dist/data/git/GitChangeList.cjs.map +1 -1
  374. package/dist/data/git/GitChangeList.d.ts +6 -1
  375. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  376. package/dist/data/git/GitChangeList.js +6 -2
  377. package/dist/data/git/GitChangeList.js.map +1 -1
  378. package/dist/data/graph-columns-layout.cjs +61 -14
  379. package/dist/data/graph-columns-layout.cjs.map +1 -1
  380. package/dist/data/graph-columns-layout.d.ts +42 -0
  381. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  382. package/dist/data/graph-columns-layout.js +61 -14
  383. package/dist/data/graph-columns-layout.js.map +1 -1
  384. package/dist/data/graph-diagram-model.cjs +5 -0
  385. package/dist/data/graph-diagram-model.cjs.map +1 -1
  386. package/dist/data/graph-diagram-model.d.ts +24 -0
  387. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  388. package/dist/data/graph-diagram-model.js +5 -0
  389. package/dist/data/graph-diagram-model.js.map +1 -1
  390. package/dist/data/graph-edge-routing.cjs +9 -3
  391. package/dist/data/graph-edge-routing.cjs.map +1 -1
  392. package/dist/data/graph-edge-routing.d.ts +2 -0
  393. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  394. package/dist/data/graph-edge-routing.js +9 -3
  395. package/dist/data/graph-edge-routing.js.map +1 -1
  396. package/dist/data/graph-group-window.cjs +60 -0
  397. package/dist/data/graph-group-window.cjs.map +1 -0
  398. package/dist/data/graph-group-window.d.ts +33 -0
  399. package/dist/data/graph-group-window.d.ts.map +1 -0
  400. package/dist/data/graph-group-window.js +60 -0
  401. package/dist/data/graph-group-window.js.map +1 -0
  402. package/dist/data/json-view/JsonSource.cjs +84 -0
  403. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  404. package/dist/data/json-view/JsonSource.d.ts +7 -0
  405. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  406. package/dist/data/json-view/JsonSource.js +84 -0
  407. package/dist/data/json-view/JsonSource.js.map +1 -0
  408. package/dist/data/json-view/parse-prefix.cjs +132 -0
  409. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  410. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  411. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  412. package/dist/data/json-view/parse-prefix.js +132 -0
  413. package/dist/data/json-view/parse-prefix.js.map +1 -0
  414. package/dist/data/json-view/parse-source.cjs +62 -0
  415. package/dist/data/json-view/parse-source.cjs.map +1 -0
  416. package/dist/data/json-view/parse-source.d.ts +16 -0
  417. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  418. package/dist/data/json-view/parse-source.js +62 -0
  419. package/dist/data/json-view/parse-source.js.map +1 -0
  420. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  421. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  422. package/dist/data/json-view/types.d.ts +14 -0
  423. package/dist/data/json-view/types.d.ts.map +1 -0
  424. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  425. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  426. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  427. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  429. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  430. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  431. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  432. package/dist/data/runtime/RuntimeBar.js +2 -5
  433. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  434. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  435. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  436. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  437. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  438. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  439. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  440. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  441. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  442. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  443. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  444. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  445. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  446. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  447. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  448. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  449. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  450. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  451. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  452. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  453. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  454. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  455. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  456. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  457. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  458. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  459. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  460. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  461. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  462. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  463. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  464. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  465. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  466. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  467. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  468. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  469. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  470. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  471. package/dist/data/use-group-windows.cjs +50 -0
  472. package/dist/data/use-group-windows.cjs.map +1 -0
  473. package/dist/data/use-group-windows.d.ts +27 -0
  474. package/dist/data/use-group-windows.d.ts.map +1 -0
  475. package/dist/data/use-group-windows.js +50 -0
  476. package/dist/data/use-group-windows.js.map +1 -0
  477. package/dist/data/use-pan-zoom.cjs +23 -10
  478. package/dist/data/use-pan-zoom.cjs.map +1 -1
  479. package/dist/data/use-pan-zoom.d.ts +16 -2
  480. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  481. package/dist/data/use-pan-zoom.js +23 -10
  482. package/dist/data/use-pan-zoom.js.map +1 -1
  483. package/dist/data/version-info.cjs +3 -3
  484. package/dist/data/version-info.js +3 -3
  485. package/dist/data.cjs +36 -2
  486. package/dist/data.cjs.map +1 -1
  487. package/dist/data.d.ts +5 -2
  488. package/dist/data.d.ts.map +1 -1
  489. package/dist/data.js +35 -1
  490. package/dist/data.js.map +1 -1
  491. package/dist/hooks/event-hub.cjs +229 -0
  492. package/dist/hooks/event-hub.cjs.map +1 -0
  493. package/dist/hooks/event-hub.d.ts +26 -0
  494. package/dist/hooks/event-hub.d.ts.map +1 -0
  495. package/dist/hooks/event-hub.js +229 -0
  496. package/dist/hooks/event-hub.js.map +1 -0
  497. package/dist/hooks.cjs +2 -0
  498. package/dist/hooks.cjs.map +1 -1
  499. package/dist/hooks.d.ts +1 -0
  500. package/dist/hooks.d.ts.map +1 -1
  501. package/dist/hooks.js +2 -0
  502. package/dist/hooks.js.map +1 -1
  503. package/dist/index.cjs +40 -4
  504. package/dist/index.cjs.map +1 -1
  505. package/dist/index.js +37 -1
  506. package/dist/index.js.map +1 -1
  507. package/dist/layout/Workspace.cjs +13 -4
  508. package/dist/layout/Workspace.cjs.map +1 -1
  509. package/dist/layout/Workspace.d.ts +7 -2
  510. package/dist/layout/Workspace.d.ts.map +1 -1
  511. package/dist/layout/Workspace.js +13 -4
  512. package/dist/layout/Workspace.js.map +1 -1
  513. package/dist/lib/permission-strategies.cjs +71 -11
  514. package/dist/lib/permission-strategies.cjs.map +1 -1
  515. package/dist/lib/permission-strategies.d.ts +3 -0
  516. package/dist/lib/permission-strategies.d.ts.map +1 -1
  517. package/dist/lib/permission-strategies.js +71 -11
  518. package/dist/lib/permission-strategies.js.map +1 -1
  519. package/dist/overlay/modalStack.cjs +13 -6
  520. package/dist/overlay/modalStack.cjs.map +1 -1
  521. package/dist/overlay/modalStack.d.ts.map +1 -1
  522. package/dist/overlay/modalStack.js +13 -6
  523. package/dist/overlay/modalStack.js.map +1 -1
  524. package/dist/styles.css +1 -1
  525. package/package.json +5 -3
  526. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  527. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  528. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  529. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  530. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  531. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  532. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  533. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  534. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  535. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  536. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  537. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ToolSchemaBrowser.sidebar.js","sources":["../../../src/data/ai/ToolSchemaBrowser.sidebar.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { SegmentedControl } from \"../../components/SegmentedControl\";\nimport {\n ListMenu,\n ListMenuHeader,\n ListMenuItem,\n ListMenuSection,\n} from \"../../components/ListMenu\";\nimport type { ListMenuSelection } from \"../../components/use-list-menu-selection\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { cn } from \"../../lib/utils\";\nimport {\n UiEye,\n UiFilter,\n UiGlobe,\n UiLayers,\n UiListDashes,\n UiRepeat,\n UiSearch,\n UiWarningTriangle,\n UiWrench,\n} from \"../../icons\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport { ToolDirectoryHeader } from \"./ToolSchemaBrowser.directory-header\";\nimport { ToolSelectionStrategyToolbar } from \"./ToolSchemaBrowser.selection-toolbar\";\nimport {\n TOOL_HINTS,\n directoryPermissionRule,\n selectedToolState,\n updateSelectedTools,\n type ToolHintFilter,\n type ToolHintFilters,\n type ToolHintKey,\n type ToolSchemaViewMode,\n type ToolSection,\n} from \"./ToolSchemaBrowser.model\";\n\nexport function ToolSchemaBrowserSidebar({\n query,\n view,\n filters,\n sections,\n active,\n filteredCount,\n isOpen,\n selection,\n value,\n onRule,\n onQueryChange,\n onViewChange,\n onFilterChange,\n onClearFilters,\n onToggle,\n onSelect,\n}: {\n query: string;\n view: ToolSchemaViewMode;\n filters: ToolHintFilters;\n sections: ToolSection[];\n active: ToolMeta | undefined;\n filteredCount: number;\n isOpen: (key: string) => boolean;\n selection?: ListMenuSelection | undefined;\n value: Record<string, ToolPolicy> | undefined;\n onRule: ((rule: PermissionRule) => void) | undefined;\n onQueryChange: (query: string) => void;\n onViewChange: (view: ToolSchemaViewMode) => void;\n onFilterChange: (key: ToolHintKey, value: ToolHintFilter) => void;\n onClearFilters: () => void;\n onToggle: (key: string) => void;\n onSelect: (name: string) => void;\n}) {\n const selected = selection?.selected ?? new Set<string>();\n const activeFilterCount = Object.values(filters).filter(\n (filter) => filter !== \"any\",\n ).length;\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 <DropdownMenu\n align=\"right\"\n menuLabel=\"Tool annotation filters\"\n menuClassName=\"w-72 p-2\"\n className=\"ml-auto\"\n trigger={\n <span className=\"relative inline-flex\">\n <IconButton\n icon={UiFilter}\n label={\n activeFilterCount > 0\n ? `Filter tool annotations, ${activeFilterCount} active`\n : \"Filter tool annotations\"\n }\n className={cn(\n activeFilterCount > 0 && \"bg-primary/10 text-primary\",\n )}\n />\n {activeFilterCount > 0 && (\n <span className=\"pointer-events-none absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-primary text-[9px] font-bold text-primary-foreground\">\n {activeFilterCount}\n </span>\n )}\n </span>\n }\n >\n {() => (\n <div className=\"space-y-density-2\">\n <div className=\"flex items-center justify-between gap-density-2\">\n <span className=\"text-xs font-semibold\">Tool annotations</span>\n <button\n type=\"button\"\n disabled={activeFilterCount === 0}\n onClick={onClearFilters}\n className=\"text-[10px] font-medium text-primary disabled:text-muted-foreground\"\n >\n Clear all\n </button>\n </div>\n {TOOL_HINTS.map(({ key, label }) => (\n <div key={key} className=\"space-y-1\">\n <span className=\"flex items-center gap-1 text-[10px] font-medium text-muted-foreground\">\n <Icon\n icon={hintFilterIcon(key)}\n className={cn(\"size-3\", hintIconClass(key))}\n />\n {label}\n </span>\n <SegmentedControl<ToolHintFilter>\n aria-label={label}\n value={filters[key]}\n onChange={(next) => onFilterChange(key, next)}\n size=\"sm\"\n className=\"w-full\"\n options={[\n { id: \"any\", label: \"Any\" },\n { id: \"yes\", label: \"Yes\" },\n { id: \"no\", label: \"No\" },\n ]}\n />\n </div>\n ))}\n </div>\n )}\n </DropdownMenu>\n </div>\n {selection && onRule && selection.count > 0 && (\n <ToolSelectionStrategyToolbar\n selection={selection}\n onRule={onRule}\n />\n )}\n <ListMenu\n className=\"min-h-0 flex-1 overflow-y-auto divide-y-0\"\n {...(selection ? { selection } : {})}\n >\n {sections.map((section) => {\n const sectionKey = `p:${section.label}`;\n const sectionOpen = isOpen(sectionKey);\n const sectionTools = section.children.flatMap((child) => child.tools);\n const sectionNames = sectionTools.map((tool) => tool.name);\n const sectionState = selectedToolState(selected, sectionNames);\n return (\n <ListMenuSection key={sectionKey}>\n <ListMenuHeader className=\"px-0 py-0\">\n {selection && (\n <SelectionCheckbox\n label={`Select all visible tools in ${section.label}`}\n checked={sectionState.checked}\n mixed={sectionState.mixed}\n onChange={() =>\n selection.set(\n updateSelectedTools(\n selection.selectedKeys,\n sectionNames,\n ),\n )\n }\n />\n )}\n <ToolDirectoryHeader\n label={section.label}\n count={section.count}\n open={sectionOpen}\n variant=\"section\"\n onToggle={() => onToggle(sectionKey)}\n {...(onRule\n ? {\n onAdd: () =>\n onRule(\n directoryPermissionRule({\n tools: sectionTools,\n view,\n depth: \"section\",\n }),\n ),\n }\n : {})}\n />\n </ListMenuHeader>\n {sectionOpen &&\n section.children.map((child) => {\n const childKey = `s:${section.label}///${child.label}`;\n const childOpen = isOpen(childKey);\n const childNames = child.tools.map((tool) => tool.name);\n const childState = selectedToolState(selected, childNames);\n return (\n <div key={childKey}>\n <div className=\"flex items-center border-b border-border bg-background pl-2\">\n {selection && (\n <SelectionCheckbox\n label={`Select all visible tools in ${child.label}`}\n checked={childState.checked}\n mixed={childState.mixed}\n onChange={() =>\n selection.set(\n updateSelectedTools(\n selection.selectedKeys,\n childNames,\n ),\n )\n }\n />\n )}\n <ToolDirectoryHeader\n label={child.label}\n count={child.tools.length}\n open={childOpen}\n variant=\"child\"\n onToggle={() => onToggle(childKey)}\n {...(onRule\n ? {\n onAdd: () =>\n onRule(\n directoryPermissionRule({\n tools: child.tools,\n view,\n depth: \"child\",\n }),\n ),\n }\n : {})}\n />\n </div>\n {childOpen &&\n child.tools.map((tool) => (\n <ToolSidebarRow\n key={tool.name}\n tool={tool}\n active={active?.name === tool.name}\n policy={value?.[tool.name]}\n selectable={selection !== undefined}\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 policy,\n selectable,\n onSelect,\n}: {\n tool: ToolMeta;\n active: boolean;\n policy: ToolPolicy | undefined;\n selectable: boolean;\n onSelect: () => void;\n}) {\n return (\n <ListMenuItem\n active={active}\n role=\"button\"\n tabIndex={0}\n aria-selected={active}\n aria-label={tool.label || tool.name}\n className={cn(\"px-2 py-2\", selectable ? \"pl-4\" : \"pl-6\")}\n onClick={onSelect}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onSelect();\n }\n }}\n {...(selectable\n ? {\n itemKey: tool.name,\n checkboxLabel: `Select ${tool.label || tool.name}`,\n }\n : {})}\n >\n <div className=\"grid grid-cols-[1rem_minmax(0,1fr)_auto] items-center gap-2\">\n {tool.icon ? (\n <Icon name={tool.icon} className=\"size-3.5 text-muted-foreground\" />\n ) : (\n <Icon icon={UiWrench} className=\"size-3.5 text-muted-foreground\" />\n )}\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {tool.label || tool.name}\n </span>\n <div className=\"flex items-center gap-1\">\n <ToolHintIcons tool={tool} />\n {policy && (\n <span className=\"rounded bg-muted px-1 py-0.5 text-[9px] font-medium capitalize text-muted-foreground\">\n {policy === \"allow\" ? \"On\" : policy === \"deny\" ? \"Off\" : policy}\n </span>\n )}\n </div>\n </div>\n </ListMenuItem>\n );\n}\n\nfunction ToolHintIcons({ tool }: { tool: ToolMeta }) {\n const hints = [\n [\n tool.annotations?.readOnlyHint,\n \"Read only tool\",\n UiEye,\n \"text-emerald-600\",\n ],\n [\n tool.annotations?.destructiveHint,\n \"Destructive tool\",\n UiWarningTriangle,\n \"text-red-600\",\n ],\n [\n tool.annotations?.idempotentHint,\n \"Idempotent tool\",\n UiRepeat,\n \"text-sky-600\",\n ],\n [\n tool.annotations?.openWorldHint,\n \"Open world tool\",\n UiGlobe,\n \"text-violet-600\",\n ],\n ] as const;\n return hints.flatMap(([enabled, label, icon, className]) =>\n enabled\n ? [\n <span key={label} role=\"img\" aria-label={label} title={label}>\n <Icon icon={icon} className={cn(\"size-3\", className)} />\n </span>,\n ]\n : [],\n );\n}\n\nfunction SelectionCheckbox({\n label,\n checked,\n mixed,\n onChange,\n}: {\n label: string;\n checked: boolean;\n mixed: boolean;\n onChange: () => void;\n}) {\n const ref = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (ref.current) ref.current.indeterminate = mixed;\n }, [mixed]);\n return (\n <input\n ref={ref}\n type=\"checkbox\"\n checked={checked}\n aria-label={label}\n onChange={onChange}\n className=\"ml-2 size-3.5 shrink-0 rounded border-input\"\n />\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 hintFilterIcon(key: ToolHintKey): StaticIconComponent {\n if (key === \"readOnlyHint\") return UiEye;\n if (key === \"destructiveHint\") return UiWarningTriangle;\n if (key === \"idempotentHint\") return UiRepeat;\n return UiGlobe;\n}\n\nfunction hintIconClass(key: ToolHintKey): string {\n if (key === \"readOnlyHint\") return \"text-emerald-600\";\n if (key === \"destructiveHint\") return \"text-red-600\";\n if (key === \"idempotentHint\") return \"text-sky-600\";\n return \"text-violet-600\";\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ToolSchemaBrowser.sidebar.js","sources":["../../../src/data/ai/ToolSchemaBrowser.sidebar.tsx"],"sourcesContent":["import { IconButton } from \"../../components/IconButton\";\nimport { SegmentedControl } from \"../../components/SegmentedControl\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { cn } from \"../../lib/utils\";\nimport {\n UiEye,\n UiFilter,\n UiGlobe,\n UiLayers,\n UiListDashes,\n UiRepeat,\n UiSearch,\n UiWarningTriangle,\n} from \"../../icons\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport { ToolPolicyTree } from \"./ToolSchemaBrowser.tree\";\nimport {\n TOOL_HINTS,\n type ToolHintFilter,\n type ToolHintFilters,\n type ToolHintKey,\n type ToolSchemaViewMode,\n type ToolSection,\n} from \"./ToolSchemaBrowser.model\";\n\nexport function ToolSchemaBrowserSidebar({\n query,\n view,\n filters,\n sections,\n active,\n filteredCount,\n isOpen,\n value,\n onRule,\n onQueryChange,\n onViewChange,\n onFilterChange,\n onClearFilters,\n onToggle,\n onSelect,\n}: {\n query: string;\n view: ToolSchemaViewMode;\n filters: ToolHintFilters;\n sections: ToolSection[];\n active: ToolMeta | undefined;\n filteredCount: number;\n isOpen: (key: string) => boolean;\n value: Record<string, ToolPolicy> | undefined;\n onRule: ((rule: PermissionRule) => void) | undefined;\n onQueryChange: (query: string) => void;\n onViewChange: (view: ToolSchemaViewMode) => void;\n onFilterChange: (key: ToolHintKey, value: ToolHintFilter) => void;\n onClearFilters: () => void;\n onToggle: (key: string) => void;\n onSelect: (name: string) => void;\n}) {\n const activeFilterCount = Object.values(filters).filter(\n (filter) => filter !== \"any\",\n ).length;\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 <DropdownMenu\n align=\"right\"\n menuLabel=\"Tool annotation filters\"\n menuClassName=\"w-72 p-2\"\n className=\"ml-auto\"\n trigger={\n <span className=\"relative inline-flex\">\n <IconButton\n icon={UiFilter}\n label={\n activeFilterCount > 0\n ? `Filter tool annotations, ${activeFilterCount} active`\n : \"Filter tool annotations\"\n }\n className={cn(\n activeFilterCount > 0 && \"bg-primary/10 text-primary\",\n )}\n />\n {activeFilterCount > 0 && (\n <span className=\"pointer-events-none absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-primary text-[9px] font-bold text-primary-foreground\">\n {activeFilterCount}\n </span>\n )}\n </span>\n }\n >\n {() => (\n <div className=\"space-y-density-2\">\n <div className=\"flex items-center justify-between gap-density-2\">\n <span className=\"text-xs font-semibold\">Tool annotations</span>\n <button\n type=\"button\"\n disabled={activeFilterCount === 0}\n onClick={onClearFilters}\n className=\"text-[10px] font-medium text-primary disabled:text-muted-foreground\"\n >\n Clear all\n </button>\n </div>\n {TOOL_HINTS.map(({ key, label }) => (\n <div key={key} className=\"space-y-1\">\n <span className=\"flex items-center gap-1 text-[10px] font-medium text-muted-foreground\">\n <Icon\n icon={hintFilterIcon(key)}\n className={cn(\"size-3\", hintIconClass(key))}\n />\n {label}\n </span>\n <SegmentedControl<ToolHintFilter>\n aria-label={label}\n value={filters[key]}\n onChange={(next) => onFilterChange(key, next)}\n size=\"sm\"\n className=\"w-full\"\n options={[\n { id: \"any\", label: \"Any\" },\n { id: \"yes\", label: \"Yes\" },\n { id: \"no\", label: \"No\" },\n ]}\n />\n </div>\n ))}\n </div>\n )}\n </DropdownMenu>\n </div>\n <ToolPolicyTree\n sections={filteredCount === 0 ? [] : sections}\n view={view}\n value={value}\n onRule={onRule}\n isOpen={isOpen}\n onToggle={onToggle}\n activeName={active?.name}\n onSelect={onSelect}\n className=\"min-h-0 flex-1 overflow-y-auto\"\n />\n </>\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 hintFilterIcon(key: ToolHintKey): StaticIconComponent {\n if (key === \"readOnlyHint\") return UiEye;\n if (key === \"destructiveHint\") return UiWarningTriangle;\n if (key === \"idempotentHint\") return UiRepeat;\n return UiGlobe;\n}\n\nfunction hintIconClass(key: ToolHintKey): string {\n if (key === \"readOnlyHint\") return \"text-emerald-600\";\n if (key === \"destructiveHint\") return \"text-red-600\";\n if (key === \"idempotentHint\") return \"text-sky-600\";\n return \"text-violet-600\";\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
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 Icon = require("../Icon.cjs");
6
+ const PermissionStrategiesEditor = require("./runtime-profiles/PermissionStrategiesEditor.cjs");
7
+ const UiChevronDown = require("../../icons/components/UiChevronDown.cjs");
8
+ const UiChevronRight = require("../../icons/components/UiChevronRight.cjs");
9
+ function ToolPermissionStrategies({
10
+ rules,
11
+ tools,
12
+ onRulesChange
13
+ }) {
14
+ const [open, setOpen] = react.useState(false);
15
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "shrink-0 rounded-md border border-border bg-background", children: [
16
+ /* @__PURE__ */ jsxRuntime.jsxs(
17
+ "button",
18
+ {
19
+ type: "button",
20
+ "aria-expanded": open,
21
+ onClick: () => setOpen((current) => !current),
22
+ className: "flex w-full items-center gap-2 px-2 py-1.5 text-left text-xs font-medium hover:bg-muted",
23
+ children: [
24
+ /* @__PURE__ */ jsxRuntime.jsx(
25
+ Icon.Icon,
26
+ {
27
+ icon: open ? UiChevronDown.UiChevronDown : UiChevronRight.UiChevronRight,
28
+ className: "size-3 text-muted-foreground"
29
+ }
30
+ ),
31
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children: "Permission strategies" }),
32
+ /* @__PURE__ */ jsxRuntime.jsx(
33
+ "span",
34
+ {
35
+ "aria-label": `${rules.length} saved strategies`,
36
+ className: "rounded bg-muted px-1.5 text-[10px] tabular-nums text-muted-foreground",
37
+ children: rules.length
38
+ }
39
+ )
40
+ ]
41
+ }
42
+ ),
43
+ open && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-[40vh] overflow-y-auto border-t border-border p-2", children: /* @__PURE__ */ jsxRuntime.jsx(
44
+ PermissionStrategiesEditor.PermissionStrategiesEditor,
45
+ {
46
+ value: rules,
47
+ tools,
48
+ onChange: onRulesChange
49
+ }
50
+ ) })
51
+ ] });
52
+ }
53
+ exports.ToolPermissionStrategies = ToolPermissionStrategies;
54
+ //# sourceMappingURL=ToolSchemaBrowser.strategies.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.strategies.cjs","sources":["../../../src/data/ai/ToolSchemaBrowser.strategies.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { UiChevronDown, UiChevronRight } from \"../../icons\";\nimport { Icon } from \"../Icon\";\nimport type { PermissionPolicy } from \"../chat/tool-policy\";\nimport type { ToolMeta } from \"../chat/types\";\nimport { PermissionStrategiesEditor } from \"./runtime-profiles/PermissionStrategiesEditor\";\n\n/** The saved rule list, always present but collapsed to a count until opened. */\nexport function ToolPermissionStrategies({\n rules,\n tools,\n onRulesChange,\n}: {\n rules: PermissionPolicy;\n tools: ToolMeta[];\n onRulesChange: (rules: PermissionPolicy) => void;\n}) {\n const [open, setOpen] = useState(false);\n return (\n <div className=\"shrink-0 rounded-md border border-border bg-background\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((current) => !current)}\n className=\"flex w-full items-center gap-2 px-2 py-1.5 text-left text-xs font-medium hover:bg-muted\"\n >\n <Icon\n icon={open ? UiChevronDown : UiChevronRight}\n className=\"size-3 text-muted-foreground\"\n />\n <span className=\"flex-1\">Permission strategies</span>\n <span\n aria-label={`${rules.length} saved strategies`}\n className=\"rounded bg-muted px-1.5 text-[10px] tabular-nums text-muted-foreground\"\n >\n {rules.length}\n </span>\n </button>\n {open && (\n <div className=\"max-h-[40vh] overflow-y-auto border-t border-border p-2\">\n <PermissionStrategiesEditor\n value={rules}\n tools={tools}\n onChange={onRulesChange}\n />\n </div>\n )}\n </div>\n );\n}\n"],"names":["useState","jsxs","jsx","Icon","UiChevronDown","UiChevronRight","PermissionStrategiesEditor"],"mappings":";;;;;;;;AAQO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,MAAM,OAAO,IAAIA,MAAAA,SAAS,KAAK;AACtC,SACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,0DACb,UAAA;AAAA,IAAAA,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,iBAAe;AAAA,QACf,SAAS,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO;AAAA,QAC5C,WAAU;AAAA,QAEV,UAAA;AAAA,UAAAC,2BAAAA;AAAAA,YAACC,KAAAA;AAAAA,YAAA;AAAA,cACC,MAAM,OAAOC,cAAAA,gBAAgBC,eAAAA;AAAAA,cAC7B,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAEZH,2BAAAA,IAAC,QAAA,EAAK,WAAU,UAAS,UAAA,yBAAqB;AAAA,UAC9CA,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,cAAY,GAAG,MAAM,MAAM;AAAA,cAC3B,WAAU;AAAA,cAET,UAAA,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,QACT;AAAA,MAAA;AAAA,IAAA;AAAA,IAED,QACCA,2BAAAA,IAAC,OAAA,EAAI,WAAU,2DACb,UAAAA,2BAAAA;AAAAA,MAACI,2BAAAA;AAAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA,UAAU;AAAA,MAAA;AAAA,IAAA,EACZ,CACF;AAAA,EAAA,GAEJ;AAEJ;;"}
@@ -0,0 +1,9 @@
1
+ import { PermissionPolicy } from '../chat/tool-policy.js';
2
+ import { ToolMeta } from '../chat/types.js';
3
+ /** The saved rule list, always present but collapsed to a count until opened. */
4
+ export declare function ToolPermissionStrategies({ rules, tools, onRulesChange, }: {
5
+ rules: PermissionPolicy;
6
+ tools: ToolMeta[];
7
+ onRulesChange: (rules: PermissionPolicy) => void;
8
+ }): import("react").JSX.Element;
9
+ //# sourceMappingURL=ToolSchemaBrowser.strategies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.strategies.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolSchemaBrowser.strategies.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,KAAK,EACL,aAAa,GACd,EAAE;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,aAAa,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAClD,+BAiCA"}
@@ -0,0 +1,54 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Icon } from "../Icon.js";
4
+ import { PermissionStrategiesEditor } from "./runtime-profiles/PermissionStrategiesEditor.js";
5
+ import { UiChevronDown } from "../../icons/components/UiChevronDown.js";
6
+ import { UiChevronRight } from "../../icons/components/UiChevronRight.js";
7
+ function ToolPermissionStrategies({
8
+ rules,
9
+ tools,
10
+ onRulesChange
11
+ }) {
12
+ const [open, setOpen] = useState(false);
13
+ return /* @__PURE__ */ jsxs("div", { className: "shrink-0 rounded-md border border-border bg-background", children: [
14
+ /* @__PURE__ */ jsxs(
15
+ "button",
16
+ {
17
+ type: "button",
18
+ "aria-expanded": open,
19
+ onClick: () => setOpen((current) => !current),
20
+ className: "flex w-full items-center gap-2 px-2 py-1.5 text-left text-xs font-medium hover:bg-muted",
21
+ children: [
22
+ /* @__PURE__ */ jsx(
23
+ Icon,
24
+ {
25
+ icon: open ? UiChevronDown : UiChevronRight,
26
+ className: "size-3 text-muted-foreground"
27
+ }
28
+ ),
29
+ /* @__PURE__ */ jsx("span", { className: "flex-1", children: "Permission strategies" }),
30
+ /* @__PURE__ */ jsx(
31
+ "span",
32
+ {
33
+ "aria-label": `${rules.length} saved strategies`,
34
+ className: "rounded bg-muted px-1.5 text-[10px] tabular-nums text-muted-foreground",
35
+ children: rules.length
36
+ }
37
+ )
38
+ ]
39
+ }
40
+ ),
41
+ open && /* @__PURE__ */ jsx("div", { className: "max-h-[40vh] overflow-y-auto border-t border-border p-2", children: /* @__PURE__ */ jsx(
42
+ PermissionStrategiesEditor,
43
+ {
44
+ value: rules,
45
+ tools,
46
+ onChange: onRulesChange
47
+ }
48
+ ) })
49
+ ] });
50
+ }
51
+ export {
52
+ ToolPermissionStrategies
53
+ };
54
+ //# sourceMappingURL=ToolSchemaBrowser.strategies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.strategies.js","sources":["../../../src/data/ai/ToolSchemaBrowser.strategies.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { UiChevronDown, UiChevronRight } from \"../../icons\";\nimport { Icon } from \"../Icon\";\nimport type { PermissionPolicy } from \"../chat/tool-policy\";\nimport type { ToolMeta } from \"../chat/types\";\nimport { PermissionStrategiesEditor } from \"./runtime-profiles/PermissionStrategiesEditor\";\n\n/** The saved rule list, always present but collapsed to a count until opened. */\nexport function ToolPermissionStrategies({\n rules,\n tools,\n onRulesChange,\n}: {\n rules: PermissionPolicy;\n tools: ToolMeta[];\n onRulesChange: (rules: PermissionPolicy) => void;\n}) {\n const [open, setOpen] = useState(false);\n return (\n <div className=\"shrink-0 rounded-md border border-border bg-background\">\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((current) => !current)}\n className=\"flex w-full items-center gap-2 px-2 py-1.5 text-left text-xs font-medium hover:bg-muted\"\n >\n <Icon\n icon={open ? UiChevronDown : UiChevronRight}\n className=\"size-3 text-muted-foreground\"\n />\n <span className=\"flex-1\">Permission strategies</span>\n <span\n aria-label={`${rules.length} saved strategies`}\n className=\"rounded bg-muted px-1.5 text-[10px] tabular-nums text-muted-foreground\"\n >\n {rules.length}\n </span>\n </button>\n {open && (\n <div className=\"max-h-[40vh] overflow-y-auto border-t border-border p-2\">\n <PermissionStrategiesEditor\n value={rules}\n tools={tools}\n onChange={onRulesChange}\n />\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;AAQO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,SACE,qBAAC,OAAA,EAAI,WAAU,0DACb,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,iBAAe;AAAA,QACf,SAAS,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO;AAAA,QAC5C,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAM,OAAO,gBAAgB;AAAA,cAC7B,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAEZ,oBAAC,QAAA,EAAK,WAAU,UAAS,UAAA,yBAAqB;AAAA,UAC9C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,cAAY,GAAG,MAAM,MAAM;AAAA,cAC3B,WAAU;AAAA,cAET,UAAA,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,QACT;AAAA,MAAA;AAAA,IAAA;AAAA,IAED,QACC,oBAAC,OAAA,EAAI,WAAU,2DACb,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA,UAAU;AAAA,MAAA;AAAA,IAAA,EACZ,CACF;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const ListMenu = require("../../components/ListMenu.cjs");
5
+ const utils = require("../../lib/utils.cjs");
6
+ const Icon = require("../Icon.cjs");
7
+ const ToolSchemaBrowser_directoryHeader = require("./ToolSchemaBrowser.directory-header.cjs");
8
+ const ToolSchemaBrowser_model = require("./ToolSchemaBrowser.model.cjs");
9
+ const ToolPreferences_model = require("./ToolPreferences.model.cjs");
10
+ const ToolPreferencesList = require("./ToolPreferencesList.cjs");
11
+ const UiWrench = require("../../icons/components/UiWrench.cjs");
12
+ const UiEye = require("../../icons/components/UiEye.cjs");
13
+ const UiWarningTriangle = require("../../icons/components/UiWarningTriangle.cjs");
14
+ const UiRepeat = require("../../icons/components/UiRepeat.cjs");
15
+ const UiGlobe = require("../../icons/components/UiGlobe.cjs");
16
+ function ToolPolicyTree({
17
+ sections,
18
+ view,
19
+ value,
20
+ onRule,
21
+ isOpen,
22
+ onToggle,
23
+ activeName,
24
+ onSelect,
25
+ emptyLabel = "No matching tools",
26
+ className
27
+ }) {
28
+ const cycleDirectory = (tools, depth) => {
29
+ if (!onRule) return void 0;
30
+ const { next } = ToolSchemaBrowser_model.directoryPolicyToggle(tools, value ?? {});
31
+ return () => onRule(ToolSchemaBrowser_model.directoryPermissionRule({ tools, view, depth, policy: next }));
32
+ };
33
+ return /* @__PURE__ */ jsxRuntime.jsxs(ListMenu.ListMenu, { className: utils.cn("divide-y-0", className), children: [
34
+ sections.map((section) => {
35
+ const sectionKey = `p:${section.label}`;
36
+ const sectionOpen = isOpen(sectionKey);
37
+ const sectionTools = section.children.flatMap((child) => child.tools);
38
+ return /* @__PURE__ */ jsxRuntime.jsxs(ListMenu.ListMenuSection, { children: [
39
+ /* @__PURE__ */ jsxRuntime.jsx(ListMenu.ListMenuHeader, { className: "px-0 py-0", children: /* @__PURE__ */ jsxRuntime.jsx(
40
+ ToolSchemaBrowser_directoryHeader.ToolDirectoryHeader,
41
+ {
42
+ label: section.label,
43
+ count: section.count,
44
+ open: sectionOpen,
45
+ variant: "section",
46
+ mode: ToolSchemaBrowser_model.directoryPolicyToggle(sectionTools, value ?? {}).badge,
47
+ onToggle: () => onToggle(sectionKey),
48
+ onCycle: cycleDirectory(sectionTools, "section")
49
+ }
50
+ ) }),
51
+ sectionOpen && section.children.map((child) => {
52
+ const childKey = `s:${section.label}///${child.label}`;
53
+ const childOpen = isOpen(childKey);
54
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
55
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center border-b border-border bg-background pl-2", children: /* @__PURE__ */ jsxRuntime.jsx(
56
+ ToolSchemaBrowser_directoryHeader.ToolDirectoryHeader,
57
+ {
58
+ label: child.label,
59
+ count: child.tools.length,
60
+ open: childOpen,
61
+ variant: "child",
62
+ mode: ToolSchemaBrowser_model.directoryPolicyToggle(child.tools, value ?? {}).badge,
63
+ onToggle: () => onToggle(childKey),
64
+ onCycle: cycleDirectory(child.tools, "child")
65
+ }
66
+ ) }),
67
+ childOpen && child.tools.map((tool) => /* @__PURE__ */ jsxRuntime.jsx(
68
+ ToolPolicyRow,
69
+ {
70
+ tool,
71
+ active: activeName === tool.name,
72
+ policy: value == null ? void 0 : value[tool.name],
73
+ onSelect: onSelect ? () => onSelect(tool.name) : void 0,
74
+ onCycle: onRule ? (policy) => onRule({
75
+ name: tool.name,
76
+ policy: ToolPreferences_model.nextMode(policy)
77
+ }) : void 0
78
+ },
79
+ tool.name
80
+ ))
81
+ ] }, childKey);
82
+ })
83
+ ] }, sectionKey);
84
+ }),
85
+ sections.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3 py-8 text-center text-xs text-muted-foreground", children: emptyLabel })
86
+ ] });
87
+ }
88
+ function ToolPolicyRow({
89
+ tool,
90
+ active,
91
+ policy,
92
+ onSelect,
93
+ onCycle
94
+ }) {
95
+ const label = tool.label || tool.name;
96
+ const mode = policy ?? tool.defaultPermission ?? "auto";
97
+ return /* @__PURE__ */ jsxRuntime.jsxs(
98
+ ListMenu.ListMenuItem,
99
+ {
100
+ active,
101
+ interactive: onSelect !== void 0,
102
+ title: tool.name,
103
+ className: "flex items-center gap-2 py-1 pl-6 pr-2",
104
+ children: [
105
+ /* @__PURE__ */ jsxRuntime.jsxs(
106
+ "button",
107
+ {
108
+ type: "button",
109
+ "aria-label": label,
110
+ "aria-pressed": onSelect ? active : void 0,
111
+ disabled: !onSelect,
112
+ onClick: onSelect,
113
+ className: "grid min-w-0 flex-1 grid-cols-[1rem_minmax(0,1fr)_auto] items-center gap-2 text-left disabled:cursor-default",
114
+ children: [
115
+ tool.icon ? /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { name: tool.icon, className: "size-3.5 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiWrench.UiWrench, className: "size-3.5 text-muted-foreground" }),
116
+ /* @__PURE__ */ jsxRuntime.jsx(
117
+ "span",
118
+ {
119
+ className: utils.cn(
120
+ "min-w-0 truncate text-xs font-medium",
121
+ mode === "deny" && "text-muted-foreground line-through"
122
+ ),
123
+ children: label
124
+ }
125
+ ),
126
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(ToolHintIcons, { tool }) })
127
+ ]
128
+ }
129
+ ),
130
+ onCycle ? /* @__PURE__ */ jsxRuntime.jsx(
131
+ "button",
132
+ {
133
+ type: "button",
134
+ "aria-label": `Toggle ${label}`,
135
+ onClick: () => onCycle(mode),
136
+ className: "shrink-0 rounded hover:ring-1 hover:ring-border",
137
+ children: /* @__PURE__ */ jsxRuntime.jsx(ToolPreferencesList.ModeBadge, { mode })
138
+ }
139
+ ) : /* @__PURE__ */ jsxRuntime.jsx(ToolPreferencesList.ModeBadge, { mode })
140
+ ]
141
+ }
142
+ );
143
+ }
144
+ function ToolHintIcons({ tool }) {
145
+ var _a, _b, _c, _d;
146
+ const hints = [
147
+ [
148
+ (_a = tool.annotations) == null ? void 0 : _a.readOnlyHint,
149
+ "Read only tool",
150
+ UiEye.UiEye,
151
+ "text-emerald-600"
152
+ ],
153
+ [
154
+ (_b = tool.annotations) == null ? void 0 : _b.destructiveHint,
155
+ "Destructive tool",
156
+ UiWarningTriangle.UiWarningTriangle,
157
+ "text-red-600"
158
+ ],
159
+ [
160
+ (_c = tool.annotations) == null ? void 0 : _c.idempotentHint,
161
+ "Idempotent tool",
162
+ UiRepeat.UiRepeat,
163
+ "text-sky-600"
164
+ ],
165
+ [
166
+ (_d = tool.annotations) == null ? void 0 : _d.openWorldHint,
167
+ "Open world tool",
168
+ UiGlobe.UiGlobe,
169
+ "text-violet-600"
170
+ ]
171
+ ];
172
+ return hints.flatMap(
173
+ ([enabled, hint, icon, className]) => enabled ? [
174
+ /* @__PURE__ */ jsxRuntime.jsx("span", { role: "img", "aria-label": hint, title: hint, children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon, className: utils.cn("size-3", className) }) }, hint)
175
+ ] : []
176
+ );
177
+ }
178
+ exports.ToolPolicyTree = ToolPolicyTree;
179
+ //# sourceMappingURL=ToolSchemaBrowser.tree.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.tree.cjs","sources":["../../../src/data/ai/ToolSchemaBrowser.tree.tsx"],"sourcesContent":["import {\n ListMenu,\n ListMenuHeader,\n ListMenuItem,\n ListMenuSection,\n} from \"../../components/ListMenu\";\nimport { cn } from \"../../lib/utils\";\nimport {\n UiEye,\n UiGlobe,\n UiRepeat,\n UiWarningTriangle,\n UiWrench,\n} from \"../../icons\";\nimport { Icon } from \"../Icon\";\nimport type { PermissionRule } from \"../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../chat/types\";\nimport { ToolDirectoryHeader } from \"./ToolSchemaBrowser.directory-header\";\nimport {\n directoryPermissionRule,\n directoryPolicyToggle,\n type ToolSchemaViewMode,\n type ToolSection,\n} from \"./ToolSchemaBrowser.model\";\nimport { nextMode } from \"./ToolPreferences.model\";\nimport { ModeBadge } from \"./ToolPreferencesList\";\n\nexport type ToolPolicyTreeProps = {\n sections: ToolSection[];\n view: ToolSchemaViewMode;\n value: Record<string, ToolPolicy> | undefined;\n /** Enables click-to-toggle on tools and directories. */\n onRule?: ((rule: PermissionRule) => void) | undefined;\n isOpen: (key: string) => boolean;\n onToggle: (key: string) => void;\n activeName?: string | undefined;\n /** Row clicks select a tool; without it rows only show their policy. */\n onSelect?: ((name: string) => void) | undefined;\n emptyLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Directory tree of tools where every badge is a click-to-toggle policy. */\nexport function ToolPolicyTree({\n sections,\n view,\n value,\n onRule,\n isOpen,\n onToggle,\n activeName,\n onSelect,\n emptyLabel = \"No matching tools\",\n className,\n}: ToolPolicyTreeProps) {\n const cycleDirectory = (tools: ToolMeta[], depth: \"section\" | \"child\") => {\n if (!onRule) return undefined;\n const { next } = directoryPolicyToggle(tools, value ?? {});\n return () =>\n onRule(directoryPermissionRule({ tools, view, depth, policy: next }));\n };\n return (\n <ListMenu className={cn(\"divide-y-0\", className)}>\n {sections.map((section) => {\n const sectionKey = `p:${section.label}`;\n const sectionOpen = isOpen(sectionKey);\n const sectionTools = section.children.flatMap((child) => child.tools);\n return (\n <ListMenuSection key={sectionKey}>\n <ListMenuHeader className=\"px-0 py-0\">\n <ToolDirectoryHeader\n label={section.label}\n count={section.count}\n open={sectionOpen}\n variant=\"section\"\n mode={directoryPolicyToggle(sectionTools, value ?? {}).badge}\n onToggle={() => onToggle(sectionKey)}\n onCycle={cycleDirectory(sectionTools, \"section\")}\n />\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 <div className=\"flex items-center border-b border-border bg-background pl-2\">\n <ToolDirectoryHeader\n label={child.label}\n count={child.tools.length}\n open={childOpen}\n variant=\"child\"\n mode={\n directoryPolicyToggle(child.tools, value ?? {}).badge\n }\n onToggle={() => onToggle(childKey)}\n onCycle={cycleDirectory(child.tools, \"child\")}\n />\n </div>\n {childOpen &&\n child.tools.map((tool) => (\n <ToolPolicyRow\n key={tool.name}\n tool={tool}\n active={activeName === tool.name}\n policy={value?.[tool.name]}\n onSelect={\n onSelect ? () => onSelect(tool.name) : undefined\n }\n onCycle={\n onRule\n ? (policy) =>\n onRule({\n name: tool.name,\n policy: nextMode(policy),\n })\n : undefined\n }\n />\n ))}\n </div>\n );\n })}\n </ListMenuSection>\n );\n })}\n {sections.length === 0 && (\n <div className=\"px-3 py-8 text-center text-xs text-muted-foreground\">\n {emptyLabel}\n </div>\n )}\n </ListMenu>\n );\n}\n\nfunction ToolPolicyRow({\n tool,\n active,\n policy,\n onSelect,\n onCycle,\n}: {\n tool: ToolMeta;\n active: boolean;\n policy: ToolPolicy | undefined;\n onSelect: (() => void) | undefined;\n onCycle: ((policy: ToolPolicy) => void) | undefined;\n}) {\n const label = tool.label || tool.name;\n const mode = policy ?? tool.defaultPermission ?? \"auto\";\n return (\n <ListMenuItem\n active={active}\n interactive={onSelect !== undefined}\n title={tool.name}\n className=\"flex items-center gap-2 py-1 pl-6 pr-2\"\n >\n <button\n type=\"button\"\n aria-label={label}\n aria-pressed={onSelect ? active : undefined}\n disabled={!onSelect}\n onClick={onSelect}\n className=\"grid min-w-0 flex-1 grid-cols-[1rem_minmax(0,1fr)_auto] items-center gap-2 text-left disabled:cursor-default\"\n >\n {tool.icon ? (\n <Icon name={tool.icon} className=\"size-3.5 text-muted-foreground\" />\n ) : (\n <Icon icon={UiWrench} className=\"size-3.5 text-muted-foreground\" />\n )}\n <span\n className={cn(\n \"min-w-0 truncate text-xs font-medium\",\n mode === \"deny\" && \"text-muted-foreground line-through\",\n )}\n >\n {label}\n </span>\n <span className=\"flex items-center gap-1\">\n <ToolHintIcons tool={tool} />\n </span>\n </button>\n {onCycle ? (\n <button\n type=\"button\"\n aria-label={`Toggle ${label}`}\n onClick={() => onCycle(mode)}\n className=\"shrink-0 rounded hover:ring-1 hover:ring-border\"\n >\n <ModeBadge mode={mode} />\n </button>\n ) : (\n <ModeBadge mode={mode} />\n )}\n </ListMenuItem>\n );\n}\n\nfunction ToolHintIcons({ tool }: { tool: ToolMeta }) {\n const hints = [\n [\n tool.annotations?.readOnlyHint,\n \"Read only tool\",\n UiEye,\n \"text-emerald-600\",\n ],\n [\n tool.annotations?.destructiveHint,\n \"Destructive tool\",\n UiWarningTriangle,\n \"text-red-600\",\n ],\n [\n tool.annotations?.idempotentHint,\n \"Idempotent tool\",\n UiRepeat,\n \"text-sky-600\",\n ],\n [\n tool.annotations?.openWorldHint,\n \"Open world tool\",\n UiGlobe,\n \"text-violet-600\",\n ],\n ] as const;\n return hints.flatMap(([enabled, hint, icon, className]) =>\n enabled\n ? [\n <span key={hint} role=\"img\" aria-label={hint} title={hint}>\n <Icon icon={icon} className={cn(\"size-3\", className)} />\n </span>,\n ]\n : [],\n );\n}\n"],"names":["directoryPolicyToggle","directoryPermissionRule","ListMenu","cn","ListMenuSection","jsx","ListMenuHeader","ToolDirectoryHeader","nextMode","jsxs","ListMenuItem","Icon","UiWrench","ModeBadge","UiEye","UiWarningTriangle","UiRepeat","UiGlobe"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { PermissionRule } from '../chat/tool-policy.js';
2
+ import { ToolPolicy } from '../chat/types.js';
3
+ import { ToolSchemaViewMode, ToolSection } from './ToolSchemaBrowser.model.js';
4
+ export type ToolPolicyTreeProps = {
5
+ sections: ToolSection[];
6
+ view: ToolSchemaViewMode;
7
+ value: Record<string, ToolPolicy> | undefined;
8
+ /** Enables click-to-toggle on tools and directories. */
9
+ onRule?: ((rule: PermissionRule) => void) | undefined;
10
+ isOpen: (key: string) => boolean;
11
+ onToggle: (key: string) => void;
12
+ activeName?: string | undefined;
13
+ /** Row clicks select a tool; without it rows only show their policy. */
14
+ onSelect?: ((name: string) => void) | undefined;
15
+ emptyLabel?: string | undefined;
16
+ className?: string | undefined;
17
+ };
18
+ /** Directory tree of tools where every badge is a click-to-toggle policy. */
19
+ export declare function ToolPolicyTree({ sections, view, value, onRule, isOpen, onToggle, activeName, onSelect, emptyLabel, className, }: ToolPolicyTreeProps): import("react").JSX.Element;
20
+ //# sourceMappingURL=ToolSchemaBrowser.tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.tree.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ToolSchemaBrowser.tree.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAY,UAAU,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,2BAA2B,CAAC;AAInC,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC;IAC9C,wDAAwD;IACxD,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACjC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,UAAgC,EAChC,SAAS,GACV,EAAE,mBAAmB,+BA+ErB"}
@@ -0,0 +1,179 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { ListMenu, ListMenuSection, ListMenuHeader, ListMenuItem } from "../../components/ListMenu.js";
3
+ import { cn } from "../../lib/utils.js";
4
+ import { Icon } from "../Icon.js";
5
+ import { ToolDirectoryHeader } from "./ToolSchemaBrowser.directory-header.js";
6
+ import { directoryPolicyToggle, directoryPermissionRule } from "./ToolSchemaBrowser.model.js";
7
+ import { nextMode } from "./ToolPreferences.model.js";
8
+ import { ModeBadge } from "./ToolPreferencesList.js";
9
+ import { UiWrench } from "../../icons/components/UiWrench.js";
10
+ import { UiEye } from "../../icons/components/UiEye.js";
11
+ import { UiWarningTriangle } from "../../icons/components/UiWarningTriangle.js";
12
+ import { UiRepeat } from "../../icons/components/UiRepeat.js";
13
+ import { UiGlobe } from "../../icons/components/UiGlobe.js";
14
+ function ToolPolicyTree({
15
+ sections,
16
+ view,
17
+ value,
18
+ onRule,
19
+ isOpen,
20
+ onToggle,
21
+ activeName,
22
+ onSelect,
23
+ emptyLabel = "No matching tools",
24
+ className
25
+ }) {
26
+ const cycleDirectory = (tools, depth) => {
27
+ if (!onRule) return void 0;
28
+ const { next } = directoryPolicyToggle(tools, value ?? {});
29
+ return () => onRule(directoryPermissionRule({ tools, view, depth, policy: next }));
30
+ };
31
+ return /* @__PURE__ */ jsxs(ListMenu, { className: cn("divide-y-0", className), children: [
32
+ sections.map((section) => {
33
+ const sectionKey = `p:${section.label}`;
34
+ const sectionOpen = isOpen(sectionKey);
35
+ const sectionTools = section.children.flatMap((child) => child.tools);
36
+ return /* @__PURE__ */ jsxs(ListMenuSection, { children: [
37
+ /* @__PURE__ */ jsx(ListMenuHeader, { className: "px-0 py-0", children: /* @__PURE__ */ jsx(
38
+ ToolDirectoryHeader,
39
+ {
40
+ label: section.label,
41
+ count: section.count,
42
+ open: sectionOpen,
43
+ variant: "section",
44
+ mode: directoryPolicyToggle(sectionTools, value ?? {}).badge,
45
+ onToggle: () => onToggle(sectionKey),
46
+ onCycle: cycleDirectory(sectionTools, "section")
47
+ }
48
+ ) }),
49
+ sectionOpen && section.children.map((child) => {
50
+ const childKey = `s:${section.label}///${child.label}`;
51
+ const childOpen = isOpen(childKey);
52
+ return /* @__PURE__ */ jsxs("div", { children: [
53
+ /* @__PURE__ */ jsx("div", { className: "flex items-center border-b border-border bg-background pl-2", children: /* @__PURE__ */ jsx(
54
+ ToolDirectoryHeader,
55
+ {
56
+ label: child.label,
57
+ count: child.tools.length,
58
+ open: childOpen,
59
+ variant: "child",
60
+ mode: directoryPolicyToggle(child.tools, value ?? {}).badge,
61
+ onToggle: () => onToggle(childKey),
62
+ onCycle: cycleDirectory(child.tools, "child")
63
+ }
64
+ ) }),
65
+ childOpen && child.tools.map((tool) => /* @__PURE__ */ jsx(
66
+ ToolPolicyRow,
67
+ {
68
+ tool,
69
+ active: activeName === tool.name,
70
+ policy: value == null ? void 0 : value[tool.name],
71
+ onSelect: onSelect ? () => onSelect(tool.name) : void 0,
72
+ onCycle: onRule ? (policy) => onRule({
73
+ name: tool.name,
74
+ policy: nextMode(policy)
75
+ }) : void 0
76
+ },
77
+ tool.name
78
+ ))
79
+ ] }, childKey);
80
+ })
81
+ ] }, sectionKey);
82
+ }),
83
+ sections.length === 0 && /* @__PURE__ */ jsx("div", { className: "px-3 py-8 text-center text-xs text-muted-foreground", children: emptyLabel })
84
+ ] });
85
+ }
86
+ function ToolPolicyRow({
87
+ tool,
88
+ active,
89
+ policy,
90
+ onSelect,
91
+ onCycle
92
+ }) {
93
+ const label = tool.label || tool.name;
94
+ const mode = policy ?? tool.defaultPermission ?? "auto";
95
+ return /* @__PURE__ */ jsxs(
96
+ ListMenuItem,
97
+ {
98
+ active,
99
+ interactive: onSelect !== void 0,
100
+ title: tool.name,
101
+ className: "flex items-center gap-2 py-1 pl-6 pr-2",
102
+ children: [
103
+ /* @__PURE__ */ jsxs(
104
+ "button",
105
+ {
106
+ type: "button",
107
+ "aria-label": label,
108
+ "aria-pressed": onSelect ? active : void 0,
109
+ disabled: !onSelect,
110
+ onClick: onSelect,
111
+ className: "grid min-w-0 flex-1 grid-cols-[1rem_minmax(0,1fr)_auto] items-center gap-2 text-left disabled:cursor-default",
112
+ children: [
113
+ tool.icon ? /* @__PURE__ */ jsx(Icon, { name: tool.icon, className: "size-3.5 text-muted-foreground" }) : /* @__PURE__ */ jsx(Icon, { icon: UiWrench, className: "size-3.5 text-muted-foreground" }),
114
+ /* @__PURE__ */ jsx(
115
+ "span",
116
+ {
117
+ className: cn(
118
+ "min-w-0 truncate text-xs font-medium",
119
+ mode === "deny" && "text-muted-foreground line-through"
120
+ ),
121
+ children: label
122
+ }
123
+ ),
124
+ /* @__PURE__ */ jsx("span", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsx(ToolHintIcons, { tool }) })
125
+ ]
126
+ }
127
+ ),
128
+ onCycle ? /* @__PURE__ */ jsx(
129
+ "button",
130
+ {
131
+ type: "button",
132
+ "aria-label": `Toggle ${label}`,
133
+ onClick: () => onCycle(mode),
134
+ className: "shrink-0 rounded hover:ring-1 hover:ring-border",
135
+ children: /* @__PURE__ */ jsx(ModeBadge, { mode })
136
+ }
137
+ ) : /* @__PURE__ */ jsx(ModeBadge, { mode })
138
+ ]
139
+ }
140
+ );
141
+ }
142
+ function ToolHintIcons({ tool }) {
143
+ var _a, _b, _c, _d;
144
+ const hints = [
145
+ [
146
+ (_a = tool.annotations) == null ? void 0 : _a.readOnlyHint,
147
+ "Read only tool",
148
+ UiEye,
149
+ "text-emerald-600"
150
+ ],
151
+ [
152
+ (_b = tool.annotations) == null ? void 0 : _b.destructiveHint,
153
+ "Destructive tool",
154
+ UiWarningTriangle,
155
+ "text-red-600"
156
+ ],
157
+ [
158
+ (_c = tool.annotations) == null ? void 0 : _c.idempotentHint,
159
+ "Idempotent tool",
160
+ UiRepeat,
161
+ "text-sky-600"
162
+ ],
163
+ [
164
+ (_d = tool.annotations) == null ? void 0 : _d.openWorldHint,
165
+ "Open world tool",
166
+ UiGlobe,
167
+ "text-violet-600"
168
+ ]
169
+ ];
170
+ return hints.flatMap(
171
+ ([enabled, hint, icon, className]) => enabled ? [
172
+ /* @__PURE__ */ jsx("span", { role: "img", "aria-label": hint, title: hint, children: /* @__PURE__ */ jsx(Icon, { icon, className: cn("size-3", className) }) }, hint)
173
+ ] : []
174
+ );
175
+ }
176
+ export {
177
+ ToolPolicyTree
178
+ };
179
+ //# sourceMappingURL=ToolSchemaBrowser.tree.js.map