@flanksource/clicky-ui 0.3.44 → 0.3.45

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 (471) hide show
  1. package/README.md +2 -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/CodeBlock.cjs +3 -2
  16. package/dist/data/CodeBlock.cjs.map +1 -1
  17. package/dist/data/CodeBlock.d.ts +3 -1
  18. package/dist/data/CodeBlock.d.ts.map +1 -1
  19. package/dist/data/CodeBlock.js +3 -2
  20. package/dist/data/CodeBlock.js.map +1 -1
  21. package/dist/data/GraphDiagram.cjs +18 -6
  22. package/dist/data/GraphDiagram.cjs.map +1 -1
  23. package/dist/data/GraphDiagram.d.ts +9 -1
  24. package/dist/data/GraphDiagram.d.ts.map +1 -1
  25. package/dist/data/GraphDiagram.js +18 -6
  26. package/dist/data/GraphDiagram.js.map +1 -1
  27. package/dist/data/GraphDiagramNodes.cjs +38 -29
  28. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  29. package/dist/data/GraphDiagramNodes.d.ts +8 -2
  30. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  31. package/dist/data/GraphDiagramNodes.js +38 -29
  32. package/dist/data/GraphDiagramNodes.js.map +1 -1
  33. package/dist/data/JsonView.cjs +118 -49
  34. package/dist/data/JsonView.cjs.map +1 -1
  35. package/dist/data/JsonView.d.ts +13 -10
  36. package/dist/data/JsonView.d.ts.map +1 -1
  37. package/dist/data/JsonView.js +118 -49
  38. package/dist/data/JsonView.js.map +1 -1
  39. package/dist/data/MarkdownEditor.cjs +2 -2
  40. package/dist/data/MarkdownEditor.cjs.map +1 -1
  41. package/dist/data/MarkdownEditor.js +2 -2
  42. package/dist/data/MarkdownEditor.js.map +1 -1
  43. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  44. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  45. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  46. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  47. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  48. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  49. package/dist/data/ai/ChatButton.cjs +2 -0
  50. package/dist/data/ai/ChatButton.cjs.map +1 -1
  51. package/dist/data/ai/ChatButton.d.ts +1 -1
  52. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  53. package/dist/data/ai/ChatButton.js +2 -0
  54. package/dist/data/ai/ChatButton.js.map +1 -1
  55. package/dist/data/ai/ChatFab.cjs +5 -1
  56. package/dist/data/ai/ChatFab.cjs.map +1 -1
  57. package/dist/data/ai/ChatFab.d.ts +5 -1
  58. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  59. package/dist/data/ai/ChatFab.js +5 -1
  60. package/dist/data/ai/ChatFab.js.map +1 -1
  61. package/dist/data/ai/ChatWindow.cjs +2 -8
  62. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  63. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  64. package/dist/data/ai/ChatWindow.js +2 -8
  65. package/dist/data/ai/ChatWindow.js.map +1 -1
  66. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  67. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  68. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  69. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  70. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  71. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  72. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  73. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  74. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  75. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  76. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  77. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  78. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  79. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  80. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  81. package/dist/data/ai/SessionViewer.cjs +13 -4
  82. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  83. package/dist/data/ai/SessionViewer.d.ts +5 -1
  84. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  85. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  86. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  87. package/dist/data/ai/SessionViewer.header.js +1 -1
  88. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  89. package/dist/data/ai/SessionViewer.js +13 -4
  90. package/dist/data/ai/SessionViewer.js.map +1 -1
  91. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  92. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  93. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  94. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  95. package/dist/data/ai/SessionViewer.model.js +2 -0
  96. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  97. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  98. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  99. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  100. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  101. package/dist/data/ai/SessionViewer.rows.js +41 -27
  102. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  103. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  104. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  105. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  106. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  107. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  108. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  109. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  110. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  111. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  112. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  113. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  114. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  115. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  116. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  117. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  118. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  119. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  120. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  121. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  122. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  123. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  125. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  127. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  128. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  129. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  130. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  131. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  132. package/dist/data/ai/SessionViewerMenu.js +18 -1
  133. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  134. package/dist/data/ai/ToolPreferences.cjs +149 -143
  135. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  136. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  137. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  138. package/dist/data/ai/ToolPreferences.js +151 -146
  139. package/dist/data/ai/ToolPreferences.js.map +1 -1
  140. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  141. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  142. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  143. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  144. package/dist/data/ai/ToolPreferences.model.js +15 -11
  145. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  146. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  147. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  148. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  149. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  150. package/dist/data/ai/ToolPreferencesList.js +2 -1
  151. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  152. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  153. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  154. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  155. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  156. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  157. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  158. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  159. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  160. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  161. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  162. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  163. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  164. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  165. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  166. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  167. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  168. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  169. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  170. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  171. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  172. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  173. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  174. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  175. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  176. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  177. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  178. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  179. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  180. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  181. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  182. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  183. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  184. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  185. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  186. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  187. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  188. package/dist/data/ai/index.d.ts +2 -2
  189. package/dist/data/ai/index.d.ts.map +1 -1
  190. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  191. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  192. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  193. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  194. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  195. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  196. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  197. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  198. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  199. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  200. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  201. package/dist/data/ai/use-session-token-sizing.js +73 -0
  202. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  203. package/dist/data/call-graph/CallGraph.cjs +250 -0
  204. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  205. package/dist/data/call-graph/CallGraph.d.ts +69 -0
  206. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  207. package/dist/data/call-graph/CallGraph.js +250 -0
  208. package/dist/data/call-graph/CallGraph.js.map +1 -0
  209. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  210. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  211. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  212. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  213. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  214. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  215. package/dist/data/call-graph/CallGraphMembers.cjs +50 -0
  216. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  217. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  218. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  219. package/dist/data/call-graph/CallGraphMembers.js +50 -0
  220. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  221. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  222. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  223. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  224. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  225. package/dist/data/call-graph/CallGraphParts.js +204 -0
  226. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  227. package/dist/data/call-graph/CallGraphToolbar.cjs +186 -0
  228. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  229. package/dist/data/call-graph/CallGraphToolbar.d.ts +45 -0
  230. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  231. package/dist/data/call-graph/CallGraphToolbar.js +186 -0
  232. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  233. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  234. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  235. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  236. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  237. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  238. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  239. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  240. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  241. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  242. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  243. package/dist/data/call-graph/call-graph-labels.js +96 -0
  244. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  245. package/dist/data/call-graph/call-graph-model.cjs +161 -0
  246. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  247. package/dist/data/call-graph/call-graph-model.d.ts +102 -0
  248. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  249. package/dist/data/call-graph/call-graph-model.js +161 -0
  250. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  251. package/dist/data/call-graph/call-graph-vocabulary.cjs +177 -0
  252. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  253. package/dist/data/call-graph/call-graph-vocabulary.d.ts +72 -0
  254. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  255. package/dist/data/call-graph/call-graph-vocabulary.js +177 -0
  256. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  257. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  258. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  259. package/dist/data/call-graph/index.d.ts +7 -0
  260. package/dist/data/call-graph/index.d.ts.map +1 -0
  261. package/dist/data/call-graph/types.cjs +5 -0
  262. package/dist/data/call-graph/types.cjs.map +1 -0
  263. package/dist/data/call-graph/types.d.ts +135 -0
  264. package/dist/data/call-graph/types.d.ts.map +1 -0
  265. package/dist/data/call-graph/types.js +5 -0
  266. package/dist/data/call-graph/types.js.map +1 -0
  267. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  268. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  269. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  270. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  271. package/dist/data/call-graph/use-call-graph.js +93 -0
  272. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  273. package/dist/data/chat/Chat.cjs +39 -15
  274. package/dist/data/chat/Chat.cjs.map +1 -1
  275. package/dist/data/chat/Chat.d.ts.map +1 -1
  276. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  277. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  278. package/dist/data/chat/Chat.fixtures.js +2 -2
  279. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  280. package/dist/data/chat/Chat.js +40 -16
  281. package/dist/data/chat/Chat.js.map +1 -1
  282. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  283. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  284. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  285. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  286. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  287. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  288. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  289. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  290. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  291. package/dist/data/chat/ContextMeter.bar.js +5 -8
  292. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  293. package/dist/data/chat/ContextMeter.cjs +18 -19
  294. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  295. package/dist/data/chat/ContextMeter.d.ts +1 -1
  296. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  297. package/dist/data/chat/ContextMeter.js +18 -19
  298. package/dist/data/chat/ContextMeter.js.map +1 -1
  299. package/dist/data/chat/Conversation.cjs +2 -1
  300. package/dist/data/chat/Conversation.cjs.map +1 -1
  301. package/dist/data/chat/Conversation.d.ts +4 -1
  302. package/dist/data/chat/Conversation.d.ts.map +1 -1
  303. package/dist/data/chat/Conversation.js +2 -1
  304. package/dist/data/chat/Conversation.js.map +1 -1
  305. package/dist/data/chat/Message.cjs +39 -12
  306. package/dist/data/chat/Message.cjs.map +1 -1
  307. package/dist/data/chat/Message.d.ts +1 -1
  308. package/dist/data/chat/Message.d.ts.map +1 -1
  309. package/dist/data/chat/Message.js +40 -13
  310. package/dist/data/chat/Message.js.map +1 -1
  311. package/dist/data/chat/ToolCall.cjs +60 -5
  312. package/dist/data/chat/ToolCall.cjs.map +1 -1
  313. package/dist/data/chat/ToolCall.d.ts +7 -2
  314. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  315. package/dist/data/chat/ToolCall.js +60 -5
  316. package/dist/data/chat/ToolCall.js.map +1 -1
  317. package/dist/data/chat/approval.cjs.map +1 -1
  318. package/dist/data/chat/approval.d.ts +2 -2
  319. package/dist/data/chat/approval.d.ts.map +1 -1
  320. package/dist/data/chat/approval.js.map +1 -1
  321. package/dist/data/chat/tool-policy.cjs +59 -2
  322. package/dist/data/chat/tool-policy.cjs.map +1 -1
  323. package/dist/data/chat/tool-policy.d.ts +9 -0
  324. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  325. package/dist/data/chat/tool-policy.js +59 -2
  326. package/dist/data/chat/tool-policy.js.map +1 -1
  327. package/dist/data/chat/types.cjs +6 -0
  328. package/dist/data/chat/types.cjs.map +1 -1
  329. package/dist/data/chat/types.d.ts +13 -4
  330. package/dist/data/chat/types.d.ts.map +1 -1
  331. package/dist/data/chat/types.js +7 -1
  332. package/dist/data/chat/types.js.map +1 -1
  333. package/dist/data/chat/usage-snapshot.cjs +11 -6
  334. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  335. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  336. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  337. package/dist/data/chat/usage-snapshot.js +11 -6
  338. package/dist/data/chat/usage-snapshot.js.map +1 -1
  339. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  340. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  341. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  342. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  343. package/dist/data/graph-columns-layout.cjs +26 -10
  344. package/dist/data/graph-columns-layout.cjs.map +1 -1
  345. package/dist/data/graph-columns-layout.d.ts +8 -0
  346. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  347. package/dist/data/graph-columns-layout.js +26 -10
  348. package/dist/data/graph-columns-layout.js.map +1 -1
  349. package/dist/data/graph-diagram-model.cjs.map +1 -1
  350. package/dist/data/graph-diagram-model.d.ts +5 -0
  351. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  352. package/dist/data/graph-diagram-model.js.map +1 -1
  353. package/dist/data/graph-edge-routing.cjs +9 -3
  354. package/dist/data/graph-edge-routing.cjs.map +1 -1
  355. package/dist/data/graph-edge-routing.d.ts +2 -0
  356. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  357. package/dist/data/graph-edge-routing.js +9 -3
  358. package/dist/data/graph-edge-routing.js.map +1 -1
  359. package/dist/data/json-view/JsonSource.cjs +84 -0
  360. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  361. package/dist/data/json-view/JsonSource.d.ts +7 -0
  362. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  363. package/dist/data/json-view/JsonSource.js +84 -0
  364. package/dist/data/json-view/JsonSource.js.map +1 -0
  365. package/dist/data/json-view/parse-prefix.cjs +132 -0
  366. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  367. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  368. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  369. package/dist/data/json-view/parse-prefix.js +132 -0
  370. package/dist/data/json-view/parse-prefix.js.map +1 -0
  371. package/dist/data/json-view/parse-source.cjs +62 -0
  372. package/dist/data/json-view/parse-source.cjs.map +1 -0
  373. package/dist/data/json-view/parse-source.d.ts +16 -0
  374. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  375. package/dist/data/json-view/parse-source.js +62 -0
  376. package/dist/data/json-view/parse-source.js.map +1 -0
  377. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  378. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  379. package/dist/data/json-view/types.d.ts +14 -0
  380. package/dist/data/json-view/types.d.ts.map +1 -0
  381. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  382. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  383. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  384. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  385. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  386. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  387. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  388. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  389. package/dist/data/runtime/RuntimeBar.js +2 -5
  390. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  391. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  392. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  393. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  394. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  395. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  396. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  397. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  398. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  399. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  400. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  401. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  402. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  403. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  404. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  405. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  406. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  407. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  408. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  409. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  410. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  411. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  412. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  413. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  414. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  415. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  416. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  417. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  418. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  419. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  420. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  421. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  422. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  423. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  424. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  425. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  426. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  427. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  428. package/dist/data/use-pan-zoom.cjs +23 -10
  429. package/dist/data/use-pan-zoom.cjs.map +1 -1
  430. package/dist/data/use-pan-zoom.d.ts +16 -2
  431. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  432. package/dist/data/use-pan-zoom.js +23 -10
  433. package/dist/data/use-pan-zoom.js.map +1 -1
  434. package/dist/data/version-info.cjs +3 -3
  435. package/dist/data/version-info.js +3 -3
  436. package/dist/data.cjs +26 -2
  437. package/dist/data.cjs.map +1 -1
  438. package/dist/data.d.ts +1 -0
  439. package/dist/data.d.ts.map +1 -1
  440. package/dist/data.js +24 -0
  441. package/dist/data.js.map +1 -1
  442. package/dist/index.cjs +28 -4
  443. package/dist/index.cjs.map +1 -1
  444. package/dist/index.js +24 -0
  445. package/dist/index.js.map +1 -1
  446. package/dist/layout/Workspace.cjs +13 -4
  447. package/dist/layout/Workspace.cjs.map +1 -1
  448. package/dist/layout/Workspace.d.ts +7 -2
  449. package/dist/layout/Workspace.d.ts.map +1 -1
  450. package/dist/layout/Workspace.js +13 -4
  451. package/dist/layout/Workspace.js.map +1 -1
  452. package/dist/lib/permission-strategies.cjs +71 -11
  453. package/dist/lib/permission-strategies.cjs.map +1 -1
  454. package/dist/lib/permission-strategies.d.ts +3 -0
  455. package/dist/lib/permission-strategies.d.ts.map +1 -1
  456. package/dist/lib/permission-strategies.js +71 -11
  457. package/dist/lib/permission-strategies.js.map +1 -1
  458. package/dist/styles.css +1 -1
  459. package/package.json +5 -3
  460. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  461. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  462. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  463. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  464. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  465. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  466. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  467. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  468. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  469. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  470. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  471. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSchemaBrowser.tree.js","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":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export { ChatFab, type ChatFabProps } from './ChatFab.js';
5
5
  export { ChatButton, type ChatButtonProps } from './ChatButton.js';
6
6
  export { ThreadPicker, type ThreadPickerProps, type ThreadSummary, type ThreadSource, } from './ThreadPicker.js';
7
7
  export { ContextBadges, ContextBadgesReadonly, type ContextBadgesProps, } from './ContextBadges.js';
8
- export { ToolPreferences, CompactToolPreferencesList, type CompactToolPreferencesListProps, type ToolPreferencesProps, type ClaudePermissionMode, type ToolAnnotations, type ToolMeta, type ToolPolicy, } from './ToolPreferences.js';
8
+ export { ToolPreferences, ToolPreferencesMenu, AdvancedChatSettings, CompactToolPreferencesList, type AdvancedChatSettingsProps, type AdvancedTab, type CompactToolPreferencesListProps, type ToolPreferencesMenuProps, type ToolPreferencesProps, type ClaudePermissionMode, type ToolAnnotations, type ToolMeta, type ToolPolicy, } from './ToolPreferences.js';
9
9
  export { AdvancedChatConfig, type AdvancedChatConfigProps, } from './AdvancedChatConfig.js';
10
10
  export { effectiveToolPolicies, withUserRule, type ToolGroup, type ToolPreferenceEntry, type ToolSubGroup, } from './ToolPreferences.model.js';
11
11
  export { normalizeToolPolicy } from '../chat/types.js';
@@ -39,7 +39,7 @@ export type { RuntimeAvailability, RuntimeAvailabilityState, } from '../chat/typ
39
39
  export { ContextMeter, type ContextMeterProps, type ContextMeterMode, type ContextMeterTokens, type ContextMeterCost, type ContextMeterBudget, } from '../chat/ContextMeter.js';
40
40
  export { SessionContextMeter } from './SessionViewer.header.js';
41
41
  export { serializeContext, parseContextPrefix, makeContextId, type ChatContextItem, type ContextTypeConfig, type ContextTypeStyle, } from './context.js';
42
- export { SessionViewer, type SessionViewerProps, type SessionPendingTool, type SessionToolDecision, type SessionEntry, type SessionEvent, type SessionInput, type SessionThemeOverride, } from './SessionViewer.js';
42
+ export { SessionViewer, type SessionViewerProps, type SessionPendingTool, type SessionToolDecision, type SessionEntry, type SessionEvent, type SessionInput, type SessionThemeOverride, type SessionTokenSizer, type SessionTokenSize, type SessionTokenSizingRequest, type SessionTokenSizingResult, } from './SessionViewer.js';
43
43
  export type { ApprovalDecisionFields, ApprovalKind, ApprovalQuestion, ApprovalRequest, ApprovalScope, CommandApproval, ElicitationApproval, ElicitationMode, FileChange, FilesystemApproval, FilesystemOperation, NativeSandboxPolicy, NetworkApproval, SandboxCommandPolicy, SandboxCredentialsPolicy, SandboxFilesystemAccess, SandboxFilesystemPolicy, SandboxNetworkAccess, SandboxNetworkPolicy, SandboxPlatformPolicy, StdinWrite, } from './approval-request.js';
44
44
  export { SessionInspector, type SessionInspectorOptions, type SessionInspectorProps, type SessionInspectorTab, } from './SessionInspector.js';
45
45
  export { fetchRemoteSession, isTerminalSessionLifecycle, mergeSessionMessages, openRemoteSession, sessionFollowUrl, TERMINAL_SESSION_LIFECYCLES, useRemoteSession, type RemoteSessionHandle, type RemoteSessionOptions, type RemoteSessionState, type SessionFollowState, } from './SessionInspector.remote.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/ai/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/ai/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,UAAU,EACV,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,4BAA4B,GAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,WAAW,EAChB,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,GAClC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,2BAA2B,EAC3B,0BAA0B,EAC1B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,wBAAwB,EACxB,iBAAiB,EACjB,yBAAyB,EACzB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,0BAA0B,GAChC,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,IAAI,aAAa,EAClC,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,+BAA+B,EACpC,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,GAClC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,cAAc,EACd,aAAa,GACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,UAAU,EACV,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,0BAA0B,EAC1B,UAAU,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,2BAA2B,EAC3B,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,mBAAmB,EACnB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EACb,WAAW,EACX,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,EACb,KAAK,SAAS,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC"}
@@ -4,7 +4,6 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const AccordionList = require("../../../components/AccordionList.cjs");
6
6
  const Combobox = require("../../../components/Combobox.cjs");
7
- const select = require("../../../components/select.cjs");
8
7
  const SegmentedControl = require("../../../components/SegmentedControl.cjs");
9
8
  const utils = require("../../../lib/utils.cjs");
10
9
  const HoverCard = require("../../../overlay/HoverCard.cjs");
@@ -42,7 +41,7 @@ function PermissionStrategiesEditor({
42
41
  onCreate: () => ({ name: "*", policy: "ask" }),
43
42
  addLabel: "Add permission strategy",
44
43
  addDescription: "Start with a common match preset or define custom conditions.",
45
- itemLabel: ({ item, index }) => `Permission strategy ${index + 1}: ${strategyLabel(item)}`,
44
+ itemLabel: ({ item, index }) => `Permission strategy ${index + 1}: ${permissionStrategies.strategySummary(item)}`,
46
45
  idPrefix: "permission-strategy",
47
46
  renderHeader: ({ item }) => /* @__PURE__ */ jsxRuntime.jsx(StrategyHeader, { rule: item }),
48
47
  renderMeta: ({ item }) => /* @__PURE__ */ jsxRuntime.jsx(MatchCountBadge, { rule: item, tools }),
@@ -71,7 +70,7 @@ function StrategyHeader({ rule }) {
71
70
  children: /* @__PURE__ */ jsxRuntime.jsx(StrategyIcon, { preset, className: "size-4" })
72
71
  }
73
72
  ),
74
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate text-sm font-medium", children: strategyLabel(rule) }),
73
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 text-sm font-medium [overflow-wrap:anywhere]", children: permissionStrategies.strategySummary(rule) }),
75
74
  /* @__PURE__ */ jsxRuntime.jsx(PolicyBadge, { policy: rule.policy })
76
75
  ] });
77
76
  }
@@ -143,17 +142,18 @@ function PermissionStrategyFields({
143
142
  available.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "grid gap-1 text-xs font-medium sm:max-w-xs", children: [
144
143
  "Add condition",
145
144
  /* @__PURE__ */ jsxRuntime.jsx(
146
- select.Select,
145
+ Combobox.Combobox,
147
146
  {
147
+ ariaLabel: "Add condition",
148
148
  value: "",
149
149
  placeholder: "Choose metadata…",
150
- onChange: (event) => onChange(
151
- permissionStrategies.addCondition(value, event.target.value)
152
- ),
150
+ onChange: (field) => {
151
+ if (field) onChange(permissionStrategies.addCondition(value, field));
152
+ },
153
153
  options: permissionStrategies.MATCH_FIELD_OPTIONS.filter(
154
154
  (option) => available.includes(option.value)
155
155
  ),
156
- className: "border-dashed text-muted-foreground"
156
+ allowCustomValue: false
157
157
  }
158
158
  )
159
159
  ] })
@@ -266,26 +266,6 @@ function PolicyIcon({
266
266
  if (policy === "ask") return /* @__PURE__ */ jsxRuntime.jsx(UiQuestion.UiQuestion, { className });
267
267
  return /* @__PURE__ */ jsxRuntime.jsx(UiSparkles.UiSparkles, { className });
268
268
  }
269
- function strategyLabel(rule) {
270
- var _a, _b;
271
- const preset = permissionStrategies.strategyPreset(rule);
272
- if (preset !== "custom") {
273
- return ((_a = permissionStrategies.STRATEGY_PRESETS.find((option) => option.value === preset)) == null ? void 0 : _a.label) ?? "All tools";
274
- }
275
- const fields = permissionStrategies.activeMatchFields(rule);
276
- if (fields.length !== 1) {
277
- return `Custom conditions · ${fields.length} conditions`;
278
- }
279
- const field = fields[0];
280
- if (!field) return "Custom conditions";
281
- const label = ((_b = permissionStrategies.MATCH_FIELD_OPTIONS.find((option) => option.value === field)) == null ? void 0 : _b.label) ?? field;
282
- const value = permissionStrategies.conditionText(rule, field);
283
- if (Array.isArray(rule[field])) {
284
- return `Custom conditions · ${label} in ${rule[field].length} values`;
285
- }
286
- const displayValue = value === "true" ? "Yes" : value === "false" ? "No" : value;
287
- return `Custom conditions · ${label} ${displayValue}`;
288
- }
289
269
  function policyLabel(policy) {
290
270
  if (policy === "allow") return "On";
291
271
  if (policy === "deny") return "Off";
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionStrategiesEditor.cjs","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { AccordionList } from \"../../../components/AccordionList\";\nimport { Combobox } from \"../../../components/Combobox\";\nimport { Select } from \"../../../components/select\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../../components/SegmentedControl\";\nimport {\n UiEye,\n UiListChecks,\n UiQuestion,\n UiRepeat,\n UiShieldCheck,\n UiShieldSlash,\n UiSliders,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { HoverCard } from \"../../../overlay/HoverCard\";\nimport type { PermissionPolicy, PermissionRule } from \"../../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../../chat/types\";\nimport {\n MATCH_FIELDS,\n MATCH_FIELD_OPTIONS,\n STRATEGY_PRESETS,\n activeMatchFields,\n addCondition,\n applyStrategyPreset,\n conditionText,\n matchingTools,\n strategyPreset,\n type MatchField,\n type StrategyPreset,\n} from \"../../../lib/permission-strategies\";\nimport { PermissionStrategyConditionRow } from \"./PermissionStrategyConditionRow\";\n\nexport function PermissionStrategiesEditor({\n value,\n tools,\n onChange,\n}: {\n value: PermissionPolicy;\n tools: ToolMeta[];\n onChange: (value: PermissionPolicy) => void;\n}) {\n return (\n <section className=\"space-y-2\">\n <div>\n <h3 className=\"text-sm font-semibold\">Permission strategies</h3>\n <p className=\"text-xs text-muted-foreground\">\n Match tool metadata and assign authority. Later rows win.\n </p>\n </div>\n <AccordionList\n items={value}\n onChange={onChange}\n allowDrag\n allowReorder\n allowDuplicate\n allowRemove\n cloneItem={(rule) => structuredClone(rule)}\n onCreate={(): PermissionRule => ({ name: \"*\", policy: \"ask\" })}\n addLabel=\"Add permission strategy\"\n addDescription=\"Start with a common match preset or define custom conditions.\"\n itemLabel={({ item, index }) =>\n `Permission strategy ${index + 1}: ${strategyLabel(item)}`\n }\n idPrefix=\"permission-strategy\"\n renderHeader={({ item }) => <StrategyHeader rule={item} />}\n renderMeta={({ item }) => <MatchCountBadge rule={item} tools={tools} />}\n renderBody={({ item, onChange: changeRule }) => (\n <PermissionStrategyFields\n value={item}\n tools={tools}\n onChange={changeRule}\n />\n )}\n />\n </section>\n );\n}\n\nfunction StrategyHeader({ rule }: { rule: PermissionRule }) {\n const preset = strategyPreset(rule);\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md\",\n strategyIconStyle(preset),\n )}\n >\n <StrategyIcon preset={preset} className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium\">\n {strategyLabel(rule)}\n </span>\n <PolicyBadge policy={rule.policy} />\n </div>\n );\n}\n\nfunction PermissionStrategyFields({\n value,\n tools,\n onChange,\n}: {\n value: PermissionRule;\n tools: ToolMeta[];\n onChange: (value: PermissionRule) => void;\n}) {\n const inferredPreset = strategyPreset(value);\n const [custom, setCustom] = useState(inferredPreset === \"custom\");\n const preset = custom ? \"custom\" : inferredPreset;\n const fields = activeMatchFields(value);\n const available = MATCH_FIELDS.filter((field) => !fields.includes(field));\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 md:grid-cols-2\">\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Match preset</span>\n <Combobox\n ariaLabel=\"Match preset\"\n value={preset}\n options={STRATEGY_PRESETS.map((option) => ({\n value: option.value,\n label: option.label,\n description: option.description,\n icon: <StrategyIcon preset={option.value} className=\"size-4\" />,\n }))}\n onChange={(nextValue) => {\n const next = nextValue as StrategyPreset;\n setCustom(next === \"custom\");\n if (next === \"custom\") {\n if (inferredPreset !== \"custom\") {\n onChange({ group: \"*\", policy: value.policy });\n }\n return;\n }\n onChange(applyStrategyPreset(value, next));\n }}\n allowCustomValue={false}\n required\n />\n </div>\n <PolicyControl\n value={value.policy}\n onChange={(policy) => onChange({ ...value, policy })}\n />\n </div>\n\n {preset === \"custom\" ? (\n <div className=\"space-y-2 rounded-lg border border-border bg-background p-3\">\n <div>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Match conditions\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n Every condition must match. Comma-separated patterns within one\n field are alternatives.\n </p>\n </div>\n {fields.map((field, index) => (\n <PermissionStrategyConditionRow\n key={`${field}-${index}`}\n rule={value}\n field={field}\n index={index}\n tools={tools}\n onChange={onChange}\n />\n ))}\n {available.length > 0 && (\n <label className=\"grid gap-1 text-xs font-medium sm:max-w-xs\">\n Add condition\n <Select\n value=\"\"\n placeholder=\"Choose metadata…\"\n onChange={(event) =>\n onChange(\n addCondition(value, event.target.value as MatchField),\n )\n }\n options={MATCH_FIELD_OPTIONS.filter((option) =>\n available.includes(option.value),\n )}\n className=\"border-dashed text-muted-foreground\"\n />\n </label>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PolicyControl({\n value,\n onChange,\n}: {\n value: ToolPolicy;\n onChange: (value: ToolPolicy) => void;\n}) {\n const options: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\", icon: UiSparkles },\n { id: \"ask\", label: \"Ask\", icon: UiQuestion },\n { id: \"deny\", label: \"Off\", icon: UiShieldSlash },\n { id: \"allow\", label: \"On\", icon: UiShieldCheck },\n ];\n return (\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Policy</span>\n <div\n data-testid=\"permission-policy-control\"\n data-policy={value}\n className={cn(\"rounded-md border p-1\", policyStyle(value))}\n >\n <SegmentedControl\n aria-label=\"Policy\"\n value={value}\n options={options}\n onChange={onChange}\n size=\"sm\"\n className=\"w-full justify-stretch\"\n />\n </div>\n </div>\n );\n}\n\nfunction MatchCountBadge({\n rule,\n tools,\n}: {\n rule: PermissionRule;\n tools: ToolMeta[];\n}) {\n const matches = matchingTools(rule, tools);\n const label = `${matches.length} matching ${\n matches.length === 1 ? \"operation\" : \"operations\"\n }`;\n return (\n <HoverCard\n placement=\"top\"\n cardClassName=\"max-w-sm whitespace-normal p-3\"\n trigger={\n <button\n type=\"button\"\n aria-label={label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/40 px-2.5 py-1 text-xs font-semibold text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <UiListChecks className=\"size-3.5\" />\n {label}\n </button>\n }\n >\n <div className=\"text-xs font-semibold text-foreground\">{label}</div>\n {matches.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {matches.map((tool) => (\n <span\n key={tool.name}\n className=\"rounded border border-border bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground\"\n >\n {tool.name}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n No catalog operation matches every condition.\n </p>\n )}\n </HoverCard>\n );\n}\n\nfunction PolicyBadge({ policy }: { policy: ToolPolicy }) {\n return (\n <span\n aria-label={`Policy: ${policyLabel(policy)}`}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n policyStyle(policy),\n )}\n >\n <PolicyIcon policy={policy} className=\"size-3\" />\n {policyLabel(policy)}\n </span>\n );\n}\n\nfunction StrategyIcon({\n preset,\n className,\n}: {\n preset: StrategyPreset;\n className?: string;\n}) {\n if (preset === \"all\") return <UiListChecks className={className} />;\n if (preset === \"read-only\") return <UiEye className={className} />;\n if (preset === \"destructive\")\n return <UiWarningTriangle className={className} />;\n if (preset === \"idempotent\") return <UiRepeat className={className} />;\n return <UiSliders className={className} />;\n}\n\nfunction PolicyIcon({\n policy,\n className,\n}: {\n policy: ToolPolicy;\n className?: string;\n}) {\n if (policy === \"allow\") return <UiShieldCheck className={className} />;\n if (policy === \"deny\") return <UiShieldSlash className={className} />;\n if (policy === \"ask\") return <UiQuestion className={className} />;\n return <UiSparkles className={className} />;\n}\n\nfunction strategyLabel(rule: PermissionRule): string {\n const preset = strategyPreset(rule);\n if (preset !== \"custom\") {\n return (\n STRATEGY_PRESETS.find((option) => option.value === preset)?.label ??\n \"All tools\"\n );\n }\n const fields = activeMatchFields(rule);\n if (fields.length !== 1) {\n return `Custom conditions · ${fields.length} conditions`;\n }\n const field = fields[0];\n if (!field) return \"Custom conditions\";\n const label =\n MATCH_FIELD_OPTIONS.find((option) => option.value === field)?.label ??\n field;\n const value = conditionText(rule, field);\n if (Array.isArray(rule[field])) {\n return `Custom conditions · ${label} in ${rule[field].length} values`;\n }\n const displayValue =\n value === \"true\" ? \"Yes\" : value === \"false\" ? \"No\" : value;\n return `Custom conditions · ${label} ${displayValue}`;\n}\n\nfunction policyLabel(policy: ToolPolicy): string {\n if (policy === \"allow\") return \"On\";\n if (policy === \"deny\") return \"Off\";\n if (policy === \"ask\") return \"Ask\";\n return \"Auto\";\n}\n\nfunction strategyIconStyle(preset: StrategyPreset): string {\n if (preset === \"read-only\") return \"bg-emerald-500/10 text-emerald-700\";\n if (preset === \"destructive\") return \"bg-red-500/10 text-red-700\";\n if (preset === \"idempotent\") return \"bg-sky-500/10 text-sky-700\";\n if (preset === \"all\") return \"bg-violet-500/10 text-violet-700\";\n return \"bg-muted text-muted-foreground\";\n}\n\nfunction policyStyle(policy: ToolPolicy): string {\n if (policy === \"allow\") {\n return \"border-emerald-500/30 bg-emerald-500/10 text-emerald-700\";\n }\n if (policy === \"deny\") return \"border-red-500/30 bg-red-500/10 text-red-700\";\n if (policy === \"ask\") {\n return \"border-amber-500/30 bg-amber-500/10 text-amber-700\";\n }\n return \"border-violet-500/30 bg-violet-500/10 text-violet-700\";\n}\n"],"names":["jsxs","jsx","AccordionList","strategyPreset","cn","useState","activeMatchFields","MATCH_FIELDS","Combobox","STRATEGY_PRESETS","applyStrategyPreset","PermissionStrategyConditionRow","Select","addCondition","MATCH_FIELD_OPTIONS","UiSparkles","UiQuestion","UiShieldSlash","UiShieldCheck","SegmentedControl","matchingTools","HoverCard","UiListChecks","UiEye","UiWarningTriangle","UiRepeat","UiSliders","conditionText"],"mappings":"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"}
1
+ {"version":3,"file":"PermissionStrategiesEditor.cjs","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { AccordionList } from \"../../../components/AccordionList\";\nimport { Combobox } from \"../../../components/Combobox\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../../components/SegmentedControl\";\nimport {\n UiEye,\n UiListChecks,\n UiQuestion,\n UiRepeat,\n UiShieldCheck,\n UiShieldSlash,\n UiSliders,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { HoverCard } from \"../../../overlay/HoverCard\";\nimport type { PermissionPolicy, PermissionRule } from \"../../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../../chat/types\";\nimport {\n MATCH_FIELDS,\n MATCH_FIELD_OPTIONS,\n STRATEGY_PRESETS,\n activeMatchFields,\n addCondition,\n applyStrategyPreset,\n matchingTools,\n strategyPreset,\n strategySummary,\n type MatchField,\n type StrategyPreset,\n} from \"../../../lib/permission-strategies\";\nimport { PermissionStrategyConditionRow } from \"./PermissionStrategyConditionRow\";\n\nexport function PermissionStrategiesEditor({\n value,\n tools,\n onChange,\n}: {\n value: PermissionPolicy;\n tools: ToolMeta[];\n onChange: (value: PermissionPolicy) => void;\n}) {\n return (\n <section className=\"space-y-2\">\n <div>\n <h3 className=\"text-sm font-semibold\">Permission strategies</h3>\n <p className=\"text-xs text-muted-foreground\">\n Match tool metadata and assign authority. Later rows win.\n </p>\n </div>\n <AccordionList\n items={value}\n onChange={onChange}\n allowDrag\n allowReorder\n allowDuplicate\n allowRemove\n cloneItem={(rule) => structuredClone(rule)}\n onCreate={(): PermissionRule => ({ name: \"*\", policy: \"ask\" })}\n addLabel=\"Add permission strategy\"\n addDescription=\"Start with a common match preset or define custom conditions.\"\n itemLabel={({ item, index }) =>\n `Permission strategy ${index + 1}: ${strategySummary(item)}`\n }\n idPrefix=\"permission-strategy\"\n renderHeader={({ item }) => <StrategyHeader rule={item} />}\n renderMeta={({ item }) => <MatchCountBadge rule={item} tools={tools} />}\n renderBody={({ item, onChange: changeRule }) => (\n <PermissionStrategyFields\n value={item}\n tools={tools}\n onChange={changeRule}\n />\n )}\n />\n </section>\n );\n}\n\nfunction StrategyHeader({ rule }: { rule: PermissionRule }) {\n const preset = strategyPreset(rule);\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md\",\n strategyIconStyle(preset),\n )}\n >\n <StrategyIcon preset={preset} className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1 text-sm font-medium [overflow-wrap:anywhere]\">\n {strategySummary(rule)}\n </span>\n <PolicyBadge policy={rule.policy} />\n </div>\n );\n}\n\nfunction PermissionStrategyFields({\n value,\n tools,\n onChange,\n}: {\n value: PermissionRule;\n tools: ToolMeta[];\n onChange: (value: PermissionRule) => void;\n}) {\n const inferredPreset = strategyPreset(value);\n const [custom, setCustom] = useState(inferredPreset === \"custom\");\n const preset = custom ? \"custom\" : inferredPreset;\n const fields = activeMatchFields(value);\n const available = MATCH_FIELDS.filter((field) => !fields.includes(field));\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 md:grid-cols-2\">\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Match preset</span>\n <Combobox\n ariaLabel=\"Match preset\"\n value={preset}\n options={STRATEGY_PRESETS.map((option) => ({\n value: option.value,\n label: option.label,\n description: option.description,\n icon: <StrategyIcon preset={option.value} className=\"size-4\" />,\n }))}\n onChange={(nextValue) => {\n const next = nextValue as StrategyPreset;\n setCustom(next === \"custom\");\n if (next === \"custom\") {\n if (inferredPreset !== \"custom\") {\n onChange({ group: \"*\", policy: value.policy });\n }\n return;\n }\n onChange(applyStrategyPreset(value, next));\n }}\n allowCustomValue={false}\n required\n />\n </div>\n <PolicyControl\n value={value.policy}\n onChange={(policy) => onChange({ ...value, policy })}\n />\n </div>\n\n {preset === \"custom\" ? (\n <div className=\"space-y-2 rounded-lg border border-border bg-background p-3\">\n <div>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Match conditions\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n Every condition must match. Comma-separated patterns within one\n field are alternatives.\n </p>\n </div>\n {fields.map((field, index) => (\n <PermissionStrategyConditionRow\n key={`${field}-${index}`}\n rule={value}\n field={field}\n index={index}\n tools={tools}\n onChange={onChange}\n />\n ))}\n {available.length > 0 && (\n <label className=\"grid gap-1 text-xs font-medium sm:max-w-xs\">\n Add condition\n <Combobox\n ariaLabel=\"Add condition\"\n value=\"\"\n placeholder=\"Choose metadata…\"\n onChange={(field) => {\n if (field) onChange(addCondition(value, field as MatchField));\n }}\n options={MATCH_FIELD_OPTIONS.filter((option) =>\n available.includes(option.value),\n )}\n allowCustomValue={false}\n />\n </label>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PolicyControl({\n value,\n onChange,\n}: {\n value: ToolPolicy;\n onChange: (value: ToolPolicy) => void;\n}) {\n const options: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\", icon: UiSparkles },\n { id: \"ask\", label: \"Ask\", icon: UiQuestion },\n { id: \"deny\", label: \"Off\", icon: UiShieldSlash },\n { id: \"allow\", label: \"On\", icon: UiShieldCheck },\n ];\n return (\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Policy</span>\n <div\n data-testid=\"permission-policy-control\"\n data-policy={value}\n className={cn(\"rounded-md border p-1\", policyStyle(value))}\n >\n <SegmentedControl\n aria-label=\"Policy\"\n value={value}\n options={options}\n onChange={onChange}\n size=\"sm\"\n className=\"w-full justify-stretch\"\n />\n </div>\n </div>\n );\n}\n\nfunction MatchCountBadge({\n rule,\n tools,\n}: {\n rule: PermissionRule;\n tools: ToolMeta[];\n}) {\n const matches = matchingTools(rule, tools);\n const label = `${matches.length} matching ${\n matches.length === 1 ? \"operation\" : \"operations\"\n }`;\n return (\n <HoverCard\n placement=\"top\"\n cardClassName=\"max-w-sm whitespace-normal p-3\"\n trigger={\n <button\n type=\"button\"\n aria-label={label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/40 px-2.5 py-1 text-xs font-semibold text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <UiListChecks className=\"size-3.5\" />\n {label}\n </button>\n }\n >\n <div className=\"text-xs font-semibold text-foreground\">{label}</div>\n {matches.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {matches.map((tool) => (\n <span\n key={tool.name}\n className=\"rounded border border-border bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground\"\n >\n {tool.name}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n No catalog operation matches every condition.\n </p>\n )}\n </HoverCard>\n );\n}\n\nfunction PolicyBadge({ policy }: { policy: ToolPolicy }) {\n return (\n <span\n aria-label={`Policy: ${policyLabel(policy)}`}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n policyStyle(policy),\n )}\n >\n <PolicyIcon policy={policy} className=\"size-3\" />\n {policyLabel(policy)}\n </span>\n );\n}\n\nfunction StrategyIcon({\n preset,\n className,\n}: {\n preset: StrategyPreset;\n className?: string;\n}) {\n if (preset === \"all\") return <UiListChecks className={className} />;\n if (preset === \"read-only\") return <UiEye className={className} />;\n if (preset === \"destructive\")\n return <UiWarningTriangle className={className} />;\n if (preset === \"idempotent\") return <UiRepeat className={className} />;\n return <UiSliders className={className} />;\n}\n\nfunction PolicyIcon({\n policy,\n className,\n}: {\n policy: ToolPolicy;\n className?: string;\n}) {\n if (policy === \"allow\") return <UiShieldCheck className={className} />;\n if (policy === \"deny\") return <UiShieldSlash className={className} />;\n if (policy === \"ask\") return <UiQuestion className={className} />;\n return <UiSparkles className={className} />;\n}\n\nfunction policyLabel(policy: ToolPolicy): string {\n if (policy === \"allow\") return \"On\";\n if (policy === \"deny\") return \"Off\";\n if (policy === \"ask\") return \"Ask\";\n return \"Auto\";\n}\n\nfunction strategyIconStyle(preset: StrategyPreset): string {\n if (preset === \"read-only\") return \"bg-emerald-500/10 text-emerald-700\";\n if (preset === \"destructive\") return \"bg-red-500/10 text-red-700\";\n if (preset === \"idempotent\") return \"bg-sky-500/10 text-sky-700\";\n if (preset === \"all\") return \"bg-violet-500/10 text-violet-700\";\n return \"bg-muted text-muted-foreground\";\n}\n\nfunction policyStyle(policy: ToolPolicy): string {\n if (policy === \"allow\") {\n return \"border-emerald-500/30 bg-emerald-500/10 text-emerald-700\";\n }\n if (policy === \"deny\") return \"border-red-500/30 bg-red-500/10 text-red-700\";\n if (policy === \"ask\") {\n return \"border-amber-500/30 bg-amber-500/10 text-amber-700\";\n }\n return \"border-violet-500/30 bg-violet-500/10 text-violet-700\";\n}\n"],"names":["jsxs","jsx","AccordionList","strategySummary","strategyPreset","cn","useState","activeMatchFields","MATCH_FIELDS","Combobox","STRATEGY_PRESETS","applyStrategyPreset","PermissionStrategyConditionRow","addCondition","MATCH_FIELD_OPTIONS","UiSparkles","UiQuestion","UiShieldSlash","UiShieldCheck","SegmentedControl","matchingTools","HoverCard","UiListChecks","UiEye","UiWarningTriangle","UiRepeat","UiSliders"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionStrategiesEditor.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AAgB7D,wBAAgB,0BAA0B,CAAC,EACzC,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC7C,+BAoCA"}
1
+ {"version":3,"file":"PermissionStrategiesEditor.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AAgB7D,wBAAgB,0BAA0B,CAAC,EACzC,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC7C,+BAoCA"}
@@ -2,11 +2,10 @@ import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
3
  import { AccordionList } from "../../../components/AccordionList.js";
4
4
  import { Combobox } from "../../../components/Combobox.js";
5
- import { Select } from "../../../components/select.js";
6
5
  import { SegmentedControl } from "../../../components/SegmentedControl.js";
7
6
  import { cn } from "../../../lib/utils.js";
8
7
  import { HoverCard } from "../../../overlay/HoverCard.js";
9
- import { strategyPreset, activeMatchFields, MATCH_FIELDS, applyStrategyPreset, STRATEGY_PRESETS, MATCH_FIELD_OPTIONS, addCondition, matchingTools, conditionText } from "../../../lib/permission-strategies.js";
8
+ import { strategySummary, strategyPreset, activeMatchFields, MATCH_FIELDS, applyStrategyPreset, STRATEGY_PRESETS, MATCH_FIELD_OPTIONS, addCondition, matchingTools } from "../../../lib/permission-strategies.js";
10
9
  import { PermissionStrategyConditionRow } from "./PermissionStrategyConditionRow.js";
11
10
  import { UiListChecks } from "../../../icons/components/UiListChecks.js";
12
11
  import { UiEye } from "../../../icons/components/UiEye.js";
@@ -40,7 +39,7 @@ function PermissionStrategiesEditor({
40
39
  onCreate: () => ({ name: "*", policy: "ask" }),
41
40
  addLabel: "Add permission strategy",
42
41
  addDescription: "Start with a common match preset or define custom conditions.",
43
- itemLabel: ({ item, index }) => `Permission strategy ${index + 1}: ${strategyLabel(item)}`,
42
+ itemLabel: ({ item, index }) => `Permission strategy ${index + 1}: ${strategySummary(item)}`,
44
43
  idPrefix: "permission-strategy",
45
44
  renderHeader: ({ item }) => /* @__PURE__ */ jsx(StrategyHeader, { rule: item }),
46
45
  renderMeta: ({ item }) => /* @__PURE__ */ jsx(MatchCountBadge, { rule: item, tools }),
@@ -69,7 +68,7 @@ function StrategyHeader({ rule }) {
69
68
  children: /* @__PURE__ */ jsx(StrategyIcon, { preset, className: "size-4" })
70
69
  }
71
70
  ),
72
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm font-medium", children: strategyLabel(rule) }),
71
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 text-sm font-medium [overflow-wrap:anywhere]", children: strategySummary(rule) }),
73
72
  /* @__PURE__ */ jsx(PolicyBadge, { policy: rule.policy })
74
73
  ] });
75
74
  }
@@ -141,17 +140,18 @@ function PermissionStrategyFields({
141
140
  available.length > 0 && /* @__PURE__ */ jsxs("label", { className: "grid gap-1 text-xs font-medium sm:max-w-xs", children: [
142
141
  "Add condition",
143
142
  /* @__PURE__ */ jsx(
144
- Select,
143
+ Combobox,
145
144
  {
145
+ ariaLabel: "Add condition",
146
146
  value: "",
147
147
  placeholder: "Choose metadata…",
148
- onChange: (event) => onChange(
149
- addCondition(value, event.target.value)
150
- ),
148
+ onChange: (field) => {
149
+ if (field) onChange(addCondition(value, field));
150
+ },
151
151
  options: MATCH_FIELD_OPTIONS.filter(
152
152
  (option) => available.includes(option.value)
153
153
  ),
154
- className: "border-dashed text-muted-foreground"
154
+ allowCustomValue: false
155
155
  }
156
156
  )
157
157
  ] })
@@ -264,26 +264,6 @@ function PolicyIcon({
264
264
  if (policy === "ask") return /* @__PURE__ */ jsx(UiQuestion, { className });
265
265
  return /* @__PURE__ */ jsx(UiSparkles, { className });
266
266
  }
267
- function strategyLabel(rule) {
268
- var _a, _b;
269
- const preset = strategyPreset(rule);
270
- if (preset !== "custom") {
271
- return ((_a = STRATEGY_PRESETS.find((option) => option.value === preset)) == null ? void 0 : _a.label) ?? "All tools";
272
- }
273
- const fields = activeMatchFields(rule);
274
- if (fields.length !== 1) {
275
- return `Custom conditions · ${fields.length} conditions`;
276
- }
277
- const field = fields[0];
278
- if (!field) return "Custom conditions";
279
- const label = ((_b = MATCH_FIELD_OPTIONS.find((option) => option.value === field)) == null ? void 0 : _b.label) ?? field;
280
- const value = conditionText(rule, field);
281
- if (Array.isArray(rule[field])) {
282
- return `Custom conditions · ${label} in ${rule[field].length} values`;
283
- }
284
- const displayValue = value === "true" ? "Yes" : value === "false" ? "No" : value;
285
- return `Custom conditions · ${label} ${displayValue}`;
286
- }
287
267
  function policyLabel(policy) {
288
268
  if (policy === "allow") return "On";
289
269
  if (policy === "deny") return "Off";
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionStrategiesEditor.js","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { AccordionList } from \"../../../components/AccordionList\";\nimport { Combobox } from \"../../../components/Combobox\";\nimport { Select } from \"../../../components/select\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../../components/SegmentedControl\";\nimport {\n UiEye,\n UiListChecks,\n UiQuestion,\n UiRepeat,\n UiShieldCheck,\n UiShieldSlash,\n UiSliders,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { HoverCard } from \"../../../overlay/HoverCard\";\nimport type { PermissionPolicy, PermissionRule } from \"../../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../../chat/types\";\nimport {\n MATCH_FIELDS,\n MATCH_FIELD_OPTIONS,\n STRATEGY_PRESETS,\n activeMatchFields,\n addCondition,\n applyStrategyPreset,\n conditionText,\n matchingTools,\n strategyPreset,\n type MatchField,\n type StrategyPreset,\n} from \"../../../lib/permission-strategies\";\nimport { PermissionStrategyConditionRow } from \"./PermissionStrategyConditionRow\";\n\nexport function PermissionStrategiesEditor({\n value,\n tools,\n onChange,\n}: {\n value: PermissionPolicy;\n tools: ToolMeta[];\n onChange: (value: PermissionPolicy) => void;\n}) {\n return (\n <section className=\"space-y-2\">\n <div>\n <h3 className=\"text-sm font-semibold\">Permission strategies</h3>\n <p className=\"text-xs text-muted-foreground\">\n Match tool metadata and assign authority. Later rows win.\n </p>\n </div>\n <AccordionList\n items={value}\n onChange={onChange}\n allowDrag\n allowReorder\n allowDuplicate\n allowRemove\n cloneItem={(rule) => structuredClone(rule)}\n onCreate={(): PermissionRule => ({ name: \"*\", policy: \"ask\" })}\n addLabel=\"Add permission strategy\"\n addDescription=\"Start with a common match preset or define custom conditions.\"\n itemLabel={({ item, index }) =>\n `Permission strategy ${index + 1}: ${strategyLabel(item)}`\n }\n idPrefix=\"permission-strategy\"\n renderHeader={({ item }) => <StrategyHeader rule={item} />}\n renderMeta={({ item }) => <MatchCountBadge rule={item} tools={tools} />}\n renderBody={({ item, onChange: changeRule }) => (\n <PermissionStrategyFields\n value={item}\n tools={tools}\n onChange={changeRule}\n />\n )}\n />\n </section>\n );\n}\n\nfunction StrategyHeader({ rule }: { rule: PermissionRule }) {\n const preset = strategyPreset(rule);\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md\",\n strategyIconStyle(preset),\n )}\n >\n <StrategyIcon preset={preset} className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium\">\n {strategyLabel(rule)}\n </span>\n <PolicyBadge policy={rule.policy} />\n </div>\n );\n}\n\nfunction PermissionStrategyFields({\n value,\n tools,\n onChange,\n}: {\n value: PermissionRule;\n tools: ToolMeta[];\n onChange: (value: PermissionRule) => void;\n}) {\n const inferredPreset = strategyPreset(value);\n const [custom, setCustom] = useState(inferredPreset === \"custom\");\n const preset = custom ? \"custom\" : inferredPreset;\n const fields = activeMatchFields(value);\n const available = MATCH_FIELDS.filter((field) => !fields.includes(field));\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 md:grid-cols-2\">\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Match preset</span>\n <Combobox\n ariaLabel=\"Match preset\"\n value={preset}\n options={STRATEGY_PRESETS.map((option) => ({\n value: option.value,\n label: option.label,\n description: option.description,\n icon: <StrategyIcon preset={option.value} className=\"size-4\" />,\n }))}\n onChange={(nextValue) => {\n const next = nextValue as StrategyPreset;\n setCustom(next === \"custom\");\n if (next === \"custom\") {\n if (inferredPreset !== \"custom\") {\n onChange({ group: \"*\", policy: value.policy });\n }\n return;\n }\n onChange(applyStrategyPreset(value, next));\n }}\n allowCustomValue={false}\n required\n />\n </div>\n <PolicyControl\n value={value.policy}\n onChange={(policy) => onChange({ ...value, policy })}\n />\n </div>\n\n {preset === \"custom\" ? (\n <div className=\"space-y-2 rounded-lg border border-border bg-background p-3\">\n <div>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Match conditions\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n Every condition must match. Comma-separated patterns within one\n field are alternatives.\n </p>\n </div>\n {fields.map((field, index) => (\n <PermissionStrategyConditionRow\n key={`${field}-${index}`}\n rule={value}\n field={field}\n index={index}\n tools={tools}\n onChange={onChange}\n />\n ))}\n {available.length > 0 && (\n <label className=\"grid gap-1 text-xs font-medium sm:max-w-xs\">\n Add condition\n <Select\n value=\"\"\n placeholder=\"Choose metadata…\"\n onChange={(event) =>\n onChange(\n addCondition(value, event.target.value as MatchField),\n )\n }\n options={MATCH_FIELD_OPTIONS.filter((option) =>\n available.includes(option.value),\n )}\n className=\"border-dashed text-muted-foreground\"\n />\n </label>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PolicyControl({\n value,\n onChange,\n}: {\n value: ToolPolicy;\n onChange: (value: ToolPolicy) => void;\n}) {\n const options: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\", icon: UiSparkles },\n { id: \"ask\", label: \"Ask\", icon: UiQuestion },\n { id: \"deny\", label: \"Off\", icon: UiShieldSlash },\n { id: \"allow\", label: \"On\", icon: UiShieldCheck },\n ];\n return (\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Policy</span>\n <div\n data-testid=\"permission-policy-control\"\n data-policy={value}\n className={cn(\"rounded-md border p-1\", policyStyle(value))}\n >\n <SegmentedControl\n aria-label=\"Policy\"\n value={value}\n options={options}\n onChange={onChange}\n size=\"sm\"\n className=\"w-full justify-stretch\"\n />\n </div>\n </div>\n );\n}\n\nfunction MatchCountBadge({\n rule,\n tools,\n}: {\n rule: PermissionRule;\n tools: ToolMeta[];\n}) {\n const matches = matchingTools(rule, tools);\n const label = `${matches.length} matching ${\n matches.length === 1 ? \"operation\" : \"operations\"\n }`;\n return (\n <HoverCard\n placement=\"top\"\n cardClassName=\"max-w-sm whitespace-normal p-3\"\n trigger={\n <button\n type=\"button\"\n aria-label={label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/40 px-2.5 py-1 text-xs font-semibold text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <UiListChecks className=\"size-3.5\" />\n {label}\n </button>\n }\n >\n <div className=\"text-xs font-semibold text-foreground\">{label}</div>\n {matches.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {matches.map((tool) => (\n <span\n key={tool.name}\n className=\"rounded border border-border bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground\"\n >\n {tool.name}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n No catalog operation matches every condition.\n </p>\n )}\n </HoverCard>\n );\n}\n\nfunction PolicyBadge({ policy }: { policy: ToolPolicy }) {\n return (\n <span\n aria-label={`Policy: ${policyLabel(policy)}`}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n policyStyle(policy),\n )}\n >\n <PolicyIcon policy={policy} className=\"size-3\" />\n {policyLabel(policy)}\n </span>\n );\n}\n\nfunction StrategyIcon({\n preset,\n className,\n}: {\n preset: StrategyPreset;\n className?: string;\n}) {\n if (preset === \"all\") return <UiListChecks className={className} />;\n if (preset === \"read-only\") return <UiEye className={className} />;\n if (preset === \"destructive\")\n return <UiWarningTriangle className={className} />;\n if (preset === \"idempotent\") return <UiRepeat className={className} />;\n return <UiSliders className={className} />;\n}\n\nfunction PolicyIcon({\n policy,\n className,\n}: {\n policy: ToolPolicy;\n className?: string;\n}) {\n if (policy === \"allow\") return <UiShieldCheck className={className} />;\n if (policy === \"deny\") return <UiShieldSlash className={className} />;\n if (policy === \"ask\") return <UiQuestion className={className} />;\n return <UiSparkles className={className} />;\n}\n\nfunction strategyLabel(rule: PermissionRule): string {\n const preset = strategyPreset(rule);\n if (preset !== \"custom\") {\n return (\n STRATEGY_PRESETS.find((option) => option.value === preset)?.label ??\n \"All tools\"\n );\n }\n const fields = activeMatchFields(rule);\n if (fields.length !== 1) {\n return `Custom conditions · ${fields.length} conditions`;\n }\n const field = fields[0];\n if (!field) return \"Custom conditions\";\n const label =\n MATCH_FIELD_OPTIONS.find((option) => option.value === field)?.label ??\n field;\n const value = conditionText(rule, field);\n if (Array.isArray(rule[field])) {\n return `Custom conditions · ${label} in ${rule[field].length} values`;\n }\n const displayValue =\n value === \"true\" ? \"Yes\" : value === \"false\" ? \"No\" : value;\n return `Custom conditions · ${label} ${displayValue}`;\n}\n\nfunction policyLabel(policy: ToolPolicy): string {\n if (policy === \"allow\") return \"On\";\n if (policy === \"deny\") return \"Off\";\n if (policy === \"ask\") return \"Ask\";\n return \"Auto\";\n}\n\nfunction strategyIconStyle(preset: StrategyPreset): string {\n if (preset === \"read-only\") return \"bg-emerald-500/10 text-emerald-700\";\n if (preset === \"destructive\") return \"bg-red-500/10 text-red-700\";\n if (preset === \"idempotent\") return \"bg-sky-500/10 text-sky-700\";\n if (preset === \"all\") return \"bg-violet-500/10 text-violet-700\";\n return \"bg-muted text-muted-foreground\";\n}\n\nfunction policyStyle(policy: ToolPolicy): string {\n if (policy === \"allow\") {\n return \"border-emerald-500/30 bg-emerald-500/10 text-emerald-700\";\n }\n if (policy === \"deny\") return \"border-red-500/30 bg-red-500/10 text-red-700\";\n if (policy === \"ask\") {\n return \"border-amber-500/30 bg-amber-500/10 text-amber-700\";\n }\n return \"border-violet-500/30 bg-violet-500/10 text-violet-700\";\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PermissionStrategiesEditor.js","sources":["../../../../src/data/ai/runtime-profiles/PermissionStrategiesEditor.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { AccordionList } from \"../../../components/AccordionList\";\nimport { Combobox } from \"../../../components/Combobox\";\nimport {\n SegmentedControl,\n type SegmentedOption,\n} from \"../../../components/SegmentedControl\";\nimport {\n UiEye,\n UiListChecks,\n UiQuestion,\n UiRepeat,\n UiShieldCheck,\n UiShieldSlash,\n UiSliders,\n UiSparkles,\n UiWarningTriangle,\n} from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { HoverCard } from \"../../../overlay/HoverCard\";\nimport type { PermissionPolicy, PermissionRule } from \"../../chat/tool-policy\";\nimport type { ToolMeta, ToolPolicy } from \"../../chat/types\";\nimport {\n MATCH_FIELDS,\n MATCH_FIELD_OPTIONS,\n STRATEGY_PRESETS,\n activeMatchFields,\n addCondition,\n applyStrategyPreset,\n matchingTools,\n strategyPreset,\n strategySummary,\n type MatchField,\n type StrategyPreset,\n} from \"../../../lib/permission-strategies\";\nimport { PermissionStrategyConditionRow } from \"./PermissionStrategyConditionRow\";\n\nexport function PermissionStrategiesEditor({\n value,\n tools,\n onChange,\n}: {\n value: PermissionPolicy;\n tools: ToolMeta[];\n onChange: (value: PermissionPolicy) => void;\n}) {\n return (\n <section className=\"space-y-2\">\n <div>\n <h3 className=\"text-sm font-semibold\">Permission strategies</h3>\n <p className=\"text-xs text-muted-foreground\">\n Match tool metadata and assign authority. Later rows win.\n </p>\n </div>\n <AccordionList\n items={value}\n onChange={onChange}\n allowDrag\n allowReorder\n allowDuplicate\n allowRemove\n cloneItem={(rule) => structuredClone(rule)}\n onCreate={(): PermissionRule => ({ name: \"*\", policy: \"ask\" })}\n addLabel=\"Add permission strategy\"\n addDescription=\"Start with a common match preset or define custom conditions.\"\n itemLabel={({ item, index }) =>\n `Permission strategy ${index + 1}: ${strategySummary(item)}`\n }\n idPrefix=\"permission-strategy\"\n renderHeader={({ item }) => <StrategyHeader rule={item} />}\n renderMeta={({ item }) => <MatchCountBadge rule={item} tools={tools} />}\n renderBody={({ item, onChange: changeRule }) => (\n <PermissionStrategyFields\n value={item}\n tools={tools}\n onChange={changeRule}\n />\n )}\n />\n </section>\n );\n}\n\nfunction StrategyHeader({ rule }: { rule: PermissionRule }) {\n const preset = strategyPreset(rule);\n return (\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-md\",\n strategyIconStyle(preset),\n )}\n >\n <StrategyIcon preset={preset} className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1 text-sm font-medium [overflow-wrap:anywhere]\">\n {strategySummary(rule)}\n </span>\n <PolicyBadge policy={rule.policy} />\n </div>\n );\n}\n\nfunction PermissionStrategyFields({\n value,\n tools,\n onChange,\n}: {\n value: PermissionRule;\n tools: ToolMeta[];\n onChange: (value: PermissionRule) => void;\n}) {\n const inferredPreset = strategyPreset(value);\n const [custom, setCustom] = useState(inferredPreset === \"custom\");\n const preset = custom ? \"custom\" : inferredPreset;\n const fields = activeMatchFields(value);\n const available = MATCH_FIELDS.filter((field) => !fields.includes(field));\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 md:grid-cols-2\">\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Match preset</span>\n <Combobox\n ariaLabel=\"Match preset\"\n value={preset}\n options={STRATEGY_PRESETS.map((option) => ({\n value: option.value,\n label: option.label,\n description: option.description,\n icon: <StrategyIcon preset={option.value} className=\"size-4\" />,\n }))}\n onChange={(nextValue) => {\n const next = nextValue as StrategyPreset;\n setCustom(next === \"custom\");\n if (next === \"custom\") {\n if (inferredPreset !== \"custom\") {\n onChange({ group: \"*\", policy: value.policy });\n }\n return;\n }\n onChange(applyStrategyPreset(value, next));\n }}\n allowCustomValue={false}\n required\n />\n </div>\n <PolicyControl\n value={value.policy}\n onChange={(policy) => onChange({ ...value, policy })}\n />\n </div>\n\n {preset === \"custom\" ? (\n <div className=\"space-y-2 rounded-lg border border-border bg-background p-3\">\n <div>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Match conditions\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n Every condition must match. Comma-separated patterns within one\n field are alternatives.\n </p>\n </div>\n {fields.map((field, index) => (\n <PermissionStrategyConditionRow\n key={`${field}-${index}`}\n rule={value}\n field={field}\n index={index}\n tools={tools}\n onChange={onChange}\n />\n ))}\n {available.length > 0 && (\n <label className=\"grid gap-1 text-xs font-medium sm:max-w-xs\">\n Add condition\n <Combobox\n ariaLabel=\"Add condition\"\n value=\"\"\n placeholder=\"Choose metadata…\"\n onChange={(field) => {\n if (field) onChange(addCondition(value, field as MatchField));\n }}\n options={MATCH_FIELD_OPTIONS.filter((option) =>\n available.includes(option.value),\n )}\n allowCustomValue={false}\n />\n </label>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PolicyControl({\n value,\n onChange,\n}: {\n value: ToolPolicy;\n onChange: (value: ToolPolicy) => void;\n}) {\n const options: SegmentedOption<ToolPolicy>[] = [\n { id: \"auto\", label: \"Auto\", icon: UiSparkles },\n { id: \"ask\", label: \"Ask\", icon: UiQuestion },\n { id: \"deny\", label: \"Off\", icon: UiShieldSlash },\n { id: \"allow\", label: \"On\", icon: UiShieldCheck },\n ];\n return (\n <div className=\"grid gap-1 text-xs font-medium\">\n <span>Policy</span>\n <div\n data-testid=\"permission-policy-control\"\n data-policy={value}\n className={cn(\"rounded-md border p-1\", policyStyle(value))}\n >\n <SegmentedControl\n aria-label=\"Policy\"\n value={value}\n options={options}\n onChange={onChange}\n size=\"sm\"\n className=\"w-full justify-stretch\"\n />\n </div>\n </div>\n );\n}\n\nfunction MatchCountBadge({\n rule,\n tools,\n}: {\n rule: PermissionRule;\n tools: ToolMeta[];\n}) {\n const matches = matchingTools(rule, tools);\n const label = `${matches.length} matching ${\n matches.length === 1 ? \"operation\" : \"operations\"\n }`;\n return (\n <HoverCard\n placement=\"top\"\n cardClassName=\"max-w-sm whitespace-normal p-3\"\n trigger={\n <button\n type=\"button\"\n aria-label={label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/40 px-2.5 py-1 text-xs font-semibold text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <UiListChecks className=\"size-3.5\" />\n {label}\n </button>\n }\n >\n <div className=\"text-xs font-semibold text-foreground\">{label}</div>\n {matches.length > 0 ? (\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {matches.map((tool) => (\n <span\n key={tool.name}\n className=\"rounded border border-border bg-muted/40 px-2 py-1 font-mono text-[11px] text-foreground\"\n >\n {tool.name}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n No catalog operation matches every condition.\n </p>\n )}\n </HoverCard>\n );\n}\n\nfunction PolicyBadge({ policy }: { policy: ToolPolicy }) {\n return (\n <span\n aria-label={`Policy: ${policyLabel(policy)}`}\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n policyStyle(policy),\n )}\n >\n <PolicyIcon policy={policy} className=\"size-3\" />\n {policyLabel(policy)}\n </span>\n );\n}\n\nfunction StrategyIcon({\n preset,\n className,\n}: {\n preset: StrategyPreset;\n className?: string;\n}) {\n if (preset === \"all\") return <UiListChecks className={className} />;\n if (preset === \"read-only\") return <UiEye className={className} />;\n if (preset === \"destructive\")\n return <UiWarningTriangle className={className} />;\n if (preset === \"idempotent\") return <UiRepeat className={className} />;\n return <UiSliders className={className} />;\n}\n\nfunction PolicyIcon({\n policy,\n className,\n}: {\n policy: ToolPolicy;\n className?: string;\n}) {\n if (policy === \"allow\") return <UiShieldCheck className={className} />;\n if (policy === \"deny\") return <UiShieldSlash className={className} />;\n if (policy === \"ask\") return <UiQuestion className={className} />;\n return <UiSparkles className={className} />;\n}\n\nfunction policyLabel(policy: ToolPolicy): string {\n if (policy === \"allow\") return \"On\";\n if (policy === \"deny\") return \"Off\";\n if (policy === \"ask\") return \"Ask\";\n return \"Auto\";\n}\n\nfunction strategyIconStyle(preset: StrategyPreset): string {\n if (preset === \"read-only\") return \"bg-emerald-500/10 text-emerald-700\";\n if (preset === \"destructive\") return \"bg-red-500/10 text-red-700\";\n if (preset === \"idempotent\") return \"bg-sky-500/10 text-sky-700\";\n if (preset === \"all\") return \"bg-violet-500/10 text-violet-700\";\n return \"bg-muted text-muted-foreground\";\n}\n\nfunction policyStyle(policy: ToolPolicy): string {\n if (policy === \"allow\") {\n return \"border-emerald-500/30 bg-emerald-500/10 text-emerald-700\";\n }\n if (policy === \"deny\") return \"border-red-500/30 bg-red-500/10 text-red-700\";\n if (policy === \"ask\") {\n return \"border-amber-500/30 bg-amber-500/10 text-amber-700\";\n }\n return \"border-violet-500/30 bg-violet-500/10 text-violet-700\";\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { SessionUsage } from './SessionViewer.unified.js';
2
+ export interface SessionTokenSize {
3
+ model: string;
4
+ source: "local-estimate" | "provider-estimate" | "provider-count";
5
+ usage: SessionUsage;
6
+ totalTokens: number;
7
+ costUSD?: number;
8
+ coverage: {
9
+ partial: boolean;
10
+ framingIncluded: boolean;
11
+ excluded?: string[];
12
+ };
13
+ }
14
+ export interface SessionTokenRowResult {
15
+ rowId: string;
16
+ attributed: boolean;
17
+ size?: SessionTokenSize;
18
+ error?: string;
19
+ }
20
+ export interface SessionTokenSizingRequest {
21
+ sessionId: string;
22
+ revision?: number;
23
+ rowIds: string[];
24
+ method: "estimate" | "provider";
25
+ }
26
+ export interface SessionTokenSizingResult {
27
+ sessionId: string;
28
+ revision: number;
29
+ rows: SessionTokenRowResult[];
30
+ }
31
+ export type SessionTokenSizer = (request: SessionTokenSizingRequest, signal: AbortSignal) => Promise<SessionTokenSizingResult>;
32
+ //# sourceMappingURL=session-token-sizing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-token-sizing.d.ts","sourceRoot":"","sources":["../../../src/data/ai/session-token-sizing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IAClE,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC/E;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,qBAAqB,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const SessionTokenContext = react.createContext(void 0);
5
+ function useSessionTokenSizing(session, events, sizeTokens) {
6
+ const identity = typeof session === "object" && !Array.isArray(session) && session !== null && "id" in session ? session : void 0;
7
+ const sessionId = identity == null ? void 0 : identity.id;
8
+ const revision = identity == null ? void 0 : identity.revision;
9
+ const scope = JSON.stringify([sessionId, revision, identity == null ? void 0 : identity.model, identity == null ? void 0 : identity.modelMode]);
10
+ const keys = react.useMemo(() => new Map(events.map((event) => [event.id, JSON.stringify([scope, event.id, event.model, event.text, event.toolInput, event.toolResponse, event.file, event.raw])])), [events, scope]);
11
+ const [values, setValues] = react.useState({});
12
+ const current = react.useRef({ scope, keys });
13
+ current.current = { scope, keys };
14
+ const inFlight = react.useRef(/* @__PURE__ */ new Map());
15
+ const controllers = react.useRef(/* @__PURE__ */ new Set());
16
+ react.useEffect(() => {
17
+ const valid = new Set(keys.values());
18
+ for (const [key, controller] of inFlight.current) {
19
+ if (!valid.has(key)) {
20
+ controller.abort();
21
+ inFlight.current.delete(key);
22
+ }
23
+ }
24
+ setValues((old) => Object.keys(old).every((key) => valid.has(key)) ? old : Object.fromEntries(Object.entries(old).filter(([key]) => valid.has(key))));
25
+ }, [keys]);
26
+ react.useEffect(() => () => {
27
+ for (const controller of controllers.current) controller.abort();
28
+ }, []);
29
+ const calculate = react.useCallback((rowIds, method) => {
30
+ if (!sizeTokens || !sessionId) return;
31
+ const requested = rowIds.flatMap((rowId) => {
32
+ const key = keys.get(rowId);
33
+ if (!key || inFlight.current.has(key)) return [];
34
+ const value = values[key];
35
+ if ((value == null ? void 0 : value.size) && (method === "estimate" || value.size.source !== "local-estimate")) return [];
36
+ return [{ rowId, key }];
37
+ });
38
+ if (requested.length === 0) return;
39
+ const controller = new AbortController();
40
+ controllers.current.add(controller);
41
+ for (const { key } of requested) inFlight.current.set(key, controller);
42
+ setValues((old) => ({ ...old, ...Object.fromEntries(requested.map(({ rowId, key }) => [key, { ...old[key], rowId, attributed: false, pending: true }])) }));
43
+ void (async () => {
44
+ try {
45
+ const result = await sizeTokens({ sessionId, ...revision !== void 0 ? { revision } : {}, rowIds: requested.map(({ rowId }) => rowId), method }, controller.signal);
46
+ if (controller.signal.aborted || current.current.scope !== scope) return;
47
+ if (result.sessionId !== sessionId || revision !== void 0 && result.revision !== revision) throw new Error("Session changed while calculating tokens; retry on the current transcript.");
48
+ const returned = new Map(result.rows.map((row) => [row.rowId, row]));
49
+ setValues((old) => ({ ...old, ...Object.fromEntries(requested.filter(({ rowId, key }) => current.current.keys.get(rowId) === key).map(({ rowId, key }) => [key, returned.get(rowId) ?? { rowId, attributed: false, error: "No token sizing result returned for this row." }])) }));
50
+ } catch (error) {
51
+ if (controller.signal.aborted || current.current.scope !== scope) return;
52
+ const message = error instanceof Error ? error.message : String(error);
53
+ setValues((old) => ({ ...old, ...Object.fromEntries(requested.filter(({ rowId, key }) => current.current.keys.get(rowId) === key).map(({ rowId, key }) => [key, { rowId, attributed: false, error: message }])) }));
54
+ } finally {
55
+ controllers.current.delete(controller);
56
+ for (const { key } of requested) if (inFlight.current.get(key) === controller) inFlight.current.delete(key);
57
+ }
58
+ })();
59
+ }, [keys, revision, scope, sessionId, sizeTokens, values]);
60
+ const enabled = Boolean(sizeTokens && sessionId);
61
+ return {
62
+ context: enabled ? { state: (event) => {
63
+ const key = keys.get(event.id);
64
+ return key ? values[key] : void 0;
65
+ }, calculate } : void 0,
66
+ estimateAll: enabled ? () => calculate(events.filter((event) => !event.pending).map((event) => event.id), "estimate") : void 0,
67
+ calculateMissing: enabled ? () => calculate(events.filter((event) => !event.estimatedCost && !event.pending).map((event) => event.id), "provider") : void 0,
68
+ pending: Object.values(values).some((value) => value.pending)
69
+ };
70
+ }
71
+ exports.SessionTokenContext = SessionTokenContext;
72
+ exports.useSessionTokenSizing = useSessionTokenSizing;
73
+ //# sourceMappingURL=use-session-token-sizing.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-session-token-sizing.cjs","sources":["../../../src/data/ai/use-session-token-sizing.ts"],"sourcesContent":["import { createContext, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { SessionEvent, SessionInput } from \"./SessionViewer.model\";\nimport type { SessionTokenRowResult, SessionTokenSizer } from \"./session-token-sizing\";\n\nexport interface RowTokenState extends SessionTokenRowResult { pending?: boolean }\ninterface TokenSizingContext {\n state: (event: SessionEvent) => RowTokenState | undefined;\n calculate: (rowIds: string[], method: \"estimate\" | \"provider\") => void;\n}\nexport const SessionTokenContext = createContext<TokenSizingContext | undefined>(undefined);\n\nexport function useSessionTokenSizing(session: SessionInput, events: SessionEvent[], sizeTokens?: SessionTokenSizer) {\n const identity = typeof session === \"object\" && !Array.isArray(session) && session !== null && \"id\" in session ? session : undefined;\n const sessionId = identity?.id;\n const revision = identity?.revision;\n const scope = JSON.stringify([sessionId, revision, identity?.model, identity?.modelMode]);\n const keys = useMemo(() => new Map(events.map((event) => [event.id, JSON.stringify([scope, event.id, event.model, event.text, event.toolInput, event.toolResponse, event.file, event.raw])])), [events, scope]);\n const [values, setValues] = useState<Record<string, RowTokenState>>({});\n const current = useRef({ scope, keys });\n current.current = { scope, keys };\n const inFlight = useRef(new Map<string, AbortController>());\n const controllers = useRef(new Set<AbortController>());\n\n useEffect(() => {\n const valid = new Set(keys.values());\n for (const [key, controller] of inFlight.current) {\n if (!valid.has(key)) { controller.abort(); inFlight.current.delete(key); }\n }\n setValues((old) => Object.keys(old).every((key) => valid.has(key)) ? old : Object.fromEntries(Object.entries(old).filter(([key]) => valid.has(key))));\n }, [keys]);\n useEffect(() => () => { for (const controller of controllers.current) controller.abort(); }, []);\n\n const calculate = useCallback((rowIds: string[], method: \"estimate\" | \"provider\") => {\n if (!sizeTokens || !sessionId) return;\n const requested = rowIds.flatMap((rowId) => {\n const key = keys.get(rowId);\n if (!key || inFlight.current.has(key)) return [];\n const value = values[key];\n if (value?.size && (method === \"estimate\" || value.size.source !== \"local-estimate\")) return [];\n return [{ rowId, key }];\n });\n if (requested.length === 0) return;\n const controller = new AbortController();\n controllers.current.add(controller);\n for (const { key } of requested) inFlight.current.set(key, controller);\n setValues((old) => ({ ...old, ...Object.fromEntries(requested.map(({ rowId, key }) => [key, { ...old[key], rowId, attributed: false, pending: true }])) }));\n void (async () => {\n try {\n const result = await sizeTokens({ sessionId, ...(revision !== undefined ? { revision } : {}), rowIds: requested.map(({ rowId }) => rowId), method }, controller.signal);\n if (controller.signal.aborted || current.current.scope !== scope) return;\n if (result.sessionId !== sessionId || (revision !== undefined && result.revision !== revision)) throw new Error(\"Session changed while calculating tokens; retry on the current transcript.\");\n const returned = new Map(result.rows.map((row) => [row.rowId, row]));\n setValues((old) => ({ ...old, ...Object.fromEntries(requested.filter(({ rowId, key }) => current.current.keys.get(rowId) === key).map(({ rowId, key }) => [key, returned.get(rowId) ?? { rowId, attributed: false, error: \"No token sizing result returned for this row.\" }])) }));\n } catch (error) {\n if (controller.signal.aborted || current.current.scope !== scope) return;\n const message = error instanceof Error ? error.message : String(error);\n setValues((old) => ({ ...old, ...Object.fromEntries(requested.filter(({ rowId, key }) => current.current.keys.get(rowId) === key).map(({ rowId, key }) => [key, { rowId, attributed: false, error: message }])) }));\n } finally {\n controllers.current.delete(controller);\n for (const { key } of requested) if (inFlight.current.get(key) === controller) inFlight.current.delete(key);\n }\n })();\n }, [keys, revision, scope, sessionId, sizeTokens, values]);\n\n const enabled = Boolean(sizeTokens && sessionId);\n return {\n context: enabled ? { state: (event: SessionEvent) => { const key = keys.get(event.id); return key ? values[key] : undefined; }, calculate } : undefined,\n estimateAll: enabled ? () => calculate(events.filter((event) => !event.pending).map((event) => event.id), \"estimate\") : undefined,\n calculateMissing: enabled ? () => calculate(events.filter((event) => !event.estimatedCost && !event.pending).map((event) => event.id), \"provider\") : undefined,\n pending: Object.values(values).some((value) => value.pending),\n };\n}\n"],"names":["createContext","useMemo","useState","useRef","useEffect","useCallback"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { SessionEvent, SessionInput } from './SessionViewer.model.js';
2
+ import { SessionTokenRowResult, SessionTokenSizer } from './session-token-sizing.js';
3
+ export interface RowTokenState extends SessionTokenRowResult {
4
+ pending?: boolean;
5
+ }
6
+ interface TokenSizingContext {
7
+ state: (event: SessionEvent) => RowTokenState | undefined;
8
+ calculate: (rowIds: string[], method: "estimate" | "provider") => void;
9
+ }
10
+ export declare const SessionTokenContext: import('react').Context<TokenSizingContext | undefined>;
11
+ export declare function useSessionTokenSizing(session: SessionInput, events: SessionEvent[], sizeTokens?: SessionTokenSizer): {
12
+ context: {
13
+ state: (event: SessionEvent) => RowTokenState | undefined;
14
+ calculate: (rowIds: string[], method: "estimate" | "provider") => void;
15
+ } | undefined;
16
+ estimateAll: (() => void) | undefined;
17
+ calculateMissing: (() => void) | undefined;
18
+ pending: boolean;
19
+ };
20
+ export {};
21
+ //# sourceMappingURL=use-session-token-sizing.d.ts.map