@flanksource/clicky-ui 0.3.34 → 0.3.35

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 (680) hide show
  1. package/README.md +4 -0
  2. package/dist/ai.cjs +3 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +3 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentCard.d.ts +1 -1
  7. package/dist/comments/CommentProvider.d.ts +1 -1
  8. package/dist/comments/CommentThread.d.ts +1 -1
  9. package/dist/comments/CommentThreadList.d.ts +1 -1
  10. package/dist/comments/MentionTextarea.d.ts +1 -1
  11. package/dist/comments/comment-context.d.ts +4 -4
  12. package/dist/comments/comment-fixtures.d.ts +1 -1
  13. package/dist/comments/comment-types.d.ts +1 -1
  14. package/dist/components/AccordionList.d.ts +1 -1
  15. package/dist/components/ComboboxControl.d.ts +1 -1
  16. package/dist/components/ComboboxMenu.d.ts +2 -2
  17. package/dist/components/ComboboxTags.cjs +41 -11
  18. package/dist/components/ComboboxTags.cjs.map +1 -1
  19. package/dist/components/ComboboxTags.d.ts +6 -0
  20. package/dist/components/ComboboxTags.d.ts.map +1 -1
  21. package/dist/components/ComboboxTags.js +41 -11
  22. package/dist/components/ComboboxTags.js.map +1 -1
  23. package/dist/components/DateField.d.ts +3 -3
  24. package/dist/components/DatePicker.d.ts +3 -3
  25. package/dist/components/DateTimePicker.d.ts +3 -3
  26. package/dist/components/ErrorWrapper.d.ts +2 -2
  27. package/dist/components/Field.d.ts +1 -1
  28. package/dist/components/FilterBar.d.ts +1 -1
  29. package/dist/components/FormLookupProvider.d.ts +1 -1
  30. package/dist/components/FormatOptionsDropdown.d.ts +1 -1
  31. package/dist/components/IconButton.d.ts +3 -3
  32. package/dist/components/InputField.d.ts +2 -2
  33. package/dist/components/ItemActions.d.ts +1 -1
  34. package/dist/components/JsonSchemaForm.cjs +17 -36
  35. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  36. package/dist/components/JsonSchemaForm.d.ts +1 -1
  37. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  38. package/dist/components/JsonSchemaForm.js +17 -36
  39. package/dist/components/JsonSchemaForm.js.map +1 -1
  40. package/dist/components/ListMenu.d.ts +1 -1
  41. package/dist/components/MultiSelect.d.ts +1 -1
  42. package/dist/components/SearchInput.d.ts +1 -1
  43. package/dist/components/SegmentedControl.d.ts +1 -1
  44. package/dist/components/SplitButton.d.ts +1 -1
  45. package/dist/components/Switch.d.ts +1 -1
  46. package/dist/components/TreePickerField.cjs +11 -2
  47. package/dist/components/TreePickerField.cjs.map +1 -1
  48. package/dist/components/TreePickerField.d.ts +13 -4
  49. package/dist/components/TreePickerField.d.ts.map +1 -1
  50. package/dist/components/TreePickerField.js +11 -2
  51. package/dist/components/TreePickerField.js.map +1 -1
  52. package/dist/components/UnitStepControls.d.ts +1 -1
  53. package/dist/components/button.d.ts +3 -3
  54. package/dist/components/combobox-types.d.ts +1 -1
  55. package/dist/components/density-switcher.d.ts +1 -1
  56. package/dist/components/filter-bar-context.d.ts +1 -1
  57. package/dist/components/filter-bar-field-utils.d.ts +2 -2
  58. package/dist/components/form-lookup-context.d.ts +1 -1
  59. package/dist/components/icon-menu-picker.d.ts +1 -1
  60. package/dist/components/json-schema-form-accordion-array.cjs +44 -21
  61. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  62. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  63. package/dist/components/json-schema-form-accordion-array.js +47 -24
  64. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  65. package/dist/components/json-schema-form-array.cjs +53 -30
  66. package/dist/components/json-schema-form-array.cjs.map +1 -1
  67. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  68. package/dist/components/json-schema-form-array.js +54 -31
  69. package/dist/components/json-schema-form-array.js.map +1 -1
  70. package/dist/components/json-schema-form-cards-array.cjs +32 -22
  71. package/dist/components/json-schema-form-cards-array.cjs.map +1 -1
  72. package/dist/components/json-schema-form-cards-array.d.ts.map +1 -1
  73. package/dist/components/json-schema-form-cards-array.js +33 -23
  74. package/dist/components/json-schema-form-cards-array.js.map +1 -1
  75. package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts +44 -0
  76. package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts.map +1 -0
  77. package/dist/components/json-schema-form-discriminator.d.ts +1 -1
  78. package/dist/components/json-schema-form-errors.cjs +5 -1
  79. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  80. package/dist/components/json-schema-form-errors.d.ts +2 -1
  81. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  82. package/dist/components/json-schema-form-errors.js +6 -2
  83. package/dist/components/json-schema-form-errors.js.map +1 -1
  84. package/dist/components/json-schema-form-extensions.d.ts +1 -1
  85. package/dist/components/json-schema-form-filter-input.cjs +50 -0
  86. package/dist/components/json-schema-form-filter-input.cjs.map +1 -0
  87. package/dist/components/json-schema-form-filter-input.d.ts +5 -0
  88. package/dist/components/json-schema-form-filter-input.d.ts.map +1 -0
  89. package/dist/components/json-schema-form-filter-input.js +50 -0
  90. package/dist/components/json-schema-form-filter-input.js.map +1 -0
  91. package/dist/components/json-schema-form-filter.cjs +49 -0
  92. package/dist/components/json-schema-form-filter.cjs.map +1 -0
  93. package/dist/components/json-schema-form-filter.d.ts +8 -0
  94. package/dist/components/json-schema-form-filter.d.ts.map +1 -0
  95. package/dist/components/json-schema-form-filter.js +49 -0
  96. package/dist/components/json-schema-form-filter.js.map +1 -0
  97. package/dist/components/json-schema-form-layout.cjs +84 -17
  98. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  99. package/dist/components/json-schema-form-layout.d.ts +1 -1
  100. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  101. package/dist/components/json-schema-form-layout.js +84 -17
  102. package/dist/components/json-schema-form-layout.js.map +1 -1
  103. package/dist/components/json-schema-form-list-array.cjs +16 -5
  104. package/dist/components/json-schema-form-list-array.cjs.map +1 -1
  105. package/dist/components/json-schema-form-list-array.d.ts +2 -1
  106. package/dist/components/json-schema-form-list-array.d.ts.map +1 -1
  107. package/dist/components/json-schema-form-list-array.js +16 -5
  108. package/dist/components/json-schema-form-list-array.js.map +1 -1
  109. package/dist/components/json-schema-form-object.cjs +239 -85
  110. package/dist/components/json-schema-form-object.cjs.map +1 -1
  111. package/dist/components/json-schema-form-object.d.ts +2 -2
  112. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  113. package/dist/components/json-schema-form-object.js +241 -87
  114. package/dist/components/json-schema-form-object.js.map +1 -1
  115. package/dist/components/json-schema-form-preferences.cjs +1 -1
  116. package/dist/components/json-schema-form-preferences.cjs.map +1 -1
  117. package/dist/components/json-schema-form-preferences.d.ts +1 -1
  118. package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
  119. package/dist/components/json-schema-form-preferences.js +1 -1
  120. package/dist/components/json-schema-form-preferences.js.map +1 -1
  121. package/dist/components/json-schema-form-properties-errors.fixtures.d.ts +14 -0
  122. package/dist/components/json-schema-form-properties-errors.fixtures.d.ts.map +1 -0
  123. package/dist/components/json-schema-form-properties-size.cjs +19 -0
  124. package/dist/components/json-schema-form-properties-size.cjs.map +1 -0
  125. package/dist/components/json-schema-form-properties-size.d.ts +4 -0
  126. package/dist/components/json-schema-form-properties-size.d.ts.map +1 -0
  127. package/dist/components/json-schema-form-properties-size.js +19 -0
  128. package/dist/components/json-schema-form-properties-size.js.map +1 -0
  129. package/dist/components/json-schema-form-properties.cjs +305 -0
  130. package/dist/components/json-schema-form-properties.cjs.map +1 -0
  131. package/dist/components/json-schema-form-properties.d.ts +20 -0
  132. package/dist/components/json-schema-form-properties.d.ts.map +1 -0
  133. package/dist/components/json-schema-form-properties.fixtures.d.ts +157 -0
  134. package/dist/components/json-schema-form-properties.fixtures.d.ts.map +1 -0
  135. package/dist/components/json-schema-form-properties.js +305 -0
  136. package/dist/components/json-schema-form-properties.js.map +1 -0
  137. package/dist/components/json-schema-form-property-actions-context.cjs +6 -0
  138. package/dist/components/json-schema-form-property-actions-context.cjs.map +1 -0
  139. package/dist/components/json-schema-form-property-actions-context.d.ts +2 -0
  140. package/dist/components/json-schema-form-property-actions-context.d.ts.map +1 -0
  141. package/dist/components/json-schema-form-property-actions-context.js +6 -0
  142. package/dist/components/json-schema-form-property-actions-context.js.map +1 -0
  143. package/dist/components/json-schema-form-property-collection.cjs +31 -0
  144. package/dist/components/json-schema-form-property-collection.cjs.map +1 -0
  145. package/dist/components/json-schema-form-property-collection.d.ts +6 -0
  146. package/dist/components/json-schema-form-property-collection.d.ts.map +1 -0
  147. package/dist/components/json-schema-form-property-collection.js +31 -0
  148. package/dist/components/json-schema-form-property-collection.js.map +1 -0
  149. package/dist/components/json-schema-form-property-draft.cjs +45 -0
  150. package/dist/components/json-schema-form-property-draft.cjs.map +1 -0
  151. package/dist/components/json-schema-form-property-draft.d.ts +8 -0
  152. package/dist/components/json-schema-form-property-draft.d.ts.map +1 -0
  153. package/dist/components/json-schema-form-property-draft.js +45 -0
  154. package/dist/components/json-schema-form-property-draft.js.map +1 -0
  155. package/dist/components/json-schema-form-property-preview.cjs +68 -0
  156. package/dist/components/json-schema-form-property-preview.cjs.map +1 -0
  157. package/dist/components/json-schema-form-property-preview.d.ts +7 -0
  158. package/dist/components/json-schema-form-property-preview.d.ts.map +1 -0
  159. package/dist/components/json-schema-form-property-preview.js +68 -0
  160. package/dist/components/json-schema-form-property-preview.js.map +1 -0
  161. package/dist/components/json-schema-form-property-selection.cjs +89 -0
  162. package/dist/components/json-schema-form-property-selection.cjs.map +1 -0
  163. package/dist/components/json-schema-form-property-selection.d.ts +6 -0
  164. package/dist/components/json-schema-form-property-selection.d.ts.map +1 -0
  165. package/dist/components/json-schema-form-property-selection.js +89 -0
  166. package/dist/components/json-schema-form-property-selection.js.map +1 -0
  167. package/dist/components/json-schema-form-render.cjs +41 -4
  168. package/dist/components/json-schema-form-render.cjs.map +1 -1
  169. package/dist/components/json-schema-form-render.d.ts +1 -1
  170. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  171. package/dist/components/json-schema-form-render.js +42 -5
  172. package/dist/components/json-schema-form-render.js.map +1 -1
  173. package/dist/components/json-schema-form-resolve.cjs +2 -0
  174. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  175. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  176. package/dist/components/json-schema-form-resolve.js +2 -0
  177. package/dist/components/json-schema-form-resolve.js.map +1 -1
  178. package/dist/components/json-schema-form-runtime-types.d.ts +222 -0
  179. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -0
  180. package/dist/components/json-schema-form-table-array.cjs +82 -51
  181. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  182. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  183. package/dist/components/json-schema-form-table-array.js +84 -53
  184. package/dist/components/json-schema-form-table-array.js.map +1 -1
  185. package/dist/components/json-schema-form-template-menu.d.ts +1 -1
  186. package/dist/components/json-schema-form-template.d.ts +1 -1
  187. package/dist/components/json-schema-form-types.d.ts +7 -179
  188. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  189. package/dist/components/json-schema-form-utils.cjs +10 -9
  190. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  191. package/dist/components/json-schema-form-utils.d.ts +11 -1
  192. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  193. package/dist/components/json-schema-form-utils.js +10 -9
  194. package/dist/components/json-schema-form-utils.js.map +1 -1
  195. package/dist/components/loading.d.ts +4 -4
  196. package/dist/components/mdx-editor-callout.d.ts +1 -1
  197. package/dist/components/mdx-editor-options.d.ts +1 -1
  198. package/dist/components/select.d.ts +3 -3
  199. package/dist/components/theme-switcher.d.ts +1 -1
  200. package/dist/components/use-list-menu-selection.d.ts +1 -1
  201. package/dist/components/useComboboxLayout.d.ts +1 -1
  202. package/dist/components/workload-picker-utils.d.ts +1 -1
  203. package/dist/data/Avatar.d.ts +1 -1
  204. package/dist/data/AvatarBadge.d.ts +1 -1
  205. package/dist/data/Badge.d.ts +1 -1
  206. package/dist/data/Callout.d.ts +1 -1
  207. package/dist/data/DataTable.cjs +575 -435
  208. package/dist/data/DataTable.cjs.map +1 -1
  209. package/dist/data/DataTable.d.ts +21 -13
  210. package/dist/data/DataTable.d.ts.map +1 -1
  211. package/dist/data/DataTable.grouping.d.ts +1 -1
  212. package/dist/data/DataTable.js +575 -435
  213. package/dist/data/DataTable.js.map +1 -1
  214. package/dist/data/ExecutionTree.d.ts +1 -1
  215. package/dist/data/FilterPill.d.ts +1 -1
  216. package/dist/data/FixtureEditor/RawFenceEditor.d.ts +1 -1
  217. package/dist/data/FixtureEditor/types.d.ts +1 -1
  218. package/dist/data/Gauge.d.ts +1 -1
  219. package/dist/data/GaugeHoverCard.d.ts +1 -1
  220. package/dist/data/Icon.d.ts +1 -1
  221. package/dist/data/KeyValueList.d.ts +1 -1
  222. package/dist/data/MarkdownEditor.d.ts +1 -1
  223. package/dist/data/MatrixTable.d.ts +1 -1
  224. package/dist/data/ObjectGraph.d.ts +1 -1
  225. package/dist/data/ProgressBars.d.ts +1 -1
  226. package/dist/data/Properties.cjs +86 -35
  227. package/dist/data/Properties.cjs.map +1 -1
  228. package/dist/data/Properties.d.ts +2 -2
  229. package/dist/data/Properties.d.ts.map +1 -1
  230. package/dist/data/Properties.js +87 -36
  231. package/dist/data/Properties.js.map +1 -1
  232. package/dist/data/RadialGauge.d.ts +1 -1
  233. package/dist/data/SchemaViewer.d.ts +1 -1
  234. package/dist/data/SortableHeader.d.ts +1 -1
  235. package/dist/data/StatStrip.d.ts +1 -1
  236. package/dist/data/StatusBreakdown.d.ts +1 -1
  237. package/dist/data/TabButton.d.ts +1 -1
  238. package/dist/data/TaskManager.cjs +9 -17
  239. package/dist/data/TaskManager.cjs.map +1 -1
  240. package/dist/data/TaskManager.d.ts.map +1 -1
  241. package/dist/data/TaskManager.js +9 -17
  242. package/dist/data/TaskManager.js.map +1 -1
  243. package/dist/data/TaskManagerButton.cjs +17 -34
  244. package/dist/data/TaskManagerButton.cjs.map +1 -1
  245. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  246. package/dist/data/TaskManagerButton.js +18 -35
  247. package/dist/data/TaskManagerButton.js.map +1 -1
  248. package/dist/data/TaskProcessDetails.cjs +5 -26
  249. package/dist/data/TaskProcessDetails.cjs.map +1 -1
  250. package/dist/data/TaskProcessDetails.d.ts +2 -1
  251. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  252. package/dist/data/TaskProcessDetails.js +5 -26
  253. package/dist/data/TaskProcessDetails.js.map +1 -1
  254. package/dist/data/TaskProgress.cjs +24 -15
  255. package/dist/data/TaskProgress.cjs.map +1 -1
  256. package/dist/data/TaskProgress.d.ts +2 -1
  257. package/dist/data/TaskProgress.d.ts.map +1 -1
  258. package/dist/data/TaskProgress.js +24 -15
  259. package/dist/data/TaskProgress.js.map +1 -1
  260. package/dist/data/TaskResourceReadings.cjs +42 -0
  261. package/dist/data/TaskResourceReadings.cjs.map +1 -0
  262. package/dist/data/TaskResourceReadings.d.ts +6 -0
  263. package/dist/data/TaskResourceReadings.d.ts.map +1 -0
  264. package/dist/data/TaskResourceReadings.js +42 -0
  265. package/dist/data/TaskResourceReadings.js.map +1 -0
  266. package/dist/data/TaskSnapshot.cjs.map +1 -1
  267. package/dist/data/TaskSnapshot.d.ts +14 -1
  268. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  269. package/dist/data/TaskSnapshot.js.map +1 -1
  270. package/dist/data/Timeline.d.ts +1 -1
  271. package/dist/data/Tree.d.ts +1 -1
  272. package/dist/data/TreeGroupHeader.d.ts +1 -1
  273. package/dist/data/TreeNode.d.ts +1 -1
  274. package/dist/data/Version.d.ts +3 -3
  275. package/dist/data/ai/ChatWindow.cjs +22 -12
  276. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  277. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  278. package/dist/data/ai/ChatWindow.js +22 -12
  279. package/dist/data/ai/ChatWindow.js.map +1 -1
  280. package/dist/data/ai/ChatWindow.test-utils.d.ts +4 -2
  281. package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -1
  282. package/dist/data/ai/ChatWindow.types.d.ts +1 -1
  283. package/dist/data/ai/ChatWindowManager.cjs +2 -0
  284. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  285. package/dist/data/ai/ChatWindowManager.d.ts +1 -1
  286. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  287. package/dist/data/ai/ChatWindowManager.js +2 -0
  288. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  289. package/dist/data/ai/PolicyTree.d.ts +1 -1
  290. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +1 -1
  291. package/dist/data/ai/PromptCatalog/types.d.ts +1 -1
  292. package/dist/data/ai/PromptRunEditor/index.cjs +4 -0
  293. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  294. package/dist/data/ai/PromptRunEditor/index.d.ts +5 -2
  295. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  296. package/dist/data/ai/PromptRunEditor/index.js +4 -0
  297. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  298. package/dist/data/ai/SessionChatComposer.d.ts +1 -1
  299. package/dist/data/ai/SessionInspector.approvals.cjs +147 -0
  300. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -0
  301. package/dist/data/ai/SessionInspector.approvals.d.ts +21 -0
  302. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -0
  303. package/dist/data/ai/SessionInspector.approvals.js +147 -0
  304. package/dist/data/ai/SessionInspector.approvals.js.map +1 -0
  305. package/dist/data/ai/SessionInspector.cjs +21 -8
  306. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  307. package/dist/data/ai/SessionInspector.d.ts +6 -2
  308. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  309. package/dist/data/ai/SessionInspector.hierarchy.d.ts +1 -1
  310. package/dist/data/ai/SessionInspector.js +21 -8
  311. package/dist/data/ai/SessionInspector.js.map +1 -1
  312. package/dist/data/ai/SessionInspector.panel-parts.cjs +47 -0
  313. package/dist/data/ai/SessionInspector.panel-parts.cjs.map +1 -0
  314. package/dist/data/ai/SessionInspector.panel-parts.d.ts +20 -0
  315. package/dist/data/ai/SessionInspector.panel-parts.d.ts.map +1 -0
  316. package/dist/data/ai/SessionInspector.panel-parts.js +47 -0
  317. package/dist/data/ai/SessionInspector.panel-parts.js.map +1 -0
  318. package/dist/data/ai/SessionInspector.panels.cjs +40 -99
  319. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  320. package/dist/data/ai/SessionInspector.panels.d.ts +3 -1
  321. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  322. package/dist/data/ai/SessionInspector.panels.js +12 -71
  323. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  324. package/dist/data/ai/SessionViewer.d.ts +1 -1
  325. package/dist/data/ai/SessionViewer.rows.d.ts +1 -1
  326. package/dist/data/ai/SessionViewer.tool-details.d.ts +1 -1
  327. package/dist/data/ai/SessionViewer.unified.d.ts +23 -0
  328. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  329. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +1 -1
  330. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +1 -1
  331. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +1 -1
  332. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +3 -1
  333. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  334. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +3 -1
  335. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  336. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +3 -1
  337. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  338. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +1 -1
  339. package/dist/data/ai/SpecRuntimeEditor/index.cjs +3 -1
  340. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  341. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +5 -2
  342. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  343. package/dist/data/ai/SpecRuntimeEditor/index.js +3 -1
  344. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  345. package/dist/data/ai/chat-window-context.cjs +1 -0
  346. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  347. package/dist/data/ai/chat-window-context.d.ts +13 -5
  348. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  349. package/dist/data/ai/chat-window-context.js +1 -0
  350. package/dist/data/ai/chat-window-context.js.map +1 -1
  351. package/dist/data/ai/index.d.ts +2 -1
  352. package/dist/data/ai/index.d.ts.map +1 -1
  353. package/dist/data/ai/use-session-scroll.d.ts +1 -1
  354. package/dist/data/cache-browser/adapter.d.ts +1 -1
  355. package/dist/data/cells/CellFilterActions.d.ts +1 -1
  356. package/dist/data/cells/EntityCell.d.ts +1 -1
  357. package/dist/data/cells/tag-utils.d.ts +1 -1
  358. package/dist/data/chat/Chat.cjs +42 -46
  359. package/dist/data/chat/Chat.cjs.map +1 -1
  360. package/dist/data/chat/Chat.d.ts +16 -5
  361. package/dist/data/chat/Chat.d.ts.map +1 -1
  362. package/dist/data/chat/Chat.js +43 -47
  363. package/dist/data/chat/Chat.js.map +1 -1
  364. package/dist/data/chat/ModelSelector.d.ts +1 -1
  365. package/dist/data/chat/PromptInput.cjs +13 -0
  366. package/dist/data/chat/PromptInput.cjs.map +1 -1
  367. package/dist/data/chat/PromptInput.d.ts +8 -2
  368. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  369. package/dist/data/chat/PromptInput.js +14 -1
  370. package/dist/data/chat/PromptInput.js.map +1 -1
  371. package/dist/data/chat/tool-render/ToolArgs.d.ts +1 -1
  372. package/dist/data/chat/tool-render/ToolParams.d.ts +1 -1
  373. package/dist/data/chat/tool-render/ToolValue.d.ts +1 -1
  374. package/dist/data/chat/tool-render/adapter.d.ts +1 -1
  375. package/dist/data/chat/tool-render/context.d.ts +1 -1
  376. package/dist/data/chat/tool-render/defaults.d.ts +1 -1
  377. package/dist/data/chat/tool-render/known-tool-views.d.ts +1 -1
  378. package/dist/data/chat/tool-render/summary.d.ts +1 -1
  379. package/dist/data/chat/types.d.ts +1 -1
  380. package/dist/data/clicky-export/useClickyExport.d.ts +1 -1
  381. package/dist/data/data-table-server-filters.d.ts +1 -1
  382. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +1 -1
  383. package/dist/data/diagnostics/ErrorDetails.d.ts +1 -1
  384. package/dist/data/diagnostics/StackFrameRow.d.ts +1 -1
  385. package/dist/data/git/GitChangeList.d.ts +1 -1
  386. package/dist/data/icon-fallback.d.ts +1 -1
  387. package/dist/data/properties-context.cjs +6 -0
  388. package/dist/data/properties-context.cjs.map +1 -0
  389. package/dist/data/properties-context.d.ts +7 -0
  390. package/dist/data/properties-context.d.ts.map +1 -0
  391. package/dist/data/properties-context.js +6 -0
  392. package/dist/data/properties-context.js.map +1 -0
  393. package/dist/data/query-browser/QueryBrowser.types.d.ts +1 -1
  394. package/dist/data/runtime/RuntimeBar.cjs +7 -3
  395. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  396. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  397. package/dist/data/runtime/RuntimeBar.js +7 -3
  398. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  399. package/dist/data/task-copy.cjs +1 -1
  400. package/dist/data/task-copy.cjs.map +1 -1
  401. package/dist/data/task-copy.js +1 -1
  402. package/dist/data/task-copy.js.map +1 -1
  403. package/dist/data/task-resource-summary.cjs +30 -0
  404. package/dist/data/task-resource-summary.cjs.map +1 -0
  405. package/dist/data/task-resource-summary.d.ts +15 -0
  406. package/dist/data/task-resource-summary.d.ts.map +1 -0
  407. package/dist/data/task-resource-summary.js +30 -0
  408. package/dist/data/task-resource-summary.js.map +1 -0
  409. package/dist/data/task-status.cjs +8 -2
  410. package/dist/data/task-status.cjs.map +1 -1
  411. package/dist/data/task-status.d.ts +3 -0
  412. package/dist/data/task-status.d.ts.map +1 -1
  413. package/dist/data/task-status.js +8 -2
  414. package/dist/data/task-status.js.map +1 -1
  415. package/dist/data/task-work-progress.cjs +24 -0
  416. package/dist/data/task-work-progress.cjs.map +1 -0
  417. package/dist/data/task-work-progress.d.ts +21 -0
  418. package/dist/data/task-work-progress.d.ts.map +1 -0
  419. package/dist/data/task-work-progress.js +24 -0
  420. package/dist/data/task-work-progress.js.map +1 -0
  421. package/dist/data/test-runner/TestRunner.d.ts +1 -1
  422. package/dist/data/test-runner/adapter.d.ts +1 -1
  423. package/dist/data/test-runner/context.d.ts +1 -1
  424. package/dist/data/use-data-table-virtual.cjs +73 -0
  425. package/dist/data/use-data-table-virtual.cjs.map +1 -0
  426. package/dist/data/use-data-table-virtual.d.ts +40 -0
  427. package/dist/data/use-data-table-virtual.d.ts.map +1 -0
  428. package/dist/data/use-data-table-virtual.js +73 -0
  429. package/dist/data/use-data-table-virtual.js.map +1 -0
  430. package/dist/data/verification/VerificationResults.d.ts +1 -1
  431. package/dist/data/version-info.cjs +3 -3
  432. package/dist/data/version-info.js +3 -3
  433. package/dist/expressions/lang/attributes.cjs +56 -0
  434. package/dist/expressions/lang/attributes.cjs.map +1 -0
  435. package/dist/expressions/lang/attributes.d.ts +22 -0
  436. package/dist/expressions/lang/attributes.d.ts.map +1 -0
  437. package/dist/expressions/lang/attributes.js +56 -0
  438. package/dist/expressions/lang/attributes.js.map +1 -0
  439. package/dist/expressions/lang/completion.cjs +164 -0
  440. package/dist/expressions/lang/completion.cjs.map +1 -0
  441. package/dist/expressions/lang/completion.d.ts +29 -0
  442. package/dist/expressions/lang/completion.d.ts.map +1 -0
  443. package/dist/expressions/lang/completion.js +164 -0
  444. package/dist/expressions/lang/completion.js.map +1 -0
  445. package/dist/expressions/lang/environment.cjs +115 -0
  446. package/dist/expressions/lang/environment.cjs.map +1 -0
  447. package/dist/expressions/lang/environment.d.ts +54 -0
  448. package/dist/expressions/lang/environment.d.ts.map +1 -0
  449. package/dist/expressions/lang/environment.js +115 -0
  450. package/dist/expressions/lang/environment.js.map +1 -0
  451. package/dist/expressions/lang/generated/conformance.json.d.ts +4962 -0
  452. package/dist/expressions/lang/generated/index.cjs +18 -0
  453. package/dist/expressions/lang/generated/index.cjs.map +1 -0
  454. package/dist/expressions/lang/generated/index.d.ts +9 -0
  455. package/dist/expressions/lang/generated/index.d.ts.map +1 -0
  456. package/dist/expressions/lang/generated/index.js +18 -0
  457. package/dist/expressions/lang/generated/index.js.map +1 -0
  458. package/dist/expressions/lang/generated/languages.json.cjs +18 -0
  459. package/dist/expressions/lang/generated/languages.json.cjs.map +1 -0
  460. package/dist/expressions/lang/generated/languages.json.d.ts +2305 -0
  461. package/dist/expressions/lang/generated/languages.json.js +18 -0
  462. package/dist/expressions/lang/generated/languages.json.js.map +1 -0
  463. package/dist/expressions/lang/generated/spec.json.cjs +12 -0
  464. package/dist/expressions/lang/generated/spec.json.cjs.map +1 -0
  465. package/dist/expressions/lang/generated/spec.json.d.ts +6260 -0
  466. package/dist/expressions/lang/generated/spec.json.js +12 -0
  467. package/dist/expressions/lang/generated/spec.json.js.map +1 -0
  468. package/dist/expressions/lang/hover.cjs +106 -0
  469. package/dist/expressions/lang/hover.cjs.map +1 -0
  470. package/dist/expressions/lang/hover.d.ts +54 -0
  471. package/dist/expressions/lang/hover.d.ts.map +1 -0
  472. package/dist/expressions/lang/hover.js +106 -0
  473. package/dist/expressions/lang/hover.js.map +1 -0
  474. package/dist/expressions/lang/index.cjs +87 -0
  475. package/dist/expressions/lang/index.cjs.map +1 -0
  476. package/dist/expressions/lang/index.d.ts +65 -0
  477. package/dist/expressions/lang/index.d.ts.map +1 -0
  478. package/dist/expressions/lang/index.js +90 -0
  479. package/dist/expressions/lang/index.js.map +1 -0
  480. package/dist/expressions/lang/merge.cjs +52 -0
  481. package/dist/expressions/lang/merge.cjs.map +1 -0
  482. package/dist/expressions/lang/merge.d.ts +12 -0
  483. package/dist/expressions/lang/merge.d.ts.map +1 -0
  484. package/dist/expressions/lang/merge.js +52 -0
  485. package/dist/expressions/lang/merge.js.map +1 -0
  486. package/dist/expressions/lang/prefix.cjs +91 -0
  487. package/dist/expressions/lang/prefix.cjs.map +1 -0
  488. package/dist/expressions/lang/prefix.d.ts +36 -0
  489. package/dist/expressions/lang/prefix.d.ts.map +1 -0
  490. package/dist/expressions/lang/prefix.js +91 -0
  491. package/dist/expressions/lang/prefix.js.map +1 -0
  492. package/dist/expressions/lang/spec.d.ts +13 -0
  493. package/dist/expressions/lang/spec.d.ts.map +1 -0
  494. package/dist/expressions/lang/theme.cjs +97 -0
  495. package/dist/expressions/lang/theme.cjs.map +1 -0
  496. package/dist/expressions/lang/theme.d.ts +6 -0
  497. package/dist/expressions/lang/theme.d.ts.map +1 -0
  498. package/dist/expressions/lang/theme.js +97 -0
  499. package/dist/expressions/lang/theme.js.map +1 -0
  500. package/dist/expressions/lang/types.d.ts +81 -0
  501. package/dist/expressions/lang/types.d.ts.map +1 -0
  502. package/dist/expressions/playground/ExpressionPlayground.cjs +308 -0
  503. package/dist/expressions/playground/ExpressionPlayground.cjs.map +1 -0
  504. package/dist/expressions/playground/ExpressionPlayground.d.ts +42 -0
  505. package/dist/expressions/playground/ExpressionPlayground.d.ts.map +1 -0
  506. package/dist/expressions/playground/ExpressionPlayground.js +291 -0
  507. package/dist/expressions/playground/ExpressionPlayground.js.map +1 -0
  508. package/dist/expressions/playground/RunControls.cjs +51 -0
  509. package/dist/expressions/playground/RunControls.cjs.map +1 -0
  510. package/dist/expressions/playground/RunControls.d.ts +7 -0
  511. package/dist/expressions/playground/RunControls.d.ts.map +1 -0
  512. package/dist/expressions/playground/RunControls.js +51 -0
  513. package/dist/expressions/playground/RunControls.js.map +1 -0
  514. package/dist/expressions/playground/VerticalSplit.cjs +109 -0
  515. package/dist/expressions/playground/VerticalSplit.cjs.map +1 -0
  516. package/dist/expressions/playground/VerticalSplit.d.ts +23 -0
  517. package/dist/expressions/playground/VerticalSplit.d.ts.map +1 -0
  518. package/dist/expressions/playground/VerticalSplit.js +109 -0
  519. package/dist/expressions/playground/VerticalSplit.js.map +1 -0
  520. package/dist/expressions/playground/api.cjs +49 -0
  521. package/dist/expressions/playground/api.cjs.map +1 -0
  522. package/dist/expressions/playground/api.d.ts +53 -0
  523. package/dist/expressions/playground/api.d.ts.map +1 -0
  524. package/dist/expressions/playground/api.js +49 -0
  525. package/dist/expressions/playground/api.js.map +1 -0
  526. package/dist/expressions/playground/languages.cjs +88 -0
  527. package/dist/expressions/playground/languages.cjs.map +1 -0
  528. package/dist/expressions/playground/languages.d.ts +43 -0
  529. package/dist/expressions/playground/languages.d.ts.map +1 -0
  530. package/dist/expressions/playground/languages.js +88 -0
  531. package/dist/expressions/playground/languages.js.map +1 -0
  532. package/dist/expressions/playground/panels/GraphPanel.cjs +72 -0
  533. package/dist/expressions/playground/panels/GraphPanel.cjs.map +1 -0
  534. package/dist/expressions/playground/panels/GraphPanel.d.ts +19 -0
  535. package/dist/expressions/playground/panels/GraphPanel.d.ts.map +1 -0
  536. package/dist/expressions/playground/panels/GraphPanel.js +72 -0
  537. package/dist/expressions/playground/panels/GraphPanel.js.map +1 -0
  538. package/dist/expressions/playground/panels/ResultPanel.cjs +82 -0
  539. package/dist/expressions/playground/panels/ResultPanel.cjs.map +1 -0
  540. package/dist/expressions/playground/panels/ResultPanel.d.ts +11 -0
  541. package/dist/expressions/playground/panels/ResultPanel.d.ts.map +1 -0
  542. package/dist/expressions/playground/panels/ResultPanel.js +82 -0
  543. package/dist/expressions/playground/panels/ResultPanel.js.map +1 -0
  544. package/dist/expressions/playground/panels/SpecPanel.cjs +76 -0
  545. package/dist/expressions/playground/panels/SpecPanel.cjs.map +1 -0
  546. package/dist/expressions/playground/panels/SpecPanel.d.ts +18 -0
  547. package/dist/expressions/playground/panels/SpecPanel.d.ts.map +1 -0
  548. package/dist/expressions/playground/panels/SpecPanel.js +76 -0
  549. package/dist/expressions/playground/panels/SpecPanel.js.map +1 -0
  550. package/dist/expressions/playground/panels/TokensPanel.cjs +89 -0
  551. package/dist/expressions/playground/panels/TokensPanel.cjs.map +1 -0
  552. package/dist/expressions/playground/panels/TokensPanel.d.ts +15 -0
  553. package/dist/expressions/playground/panels/TokensPanel.d.ts.map +1 -0
  554. package/dist/expressions/playground/panels/TokensPanel.js +72 -0
  555. package/dist/expressions/playground/panels/TokensPanel.js.map +1 -0
  556. package/dist/expressions/playground/panels/graphNodes.cjs +35 -0
  557. package/dist/expressions/playground/panels/graphNodes.cjs.map +1 -0
  558. package/dist/expressions/playground/panels/graphNodes.d.ts +19 -0
  559. package/dist/expressions/playground/panels/graphNodes.d.ts.map +1 -0
  560. package/dist/expressions/playground/panels/graphNodes.js +35 -0
  561. package/dist/expressions/playground/panels/graphNodes.js.map +1 -0
  562. package/dist/expressions/playground/runAction.cjs +12 -0
  563. package/dist/expressions/playground/runAction.cjs.map +1 -0
  564. package/dist/expressions/playground/runAction.d.ts +15 -0
  565. package/dist/expressions/playground/runAction.d.ts.map +1 -0
  566. package/dist/expressions/playground/runAction.js +12 -0
  567. package/dist/expressions/playground/runAction.js.map +1 -0
  568. package/dist/expressions/playground/runShortcut.cjs +9 -0
  569. package/dist/expressions/playground/runShortcut.cjs.map +1 -0
  570. package/dist/expressions/playground/runShortcut.d.ts +2 -0
  571. package/dist/expressions/playground/runShortcut.d.ts.map +1 -0
  572. package/dist/expressions/playground/runShortcut.js +9 -0
  573. package/dist/expressions/playground/runShortcut.js.map +1 -0
  574. package/dist/expressions/playground/useEditorTheme.cjs +40 -0
  575. package/dist/expressions/playground/useEditorTheme.cjs.map +1 -0
  576. package/dist/expressions/playground/useEditorTheme.d.ts +16 -0
  577. package/dist/expressions/playground/useEditorTheme.d.ts.map +1 -0
  578. package/dist/expressions/playground/useEditorTheme.js +23 -0
  579. package/dist/expressions/playground/useEditorTheme.js.map +1 -0
  580. package/dist/expressions/playground/useEvaluator.cjs +72 -0
  581. package/dist/expressions/playground/useEvaluator.cjs.map +1 -0
  582. package/dist/expressions/playground/useEvaluator.d.ts +25 -0
  583. package/dist/expressions/playground/useEvaluator.d.ts.map +1 -0
  584. package/dist/expressions/playground/useEvaluator.js +72 -0
  585. package/dist/expressions/playground/useEvaluator.js.map +1 -0
  586. package/dist/expressions/playground/useParsedInput.cjs +22 -0
  587. package/dist/expressions/playground/useParsedInput.cjs.map +1 -0
  588. package/dist/expressions/playground/useParsedInput.d.ts +20 -0
  589. package/dist/expressions/playground/useParsedInput.d.ts.map +1 -0
  590. package/dist/expressions/playground/useParsedInput.js +22 -0
  591. package/dist/expressions/playground/useParsedInput.js.map +1 -0
  592. package/dist/expressions/playground/verticalSplitModel.cjs +11 -0
  593. package/dist/expressions/playground/verticalSplitModel.cjs.map +1 -0
  594. package/dist/expressions/playground/verticalSplitModel.d.ts +3 -0
  595. package/dist/expressions/playground/verticalSplitModel.d.ts.map +1 -0
  596. package/dist/expressions/playground/verticalSplitModel.js +11 -0
  597. package/dist/expressions/playground/verticalSplitModel.js.map +1 -0
  598. package/dist/expressions/playground.cjs +18 -0
  599. package/dist/expressions/playground.cjs.map +1 -0
  600. package/dist/expressions/playground.d.ts +18 -0
  601. package/dist/expressions/playground.d.ts.map +1 -0
  602. package/dist/expressions/playground.js +18 -0
  603. package/dist/expressions/playground.js.map +1 -0
  604. package/dist/expressions.cjs +28 -0
  605. package/dist/expressions.cjs.map +1 -0
  606. package/dist/expressions.d.ts +10 -0
  607. package/dist/expressions.d.ts.map +1 -0
  608. package/dist/expressions.js +28 -0
  609. package/dist/expressions.js.map +1 -0
  610. package/dist/hooks/density-provider.d.ts +1 -1
  611. package/dist/hooks/theme-provider.d.ts +1 -1
  612. package/dist/hooks/use-density.d.ts +1 -1
  613. package/dist/hooks/use-resource-clock.cjs +14 -0
  614. package/dist/hooks/use-resource-clock.cjs.map +1 -0
  615. package/dist/hooks/use-resource-clock.d.ts +2 -0
  616. package/dist/hooks/use-resource-clock.d.ts.map +1 -0
  617. package/dist/hooks/use-resource-clock.js +14 -0
  618. package/dist/hooks/use-resource-clock.js.map +1 -0
  619. package/dist/hooks/use-task-run.cjs +12 -3
  620. package/dist/hooks/use-task-run.cjs.map +1 -1
  621. package/dist/hooks/use-task-run.d.ts.map +1 -1
  622. package/dist/hooks/use-task-run.js +12 -3
  623. package/dist/hooks/use-task-run.js.map +1 -1
  624. package/dist/hooks/use-theme.d.ts +1 -1
  625. package/dist/icons/registry.d.ts +1 -1
  626. package/dist/icons/types.d.ts +1 -1
  627. package/dist/layout/AppShell.d.ts +1 -1
  628. package/dist/layout/AppShell.nav.drag.d.ts +1 -1
  629. package/dist/layout/AppSidebar.d.ts +1 -1
  630. package/dist/layout/Panel.d.ts +1 -1
  631. package/dist/layout/PanelFrame.d.ts +1 -1
  632. package/dist/layout/Section.d.ts +1 -1
  633. package/dist/layout/SplitPane.d.ts +1 -1
  634. package/dist/layout/Tabs.d.ts +1 -1
  635. package/dist/layout/Workspace.d.ts +1 -1
  636. package/dist/layout/Workspace.model.d.ts +1 -1
  637. package/dist/lib/combobox-values.d.ts +1 -1
  638. package/dist/monaco/MonacoEditor.cjs +3 -3
  639. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  640. package/dist/monaco/MonacoEditor.js +2 -2
  641. package/dist/monaco/MonacoEditor.js.map +1 -1
  642. package/dist/monaco/types.d.ts +1 -1
  643. package/dist/monaco/use-monaco-worker.d.ts +1 -1
  644. package/dist/overlay/CellActions.d.ts +1 -1
  645. package/dist/overlay/CommandPalette.d.ts +2 -2
  646. package/dist/overlay/CommandPalette.model.d.ts +1 -1
  647. package/dist/overlay/CommandPaletteList.d.ts +1 -1
  648. package/dist/overlay/DropdownMenu.d.ts +1 -1
  649. package/dist/overlay/HoverCard.d.ts +1 -1
  650. package/dist/overlay/Modal.d.ts +2 -2
  651. package/dist/overlay/Toast.d.ts +1 -1
  652. package/dist/overlay/TourCard.d.ts +1 -1
  653. package/dist/overlay/TourProvider.d.ts +1 -1
  654. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  655. package/dist/overlay/toast-context.d.ts +2 -2
  656. package/dist/overlay/tour-context.d.ts +1 -1
  657. package/dist/overlay/tour-types.d.ts +1 -1
  658. package/dist/profiles/connections/connectionBrowserModel.d.ts +1 -1
  659. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +1 -1
  660. package/dist/profiles/editor/profileBuilder.d.ts +1 -1
  661. package/dist/profiles/elasticsearch/esParamOperandExtension.d.ts +1 -1
  662. package/dist/profiles/fields/profileFieldControls.d.ts +1 -1
  663. package/dist/profiles/fields/profileFieldIcons.d.ts +1 -1
  664. package/dist/profiles/fields/profileFieldState.d.ts +1 -1
  665. package/dist/profiles/query/jsonPathSample.d.ts +1 -1
  666. package/dist/profiles/query/jsonPathSampleRow.d.ts +1 -1
  667. package/dist/profiles/query/prometheusResults.d.ts +2 -2
  668. package/dist/rpc/EndpointList.d.ts +1 -1
  669. package/dist/rpc/EntityExplorerApp.d.ts +1 -1
  670. package/dist/rpc/OperationCatalog.d.ts +1 -1
  671. package/dist/rpc/OperationEntityContextPicker.d.ts +1 -1
  672. package/dist/rpc/OperationEntityPage.d.ts +1 -1
  673. package/dist/rpc/OperationResultView.d.ts +1 -1
  674. package/dist/rpc/RouterProvider.d.ts +1 -1
  675. package/dist/rpc/SchemaActionForm.d.ts +1 -1
  676. package/dist/rpc/formMetadata.d.ts +1 -1
  677. package/dist/rpc/router.d.ts +1 -1
  678. package/dist/rpc/rpc-story.fixtures.d.ts +1 -1
  679. package/dist/styles.css +1 -1
  680. package/package.json +21 -2
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const KeyValueList = require("../KeyValueList.cjs");
6
+ const Icon = require("../Icon.cjs");
7
+ const ToolCall = require("../chat/ToolCall.cjs");
8
+ const SessionInspector_model = require("./SessionInspector.model.cjs");
9
+ const SessionInspector_panelParts = require("./SessionInspector.panel-parts.cjs");
10
+ const UiClock = require("../../icons/components/UiClock.cjs");
11
+ function pendingApprovalRequests(requests) {
12
+ return (requests ?? []).filter(
13
+ (request) => request.state === "pending" && request.kind === "tool_approval"
14
+ );
15
+ }
16
+ function SessionApprovalsPanel({
17
+ approvals,
18
+ requests,
19
+ onResolve
20
+ }) {
21
+ var _a;
22
+ const pending = pendingApprovalRequests(requests);
23
+ const hasResolvedSummary = Boolean(
24
+ approvals && (approvals.approved || approvals.denied || approvals.cancelled || approvals.expired || ((_a = approvals.denials) == null ? void 0 : _a.length))
25
+ );
26
+ if (!pending.length && !hasResolvedSummary) {
27
+ return /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_panelParts.EmptyState, { children: "No approval metadata." });
28
+ }
29
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-density-4", children: [
30
+ pending.length ? /* @__PURE__ */ jsxRuntime.jsx(
31
+ PendingApprovalsList,
32
+ {
33
+ requests: pending,
34
+ ...onResolve ? { onResolve } : {}
35
+ }
36
+ ) : null,
37
+ hasResolvedSummary ? /* @__PURE__ */ jsxRuntime.jsx(ResolvedApprovalsSummary, { approvals }) : null
38
+ ] });
39
+ }
40
+ function ResolvedApprovalsSummary({
41
+ approvals
42
+ }) {
43
+ var _a;
44
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-density-4", children: [
45
+ /* @__PURE__ */ jsxRuntime.jsx(
46
+ KeyValueList.KeyValueList,
47
+ {
48
+ items: [
49
+ SessionInspector_panelParts.kv("Approved", approvals.approved ?? 0),
50
+ SessionInspector_panelParts.kv("Denied", approvals.denied ?? 0),
51
+ SessionInspector_panelParts.kv("Cancelled", approvals.cancelled ?? 0),
52
+ SessionInspector_panelParts.kv("Expired", approvals.expired ?? 0)
53
+ ]
54
+ }
55
+ ),
56
+ ((_a = approvals.denials) == null ? void 0 : _a.length) ? /* @__PURE__ */ jsxRuntime.jsx(
57
+ SessionInspector_panelParts.SimpleList,
58
+ {
59
+ title: "Denials",
60
+ rows: approvals.denials.map((denial, index) => ({
61
+ key: denial.toolUseId || `${denial.tool}-${index}`,
62
+ title: [denial.tool, denial.toolUseId].filter(Boolean).join(" "),
63
+ detail: denial.reason
64
+ }))
65
+ }
66
+ ) : null
67
+ ] });
68
+ }
69
+ function PendingApprovalsList({
70
+ requests,
71
+ onResolve
72
+ }) {
73
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
74
+ /* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "mb-density-2 flex items-center gap-1.5 text-xs font-semibold uppercase text-amber-600 dark:text-amber-400", children: [
75
+ /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiClock.UiClock, className: "size-3.5" }),
76
+ "Awaiting approval (",
77
+ requests.length,
78
+ ")"
79
+ ] }),
80
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-density-2", children: requests.map((request) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
81
+ PendingApprovalRow,
82
+ {
83
+ request,
84
+ ...onResolve ? { onResolve } : {}
85
+ }
86
+ ) }, request.id)) })
87
+ ] });
88
+ }
89
+ function PendingApprovalRow({
90
+ request,
91
+ onResolve
92
+ }) {
93
+ const [error, setError] = react.useState(void 0);
94
+ const [busy, setBusy] = react.useState(false);
95
+ const part = {
96
+ type: "dynamic-tool",
97
+ toolName: request.tool,
98
+ toolCallId: request.toolCallId || request.id,
99
+ state: "approval-requested",
100
+ input: request.input,
101
+ approval: { id: request.id }
102
+ };
103
+ const handleApprove = (approvalId, approved, reason) => {
104
+ if (!onResolve) return;
105
+ setError(void 0);
106
+ setBusy(true);
107
+ void Promise.resolve(onResolve(approvalId, approved ? "approve" : "deny", reason)).catch((err) => {
108
+ setError(err instanceof Error ? err.message : String(err));
109
+ }).finally(() => setBusy(false));
110
+ };
111
+ return /* @__PURE__ */ jsxRuntime.jsxs("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", children: [
112
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground", children: [
113
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: request.requestedBy ? `Requested by ${request.requestedBy}` : "Requested" }),
114
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex gap-density-3", children: [
115
+ request.createdAt ? /* @__PURE__ */ jsxRuntime.jsxs("span", { title: SessionInspector_model.formatDate(request.createdAt), children: [
116
+ ageLabel(request.createdAt),
117
+ " ago"
118
+ ] }) : null,
119
+ request.expiresAt ? /* @__PURE__ */ jsxRuntime.jsx("span", { title: SessionInspector_model.formatDate(request.expiresAt), children: remainingLabel(request.expiresAt) }) : null
120
+ ] })
121
+ ] }),
122
+ /* @__PURE__ */ jsxRuntime.jsx(
123
+ ToolCall.ToolCall,
124
+ {
125
+ part,
126
+ defaultOpen: true,
127
+ onApprove: busy ? void 0 : handleApprove
128
+ }
129
+ ),
130
+ busy ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 pl-4 text-xs text-muted-foreground", children: "Submitting…" }) : null,
131
+ error ? /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "mt-1.5 pl-4 text-xs text-destructive", children: error }) : null
132
+ ] });
133
+ }
134
+ function ageLabel(createdAt) {
135
+ return SessionInspector_model.durationLabel(createdAt) || "0s";
136
+ }
137
+ function remainingLabel(expiresAt) {
138
+ const expiry = new Date(expiresAt).getTime();
139
+ if (Number.isNaN(expiry)) return "";
140
+ const now = Date.now();
141
+ if (expiry <= now) return "expired";
142
+ const label = SessionInspector_model.durationLabel(new Date(now).toISOString(), expiresAt);
143
+ return label ? `${label} left` : "";
144
+ }
145
+ exports.SessionApprovalsPanel = SessionApprovalsPanel;
146
+ exports.pendingApprovalRequests = pendingApprovalRequests;
147
+ //# sourceMappingURL=SessionInspector.approvals.cjs.map
@@ -0,0 +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, kv } from \"./SessionInspector.panel-parts\";\nimport type {\n SessionApprovalRequest,\n SessionApprovalStats,\n} 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[]` this panel surfaces: outstanding tool\n * approvals, regardless of which surface (in-process chat or an external\n * broker) created the request. */\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/** 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":["jsx","EmptyState","jsxs","KeyValueList","kv","SimpleList","Icon","UiClock","useState","formatDate","ToolCall","durationLabel"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { SessionApprovalRequest, SessionApprovalStats } from './SessionViewer.unified';
2
+ /** Approve or deny one pending approval. */
3
+ export type ApprovalResolveAction = "approve" | "deny";
4
+ /** Resolves one `session.requests[]` row. Rejecting surfaces the server's
5
+ * 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>;
8
+ /** The subset of `session.requests[]` this panel surfaces: outstanding tool
9
+ * approvals, regardless of which surface (in-process chat or an external
10
+ * broker) created the request. */
11
+ export declare function pendingApprovalRequests(requests: SessionApprovalRequest[] | undefined): SessionApprovalRequest[];
12
+ /** Renders every pending tool approval directly from `session.requests[]`
13
+ * (never from transcript parts — an approval brokered outside this session's
14
+ * own chat has no transcript part) plus the resolved approve/deny/denial
15
+ * summary the panel previously showed alone. */
16
+ export declare function SessionApprovalsPanel({ approvals, requests, onResolve, }: {
17
+ approvals: SessionApprovalStats | undefined;
18
+ requests?: SessionApprovalRequest[] | undefined;
19
+ onResolve?: ApprovalResolveHandler;
20
+ }): import("react").JSX.Element;
21
+ //# sourceMappingURL=SessionInspector.approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInspector.approvals.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.approvals.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,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;;mCAEmC;AACnC,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,SAAS,GAC7C,sBAAsB,EAAE,CAI1B;AAED;;;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"}
@@ -0,0 +1,147 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { KeyValueList } from "../KeyValueList.js";
4
+ import { Icon } from "../Icon.js";
5
+ import { ToolCall } from "../chat/ToolCall.js";
6
+ import { formatDate, durationLabel } from "./SessionInspector.model.js";
7
+ import { EmptyState, kv, SimpleList } from "./SessionInspector.panel-parts.js";
8
+ import { UiClock } from "../../icons/components/UiClock.js";
9
+ function pendingApprovalRequests(requests) {
10
+ return (requests ?? []).filter(
11
+ (request) => request.state === "pending" && request.kind === "tool_approval"
12
+ );
13
+ }
14
+ function SessionApprovalsPanel({
15
+ approvals,
16
+ requests,
17
+ onResolve
18
+ }) {
19
+ var _a;
20
+ const pending = pendingApprovalRequests(requests);
21
+ const hasResolvedSummary = Boolean(
22
+ approvals && (approvals.approved || approvals.denied || approvals.cancelled || approvals.expired || ((_a = approvals.denials) == null ? void 0 : _a.length))
23
+ );
24
+ if (!pending.length && !hasResolvedSummary) {
25
+ return /* @__PURE__ */ jsx(EmptyState, { children: "No approval metadata." });
26
+ }
27
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-density-4", children: [
28
+ pending.length ? /* @__PURE__ */ jsx(
29
+ PendingApprovalsList,
30
+ {
31
+ requests: pending,
32
+ ...onResolve ? { onResolve } : {}
33
+ }
34
+ ) : null,
35
+ hasResolvedSummary ? /* @__PURE__ */ jsx(ResolvedApprovalsSummary, { approvals }) : null
36
+ ] });
37
+ }
38
+ function ResolvedApprovalsSummary({
39
+ approvals
40
+ }) {
41
+ var _a;
42
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-density-4", children: [
43
+ /* @__PURE__ */ jsx(
44
+ KeyValueList,
45
+ {
46
+ items: [
47
+ kv("Approved", approvals.approved ?? 0),
48
+ kv("Denied", approvals.denied ?? 0),
49
+ kv("Cancelled", approvals.cancelled ?? 0),
50
+ kv("Expired", approvals.expired ?? 0)
51
+ ]
52
+ }
53
+ ),
54
+ ((_a = approvals.denials) == null ? void 0 : _a.length) ? /* @__PURE__ */ jsx(
55
+ SimpleList,
56
+ {
57
+ title: "Denials",
58
+ rows: approvals.denials.map((denial, index) => ({
59
+ key: denial.toolUseId || `${denial.tool}-${index}`,
60
+ title: [denial.tool, denial.toolUseId].filter(Boolean).join(" "),
61
+ detail: denial.reason
62
+ }))
63
+ }
64
+ ) : null
65
+ ] });
66
+ }
67
+ function PendingApprovalsList({
68
+ requests,
69
+ onResolve
70
+ }) {
71
+ return /* @__PURE__ */ jsxs("section", { children: [
72
+ /* @__PURE__ */ jsxs("h3", { className: "mb-density-2 flex items-center gap-1.5 text-xs font-semibold uppercase text-amber-600 dark:text-amber-400", children: [
73
+ /* @__PURE__ */ jsx(Icon, { icon: UiClock, className: "size-3.5" }),
74
+ "Awaiting approval (",
75
+ requests.length,
76
+ ")"
77
+ ] }),
78
+ /* @__PURE__ */ jsx("ul", { className: "space-y-density-2", children: requests.map((request) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
79
+ PendingApprovalRow,
80
+ {
81
+ request,
82
+ ...onResolve ? { onResolve } : {}
83
+ }
84
+ ) }, request.id)) })
85
+ ] });
86
+ }
87
+ function PendingApprovalRow({
88
+ request,
89
+ onResolve
90
+ }) {
91
+ const [error, setError] = useState(void 0);
92
+ const [busy, setBusy] = useState(false);
93
+ const part = {
94
+ type: "dynamic-tool",
95
+ toolName: request.tool,
96
+ toolCallId: request.toolCallId || request.id,
97
+ state: "approval-requested",
98
+ input: request.input,
99
+ approval: { id: request.id }
100
+ };
101
+ const handleApprove = (approvalId, approved, reason) => {
102
+ if (!onResolve) return;
103
+ setError(void 0);
104
+ setBusy(true);
105
+ void Promise.resolve(onResolve(approvalId, approved ? "approve" : "deny", reason)).catch((err) => {
106
+ setError(err instanceof Error ? err.message : String(err));
107
+ }).finally(() => setBusy(false));
108
+ };
109
+ return /* @__PURE__ */ jsxs("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", children: [
110
+ /* @__PURE__ */ jsxs("div", { className: "mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground", children: [
111
+ /* @__PURE__ */ jsx("span", { children: request.requestedBy ? `Requested by ${request.requestedBy}` : "Requested" }),
112
+ /* @__PURE__ */ jsxs("span", { className: "flex gap-density-3", children: [
113
+ request.createdAt ? /* @__PURE__ */ jsxs("span", { title: formatDate(request.createdAt), children: [
114
+ ageLabel(request.createdAt),
115
+ " ago"
116
+ ] }) : null,
117
+ request.expiresAt ? /* @__PURE__ */ jsx("span", { title: formatDate(request.expiresAt), children: remainingLabel(request.expiresAt) }) : null
118
+ ] })
119
+ ] }),
120
+ /* @__PURE__ */ jsx(
121
+ ToolCall,
122
+ {
123
+ part,
124
+ defaultOpen: true,
125
+ onApprove: busy ? void 0 : handleApprove
126
+ }
127
+ ),
128
+ busy ? /* @__PURE__ */ jsx("p", { className: "mt-1.5 pl-4 text-xs text-muted-foreground", children: "Submitting…" }) : null,
129
+ error ? /* @__PURE__ */ jsx("p", { role: "alert", className: "mt-1.5 pl-4 text-xs text-destructive", children: error }) : null
130
+ ] });
131
+ }
132
+ function ageLabel(createdAt) {
133
+ return durationLabel(createdAt) || "0s";
134
+ }
135
+ function remainingLabel(expiresAt) {
136
+ const expiry = new Date(expiresAt).getTime();
137
+ if (Number.isNaN(expiry)) return "";
138
+ const now = Date.now();
139
+ if (expiry <= now) return "expired";
140
+ const label = durationLabel(new Date(now).toISOString(), expiresAt);
141
+ return label ? `${label} left` : "";
142
+ }
143
+ export {
144
+ SessionApprovalsPanel,
145
+ pendingApprovalRequests
146
+ };
147
+ //# sourceMappingURL=SessionInspector.approvals.js.map
@@ -0,0 +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, kv } from \"./SessionInspector.panel-parts\";\nimport type {\n SessionApprovalRequest,\n SessionApprovalStats,\n} 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[]` this panel surfaces: outstanding tool\n * approvals, regardless of which surface (in-process chat or an external\n * broker) created the request. */\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/** 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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"}
@@ -11,6 +11,7 @@ const SessionInspector_transcript = require("./SessionInspector.transcript.cjs")
11
11
  const SessionInspector_collection = require("./SessionInspector.collection.cjs");
12
12
  const SessionInspector_hierarchy = require("./SessionInspector.hierarchy.cjs");
13
13
  const SessionInspector_hierarchyState = require("./SessionInspector.hierarchy-state.cjs");
14
+ const SessionInspector_approvals = require("./SessionInspector.approvals.cjs");
14
15
  const SessionViewer = require("./SessionViewer.cjs");
15
16
  const UiChatDots = require("../../icons/components/UiChatDots.cjs");
16
17
  const UiFileText = require("../../icons/components/UiFileText.cjs");
@@ -36,6 +37,7 @@ function SessionInspector({
36
37
  transcriptProps,
37
38
  renderSessionActions,
38
39
  onPlanChange,
40
+ onResolveApproval,
39
41
  composer
40
42
  }) {
41
43
  const detail = react.useMemo(
@@ -52,6 +54,7 @@ function SessionInspector({
52
54
  ...transcriptProps ? { transcriptProps } : {},
53
55
  ...renderSessionActions ? { renderSessionActions } : {},
54
56
  ...onPlanChange ? { onPlanChange } : {},
57
+ ...onResolveApproval ? { onResolveApproval } : {},
55
58
  ...composer ? { composer } : {}
56
59
  };
57
60
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -81,6 +84,7 @@ function CollectionSessionInspector({
81
84
  transcriptProps,
82
85
  renderSessionActions,
83
86
  onPlanChange,
87
+ onResolveApproval,
84
88
  composer
85
89
  }) {
86
90
  const hierarchy = SessionInspector_hierarchyState.useSessionHierarchy(collection);
@@ -119,7 +123,7 @@ function CollectionSessionInspector({
119
123
  "aria-label": "Session detail view",
120
124
  className: "flex shrink-0 overflow-x-auto border-b border-border px-density-2",
121
125
  children: TABS.map((item) => {
122
- const count = tabCount(item.id, hierarchy.current);
126
+ const badge = tabBadge(item.id, hierarchy.current);
123
127
  return /* @__PURE__ */ jsxRuntime.jsx(
124
128
  TabButton.TabButton,
125
129
  {
@@ -132,7 +136,8 @@ function CollectionSessionInspector({
132
136
  ),
133
137
  icon: item.icon,
134
138
  variant: "underline",
135
- ...count === void 0 ? {} : { count },
139
+ ...badge.count === void 0 ? {} : { count: badge.count },
140
+ ...badge.color ? { countColor: badge.color } : {},
136
141
  className: "shrink-0 py-density-2 [&_svg]:text-muted-foreground"
137
142
  },
138
143
  item.id
@@ -164,7 +169,8 @@ function CollectionSessionInspector({
164
169
  tab,
165
170
  detail: panelDetail,
166
171
  session: hierarchy.current,
167
- ...onPlanChange ? { onPlanChange } : {}
172
+ ...onPlanChange ? { onPlanChange } : {},
173
+ ...onResolveApproval ? { onResolveApproval } : {}
168
174
  }
169
175
  )
170
176
  }
@@ -238,15 +244,22 @@ function LegacySessionInspector({
238
244
  }
239
245
  );
240
246
  }
241
- function tabCount(tab, session) {
247
+ function tabBadge(tab, session) {
242
248
  var _a, _b, _c, _d, _e, _f;
243
249
  switch (tab) {
244
250
  case "files":
245
- return (((_b = (_a = session == null ? void 0 : session.files) == null ? void 0 : _a.read) == null ? void 0 : _b.length) ?? 0) + (((_d = (_c = session == null ? void 0 : session.files) == null ? void 0 : _c.written) == null ? void 0 : _d.length) ?? 0);
246
- case "approvals":
247
- return (((_e = session == null ? void 0 : session.approvals) == null ? void 0 : _e.approved) ?? 0) + (((_f = session == null ? void 0 : session.approvals) == null ? void 0 : _f.denied) ?? 0);
251
+ return {
252
+ count: (((_b = (_a = session == null ? void 0 : session.files) == null ? void 0 : _a.read) == null ? void 0 : _b.length) ?? 0) + (((_d = (_c = session == null ? void 0 : session.files) == null ? void 0 : _c.written) == null ? void 0 : _d.length) ?? 0)
253
+ };
254
+ case "approvals": {
255
+ const pending = SessionInspector_approvals.pendingApprovalRequests(session == null ? void 0 : session.requests).length;
256
+ if (pending) return { count: pending, color: "bg-amber-500" };
257
+ return {
258
+ count: (((_e = session == null ? void 0 : session.approvals) == null ? void 0 : _e.approved) ?? 0) + (((_f = session == null ? void 0 : session.approvals) == null ? void 0 : _f.denied) ?? 0)
259
+ };
260
+ }
248
261
  default:
249
- return void 0;
262
+ return {};
250
263
  }
251
264
  }
252
265
  function singleSessionCollection(session) {
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.cjs","sources":["../../../src/data/ai/SessionInspector.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport {\n UiBraces,\n UiChatDots,\n UiCoins,\n UiFileText,\n UiListDashes,\n UiSealCheck,\n UiStrategy,\n} from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { TabButton } from \"../TabButton\";\nimport { formatCost, costTotal } from \"./session-cost\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport {\n SessionInspectorHeader,\n SessionInspectorSidebar,\n} from \"./SessionInspector.summary\";\nimport { SessionTranscript } from \"./SessionInspector.transcript\";\nimport {\n isSessionCollectionInput,\n type SessionCollectionInput,\n type SessionCollectionItem,\n type SessionInspectorInput,\n} from \"./SessionInspector.collection\";\nimport { SessionHierarchyPicker } from \"./SessionInspector.hierarchy\";\nimport { useSessionHierarchy } from \"./SessionInspector.hierarchy-state\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport type { SessionInput } from \"./SessionViewer.model\";\nimport type { UnifiedSessionInput } from \"./SessionViewer.unified\";\n\nexport type SessionInspectorTab =\n | \"transcript\"\n | \"files\"\n | \"plan\"\n | \"approvals\"\n | \"costs\"\n | \"metadata\"\n | \"raw\";\n\nexport interface SessionInspectorProps {\n session: SessionInspectorInput;\n className?: string;\n defaultTab?: SessionInspectorTab;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n renderSessionActions?: (item: SessionCollectionItem) => ReactNode;\n /** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */\n onPlanChange?: (content: string) => void;\n composer?: ReactNode;\n}\n\nconst TABS = [\n { id: \"transcript\", label: \"Transcript\", icon: UiChatDots },\n { id: \"files\", label: \"Files\", icon: UiFileText },\n { id: \"plan\", label: \"Plan\", icon: UiStrategy },\n { id: \"approvals\", label: \"Approvals\", icon: UiSealCheck },\n { id: \"costs\", label: \"Costs\", icon: UiCoins },\n { id: \"metadata\", label: \"Metadata\", icon: UiListDashes },\n { id: \"raw\", label: \"Raw\", icon: UiBraces },\n] as const;\n\nexport function SessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n composer,\n}: SessionInspectorProps) {\n const detail = useMemo(\n () =>\n isSessionCollectionInput(session) ? undefined : asUnifiedSession(session),\n [session],\n );\n const collection = useMemo(\n () =>\n isSessionCollectionInput(session)\n ? session\n : detail\n ? singleSessionCollection(detail)\n : undefined,\n [detail, session],\n );\n\n if (collection) {\n const optionalProps = {\n ...(className ? { className } : {}),\n ...(transcriptProps ? { transcriptProps } : {}),\n ...(renderSessionActions ? { renderSessionActions } : {}),\n ...(onPlanChange ? { onPlanChange } : {}),\n ...(composer ? { composer } : {}),\n };\n return (\n <CollectionSessionInspector\n collection={collection}\n defaultTab={defaultTab}\n {...optionalProps}\n />\n );\n }\n\n return (\n <LegacySessionInspector\n session={session as SessionInput}\n defaultTab={defaultTab}\n {...(className ? { className } : {})}\n {...(transcriptProps ? { transcriptProps } : {})}\n {...(composer ? { composer } : {})}\n />\n );\n}\n\nfunction CollectionSessionInspector({\n collection,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n composer,\n}: Omit<SessionInspectorProps, \"session\"> & {\n collection: SessionCollectionInput;\n}) {\n const hierarchy = useSessionHierarchy(collection);\n const [tab, setTab] = useState<SessionInspectorTab>(defaultTab);\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const panelDetail = tab === \"costs\" ? hierarchy.filtered : hierarchy.current;\n\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden rounded-xl border border-border bg-background text-sm shadow-sm\",\n className,\n )}\n >\n <SessionInspectorHeader session={hierarchy.current} />\n <div\n role=\"toolbar\"\n aria-label=\"Session content controls\"\n className=\"flex shrink-0 justify-start border-b border-border px-density-2 py-density-2\"\n >\n <SessionHierarchyPicker\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n />\n </div>\n <div\n role=\"tablist\"\n aria-label=\"Session detail view\"\n className=\"flex shrink-0 overflow-x-auto border-b border-border px-density-2\"\n >\n {TABS.map((item) => {\n const count = tabCount(item.id, hierarchy.current);\n return (\n <TabButton\n key={item.id}\n active={tab === item.id}\n onClick={() => setTab(item.id)}\n label={tabLabel(\n item.id,\n item.label,\n item.id === \"costs\" ? hierarchy.filtered : hierarchy.current,\n )}\n icon={item.icon}\n variant=\"underline\"\n {...(count === undefined ? {} : { count })}\n className=\"shrink-0 py-density-2 [&_svg]:text-muted-foreground\"\n />\n );\n })}\n </div>\n <div className=\"grid min-h-0 flex-1 overflow-y-auto lg:grid-cols-[minmax(0,1fr)_18rem] lg:overflow-hidden\">\n <main className=\"flex min-h-[28rem] min-w-0 flex-col lg:min-h-0\">\n <div\n className={cn(\n \"min-h-0 flex-1\",\n tab === \"transcript\"\n ? \"overflow-hidden\"\n : \"overflow-auto p-density-4\",\n )}\n >\n {tab === \"transcript\" ? (\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...transcriptProps,\n className: transcriptClassName,\n }}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n />\n )}\n </div>\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </main>\n <SessionInspectorSidebar session={hierarchy.current} />\n </div>\n </div>\n );\n}\n\nfunction LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n composer,\n}: Pick<\n SessionInspectorProps,\n \"className\" | \"defaultTab\" | \"transcriptProps\" | \"composer\"\n> & {\n session: SessionInput;\n}) {\n const [tab, setTab] = useState<SessionInspectorTab>(defaultTab);\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden rounded-xl border border-border bg-background text-sm shadow-sm\",\n className,\n )}\n >\n <div\n role=\"tablist\"\n aria-label=\"Session detail view\"\n className=\"flex shrink-0 overflow-x-auto border-b border-border px-density-2\"\n >\n {TABS.map((item) => (\n <TabButton\n key={item.id}\n active={tab === item.id}\n onClick={() => setTab(item.id)}\n label={item.label}\n icon={item.icon}\n variant=\"underline\"\n className=\"shrink-0 py-density-2 [&_svg]:text-muted-foreground\"\n />\n ))}\n </div>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {tab === \"transcript\" ? (\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...transcriptProps}\n className={transcriptClassName}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n )}\n </div>\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction tabCount(tab: SessionInspectorTab, session?: UnifiedSessionInput) {\n switch (tab) {\n case \"files\":\n return (\n (session?.files?.read?.length ?? 0) +\n (session?.files?.written?.length ?? 0)\n );\n case \"approvals\":\n return (\n (session?.approvals?.approved ?? 0) + (session?.approvals?.denied ?? 0)\n );\n default:\n return undefined;\n }\n}\n\nfunction singleSessionCollection(\n session: UnifiedSessionInput,\n): SessionCollectionInput {\n const id = session.id || \"session\";\n return {\n kind: \"session-collection\",\n id,\n currentSessionId: id,\n sessions: [{ id, session }],\n };\n}\n\nfunction tabLabel(\n tab: SessionInspectorTab,\n label: string,\n session?: UnifiedSessionInput,\n) {\n if (tab !== \"costs\") return label;\n const total = costTotal(session?.cost);\n return total ? `${label} ${formatCost(total)}` : label;\n}\n\nfunction asUnifiedSession(\n session: SessionInput,\n): UnifiedSessionInput | undefined {\n if (typeof session !== \"object\" || session === null || Array.isArray(session))\n return undefined;\n return session as UnifiedSessionInput;\n}\n"],"names":["UiChatDots","UiFileText","UiStrategy","UiSealCheck","UiCoins","UiListDashes","UiBraces","useMemo","isSessionCollectionInput","jsx","useSessionHierarchy","useState","cn","jsxs","SessionInspectorHeader","SessionHierarchyPicker","TabButton","SessionTranscript","SessionInspectorPanel","SessionInspectorSidebar","SessionViewer","costTotal","formatCost"],"mappings":"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"}
1
+ {"version":3,"file":"SessionInspector.cjs","sources":["../../../src/data/ai/SessionInspector.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport {\n UiBraces,\n UiChatDots,\n UiCoins,\n UiFileText,\n UiListDashes,\n UiSealCheck,\n UiStrategy,\n} from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { TabButton } from \"../TabButton\";\nimport { formatCost, costTotal } from \"./session-cost\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport {\n SessionInspectorHeader,\n SessionInspectorSidebar,\n} from \"./SessionInspector.summary\";\nimport { SessionTranscript } from \"./SessionInspector.transcript\";\nimport {\n isSessionCollectionInput,\n type SessionCollectionInput,\n type SessionCollectionItem,\n type SessionInspectorInput,\n} from \"./SessionInspector.collection\";\nimport { SessionHierarchyPicker } from \"./SessionInspector.hierarchy\";\nimport { useSessionHierarchy } from \"./SessionInspector.hierarchy-state\";\nimport {\n pendingApprovalRequests,\n type ApprovalResolveHandler,\n} from \"./SessionInspector.approvals\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport type { SessionInput } from \"./SessionViewer.model\";\nimport type { UnifiedSessionInput } from \"./SessionViewer.unified\";\n\nexport type SessionInspectorTab =\n | \"transcript\"\n | \"files\"\n | \"plan\"\n | \"approvals\"\n | \"costs\"\n | \"metadata\"\n | \"raw\";\n\nexport interface SessionInspectorProps {\n session: SessionInspectorInput;\n className?: string;\n defaultTab?: SessionInspectorTab;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n renderSessionActions?: (item: SessionCollectionItem) => ReactNode;\n /** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */\n onPlanChange?: (content: string) => void;\n /** Resolves one pending tool approval from the Approvals tab. Omitted, the\n * tab still lists pending requests but renders no Approve/Deny controls. */\n onResolveApproval?: ApprovalResolveHandler;\n composer?: ReactNode;\n}\n\nconst TABS = [\n { id: \"transcript\", label: \"Transcript\", icon: UiChatDots },\n { id: \"files\", label: \"Files\", icon: UiFileText },\n { id: \"plan\", label: \"Plan\", icon: UiStrategy },\n { id: \"approvals\", label: \"Approvals\", icon: UiSealCheck },\n { id: \"costs\", label: \"Costs\", icon: UiCoins },\n { id: \"metadata\", label: \"Metadata\", icon: UiListDashes },\n { id: \"raw\", label: \"Raw\", icon: UiBraces },\n] as const;\n\nexport function SessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n}: SessionInspectorProps) {\n const detail = useMemo(\n () =>\n isSessionCollectionInput(session) ? undefined : asUnifiedSession(session),\n [session],\n );\n const collection = useMemo(\n () =>\n isSessionCollectionInput(session)\n ? session\n : detail\n ? singleSessionCollection(detail)\n : undefined,\n [detail, session],\n );\n\n if (collection) {\n const optionalProps = {\n ...(className ? { className } : {}),\n ...(transcriptProps ? { transcriptProps } : {}),\n ...(renderSessionActions ? { renderSessionActions } : {}),\n ...(onPlanChange ? { onPlanChange } : {}),\n ...(onResolveApproval ? { onResolveApproval } : {}),\n ...(composer ? { composer } : {}),\n };\n return (\n <CollectionSessionInspector\n collection={collection}\n defaultTab={defaultTab}\n {...optionalProps}\n />\n );\n }\n\n return (\n <LegacySessionInspector\n session={session as SessionInput}\n defaultTab={defaultTab}\n {...(className ? { className } : {})}\n {...(transcriptProps ? { transcriptProps } : {})}\n {...(composer ? { composer } : {})}\n />\n );\n}\n\nfunction CollectionSessionInspector({\n collection,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n}: Omit<SessionInspectorProps, \"session\"> & {\n collection: SessionCollectionInput;\n}) {\n const hierarchy = useSessionHierarchy(collection);\n const [tab, setTab] = useState<SessionInspectorTab>(defaultTab);\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const panelDetail = tab === \"costs\" ? hierarchy.filtered : hierarchy.current;\n\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden rounded-xl border border-border bg-background text-sm shadow-sm\",\n className,\n )}\n >\n <SessionInspectorHeader session={hierarchy.current} />\n <div\n role=\"toolbar\"\n aria-label=\"Session content controls\"\n className=\"flex shrink-0 justify-start border-b border-border px-density-2 py-density-2\"\n >\n <SessionHierarchyPicker\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n />\n </div>\n <div\n role=\"tablist\"\n aria-label=\"Session detail view\"\n className=\"flex shrink-0 overflow-x-auto border-b border-border px-density-2\"\n >\n {TABS.map((item) => {\n const badge = tabBadge(item.id, hierarchy.current);\n return (\n <TabButton\n key={item.id}\n active={tab === item.id}\n onClick={() => setTab(item.id)}\n label={tabLabel(\n item.id,\n item.label,\n item.id === \"costs\" ? hierarchy.filtered : hierarchy.current,\n )}\n icon={item.icon}\n variant=\"underline\"\n {...(badge.count === undefined ? {} : { count: badge.count })}\n {...(badge.color ? { countColor: badge.color } : {})}\n className=\"shrink-0 py-density-2 [&_svg]:text-muted-foreground\"\n />\n );\n })}\n </div>\n <div className=\"grid min-h-0 flex-1 overflow-y-auto lg:grid-cols-[minmax(0,1fr)_18rem] lg:overflow-hidden\">\n <main className=\"flex min-h-[28rem] min-w-0 flex-col lg:min-h-0\">\n <div\n className={cn(\n \"min-h-0 flex-1\",\n tab === \"transcript\"\n ? \"overflow-hidden\"\n : \"overflow-auto p-density-4\",\n )}\n >\n {tab === \"transcript\" ? (\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...transcriptProps,\n className: transcriptClassName,\n }}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n )}\n </div>\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </main>\n <SessionInspectorSidebar session={hierarchy.current} />\n </div>\n </div>\n );\n}\n\nfunction LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n composer,\n}: Pick<\n SessionInspectorProps,\n \"className\" | \"defaultTab\" | \"transcriptProps\" | \"composer\"\n> & {\n session: SessionInput;\n}) {\n const [tab, setTab] = useState<SessionInspectorTab>(defaultTab);\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden rounded-xl border border-border bg-background text-sm shadow-sm\",\n className,\n )}\n >\n <div\n role=\"tablist\"\n aria-label=\"Session detail view\"\n className=\"flex shrink-0 overflow-x-auto border-b border-border px-density-2\"\n >\n {TABS.map((item) => (\n <TabButton\n key={item.id}\n active={tab === item.id}\n onClick={() => setTab(item.id)}\n label={item.label}\n icon={item.icon}\n variant=\"underline\"\n className=\"shrink-0 py-density-2 [&_svg]:text-muted-foreground\"\n />\n ))}\n </div>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {tab === \"transcript\" ? (\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...transcriptProps}\n className={transcriptClassName}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n )}\n </div>\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\n/** The tab's count badge and, for a pending-approvals badge, an amber\n * override so an unresolved approval reads as urgent rather than blending\n * into the neutral resolved-count badge every other tab uses. */\nfunction tabBadge(\n tab: SessionInspectorTab,\n session?: UnifiedSessionInput,\n): { count?: number; color?: string } {\n switch (tab) {\n case \"files\":\n return {\n count:\n (session?.files?.read?.length ?? 0) +\n (session?.files?.written?.length ?? 0),\n };\n case \"approvals\": {\n const pending = pendingApprovalRequests(session?.requests).length;\n if (pending) return { count: pending, color: \"bg-amber-500\" };\n return {\n count:\n (session?.approvals?.approved ?? 0) +\n (session?.approvals?.denied ?? 0),\n };\n }\n default:\n return {};\n }\n}\n\nfunction singleSessionCollection(\n session: UnifiedSessionInput,\n): SessionCollectionInput {\n const id = session.id || \"session\";\n return {\n kind: \"session-collection\",\n id,\n currentSessionId: id,\n sessions: [{ id, session }],\n };\n}\n\nfunction tabLabel(\n tab: SessionInspectorTab,\n label: string,\n session?: UnifiedSessionInput,\n) {\n if (tab !== \"costs\") return label;\n const total = costTotal(session?.cost);\n return total ? `${label} ${formatCost(total)}` : label;\n}\n\nfunction asUnifiedSession(\n session: SessionInput,\n): UnifiedSessionInput | undefined {\n if (typeof session !== \"object\" || session === null || Array.isArray(session))\n return undefined;\n return session as UnifiedSessionInput;\n}\n"],"names":["UiChatDots","UiFileText","UiStrategy","UiSealCheck","UiCoins","UiListDashes","UiBraces","useMemo","isSessionCollectionInput","jsx","useSessionHierarchy","useState","cn","jsxs","SessionInspectorHeader","SessionHierarchyPicker","TabButton","SessionTranscript","SessionInspectorPanel","SessionInspectorSidebar","SessionViewer","pendingApprovalRequests","costTotal","formatCost"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { ReactNode } from '../../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  import { SessionCollectionItem, SessionInspectorInput } from './SessionInspector.collection';
3
+ import { ApprovalResolveHandler } from './SessionInspector.approvals';
3
4
  import { SessionViewerProps } from './SessionViewer';
4
5
  export type SessionInspectorTab = "transcript" | "files" | "plan" | "approvals" | "costs" | "metadata" | "raw";
5
6
  export interface SessionInspectorProps {
@@ -10,7 +11,10 @@ export interface SessionInspectorProps {
10
11
  renderSessionActions?: (item: SessionCollectionItem) => ReactNode;
11
12
  /** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */
12
13
  onPlanChange?: (content: string) => void;
14
+ /** Resolves one pending tool approval from the Approvals tab. Omitted, the
15
+ * tab still lists pending requests but renders no Approve/Deny controls. */
16
+ onResolveApproval?: ApprovalResolveHandler;
13
17
  composer?: ReactNode;
14
18
  }
15
- export declare function SessionInspector({ session, className, defaultTab, transcriptProps, renderSessionActions, onPlanChange, composer, }: SessionInspectorProps): import("react").JSX.Element;
19
+ export declare function SessionInspector({ session, className, defaultTab, transcriptProps, renderSessionActions, onPlanChange, onResolveApproval, composer, }: SessionInspectorProps): import("react").JSX.Element;
16
20
  //# sourceMappingURL=SessionInspector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAmB1D,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIzE,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,OAAO,GACP,MAAM,GACN,WAAW,GACX,OAAO,GACP,UAAU,GACV,KAAK,CAAC;AAEV,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,eAAe,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACtD,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,SAAS,CAAC;IAClE,+FAA+F;IAC/F,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAYD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,UAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,QAAQ,GACT,EAAE,qBAAqB,+BA0CvB"}
1
+ {"version":3,"file":"SessionInspector.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAmB1D,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIzE,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,OAAO,GACP,MAAM,GACN,WAAW,GACX,OAAO,GACP,UAAU,GACV,KAAK,CAAC;AAEV,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,eAAe,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACtD,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,SAAS,CAAC;IAClE,+FAA+F;IAC/F,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;iFAC6E;IAC7E,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAYD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,UAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,EAAE,qBAAqB,+BA2CvB"}
@@ -1,4 +1,4 @@
1
- import { ReactNode } from '../../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  import { SessionCollectionInput, SessionCollectionItem } from './SessionInspector.collection';
3
3
  import { SessionHierarchyState } from './SessionInspector.hierarchy-state';
4
4
  export declare function SessionHierarchyPicker({ collection, state, renderSessionActions, }: {