@flanksource/clicky-ui 0.3.29 → 0.3.31

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 (346) hide show
  1. package/dist/ai.cjs +48 -3
  2. package/dist/ai.cjs.map +1 -1
  3. package/dist/ai.js +46 -1
  4. package/dist/ai.js.map +1 -1
  5. package/dist/comments/CommentCard.cjs +110 -262
  6. package/dist/comments/CommentCard.cjs.map +1 -1
  7. package/dist/comments/CommentCard.d.ts +3 -1
  8. package/dist/comments/CommentCard.d.ts.map +1 -1
  9. package/dist/comments/CommentCard.js +105 -257
  10. package/dist/comments/CommentCard.js.map +1 -1
  11. package/dist/comments/CommentCardParts.cjs +95 -0
  12. package/dist/comments/CommentCardParts.cjs.map +1 -0
  13. package/dist/comments/CommentCardParts.d.ts +17 -0
  14. package/dist/comments/CommentCardParts.d.ts.map +1 -0
  15. package/dist/comments/CommentCardParts.js +95 -0
  16. package/dist/comments/CommentCardParts.js.map +1 -0
  17. package/dist/comments/CommentSidePanel.cjs +14 -7
  18. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  19. package/dist/comments/CommentSidePanel.d.ts +3 -1
  20. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  21. package/dist/comments/CommentSidePanel.js +14 -7
  22. package/dist/comments/CommentSidePanel.js.map +1 -1
  23. package/dist/comments/CommentThread.cjs +2 -0
  24. package/dist/comments/CommentThread.cjs.map +1 -1
  25. package/dist/comments/CommentThread.d.ts +2 -1
  26. package/dist/comments/CommentThread.d.ts.map +1 -1
  27. package/dist/comments/CommentThread.js +2 -0
  28. package/dist/comments/CommentThread.js.map +1 -1
  29. package/dist/comments/CommentThreadList.cjs +50 -34
  30. package/dist/comments/CommentThreadList.cjs.map +1 -1
  31. package/dist/comments/CommentThreadList.d.ts +3 -1
  32. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  33. package/dist/comments/CommentThreadList.js +50 -34
  34. package/dist/comments/CommentThreadList.js.map +1 -1
  35. package/dist/components/ComboboxMenu.cjs +4 -1
  36. package/dist/components/ComboboxMenu.cjs.map +1 -1
  37. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  38. package/dist/components/ComboboxMenu.js +5 -2
  39. package/dist/components/ComboboxMenu.js.map +1 -1
  40. package/dist/components/ComboboxTags.cjs +5 -1
  41. package/dist/components/ComboboxTags.cjs.map +1 -1
  42. package/dist/components/ComboboxTags.d.ts.map +1 -1
  43. package/dist/components/ComboboxTags.js +6 -2
  44. package/dist/components/ComboboxTags.js.map +1 -1
  45. package/dist/components/ConnectionLoggingPolicy.cjs +24 -35
  46. package/dist/components/ConnectionLoggingPolicy.cjs.map +1 -1
  47. package/dist/components/ConnectionLoggingPolicy.d.ts.map +1 -1
  48. package/dist/components/ConnectionLoggingPolicy.js +24 -35
  49. package/dist/components/ConnectionLoggingPolicy.js.map +1 -1
  50. package/dist/components/DateField.d.ts +1 -1
  51. package/dist/components/DatePicker.d.ts +1 -1
  52. package/dist/components/DateTimePicker.d.ts +1 -1
  53. package/dist/components/MultiSelect.cjs.map +1 -1
  54. package/dist/components/MultiSelect.d.ts +7 -0
  55. package/dist/components/MultiSelect.d.ts.map +1 -1
  56. package/dist/components/MultiSelect.js.map +1 -1
  57. package/dist/components/filter-bar-multi.cjs +10 -1
  58. package/dist/components/filter-bar-multi.cjs.map +1 -1
  59. package/dist/components/filter-bar-multi.d.ts.map +1 -1
  60. package/dist/components/filter-bar-multi.js +11 -2
  61. package/dist/components/filter-bar-multi.js.map +1 -1
  62. package/dist/components/mdx-editor-callout-model.d.ts +1 -1
  63. package/dist/data/MarkdownEditor.model.d.ts +1 -1
  64. package/dist/data/ai/ChatWindow.catalogs.cjs +11 -5
  65. package/dist/data/ai/ChatWindow.catalogs.cjs.map +1 -1
  66. package/dist/data/ai/ChatWindow.catalogs.d.ts +2 -1
  67. package/dist/data/ai/ChatWindow.catalogs.d.ts.map +1 -1
  68. package/dist/data/ai/ChatWindow.catalogs.js +11 -5
  69. package/dist/data/ai/ChatWindow.catalogs.js.map +1 -1
  70. package/dist/data/ai/ChatWindow.cjs +1 -0
  71. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  72. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  73. package/dist/data/ai/ChatWindow.js +1 -0
  74. package/dist/data/ai/ChatWindow.js.map +1 -1
  75. package/dist/data/ai/PromptRunEditor/VariablesField.cjs +79 -0
  76. package/dist/data/ai/PromptRunEditor/VariablesField.cjs.map +1 -0
  77. package/dist/data/ai/PromptRunEditor/VariablesField.d.ts +8 -0
  78. package/dist/data/ai/PromptRunEditor/VariablesField.d.ts.map +1 -0
  79. package/dist/data/ai/PromptRunEditor/VariablesField.js +79 -0
  80. package/dist/data/ai/PromptRunEditor/VariablesField.js.map +1 -0
  81. package/dist/data/ai/PromptRunEditor/index.cjs +61 -69
  82. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  83. package/dist/data/ai/PromptRunEditor/index.d.ts +11 -1
  84. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  85. package/dist/data/ai/PromptRunEditor/index.js +61 -69
  86. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  87. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
  88. package/dist/data/ai/PromptRunEditor/model.d.ts +2 -0
  89. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
  90. package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
  91. package/dist/data/ai/SessionViewer.model.cjs +23 -8
  92. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  93. package/dist/data/ai/SessionViewer.model.d.ts +8 -0
  94. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  95. package/dist/data/ai/SessionViewer.model.js +23 -8
  96. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  97. package/dist/data/ai/SessionViewer.rows.cjs +9 -1
  98. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  99. package/dist/data/ai/SessionViewer.rows.js +9 -1
  100. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  101. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +4 -3
  102. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  103. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  104. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +2 -1
  105. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  106. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs +2 -2
  107. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs.map +1 -1
  108. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js +1 -1
  109. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +24 -2
  110. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  111. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  112. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +25 -3
  113. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  114. package/dist/data/ai/SpecRuntimeEditor/index.cjs +4 -3
  115. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  116. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  117. package/dist/data/ai/SpecRuntimeEditor/index.js +2 -1
  118. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  119. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  120. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  121. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  122. package/dist/data/ai/SpecRuntimeEditor.model.cjs +4 -0
  123. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  124. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +4 -0
  125. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  126. package/dist/data/ai/SpecRuntimeEditor.model.js +4 -0
  127. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  128. package/dist/data/ai/index.d.ts +3 -2
  129. package/dist/data/ai/index.d.ts.map +1 -1
  130. package/dist/data/ai/runtime-profile.cjs.map +1 -1
  131. package/dist/data/ai/runtime-profile.d.ts +9 -7
  132. package/dist/data/ai/runtime-profile.d.ts.map +1 -1
  133. package/dist/data/ai/runtime-profile.js.map +1 -1
  134. package/dist/data/ai/runtime-profiles/OrderedPresetSelect.cjs +111 -0
  135. package/dist/data/ai/runtime-profiles/OrderedPresetSelect.cjs.map +1 -0
  136. package/dist/data/ai/runtime-profiles/OrderedPresetSelect.d.ts +7 -0
  137. package/dist/data/ai/runtime-profiles/OrderedPresetSelect.d.ts.map +1 -0
  138. package/dist/data/ai/runtime-profiles/OrderedPresetSelect.js +111 -0
  139. package/dist/data/ai/runtime-profiles/OrderedPresetSelect.js.map +1 -0
  140. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +313 -0
  141. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -0
  142. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts +8 -0
  143. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -0
  144. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +313 -0
  145. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -0
  146. package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.cjs +98 -0
  147. package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.cjs.map +1 -0
  148. package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.d.ts +11 -0
  149. package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.d.ts.map +1 -0
  150. package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.js +98 -0
  151. package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.js.map +1 -0
  152. package/dist/data/ai/runtime-profiles/PresetSpecEditor.cjs +35 -0
  153. package/dist/data/ai/runtime-profiles/PresetSpecEditor.cjs.map +1 -0
  154. package/dist/data/ai/runtime-profiles/PresetSpecEditor.d.ts +11 -0
  155. package/dist/data/ai/runtime-profiles/PresetSpecEditor.d.ts.map +1 -0
  156. package/dist/data/ai/runtime-profiles/PresetSpecEditor.js +35 -0
  157. package/dist/data/ai/runtime-profiles/PresetSpecEditor.js.map +1 -0
  158. package/dist/data/ai/runtime-profiles/PresetWorkspace.cjs +179 -0
  159. package/dist/data/ai/runtime-profiles/PresetWorkspace.cjs.map +1 -0
  160. package/dist/data/ai/runtime-profiles/PresetWorkspace.d.ts +22 -0
  161. package/dist/data/ai/runtime-profiles/PresetWorkspace.d.ts.map +1 -0
  162. package/dist/data/ai/runtime-profiles/PresetWorkspace.js +179 -0
  163. package/dist/data/ai/runtime-profiles/PresetWorkspace.js.map +1 -0
  164. package/dist/data/ai/runtime-profiles/ProfileSpecEditor.cjs +57 -0
  165. package/dist/data/ai/runtime-profiles/ProfileSpecEditor.cjs.map +1 -0
  166. package/dist/data/ai/runtime-profiles/ProfileSpecEditor.d.ts +18 -0
  167. package/dist/data/ai/runtime-profiles/ProfileSpecEditor.d.ts.map +1 -0
  168. package/dist/data/ai/runtime-profiles/ProfileSpecEditor.js +57 -0
  169. package/dist/data/ai/runtime-profiles/ProfileSpecEditor.js.map +1 -0
  170. package/dist/data/ai/runtime-profiles/ProfileWorkspace.cjs +135 -0
  171. package/dist/data/ai/runtime-profiles/ProfileWorkspace.cjs.map +1 -0
  172. package/dist/data/ai/runtime-profiles/ProfileWorkspace.d.ts +23 -0
  173. package/dist/data/ai/runtime-profiles/ProfileWorkspace.d.ts.map +1 -0
  174. package/dist/data/ai/runtime-profiles/ProfileWorkspace.js +135 -0
  175. package/dist/data/ai/runtime-profiles/ProfileWorkspace.js.map +1 -0
  176. package/dist/data/ai/runtime-profiles/ResolutionInspector.cjs +85 -0
  177. package/dist/data/ai/runtime-profiles/ResolutionInspector.cjs.map +1 -0
  178. package/dist/data/ai/runtime-profiles/ResolutionInspector.d.ts +7 -0
  179. package/dist/data/ai/runtime-profiles/ResolutionInspector.d.ts.map +1 -0
  180. package/dist/data/ai/runtime-profiles/ResolutionInspector.js +85 -0
  181. package/dist/data/ai/runtime-profiles/ResolutionInspector.js.map +1 -0
  182. package/dist/data/ai/runtime-profiles/ResolutionTrace.cjs +42 -0
  183. package/dist/data/ai/runtime-profiles/ResolutionTrace.cjs.map +1 -0
  184. package/dist/data/ai/runtime-profiles/ResolutionTrace.d.ts +6 -0
  185. package/dist/data/ai/runtime-profiles/ResolutionTrace.d.ts.map +1 -0
  186. package/dist/data/ai/runtime-profiles/ResolutionTrace.js +42 -0
  187. package/dist/data/ai/runtime-profiles/ResolutionTrace.js.map +1 -0
  188. package/dist/data/ai/runtime-profiles/RuntimeLibraryList.cjs +93 -0
  189. package/dist/data/ai/runtime-profiles/RuntimeLibraryList.cjs.map +1 -0
  190. package/dist/data/ai/runtime-profiles/RuntimeLibraryList.d.ts +18 -0
  191. package/dist/data/ai/runtime-profiles/RuntimeLibraryList.d.ts.map +1 -0
  192. package/dist/data/ai/runtime-profiles/RuntimeLibraryList.js +93 -0
  193. package/dist/data/ai/runtime-profiles/RuntimeLibraryList.js.map +1 -0
  194. package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.cjs +44 -0
  195. package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.cjs.map +1 -0
  196. package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.d.ts +6 -0
  197. package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.d.ts.map +1 -0
  198. package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.js +44 -0
  199. package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.js.map +1 -0
  200. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.cjs +198 -0
  201. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.cjs.map +1 -0
  202. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.d.ts +12 -0
  203. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.d.ts.map +1 -0
  204. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.js +198 -0
  205. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.js.map +1 -0
  206. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.cjs +97 -0
  207. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.cjs.map +1 -0
  208. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.d.ts +26 -0
  209. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.d.ts.map +1 -0
  210. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.js +97 -0
  211. package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.js.map +1 -0
  212. package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.cjs +143 -0
  213. package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.cjs.map +1 -0
  214. package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.d.ts +25 -0
  215. package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.d.ts.map +1 -0
  216. package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.js +143 -0
  217. package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.js.map +1 -0
  218. package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.cjs +41 -0
  219. package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.cjs.map +1 -0
  220. package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.d.ts +8 -0
  221. package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.d.ts.map +1 -0
  222. package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.js +41 -0
  223. package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.js.map +1 -0
  224. package/dist/data/ai/runtime-profiles/index.d.ts +20 -0
  225. package/dist/data/ai/runtime-profiles/index.d.ts.map +1 -0
  226. package/dist/data/ai/runtime-profiles/types.d.ts +50 -0
  227. package/dist/data/ai/runtime-profiles/types.d.ts.map +1 -0
  228. package/dist/data/ai/runtime-profiles/use-permission-catalog.cjs +37 -0
  229. package/dist/data/ai/runtime-profiles/use-permission-catalog.cjs.map +1 -0
  230. package/dist/data/ai/runtime-profiles/use-permission-catalog.d.ts +5 -0
  231. package/dist/data/ai/runtime-profiles/use-permission-catalog.d.ts.map +1 -0
  232. package/dist/data/ai/runtime-profiles/use-permission-catalog.js +37 -0
  233. package/dist/data/ai/runtime-profiles/use-permission-catalog.js.map +1 -0
  234. package/dist/data/ai/runtime-profiles/use-resolution.cjs +43 -0
  235. package/dist/data/ai/runtime-profiles/use-resolution.cjs.map +1 -0
  236. package/dist/data/ai/runtime-profiles/use-resolution.d.ts +4 -0
  237. package/dist/data/ai/runtime-profiles/use-resolution.d.ts.map +1 -0
  238. package/dist/data/ai/runtime-profiles/use-resolution.js +43 -0
  239. package/dist/data/ai/runtime-profiles/use-resolution.js.map +1 -0
  240. package/dist/data/ai/runtime-profiles/use-runtime-families.cjs +38 -0
  241. package/dist/data/ai/runtime-profiles/use-runtime-families.cjs.map +1 -0
  242. package/dist/data/ai/runtime-profiles/use-runtime-families.d.ts +3 -0
  243. package/dist/data/ai/runtime-profiles/use-runtime-families.d.ts.map +1 -0
  244. package/dist/data/ai/runtime-profiles/use-runtime-families.js +38 -0
  245. package/dist/data/ai/runtime-profiles/use-runtime-families.js.map +1 -0
  246. package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.cjs +107 -0
  247. package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.cjs.map +1 -0
  248. package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.d.ts +35 -0
  249. package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.d.ts.map +1 -0
  250. package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.js +107 -0
  251. package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.js.map +1 -0
  252. package/dist/data/ai/use-session-scroll.cjs.map +1 -1
  253. package/dist/data/ai/use-session-scroll.d.ts +2 -2
  254. package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
  255. package/dist/data/ai/use-session-scroll.js.map +1 -1
  256. package/dist/data/badge-variants.d.ts +1 -1
  257. package/dist/data/runtime/RuntimeBar.cjs +3 -2
  258. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  259. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  260. package/dist/data/runtime/RuntimeBar.js +3 -2
  261. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  262. package/dist/data/runtime/runtime-field-support.cjs +3 -3
  263. package/dist/data/runtime/runtime-field-support.cjs.map +1 -1
  264. package/dist/data/runtime/runtime-field-support.js +1 -1
  265. package/dist/data/runtime/runtime-mode.cjs +14 -47
  266. package/dist/data/runtime/runtime-mode.cjs.map +1 -1
  267. package/dist/data/runtime/runtime-mode.d.ts +5 -7
  268. package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
  269. package/dist/data/runtime/runtime-mode.js +7 -39
  270. package/dist/data/runtime/runtime-mode.js.map +1 -1
  271. package/dist/data/test-runner/TestRunner.cjs +6 -4
  272. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  273. package/dist/data/test-runner/TestRunner.d.ts +10 -1
  274. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  275. package/dist/data/test-runner/TestRunner.js +6 -4
  276. package/dist/data/test-runner/TestRunner.js.map +1 -1
  277. package/dist/data/verification/VerificationResults.cjs +99 -0
  278. package/dist/data/verification/VerificationResults.cjs.map +1 -0
  279. package/dist/data/verification/VerificationResults.d.ts +27 -0
  280. package/dist/data/verification/VerificationResults.d.ts.map +1 -0
  281. package/dist/data/verification/VerificationResults.js +99 -0
  282. package/dist/data/verification/VerificationResults.js.map +1 -0
  283. package/dist/data/verification/adapterViews.cjs +116 -0
  284. package/dist/data/verification/adapterViews.cjs.map +1 -0
  285. package/dist/data/verification/adapterViews.d.ts +13 -0
  286. package/dist/data/verification/adapterViews.d.ts.map +1 -0
  287. package/dist/data/verification/adapterViews.js +116 -0
  288. package/dist/data/verification/adapterViews.js.map +1 -0
  289. package/dist/data/verification/adapters.cjs +26 -0
  290. package/dist/data/verification/adapters.cjs.map +1 -0
  291. package/dist/data/verification/adapters.d.ts +6 -0
  292. package/dist/data/verification/adapters.d.ts.map +1 -0
  293. package/dist/data/verification/adapters.js +26 -0
  294. package/dist/data/verification/adapters.js.map +1 -0
  295. package/dist/data/verification/index.d.ts +5 -0
  296. package/dist/data/verification/index.d.ts.map +1 -0
  297. package/dist/data/verification/verify-report.cjs +58 -0
  298. package/dist/data/verification/verify-report.cjs.map +1 -0
  299. package/dist/data/verification/verify-report.d.ts +96 -0
  300. package/dist/data/verification/verify-report.d.ts.map +1 -0
  301. package/dist/data/verification/verify-report.js +58 -0
  302. package/dist/data/verification/verify-report.js.map +1 -0
  303. package/dist/data/verification/verifyReportTests.cjs +83 -0
  304. package/dist/data/verification/verifyReportTests.cjs.map +1 -0
  305. package/dist/data/verification/verifyReportTests.d.ts +13 -0
  306. package/dist/data/verification/verifyReportTests.d.ts.map +1 -0
  307. package/dist/data/verification/verifyReportTests.js +83 -0
  308. package/dist/data/verification/verifyReportTests.js.map +1 -0
  309. package/dist/data/version-info.cjs +3 -3
  310. package/dist/data/version-info.js +3 -3
  311. package/dist/data.cjs +10 -0
  312. package/dist/data.cjs.map +1 -1
  313. package/dist/data.d.ts +1 -0
  314. package/dist/data.d.ts.map +1 -1
  315. package/dist/data.js +10 -0
  316. package/dist/data.js.map +1 -1
  317. package/dist/index.cjs +62 -0
  318. package/dist/index.cjs.map +1 -1
  319. package/dist/index.js +62 -0
  320. package/dist/index.js.map +1 -1
  321. package/dist/lib/permission-strategies.cjs +155 -0
  322. package/dist/lib/permission-strategies.cjs.map +1 -0
  323. package/dist/lib/permission-strategies.d.ts +35 -0
  324. package/dist/lib/permission-strategies.d.ts.map +1 -0
  325. package/dist/lib/permission-strategies.js +155 -0
  326. package/dist/lib/permission-strategies.js.map +1 -0
  327. package/dist/lib/runtime-family.cjs +51 -0
  328. package/dist/lib/runtime-family.cjs.map +1 -0
  329. package/dist/lib/runtime-family.d.ts +25 -0
  330. package/dist/lib/runtime-family.d.ts.map +1 -0
  331. package/dist/lib/runtime-family.js +51 -0
  332. package/dist/lib/runtime-family.js.map +1 -0
  333. package/dist/lib/runtime-profile-model.cjs +129 -0
  334. package/dist/lib/runtime-profile-model.cjs.map +1 -0
  335. package/dist/lib/runtime-profile-model.d.ts +30 -0
  336. package/dist/lib/runtime-profile-model.d.ts.map +1 -0
  337. package/dist/lib/runtime-profile-model.js +129 -0
  338. package/dist/lib/runtime-profile-model.js.map +1 -0
  339. package/dist/styles.css +1 -1
  340. package/dist/utils.cjs +52 -0
  341. package/dist/utils.cjs.map +1 -1
  342. package/dist/utils.d.ts +5 -0
  343. package/dist/utils.d.ts.map +1 -1
  344. package/dist/utils.js +53 -1
  345. package/dist/utils.js.map +1 -1
  346. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2,6 +2,11 @@ import { cn } from "./lib/utils.js";
2
2
  import { duplicateIndex, isPlainObject, moveItem, removeIndex, setIndex } from "./lib/collections.js";
3
3
  import { AVATAR_PALETTE, fnv1a32, paletteClass } from "./lib/palette.js";
4
4
  import { SIZE_TOKENS, resolveSize } from "./lib/size.js";
5
+ import { COMBOBOX_MENU_MAX_HEIGHT_PX, COMBOBOX_MENU_MAX_WIDTH_PX, COMBOBOX_MOBILE_QUERY, calculateComboboxMenuPosition } from "./lib/combobox.js";
6
+ import { comboboxLabelPadding, createComboboxCustomEntry, multipleComboboxLabel, splitOnComboboxSeparators, withSelectedComboboxOptions } from "./lib/combobox-values.js";
7
+ import { SPEC_RUNTIME_MODES, familyForModel, isSpecRuntimeMode, modeOptionFor, runtimeModeFromModel } from "./lib/runtime-family.js";
8
+ import { authoredRuntimeSpec, duplicateName, duplicateRecord, mergeRuntimeSpec, newPresetRecord, newProfileRecord, nextNewName, permissionTarget, presetForRef, presetsOf, referencedBy, reorderProfilePresets, selectionAfterDelete, uniqueName } from "./lib/runtime-profile-model.js";
9
+ import { HINT_FIELDS, MATCH_FIELDS, MATCH_FIELD_OPTIONS, PATTERN_FIELDS, STRATEGY_PRESETS, activeMatchFields, addCondition, applyStrategyPreset, conditionText, isHintField, matchingTools, patternValues, patternsText, removeCondition, replaceMatchField, strategyPreset, toolFieldSuggestions, updateCondition, updatePatternCondition } from "./lib/permission-strategies.js";
5
10
  import { PATH_SEPARATOR, buildPathTree, foldersFirst, isPathTreeFolder, splitPath } from "./lib/path-tree.js";
6
11
  import { CLICKY_COLUMN_FORMAT_OPTIONS, CLICKY_COLUMN_UNIT_OPTIONS, formatBytes, formatBytesPerSecond, formatDuration, formatShort, formatUnit } from "./lib/format.js";
7
12
  import { useOptionalTheme, useResolvedTheme, useTheme } from "./hooks/use-theme.js";
@@ -602,6 +607,7 @@ import { UiWrench, UiWrenchFilled } from "./icons/components/UiWrench.js";
602
607
  import { UiZap, UiZapFilled } from "./icons/components/UiZap.js";
603
608
  import { UiZoomIn, UiZoomInFilled } from "./icons/components/UiZoomIn.js";
604
609
  import { UiZoomOut, UiZoomOutFilled } from "./icons/components/UiZoomOut.js";
610
+ import { VerificationResults } from "./data/verification/VerificationResults.js";
605
611
  import { annotateRoutePaths, findNodeByRoutePath, slugify } from "./data/test-runner/routePath.js";
606
612
  import { applyFixtureFrontmatterRaw, applyFixtureFrontmatterState, fixtureFrontmatterState, parseFixtureFrontmatter } from "./data/FixtureEditor/fixture-frontmatter.js";
607
613
  import { cacheQueryKeys, createCacheClient } from "./data/cache-browser/api.js";
@@ -609,10 +615,13 @@ import { changeIconAliases, getChangeIcon } from "./icons/changeIconAliases.js";
609
615
  import { clickyIconProvider, iconsByConsumerName } from "./icons/registry.js";
610
616
  import { createChecklistMarkdown, createFenceMarkdown, fixtureFenceKind, fixtureFenceSchemaAliases, fixtureFenceSnippetInfo, parseFixtureYaml, resolveFixtureFenceSchema, schemaKeys, stringifyFixtureYaml } from "./data/FixtureEditor/fixture-blocks.js";
611
617
  import { cycleFilterState, decodeFilterState, emptyTestFilters, encodeFilterState, filterStateToRecord, matchesFilterState, recordToFilterState } from "./data/test-runner/filterState.js";
618
+ import { emptyVerifySummary, summarizeVerifyNodes } from "./data/verification/verify-report.js";
612
619
  import { formatGitCommitDateHeader } from "./data/git/git-dates.js";
613
620
  import { frameworkIcon } from "./data/test-runner/frameworkIcon.js";
614
621
  import { isLeaf } from "./data/cache-browser/types.js";
615
622
  import { useClickyExport } from "./data/clicky-export/useClickyExport.js";
623
+ import { verificationAdapters } from "./data/verification/adapters.js";
624
+ import { verifyReportCounts, verifyReportTests } from "./data/verification/verifyReportTests.js";
616
625
  export {
617
626
  ACCEPT_OPTIONS,
618
627
  AVATAR_PALETTE,
@@ -631,6 +640,9 @@ export {
631
640
  CLICKY_COLUMN_FORMAT_OPTIONS,
632
641
  CLICKY_COLUMN_UNIT_OPTIONS,
633
642
  CLICKY_FORMAT_OPTIONS,
643
+ COMBOBOX_MENU_MAX_HEIGHT_PX,
644
+ COMBOBOX_MENU_MAX_WIDTH_PX,
645
+ COMBOBOX_MOBILE_QUERY,
634
646
  CONNECTION_LOG_LEVELS,
635
647
  COUNTRY_OPTIONS,
636
648
  CacheAdapterRegistry,
@@ -719,6 +731,7 @@ export {
719
731
  GitDiffPanel,
720
732
  GitFileList,
721
733
  GroupedComments,
734
+ HINT_FIELDS,
722
735
  HarPanel,
723
736
  HoverCard,
724
737
  Icon,
@@ -749,6 +762,8 @@ export {
749
762
  MARKDOWN_EDITOR_PREVIEW_FORMATS,
750
763
  MARKDOWN_SYNTAX_DOCUMENT,
751
764
  MARKDOWN_SYNTAX_SECTIONS,
765
+ MATCH_FIELDS,
766
+ MATCH_FIELD_OPTIONS,
752
767
  MAX_INLINE_SELECTION_ACTIONS,
753
768
  Markdown,
754
769
  MarkdownEditor,
@@ -769,6 +784,7 @@ export {
769
784
  OperationResultView,
770
785
  OperationsApiClientError,
771
786
  PATH_SEPARATOR,
787
+ PATTERN_FIELDS,
772
788
  Panel,
773
789
  PrettyStackTrace,
774
790
  ProgressBar,
@@ -783,8 +799,10 @@ export {
783
799
  RangeSlider,
784
800
  RouterProvider,
785
801
  SIZE_TOKENS,
802
+ SPEC_RUNTIME_MODES,
786
803
  STATUS_LABELS,
787
804
  STATUS_TOKEN_GROUPS,
805
+ STRATEGY_PRESETS,
788
806
  SchemaActionForm,
789
807
  SchemaViewer as SchemaBrowser,
790
808
  SchemaFieldMetaPanel,
@@ -1460,10 +1478,13 @@ export {
1460
1478
  UiZoomOut,
1461
1479
  UiZoomOutFilled,
1462
1480
  VIEW_OPTIONS,
1481
+ VerificationResults,
1463
1482
  Version,
1464
1483
  WorkloadCard,
1465
1484
  WorkloadPicker,
1466
1485
  Workspace,
1486
+ activeMatchFields,
1487
+ addCondition,
1467
1488
  aggregateStatusCounts,
1468
1489
  allGroupsTerminal,
1469
1490
  annotateRoutePaths,
@@ -1474,9 +1495,11 @@ export {
1474
1495
  applyFixtureFrontmatterRaw,
1475
1496
  applyFixtureFrontmatterState,
1476
1497
  applyPostExtensions,
1498
+ applyStrategyPreset,
1477
1499
  assertCalloutValue,
1478
1500
  assignAxes,
1479
1501
  authorDisplayName,
1502
+ authoredRuntimeSpec,
1480
1503
  badgeVariants,
1481
1504
  bucketTasks,
1482
1505
  buildCommandHref,
@@ -1491,6 +1514,7 @@ export {
1491
1514
  buildThreadListHandlers,
1492
1515
  buttonVariants,
1493
1516
  cacheQueryKeys,
1517
+ calculateComboboxMenuPosition,
1494
1518
  calloutVariantStyles,
1495
1519
  changeIconAliases,
1496
1520
  chooseTimestampFormat,
@@ -1500,9 +1524,11 @@ export {
1500
1524
  cn,
1501
1525
  collapseSingleChildChains,
1502
1526
  collectFrameworks,
1527
+ comboboxLabelPadding,
1503
1528
  commentCountForPrefix,
1504
1529
  compactStackPath,
1505
1530
  computeLineDiff,
1531
+ conditionText,
1506
1532
  contextItemFromEntityRow,
1507
1533
  copyText,
1508
1534
  countGoroutinesByState,
@@ -1513,6 +1539,7 @@ export {
1513
1539
  createCacheClient,
1514
1540
  createCacheRegistry,
1515
1541
  createChecklistMarkdown,
1542
+ createComboboxCustomEntry,
1516
1543
  createFenceMarkdown,
1517
1544
  createLazyJSONPathTree,
1518
1545
  createOperationsApiClient,
@@ -1531,14 +1558,18 @@ export {
1531
1558
  detectDumpFormat,
1532
1559
  dottedAnchorResolver,
1533
1560
  duplicateIndex,
1561
+ duplicateName,
1562
+ duplicateRecord,
1534
1563
  effectiveProperties,
1535
1564
  emptyCommentFilters,
1536
1565
  emptyLogTailBuffer,
1537
1566
  emptyTestFilters,
1567
+ emptyVerifySummary,
1538
1568
  encodeFilterState,
1539
1569
  encodeTailParams,
1540
1570
  entityContextItemID,
1541
1571
  exactAnchorResolver,
1572
+ familyForModel,
1542
1573
  filterOperationsByDomain,
1543
1574
  filterStateToRecord,
1544
1575
  filterTests,
@@ -1591,6 +1622,7 @@ export {
1591
1622
  isCountryCode,
1592
1623
  isFailedOrWarn,
1593
1624
  isGroupCollapsedByDefault,
1625
+ isHintField,
1594
1626
  isLeaf,
1595
1627
  isNearTop,
1596
1628
  isOpenStringMap,
@@ -1599,6 +1631,7 @@ export {
1599
1631
  isPlainObject,
1600
1632
  isPositionalParam,
1601
1633
  isRuntimeFrame,
1634
+ isSpecRuntimeMode,
1602
1635
  isTerminalSessionState,
1603
1636
  isTerminalStatus,
1604
1637
  isTourFinished,
@@ -1614,12 +1647,19 @@ export {
1614
1647
  matchMentionsInBody,
1615
1648
  matchesFilterState,
1616
1649
  matchesIf,
1650
+ matchingTools,
1617
1651
  memoryTourStorage,
1652
+ mergeRuntimeSpec,
1618
1653
  mergeSeries,
1619
1654
  mockMarkdownPreview,
1655
+ modeOptionFor,
1620
1656
  modeToFormat,
1621
1657
  moveItem,
1658
+ multipleComboboxLabel,
1659
+ newPresetRecord,
1660
+ newProfileRecord,
1622
1661
  nextChecklistStatus,
1662
+ nextNewName,
1623
1663
  nextTriState,
1624
1664
  normalizeErrorDiagnostics,
1625
1665
  normalizeLogsTableRows,
@@ -1648,17 +1688,26 @@ export {
1648
1688
  parseUnitAwareValue,
1649
1689
  parseWorkloadKey,
1650
1690
  pathParamNames,
1691
+ patternValues,
1692
+ patternsText,
1693
+ permissionTarget,
1651
1694
  preferredEndpointPort,
1652
1695
  prefixAdapter,
1696
+ presetForRef,
1697
+ presetsOf,
1653
1698
  processLabel,
1654
1699
  processStateColor,
1655
1700
  processStateIcon,
1656
1701
  pruneNullNodes,
1657
1702
  readPreferences,
1658
1703
  recordToFilterState,
1704
+ referencedBy,
1659
1705
  registerDebugConsole,
1660
1706
  rehydrateRefs,
1707
+ removeCondition,
1661
1708
  removeIndex,
1709
+ reorderProfilePresets,
1710
+ replaceMatchField,
1662
1711
  resolveBreakdown,
1663
1712
  resolveControl,
1664
1713
  resolveFacetOption,
@@ -1669,10 +1718,12 @@ export {
1669
1718
  resolveSize,
1670
1719
  resolveStatusConfig,
1671
1720
  revealDebugConsole,
1721
+ runtimeModeFromModel,
1672
1722
  schemaKeys,
1673
1723
  segment,
1674
1724
  selectAnchorThreads,
1675
1725
  selectUnresolvedThreads,
1726
+ selectionAfterDelete,
1676
1727
  serializeEndpointValue,
1677
1728
  serializeMultiFilterValue,
1678
1729
  serializeSecretRef,
@@ -1690,18 +1741,21 @@ export {
1690
1741
  slugify,
1691
1742
  sortReplies,
1692
1743
  splitCommaValues,
1744
+ splitOnComboboxSeparators,
1693
1745
  splitPath,
1694
1746
  splitSelectionActions,
1695
1747
  splitTagToken,
1696
1748
  statusIconFor,
1697
1749
  statusToneFor,
1698
1750
  stopLogSession,
1751
+ strategyPreset,
1699
1752
  strictAnchorResolver,
1700
1753
  stringifyFixtureYaml,
1701
1754
  submitValue,
1702
1755
  subscribeToDebugConsole,
1703
1756
  sum,
1704
1757
  sumNonTaskTests,
1758
+ summarizeVerifyNodes,
1705
1759
  tagActionsFromRecord,
1706
1760
  tagFilterTokens,
1707
1761
  taskGroupErrorCount,
@@ -1717,9 +1771,13 @@ export {
1717
1771
  templateValuePre,
1718
1772
  testStatus,
1719
1773
  toneToBadgeTone,
1774
+ toolFieldSuggestions,
1720
1775
  totalDuration,
1721
1776
  truncatePlain,
1777
+ uniqueName,
1778
+ updateCondition,
1722
1779
  updateFilterSelection,
1780
+ updatePatternCondition,
1723
1781
  useBrowserRouter,
1724
1782
  useClickyExport,
1725
1783
  useCommentAnchorActionsOptional,
@@ -1758,8 +1816,12 @@ export {
1758
1816
  useToast,
1759
1817
  useTour,
1760
1818
  useTourLayer,
1819
+ verificationAdapters,
1820
+ verifyReportCounts,
1821
+ verifyReportTests,
1761
1822
  visibleConnectionLogEvents,
1762
1823
  withBasePath,
1824
+ withSelectedComboboxOptions,
1763
1825
  workloadKey,
1764
1826
  workloadKindLabel,
1765
1827
  workloadStatusLabel,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const toolPolicy = require("../data/chat/tool-policy.cjs");
4
+ const PATTERN_FIELDS = [
5
+ "name",
6
+ "group",
7
+ "parent",
8
+ "entity",
9
+ "action",
10
+ "verb",
11
+ "method",
12
+ "scope"
13
+ ];
14
+ const HINT_FIELDS = ["readOnly", "destructive", "idempotent"];
15
+ const MATCH_FIELDS = [...PATTERN_FIELDS, ...HINT_FIELDS];
16
+ const STRATEGY_PRESETS = [
17
+ {
18
+ value: "all",
19
+ label: "All tools",
20
+ description: "Match every tool in the catalog."
21
+ },
22
+ {
23
+ value: "read-only",
24
+ label: "Read-only tools",
25
+ description: "Match tools explicitly marked read-only."
26
+ },
27
+ {
28
+ value: "destructive",
29
+ label: "Destructive tools",
30
+ description: "Match tools explicitly marked destructive."
31
+ },
32
+ {
33
+ value: "idempotent",
34
+ label: "Idempotent tools",
35
+ description: "Match tools safe to repeat."
36
+ },
37
+ {
38
+ value: "custom",
39
+ label: "Custom conditions",
40
+ description: "Combine tool metadata and safety annotations."
41
+ }
42
+ ];
43
+ const MATCH_FIELD_OPTIONS = [
44
+ { value: "name", label: "Tool name" },
45
+ { value: "group", label: "Group" },
46
+ { value: "parent", label: "Parent" },
47
+ { value: "entity", label: "Entity" },
48
+ { value: "action", label: "Action" },
49
+ { value: "verb", label: "Verb" },
50
+ { value: "method", label: "HTTP method" },
51
+ { value: "scope", label: "Scope" },
52
+ { value: "readOnly", label: "Read only" },
53
+ { value: "destructive", label: "Destructive" },
54
+ { value: "idempotent", label: "Idempotent" }
55
+ ];
56
+ function strategyPreset(rule) {
57
+ const fields = activeMatchFields(rule);
58
+ if (fields.length !== 1) return "custom";
59
+ if (fields[0] === "name" && patternsText(rule.name) === "*") return "all";
60
+ if (fields[0] === "readOnly" && rule.readOnly === true) return "read-only";
61
+ if (fields[0] === "destructive" && rule.destructive === true) {
62
+ return "destructive";
63
+ }
64
+ if (fields[0] === "idempotent" && rule.idempotent === true) {
65
+ return "idempotent";
66
+ }
67
+ return "custom";
68
+ }
69
+ function applyStrategyPreset(rule, preset) {
70
+ if (preset === "all") return { name: "*", policy: rule.policy };
71
+ if (preset === "read-only") return { readOnly: true, policy: rule.policy };
72
+ if (preset === "destructive")
73
+ return { destructive: true, policy: rule.policy };
74
+ return { idempotent: true, policy: rule.policy };
75
+ }
76
+ function activeMatchFields(rule) {
77
+ return MATCH_FIELDS.filter((field) => rule[field] !== void 0);
78
+ }
79
+ function patternsText(value) {
80
+ return typeof value === "string" ? value : (value ?? []).join(", ");
81
+ }
82
+ function patternValues(value) {
83
+ return typeof value === "string" ? value ? [value] : [] : value ?? [];
84
+ }
85
+ function updatePatternCondition({
86
+ rule,
87
+ field,
88
+ value
89
+ }) {
90
+ return { ...rule, [field]: value };
91
+ }
92
+ function conditionText(rule, field) {
93
+ if (isHintField(field)) return String(rule[field]);
94
+ return patternsText(rule[field]);
95
+ }
96
+ function replaceMatchField(rule, current, next) {
97
+ if (current === next) return rule;
98
+ const match = { ...rule };
99
+ const previous = match[current];
100
+ delete match[current];
101
+ match[next] = isHintField(next) ? typeof previous === "boolean" ? previous : true : typeof previous === "string" || Array.isArray(previous) ? previous : "*";
102
+ return match;
103
+ }
104
+ function updateCondition(rule, field, value) {
105
+ if (isHintField(field)) return { ...rule, [field]: value === "true" };
106
+ const patterns = value.split(",").map((item) => item.trim()).filter(Boolean);
107
+ return {
108
+ ...rule,
109
+ [field]: patterns.length <= 1 ? patterns[0] ?? "" : patterns
110
+ };
111
+ }
112
+ function removeCondition(rule, field) {
113
+ const next = { ...rule };
114
+ delete next[field];
115
+ if (activeMatchFields(next).length === 0) next.name = "*";
116
+ return next;
117
+ }
118
+ function addCondition(rule, field) {
119
+ if (rule[field] !== void 0) return rule;
120
+ return { ...rule, [field]: isHintField(field) ? true : "*" };
121
+ }
122
+ function isHintField(field) {
123
+ return HINT_FIELDS.includes(field);
124
+ }
125
+ function matchingTools(rule, tools) {
126
+ return tools.filter((tool) => toolPolicy.matchesTool(rule, tool));
127
+ }
128
+ function toolFieldSuggestions(tools, field) {
129
+ const values = /* @__PURE__ */ new Set();
130
+ for (const tool of tools) {
131
+ const value = tool[field === "name" ? "name" : field];
132
+ if (typeof value === "string" && value.trim()) values.add(value);
133
+ }
134
+ return Array.from(values).sort((left, right) => left.localeCompare(right));
135
+ }
136
+ exports.HINT_FIELDS = HINT_FIELDS;
137
+ exports.MATCH_FIELDS = MATCH_FIELDS;
138
+ exports.MATCH_FIELD_OPTIONS = MATCH_FIELD_OPTIONS;
139
+ exports.PATTERN_FIELDS = PATTERN_FIELDS;
140
+ exports.STRATEGY_PRESETS = STRATEGY_PRESETS;
141
+ exports.activeMatchFields = activeMatchFields;
142
+ exports.addCondition = addCondition;
143
+ exports.applyStrategyPreset = applyStrategyPreset;
144
+ exports.conditionText = conditionText;
145
+ exports.isHintField = isHintField;
146
+ exports.matchingTools = matchingTools;
147
+ exports.patternValues = patternValues;
148
+ exports.patternsText = patternsText;
149
+ exports.removeCondition = removeCondition;
150
+ exports.replaceMatchField = replaceMatchField;
151
+ exports.strategyPreset = strategyPreset;
152
+ exports.toolFieldSuggestions = toolFieldSuggestions;
153
+ exports.updateCondition = updateCondition;
154
+ exports.updatePatternCondition = updatePatternCondition;
155
+ //# sourceMappingURL=permission-strategies.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-strategies.cjs","sources":["../../src/lib/permission-strategies.ts"],"sourcesContent":["import {\n matchesTool,\n type MatchPatterns,\n type PermissionRule,\n} from \"../data/chat/tool-policy\";\nimport type { ToolMeta } from \"../data/chat/types\";\n\nexport const PATTERN_FIELDS = [\n \"name\",\n \"group\",\n \"parent\",\n \"entity\",\n \"action\",\n \"verb\",\n \"method\",\n \"scope\",\n] as const;\nexport const HINT_FIELDS = [\"readOnly\", \"destructive\", \"idempotent\"] as const;\nexport const MATCH_FIELDS = [...PATTERN_FIELDS, ...HINT_FIELDS] as const;\n\nexport type MatchField = (typeof MATCH_FIELDS)[number];\nexport type StrategyPreset =\n | \"all\"\n | \"read-only\"\n | \"destructive\"\n | \"idempotent\"\n | \"custom\";\n\nexport const STRATEGY_PRESETS: Array<{\n value: StrategyPreset;\n label: string;\n description: string;\n}> = [\n {\n value: \"all\",\n label: \"All tools\",\n description: \"Match every tool in the catalog.\",\n },\n {\n value: \"read-only\",\n label: \"Read-only tools\",\n description: \"Match tools explicitly marked read-only.\",\n },\n {\n value: \"destructive\",\n label: \"Destructive tools\",\n description: \"Match tools explicitly marked destructive.\",\n },\n {\n value: \"idempotent\",\n label: \"Idempotent tools\",\n description: \"Match tools safe to repeat.\",\n },\n {\n value: \"custom\",\n label: \"Custom conditions\",\n description: \"Combine tool metadata and safety annotations.\",\n },\n];\n\nexport const MATCH_FIELD_OPTIONS: Array<{ value: MatchField; label: string }> =\n [\n { value: \"name\", label: \"Tool name\" },\n { value: \"group\", label: \"Group\" },\n { value: \"parent\", label: \"Parent\" },\n { value: \"entity\", label: \"Entity\" },\n { value: \"action\", label: \"Action\" },\n { value: \"verb\", label: \"Verb\" },\n { value: \"method\", label: \"HTTP method\" },\n { value: \"scope\", label: \"Scope\" },\n { value: \"readOnly\", label: \"Read only\" },\n { value: \"destructive\", label: \"Destructive\" },\n { value: \"idempotent\", label: \"Idempotent\" },\n ];\n\nexport function strategyPreset(rule: PermissionRule): StrategyPreset {\n const fields = activeMatchFields(rule);\n if (fields.length !== 1) return \"custom\";\n if (fields[0] === \"name\" && patternsText(rule.name) === \"*\") return \"all\";\n if (fields[0] === \"readOnly\" && rule.readOnly === true) return \"read-only\";\n if (fields[0] === \"destructive\" && rule.destructive === true) {\n return \"destructive\";\n }\n if (fields[0] === \"idempotent\" && rule.idempotent === true) {\n return \"idempotent\";\n }\n return \"custom\";\n}\n\nexport function applyStrategyPreset(\n rule: PermissionRule,\n preset: Exclude<StrategyPreset, \"custom\">,\n): PermissionRule {\n if (preset === \"all\") return { name: \"*\", policy: rule.policy };\n if (preset === \"read-only\") return { readOnly: true, policy: rule.policy };\n if (preset === \"destructive\")\n return { destructive: true, policy: rule.policy };\n return { idempotent: true, policy: rule.policy };\n}\n\nexport function activeMatchFields(rule: PermissionRule): MatchField[] {\n return MATCH_FIELDS.filter((field) => rule[field] !== undefined);\n}\n\nexport function patternsText(value: MatchPatterns | undefined): string {\n return typeof value === \"string\" ? value : (value ?? []).join(\", \");\n}\n\nexport function patternValues(value: MatchPatterns | undefined): string[] {\n return typeof value === \"string\" ? (value ? [value] : []) : (value ?? []);\n}\n\nexport function updatePatternCondition({\n rule,\n field,\n value,\n}: {\n rule: PermissionRule;\n field: (typeof PATTERN_FIELDS)[number];\n value: MatchPatterns;\n}): PermissionRule {\n return { ...rule, [field]: value };\n}\n\nexport function conditionText(rule: PermissionRule, field: MatchField): string {\n if (isHintField(field)) return String(rule[field]);\n return patternsText(rule[field]);\n}\n\nexport function replaceMatchField(\n rule: PermissionRule,\n current: MatchField,\n next: MatchField,\n): PermissionRule {\n if (current === next) return rule;\n const match = { ...rule } as Record<string, unknown>;\n const previous = match[current];\n delete match[current];\n match[next] = isHintField(next)\n ? typeof previous === \"boolean\"\n ? previous\n : true\n : typeof previous === \"string\" || Array.isArray(previous)\n ? previous\n : \"*\";\n return match as PermissionRule;\n}\n\nexport function updateCondition(\n rule: PermissionRule,\n field: MatchField,\n value: string,\n): PermissionRule {\n if (isHintField(field)) return { ...rule, [field]: value === \"true\" };\n const patterns = value\n .split(\",\")\n .map((item) => item.trim())\n .filter(Boolean);\n return {\n ...rule,\n [field]: patterns.length <= 1 ? (patterns[0] ?? \"\") : patterns,\n };\n}\n\nexport function removeCondition(\n rule: PermissionRule,\n field: MatchField,\n): PermissionRule {\n const next = { ...rule } as Record<string, unknown>;\n delete next[field];\n if (activeMatchFields(next as PermissionRule).length === 0) next.name = \"*\";\n return next as PermissionRule;\n}\n\nexport function addCondition(\n rule: PermissionRule,\n field: MatchField,\n): PermissionRule {\n if (rule[field] !== undefined) return rule;\n return { ...rule, [field]: isHintField(field) ? true : \"*\" };\n}\n\nexport function isHintField(\n field: MatchField,\n): field is (typeof HINT_FIELDS)[number] {\n return (HINT_FIELDS as readonly MatchField[]).includes(field);\n}\n\nexport function matchingTools(rule: PermissionRule, tools: ToolMeta[]) {\n return tools.filter((tool) => matchesTool(rule, tool));\n}\n\nexport function toolFieldSuggestions(\n tools: ToolMeta[],\n field: Exclude<MatchField, (typeof HINT_FIELDS)[number]>,\n) {\n const values = new Set<string>();\n for (const tool of tools) {\n const value = tool[field === \"name\" ? \"name\" : field];\n if (typeof value === \"string\" && value.trim()) values.add(value);\n }\n return Array.from(values).sort((left, right) => left.localeCompare(right));\n}\n"],"names":["matchesTool"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { MatchPatterns, PermissionRule } from '../data/chat/tool-policy';
2
+ import { ToolMeta } from '../data/chat/types';
3
+ export declare const PATTERN_FIELDS: readonly ["name", "group", "parent", "entity", "action", "verb", "method", "scope"];
4
+ export declare const HINT_FIELDS: readonly ["readOnly", "destructive", "idempotent"];
5
+ export declare const MATCH_FIELDS: readonly ["name", "group", "parent", "entity", "action", "verb", "method", "scope", "readOnly", "destructive", "idempotent"];
6
+ export type MatchField = (typeof MATCH_FIELDS)[number];
7
+ export type StrategyPreset = "all" | "read-only" | "destructive" | "idempotent" | "custom";
8
+ export declare const STRATEGY_PRESETS: Array<{
9
+ value: StrategyPreset;
10
+ label: string;
11
+ description: string;
12
+ }>;
13
+ export declare const MATCH_FIELD_OPTIONS: Array<{
14
+ value: MatchField;
15
+ label: string;
16
+ }>;
17
+ export declare function strategyPreset(rule: PermissionRule): StrategyPreset;
18
+ export declare function applyStrategyPreset(rule: PermissionRule, preset: Exclude<StrategyPreset, "custom">): PermissionRule;
19
+ export declare function activeMatchFields(rule: PermissionRule): MatchField[];
20
+ export declare function patternsText(value: MatchPatterns | undefined): string;
21
+ export declare function patternValues(value: MatchPatterns | undefined): string[];
22
+ export declare function updatePatternCondition({ rule, field, value, }: {
23
+ rule: PermissionRule;
24
+ field: (typeof PATTERN_FIELDS)[number];
25
+ value: MatchPatterns;
26
+ }): PermissionRule;
27
+ export declare function conditionText(rule: PermissionRule, field: MatchField): string;
28
+ export declare function replaceMatchField(rule: PermissionRule, current: MatchField, next: MatchField): PermissionRule;
29
+ export declare function updateCondition(rule: PermissionRule, field: MatchField, value: string): PermissionRule;
30
+ export declare function removeCondition(rule: PermissionRule, field: MatchField): PermissionRule;
31
+ export declare function addCondition(rule: PermissionRule, field: MatchField): PermissionRule;
32
+ export declare function isHintField(field: MatchField): field is (typeof HINT_FIELDS)[number];
33
+ export declare function matchingTools(rule: PermissionRule, tools: ToolMeta[]): ToolMeta[];
34
+ export declare function toolFieldSuggestions(tools: ToolMeta[], field: Exclude<MatchField, (typeof HINT_FIELDS)[number]>): string[];
35
+ //# sourceMappingURL=permission-strategies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-strategies.d.ts","sourceRoot":"","sources":["../../src/lib/permission-strategies.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,eAAO,MAAM,cAAc,qFASjB,CAAC;AACX,eAAO,MAAM,WAAW,oDAAqD,CAAC;AAC9E,eAAO,MAAM,YAAY,8HAA+C,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,WAAW,GACX,aAAa,GACb,YAAY,GACZ,QAAQ,CAAC;AAEb,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC;IACnC,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CA0BA,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAazE,CAAC;AAEJ,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAYnE;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,GACxC,cAAc,CAMhB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE,CAEpE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAErE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,EAAE,CAExE;AAED,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,KAAK,EACL,KAAK,GACN,EAAE;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,EAAE,aAAa,CAAC;CACtB,GAAG,cAAc,CAEjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAG7E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,UAAU,GACf,cAAc,CAahB;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,GACZ,cAAc,CAUhB;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,UAAU,GAChB,cAAc,CAKhB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,UAAU,GAChB,cAAc,CAGhB;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,GAChB,KAAK,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAEvC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,cAEpE;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,YAQzD"}
@@ -0,0 +1,155 @@
1
+ import { matchesTool } from "../data/chat/tool-policy.js";
2
+ const PATTERN_FIELDS = [
3
+ "name",
4
+ "group",
5
+ "parent",
6
+ "entity",
7
+ "action",
8
+ "verb",
9
+ "method",
10
+ "scope"
11
+ ];
12
+ const HINT_FIELDS = ["readOnly", "destructive", "idempotent"];
13
+ const MATCH_FIELDS = [...PATTERN_FIELDS, ...HINT_FIELDS];
14
+ const STRATEGY_PRESETS = [
15
+ {
16
+ value: "all",
17
+ label: "All tools",
18
+ description: "Match every tool in the catalog."
19
+ },
20
+ {
21
+ value: "read-only",
22
+ label: "Read-only tools",
23
+ description: "Match tools explicitly marked read-only."
24
+ },
25
+ {
26
+ value: "destructive",
27
+ label: "Destructive tools",
28
+ description: "Match tools explicitly marked destructive."
29
+ },
30
+ {
31
+ value: "idempotent",
32
+ label: "Idempotent tools",
33
+ description: "Match tools safe to repeat."
34
+ },
35
+ {
36
+ value: "custom",
37
+ label: "Custom conditions",
38
+ description: "Combine tool metadata and safety annotations."
39
+ }
40
+ ];
41
+ const MATCH_FIELD_OPTIONS = [
42
+ { value: "name", label: "Tool name" },
43
+ { value: "group", label: "Group" },
44
+ { value: "parent", label: "Parent" },
45
+ { value: "entity", label: "Entity" },
46
+ { value: "action", label: "Action" },
47
+ { value: "verb", label: "Verb" },
48
+ { value: "method", label: "HTTP method" },
49
+ { value: "scope", label: "Scope" },
50
+ { value: "readOnly", label: "Read only" },
51
+ { value: "destructive", label: "Destructive" },
52
+ { value: "idempotent", label: "Idempotent" }
53
+ ];
54
+ function strategyPreset(rule) {
55
+ const fields = activeMatchFields(rule);
56
+ if (fields.length !== 1) return "custom";
57
+ if (fields[0] === "name" && patternsText(rule.name) === "*") return "all";
58
+ if (fields[0] === "readOnly" && rule.readOnly === true) return "read-only";
59
+ if (fields[0] === "destructive" && rule.destructive === true) {
60
+ return "destructive";
61
+ }
62
+ if (fields[0] === "idempotent" && rule.idempotent === true) {
63
+ return "idempotent";
64
+ }
65
+ return "custom";
66
+ }
67
+ function applyStrategyPreset(rule, preset) {
68
+ if (preset === "all") return { name: "*", policy: rule.policy };
69
+ if (preset === "read-only") return { readOnly: true, policy: rule.policy };
70
+ if (preset === "destructive")
71
+ return { destructive: true, policy: rule.policy };
72
+ return { idempotent: true, policy: rule.policy };
73
+ }
74
+ function activeMatchFields(rule) {
75
+ return MATCH_FIELDS.filter((field) => rule[field] !== void 0);
76
+ }
77
+ function patternsText(value) {
78
+ return typeof value === "string" ? value : (value ?? []).join(", ");
79
+ }
80
+ function patternValues(value) {
81
+ return typeof value === "string" ? value ? [value] : [] : value ?? [];
82
+ }
83
+ function updatePatternCondition({
84
+ rule,
85
+ field,
86
+ value
87
+ }) {
88
+ return { ...rule, [field]: value };
89
+ }
90
+ function conditionText(rule, field) {
91
+ if (isHintField(field)) return String(rule[field]);
92
+ return patternsText(rule[field]);
93
+ }
94
+ function replaceMatchField(rule, current, next) {
95
+ if (current === next) return rule;
96
+ const match = { ...rule };
97
+ const previous = match[current];
98
+ delete match[current];
99
+ match[next] = isHintField(next) ? typeof previous === "boolean" ? previous : true : typeof previous === "string" || Array.isArray(previous) ? previous : "*";
100
+ return match;
101
+ }
102
+ function updateCondition(rule, field, value) {
103
+ if (isHintField(field)) return { ...rule, [field]: value === "true" };
104
+ const patterns = value.split(",").map((item) => item.trim()).filter(Boolean);
105
+ return {
106
+ ...rule,
107
+ [field]: patterns.length <= 1 ? patterns[0] ?? "" : patterns
108
+ };
109
+ }
110
+ function removeCondition(rule, field) {
111
+ const next = { ...rule };
112
+ delete next[field];
113
+ if (activeMatchFields(next).length === 0) next.name = "*";
114
+ return next;
115
+ }
116
+ function addCondition(rule, field) {
117
+ if (rule[field] !== void 0) return rule;
118
+ return { ...rule, [field]: isHintField(field) ? true : "*" };
119
+ }
120
+ function isHintField(field) {
121
+ return HINT_FIELDS.includes(field);
122
+ }
123
+ function matchingTools(rule, tools) {
124
+ return tools.filter((tool) => matchesTool(rule, tool));
125
+ }
126
+ function toolFieldSuggestions(tools, field) {
127
+ const values = /* @__PURE__ */ new Set();
128
+ for (const tool of tools) {
129
+ const value = tool[field === "name" ? "name" : field];
130
+ if (typeof value === "string" && value.trim()) values.add(value);
131
+ }
132
+ return Array.from(values).sort((left, right) => left.localeCompare(right));
133
+ }
134
+ export {
135
+ HINT_FIELDS,
136
+ MATCH_FIELDS,
137
+ MATCH_FIELD_OPTIONS,
138
+ PATTERN_FIELDS,
139
+ STRATEGY_PRESETS,
140
+ activeMatchFields,
141
+ addCondition,
142
+ applyStrategyPreset,
143
+ conditionText,
144
+ isHintField,
145
+ matchingTools,
146
+ patternValues,
147
+ patternsText,
148
+ removeCondition,
149
+ replaceMatchField,
150
+ strategyPreset,
151
+ toolFieldSuggestions,
152
+ updateCondition,
153
+ updatePatternCondition
154
+ };
155
+ //# sourceMappingURL=permission-strategies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-strategies.js","sources":["../../src/lib/permission-strategies.ts"],"sourcesContent":["import {\n matchesTool,\n type MatchPatterns,\n type PermissionRule,\n} from \"../data/chat/tool-policy\";\nimport type { ToolMeta } from \"../data/chat/types\";\n\nexport const PATTERN_FIELDS = [\n \"name\",\n \"group\",\n \"parent\",\n \"entity\",\n \"action\",\n \"verb\",\n \"method\",\n \"scope\",\n] as const;\nexport const HINT_FIELDS = [\"readOnly\", \"destructive\", \"idempotent\"] as const;\nexport const MATCH_FIELDS = [...PATTERN_FIELDS, ...HINT_FIELDS] as const;\n\nexport type MatchField = (typeof MATCH_FIELDS)[number];\nexport type StrategyPreset =\n | \"all\"\n | \"read-only\"\n | \"destructive\"\n | \"idempotent\"\n | \"custom\";\n\nexport const STRATEGY_PRESETS: Array<{\n value: StrategyPreset;\n label: string;\n description: string;\n}> = [\n {\n value: \"all\",\n label: \"All tools\",\n description: \"Match every tool in the catalog.\",\n },\n {\n value: \"read-only\",\n label: \"Read-only tools\",\n description: \"Match tools explicitly marked read-only.\",\n },\n {\n value: \"destructive\",\n label: \"Destructive tools\",\n description: \"Match tools explicitly marked destructive.\",\n },\n {\n value: \"idempotent\",\n label: \"Idempotent tools\",\n description: \"Match tools safe to repeat.\",\n },\n {\n value: \"custom\",\n label: \"Custom conditions\",\n description: \"Combine tool metadata and safety annotations.\",\n },\n];\n\nexport const MATCH_FIELD_OPTIONS: Array<{ value: MatchField; label: string }> =\n [\n { value: \"name\", label: \"Tool name\" },\n { value: \"group\", label: \"Group\" },\n { value: \"parent\", label: \"Parent\" },\n { value: \"entity\", label: \"Entity\" },\n { value: \"action\", label: \"Action\" },\n { value: \"verb\", label: \"Verb\" },\n { value: \"method\", label: \"HTTP method\" },\n { value: \"scope\", label: \"Scope\" },\n { value: \"readOnly\", label: \"Read only\" },\n { value: \"destructive\", label: \"Destructive\" },\n { value: \"idempotent\", label: \"Idempotent\" },\n ];\n\nexport function strategyPreset(rule: PermissionRule): StrategyPreset {\n const fields = activeMatchFields(rule);\n if (fields.length !== 1) return \"custom\";\n if (fields[0] === \"name\" && patternsText(rule.name) === \"*\") return \"all\";\n if (fields[0] === \"readOnly\" && rule.readOnly === true) return \"read-only\";\n if (fields[0] === \"destructive\" && rule.destructive === true) {\n return \"destructive\";\n }\n if (fields[0] === \"idempotent\" && rule.idempotent === true) {\n return \"idempotent\";\n }\n return \"custom\";\n}\n\nexport function applyStrategyPreset(\n rule: PermissionRule,\n preset: Exclude<StrategyPreset, \"custom\">,\n): PermissionRule {\n if (preset === \"all\") return { name: \"*\", policy: rule.policy };\n if (preset === \"read-only\") return { readOnly: true, policy: rule.policy };\n if (preset === \"destructive\")\n return { destructive: true, policy: rule.policy };\n return { idempotent: true, policy: rule.policy };\n}\n\nexport function activeMatchFields(rule: PermissionRule): MatchField[] {\n return MATCH_FIELDS.filter((field) => rule[field] !== undefined);\n}\n\nexport function patternsText(value: MatchPatterns | undefined): string {\n return typeof value === \"string\" ? value : (value ?? []).join(\", \");\n}\n\nexport function patternValues(value: MatchPatterns | undefined): string[] {\n return typeof value === \"string\" ? (value ? [value] : []) : (value ?? []);\n}\n\nexport function updatePatternCondition({\n rule,\n field,\n value,\n}: {\n rule: PermissionRule;\n field: (typeof PATTERN_FIELDS)[number];\n value: MatchPatterns;\n}): PermissionRule {\n return { ...rule, [field]: value };\n}\n\nexport function conditionText(rule: PermissionRule, field: MatchField): string {\n if (isHintField(field)) return String(rule[field]);\n return patternsText(rule[field]);\n}\n\nexport function replaceMatchField(\n rule: PermissionRule,\n current: MatchField,\n next: MatchField,\n): PermissionRule {\n if (current === next) return rule;\n const match = { ...rule } as Record<string, unknown>;\n const previous = match[current];\n delete match[current];\n match[next] = isHintField(next)\n ? typeof previous === \"boolean\"\n ? previous\n : true\n : typeof previous === \"string\" || Array.isArray(previous)\n ? previous\n : \"*\";\n return match as PermissionRule;\n}\n\nexport function updateCondition(\n rule: PermissionRule,\n field: MatchField,\n value: string,\n): PermissionRule {\n if (isHintField(field)) return { ...rule, [field]: value === \"true\" };\n const patterns = value\n .split(\",\")\n .map((item) => item.trim())\n .filter(Boolean);\n return {\n ...rule,\n [field]: patterns.length <= 1 ? (patterns[0] ?? \"\") : patterns,\n };\n}\n\nexport function removeCondition(\n rule: PermissionRule,\n field: MatchField,\n): PermissionRule {\n const next = { ...rule } as Record<string, unknown>;\n delete next[field];\n if (activeMatchFields(next as PermissionRule).length === 0) next.name = \"*\";\n return next as PermissionRule;\n}\n\nexport function addCondition(\n rule: PermissionRule,\n field: MatchField,\n): PermissionRule {\n if (rule[field] !== undefined) return rule;\n return { ...rule, [field]: isHintField(field) ? true : \"*\" };\n}\n\nexport function isHintField(\n field: MatchField,\n): field is (typeof HINT_FIELDS)[number] {\n return (HINT_FIELDS as readonly MatchField[]).includes(field);\n}\n\nexport function matchingTools(rule: PermissionRule, tools: ToolMeta[]) {\n return tools.filter((tool) => matchesTool(rule, tool));\n}\n\nexport function toolFieldSuggestions(\n tools: ToolMeta[],\n field: Exclude<MatchField, (typeof HINT_FIELDS)[number]>,\n) {\n const values = new Set<string>();\n for (const tool of tools) {\n const value = tool[field === \"name\" ? \"name\" : field];\n if (typeof value === \"string\" && value.trim()) values.add(value);\n }\n return Array.from(values).sort((left, right) => left.localeCompare(right));\n}\n"],"names":[],"mappings":"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"}