@flanksource/clicky-ui 0.3.40 → 0.3.42

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 (759) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +14 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +14 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentCard.cjs +3 -1
  7. package/dist/comments/CommentCard.cjs.map +1 -1
  8. package/dist/comments/CommentCard.d.ts.map +1 -1
  9. package/dist/comments/CommentCard.js +4 -2
  10. package/dist/comments/CommentCard.js.map +1 -1
  11. package/dist/comments/CommentCardParts.cjs +16 -0
  12. package/dist/comments/CommentCardParts.cjs.map +1 -1
  13. package/dist/comments/CommentCardParts.d.ts +4 -1
  14. package/dist/comments/CommentCardParts.d.ts.map +1 -1
  15. package/dist/comments/CommentCardParts.js +16 -0
  16. package/dist/comments/CommentCardParts.js.map +1 -1
  17. package/dist/comments/comment-types.cjs.map +1 -1
  18. package/dist/comments/comment-types.d.ts +4 -0
  19. package/dist/comments/comment-types.d.ts.map +1 -1
  20. package/dist/comments/comment-types.js.map +1 -1
  21. package/dist/components/AccordionList.cjs +5 -1
  22. package/dist/components/AccordionList.cjs.map +1 -1
  23. package/dist/components/AccordionList.d.ts +3 -1
  24. package/dist/components/AccordionList.d.ts.map +1 -1
  25. package/dist/components/AccordionList.js +5 -1
  26. package/dist/components/AccordionList.js.map +1 -1
  27. package/dist/components/Combobox.cjs +54 -8
  28. package/dist/components/Combobox.cjs.map +1 -1
  29. package/dist/components/Combobox.d.ts.map +1 -1
  30. package/dist/components/Combobox.js +56 -10
  31. package/dist/components/Combobox.js.map +1 -1
  32. package/dist/components/ComboboxMenu.cjs +139 -113
  33. package/dist/components/ComboboxMenu.cjs.map +1 -1
  34. package/dist/components/ComboboxMenu.d.ts +3 -1
  35. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  36. package/dist/components/ComboboxMenu.js +139 -113
  37. package/dist/components/ComboboxMenu.js.map +1 -1
  38. package/dist/components/ComboboxMenuTrigger.cjs +87 -0
  39. package/dist/components/ComboboxMenuTrigger.cjs.map +1 -0
  40. package/dist/components/ComboboxMenuTrigger.d.ts +23 -0
  41. package/dist/components/ComboboxMenuTrigger.d.ts.map +1 -0
  42. package/dist/components/ComboboxMenuTrigger.js +87 -0
  43. package/dist/components/ComboboxMenuTrigger.js.map +1 -0
  44. package/dist/components/JsonSchemaForm.cjs +39 -11
  45. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  46. package/dist/components/JsonSchemaForm.d.ts +1 -1
  47. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  48. package/dist/components/JsonSchemaForm.js +38 -10
  49. package/dist/components/JsonSchemaForm.js.map +1 -1
  50. package/dist/components/SegmentedControl.cjs +20 -3
  51. package/dist/components/SegmentedControl.cjs.map +1 -1
  52. package/dist/components/SegmentedControl.d.ts +11 -0
  53. package/dist/components/SegmentedControl.d.ts.map +1 -1
  54. package/dist/components/SegmentedControl.js +21 -4
  55. package/dist/components/SegmentedControl.js.map +1 -1
  56. package/dist/components/combobox-types.d.ts +8 -0
  57. package/dist/components/combobox-types.d.ts.map +1 -1
  58. package/dist/components/json-schema-form-accordion-array.cjs +3 -1
  59. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  60. package/dist/components/json-schema-form-accordion-array.d.ts +4 -1
  61. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  62. package/dist/components/json-schema-form-accordion-array.js +3 -1
  63. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  64. package/dist/components/json-schema-form-array-view.cjs +63 -0
  65. package/dist/components/json-schema-form-array-view.cjs.map +1 -0
  66. package/dist/components/json-schema-form-array-view.d.ts +21 -0
  67. package/dist/components/json-schema-form-array-view.d.ts.map +1 -0
  68. package/dist/components/json-schema-form-array-view.js +63 -0
  69. package/dist/components/json-schema-form-array-view.js.map +1 -0
  70. package/dist/components/json-schema-form-array.cjs +3 -7
  71. package/dist/components/json-schema-form-array.cjs.map +1 -1
  72. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  73. package/dist/components/json-schema-form-array.js +3 -7
  74. package/dist/components/json-schema-form-array.js.map +1 -1
  75. package/dist/components/json-schema-form-conditionals.cjs +67 -0
  76. package/dist/components/json-schema-form-conditionals.cjs.map +1 -0
  77. package/dist/components/json-schema-form-conditionals.d.ts +9 -0
  78. package/dist/components/json-schema-form-conditionals.d.ts.map +1 -0
  79. package/dist/components/json-schema-form-conditionals.js +67 -0
  80. package/dist/components/json-schema-form-conditionals.js.map +1 -0
  81. package/dist/components/json-schema-form-debug-badge.cjs +108 -0
  82. package/dist/components/json-schema-form-debug-badge.cjs.map +1 -0
  83. package/dist/components/json-schema-form-debug-badge.d.ts +10 -0
  84. package/dist/components/json-schema-form-debug-badge.d.ts.map +1 -0
  85. package/dist/components/json-schema-form-debug-badge.js +108 -0
  86. package/dist/components/json-schema-form-debug-badge.js.map +1 -0
  87. package/dist/components/json-schema-form-debug-glyph-map.cjs +129 -0
  88. package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -0
  89. package/dist/components/json-schema-form-debug-glyph-map.d.ts +20 -0
  90. package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -0
  91. package/dist/components/json-schema-form-debug-glyph-map.js +129 -0
  92. package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -0
  93. package/dist/components/json-schema-form-debug-glyph.cjs +13 -0
  94. package/dist/components/json-schema-form-debug-glyph.cjs.map +1 -0
  95. package/dist/components/json-schema-form-debug-glyph.d.ts +6 -0
  96. package/dist/components/json-schema-form-debug-glyph.d.ts.map +1 -0
  97. package/dist/components/json-schema-form-debug-glyph.js +13 -0
  98. package/dist/components/json-schema-form-debug-glyph.js.map +1 -0
  99. package/dist/components/json-schema-form-debug-groups.cjs +56 -0
  100. package/dist/components/json-schema-form-debug-groups.cjs.map +1 -0
  101. package/dist/components/json-schema-form-debug-groups.d.ts +8 -0
  102. package/dist/components/json-schema-form-debug-groups.d.ts.map +1 -0
  103. package/dist/components/json-schema-form-debug-groups.js +56 -0
  104. package/dist/components/json-schema-form-debug-groups.js.map +1 -0
  105. package/dist/components/json-schema-form-debug-keywords.cjs +159 -0
  106. package/dist/components/json-schema-form-debug-keywords.cjs.map +1 -0
  107. package/dist/components/json-schema-form-debug-keywords.d.ts +6 -0
  108. package/dist/components/json-schema-form-debug-keywords.d.ts.map +1 -0
  109. package/dist/components/json-schema-form-debug-keywords.js +159 -0
  110. package/dist/components/json-schema-form-debug-keywords.js.map +1 -0
  111. package/dist/components/json-schema-form-debug-listeners.cjs +102 -0
  112. package/dist/components/json-schema-form-debug-listeners.cjs.map +1 -0
  113. package/dist/components/json-schema-form-debug-listeners.d.ts +6 -0
  114. package/dist/components/json-schema-form-debug-listeners.d.ts.map +1 -0
  115. package/dist/components/json-schema-form-debug-listeners.js +102 -0
  116. package/dist/components/json-schema-form-debug-listeners.js.map +1 -0
  117. package/dist/components/json-schema-form-debug.cjs +31 -0
  118. package/dist/components/json-schema-form-debug.cjs.map +1 -0
  119. package/dist/components/json-schema-form-debug.d.ts +11 -0
  120. package/dist/components/json-schema-form-debug.d.ts.map +1 -0
  121. package/dist/components/json-schema-form-debug.js +31 -0
  122. package/dist/components/json-schema-form-debug.js.map +1 -0
  123. package/dist/components/json-schema-form-defaults.cjs +68 -0
  124. package/dist/components/json-schema-form-defaults.cjs.map +1 -0
  125. package/dist/components/json-schema-form-defaults.d.ts +4 -0
  126. package/dist/components/json-schema-form-defaults.d.ts.map +1 -0
  127. package/dist/components/json-schema-form-defaults.js +68 -0
  128. package/dist/components/json-schema-form-defaults.js.map +1 -0
  129. package/dist/components/json-schema-form-enum-choice.cjs +114 -0
  130. package/dist/components/json-schema-form-enum-choice.cjs.map +1 -0
  131. package/dist/components/json-schema-form-enum-choice.d.ts +14 -0
  132. package/dist/components/json-schema-form-enum-choice.d.ts.map +1 -0
  133. package/dist/components/json-schema-form-enum-choice.js +114 -0
  134. package/dist/components/json-schema-form-enum-choice.js.map +1 -0
  135. package/dist/components/json-schema-form-errors.cjs +49 -31
  136. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  137. package/dist/components/json-schema-form-errors.d.ts +4 -2
  138. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  139. package/dist/components/json-schema-form-errors.js +51 -33
  140. package/dist/components/json-schema-form-errors.js.map +1 -1
  141. package/dist/components/json-schema-form-fields.cjs +3 -93
  142. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  143. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  144. package/dist/components/json-schema-form-fields.js +1 -91
  145. package/dist/components/json-schema-form-fields.js.map +1 -1
  146. package/dist/components/json-schema-form-filter.cjs +2 -1
  147. package/dist/components/json-schema-form-filter.cjs.map +1 -1
  148. package/dist/components/json-schema-form-filter.js +2 -1
  149. package/dist/components/json-schema-form-filter.js.map +1 -1
  150. package/dist/components/json-schema-form-item-summary.cjs +6 -2
  151. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  152. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  153. package/dist/components/json-schema-form-item-summary.js +6 -2
  154. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  155. package/dist/components/json-schema-form-layout.cjs +28 -19
  156. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  157. package/dist/components/json-schema-form-layout.d.ts +8 -6
  158. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  159. package/dist/components/json-schema-form-layout.js +29 -20
  160. package/dist/components/json-schema-form-layout.js.map +1 -1
  161. package/dist/components/json-schema-form-listener-paths.cjs +52 -0
  162. package/dist/components/json-schema-form-listener-paths.cjs.map +1 -0
  163. package/dist/components/json-schema-form-listener-paths.d.ts +10 -0
  164. package/dist/components/json-schema-form-listener-paths.d.ts.map +1 -0
  165. package/dist/components/json-schema-form-listener-paths.js +52 -0
  166. package/dist/components/json-schema-form-listener-paths.js.map +1 -0
  167. package/dist/components/json-schema-form-listener-types.d.ts +22 -0
  168. package/dist/components/json-schema-form-listener-types.d.ts.map +1 -0
  169. package/dist/components/json-schema-form-listeners.cjs +256 -0
  170. package/dist/components/json-schema-form-listeners.cjs.map +1 -0
  171. package/dist/components/json-schema-form-listeners.d.ts +13 -0
  172. package/dist/components/json-schema-form-listeners.d.ts.map +1 -0
  173. package/dist/components/json-schema-form-listeners.js +256 -0
  174. package/dist/components/json-schema-form-listeners.js.map +1 -0
  175. package/dist/components/json-schema-form-object-array-view.cjs +62 -0
  176. package/dist/components/json-schema-form-object-array-view.cjs.map +1 -0
  177. package/dist/components/json-schema-form-object-array-view.d.ts +14 -0
  178. package/dist/components/json-schema-form-object-array-view.d.ts.map +1 -0
  179. package/dist/components/json-schema-form-object-array-view.js +62 -0
  180. package/dist/components/json-schema-form-object-array-view.js.map +1 -0
  181. package/dist/components/json-schema-form-object.cjs +3 -0
  182. package/dist/components/json-schema-form-object.cjs.map +1 -1
  183. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  184. package/dist/components/json-schema-form-object.js +3 -0
  185. package/dist/components/json-schema-form-object.js.map +1 -1
  186. package/dist/components/json-schema-form-preferences.cjs +1 -0
  187. package/dist/components/json-schema-form-preferences.cjs.map +1 -1
  188. package/dist/components/json-schema-form-preferences.d.ts +1 -0
  189. package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
  190. package/dist/components/json-schema-form-preferences.js +1 -0
  191. package/dist/components/json-schema-form-preferences.js.map +1 -1
  192. package/dist/components/json-schema-form-render.cjs +36 -12
  193. package/dist/components/json-schema-form-render.cjs.map +1 -1
  194. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  195. package/dist/components/json-schema-form-render.js +38 -14
  196. package/dist/components/json-schema-form-render.js.map +1 -1
  197. package/dist/components/json-schema-form-resolve.cjs +6 -99
  198. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  199. package/dist/components/json-schema-form-resolve.d.ts +1 -8
  200. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  201. package/dist/components/json-schema-form-resolve.js +5 -98
  202. package/dist/components/json-schema-form-resolve.js.map +1 -1
  203. package/dist/components/json-schema-form-runtime-types.d.ts +16 -0
  204. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
  205. package/dist/components/json-schema-form-table-array.cjs +67 -16
  206. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  207. package/dist/components/json-schema-form-table-array.d.ts +4 -1
  208. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  209. package/dist/components/json-schema-form-table-array.js +70 -19
  210. package/dist/components/json-schema-form-table-array.js.map +1 -1
  211. package/dist/components/json-schema-form-tone.cjs +12 -0
  212. package/dist/components/json-schema-form-tone.cjs.map +1 -1
  213. package/dist/components/json-schema-form-tone.js +12 -0
  214. package/dist/components/json-schema-form-tone.js.map +1 -1
  215. package/dist/components/json-schema-form-types.d.ts +17 -0
  216. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  217. package/dist/components/json-schema-form-utils.cjs +7 -1
  218. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  219. package/dist/components/json-schema-form-utils.d.ts +2 -1
  220. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  221. package/dist/components/json-schema-form-utils.js +7 -1
  222. package/dist/components/json-schema-form-utils.js.map +1 -1
  223. package/dist/components.cjs +3 -2
  224. package/dist/components.cjs.map +1 -1
  225. package/dist/components.d.ts +3 -2
  226. package/dist/components.d.ts.map +1 -1
  227. package/dist/components.js +2 -1
  228. package/dist/components.js.map +1 -1
  229. package/dist/data/DataTable.cjs +9 -3
  230. package/dist/data/DataTable.cjs.map +1 -1
  231. package/dist/data/DataTable.d.ts +6 -0
  232. package/dist/data/DataTable.d.ts.map +1 -1
  233. package/dist/data/DataTable.js +9 -3
  234. package/dist/data/DataTable.js.map +1 -1
  235. package/dist/data/FixtureEditor/FixtureEditor.cjs +43 -24
  236. package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -1
  237. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -1
  238. package/dist/data/FixtureEditor/FixtureEditor.js +43 -24
  239. package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -1
  240. package/dist/data/GraphDiagram.cjs +125 -138
  241. package/dist/data/GraphDiagram.cjs.map +1 -1
  242. package/dist/data/GraphDiagram.d.ts +30 -23
  243. package/dist/data/GraphDiagram.d.ts.map +1 -1
  244. package/dist/data/GraphDiagram.js +128 -141
  245. package/dist/data/GraphDiagram.js.map +1 -1
  246. package/dist/data/GraphDiagramEdges.cjs +208 -0
  247. package/dist/data/GraphDiagramEdges.cjs.map +1 -0
  248. package/dist/data/GraphDiagramEdges.d.ts +40 -0
  249. package/dist/data/GraphDiagramEdges.d.ts.map +1 -0
  250. package/dist/data/GraphDiagramEdges.js +208 -0
  251. package/dist/data/GraphDiagramEdges.js.map +1 -0
  252. package/dist/data/GraphDiagramNodes.cjs +142 -0
  253. package/dist/data/GraphDiagramNodes.cjs.map +1 -0
  254. package/dist/data/GraphDiagramNodes.d.ts +22 -0
  255. package/dist/data/GraphDiagramNodes.d.ts.map +1 -0
  256. package/dist/data/GraphDiagramNodes.js +142 -0
  257. package/dist/data/GraphDiagramNodes.js.map +1 -0
  258. package/dist/data/Tree.cjs +10 -2
  259. package/dist/data/Tree.cjs.map +1 -1
  260. package/dist/data/Tree.d.ts +6 -1
  261. package/dist/data/Tree.d.ts.map +1 -1
  262. package/dist/data/Tree.js +10 -2
  263. package/dist/data/Tree.js.map +1 -1
  264. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs +8 -3
  265. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs.map +1 -1
  266. package/dist/data/ai/PromptRunEditor/RuntimeRows.d.ts.map +1 -1
  267. package/dist/data/ai/PromptRunEditor/RuntimeRows.js +8 -3
  268. package/dist/data/ai/PromptRunEditor/RuntimeRows.js.map +1 -1
  269. package/dist/data/ai/PromptRunEditor/index.cjs +37 -43
  270. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  271. package/dist/data/ai/PromptRunEditor/index.d.ts +3 -1
  272. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  273. package/dist/data/ai/PromptRunEditor/index.js +38 -44
  274. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  275. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +16 -5
  276. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  277. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts +4 -1
  278. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  279. package/dist/data/ai/PromptRunEditor/runtimeActions.js +17 -6
  280. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  281. package/dist/data/ai/SessionInspector.approvals-model.cjs +12 -0
  282. package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -1
  283. package/dist/data/ai/SessionInspector.approvals-model.d.ts +11 -2
  284. package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -1
  285. package/dist/data/ai/SessionInspector.approvals-model.js +12 -0
  286. package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -1
  287. package/dist/data/ai/SessionInspector.approvals.cjs +25 -1
  288. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  289. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -1
  290. package/dist/data/ai/SessionInspector.approvals.js +26 -2
  291. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  292. package/dist/data/ai/SessionInspector.cjs +143 -167
  293. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  294. package/dist/data/ai/SessionInspector.collection-types.d.ts +5 -0
  295. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
  296. package/dist/data/ai/SessionInspector.collection.cjs +18 -5
  297. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
  298. package/dist/data/ai/SessionInspector.collection.d.ts +2 -0
  299. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -1
  300. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts +6 -0
  301. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts.map +1 -0
  302. package/dist/data/ai/SessionInspector.collection.js +18 -5
  303. package/dist/data/ai/SessionInspector.collection.js.map +1 -1
  304. package/dist/data/ai/SessionInspector.d.ts +24 -2
  305. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  306. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +105 -7
  307. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -1
  308. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +12 -1
  309. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -1
  310. package/dist/data/ai/SessionInspector.hierarchy-state.js +107 -9
  311. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -1
  312. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  313. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  314. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  315. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  316. package/dist/data/ai/SessionInspector.js +144 -168
  317. package/dist/data/ai/SessionInspector.js.map +1 -1
  318. package/dist/data/ai/SessionInspector.legacy.cjs +116 -0
  319. package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -0
  320. package/dist/data/ai/SessionInspector.legacy.d.ts +19 -0
  321. package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -0
  322. package/dist/data/ai/SessionInspector.legacy.js +116 -0
  323. package/dist/data/ai/SessionInspector.legacy.js.map +1 -0
  324. package/dist/data/ai/SessionInspector.panels.cjs +3 -0
  325. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  326. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  327. package/dist/data/ai/SessionInspector.panels.js +3 -0
  328. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  329. package/dist/data/ai/SessionInspector.plan.cjs +29 -12
  330. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -1
  331. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -1
  332. package/dist/data/ai/SessionInspector.plan.js +30 -13
  333. package/dist/data/ai/SessionInspector.plan.js.map +1 -1
  334. package/dist/data/ai/SessionInspector.remote-view.cjs +44 -0
  335. package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -0
  336. package/dist/data/ai/SessionInspector.remote-view.d.ts +11 -0
  337. package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -0
  338. package/dist/data/ai/SessionInspector.remote-view.js +44 -0
  339. package/dist/data/ai/SessionInspector.remote-view.js.map +1 -0
  340. package/dist/data/ai/SessionInspector.remote.cjs +275 -0
  341. package/dist/data/ai/SessionInspector.remote.cjs.map +1 -0
  342. package/dist/data/ai/SessionInspector.remote.d.ts +57 -0
  343. package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -0
  344. package/dist/data/ai/SessionInspector.remote.js +275 -0
  345. package/dist/data/ai/SessionInspector.remote.js.map +1 -0
  346. package/dist/data/ai/SessionInspector.summary.cjs +9 -159
  347. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  348. package/dist/data/ai/SessionInspector.summary.d.ts +0 -3
  349. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
  350. package/dist/data/ai/SessionInspector.summary.js +11 -161
  351. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  352. package/dist/data/ai/SessionInspector.tab-state.cjs +15 -0
  353. package/dist/data/ai/SessionInspector.tab-state.cjs.map +1 -0
  354. package/dist/data/ai/SessionInspector.tab-state.d.ts +3 -0
  355. package/dist/data/ai/SessionInspector.tab-state.d.ts.map +1 -0
  356. package/dist/data/ai/SessionInspector.tab-state.js +15 -0
  357. package/dist/data/ai/SessionInspector.tab-state.js.map +1 -0
  358. package/dist/data/ai/SessionInspector.tabs.model.cjs +31 -18
  359. package/dist/data/ai/SessionInspector.tabs.model.cjs.map +1 -1
  360. package/dist/data/ai/SessionInspector.tabs.model.d.ts +3 -1
  361. package/dist/data/ai/SessionInspector.tabs.model.d.ts.map +1 -1
  362. package/dist/data/ai/SessionInspector.tabs.model.js +32 -19
  363. package/dist/data/ai/SessionInspector.tabs.model.js.map +1 -1
  364. package/dist/data/ai/SessionInspector.transcript.cjs +4 -0
  365. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
  366. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
  367. package/dist/data/ai/SessionInspector.transcript.js +4 -0
  368. package/dist/data/ai/SessionInspector.transcript.js.map +1 -1
  369. package/dist/data/ai/SessionInspector.verification.cjs +53 -0
  370. package/dist/data/ai/SessionInspector.verification.cjs.map +1 -0
  371. package/dist/data/ai/SessionInspector.verification.d.ts +7 -0
  372. package/dist/data/ai/SessionInspector.verification.d.ts.map +1 -0
  373. package/dist/data/ai/SessionInspector.verification.js +53 -0
  374. package/dist/data/ai/SessionInspector.verification.js.map +1 -0
  375. package/dist/data/ai/SessionViewer.approval-body.cjs +146 -0
  376. package/dist/data/ai/SessionViewer.approval-body.cjs.map +1 -0
  377. package/dist/data/ai/SessionViewer.approval-body.d.ts +11 -0
  378. package/dist/data/ai/SessionViewer.approval-body.d.ts.map +1 -0
  379. package/dist/data/ai/SessionViewer.approval-body.js +146 -0
  380. package/dist/data/ai/SessionViewer.approval-body.js.map +1 -0
  381. package/dist/data/ai/SessionViewer.approval-forms.cjs +150 -0
  382. package/dist/data/ai/SessionViewer.approval-forms.cjs.map +1 -0
  383. package/dist/data/ai/SessionViewer.approval-forms.d.ts +23 -0
  384. package/dist/data/ai/SessionViewer.approval-forms.d.ts.map +1 -0
  385. package/dist/data/ai/SessionViewer.approval-forms.js +150 -0
  386. package/dist/data/ai/SessionViewer.approval-forms.js.map +1 -0
  387. package/dist/data/ai/SessionViewer.cjs +57 -20
  388. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  389. package/dist/data/ai/SessionViewer.d.ts +13 -3
  390. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  391. package/dist/data/ai/SessionViewer.decision-controls.cjs +313 -0
  392. package/dist/data/ai/SessionViewer.decision-controls.cjs.map +1 -0
  393. package/dist/data/ai/SessionViewer.decision-controls.d.ts +43 -0
  394. package/dist/data/ai/SessionViewer.decision-controls.d.ts.map +1 -0
  395. package/dist/data/ai/SessionViewer.decision-controls.js +313 -0
  396. package/dist/data/ai/SessionViewer.decision-controls.js.map +1 -0
  397. package/dist/data/ai/SessionViewer.decision.cjs +21 -0
  398. package/dist/data/ai/SessionViewer.decision.cjs.map +1 -0
  399. package/dist/data/ai/SessionViewer.decision.d.ts +12 -0
  400. package/dist/data/ai/SessionViewer.decision.d.ts.map +1 -0
  401. package/dist/data/ai/SessionViewer.decision.js +21 -0
  402. package/dist/data/ai/SessionViewer.decision.js.map +1 -0
  403. package/dist/data/ai/SessionViewer.input.cjs +14 -0
  404. package/dist/data/ai/SessionViewer.input.cjs.map +1 -1
  405. package/dist/data/ai/SessionViewer.input.d.ts +5 -0
  406. package/dist/data/ai/SessionViewer.input.d.ts.map +1 -1
  407. package/dist/data/ai/SessionViewer.input.js +14 -0
  408. package/dist/data/ai/SessionViewer.input.js.map +1 -1
  409. package/dist/data/ai/SessionViewer.js +58 -21
  410. package/dist/data/ai/SessionViewer.js.map +1 -1
  411. package/dist/data/ai/SessionViewer.model.cjs +7 -1
  412. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  413. package/dist/data/ai/SessionViewer.model.d.ts +25 -3
  414. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  415. package/dist/data/ai/SessionViewer.model.js +7 -1
  416. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  417. package/dist/data/ai/SessionViewer.rows.cjs +6 -3
  418. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  419. package/dist/data/ai/SessionViewer.rows.d.ts +2 -1
  420. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  421. package/dist/data/ai/SessionViewer.rows.js +6 -3
  422. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  423. package/dist/data/ai/SessionViewer.tool-row.cjs +29 -237
  424. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  425. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  426. package/dist/data/ai/SessionViewer.tool-row.js +27 -235
  427. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  428. package/dist/data/ai/SessionViewer.unified.d.ts +17 -0
  429. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  430. package/dist/data/ai/SessionViewerMenu.cjs +8 -2
  431. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  432. package/dist/data/ai/SessionViewerMenu.d.ts +4 -1
  433. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  434. package/dist/data/ai/SessionViewerMenu.js +8 -2
  435. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  436. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +28 -17
  437. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  438. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +10 -2
  439. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  440. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +29 -18
  441. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  442. package/dist/data/ai/SpecRuntimeEditor/index.cjs +9 -1
  443. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  444. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +9 -2
  445. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  446. package/dist/data/ai/SpecRuntimeEditor/index.js +9 -1
  447. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  448. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +1 -1
  449. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +1 -1
  450. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  451. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +8 -2
  452. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  453. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  454. package/dist/data/ai/SpecRuntimeEditor/update.cjs +14 -6
  455. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  456. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +1 -0
  457. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  458. package/dist/data/ai/SpecRuntimeEditor/update.js +14 -6
  459. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  460. package/dist/data/ai/approval-request.cjs +75 -0
  461. package/dist/data/ai/approval-request.cjs.map +1 -0
  462. package/dist/data/ai/approval-request.d.ts +155 -0
  463. package/dist/data/ai/approval-request.d.ts.map +1 -0
  464. package/dist/data/ai/approval-request.js +75 -0
  465. package/dist/data/ai/approval-request.js.map +1 -0
  466. package/dist/data/ai/index.d.ts +6 -1
  467. package/dist/data/ai/index.d.ts.map +1 -1
  468. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs +125 -0
  469. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs.map +1 -0
  470. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts +11 -0
  471. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts.map +1 -0
  472. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js +125 -0
  473. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js.map +1 -0
  474. package/dist/data/ai/runtime-preset-menu/index.d.ts +3 -0
  475. package/dist/data/ai/runtime-preset-menu/index.d.ts.map +1 -0
  476. package/dist/data/ai/runtime-preset-menu/model.cjs +73 -0
  477. package/dist/data/ai/runtime-preset-menu/model.cjs.map +1 -0
  478. package/dist/data/ai/runtime-preset-menu/model.d.ts +13 -0
  479. package/dist/data/ai/runtime-preset-menu/model.d.ts.map +1 -0
  480. package/dist/data/ai/runtime-preset-menu/model.js +73 -0
  481. package/dist/data/ai/runtime-preset-menu/model.js.map +1 -0
  482. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs +149 -0
  483. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs.map +1 -0
  484. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts +15 -0
  485. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts.map +1 -0
  486. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js +149 -0
  487. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js.map +1 -0
  488. package/dist/data/ai/runtime-spec-fields.cjs +166 -0
  489. package/dist/data/ai/runtime-spec-fields.cjs.map +1 -0
  490. package/dist/data/ai/runtime-spec-fields.d.ts +13 -0
  491. package/dist/data/ai/runtime-spec-fields.d.ts.map +1 -0
  492. package/dist/data/ai/runtime-spec-fields.js +166 -0
  493. package/dist/data/ai/runtime-spec-fields.js.map +1 -0
  494. package/dist/data/ai/session-categories.cjs +4 -0
  495. package/dist/data/ai/session-categories.cjs.map +1 -1
  496. package/dist/data/ai/session-categories.d.ts +1 -0
  497. package/dist/data/ai/session-categories.d.ts.map +1 -1
  498. package/dist/data/ai/session-categories.js +4 -0
  499. package/dist/data/ai/session-categories.js.map +1 -1
  500. package/dist/data/ai/use-session-scroll.cjs +49 -21
  501. package/dist/data/ai/use-session-scroll.cjs.map +1 -1
  502. package/dist/data/ai/use-session-scroll.d.ts +2 -0
  503. package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
  504. package/dist/data/ai/use-session-scroll.js +49 -21
  505. package/dist/data/ai/use-session-scroll.js.map +1 -1
  506. package/dist/data/chat/Chat.runtime.cjs +1 -1
  507. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  508. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  509. package/dist/data/chat/Chat.runtime.js +1 -1
  510. package/dist/data/chat/Chat.runtime.js.map +1 -1
  511. package/dist/data/graph-columns-layout.cjs +216 -0
  512. package/dist/data/graph-columns-layout.cjs.map +1 -0
  513. package/dist/data/graph-columns-layout.d.ts +56 -0
  514. package/dist/data/graph-columns-layout.d.ts.map +1 -0
  515. package/dist/data/graph-columns-layout.js +216 -0
  516. package/dist/data/graph-columns-layout.js.map +1 -0
  517. package/dist/data/graph-diagram-model.cjs +73 -0
  518. package/dist/data/graph-diagram-model.cjs.map +1 -0
  519. package/dist/data/graph-diagram-model.d.ts +90 -0
  520. package/dist/data/graph-diagram-model.d.ts.map +1 -0
  521. package/dist/data/graph-diagram-model.js +73 -0
  522. package/dist/data/graph-diagram-model.js.map +1 -0
  523. package/dist/data/graph-edge-routing.cjs +235 -0
  524. package/dist/data/graph-edge-routing.cjs.map +1 -0
  525. package/dist/data/graph-edge-routing.d.ts +73 -0
  526. package/dist/data/graph-edge-routing.d.ts.map +1 -0
  527. package/dist/data/graph-edge-routing.js +235 -0
  528. package/dist/data/graph-edge-routing.js.map +1 -0
  529. package/dist/data/graph-layout.cjs +0 -82
  530. package/dist/data/graph-layout.cjs.map +1 -1
  531. package/dist/data/graph-layout.d.ts +1 -28
  532. package/dist/data/graph-layout.d.ts.map +1 -1
  533. package/dist/data/graph-layout.js +1 -83
  534. package/dist/data/graph-layout.js.map +1 -1
  535. package/dist/data/har/HarPanel.cjs +129 -33
  536. package/dist/data/har/HarPanel.cjs.map +1 -1
  537. package/dist/data/har/HarPanel.d.ts +13 -1
  538. package/dist/data/har/HarPanel.d.ts.map +1 -1
  539. package/dist/data/har/HarPanel.js +130 -34
  540. package/dist/data/har/HarPanel.js.map +1 -1
  541. package/dist/data/har/fixtures.d.ts +12 -0
  542. package/dist/data/har/fixtures.d.ts.map +1 -1
  543. package/dist/data/har/types.d.ts +12 -0
  544. package/dist/data/har/types.d.ts.map +1 -1
  545. package/dist/data/runtime/RuntimeBar.cjs +67 -84
  546. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  547. package/dist/data/runtime/RuntimeBar.d.ts +4 -5
  548. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  549. package/dist/data/runtime/RuntimeBar.fields.cjs +170 -0
  550. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -0
  551. package/dist/data/runtime/RuntimeBar.fields.d.ts +16 -0
  552. package/dist/data/runtime/RuntimeBar.fields.d.ts.map +1 -0
  553. package/dist/data/runtime/RuntimeBar.fields.js +170 -0
  554. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -0
  555. package/dist/data/runtime/RuntimeBar.js +70 -87
  556. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  557. package/dist/data/runtime/RuntimeBar.selection.cjs +56 -0
  558. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -0
  559. package/dist/data/runtime/RuntimeBar.selection.d.ts +20 -0
  560. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -0
  561. package/dist/data/runtime/RuntimeBar.selection.js +56 -0
  562. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -0
  563. package/dist/data/runtime/RuntimeBarActions.cjs +10 -6
  564. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  565. package/dist/data/runtime/RuntimeBarActions.d.ts +8 -1
  566. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  567. package/dist/data/runtime/RuntimeBarActions.js +10 -6
  568. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  569. package/dist/data/runtime/RuntimeBarIdentity.cjs +166 -0
  570. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -0
  571. package/dist/data/runtime/RuntimeBarIdentity.d.ts +25 -0
  572. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -0
  573. package/dist/data/runtime/RuntimeBarIdentity.js +166 -0
  574. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -0
  575. package/dist/data/runtime/RuntimeBarLayout.cjs +95 -0
  576. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -0
  577. package/dist/data/runtime/RuntimeBarLayout.d.ts +9 -0
  578. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -0
  579. package/dist/data/runtime/RuntimeBarLayout.js +95 -0
  580. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -0
  581. package/dist/data/runtime/RuntimeBarSegment.cjs +25 -14
  582. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  583. package/dist/data/runtime/RuntimeBarSegment.d.ts +4 -0
  584. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  585. package/dist/data/runtime/RuntimeBarSegment.js +25 -14
  586. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  587. package/dist/data/runtime/RuntimeLimitInput.cjs +41 -0
  588. package/dist/data/runtime/RuntimeLimitInput.cjs.map +1 -0
  589. package/dist/data/runtime/RuntimeLimitInput.d.ts +9 -0
  590. package/dist/data/runtime/RuntimeLimitInput.d.ts.map +1 -0
  591. package/dist/data/runtime/RuntimeLimitInput.js +41 -0
  592. package/dist/data/runtime/RuntimeLimitInput.js.map +1 -0
  593. package/dist/data/runtime/use-runtime-bar-overflow.cjs +70 -0
  594. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -0
  595. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +13 -0
  596. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -0
  597. package/dist/data/runtime/use-runtime-bar-overflow.js +70 -0
  598. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -0
  599. package/dist/data/use-edge-focus.cjs +20 -0
  600. package/dist/data/use-edge-focus.cjs.map +1 -0
  601. package/dist/data/use-edge-focus.d.ts +23 -0
  602. package/dist/data/use-edge-focus.d.ts.map +1 -0
  603. package/dist/data/use-edge-focus.js +20 -0
  604. package/dist/data/use-edge-focus.js.map +1 -0
  605. package/dist/data/use-pan-zoom.cjs +159 -0
  606. package/dist/data/use-pan-zoom.cjs.map +1 -0
  607. package/dist/data/use-pan-zoom.d.ts +79 -0
  608. package/dist/data/use-pan-zoom.d.ts.map +1 -0
  609. package/dist/data/use-pan-zoom.js +159 -0
  610. package/dist/data/use-pan-zoom.js.map +1 -0
  611. package/dist/data/version-info.cjs +3 -3
  612. package/dist/data/version-info.js +3 -3
  613. package/dist/data.cjs +5 -1
  614. package/dist/data.cjs.map +1 -1
  615. package/dist/data.d.ts +4 -3
  616. package/dist/data.d.ts.map +1 -1
  617. package/dist/data.js +6 -2
  618. package/dist/data.js.map +1 -1
  619. package/dist/devtools/useDebugStream.cjs +5 -1
  620. package/dist/devtools/useDebugStream.cjs.map +1 -1
  621. package/dist/devtools/useDebugStream.d.ts.map +1 -1
  622. package/dist/devtools/useDebugStream.js +6 -2
  623. package/dist/devtools/useDebugStream.js.map +1 -1
  624. package/dist/hooks/event-source-provider.cjs +9 -0
  625. package/dist/hooks/event-source-provider.cjs.map +1 -0
  626. package/dist/hooks/event-source-provider.d.ts +15 -0
  627. package/dist/hooks/event-source-provider.d.ts.map +1 -0
  628. package/dist/hooks/event-source-provider.js +9 -0
  629. package/dist/hooks/event-source-provider.js.map +1 -0
  630. package/dist/hooks/event-source.cjs +11 -0
  631. package/dist/hooks/event-source.cjs.map +1 -0
  632. package/dist/hooks/event-source.d.ts +22 -0
  633. package/dist/hooks/event-source.d.ts.map +1 -0
  634. package/dist/hooks/event-source.js +11 -0
  635. package/dist/hooks/event-source.js.map +1 -0
  636. package/dist/hooks/use-log-tail.cjs +5 -1
  637. package/dist/hooks/use-log-tail.cjs.map +1 -1
  638. package/dist/hooks/use-log-tail.d.ts.map +1 -1
  639. package/dist/hooks/use-log-tail.js +5 -1
  640. package/dist/hooks/use-log-tail.js.map +1 -1
  641. package/dist/hooks/use-prompts.cjs +5 -1
  642. package/dist/hooks/use-prompts.cjs.map +1 -1
  643. package/dist/hooks/use-prompts.d.ts.map +1 -1
  644. package/dist/hooks/use-prompts.js +6 -2
  645. package/dist/hooks/use-prompts.js.map +1 -1
  646. package/dist/hooks/use-task-run.cjs +9 -2
  647. package/dist/hooks/use-task-run.cjs.map +1 -1
  648. package/dist/hooks/use-task-run.d.ts.map +1 -1
  649. package/dist/hooks/use-task-run.js +10 -3
  650. package/dist/hooks/use-task-run.js.map +1 -1
  651. package/dist/hooks.cjs +4 -0
  652. package/dist/hooks.cjs.map +1 -1
  653. package/dist/hooks.d.ts +2 -0
  654. package/dist/hooks.d.ts.map +1 -1
  655. package/dist/hooks.js +4 -0
  656. package/dist/hooks.js.map +1 -1
  657. package/dist/icons/programmingCatalog.cjs +34 -34
  658. package/dist/icons/programmingCatalog.cjs.map +1 -1
  659. package/dist/icons/programmingCatalog.js +34 -34
  660. package/dist/icons/programmingCatalog.js.map +1 -1
  661. package/dist/index.cjs +14 -3
  662. package/dist/index.cjs.map +1 -1
  663. package/dist/index.js +14 -3
  664. package/dist/index.js.map +1 -1
  665. package/dist/monaco/MonacoEditor.cjs +4 -1
  666. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  667. package/dist/monaco/MonacoEditor.d.ts +1 -1
  668. package/dist/monaco/MonacoEditor.d.ts.map +1 -1
  669. package/dist/monaco/MonacoEditor.js +4 -1
  670. package/dist/monaco/MonacoEditor.js.map +1 -1
  671. package/dist/monaco/types.d.ts +2 -1
  672. package/dist/monaco/types.d.ts.map +1 -1
  673. package/dist/overlay/CommandPalette.cjs +14 -4
  674. package/dist/overlay/CommandPalette.cjs.map +1 -1
  675. package/dist/overlay/CommandPalette.d.ts +5 -1
  676. package/dist/overlay/CommandPalette.d.ts.map +1 -1
  677. package/dist/overlay/CommandPalette.js +14 -4
  678. package/dist/overlay/CommandPalette.js.map +1 -1
  679. package/dist/overlay/CommandPaletteList.cjs +5 -0
  680. package/dist/overlay/CommandPaletteList.cjs.map +1 -1
  681. package/dist/overlay/CommandPaletteList.d.ts +4 -2
  682. package/dist/overlay/CommandPaletteList.d.ts.map +1 -1
  683. package/dist/overlay/CommandPaletteList.js +5 -0
  684. package/dist/overlay/CommandPaletteList.js.map +1 -1
  685. package/dist/overlay/DropdownMenu.cjs +2 -0
  686. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  687. package/dist/overlay/DropdownMenu.d.ts +4 -0
  688. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  689. package/dist/overlay/DropdownMenu.js +2 -0
  690. package/dist/overlay/DropdownMenu.js.map +1 -1
  691. package/dist/overlay/DropdownMenuSubmenu.cjs +31 -15
  692. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  693. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  694. package/dist/overlay/DropdownMenuSubmenu.js +31 -15
  695. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  696. package/dist/rpc/OperationCatalog.cjs +32 -27
  697. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  698. package/dist/rpc/OperationCatalog.d.ts +11 -1
  699. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  700. package/dist/rpc/OperationCatalog.js +32 -27
  701. package/dist/rpc/OperationCatalog.js.map +1 -1
  702. package/dist/rpc/OperationEntityContextPicker.cjs +62 -256
  703. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
  704. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
  705. package/dist/rpc/OperationEntityContextPicker.js +64 -258
  706. package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
  707. package/dist/rpc/OperationEntityPicker.cjs +185 -0
  708. package/dist/rpc/OperationEntityPicker.cjs.map +1 -0
  709. package/dist/rpc/OperationEntityPicker.d.ts +51 -0
  710. package/dist/rpc/OperationEntityPicker.d.ts.map +1 -0
  711. package/dist/rpc/OperationEntityPicker.js +185 -0
  712. package/dist/rpc/OperationEntityPicker.js.map +1 -0
  713. package/dist/rpc/OperationEntityPicker.model.cjs +39 -0
  714. package/dist/rpc/OperationEntityPicker.model.cjs.map +1 -0
  715. package/dist/rpc/OperationEntityPicker.model.d.ts +27 -0
  716. package/dist/rpc/OperationEntityPicker.model.d.ts.map +1 -0
  717. package/dist/rpc/OperationEntityPicker.model.js +39 -0
  718. package/dist/rpc/OperationEntityPicker.model.js.map +1 -0
  719. package/dist/rpc/operationCatalogRowSelection.cjs +85 -0
  720. package/dist/rpc/operationCatalogRowSelection.cjs.map +1 -0
  721. package/dist/rpc/operationCatalogRowSelection.d.ts +57 -0
  722. package/dist/rpc/operationCatalogRowSelection.d.ts.map +1 -0
  723. package/dist/rpc/operationCatalogRowSelection.js +85 -0
  724. package/dist/rpc/operationCatalogRowSelection.js.map +1 -0
  725. package/dist/rpc/operationEntityPicker.fixtures.d.ts +13 -0
  726. package/dist/rpc/operationEntityPicker.fixtures.d.ts.map +1 -0
  727. package/dist/rpc/useOperationPages.cjs +6 -1
  728. package/dist/rpc/useOperationPages.cjs.map +1 -1
  729. package/dist/rpc/useOperationPages.d.ts +3 -1
  730. package/dist/rpc/useOperationPages.d.ts.map +1 -1
  731. package/dist/rpc/useOperationPages.js +6 -1
  732. package/dist/rpc/useOperationPages.js.map +1 -1
  733. package/dist/rpc.cjs +2 -0
  734. package/dist/rpc.cjs.map +1 -1
  735. package/dist/rpc.d.ts +2 -0
  736. package/dist/rpc.d.ts.map +1 -1
  737. package/dist/rpc.js +2 -0
  738. package/dist/rpc.js.map +1 -1
  739. package/dist/styles.css +1 -1
  740. package/package.json +4 -1
  741. package/schemas/json-schema-form.schema.json +571 -0
  742. package/dist/data/runtime/RuntimeBarCombo.cjs +0 -423
  743. package/dist/data/runtime/RuntimeBarCombo.cjs.map +0 -1
  744. package/dist/data/runtime/RuntimeBarCombo.d.ts +0 -33
  745. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +0 -1
  746. package/dist/data/runtime/RuntimeBarCombo.js +0 -423
  747. package/dist/data/runtime/RuntimeBarCombo.js.map +0 -1
  748. package/dist/data/runtime/RuntimeBarLimits.cjs +0 -262
  749. package/dist/data/runtime/RuntimeBarLimits.cjs.map +0 -1
  750. package/dist/data/runtime/RuntimeBarLimits.d.ts +0 -17
  751. package/dist/data/runtime/RuntimeBarLimits.d.ts.map +0 -1
  752. package/dist/data/runtime/RuntimeBarLimits.js +0 -262
  753. package/dist/data/runtime/RuntimeBarLimits.js.map +0 -1
  754. package/dist/data/runtime/RuntimeBarSegments.cjs +0 -346
  755. package/dist/data/runtime/RuntimeBarSegments.cjs.map +0 -1
  756. package/dist/data/runtime/RuntimeBarSegments.d.ts +0 -37
  757. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +0 -1
  758. package/dist/data/runtime/RuntimeBarSegments.js +0 -346
  759. package/dist/data/runtime/RuntimeBarSegments.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeActions.js","sources":["../../../../src/data/ai/PromptRunEditor/runtimeActions.tsx"],"sourcesContent":["import { UiSliders } from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport type { DropdownMenuItem } from \"../../../overlay/DropdownMenu\";\nimport { presetForRef } from \"../../../lib/runtime-profile-model\";\nimport { Icon } from \"../../Icon\";\nimport type { RuntimeBarAction } from \"../../runtime/RuntimeBarActions\";\nimport {\n SEGMENT_CAPTION_CLASS,\n SEGMENT_KEY_CLASS,\n SegmentItemLabel,\n} from \"../../runtime/RuntimeBarSegment\";\nimport {\n familyForMode,\n modeOptionFor,\n type SpecRuntimeFamily,\n} from \"../../runtime/runtime-mode\";\nimport {\n UNSPECIFIED_LABEL,\n UNSPECIFIED_NAME,\n unspecifiedHint,\n} from \"../../runtime/unspecified\";\nimport { sessionTone } from \"../session-tones\";\nimport type { RuntimePreset } from \"../runtime-profile\";\nimport {\n SPEC_PERMISSION_MODES,\n type AISpecRuntimeValue,\n type SpecPermissionMode,\n} from \"../SpecRuntimeEditor.model\";\nimport {\n collapsePermissionModeAliases,\n permissionModeVisual,\n} from \"../SpecRuntimeEditor/permission-mode-visuals\";\nimport { publishedPermissionModes } from \"../SpecRuntimeEditor/permissions-model\";\nimport { withPermissionMode } from \"../SpecRuntimeEditor/update\";\n\nconst PERMISSION_GROUP = \"Permission posture\";\nconst PRESETS_GROUP = \"Presets\";\n\n/**\n * The `permissions.mode` field as a runtime-bar action. Narrowing, aliasing and\n * labelling follow `PermissionModeField` exactly, so the bar and the spec\n * modal never disagree about which postures a runtime publishes.\n *\n * Undefined when the resolved runtime publishes no postures (schema\n * `enum: null`) and the spec holds none either — there is nothing to edit.\n */\nexport function permissionField({\n spec,\n families,\n effectiveMode,\n onChange,\n}: {\n spec: AISpecRuntimeValue;\n families: SpecRuntimeFamily[];\n effectiveMode?: string | undefined;\n onChange: (spec: AISpecRuntimeValue) => void;\n}): RuntimeBarAction | undefined {\n const specMode = spec.mode?.trim() || effectiveMode?.trim();\n const runtime = specMode ? modeOptionFor(families, specMode) : undefined;\n const family = specMode ? familyForMode(families, specMode) : undefined;\n const available = publishedPermissionModes(runtime?.schema);\n const published = SPEC_PERMISSION_MODES.filter((mode) =>\n available.includes(mode),\n );\n const current = spec.permissions?.mode;\n const support = Object.fromEntries(\n published.map((mode) => [\n mode,\n runtime?.permissions?.modes[mode] ?? { kind: \"native\" as const },\n ]),\n );\n const visible = collapsePermissionModeAliases(\n family?.id,\n published,\n current,\n support,\n );\n // A posture the runtime does not publish is a misconfiguration the operator\n // must see, not one the bar may silently drop.\n const unpublished = current !== undefined && !published.includes(current);\n if (visible.length === 0 && !unpublished) return undefined;\n\n const runtimeLabel = runtime\n ? `${family?.label ?? specMode} ${runtime.label}`\n : (specMode ?? \"the current runtime\");\n const currentVisual = current\n ? permissionModeVisual(family?.id, current)\n : undefined;\n const select = (mode: SpecPermissionMode | undefined) =>\n onChange(withPermissionMode(spec, mode));\n\n return {\n id: \"permissions.mode\",\n label: PERMISSION_GROUP,\n ...(currentVisual?.icon ? { icon: currentVisual.icon } : {}),\n title: unpublished\n ? `${PERMISSION_GROUP} — ${currentVisual?.label} is not available for ${runtimeLabel}`\n : `${PERMISSION_GROUP} — ${currentVisual?.label ?? UNSPECIFIED_NAME}`,\n caption: (\n <>\n <span className={cn(SEGMENT_KEY_CLASS, \"min-w-0 truncate\")}>Perms</span>\n {currentVisual && (\n <Icon\n icon={currentVisual.icon}\n className={cn(\n \"size-4 shrink-0\",\n unpublished\n ? \"text-destructive\"\n : sessionTone(currentVisual.tone).text,\n )}\n />\n )}\n <span\n className={cn(\n SEGMENT_CAPTION_CLASS,\n \"shrink-0\",\n unpublished && \"text-destructive\",\n )}\n >\n {currentVisual?.label ?? UNSPECIFIED_LABEL}\n </span>\n </>\n ),\n items: [\n {\n group: PERMISSION_GROUP,\n label: (\n <SegmentItemLabel\n text={UNSPECIFIED_LABEL}\n hint={unspecifiedHint()}\n selected={current === undefined}\n />\n ),\n onSelect: () => select(undefined),\n },\n ...visible.map((mode) => {\n const visual = permissionModeVisual(family?.id, mode);\n const cell = support[mode];\n return {\n group: PERMISSION_GROUP,\n label: (\n <SegmentItemLabel\n text={visual.label}\n {...(cell?.effects?.note ? { hint: cell.effects.note } : {})}\n selected={mode === current}\n stacked\n />\n ),\n icon: visual.icon,\n onSelect: () => select(mode),\n };\n }),\n ...(unpublished && current\n ? [\n {\n group: PERMISSION_GROUP,\n label: (\n <SegmentItemLabel\n text={permissionModeVisual(family?.id, current).label}\n hint={`not available for ${runtimeLabel}`}\n selected\n stacked\n />\n ),\n icon: permissionModeVisual(family?.id, current).icon,\n disabled: true,\n onSelect: () => {},\n },\n ]\n : []),\n ],\n };\n}\n\n/**\n * Preset selection as a runtime-bar action. Toggling happens in the menu;\n * ORDERING does not — reordering needs move controls, which cannot live inside\n * `role=\"menu\"` — so the field hands that off to a host-owned modal.\n */\nexport function presetsField({\n presets,\n value,\n onChange,\n onReorder,\n}: {\n presets: RuntimePreset[];\n value: string[];\n onChange: (next: string[]) => void;\n onReorder: () => void;\n}): RuntimeBarAction {\n const rows = value.map((ref) => ({ ref, preset: presetForRef(ref, presets) }));\n const names = rows.map(({ ref, preset }) => preset?.name ?? ref);\n const missing = rows.some(({ preset }) => !preset);\n\n const toggle = (preset: RuntimePreset) => {\n const index = rows.findIndex((row) => row.preset?.id === preset.id);\n // Removing keeps the surviving order; adding appends, so the newest preset\n // resolves last and therefore wins.\n onChange(\n index === -1\n ? [...value, preset.id]\n : value.filter((_, itemIndex) => itemIndex !== index),\n );\n };\n\n return {\n id: \"presets\",\n label: PRESETS_GROUP,\n title: names.length > 0 ? `Presets — ${names.join(\", \")}` : \"Presets — none\",\n caption: (\n <>\n <span className={cn(SEGMENT_KEY_CLASS, \"min-w-0 truncate\")}>\n Presets\n </span>\n <span className={cn(SEGMENT_CAPTION_CLASS, \"shrink-0\")}>\n {names.length > 0 ? String(names.length) : UNSPECIFIED_LABEL}\n </span>\n </>\n ),\n items: [\n ...presets.map((preset) => ({\n group: PRESETS_GROUP,\n label: (\n <SegmentItemLabel\n text={preset.name}\n {...(preset.description ? { hint: preset.description } : {})}\n selected={rows.some((row) => row.preset?.id === preset.id)}\n stacked\n />\n ),\n onSelect: () => toggle(preset),\n })),\n // Ordering matters past one preset; a reference the catalog cannot\n // resolve is only removable there, so it opens the modal on its own.\n ...(names.length >= 2 || missing\n ? [\n {\n group: \"Order\",\n label: \"Reorder presets…\",\n icon: UiSliders,\n onSelect: onReorder,\n } satisfies DropdownMenuItem,\n ]\n : []),\n ],\n };\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"runtimeActions.js","sources":["../../../../src/data/ai/PromptRunEditor/runtimeActions.tsx"],"sourcesContent":["import { UiShield, UiSliders } from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport type { DropdownMenuItem } from \"../../../overlay/DropdownMenu\";\nimport { presetForRef } from \"../../../lib/runtime-profile-model\";\nimport { Icon } from \"../../Icon\";\nimport type { RuntimeBarAction } from \"../../runtime/RuntimeBarActions\";\nimport type { ChatModel } from \"../../chat/types\";\nimport {\n SEGMENT_CAPTION_CLASS,\n SEGMENT_KEY_CLASS,\n SegmentItemLabel,\n} from \"../../runtime/RuntimeBarSegment\";\nimport {\n familyForMode,\n familyForModel,\n modeOptionFor,\n type SpecRuntimeFamily,\n} from \"../../runtime/runtime-mode\";\nimport {\n UNSPECIFIED_LABEL,\n UNSPECIFIED_NAME,\n unspecifiedHint,\n} from \"../../runtime/unspecified\";\nimport { sessionTone } from \"../session-tones\";\nimport type { RuntimePreset } from \"../runtime-profile\";\nimport {\n SPEC_PERMISSION_MODES,\n type AISpecRuntimeValue,\n type SpecPermissionMode,\n} from \"../SpecRuntimeEditor.model\";\nimport {\n collapsePermissionModeAliases,\n permissionModeVisual,\n} from \"../SpecRuntimeEditor/permission-mode-visuals\";\nimport { publishedPermissionModes } from \"../SpecRuntimeEditor/permissions-model\";\nimport { withPermissionMode } from \"../SpecRuntimeEditor/update\";\n\nconst PERMISSION_GROUP = \"Permission posture\";\nconst PRESETS_GROUP = \"Presets\";\n\n/**\n * The `permissions.mode` field as a runtime-bar action. Narrowing, aliasing and\n * labelling follow `PermissionModeField` exactly, so the bar and the spec\n * modal never disagree about which postures a runtime publishes.\n *\n * Undefined when the resolved runtime publishes no postures (schema\n * `enum: null`) and the spec holds none either — there is nothing to edit.\n */\nexport function permissionField({\n spec,\n families,\n effectiveMode,\n effectiveModel,\n onChange,\n models = [],\n}: {\n spec: AISpecRuntimeValue;\n families: SpecRuntimeFamily[];\n effectiveMode?: string | undefined;\n effectiveModel?: string | undefined;\n onChange: (spec: AISpecRuntimeValue) => void;\n models?: ChatModel[];\n}): RuntimeBarAction | undefined {\n const specMode = spec.mode?.trim() || effectiveMode?.trim();\n const family =\n familyForModel(families, models, spec.model ?? spec.id ?? effectiveModel) ??\n (specMode ? familyForMode(families, specMode) : undefined);\n const runtime = specMode\n ? modeOptionFor(families, specMode, family?.id)\n : undefined;\n const available = publishedPermissionModes(runtime?.schema);\n const published = SPEC_PERMISSION_MODES.filter((mode) =>\n available.includes(mode),\n );\n const current = spec.permissions?.mode;\n const support = Object.fromEntries(\n published.map((mode) => [\n mode,\n runtime?.permissions?.modes[mode] ?? { kind: \"native\" as const },\n ]),\n );\n const visible = collapsePermissionModeAliases(\n family?.id,\n published,\n current,\n support,\n );\n // A posture the runtime does not publish is a misconfiguration the operator\n // must see, not one the bar may silently drop.\n const unpublished = current !== undefined && !published.includes(current);\n if (visible.length === 0 && !unpublished) return undefined;\n\n const runtimeLabel = runtime\n ? `${family?.label ?? specMode} ${runtime.label}`\n : specMode ?? \"the current runtime\";\n const currentVisual = current\n ? permissionModeVisual(family?.id, current)\n : undefined;\n const select = (mode: SpecPermissionMode | undefined) =>\n onChange(withPermissionMode(spec, mode));\n\n return {\n id: \"permissions.mode\",\n isSet: current !== undefined,\n label: PERMISSION_GROUP,\n icon: UiShield,\n iconClassName: \"text-muted-foreground\",\n title: unpublished\n ? `${PERMISSION_GROUP} — ${currentVisual?.label} is not available for ${runtimeLabel}`\n : `${PERMISSION_GROUP} — ${currentVisual?.label ?? UNSPECIFIED_NAME}`,\n caption: (\n <>\n <span className={cn(SEGMENT_KEY_CLASS, \"min-w-0 truncate\")}>Perms</span>\n {currentVisual && (\n <Icon\n icon={currentVisual.icon}\n className={cn(\n \"size-4 shrink-0\",\n unpublished\n ? \"text-destructive\"\n : sessionTone(currentVisual.tone).text,\n )}\n />\n )}\n <span\n className={cn(\n SEGMENT_CAPTION_CLASS,\n \"shrink-0\",\n unpublished && \"text-destructive\",\n )}\n >\n {currentVisual?.label ?? UNSPECIFIED_LABEL}\n </span>\n </>\n ),\n items: [\n {\n group: PERMISSION_GROUP,\n label: (\n <SegmentItemLabel\n text={UNSPECIFIED_LABEL}\n hint={unspecifiedHint()}\n selected={current === undefined}\n />\n ),\n onSelect: () => select(undefined),\n },\n ...visible.map((mode) => {\n const visual = permissionModeVisual(family?.id, mode);\n const cell = support[mode];\n return {\n group: PERMISSION_GROUP,\n label: (\n <SegmentItemLabel\n text={visual.label}\n {...(cell?.effects?.note ? { hint: cell.effects.note } : {})}\n selected={mode === current}\n stacked\n />\n ),\n icon: visual.icon,\n iconClassName: sessionTone(visual.tone).text,\n onSelect: () => select(mode),\n };\n }),\n ...(unpublished && current\n ? [\n {\n group: PERMISSION_GROUP,\n label: (\n <SegmentItemLabel\n text={permissionModeVisual(family?.id, current).label}\n hint={`not available for ${runtimeLabel}`}\n selected\n stacked\n />\n ),\n icon: permissionModeVisual(family?.id, current).icon,\n iconClassName: \"text-destructive\",\n disabled: true,\n onSelect: () => {},\n },\n ]\n : []),\n ],\n };\n}\n\n/**\n * Preset selection as a runtime-bar action. Toggling happens in the menu;\n * ORDERING does not — reordering needs move controls, which cannot live inside\n * `role=\"menu\"` — so the field hands that off to a host-owned modal.\n */\nexport function presetsField({\n presets,\n value,\n onChange,\n onReorder,\n}: {\n presets: RuntimePreset[];\n value: string[];\n onChange: (next: string[]) => void;\n onReorder: () => void;\n}): RuntimeBarAction {\n const rows = value.map((ref) => ({\n ref,\n preset: presetForRef(ref, presets),\n }));\n const names = rows.map(({ ref, preset }) => preset?.name ?? ref);\n const missing = rows.some(({ preset }) => !preset);\n\n const toggle = (preset: RuntimePreset) => {\n const index = rows.findIndex((row) => row.preset?.id === preset.id);\n // Removing keeps the surviving order; adding appends, so the newest preset\n // resolves last and therefore wins.\n onChange(\n index === -1\n ? [...value, preset.id]\n : value.filter((_, itemIndex) => itemIndex !== index),\n );\n };\n\n return {\n id: \"presets\",\n isSet: value.length > 0,\n label: PRESETS_GROUP,\n title:\n names.length > 0 ? `Presets — ${names.join(\", \")}` : \"Presets — none\",\n caption: (\n <>\n <span className={cn(SEGMENT_KEY_CLASS, \"min-w-0 truncate\")}>\n Presets\n </span>\n <span className={cn(SEGMENT_CAPTION_CLASS, \"shrink-0\")}>\n {names.length > 0 ? String(names.length) : UNSPECIFIED_LABEL}\n </span>\n </>\n ),\n items: [\n ...presets.map((preset) => ({\n group: PRESETS_GROUP,\n label: (\n <SegmentItemLabel\n text={preset.name}\n {...(preset.description ? { hint: preset.description } : {})}\n selected={rows.some((row) => row.preset?.id === preset.id)}\n stacked\n />\n ),\n onSelect: () => toggle(preset),\n })),\n // Ordering matters past one preset; a reference the catalog cannot\n // resolve is only removable there, so it opens the modal on its own.\n ...(names.length >= 2 || missing\n ? [\n {\n group: \"Order\",\n label: \"Reorder presets…\",\n icon: UiSliders,\n onSelect: onReorder,\n } satisfies DropdownMenuItem,\n ]\n : []),\n ],\n };\n}\n"],"names":["_a"],"mappings":"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"}
@@ -5,5 +5,17 @@ function pendingApprovalRequests(requests) {
5
5
  (request) => request.state === "pending" && request.kind === "tool_approval"
6
6
  );
7
7
  }
8
+ function decisionFields(decision) {
9
+ const { answers, interrupt, scope, grants, content } = decision;
10
+ const fields = {
11
+ ...answers ? { answers } : {},
12
+ ...interrupt ? { interrupt } : {},
13
+ ...scope ? { scope } : {},
14
+ ...grants ? { grants } : {},
15
+ ...content ? { content } : {}
16
+ };
17
+ return Object.keys(fields).length > 0 ? fields : void 0;
18
+ }
19
+ exports.decisionFields = decisionFields;
8
20
  exports.pendingApprovalRequests = pendingApprovalRequests;
9
21
  //# sourceMappingURL=SessionInspector.approvals-model.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.approvals-model.cjs","sources":["../../../src/data/ai/SessionInspector.approvals-model.ts"],"sourcesContent":["import type { SessionApprovalRequest } from \"./SessionViewer.unified\";\n\n/** Approve or deny one pending approval. */\nexport type ApprovalResolveAction = \"approve\" | \"deny\";\n\n/** Resolves one `session.requests[]` row. Rejecting surfaces the server's\n * refusal text inline on that row (e.g. the prompt run is no longer\n * `waiting`) instead of leaving the Approve/Deny buttons silently inert. */\nexport type ApprovalResolveHandler = (\n approvalId: string,\n action: ApprovalResolveAction,\n message?: string,\n) => void | Promise<void>;\n\n/** The subset of `session.requests[]` the approvals panel surfaces: outstanding\n * tool approvals, regardless of which surface (in-process chat or an external\n * broker) created the request.\n *\n * It lives here rather than beside the panel because it is a selector, not a\n * component, and a module that exports both loses fast refresh for everything\n * in it. Its other caller — the SessionInspector tab badge — only ever wanted\n * the count anyway. */\nexport function pendingApprovalRequests(\n requests: SessionApprovalRequest[] | undefined,\n): SessionApprovalRequest[] {\n return (requests ?? []).filter(\n (request) => request.state === \"pending\" && request.kind === \"tool_approval\",\n );\n}\n"],"names":[],"mappings":";;AAsBO,SAAS,wBACd,UAC0B;AAC1B,UAAQ,YAAY,CAAA,GAAI;AAAA,IACtB,CAAC,YAAY,QAAQ,UAAU,aAAa,QAAQ,SAAS;AAAA,EAAA;AAEjE;;"}
1
+ {"version":3,"file":"SessionInspector.approvals-model.cjs","sources":["../../../src/data/ai/SessionInspector.approvals-model.ts"],"sourcesContent":["import type { ApprovalDecisionFields } from \"./approval-request\";\nimport type { SessionApprovalRequest } from \"./SessionViewer.unified\";\n\n/** Approve or deny one pending approval. */\nexport type ApprovalResolveAction = \"approve\" | \"deny\";\n\n/** Resolves one `session.requests[]` row. Rejecting surfaces the server's\n * refusal text inline on that row (e.g. the prompt run is no longer\n * `waiting`) instead of leaving the Approve/Deny buttons silently inert.\n *\n * `decision` is passed only for a typed approval that sent more than\n * approve/deny + message: answers, form content, grants, scope, or interrupt\n * (Cancel is `deny` with `interrupt`). A plain approval calls it with three\n * arguments, exactly as before typed approvals existed. */\nexport type ApprovalResolveHandler = (\n approvalId: string,\n action: ApprovalResolveAction,\n message?: string,\n decision?: ApprovalDecisionFields,\n) => void | Promise<void>;\n\n/** The subset of `session.requests[]` the approvals panel surfaces: outstanding\n * tool approvals, regardless of which surface (in-process chat or an external\n * broker) created the request.\n *\n * It lives here rather than beside the panel because it is a selector, not a\n * component, and a module that exports both loses fast refresh for everything\n * in it. Its other caller — the SessionInspector tab badge — only ever wanted\n * the count anyway. */\nexport function pendingApprovalRequests(\n requests: SessionApprovalRequest[] | undefined,\n): SessionApprovalRequest[] {\n return (requests ?? []).filter(\n (request) => request.state === \"pending\" && request.kind === \"tool_approval\",\n );\n}\n\n/** The typed-decision fields a decision actually set, or undefined when it is a\n * plain approve/deny. */\nexport function decisionFields(\n decision: ApprovalDecisionFields,\n): ApprovalDecisionFields | undefined {\n const { answers, interrupt, scope, grants, content } = decision;\n const fields: ApprovalDecisionFields = {\n ...(answers ? { answers } : {}),\n ...(interrupt ? { interrupt } : {}),\n ...(scope ? { scope } : {}),\n ...(grants ? { grants } : {}),\n ...(content ? { content } : {}),\n };\n return Object.keys(fields).length > 0 ? fields : undefined;\n}\n"],"names":[],"mappings":";;AA6BO,SAAS,wBACd,UAC0B;AAC1B,UAAQ,YAAY,CAAA,GAAI;AAAA,IACtB,CAAC,YAAY,QAAQ,UAAU,aAAa,QAAQ,SAAS;AAAA,EAAA;AAEjE;AAIO,SAAS,eACd,UACoC;AACpC,QAAM,EAAE,SAAS,WAAW,OAAO,QAAQ,YAAY;AACvD,QAAM,SAAiC;AAAA,IACrC,GAAI,UAAU,EAAE,QAAA,IAAY,CAAA;AAAA,IAC5B,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,IAChC,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAA;AAAA,IACxB,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,IAC1B,GAAI,UAAU,EAAE,YAAY,CAAA;AAAA,EAAC;AAE/B,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AACnD;;;"}
@@ -1,10 +1,16 @@
1
+ import { ApprovalDecisionFields } from './approval-request.js';
1
2
  import { SessionApprovalRequest } from './SessionViewer.unified.js';
2
3
  /** Approve or deny one pending approval. */
3
4
  export type ApprovalResolveAction = "approve" | "deny";
4
5
  /** Resolves one `session.requests[]` row. Rejecting surfaces the server's
5
6
  * refusal text inline on that row (e.g. the prompt run is no longer
6
- * `waiting`) instead of leaving the Approve/Deny buttons silently inert. */
7
- export type ApprovalResolveHandler = (approvalId: string, action: ApprovalResolveAction, message?: string) => void | Promise<void>;
7
+ * `waiting`) instead of leaving the Approve/Deny buttons silently inert.
8
+ *
9
+ * `decision` is passed only for a typed approval that sent more than
10
+ * approve/deny + message: answers, form content, grants, scope, or interrupt
11
+ * (Cancel is `deny` with `interrupt`). A plain approval calls it with three
12
+ * arguments, exactly as before typed approvals existed. */
13
+ export type ApprovalResolveHandler = (approvalId: string, action: ApprovalResolveAction, message?: string, decision?: ApprovalDecisionFields) => void | Promise<void>;
8
14
  /** The subset of `session.requests[]` the approvals panel surfaces: outstanding
9
15
  * tool approvals, regardless of which surface (in-process chat or an external
10
16
  * broker) created the request.
@@ -14,4 +20,7 @@ export type ApprovalResolveHandler = (approvalId: string, action: ApprovalResolv
14
20
  * in it. Its other caller — the SessionInspector tab badge — only ever wanted
15
21
  * the count anyway. */
16
22
  export declare function pendingApprovalRequests(requests: SessionApprovalRequest[] | undefined): SessionApprovalRequest[];
23
+ /** The typed-decision fields a decision actually set, or undefined when it is a
24
+ * plain approve/deny. */
25
+ export declare function decisionFields(decision: ApprovalDecisionFields): ApprovalDecisionFields | undefined;
17
26
  //# sourceMappingURL=SessionInspector.approvals-model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.approvals-model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.approvals-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,4CAA4C;AAC5C,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD;;6EAE6E;AAC7E,MAAM,MAAM,sBAAsB,GAAG,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,qBAAqB,EAC7B,OAAO,CAAC,EAAE,MAAM,KACb,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;;;;wBAOwB;AACxB,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,SAAS,GAC7C,sBAAsB,EAAE,CAI1B"}
1
+ {"version":3,"file":"SessionInspector.approvals-model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.approvals-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,4CAA4C;AAC5C,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD;;;;;;;4DAO4D;AAC5D,MAAM,MAAM,sBAAsB,GAAG,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,qBAAqB,EAC7B,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,sBAAsB,KAC9B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;;;;wBAOwB;AACxB,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,SAAS,GAC7C,sBAAsB,EAAE,CAI1B;AAED;0BAC0B;AAC1B,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,sBAAsB,GAC/B,sBAAsB,GAAG,SAAS,CAUpC"}
@@ -3,7 +3,19 @@ function pendingApprovalRequests(requests) {
3
3
  (request) => request.state === "pending" && request.kind === "tool_approval"
4
4
  );
5
5
  }
6
+ function decisionFields(decision) {
7
+ const { answers, interrupt, scope, grants, content } = decision;
8
+ const fields = {
9
+ ...answers ? { answers } : {},
10
+ ...interrupt ? { interrupt } : {},
11
+ ...scope ? { scope } : {},
12
+ ...grants ? { grants } : {},
13
+ ...content ? { content } : {}
14
+ };
15
+ return Object.keys(fields).length > 0 ? fields : void 0;
16
+ }
6
17
  export {
18
+ decisionFields,
7
19
  pendingApprovalRequests
8
20
  };
9
21
  //# sourceMappingURL=SessionInspector.approvals-model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.approvals-model.js","sources":["../../../src/data/ai/SessionInspector.approvals-model.ts"],"sourcesContent":["import type { SessionApprovalRequest } from \"./SessionViewer.unified\";\n\n/** Approve or deny one pending approval. */\nexport type ApprovalResolveAction = \"approve\" | \"deny\";\n\n/** Resolves one `session.requests[]` row. Rejecting surfaces the server's\n * refusal text inline on that row (e.g. the prompt run is no longer\n * `waiting`) instead of leaving the Approve/Deny buttons silently inert. */\nexport type ApprovalResolveHandler = (\n approvalId: string,\n action: ApprovalResolveAction,\n message?: string,\n) => void | Promise<void>;\n\n/** The subset of `session.requests[]` the approvals panel surfaces: outstanding\n * tool approvals, regardless of which surface (in-process chat or an external\n * broker) created the request.\n *\n * It lives here rather than beside the panel because it is a selector, not a\n * component, and a module that exports both loses fast refresh for everything\n * in it. Its other caller — the SessionInspector tab badge — only ever wanted\n * the count anyway. */\nexport function pendingApprovalRequests(\n requests: SessionApprovalRequest[] | undefined,\n): SessionApprovalRequest[] {\n return (requests ?? []).filter(\n (request) => request.state === \"pending\" && request.kind === \"tool_approval\",\n );\n}\n"],"names":[],"mappings":"AAsBO,SAAS,wBACd,UAC0B;AAC1B,UAAQ,YAAY,CAAA,GAAI;AAAA,IACtB,CAAC,YAAY,QAAQ,UAAU,aAAa,QAAQ,SAAS;AAAA,EAAA;AAEjE;"}
1
+ {"version":3,"file":"SessionInspector.approvals-model.js","sources":["../../../src/data/ai/SessionInspector.approvals-model.ts"],"sourcesContent":["import type { ApprovalDecisionFields } from \"./approval-request\";\nimport type { SessionApprovalRequest } from \"./SessionViewer.unified\";\n\n/** Approve or deny one pending approval. */\nexport type ApprovalResolveAction = \"approve\" | \"deny\";\n\n/** Resolves one `session.requests[]` row. Rejecting surfaces the server's\n * refusal text inline on that row (e.g. the prompt run is no longer\n * `waiting`) instead of leaving the Approve/Deny buttons silently inert.\n *\n * `decision` is passed only for a typed approval that sent more than\n * approve/deny + message: answers, form content, grants, scope, or interrupt\n * (Cancel is `deny` with `interrupt`). A plain approval calls it with three\n * arguments, exactly as before typed approvals existed. */\nexport type ApprovalResolveHandler = (\n approvalId: string,\n action: ApprovalResolveAction,\n message?: string,\n decision?: ApprovalDecisionFields,\n) => void | Promise<void>;\n\n/** The subset of `session.requests[]` the approvals panel surfaces: outstanding\n * tool approvals, regardless of which surface (in-process chat or an external\n * broker) created the request.\n *\n * It lives here rather than beside the panel because it is a selector, not a\n * component, and a module that exports both loses fast refresh for everything\n * in it. Its other caller — the SessionInspector tab badge — only ever wanted\n * the count anyway. */\nexport function pendingApprovalRequests(\n requests: SessionApprovalRequest[] | undefined,\n): SessionApprovalRequest[] {\n return (requests ?? []).filter(\n (request) => request.state === \"pending\" && request.kind === \"tool_approval\",\n );\n}\n\n/** The typed-decision fields a decision actually set, or undefined when it is a\n * plain approve/deny. */\nexport function decisionFields(\n decision: ApprovalDecisionFields,\n): ApprovalDecisionFields | undefined {\n const { answers, interrupt, scope, grants, content } = decision;\n const fields: ApprovalDecisionFields = {\n ...(answers ? { answers } : {}),\n ...(interrupt ? { interrupt } : {}),\n ...(scope ? { scope } : {}),\n ...(grants ? { grants } : {}),\n ...(content ? { content } : {}),\n };\n return Object.keys(fields).length > 0 ? fields : undefined;\n}\n"],"names":[],"mappings":"AA6BO,SAAS,wBACd,UAC0B;AAC1B,UAAQ,YAAY,CAAA,GAAI;AAAA,IACtB,CAAC,YAAY,QAAQ,UAAU,aAAa,QAAQ,SAAS;AAAA,EAAA;AAEjE;AAIO,SAAS,eACd,UACoC;AACpC,QAAM,EAAE,SAAS,WAAW,OAAO,QAAQ,YAAY;AACvD,QAAM,SAAiC;AAAA,IACrC,GAAI,UAAU,EAAE,QAAA,IAAY,CAAA;AAAA,IAC5B,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,IAChC,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAA;AAAA,IACxB,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,IAC1B,GAAI,UAAU,EAAE,YAAY,CAAA;AAAA,EAAC;AAE/B,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AACnD;"}
@@ -9,6 +9,7 @@ const SessionInspector_model = require("./SessionInspector.model.cjs");
9
9
  const SessionInspector_panelParts = require("./SessionInspector.panel-parts.cjs");
10
10
  const SessionInspector_panelValues = require("./SessionInspector.panel-values.cjs");
11
11
  const SessionInspector_approvalsModel = require("./SessionInspector.approvals-model.cjs");
12
+ const SessionViewer_approvalBody = require("./SessionViewer.approval-body.cjs");
12
13
  const UiClock = require("../../icons/components/UiClock.cjs");
13
14
  function SessionApprovalsPanel({
14
15
  approvals,
@@ -97,6 +98,11 @@ function PendingApprovalRow({
97
98
  input: request.input,
98
99
  approval: { id: request.id }
99
100
  };
101
+ const typed = request.request;
102
+ const decideTyped = onResolve ? async (decision) => {
103
+ const fields = SessionInspector_approvalsModel.decisionFields(decision);
104
+ await (fields ? onResolve(request.id, decision.allow ? "approve" : "deny", decision.message, fields) : onResolve(request.id, decision.allow ? "approve" : "deny", decision.message));
105
+ } : void 0;
100
106
  const handleApprove = (approvalId, approved, reason) => {
101
107
  if (!onResolve) return;
102
108
  setError(void 0);
@@ -116,7 +122,25 @@ function PendingApprovalRow({
116
122
  request.expiresAt ? /* @__PURE__ */ jsxRuntime.jsx("span", { title: SessionInspector_model.formatDate(request.expiresAt), children: remainingLabel(request.expiresAt) }) : null
117
123
  ] })
118
124
  ] }),
119
- /* @__PURE__ */ jsxRuntime.jsx(
125
+ typed ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "not-prose", children: [
126
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium text-foreground", children: request.tool }),
127
+ /* @__PURE__ */ jsxRuntime.jsx(
128
+ SessionViewer_approvalBody.TypedApprovalBody,
129
+ {
130
+ event: {
131
+ id: request.id,
132
+ kind: "tool",
133
+ tool: request.tool,
134
+ pending: true,
135
+ approvalId: request.id,
136
+ approvalKind: typed.kind,
137
+ approvalRequest: typed
138
+ },
139
+ request: typed,
140
+ onDecision: decideTyped
141
+ }
142
+ )
143
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(
120
144
  ToolCall.ToolCall,
121
145
  {
122
146
  part,
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.approvals.cjs","sources":["../../../src/data/ai/SessionInspector.approvals.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { KeyValueList } from \"../KeyValueList\";\nimport { Icon } from \"../Icon\";\nimport { UiClock } from \"../../icons\";\nimport { ToolCall } from \"../chat/ToolCall\";\nimport type { AnyToolPart } from \"../chat/types\";\nimport { durationLabel, formatDate } from \"./SessionInspector.model\";\nimport { EmptyState, SimpleList } from \"./SessionInspector.panel-parts\";\nimport { kv } from \"./SessionInspector.panel-values\";\nimport {\n type ApprovalResolveHandler,\n pendingApprovalRequests,\n} from \"./SessionInspector.approvals-model\";\nimport type {\n SessionApprovalRequest,\n SessionApprovalStats,\n} from \"./SessionViewer.unified\";\n\nexport type {\n ApprovalResolveAction,\n ApprovalResolveHandler,\n} from \"./SessionInspector.approvals-model\";\n\n/** Renders every pending tool approval directly from `session.requests[]`\n * (never from transcript parts — an approval brokered outside this session's\n * own chat has no transcript part) plus the resolved approve/deny/denial\n * summary the panel previously showed alone. */\nexport function SessionApprovalsPanel({\n approvals,\n requests,\n onResolve,\n}: {\n approvals: SessionApprovalStats | undefined;\n requests?: SessionApprovalRequest[] | undefined;\n onResolve?: ApprovalResolveHandler;\n}) {\n const pending = pendingApprovalRequests(requests);\n const hasResolvedSummary = Boolean(\n approvals &&\n (approvals.approved ||\n approvals.denied ||\n approvals.cancelled ||\n approvals.expired ||\n approvals.denials?.length),\n );\n\n if (!pending.length && !hasResolvedSummary) {\n return <EmptyState>No approval metadata.</EmptyState>;\n }\n\n return (\n <div className=\"space-y-density-4\">\n {pending.length ? (\n <PendingApprovalsList\n requests={pending}\n {...(onResolve ? { onResolve } : {})}\n />\n ) : null}\n {hasResolvedSummary ? (\n <ResolvedApprovalsSummary approvals={approvals!} />\n ) : null}\n </div>\n );\n}\n\nfunction ResolvedApprovalsSummary({\n approvals,\n}: {\n approvals: SessionApprovalStats;\n}) {\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Approved\", approvals.approved ?? 0),\n kv(\"Denied\", approvals.denied ?? 0),\n kv(\"Cancelled\", approvals.cancelled ?? 0),\n kv(\"Expired\", approvals.expired ?? 0),\n ]}\n />\n {approvals.denials?.length ? (\n <SimpleList\n title=\"Denials\"\n rows={approvals.denials.map((denial, index) => ({\n key: denial.toolUseId || `${denial.tool}-${index}`,\n title: [denial.tool, denial.toolUseId].filter(Boolean).join(\" \"),\n detail: denial.reason,\n }))}\n />\n ) : null}\n </div>\n );\n}\n\nfunction PendingApprovalsList({\n requests,\n onResolve,\n}: {\n requests: SessionApprovalRequest[];\n onResolve?: ApprovalResolveHandler;\n}) {\n return (\n <section>\n <h3 className=\"mb-density-2 flex items-center gap-1.5 text-xs font-semibold uppercase text-amber-600 dark:text-amber-400\">\n <Icon icon={UiClock} className=\"size-3.5\" />\n Awaiting approval ({requests.length})\n </h3>\n <ul className=\"space-y-density-2\">\n {requests.map((request) => (\n <li key={request.id}>\n <PendingApprovalRow\n request={request}\n {...(onResolve ? { onResolve } : {})}\n />\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\nfunction PendingApprovalRow({\n request,\n onResolve,\n}: {\n request: SessionApprovalRequest;\n onResolve?: ApprovalResolveHandler;\n}) {\n const [error, setError] = useState<string | undefined>(undefined);\n const [busy, setBusy] = useState(false);\n\n const part: AnyToolPart = {\n type: \"dynamic-tool\",\n toolName: request.tool,\n toolCallId: request.toolCallId || request.id,\n state: \"approval-requested\",\n input: request.input,\n approval: { id: request.id },\n };\n\n const handleApprove = (\n approvalId: string,\n approved: boolean,\n reason?: string,\n ) => {\n if (!onResolve) return;\n setError(undefined);\n setBusy(true);\n void Promise.resolve(onResolve(approvalId, approved ? \"approve\" : \"deny\", reason))\n .catch((err: unknown) => {\n setError(err instanceof Error ? err.message : String(err));\n })\n .finally(() => setBusy(false));\n };\n\n return (\n <div className=\"rounded-md border border-amber-300/60 bg-amber-50/40 p-density-3 dark:border-amber-800/60 dark:bg-amber-950/20\">\n <div className=\"mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground\">\n <span>\n {request.requestedBy\n ? `Requested by ${request.requestedBy}`\n : \"Requested\"}\n </span>\n <span className=\"flex gap-density-3\">\n {request.createdAt ? (\n <span title={formatDate(request.createdAt)}>\n {ageLabel(request.createdAt)} ago\n </span>\n ) : null}\n {request.expiresAt ? (\n <span title={formatDate(request.expiresAt)}>\n {remainingLabel(request.expiresAt)}\n </span>\n ) : null}\n </span>\n </div>\n <ToolCall\n part={part}\n defaultOpen\n onApprove={busy ? undefined : handleApprove}\n />\n {busy ? (\n <p className=\"mt-1.5 pl-4 text-xs text-muted-foreground\">\n Submitting…\n </p>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"mt-1.5 pl-4 text-xs text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction ageLabel(createdAt: string): string {\n return durationLabel(createdAt) || \"0s\";\n}\n\nfunction remainingLabel(expiresAt: string): string {\n const expiry = new Date(expiresAt).getTime();\n if (Number.isNaN(expiry)) return \"\";\n const now = Date.now();\n if (expiry <= now) return \"expired\";\n const label = durationLabel(new Date(now).toISOString(), expiresAt);\n return label ? `${label} left` : \"\";\n}\n"],"names":["pendingApprovalRequests","jsx","EmptyState","jsxs","KeyValueList","kv","SimpleList","Icon","UiClock","useState","formatDate","ToolCall","durationLabel"],"mappings":"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"}
1
+ {"version":3,"file":"SessionInspector.approvals.cjs","sources":["../../../src/data/ai/SessionInspector.approvals.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { KeyValueList } from \"../KeyValueList\";\nimport { Icon } from \"../Icon\";\nimport { UiClock } from \"../../icons\";\nimport { ToolCall } from \"../chat/ToolCall\";\nimport type { AnyToolPart } from \"../chat/types\";\nimport { durationLabel, formatDate } from \"./SessionInspector.model\";\nimport { EmptyState, SimpleList } from \"./SessionInspector.panel-parts\";\nimport { kv } from \"./SessionInspector.panel-values\";\nimport {\n type ApprovalResolveHandler,\n decisionFields,\n pendingApprovalRequests,\n} from \"./SessionInspector.approvals-model\";\nimport { TypedApprovalBody } from \"./SessionViewer.approval-body\";\nimport type { DecisionHandler } from \"./SessionViewer.decision\";\nimport type {\n SessionApprovalRequest,\n SessionApprovalStats,\n} from \"./SessionViewer.unified\";\n\nexport type {\n ApprovalResolveAction,\n ApprovalResolveHandler,\n} from \"./SessionInspector.approvals-model\";\n\n/** Renders every pending tool approval directly from `session.requests[]`\n * (never from transcript parts — an approval brokered outside this session's\n * own chat has no transcript part) plus the resolved approve/deny/denial\n * summary the panel previously showed alone. */\nexport function SessionApprovalsPanel({\n approvals,\n requests,\n onResolve,\n}: {\n approvals: SessionApprovalStats | undefined;\n requests?: SessionApprovalRequest[] | undefined;\n onResolve?: ApprovalResolveHandler;\n}) {\n const pending = pendingApprovalRequests(requests);\n const hasResolvedSummary = Boolean(\n approvals &&\n (approvals.approved ||\n approvals.denied ||\n approvals.cancelled ||\n approvals.expired ||\n approvals.denials?.length),\n );\n\n if (!pending.length && !hasResolvedSummary) {\n return <EmptyState>No approval metadata.</EmptyState>;\n }\n\n return (\n <div className=\"space-y-density-4\">\n {pending.length ? (\n <PendingApprovalsList\n requests={pending}\n {...(onResolve ? { onResolve } : {})}\n />\n ) : null}\n {hasResolvedSummary ? (\n <ResolvedApprovalsSummary approvals={approvals!} />\n ) : null}\n </div>\n );\n}\n\nfunction ResolvedApprovalsSummary({\n approvals,\n}: {\n approvals: SessionApprovalStats;\n}) {\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Approved\", approvals.approved ?? 0),\n kv(\"Denied\", approvals.denied ?? 0),\n kv(\"Cancelled\", approvals.cancelled ?? 0),\n kv(\"Expired\", approvals.expired ?? 0),\n ]}\n />\n {approvals.denials?.length ? (\n <SimpleList\n title=\"Denials\"\n rows={approvals.denials.map((denial, index) => ({\n key: denial.toolUseId || `${denial.tool}-${index}`,\n title: [denial.tool, denial.toolUseId].filter(Boolean).join(\" \"),\n detail: denial.reason,\n }))}\n />\n ) : null}\n </div>\n );\n}\n\nfunction PendingApprovalsList({\n requests,\n onResolve,\n}: {\n requests: SessionApprovalRequest[];\n onResolve?: ApprovalResolveHandler;\n}) {\n return (\n <section>\n <h3 className=\"mb-density-2 flex items-center gap-1.5 text-xs font-semibold uppercase text-amber-600 dark:text-amber-400\">\n <Icon icon={UiClock} className=\"size-3.5\" />\n Awaiting approval ({requests.length})\n </h3>\n <ul className=\"space-y-density-2\">\n {requests.map((request) => (\n <li key={request.id}>\n <PendingApprovalRow\n request={request}\n {...(onResolve ? { onResolve } : {})}\n />\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\nfunction PendingApprovalRow({\n request,\n onResolve,\n}: {\n request: SessionApprovalRequest;\n onResolve?: ApprovalResolveHandler;\n}) {\n const [error, setError] = useState<string | undefined>(undefined);\n const [busy, setBusy] = useState(false);\n\n const part: AnyToolPart = {\n type: \"dynamic-tool\",\n toolName: request.tool,\n toolCallId: request.toolCallId || request.id,\n state: \"approval-requested\",\n input: request.input,\n approval: { id: request.id },\n };\n\n const typed = request.request;\n const decideTyped: DecisionHandler | undefined = onResolve\n ? async (decision) => {\n const fields = decisionFields(decision);\n await (fields\n ? onResolve(request.id, decision.allow ? \"approve\" : \"deny\", decision.message, fields)\n : onResolve(request.id, decision.allow ? \"approve\" : \"deny\", decision.message));\n }\n : undefined;\n\n const handleApprove = (\n approvalId: string,\n approved: boolean,\n reason?: string,\n ) => {\n if (!onResolve) return;\n setError(undefined);\n setBusy(true);\n void Promise.resolve(onResolve(approvalId, approved ? \"approve\" : \"deny\", reason))\n .catch((err: unknown) => {\n setError(err instanceof Error ? err.message : String(err));\n })\n .finally(() => setBusy(false));\n };\n\n return (\n <div className=\"rounded-md border border-amber-300/60 bg-amber-50/40 p-density-3 dark:border-amber-800/60 dark:bg-amber-950/20\">\n <div className=\"mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground\">\n <span>\n {request.requestedBy\n ? `Requested by ${request.requestedBy}`\n : \"Requested\"}\n </span>\n <span className=\"flex gap-density-3\">\n {request.createdAt ? (\n <span title={formatDate(request.createdAt)}>\n {ageLabel(request.createdAt)} ago\n </span>\n ) : null}\n {request.expiresAt ? (\n <span title={formatDate(request.expiresAt)}>\n {remainingLabel(request.expiresAt)}\n </span>\n ) : null}\n </span>\n </div>\n {typed ? (\n <div className=\"not-prose\">\n <div className=\"font-medium text-foreground\">{request.tool}</div>\n <TypedApprovalBody\n event={{\n id: request.id,\n kind: \"tool\",\n tool: request.tool,\n pending: true,\n approvalId: request.id,\n approvalKind: typed.kind,\n approvalRequest: typed,\n }}\n request={typed}\n onDecision={decideTyped}\n />\n </div>\n ) : (\n <ToolCall\n part={part}\n defaultOpen\n onApprove={busy ? undefined : handleApprove}\n />\n )}\n {busy ? (\n <p className=\"mt-1.5 pl-4 text-xs text-muted-foreground\">\n Submitting…\n </p>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"mt-1.5 pl-4 text-xs text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction ageLabel(createdAt: string): string {\n return durationLabel(createdAt) || \"0s\";\n}\n\nfunction remainingLabel(expiresAt: string): string {\n const expiry = new Date(expiresAt).getTime();\n if (Number.isNaN(expiry)) return \"\";\n const now = Date.now();\n if (expiry <= now) return \"expired\";\n const label = durationLabel(new Date(now).toISOString(), expiresAt);\n return label ? `${label} left` : \"\";\n}\n"],"names":["pendingApprovalRequests","jsx","EmptyState","jsxs","KeyValueList","kv","SimpleList","Icon","UiClock","useState","decisionFields","formatDate","TypedApprovalBody","ToolCall","durationLabel"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.approvals.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.approvals.tsx"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C;;;iDAGiD;AACjD,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE;IACD,SAAS,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;IAChD,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACpC,+BA4BA"}
1
+ {"version":3,"file":"SessionInspector.approvals.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.approvals.tsx"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,sBAAsB,EAG5B,MAAM,oCAAoC,CAAC;AAG5C,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C;;;iDAGiD;AACjD,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE;IACD,SAAS,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;IAChD,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACpC,+BA4BA"}
@@ -6,7 +6,8 @@ import { ToolCall } from "../chat/ToolCall.js";
6
6
  import { formatDate, durationLabel } from "./SessionInspector.model.js";
7
7
  import { EmptyState, SimpleList } from "./SessionInspector.panel-parts.js";
8
8
  import { kv } from "./SessionInspector.panel-values.js";
9
- import { pendingApprovalRequests } from "./SessionInspector.approvals-model.js";
9
+ import { pendingApprovalRequests, decisionFields } from "./SessionInspector.approvals-model.js";
10
+ import { TypedApprovalBody } from "./SessionViewer.approval-body.js";
10
11
  import { UiClock } from "../../icons/components/UiClock.js";
11
12
  function SessionApprovalsPanel({
12
13
  approvals,
@@ -95,6 +96,11 @@ function PendingApprovalRow({
95
96
  input: request.input,
96
97
  approval: { id: request.id }
97
98
  };
99
+ const typed = request.request;
100
+ const decideTyped = onResolve ? async (decision) => {
101
+ const fields = decisionFields(decision);
102
+ await (fields ? onResolve(request.id, decision.allow ? "approve" : "deny", decision.message, fields) : onResolve(request.id, decision.allow ? "approve" : "deny", decision.message));
103
+ } : void 0;
98
104
  const handleApprove = (approvalId, approved, reason) => {
99
105
  if (!onResolve) return;
100
106
  setError(void 0);
@@ -114,7 +120,25 @@ function PendingApprovalRow({
114
120
  request.expiresAt ? /* @__PURE__ */ jsx("span", { title: formatDate(request.expiresAt), children: remainingLabel(request.expiresAt) }) : null
115
121
  ] })
116
122
  ] }),
117
- /* @__PURE__ */ jsx(
123
+ typed ? /* @__PURE__ */ jsxs("div", { className: "not-prose", children: [
124
+ /* @__PURE__ */ jsx("div", { className: "font-medium text-foreground", children: request.tool }),
125
+ /* @__PURE__ */ jsx(
126
+ TypedApprovalBody,
127
+ {
128
+ event: {
129
+ id: request.id,
130
+ kind: "tool",
131
+ tool: request.tool,
132
+ pending: true,
133
+ approvalId: request.id,
134
+ approvalKind: typed.kind,
135
+ approvalRequest: typed
136
+ },
137
+ request: typed,
138
+ onDecision: decideTyped
139
+ }
140
+ )
141
+ ] }) : /* @__PURE__ */ jsx(
118
142
  ToolCall,
119
143
  {
120
144
  part,
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.approvals.js","sources":["../../../src/data/ai/SessionInspector.approvals.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { KeyValueList } from \"../KeyValueList\";\nimport { Icon } from \"../Icon\";\nimport { UiClock } from \"../../icons\";\nimport { ToolCall } from \"../chat/ToolCall\";\nimport type { AnyToolPart } from \"../chat/types\";\nimport { durationLabel, formatDate } from \"./SessionInspector.model\";\nimport { EmptyState, SimpleList } from \"./SessionInspector.panel-parts\";\nimport { kv } from \"./SessionInspector.panel-values\";\nimport {\n type ApprovalResolveHandler,\n pendingApprovalRequests,\n} from \"./SessionInspector.approvals-model\";\nimport type {\n SessionApprovalRequest,\n SessionApprovalStats,\n} from \"./SessionViewer.unified\";\n\nexport type {\n ApprovalResolveAction,\n ApprovalResolveHandler,\n} from \"./SessionInspector.approvals-model\";\n\n/** Renders every pending tool approval directly from `session.requests[]`\n * (never from transcript parts — an approval brokered outside this session's\n * own chat has no transcript part) plus the resolved approve/deny/denial\n * summary the panel previously showed alone. */\nexport function SessionApprovalsPanel({\n approvals,\n requests,\n onResolve,\n}: {\n approvals: SessionApprovalStats | undefined;\n requests?: SessionApprovalRequest[] | undefined;\n onResolve?: ApprovalResolveHandler;\n}) {\n const pending = pendingApprovalRequests(requests);\n const hasResolvedSummary = Boolean(\n approvals &&\n (approvals.approved ||\n approvals.denied ||\n approvals.cancelled ||\n approvals.expired ||\n approvals.denials?.length),\n );\n\n if (!pending.length && !hasResolvedSummary) {\n return <EmptyState>No approval metadata.</EmptyState>;\n }\n\n return (\n <div className=\"space-y-density-4\">\n {pending.length ? (\n <PendingApprovalsList\n requests={pending}\n {...(onResolve ? { onResolve } : {})}\n />\n ) : null}\n {hasResolvedSummary ? (\n <ResolvedApprovalsSummary approvals={approvals!} />\n ) : null}\n </div>\n );\n}\n\nfunction ResolvedApprovalsSummary({\n approvals,\n}: {\n approvals: SessionApprovalStats;\n}) {\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Approved\", approvals.approved ?? 0),\n kv(\"Denied\", approvals.denied ?? 0),\n kv(\"Cancelled\", approvals.cancelled ?? 0),\n kv(\"Expired\", approvals.expired ?? 0),\n ]}\n />\n {approvals.denials?.length ? (\n <SimpleList\n title=\"Denials\"\n rows={approvals.denials.map((denial, index) => ({\n key: denial.toolUseId || `${denial.tool}-${index}`,\n title: [denial.tool, denial.toolUseId].filter(Boolean).join(\" \"),\n detail: denial.reason,\n }))}\n />\n ) : null}\n </div>\n );\n}\n\nfunction PendingApprovalsList({\n requests,\n onResolve,\n}: {\n requests: SessionApprovalRequest[];\n onResolve?: ApprovalResolveHandler;\n}) {\n return (\n <section>\n <h3 className=\"mb-density-2 flex items-center gap-1.5 text-xs font-semibold uppercase text-amber-600 dark:text-amber-400\">\n <Icon icon={UiClock} className=\"size-3.5\" />\n Awaiting approval ({requests.length})\n </h3>\n <ul className=\"space-y-density-2\">\n {requests.map((request) => (\n <li key={request.id}>\n <PendingApprovalRow\n request={request}\n {...(onResolve ? { onResolve } : {})}\n />\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\nfunction PendingApprovalRow({\n request,\n onResolve,\n}: {\n request: SessionApprovalRequest;\n onResolve?: ApprovalResolveHandler;\n}) {\n const [error, setError] = useState<string | undefined>(undefined);\n const [busy, setBusy] = useState(false);\n\n const part: AnyToolPart = {\n type: \"dynamic-tool\",\n toolName: request.tool,\n toolCallId: request.toolCallId || request.id,\n state: \"approval-requested\",\n input: request.input,\n approval: { id: request.id },\n };\n\n const handleApprove = (\n approvalId: string,\n approved: boolean,\n reason?: string,\n ) => {\n if (!onResolve) return;\n setError(undefined);\n setBusy(true);\n void Promise.resolve(onResolve(approvalId, approved ? \"approve\" : \"deny\", reason))\n .catch((err: unknown) => {\n setError(err instanceof Error ? err.message : String(err));\n })\n .finally(() => setBusy(false));\n };\n\n return (\n <div className=\"rounded-md border border-amber-300/60 bg-amber-50/40 p-density-3 dark:border-amber-800/60 dark:bg-amber-950/20\">\n <div className=\"mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground\">\n <span>\n {request.requestedBy\n ? `Requested by ${request.requestedBy}`\n : \"Requested\"}\n </span>\n <span className=\"flex gap-density-3\">\n {request.createdAt ? (\n <span title={formatDate(request.createdAt)}>\n {ageLabel(request.createdAt)} ago\n </span>\n ) : null}\n {request.expiresAt ? (\n <span title={formatDate(request.expiresAt)}>\n {remainingLabel(request.expiresAt)}\n </span>\n ) : null}\n </span>\n </div>\n <ToolCall\n part={part}\n defaultOpen\n onApprove={busy ? undefined : handleApprove}\n />\n {busy ? (\n <p className=\"mt-1.5 pl-4 text-xs text-muted-foreground\">\n Submitting…\n </p>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"mt-1.5 pl-4 text-xs text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction ageLabel(createdAt: string): string {\n return durationLabel(createdAt) || \"0s\";\n}\n\nfunction remainingLabel(expiresAt: string): string {\n const expiry = new Date(expiresAt).getTime();\n if (Number.isNaN(expiry)) return \"\";\n const now = Date.now();\n if (expiry <= now) return \"expired\";\n const label = durationLabel(new Date(now).toISOString(), expiresAt);\n return label ? `${label} left` : \"\";\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionInspector.approvals.js","sources":["../../../src/data/ai/SessionInspector.approvals.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { KeyValueList } from \"../KeyValueList\";\nimport { Icon } from \"../Icon\";\nimport { UiClock } from \"../../icons\";\nimport { ToolCall } from \"../chat/ToolCall\";\nimport type { AnyToolPart } from \"../chat/types\";\nimport { durationLabel, formatDate } from \"./SessionInspector.model\";\nimport { EmptyState, SimpleList } from \"./SessionInspector.panel-parts\";\nimport { kv } from \"./SessionInspector.panel-values\";\nimport {\n type ApprovalResolveHandler,\n decisionFields,\n pendingApprovalRequests,\n} from \"./SessionInspector.approvals-model\";\nimport { TypedApprovalBody } from \"./SessionViewer.approval-body\";\nimport type { DecisionHandler } from \"./SessionViewer.decision\";\nimport type {\n SessionApprovalRequest,\n SessionApprovalStats,\n} from \"./SessionViewer.unified\";\n\nexport type {\n ApprovalResolveAction,\n ApprovalResolveHandler,\n} from \"./SessionInspector.approvals-model\";\n\n/** Renders every pending tool approval directly from `session.requests[]`\n * (never from transcript parts — an approval brokered outside this session's\n * own chat has no transcript part) plus the resolved approve/deny/denial\n * summary the panel previously showed alone. */\nexport function SessionApprovalsPanel({\n approvals,\n requests,\n onResolve,\n}: {\n approvals: SessionApprovalStats | undefined;\n requests?: SessionApprovalRequest[] | undefined;\n onResolve?: ApprovalResolveHandler;\n}) {\n const pending = pendingApprovalRequests(requests);\n const hasResolvedSummary = Boolean(\n approvals &&\n (approvals.approved ||\n approvals.denied ||\n approvals.cancelled ||\n approvals.expired ||\n approvals.denials?.length),\n );\n\n if (!pending.length && !hasResolvedSummary) {\n return <EmptyState>No approval metadata.</EmptyState>;\n }\n\n return (\n <div className=\"space-y-density-4\">\n {pending.length ? (\n <PendingApprovalsList\n requests={pending}\n {...(onResolve ? { onResolve } : {})}\n />\n ) : null}\n {hasResolvedSummary ? (\n <ResolvedApprovalsSummary approvals={approvals!} />\n ) : null}\n </div>\n );\n}\n\nfunction ResolvedApprovalsSummary({\n approvals,\n}: {\n approvals: SessionApprovalStats;\n}) {\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Approved\", approvals.approved ?? 0),\n kv(\"Denied\", approvals.denied ?? 0),\n kv(\"Cancelled\", approvals.cancelled ?? 0),\n kv(\"Expired\", approvals.expired ?? 0),\n ]}\n />\n {approvals.denials?.length ? (\n <SimpleList\n title=\"Denials\"\n rows={approvals.denials.map((denial, index) => ({\n key: denial.toolUseId || `${denial.tool}-${index}`,\n title: [denial.tool, denial.toolUseId].filter(Boolean).join(\" \"),\n detail: denial.reason,\n }))}\n />\n ) : null}\n </div>\n );\n}\n\nfunction PendingApprovalsList({\n requests,\n onResolve,\n}: {\n requests: SessionApprovalRequest[];\n onResolve?: ApprovalResolveHandler;\n}) {\n return (\n <section>\n <h3 className=\"mb-density-2 flex items-center gap-1.5 text-xs font-semibold uppercase text-amber-600 dark:text-amber-400\">\n <Icon icon={UiClock} className=\"size-3.5\" />\n Awaiting approval ({requests.length})\n </h3>\n <ul className=\"space-y-density-2\">\n {requests.map((request) => (\n <li key={request.id}>\n <PendingApprovalRow\n request={request}\n {...(onResolve ? { onResolve } : {})}\n />\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\nfunction PendingApprovalRow({\n request,\n onResolve,\n}: {\n request: SessionApprovalRequest;\n onResolve?: ApprovalResolveHandler;\n}) {\n const [error, setError] = useState<string | undefined>(undefined);\n const [busy, setBusy] = useState(false);\n\n const part: AnyToolPart = {\n type: \"dynamic-tool\",\n toolName: request.tool,\n toolCallId: request.toolCallId || request.id,\n state: \"approval-requested\",\n input: request.input,\n approval: { id: request.id },\n };\n\n const typed = request.request;\n const decideTyped: DecisionHandler | undefined = onResolve\n ? async (decision) => {\n const fields = decisionFields(decision);\n await (fields\n ? onResolve(request.id, decision.allow ? \"approve\" : \"deny\", decision.message, fields)\n : onResolve(request.id, decision.allow ? \"approve\" : \"deny\", decision.message));\n }\n : undefined;\n\n const handleApprove = (\n approvalId: string,\n approved: boolean,\n reason?: string,\n ) => {\n if (!onResolve) return;\n setError(undefined);\n setBusy(true);\n void Promise.resolve(onResolve(approvalId, approved ? \"approve\" : \"deny\", reason))\n .catch((err: unknown) => {\n setError(err instanceof Error ? err.message : String(err));\n })\n .finally(() => setBusy(false));\n };\n\n return (\n <div className=\"rounded-md border border-amber-300/60 bg-amber-50/40 p-density-3 dark:border-amber-800/60 dark:bg-amber-950/20\">\n <div className=\"mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground\">\n <span>\n {request.requestedBy\n ? `Requested by ${request.requestedBy}`\n : \"Requested\"}\n </span>\n <span className=\"flex gap-density-3\">\n {request.createdAt ? (\n <span title={formatDate(request.createdAt)}>\n {ageLabel(request.createdAt)} ago\n </span>\n ) : null}\n {request.expiresAt ? (\n <span title={formatDate(request.expiresAt)}>\n {remainingLabel(request.expiresAt)}\n </span>\n ) : null}\n </span>\n </div>\n {typed ? (\n <div className=\"not-prose\">\n <div className=\"font-medium text-foreground\">{request.tool}</div>\n <TypedApprovalBody\n event={{\n id: request.id,\n kind: \"tool\",\n tool: request.tool,\n pending: true,\n approvalId: request.id,\n approvalKind: typed.kind,\n approvalRequest: typed,\n }}\n request={typed}\n onDecision={decideTyped}\n />\n </div>\n ) : (\n <ToolCall\n part={part}\n defaultOpen\n onApprove={busy ? undefined : handleApprove}\n />\n )}\n {busy ? (\n <p className=\"mt-1.5 pl-4 text-xs text-muted-foreground\">\n Submitting…\n </p>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"mt-1.5 pl-4 text-xs text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction ageLabel(createdAt: string): string {\n return durationLabel(createdAt) || \"0s\";\n}\n\nfunction remainingLabel(expiresAt: string): string {\n const expiry = new Date(expiresAt).getTime();\n if (Number.isNaN(expiry)) return \"\";\n const now = Date.now();\n if (expiry <= now) return \"expired\";\n const label = durationLabel(new Date(now).toISOString(), expiresAt);\n return label ? `${label} left` : \"\";\n}\n"],"names":[],"mappings":"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"}