@flanksource/clicky-ui 0.3.34 → 0.3.36

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 (733) hide show
  1. package/README.md +4 -0
  2. package/dist/ai.cjs +4 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +4 -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/TaskHeaderExtras.cjs +35 -0
  239. package/dist/data/TaskHeaderExtras.cjs.map +1 -0
  240. package/dist/data/TaskHeaderExtras.d.ts +27 -0
  241. package/dist/data/TaskHeaderExtras.d.ts.map +1 -0
  242. package/dist/data/TaskHeaderExtras.js +35 -0
  243. package/dist/data/TaskHeaderExtras.js.map +1 -0
  244. package/dist/data/TaskManager.cjs +27 -23
  245. package/dist/data/TaskManager.cjs.map +1 -1
  246. package/dist/data/TaskManager.d.ts +13 -1
  247. package/dist/data/TaskManager.d.ts.map +1 -1
  248. package/dist/data/TaskManager.js +27 -23
  249. package/dist/data/TaskManager.js.map +1 -1
  250. package/dist/data/TaskManagerButton.cjs +17 -34
  251. package/dist/data/TaskManagerButton.cjs.map +1 -1
  252. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  253. package/dist/data/TaskManagerButton.js +18 -35
  254. package/dist/data/TaskManagerButton.js.map +1 -1
  255. package/dist/data/TaskProcessDetails.cjs +7 -25
  256. package/dist/data/TaskProcessDetails.cjs.map +1 -1
  257. package/dist/data/TaskProcessDetails.d.ts +2 -1
  258. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  259. package/dist/data/TaskProcessDetails.js +7 -25
  260. package/dist/data/TaskProcessDetails.js.map +1 -1
  261. package/dist/data/TaskProcessMetadata.cjs +50 -0
  262. package/dist/data/TaskProcessMetadata.cjs.map +1 -0
  263. package/dist/data/TaskProcessMetadata.d.ts +20 -0
  264. package/dist/data/TaskProcessMetadata.d.ts.map +1 -0
  265. package/dist/data/TaskProcessMetadata.js +50 -0
  266. package/dist/data/TaskProcessMetadata.js.map +1 -0
  267. package/dist/data/TaskProgress.cjs +41 -41
  268. package/dist/data/TaskProgress.cjs.map +1 -1
  269. package/dist/data/TaskProgress.d.ts +15 -1
  270. package/dist/data/TaskProgress.d.ts.map +1 -1
  271. package/dist/data/TaskProgress.js +41 -41
  272. package/dist/data/TaskProgress.js.map +1 -1
  273. package/dist/data/TaskResourceReadings.cjs +42 -0
  274. package/dist/data/TaskResourceReadings.cjs.map +1 -0
  275. package/dist/data/TaskResourceReadings.d.ts +6 -0
  276. package/dist/data/TaskResourceReadings.d.ts.map +1 -0
  277. package/dist/data/TaskResourceReadings.js +42 -0
  278. package/dist/data/TaskResourceReadings.js.map +1 -0
  279. package/dist/data/TaskSnapshot.cjs.map +1 -1
  280. package/dist/data/TaskSnapshot.d.ts +36 -1
  281. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  282. package/dist/data/TaskSnapshot.js.map +1 -1
  283. package/dist/data/TaskStreamTabs.cjs +78 -0
  284. package/dist/data/TaskStreamTabs.cjs.map +1 -0
  285. package/dist/data/TaskStreamTabs.d.ts +35 -0
  286. package/dist/data/TaskStreamTabs.d.ts.map +1 -0
  287. package/dist/data/TaskStreamTabs.js +78 -0
  288. package/dist/data/TaskStreamTabs.js.map +1 -0
  289. package/dist/data/Timeline.d.ts +1 -1
  290. package/dist/data/Tree.d.ts +1 -1
  291. package/dist/data/TreeGroupHeader.d.ts +1 -1
  292. package/dist/data/TreeNode.d.ts +1 -1
  293. package/dist/data/Version.d.ts +3 -3
  294. package/dist/data/ai/ChatWindow.cjs +22 -12
  295. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  296. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  297. package/dist/data/ai/ChatWindow.js +22 -12
  298. package/dist/data/ai/ChatWindow.js.map +1 -1
  299. package/dist/data/ai/ChatWindow.test-utils.d.ts +4 -2
  300. package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -1
  301. package/dist/data/ai/ChatWindow.types.d.ts +1 -1
  302. package/dist/data/ai/ChatWindowManager.cjs +2 -0
  303. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  304. package/dist/data/ai/ChatWindowManager.d.ts +1 -1
  305. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  306. package/dist/data/ai/ChatWindowManager.js +2 -0
  307. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  308. package/dist/data/ai/PolicyTree.d.ts +1 -1
  309. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +1 -1
  310. package/dist/data/ai/PromptCatalog/types.d.ts +1 -1
  311. package/dist/data/ai/PromptRunEditor/index.cjs +4 -0
  312. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  313. package/dist/data/ai/PromptRunEditor/index.d.ts +5 -2
  314. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  315. package/dist/data/ai/PromptRunEditor/index.js +4 -0
  316. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  317. package/dist/data/ai/SessionChatComposer.d.ts +1 -1
  318. package/dist/data/ai/SessionInspector.approvals-model.cjs +9 -0
  319. package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -0
  320. package/dist/data/ai/SessionInspector.approvals-model.d.ts +17 -0
  321. package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -0
  322. package/dist/data/ai/SessionInspector.approvals-model.js +9 -0
  323. package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -0
  324. package/dist/data/ai/SessionInspector.approvals.cjs +143 -0
  325. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -0
  326. package/dist/data/ai/SessionInspector.approvals.d.ts +13 -0
  327. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -0
  328. package/dist/data/ai/SessionInspector.approvals.js +143 -0
  329. package/dist/data/ai/SessionInspector.approvals.js.map +1 -0
  330. package/dist/data/ai/SessionInspector.cjs +21 -8
  331. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  332. package/dist/data/ai/SessionInspector.d.ts +6 -2
  333. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  334. package/dist/data/ai/SessionInspector.hierarchy.d.ts +1 -1
  335. package/dist/data/ai/SessionInspector.js +21 -8
  336. package/dist/data/ai/SessionInspector.js.map +1 -1
  337. package/dist/data/ai/SessionInspector.panel-parts.cjs +34 -0
  338. package/dist/data/ai/SessionInspector.panel-parts.cjs.map +1 -0
  339. package/dist/data/ai/SessionInspector.panel-parts.d.ts +19 -0
  340. package/dist/data/ai/SessionInspector.panel-parts.d.ts.map +1 -0
  341. package/dist/data/ai/SessionInspector.panel-parts.js +34 -0
  342. package/dist/data/ai/SessionInspector.panel-parts.js.map +1 -0
  343. package/dist/data/ai/SessionInspector.panel-values.cjs +18 -0
  344. package/dist/data/ai/SessionInspector.panel-values.cjs.map +1 -0
  345. package/dist/data/ai/SessionInspector.panel-values.d.ts +13 -0
  346. package/dist/data/ai/SessionInspector.panel-values.d.ts.map +1 -0
  347. package/dist/data/ai/SessionInspector.panel-values.js +18 -0
  348. package/dist/data/ai/SessionInspector.panel-values.js.map +1 -0
  349. package/dist/data/ai/SessionInspector.panels.cjs +41 -99
  350. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  351. package/dist/data/ai/SessionInspector.panels.d.ts +3 -1
  352. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  353. package/dist/data/ai/SessionInspector.panels.js +13 -71
  354. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  355. package/dist/data/ai/SessionViewer.d.ts +1 -1
  356. package/dist/data/ai/SessionViewer.rows.d.ts +1 -1
  357. package/dist/data/ai/SessionViewer.tool-details.d.ts +1 -1
  358. package/dist/data/ai/SessionViewer.unified.d.ts +23 -0
  359. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  360. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +1 -1
  361. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +1 -1
  362. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +1 -1
  363. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +3 -1
  364. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  365. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +3 -1
  366. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  367. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +3 -1
  368. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  369. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +1 -1
  370. package/dist/data/ai/SpecRuntimeEditor/index.cjs +3 -1
  371. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  372. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +5 -2
  373. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  374. package/dist/data/ai/SpecRuntimeEditor/index.js +3 -1
  375. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  376. package/dist/data/ai/chat-window-context.cjs +1 -0
  377. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  378. package/dist/data/ai/chat-window-context.d.ts +13 -5
  379. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  380. package/dist/data/ai/chat-window-context.js +1 -0
  381. package/dist/data/ai/chat-window-context.js.map +1 -1
  382. package/dist/data/ai/index.d.ts +3 -1
  383. package/dist/data/ai/index.d.ts.map +1 -1
  384. package/dist/data/ai/use-session-scroll.d.ts +1 -1
  385. package/dist/data/cache-browser/adapter.d.ts +1 -1
  386. package/dist/data/cells/CellFilterActions.d.ts +1 -1
  387. package/dist/data/cells/EntityCell.d.ts +1 -1
  388. package/dist/data/cells/tag-utils.d.ts +1 -1
  389. package/dist/data/chat/Chat.cjs +42 -46
  390. package/dist/data/chat/Chat.cjs.map +1 -1
  391. package/dist/data/chat/Chat.d.ts +16 -5
  392. package/dist/data/chat/Chat.d.ts.map +1 -1
  393. package/dist/data/chat/Chat.js +43 -47
  394. package/dist/data/chat/Chat.js.map +1 -1
  395. package/dist/data/chat/ModelSelector.d.ts +1 -1
  396. package/dist/data/chat/PromptInput.cjs +13 -0
  397. package/dist/data/chat/PromptInput.cjs.map +1 -1
  398. package/dist/data/chat/PromptInput.d.ts +8 -2
  399. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  400. package/dist/data/chat/PromptInput.js +14 -1
  401. package/dist/data/chat/PromptInput.js.map +1 -1
  402. package/dist/data/chat/tool-render/ToolArgs.d.ts +1 -1
  403. package/dist/data/chat/tool-render/ToolParams.d.ts +1 -1
  404. package/dist/data/chat/tool-render/ToolValue.d.ts +1 -1
  405. package/dist/data/chat/tool-render/adapter.d.ts +1 -1
  406. package/dist/data/chat/tool-render/context.d.ts +1 -1
  407. package/dist/data/chat/tool-render/defaults.d.ts +1 -1
  408. package/dist/data/chat/tool-render/known-tool-views.d.ts +1 -1
  409. package/dist/data/chat/tool-render/summary.d.ts +1 -1
  410. package/dist/data/chat/types.d.ts +1 -1
  411. package/dist/data/clicky-export/useClickyExport.d.ts +1 -1
  412. package/dist/data/data-table-server-filters.d.ts +1 -1
  413. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +1 -1
  414. package/dist/data/diagnostics/ErrorDetails.d.ts +1 -1
  415. package/dist/data/diagnostics/StackFrameRow.d.ts +1 -1
  416. package/dist/data/git/GitChangeList.d.ts +1 -1
  417. package/dist/data/icon-fallback.d.ts +1 -1
  418. package/dist/data/properties-context.cjs +6 -0
  419. package/dist/data/properties-context.cjs.map +1 -0
  420. package/dist/data/properties-context.d.ts +7 -0
  421. package/dist/data/properties-context.d.ts.map +1 -0
  422. package/dist/data/properties-context.js +6 -0
  423. package/dist/data/properties-context.js.map +1 -0
  424. package/dist/data/query-browser/QueryBrowser.types.d.ts +1 -1
  425. package/dist/data/runtime/RuntimeBar.cjs +7 -3
  426. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  427. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBar.js +7 -3
  429. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  430. package/dist/data/task-copy.cjs +1 -1
  431. package/dist/data/task-copy.cjs.map +1 -1
  432. package/dist/data/task-copy.js +1 -1
  433. package/dist/data/task-copy.js.map +1 -1
  434. package/dist/data/task-metadata.cjs +36 -0
  435. package/dist/data/task-metadata.cjs.map +1 -0
  436. package/dist/data/task-metadata.d.ts +39 -0
  437. package/dist/data/task-metadata.d.ts.map +1 -0
  438. package/dist/data/task-metadata.js +36 -0
  439. package/dist/data/task-metadata.js.map +1 -0
  440. package/dist/data/task-resource-summary.cjs +30 -0
  441. package/dist/data/task-resource-summary.cjs.map +1 -0
  442. package/dist/data/task-resource-summary.d.ts +15 -0
  443. package/dist/data/task-resource-summary.d.ts.map +1 -0
  444. package/dist/data/task-resource-summary.js +30 -0
  445. package/dist/data/task-resource-summary.js.map +1 -0
  446. package/dist/data/task-status.cjs +8 -2
  447. package/dist/data/task-status.cjs.map +1 -1
  448. package/dist/data/task-status.d.ts +3 -0
  449. package/dist/data/task-status.d.ts.map +1 -1
  450. package/dist/data/task-status.js +8 -2
  451. package/dist/data/task-status.js.map +1 -1
  452. package/dist/data/task-streams.cjs +39 -0
  453. package/dist/data/task-streams.cjs.map +1 -0
  454. package/dist/data/task-streams.d.ts +60 -0
  455. package/dist/data/task-streams.d.ts.map +1 -0
  456. package/dist/data/task-streams.js +39 -0
  457. package/dist/data/task-streams.js.map +1 -0
  458. package/dist/data/task-work-progress.cjs +24 -0
  459. package/dist/data/task-work-progress.cjs.map +1 -0
  460. package/dist/data/task-work-progress.d.ts +21 -0
  461. package/dist/data/task-work-progress.d.ts.map +1 -0
  462. package/dist/data/task-work-progress.js +24 -0
  463. package/dist/data/task-work-progress.js.map +1 -0
  464. package/dist/data/test-runner/TestRunner.d.ts +1 -1
  465. package/dist/data/test-runner/adapter.d.ts +1 -1
  466. package/dist/data/test-runner/context.d.ts +1 -1
  467. package/dist/data/use-data-table-virtual.cjs +73 -0
  468. package/dist/data/use-data-table-virtual.cjs.map +1 -0
  469. package/dist/data/use-data-table-virtual.d.ts +40 -0
  470. package/dist/data/use-data-table-virtual.d.ts.map +1 -0
  471. package/dist/data/use-data-table-virtual.js +73 -0
  472. package/dist/data/use-data-table-virtual.js.map +1 -0
  473. package/dist/data/verification/VerificationResults.d.ts +1 -1
  474. package/dist/data/version-info.cjs +3 -3
  475. package/dist/data/version-info.js +3 -3
  476. package/dist/data.cjs +14 -0
  477. package/dist/data.cjs.map +1 -1
  478. package/dist/data.d.ts +6 -1
  479. package/dist/data.d.ts.map +1 -1
  480. package/dist/data.js +14 -0
  481. package/dist/data.js.map +1 -1
  482. package/dist/expressions/lang/attributes.cjs +56 -0
  483. package/dist/expressions/lang/attributes.cjs.map +1 -0
  484. package/dist/expressions/lang/attributes.d.ts +22 -0
  485. package/dist/expressions/lang/attributes.d.ts.map +1 -0
  486. package/dist/expressions/lang/attributes.js +56 -0
  487. package/dist/expressions/lang/attributes.js.map +1 -0
  488. package/dist/expressions/lang/completion.cjs +164 -0
  489. package/dist/expressions/lang/completion.cjs.map +1 -0
  490. package/dist/expressions/lang/completion.d.ts +29 -0
  491. package/dist/expressions/lang/completion.d.ts.map +1 -0
  492. package/dist/expressions/lang/completion.js +164 -0
  493. package/dist/expressions/lang/completion.js.map +1 -0
  494. package/dist/expressions/lang/environment.cjs +115 -0
  495. package/dist/expressions/lang/environment.cjs.map +1 -0
  496. package/dist/expressions/lang/environment.d.ts +54 -0
  497. package/dist/expressions/lang/environment.d.ts.map +1 -0
  498. package/dist/expressions/lang/environment.js +115 -0
  499. package/dist/expressions/lang/environment.js.map +1 -0
  500. package/dist/expressions/lang/generated/conformance.json.d.ts +4962 -0
  501. package/dist/expressions/lang/generated/index.cjs +18 -0
  502. package/dist/expressions/lang/generated/index.cjs.map +1 -0
  503. package/dist/expressions/lang/generated/index.d.ts +9 -0
  504. package/dist/expressions/lang/generated/index.d.ts.map +1 -0
  505. package/dist/expressions/lang/generated/index.js +18 -0
  506. package/dist/expressions/lang/generated/index.js.map +1 -0
  507. package/dist/expressions/lang/generated/languages.json.cjs +18 -0
  508. package/dist/expressions/lang/generated/languages.json.cjs.map +1 -0
  509. package/dist/expressions/lang/generated/languages.json.d.ts +2305 -0
  510. package/dist/expressions/lang/generated/languages.json.js +18 -0
  511. package/dist/expressions/lang/generated/languages.json.js.map +1 -0
  512. package/dist/expressions/lang/generated/spec.json.cjs +12 -0
  513. package/dist/expressions/lang/generated/spec.json.cjs.map +1 -0
  514. package/dist/expressions/lang/generated/spec.json.d.ts +6260 -0
  515. package/dist/expressions/lang/generated/spec.json.js +12 -0
  516. package/dist/expressions/lang/generated/spec.json.js.map +1 -0
  517. package/dist/expressions/lang/hover.cjs +106 -0
  518. package/dist/expressions/lang/hover.cjs.map +1 -0
  519. package/dist/expressions/lang/hover.d.ts +54 -0
  520. package/dist/expressions/lang/hover.d.ts.map +1 -0
  521. package/dist/expressions/lang/hover.js +106 -0
  522. package/dist/expressions/lang/hover.js.map +1 -0
  523. package/dist/expressions/lang/index.cjs +87 -0
  524. package/dist/expressions/lang/index.cjs.map +1 -0
  525. package/dist/expressions/lang/index.d.ts +65 -0
  526. package/dist/expressions/lang/index.d.ts.map +1 -0
  527. package/dist/expressions/lang/index.js +90 -0
  528. package/dist/expressions/lang/index.js.map +1 -0
  529. package/dist/expressions/lang/merge.cjs +52 -0
  530. package/dist/expressions/lang/merge.cjs.map +1 -0
  531. package/dist/expressions/lang/merge.d.ts +12 -0
  532. package/dist/expressions/lang/merge.d.ts.map +1 -0
  533. package/dist/expressions/lang/merge.js +52 -0
  534. package/dist/expressions/lang/merge.js.map +1 -0
  535. package/dist/expressions/lang/prefix.cjs +91 -0
  536. package/dist/expressions/lang/prefix.cjs.map +1 -0
  537. package/dist/expressions/lang/prefix.d.ts +36 -0
  538. package/dist/expressions/lang/prefix.d.ts.map +1 -0
  539. package/dist/expressions/lang/prefix.js +91 -0
  540. package/dist/expressions/lang/prefix.js.map +1 -0
  541. package/dist/expressions/lang/spec.d.ts +13 -0
  542. package/dist/expressions/lang/spec.d.ts.map +1 -0
  543. package/dist/expressions/lang/theme.cjs +97 -0
  544. package/dist/expressions/lang/theme.cjs.map +1 -0
  545. package/dist/expressions/lang/theme.d.ts +6 -0
  546. package/dist/expressions/lang/theme.d.ts.map +1 -0
  547. package/dist/expressions/lang/theme.js +97 -0
  548. package/dist/expressions/lang/theme.js.map +1 -0
  549. package/dist/expressions/lang/types.d.ts +81 -0
  550. package/dist/expressions/lang/types.d.ts.map +1 -0
  551. package/dist/expressions/playground/ExpressionPlayground.cjs +308 -0
  552. package/dist/expressions/playground/ExpressionPlayground.cjs.map +1 -0
  553. package/dist/expressions/playground/ExpressionPlayground.d.ts +42 -0
  554. package/dist/expressions/playground/ExpressionPlayground.d.ts.map +1 -0
  555. package/dist/expressions/playground/ExpressionPlayground.js +291 -0
  556. package/dist/expressions/playground/ExpressionPlayground.js.map +1 -0
  557. package/dist/expressions/playground/RunControls.cjs +51 -0
  558. package/dist/expressions/playground/RunControls.cjs.map +1 -0
  559. package/dist/expressions/playground/RunControls.d.ts +7 -0
  560. package/dist/expressions/playground/RunControls.d.ts.map +1 -0
  561. package/dist/expressions/playground/RunControls.js +51 -0
  562. package/dist/expressions/playground/RunControls.js.map +1 -0
  563. package/dist/expressions/playground/VerticalSplit.cjs +109 -0
  564. package/dist/expressions/playground/VerticalSplit.cjs.map +1 -0
  565. package/dist/expressions/playground/VerticalSplit.d.ts +23 -0
  566. package/dist/expressions/playground/VerticalSplit.d.ts.map +1 -0
  567. package/dist/expressions/playground/VerticalSplit.js +109 -0
  568. package/dist/expressions/playground/VerticalSplit.js.map +1 -0
  569. package/dist/expressions/playground/api.cjs +49 -0
  570. package/dist/expressions/playground/api.cjs.map +1 -0
  571. package/dist/expressions/playground/api.d.ts +53 -0
  572. package/dist/expressions/playground/api.d.ts.map +1 -0
  573. package/dist/expressions/playground/api.js +49 -0
  574. package/dist/expressions/playground/api.js.map +1 -0
  575. package/dist/expressions/playground/languages.cjs +88 -0
  576. package/dist/expressions/playground/languages.cjs.map +1 -0
  577. package/dist/expressions/playground/languages.d.ts +43 -0
  578. package/dist/expressions/playground/languages.d.ts.map +1 -0
  579. package/dist/expressions/playground/languages.js +88 -0
  580. package/dist/expressions/playground/languages.js.map +1 -0
  581. package/dist/expressions/playground/panels/GraphPanel.cjs +72 -0
  582. package/dist/expressions/playground/panels/GraphPanel.cjs.map +1 -0
  583. package/dist/expressions/playground/panels/GraphPanel.d.ts +19 -0
  584. package/dist/expressions/playground/panels/GraphPanel.d.ts.map +1 -0
  585. package/dist/expressions/playground/panels/GraphPanel.js +72 -0
  586. package/dist/expressions/playground/panels/GraphPanel.js.map +1 -0
  587. package/dist/expressions/playground/panels/ResultPanel.cjs +82 -0
  588. package/dist/expressions/playground/panels/ResultPanel.cjs.map +1 -0
  589. package/dist/expressions/playground/panels/ResultPanel.d.ts +11 -0
  590. package/dist/expressions/playground/panels/ResultPanel.d.ts.map +1 -0
  591. package/dist/expressions/playground/panels/ResultPanel.js +82 -0
  592. package/dist/expressions/playground/panels/ResultPanel.js.map +1 -0
  593. package/dist/expressions/playground/panels/SpecPanel.cjs +76 -0
  594. package/dist/expressions/playground/panels/SpecPanel.cjs.map +1 -0
  595. package/dist/expressions/playground/panels/SpecPanel.d.ts +18 -0
  596. package/dist/expressions/playground/panels/SpecPanel.d.ts.map +1 -0
  597. package/dist/expressions/playground/panels/SpecPanel.js +76 -0
  598. package/dist/expressions/playground/panels/SpecPanel.js.map +1 -0
  599. package/dist/expressions/playground/panels/TokensPanel.cjs +89 -0
  600. package/dist/expressions/playground/panels/TokensPanel.cjs.map +1 -0
  601. package/dist/expressions/playground/panels/TokensPanel.d.ts +15 -0
  602. package/dist/expressions/playground/panels/TokensPanel.d.ts.map +1 -0
  603. package/dist/expressions/playground/panels/TokensPanel.js +72 -0
  604. package/dist/expressions/playground/panels/TokensPanel.js.map +1 -0
  605. package/dist/expressions/playground/panels/graphNodes.cjs +35 -0
  606. package/dist/expressions/playground/panels/graphNodes.cjs.map +1 -0
  607. package/dist/expressions/playground/panels/graphNodes.d.ts +19 -0
  608. package/dist/expressions/playground/panels/graphNodes.d.ts.map +1 -0
  609. package/dist/expressions/playground/panels/graphNodes.js +35 -0
  610. package/dist/expressions/playground/panels/graphNodes.js.map +1 -0
  611. package/dist/expressions/playground/runAction.cjs +12 -0
  612. package/dist/expressions/playground/runAction.cjs.map +1 -0
  613. package/dist/expressions/playground/runAction.d.ts +15 -0
  614. package/dist/expressions/playground/runAction.d.ts.map +1 -0
  615. package/dist/expressions/playground/runAction.js +12 -0
  616. package/dist/expressions/playground/runAction.js.map +1 -0
  617. package/dist/expressions/playground/runShortcut.cjs +9 -0
  618. package/dist/expressions/playground/runShortcut.cjs.map +1 -0
  619. package/dist/expressions/playground/runShortcut.d.ts +2 -0
  620. package/dist/expressions/playground/runShortcut.d.ts.map +1 -0
  621. package/dist/expressions/playground/runShortcut.js +9 -0
  622. package/dist/expressions/playground/runShortcut.js.map +1 -0
  623. package/dist/expressions/playground/useEditorTheme.cjs +40 -0
  624. package/dist/expressions/playground/useEditorTheme.cjs.map +1 -0
  625. package/dist/expressions/playground/useEditorTheme.d.ts +16 -0
  626. package/dist/expressions/playground/useEditorTheme.d.ts.map +1 -0
  627. package/dist/expressions/playground/useEditorTheme.js +23 -0
  628. package/dist/expressions/playground/useEditorTheme.js.map +1 -0
  629. package/dist/expressions/playground/useEvaluator.cjs +72 -0
  630. package/dist/expressions/playground/useEvaluator.cjs.map +1 -0
  631. package/dist/expressions/playground/useEvaluator.d.ts +25 -0
  632. package/dist/expressions/playground/useEvaluator.d.ts.map +1 -0
  633. package/dist/expressions/playground/useEvaluator.js +72 -0
  634. package/dist/expressions/playground/useEvaluator.js.map +1 -0
  635. package/dist/expressions/playground/useParsedInput.cjs +22 -0
  636. package/dist/expressions/playground/useParsedInput.cjs.map +1 -0
  637. package/dist/expressions/playground/useParsedInput.d.ts +20 -0
  638. package/dist/expressions/playground/useParsedInput.d.ts.map +1 -0
  639. package/dist/expressions/playground/useParsedInput.js +22 -0
  640. package/dist/expressions/playground/useParsedInput.js.map +1 -0
  641. package/dist/expressions/playground/verticalSplitModel.cjs +11 -0
  642. package/dist/expressions/playground/verticalSplitModel.cjs.map +1 -0
  643. package/dist/expressions/playground/verticalSplitModel.d.ts +3 -0
  644. package/dist/expressions/playground/verticalSplitModel.d.ts.map +1 -0
  645. package/dist/expressions/playground/verticalSplitModel.js +11 -0
  646. package/dist/expressions/playground/verticalSplitModel.js.map +1 -0
  647. package/dist/expressions/playground.cjs +18 -0
  648. package/dist/expressions/playground.cjs.map +1 -0
  649. package/dist/expressions/playground.d.ts +18 -0
  650. package/dist/expressions/playground.d.ts.map +1 -0
  651. package/dist/expressions/playground.js +18 -0
  652. package/dist/expressions/playground.js.map +1 -0
  653. package/dist/expressions.cjs +28 -0
  654. package/dist/expressions.cjs.map +1 -0
  655. package/dist/expressions.d.ts +10 -0
  656. package/dist/expressions.d.ts.map +1 -0
  657. package/dist/expressions.js +28 -0
  658. package/dist/expressions.js.map +1 -0
  659. package/dist/hooks/density-provider.d.ts +1 -1
  660. package/dist/hooks/theme-provider.d.ts +1 -1
  661. package/dist/hooks/use-density.d.ts +1 -1
  662. package/dist/hooks/use-resource-clock.cjs +14 -0
  663. package/dist/hooks/use-resource-clock.cjs.map +1 -0
  664. package/dist/hooks/use-resource-clock.d.ts +2 -0
  665. package/dist/hooks/use-resource-clock.d.ts.map +1 -0
  666. package/dist/hooks/use-resource-clock.js +14 -0
  667. package/dist/hooks/use-resource-clock.js.map +1 -0
  668. package/dist/hooks/use-task-run.cjs +25 -18
  669. package/dist/hooks/use-task-run.cjs.map +1 -1
  670. package/dist/hooks/use-task-run.d.ts.map +1 -1
  671. package/dist/hooks/use-task-run.js +26 -19
  672. package/dist/hooks/use-task-run.js.map +1 -1
  673. package/dist/hooks/use-theme.d.ts +1 -1
  674. package/dist/icons/registry.d.ts +1 -1
  675. package/dist/icons/types.d.ts +1 -1
  676. package/dist/index.cjs +14 -0
  677. package/dist/index.cjs.map +1 -1
  678. package/dist/index.js +14 -0
  679. package/dist/index.js.map +1 -1
  680. package/dist/layout/AppShell.d.ts +1 -1
  681. package/dist/layout/AppShell.nav.drag.d.ts +1 -1
  682. package/dist/layout/AppSidebar.d.ts +1 -1
  683. package/dist/layout/Panel.d.ts +1 -1
  684. package/dist/layout/PanelFrame.d.ts +1 -1
  685. package/dist/layout/Section.d.ts +1 -1
  686. package/dist/layout/SplitPane.d.ts +1 -1
  687. package/dist/layout/Tabs.d.ts +1 -1
  688. package/dist/layout/Workspace.d.ts +1 -1
  689. package/dist/layout/Workspace.model.d.ts +1 -1
  690. package/dist/lib/combobox-values.d.ts +1 -1
  691. package/dist/monaco/MonacoEditor.cjs +3 -3
  692. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  693. package/dist/monaco/MonacoEditor.js +2 -2
  694. package/dist/monaco/MonacoEditor.js.map +1 -1
  695. package/dist/monaco/types.d.ts +1 -1
  696. package/dist/monaco/use-monaco-worker.d.ts +1 -1
  697. package/dist/overlay/CellActions.d.ts +1 -1
  698. package/dist/overlay/CommandPalette.d.ts +2 -2
  699. package/dist/overlay/CommandPalette.model.d.ts +1 -1
  700. package/dist/overlay/CommandPaletteList.d.ts +1 -1
  701. package/dist/overlay/DropdownMenu.d.ts +1 -1
  702. package/dist/overlay/HoverCard.d.ts +1 -1
  703. package/dist/overlay/Modal.d.ts +2 -2
  704. package/dist/overlay/Toast.d.ts +1 -1
  705. package/dist/overlay/TourCard.d.ts +1 -1
  706. package/dist/overlay/TourProvider.d.ts +1 -1
  707. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  708. package/dist/overlay/toast-context.d.ts +2 -2
  709. package/dist/overlay/tour-context.d.ts +1 -1
  710. package/dist/overlay/tour-types.d.ts +1 -1
  711. package/dist/profiles/connections/connectionBrowserModel.d.ts +1 -1
  712. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +1 -1
  713. package/dist/profiles/editor/profileBuilder.d.ts +1 -1
  714. package/dist/profiles/elasticsearch/esParamOperandExtension.d.ts +1 -1
  715. package/dist/profiles/fields/profileFieldControls.d.ts +1 -1
  716. package/dist/profiles/fields/profileFieldIcons.d.ts +1 -1
  717. package/dist/profiles/fields/profileFieldState.d.ts +1 -1
  718. package/dist/profiles/query/jsonPathSample.d.ts +1 -1
  719. package/dist/profiles/query/jsonPathSampleRow.d.ts +1 -1
  720. package/dist/profiles/query/prometheusResults.d.ts +2 -2
  721. package/dist/rpc/EndpointList.d.ts +1 -1
  722. package/dist/rpc/EntityExplorerApp.d.ts +1 -1
  723. package/dist/rpc/OperationCatalog.d.ts +1 -1
  724. package/dist/rpc/OperationEntityContextPicker.d.ts +1 -1
  725. package/dist/rpc/OperationEntityPage.d.ts +1 -1
  726. package/dist/rpc/OperationResultView.d.ts +1 -1
  727. package/dist/rpc/RouterProvider.d.ts +1 -1
  728. package/dist/rpc/SchemaActionForm.d.ts +1 -1
  729. package/dist/rpc/formMetadata.d.ts +1 -1
  730. package/dist/rpc/router.d.ts +1 -1
  731. package/dist/rpc/rpc-story.fixtures.d.ts +1 -1
  732. package/dist/styles.css +1 -1
  733. package/package.json +21 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/data/ai/PromptRunEditor/index.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { Button } from \"../../../components/button\";\nimport type { JsonSchemaObject } from \"../../../components/json-schema-form-types\";\nimport { UiAdd, UiGearSix, UiLayers, UiTrash } from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { Modal } from \"../../../overlay/Modal\";\nimport { Icon } from \"../../Icon\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../../chat/effort-icons\";\nimport { AttachmentButton, AttachmentList } from \"../../chat/Attachment\";\nimport {\n createAttachmentUploadAdapter,\n type AttachmentFilePart,\n type AttachmentLimits,\n type AttachmentUploadAdapter,\n} from \"../../chat/attachment-upload\";\nimport type { ChatModel, ToolMeta } from \"../../chat/types\";\nimport type { FileUIPart } from \"../../chat/types\";\nimport { RuntimeBar } from \"../../runtime/RuntimeBar\";\nimport { runtimeModelForValue } from \"../../runtime/RuntimeBar.model\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n type SpecRuntimeFamily,\n labelForMode,\n} from \"../../runtime/runtime-mode\";\nimport { SpecRuntimeEditor } from \"../SpecRuntimeEditor\";\nimport type { SpecRuntimeSandboxCreateConfig } from \"../SandboxCreateWizard.model\";\nimport type { SpecRuntimeCLIOptions } from \"../SpecRuntimeEditor/CLIArgsSection\";\nimport type { SpecRuntimeSandboxCatalog } from \"../SpecRuntimeEditor/types\";\nimport type {\n SpecRuntimeSecretSelectorConfig,\n SpecSectionId,\n} from \"../SpecRuntimeEditor/types\";\nimport { withPrompt } from \"../SpecRuntimeEditor/update\";\nimport type { AISpecRuntimePermissionCatalog } from \"../SpecRuntimeEditor.model\";\nimport type {\n ResolvedRuntimeProfile,\n ResolvedRuntimeSpec,\n RuntimePreset,\n RuntimeProfile,\n RuntimeProfileResolveRequest,\n} from \"../runtime-profile\";\nimport { authoredRuntimeSpec } from \"../../../lib/runtime-profile-model\";\nimport { RuntimeProfilePicker } from \"../runtime-profiles/RuntimeProfilePicker\";\nimport {\n inheritedRuntime,\n profileForRef,\n} from \"../runtime-profiles/RuntimeProfilePicker.model\";\nimport { useRuntimeProfilePicker } from \"../runtime-profiles/use-runtime-profile-picker\";\nimport { runtimeRows, withRuntimeRows, type AIPromptRunValue } from \"./model\";\nimport { VariablesField } from \"./VariablesField\";\n\nexport type PromptRunEditorProps = {\n value: AIPromptRunValue;\n onChange: (value: AIPromptRunValue) => void;\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n tools?: ToolMeta[] | undefined;\n permissionCatalog?: AISpecRuntimePermissionCatalog | undefined;\n secretSelector?: SpecRuntimeSecretSelectorConfig | undefined;\n cliOptions?: SpecRuntimeCLIOptions | undefined;\n /** Sandbox adapter catalog; enables the spec editor's Sandbox section. */\n sandboxCatalog?: SpecRuntimeSandboxCatalog | undefined;\n /** Host-owned sandbox creation and credential-reference adapter. */\n sandboxCreate?: SpecRuntimeSandboxCreateConfig | undefined;\n reasoningEfforts?: string[] | undefined;\n\n /** Schema-driven variables form; omit to render a raw-JSON editor. */\n variablesSchema?: JsonSchemaObject | undefined;\n /** Fires false while raw-JSON variables fail to parse; always true with a schema. */\n onVariablesValidityChange?: ((valid: boolean) => void) | undefined;\n\n /** Host-supplied editor for the `prompt.user` override; defaults to a textarea. */\n promptEditor?: ReactNode | undefined;\n promptLabel?: string | undefined;\n promptPlaceholder?: string | undefined;\n enableAttachments?: boolean | undefined;\n attachmentUpload?: AttachmentUploadAdapter | undefined;\n attachmentLimits?: AttachmentLimits | undefined;\n\n /** Extra fields injected inside the Runtime block, below Model/Effort. */\n children?: ReactNode | undefined;\n header?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n className?: string | undefined;\n\n editSpecLabel?: string | undefined;\n specModalTitle?: string | undefined;\n /** Restrict which SpecRuntimeEditor sections the \"Edit spec\" modal shows. */\n specSections?: readonly SpecSectionId[] | undefined;\n\n /** Saved runtime profiles; enables the profile picker inside the spec modal. */\n profiles?: RuntimeProfile[] | undefined;\n /** Presets the profiles reference, for ordering and inherited model/mode. */\n presets?: RuntimePreset[] | undefined;\n onSaveProfile?:\n | ((profile: RuntimeProfile) => Promise<RuntimeProfile>)\n | undefined;\n onCreateProfile?:\n | ((profile: RuntimeProfile) => Promise<RuntimeProfile>)\n | undefined;\n onResolveProfile?:\n | ((\n request: RuntimeProfileResolveRequest,\n ) => Promise<ResolvedRuntimeProfile>)\n | undefined;\n /** The last render's resolved spec and layer trace. */\n resolution?: ResolvedRuntimeSpec | undefined;\n};\n\n// The inline \"prompt + variables + runtime\" composer shared by captain's prompt\n// workbench and gavel's todo run dialog. It edits Captain's complete prompt-run\n// request without making hosts project that contract into editor-specific state.\n// Hosts should mount it with a `key` per prompt/todo so internal draft state\n// (raw-JSON text, modal open) resets on selection change.\nexport function PromptRunEditor({\n value,\n onChange,\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n tools = [],\n permissionCatalog,\n secretSelector,\n cliOptions,\n sandboxCatalog,\n sandboxCreate,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n variablesSchema,\n onVariablesValidityChange,\n promptEditor,\n promptLabel = \"User prompt\",\n promptPlaceholder = \"Override the rendered user prompt\",\n enableAttachments = false,\n attachmentUpload,\n attachmentLimits,\n children,\n header,\n footer,\n className,\n editSpecLabel = \"Edit spec\",\n specModalTitle = \"Runtime spec\",\n specSections,\n profiles,\n presets = [],\n onSaveProfile,\n onCreateProfile,\n onResolveProfile,\n resolution,\n}: PromptRunEditorProps) {\n const [specOpen, setSpecOpen] = useState(false);\n const spec = value.spec ?? {};\n const rows = runtimeRows(value);\n const selectedModel = runtimeModelForValue(models, spec);\n const picker = useRuntimeProfilePicker({\n value,\n onChange,\n profiles: profiles ?? [],\n presets,\n onSaveProfile,\n onCreateProfile,\n onResolveProfile,\n });\n const profileDraft =\n profiles !== undefined && picker.state.layer === \"profile\"\n ? picker.state.draft\n : undefined;\n const runRuntime = inheritedRuntime({\n draft: picker.state.draft,\n presets,\n resolution,\n });\n const presetRuntime = profileDraft\n ? authoredRuntimeSpec({ ...profileDraft, spec: {} }, presets)\n : {};\n const editorRuntime = profileDraft ? presetRuntime : runRuntime;\n const selectedProfile = profileForRef(value.runtimeProfile, profiles ?? []);\n const resolvedAttachmentUpload = useMemo(\n () => attachmentUpload ?? createAttachmentUploadAdapter(),\n [attachmentUpload],\n );\n const attachmentFiles: FileUIPart[] = (spec.prompt?.attachments ?? []).map(\n (attachment) => ({\n type: \"file\",\n url: attachment.id\n ? `/api/attachments/${attachment.id}`\n : (attachment.url ?? \"\"),\n mediaType: attachment.mediaType ?? \"application/octet-stream\",\n ...(attachment.id ? { attachmentId: attachment.id } : {}),\n ...(attachment.size != null ? { size: attachment.size } : {}),\n ...(attachment.filename ? { filename: attachment.filename } : {}),\n ...(!attachment.filename && attachment.path\n ? { filename: attachment.path }\n : {}),\n }),\n ) as FileUIPart[];\n\n return (\n <div className={cn(\"grid gap-density-4\", className)}>\n {header}\n\n <Block title=\"Runtime\">\n <div className=\"grid gap-density-2\">\n {rows.map((runtime, index) => (\n <div\n key={index}\n role=\"group\"\n aria-label={`Runtime ${index + 1}`}\n className=\"flex min-w-0 items-center gap-density-2\"\n >\n <RuntimeBar\n value={runtime}\n onChange={(next) =>\n onChange(\n withRuntimeRows(\n value,\n rows.map((item, itemIndex) =>\n itemIndex === index ? next : item,\n ),\n ),\n )\n }\n models={models}\n families={families}\n reasoningEfforts={reasoningEfforts}\n ariaLabel={`Runtime ${index + 1} controls`}\n />\n {rows.length > 1 && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n aria-label={`Remove runtime ${index + 1}`}\n onClick={() =>\n onChange(\n withRuntimeRows(\n value,\n rows.filter((_, itemIndex) => itemIndex !== index),\n ),\n )\n }\n >\n <Icon icon={UiTrash} className=\"size-4\" />\n </Button>\n )}\n </div>\n ))}\n <div className=\"flex flex-wrap items-center gap-density-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n aria-label=\"Add runtime\"\n onClick={() =>\n onChange(\n withRuntimeRows(value, [\n ...rows,\n rows[0]?.mode ? { mode: rows[0].mode } : {},\n ]),\n )\n }\n >\n <Icon icon={UiAdd} className=\"size-4\" />\n Add runtime\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setSpecOpen(true)}\n >\n <Icon icon={UiGearSix} className=\"size-4\" />\n {editSpecLabel}\n </Button>\n {value.runtimeProfile && (\n <span\n data-testid=\"runtime-profile-chip\"\n className=\"inline-flex items-center gap-1 rounded-full border border-violet-500/30 bg-violet-500/10 px-2 py-0.5 text-xs font-medium text-violet-700 dark:text-violet-300\"\n >\n <Icon icon={UiLayers} className=\"size-3.5\" />\n Profile · {selectedProfile?.name ?? value.runtimeProfile}\n </span>\n )}\n </div>\n </div>\n {children}\n </Block>\n\n <Block title=\"Variables\">\n <VariablesField\n {...(variablesSchema ? { schema: variablesSchema } : {})}\n value={value.variables ?? {}}\n onChange={(variables) => onChange({ ...value, variables })}\n {...(onVariablesValidityChange\n ? { onValidityChange: onVariablesValidityChange }\n : {})}\n />\n </Block>\n\n <Block title={promptLabel}>\n {promptEditor ?? (\n <textarea\n value={spec.prompt?.user ?? \"\"}\n onChange={(event) =>\n onChange({\n ...value,\n spec: withPrompt(spec, { user: event.target.value }),\n })\n }\n spellCheck={false}\n placeholder={promptPlaceholder}\n aria-label={promptLabel}\n className=\"min-h-[7rem] w-full resize-y rounded-md border border-border bg-background px-density-2 py-density-1 text-sm outline-none focus:ring-2 focus:ring-ring\"\n />\n )}\n {enableAttachments && (\n <div className=\"space-y-density-2\">\n <AttachmentList\n files={attachmentFiles}\n onRemove={(index) =>\n onChange({\n ...value,\n spec: withPrompt(spec, {\n attachments: (spec.prompt?.attachments ?? []).filter(\n (_, itemIndex) => itemIndex !== index,\n ),\n }),\n })\n }\n />\n <AttachmentButton\n files={attachmentFiles}\n upload={resolvedAttachmentUpload}\n onAdd={(parts) =>\n onChange({\n ...value,\n spec: withPrompt(spec, {\n attachments: [\n ...(spec.prompt?.attachments ?? []),\n ...parts.map((part) => {\n const uploaded = part as AttachmentFilePart;\n return {\n id: uploaded.attachmentId,\n mediaType: uploaded.mediaType,\n size: uploaded.size,\n ...(uploaded.filename\n ? { filename: uploaded.filename }\n : {}),\n };\n }),\n ],\n }),\n })\n }\n {...(selectedModel?.inputMediaTypes\n ? { acceptedMediaTypes: selectedModel.inputMediaTypes }\n : {})}\n {...(attachmentLimits ? { limits: attachmentLimits } : {})}\n />\n </div>\n )}\n </Block>\n\n {footer}\n\n <Modal\n open={specOpen}\n onClose={() => setSpecOpen(false)}\n title={specModalTitle}\n size=\"full\"\n closeOnEsc\n className=\"h-[95vh]\"\n >\n <SpecRuntimeEditor\n value={profileDraft ? profileDraft.spec : spec}\n onChange={(next) =>\n profileDraft\n ? picker.editDraft({ ...profileDraft, spec: next })\n : onChange({ ...value, spec: next })\n }\n models={models}\n families={families}\n tools={tools}\n effectiveModel={editorRuntime.model}\n effectiveMode={editorRuntime.mode}\n {...(permissionCatalog ? { permissionCatalog } : {})}\n {...(secretSelector ? { secretSelector } : {})}\n {...(cliOptions ? { cliOptions } : {})}\n {...(sandboxCatalog ? { sandboxCatalog } : {})}\n {...(sandboxCreate ? { sandboxCreate } : {})}\n {...(specSections ? { sections: specSections } : {})}\n {...(profiles !== undefined\n ? {\n beforeSections: (\n <RuntimeProfilePicker\n controller={picker}\n profiles={profiles}\n presets={presets}\n resolution={resolution}\n effectiveRuntime={runRuntime}\n />\n ),\n }\n : {})}\n onSave={() => setSpecOpen(false)}\n onCancel={() => setSpecOpen(false)}\n saveLabel=\"Done\"\n footerStatus={\n profileDraft\n ? `Editing profile «${profileDraft.name}»`\n : labelForMode(spec.mode, families)\n }\n />\n </Modal>\n </div>\n );\n}\n\nfunction Block({ title, children }: { title: string; children: ReactNode }) {\n return (\n <section className=\"space-y-density-2\">\n <div className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {title}\n </div>\n {children}\n </section>\n );\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/data/ai/PromptRunEditor/index.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { Button } from \"../../../components/button\";\nimport type { JsonSchemaObject } from \"../../../components/json-schema-form-types\";\nimport type { FixtureFenceSchemas } from \"../../FixtureEditor/types\";\nimport { UiAdd, UiGearSix, UiLayers, UiTrash } from \"../../../icons\";\nimport { cn } from \"../../../lib/utils\";\nimport { Modal } from \"../../../overlay/Modal\";\nimport { Icon } from \"../../Icon\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../../chat/effort-icons\";\nimport { AttachmentButton, AttachmentList } from \"../../chat/Attachment\";\nimport {\n createAttachmentUploadAdapter,\n type AttachmentFilePart,\n type AttachmentLimits,\n type AttachmentUploadAdapter,\n} from \"../../chat/attachment-upload\";\nimport type { ChatModel, ToolMeta } from \"../../chat/types\";\nimport type { FileUIPart } from \"../../chat/types\";\nimport { RuntimeBar } from \"../../runtime/RuntimeBar\";\nimport { runtimeModelForValue } from \"../../runtime/RuntimeBar.model\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n type SpecRuntimeFamily,\n labelForMode,\n} from \"../../runtime/runtime-mode\";\nimport { SpecRuntimeEditor } from \"../SpecRuntimeEditor\";\nimport type { SpecRuntimeSandboxCreateConfig } from \"../SandboxCreateWizard.model\";\nimport type { SpecRuntimeCLIOptions } from \"../SpecRuntimeEditor/CLIArgsSection\";\nimport type { SpecRuntimeSandboxCatalog } from \"../SpecRuntimeEditor/types\";\nimport type {\n SpecRuntimeSecretSelectorConfig,\n SpecSectionId,\n} from \"../SpecRuntimeEditor/types\";\nimport { withPrompt } from \"../SpecRuntimeEditor/update\";\nimport type { AISpecRuntimePermissionCatalog } from \"../SpecRuntimeEditor.model\";\nimport type {\n ResolvedRuntimeProfile,\n ResolvedRuntimeSpec,\n RuntimePreset,\n RuntimeProfile,\n RuntimeProfileResolveRequest,\n} from \"../runtime-profile\";\nimport { authoredRuntimeSpec } from \"../../../lib/runtime-profile-model\";\nimport { RuntimeProfilePicker } from \"../runtime-profiles/RuntimeProfilePicker\";\nimport {\n inheritedRuntime,\n profileForRef,\n} from \"../runtime-profiles/RuntimeProfilePicker.model\";\nimport { useRuntimeProfilePicker } from \"../runtime-profiles/use-runtime-profile-picker\";\nimport { runtimeRows, withRuntimeRows, type AIPromptRunValue } from \"./model\";\nimport { VariablesField } from \"./VariablesField\";\n\nexport type PromptRunEditorProps = {\n value: AIPromptRunValue;\n onChange: (value: AIPromptRunValue) => void;\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n tools?: ToolMeta[] | undefined;\n permissionCatalog?: AISpecRuntimePermissionCatalog | undefined;\n secretSelector?: SpecRuntimeSecretSelectorConfig | undefined;\n cliOptions?: SpecRuntimeCLIOptions | undefined;\n /** Runner schemas keyed by fixture kind or fence info, used by the verification editor. */\n fixtureSchemas?: FixtureFenceSchemas | undefined;\n /** Sandbox adapter catalog; enables the spec editor's Sandbox section. */\n sandboxCatalog?: SpecRuntimeSandboxCatalog | undefined;\n /** Host-owned sandbox creation and credential-reference adapter. */\n sandboxCreate?: SpecRuntimeSandboxCreateConfig | undefined;\n reasoningEfforts?: string[] | undefined;\n\n /** Schema-driven variables form; omit to render a raw-JSON editor. */\n variablesSchema?: JsonSchemaObject | undefined;\n /** Fires false while raw-JSON variables fail to parse; always true with a schema. */\n onVariablesValidityChange?: ((valid: boolean) => void) | undefined;\n\n /** Host-supplied editor for the `prompt.user` override; defaults to a textarea. */\n promptEditor?: ReactNode | undefined;\n promptLabel?: string | undefined;\n promptPlaceholder?: string | undefined;\n enableAttachments?: boolean | undefined;\n attachmentUpload?: AttachmentUploadAdapter | undefined;\n attachmentLimits?: AttachmentLimits | undefined;\n\n /** Extra fields injected inside the Runtime block, below Model/Effort. */\n children?: ReactNode | undefined;\n header?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n className?: string | undefined;\n\n editSpecLabel?: string | undefined;\n specModalTitle?: string | undefined;\n /** Restrict which SpecRuntimeEditor sections the \"Edit spec\" modal shows. */\n specSections?: readonly SpecSectionId[] | undefined;\n\n /** Saved runtime profiles; enables the profile picker inside the spec modal. */\n profiles?: RuntimeProfile[] | undefined;\n /** Presets the profiles reference, for ordering and inherited model/mode. */\n presets?: RuntimePreset[] | undefined;\n onSaveProfile?:\n | ((profile: RuntimeProfile) => Promise<RuntimeProfile>)\n | undefined;\n onCreateProfile?:\n | ((profile: RuntimeProfile) => Promise<RuntimeProfile>)\n | undefined;\n onResolveProfile?:\n | ((\n request: RuntimeProfileResolveRequest,\n ) => Promise<ResolvedRuntimeProfile>)\n | undefined;\n /** The last render's resolved spec and layer trace. */\n resolution?: ResolvedRuntimeSpec | undefined;\n};\n\n// The inline \"prompt + variables + runtime\" composer shared by captain's prompt\n// workbench and gavel's todo run dialog. It edits Captain's complete prompt-run\n// request without making hosts project that contract into editor-specific state.\n// Hosts should mount it with a `key` per prompt/todo so internal draft state\n// (raw-JSON text, modal open) resets on selection change.\nexport function PromptRunEditor({\n value,\n onChange,\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n tools = [],\n permissionCatalog,\n secretSelector,\n cliOptions,\n fixtureSchemas,\n sandboxCatalog,\n sandboxCreate,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n variablesSchema,\n onVariablesValidityChange,\n promptEditor,\n promptLabel = \"User prompt\",\n promptPlaceholder = \"Override the rendered user prompt\",\n enableAttachments = false,\n attachmentUpload,\n attachmentLimits,\n children,\n header,\n footer,\n className,\n editSpecLabel = \"Edit spec\",\n specModalTitle = \"Runtime spec\",\n specSections,\n profiles,\n presets = [],\n onSaveProfile,\n onCreateProfile,\n onResolveProfile,\n resolution,\n}: PromptRunEditorProps) {\n const [specOpen, setSpecOpen] = useState(false);\n const spec = value.spec ?? {};\n const rows = runtimeRows(value);\n const selectedModel = runtimeModelForValue(models, spec);\n const picker = useRuntimeProfilePicker({\n value,\n onChange,\n profiles: profiles ?? [],\n presets,\n onSaveProfile,\n onCreateProfile,\n onResolveProfile,\n });\n const profileDraft =\n profiles !== undefined && picker.state.layer === \"profile\"\n ? picker.state.draft\n : undefined;\n const runRuntime = inheritedRuntime({\n draft: picker.state.draft,\n presets,\n resolution,\n });\n const presetRuntime = profileDraft\n ? authoredRuntimeSpec({ ...profileDraft, spec: {} }, presets)\n : {};\n const editorRuntime = profileDraft ? presetRuntime : runRuntime;\n const selectedProfile = profileForRef(value.runtimeProfile, profiles ?? []);\n const resolvedAttachmentUpload = useMemo(\n () => attachmentUpload ?? createAttachmentUploadAdapter(),\n [attachmentUpload],\n );\n const attachmentFiles: FileUIPart[] = (spec.prompt?.attachments ?? []).map(\n (attachment) => ({\n type: \"file\",\n url: attachment.id\n ? `/api/attachments/${attachment.id}`\n : (attachment.url ?? \"\"),\n mediaType: attachment.mediaType ?? \"application/octet-stream\",\n ...(attachment.id ? { attachmentId: attachment.id } : {}),\n ...(attachment.size != null ? { size: attachment.size } : {}),\n ...(attachment.filename ? { filename: attachment.filename } : {}),\n ...(!attachment.filename && attachment.path\n ? { filename: attachment.path }\n : {}),\n }),\n ) as FileUIPart[];\n\n return (\n <div className={cn(\"grid gap-density-4\", className)}>\n {header}\n\n <Block title=\"Runtime\">\n <div className=\"grid gap-density-2\">\n {rows.map((runtime, index) => (\n <div\n key={index}\n role=\"group\"\n aria-label={`Runtime ${index + 1}`}\n className=\"flex min-w-0 items-center gap-density-2\"\n >\n <RuntimeBar\n value={runtime}\n onChange={(next) =>\n onChange(\n withRuntimeRows(\n value,\n rows.map((item, itemIndex) =>\n itemIndex === index ? next : item,\n ),\n ),\n )\n }\n models={models}\n effectiveModel={runRuntime.model}\n effectiveMode={runRuntime.mode}\n families={families}\n reasoningEfforts={reasoningEfforts}\n ariaLabel={`Runtime ${index + 1} controls`}\n />\n {rows.length > 1 && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n aria-label={`Remove runtime ${index + 1}`}\n onClick={() =>\n onChange(\n withRuntimeRows(\n value,\n rows.filter((_, itemIndex) => itemIndex !== index),\n ),\n )\n }\n >\n <Icon icon={UiTrash} className=\"size-4\" />\n </Button>\n )}\n </div>\n ))}\n <div className=\"flex flex-wrap items-center gap-density-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n aria-label=\"Add runtime\"\n onClick={() =>\n onChange(\n withRuntimeRows(value, [\n ...rows,\n rows[0]?.mode ? { mode: rows[0].mode } : {},\n ]),\n )\n }\n >\n <Icon icon={UiAdd} className=\"size-4\" />\n Add runtime\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setSpecOpen(true)}\n >\n <Icon icon={UiGearSix} className=\"size-4\" />\n {editSpecLabel}\n </Button>\n {value.runtimeProfile && (\n <span\n data-testid=\"runtime-profile-chip\"\n className=\"inline-flex items-center gap-1 rounded-full border border-violet-500/30 bg-violet-500/10 px-2 py-0.5 text-xs font-medium text-violet-700 dark:text-violet-300\"\n >\n <Icon icon={UiLayers} className=\"size-3.5\" />\n Profile · {selectedProfile?.name ?? value.runtimeProfile}\n </span>\n )}\n </div>\n </div>\n {children}\n </Block>\n\n <Block title=\"Variables\">\n <VariablesField\n {...(variablesSchema ? { schema: variablesSchema } : {})}\n value={value.variables ?? {}}\n onChange={(variables) => onChange({ ...value, variables })}\n {...(onVariablesValidityChange\n ? { onValidityChange: onVariablesValidityChange }\n : {})}\n />\n </Block>\n\n <Block title={promptLabel}>\n {promptEditor ?? (\n <textarea\n value={spec.prompt?.user ?? \"\"}\n onChange={(event) =>\n onChange({\n ...value,\n spec: withPrompt(spec, { user: event.target.value }),\n })\n }\n spellCheck={false}\n placeholder={promptPlaceholder}\n aria-label={promptLabel}\n className=\"min-h-[7rem] w-full resize-y rounded-md border border-border bg-background px-density-2 py-density-1 text-sm outline-none focus:ring-2 focus:ring-ring\"\n />\n )}\n {enableAttachments && (\n <div className=\"space-y-density-2\">\n <AttachmentList\n files={attachmentFiles}\n onRemove={(index) =>\n onChange({\n ...value,\n spec: withPrompt(spec, {\n attachments: (spec.prompt?.attachments ?? []).filter(\n (_, itemIndex) => itemIndex !== index,\n ),\n }),\n })\n }\n />\n <AttachmentButton\n files={attachmentFiles}\n upload={resolvedAttachmentUpload}\n onAdd={(parts) =>\n onChange({\n ...value,\n spec: withPrompt(spec, {\n attachments: [\n ...(spec.prompt?.attachments ?? []),\n ...parts.map((part) => {\n const uploaded = part as AttachmentFilePart;\n return {\n id: uploaded.attachmentId,\n mediaType: uploaded.mediaType,\n size: uploaded.size,\n ...(uploaded.filename\n ? { filename: uploaded.filename }\n : {}),\n };\n }),\n ],\n }),\n })\n }\n {...(selectedModel?.inputMediaTypes\n ? { acceptedMediaTypes: selectedModel.inputMediaTypes }\n : {})}\n {...(attachmentLimits ? { limits: attachmentLimits } : {})}\n />\n </div>\n )}\n </Block>\n\n {footer}\n\n <Modal\n open={specOpen}\n onClose={() => setSpecOpen(false)}\n title={specModalTitle}\n size=\"full\"\n closeOnEsc\n className=\"h-[95vh]\"\n >\n <SpecRuntimeEditor\n value={profileDraft ? profileDraft.spec : spec}\n onChange={(next) =>\n profileDraft\n ? picker.editDraft({ ...profileDraft, spec: next })\n : onChange({ ...value, spec: next })\n }\n models={models}\n families={families}\n tools={tools}\n effectiveModel={editorRuntime.model}\n effectiveMode={editorRuntime.mode}\n {...(permissionCatalog ? { permissionCatalog } : {})}\n {...(secretSelector ? { secretSelector } : {})}\n {...(cliOptions ? { cliOptions } : {})}\n {...(fixtureSchemas ? { fixtureSchemas } : {})}\n {...(sandboxCatalog ? { sandboxCatalog } : {})}\n {...(sandboxCreate ? { sandboxCreate } : {})}\n {...(specSections ? { sections: specSections } : {})}\n {...(profiles !== undefined\n ? {\n beforeSections: (\n <RuntimeProfilePicker\n controller={picker}\n profiles={profiles}\n presets={presets}\n resolution={resolution}\n effectiveRuntime={runRuntime}\n />\n ),\n }\n : {})}\n onSave={() => setSpecOpen(false)}\n onCancel={() => setSpecOpen(false)}\n saveLabel=\"Done\"\n footerStatus={\n profileDraft\n ? `Editing profile «${profileDraft.name}»`\n : labelForMode(spec.mode, families)\n }\n />\n </Modal>\n </div>\n );\n}\n\nfunction Block({ title, children }: { title: string; children: ReactNode }) {\n return (\n <section className=\"space-y-density-2\">\n <div className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {title}\n </div>\n {children}\n </section>\n );\n}\n"],"names":["_a"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ReactNode } from '../../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  export type SessionChatCapabilities = {
3
3
  interrupt: boolean;
4
4
  steer: boolean;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function pendingApprovalRequests(requests) {
4
+ return (requests ?? []).filter(
5
+ (request) => request.state === "pending" && request.kind === "tool_approval"
6
+ );
7
+ }
8
+ exports.pendingApprovalRequests = pendingApprovalRequests;
9
+ //# sourceMappingURL=SessionInspector.approvals-model.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInspector.approvals-model.cjs","sources":["../../../src/data/ai/SessionInspector.approvals-model.ts"],"sourcesContent":["import type { SessionApprovalRequest } from \"./SessionViewer.unified\";\n\n/** Approve or deny one pending approval. */\nexport type ApprovalResolveAction = \"approve\" | \"deny\";\n\n/** Resolves one `session.requests[]` row. Rejecting surfaces the server's\n * refusal text inline on that row (e.g. the prompt run is no longer\n * `waiting`) instead of leaving the Approve/Deny buttons silently inert. */\nexport type ApprovalResolveHandler = (\n approvalId: string,\n action: ApprovalResolveAction,\n message?: string,\n) => void | Promise<void>;\n\n/** The subset of `session.requests[]` the approvals panel surfaces: outstanding\n * tool approvals, regardless of which surface (in-process chat or an external\n * broker) created the request.\n *\n * It lives here rather than beside the panel because it is a selector, not a\n * component, and a module that exports both loses fast refresh for everything\n * in it. Its other caller — the SessionInspector tab badge — only ever wanted\n * the count anyway. */\nexport function pendingApprovalRequests(\n requests: SessionApprovalRequest[] | undefined,\n): SessionApprovalRequest[] {\n return (requests ?? []).filter(\n (request) => request.state === \"pending\" && request.kind === \"tool_approval\",\n );\n}\n"],"names":[],"mappings":";;AAsBO,SAAS,wBACd,UAC0B;AAC1B,UAAQ,YAAY,CAAA,GAAI;AAAA,IACtB,CAAC,YAAY,QAAQ,UAAU,aAAa,QAAQ,SAAS;AAAA,EAAA;AAEjE;;"}
@@ -0,0 +1,17 @@
1
+ import { SessionApprovalRequest } 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[]` the approvals panel surfaces: outstanding
9
+ * tool approvals, regardless of which surface (in-process chat or an external
10
+ * broker) created the request.
11
+ *
12
+ * It lives here rather than beside the panel because it is a selector, not a
13
+ * component, and a module that exports both loses fast refresh for everything
14
+ * in it. Its other caller — the SessionInspector tab badge — only ever wanted
15
+ * the count anyway. */
16
+ export declare function pendingApprovalRequests(requests: SessionApprovalRequest[] | undefined): SessionApprovalRequest[];
17
+ //# sourceMappingURL=SessionInspector.approvals-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInspector.approvals-model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.approvals-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,4CAA4C;AAC5C,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD;;6EAE6E;AAC7E,MAAM,MAAM,sBAAsB,GAAG,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,qBAAqB,EAC7B,OAAO,CAAC,EAAE,MAAM,KACb,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;;;;wBAOwB;AACxB,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,SAAS,GAC7C,sBAAsB,EAAE,CAI1B"}
@@ -0,0 +1,9 @@
1
+ function pendingApprovalRequests(requests) {
2
+ return (requests ?? []).filter(
3
+ (request) => request.state === "pending" && request.kind === "tool_approval"
4
+ );
5
+ }
6
+ export {
7
+ pendingApprovalRequests
8
+ };
9
+ //# sourceMappingURL=SessionInspector.approvals-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInspector.approvals-model.js","sources":["../../../src/data/ai/SessionInspector.approvals-model.ts"],"sourcesContent":["import type { SessionApprovalRequest } from \"./SessionViewer.unified\";\n\n/** Approve or deny one pending approval. */\nexport type ApprovalResolveAction = \"approve\" | \"deny\";\n\n/** Resolves one `session.requests[]` row. Rejecting surfaces the server's\n * refusal text inline on that row (e.g. the prompt run is no longer\n * `waiting`) instead of leaving the Approve/Deny buttons silently inert. */\nexport type ApprovalResolveHandler = (\n approvalId: string,\n action: ApprovalResolveAction,\n message?: string,\n) => void | Promise<void>;\n\n/** The subset of `session.requests[]` the approvals panel surfaces: outstanding\n * tool approvals, regardless of which surface (in-process chat or an external\n * broker) created the request.\n *\n * It lives here rather than beside the panel because it is a selector, not a\n * component, and a module that exports both loses fast refresh for everything\n * in it. Its other caller — the SessionInspector tab badge — only ever wanted\n * the count anyway. */\nexport function pendingApprovalRequests(\n requests: SessionApprovalRequest[] | undefined,\n): SessionApprovalRequest[] {\n return (requests ?? []).filter(\n (request) => request.state === \"pending\" && request.kind === \"tool_approval\",\n );\n}\n"],"names":[],"mappings":"AAsBO,SAAS,wBACd,UAC0B;AAC1B,UAAQ,YAAY,CAAA,GAAI;AAAA,IACtB,CAAC,YAAY,QAAQ,UAAU,aAAa,QAAQ,SAAS;AAAA,EAAA;AAEjE;"}
@@ -0,0 +1,143 @@
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 SessionInspector_panelValues = require("./SessionInspector.panel-values.cjs");
11
+ const SessionInspector_approvalsModel = require("./SessionInspector.approvals-model.cjs");
12
+ const UiClock = require("../../icons/components/UiClock.cjs");
13
+ function SessionApprovalsPanel({
14
+ approvals,
15
+ requests,
16
+ onResolve
17
+ }) {
18
+ var _a;
19
+ const pending = SessionInspector_approvalsModel.pendingApprovalRequests(requests);
20
+ const hasResolvedSummary = Boolean(
21
+ approvals && (approvals.approved || approvals.denied || approvals.cancelled || approvals.expired || ((_a = approvals.denials) == null ? void 0 : _a.length))
22
+ );
23
+ if (!pending.length && !hasResolvedSummary) {
24
+ return /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_panelParts.EmptyState, { children: "No approval metadata." });
25
+ }
26
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-density-4", children: [
27
+ pending.length ? /* @__PURE__ */ jsxRuntime.jsx(
28
+ PendingApprovalsList,
29
+ {
30
+ requests: pending,
31
+ ...onResolve ? { onResolve } : {}
32
+ }
33
+ ) : null,
34
+ hasResolvedSummary ? /* @__PURE__ */ jsxRuntime.jsx(ResolvedApprovalsSummary, { approvals }) : null
35
+ ] });
36
+ }
37
+ function ResolvedApprovalsSummary({
38
+ approvals
39
+ }) {
40
+ var _a;
41
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-density-4", children: [
42
+ /* @__PURE__ */ jsxRuntime.jsx(
43
+ KeyValueList.KeyValueList,
44
+ {
45
+ items: [
46
+ SessionInspector_panelValues.kv("Approved", approvals.approved ?? 0),
47
+ SessionInspector_panelValues.kv("Denied", approvals.denied ?? 0),
48
+ SessionInspector_panelValues.kv("Cancelled", approvals.cancelled ?? 0),
49
+ SessionInspector_panelValues.kv("Expired", approvals.expired ?? 0)
50
+ ]
51
+ }
52
+ ),
53
+ ((_a = approvals.denials) == null ? void 0 : _a.length) ? /* @__PURE__ */ jsxRuntime.jsx(
54
+ SessionInspector_panelParts.SimpleList,
55
+ {
56
+ title: "Denials",
57
+ rows: approvals.denials.map((denial, index) => ({
58
+ key: denial.toolUseId || `${denial.tool}-${index}`,
59
+ title: [denial.tool, denial.toolUseId].filter(Boolean).join(" "),
60
+ detail: denial.reason
61
+ }))
62
+ }
63
+ ) : null
64
+ ] });
65
+ }
66
+ function PendingApprovalsList({
67
+ requests,
68
+ onResolve
69
+ }) {
70
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
71
+ /* @__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: [
72
+ /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiClock.UiClock, className: "size-3.5" }),
73
+ "Awaiting approval (",
74
+ requests.length,
75
+ ")"
76
+ ] }),
77
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-density-2", children: requests.map((request) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
78
+ PendingApprovalRow,
79
+ {
80
+ request,
81
+ ...onResolve ? { onResolve } : {}
82
+ }
83
+ ) }, request.id)) })
84
+ ] });
85
+ }
86
+ function PendingApprovalRow({
87
+ request,
88
+ onResolve
89
+ }) {
90
+ const [error, setError] = react.useState(void 0);
91
+ const [busy, setBusy] = react.useState(false);
92
+ const part = {
93
+ type: "dynamic-tool",
94
+ toolName: request.tool,
95
+ toolCallId: request.toolCallId || request.id,
96
+ state: "approval-requested",
97
+ input: request.input,
98
+ approval: { id: request.id }
99
+ };
100
+ const handleApprove = (approvalId, approved, reason) => {
101
+ if (!onResolve) return;
102
+ setError(void 0);
103
+ setBusy(true);
104
+ void Promise.resolve(onResolve(approvalId, approved ? "approve" : "deny", reason)).catch((err) => {
105
+ setError(err instanceof Error ? err.message : String(err));
106
+ }).finally(() => setBusy(false));
107
+ };
108
+ 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: [
109
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground", children: [
110
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: request.requestedBy ? `Requested by ${request.requestedBy}` : "Requested" }),
111
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex gap-density-3", children: [
112
+ request.createdAt ? /* @__PURE__ */ jsxRuntime.jsxs("span", { title: SessionInspector_model.formatDate(request.createdAt), children: [
113
+ ageLabel(request.createdAt),
114
+ " ago"
115
+ ] }) : null,
116
+ request.expiresAt ? /* @__PURE__ */ jsxRuntime.jsx("span", { title: SessionInspector_model.formatDate(request.expiresAt), children: remainingLabel(request.expiresAt) }) : null
117
+ ] })
118
+ ] }),
119
+ /* @__PURE__ */ jsxRuntime.jsx(
120
+ ToolCall.ToolCall,
121
+ {
122
+ part,
123
+ defaultOpen: true,
124
+ onApprove: busy ? void 0 : handleApprove
125
+ }
126
+ ),
127
+ busy ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 pl-4 text-xs text-muted-foreground", children: "Submitting…" }) : null,
128
+ error ? /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "mt-1.5 pl-4 text-xs text-destructive", children: error }) : null
129
+ ] });
130
+ }
131
+ function ageLabel(createdAt) {
132
+ return SessionInspector_model.durationLabel(createdAt) || "0s";
133
+ }
134
+ function remainingLabel(expiresAt) {
135
+ const expiry = new Date(expiresAt).getTime();
136
+ if (Number.isNaN(expiry)) return "";
137
+ const now = Date.now();
138
+ if (expiry <= now) return "expired";
139
+ const label = SessionInspector_model.durationLabel(new Date(now).toISOString(), expiresAt);
140
+ return label ? `${label} left` : "";
141
+ }
142
+ exports.SessionApprovalsPanel = SessionApprovalsPanel;
143
+ //# 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 } from \"./SessionInspector.panel-parts\";\nimport { kv } from \"./SessionInspector.panel-values\";\nimport {\n type ApprovalResolveHandler,\n pendingApprovalRequests,\n} from \"./SessionInspector.approvals-model\";\nimport type {\n SessionApprovalRequest,\n SessionApprovalStats,\n} from \"./SessionViewer.unified\";\n\nexport type {\n ApprovalResolveAction,\n ApprovalResolveHandler,\n} from \"./SessionInspector.approvals-model\";\n\n/** Renders every pending tool approval directly from `session.requests[]`\n * (never from transcript parts — an approval brokered outside this session's\n * own chat has no transcript part) plus the resolved approve/deny/denial\n * summary the panel previously showed alone. */\nexport function SessionApprovalsPanel({\n approvals,\n requests,\n onResolve,\n}: {\n approvals: SessionApprovalStats | undefined;\n requests?: SessionApprovalRequest[] | undefined;\n onResolve?: ApprovalResolveHandler;\n}) {\n const pending = pendingApprovalRequests(requests);\n const hasResolvedSummary = Boolean(\n approvals &&\n (approvals.approved ||\n approvals.denied ||\n approvals.cancelled ||\n approvals.expired ||\n approvals.denials?.length),\n );\n\n if (!pending.length && !hasResolvedSummary) {\n return <EmptyState>No approval metadata.</EmptyState>;\n }\n\n return (\n <div className=\"space-y-density-4\">\n {pending.length ? (\n <PendingApprovalsList\n requests={pending}\n {...(onResolve ? { onResolve } : {})}\n />\n ) : null}\n {hasResolvedSummary ? (\n <ResolvedApprovalsSummary approvals={approvals!} />\n ) : null}\n </div>\n );\n}\n\nfunction ResolvedApprovalsSummary({\n approvals,\n}: {\n approvals: SessionApprovalStats;\n}) {\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Approved\", approvals.approved ?? 0),\n kv(\"Denied\", approvals.denied ?? 0),\n kv(\"Cancelled\", approvals.cancelled ?? 0),\n kv(\"Expired\", approvals.expired ?? 0),\n ]}\n />\n {approvals.denials?.length ? (\n <SimpleList\n title=\"Denials\"\n rows={approvals.denials.map((denial, index) => ({\n key: denial.toolUseId || `${denial.tool}-${index}`,\n title: [denial.tool, denial.toolUseId].filter(Boolean).join(\" \"),\n detail: denial.reason,\n }))}\n />\n ) : null}\n </div>\n );\n}\n\nfunction PendingApprovalsList({\n requests,\n onResolve,\n}: {\n requests: SessionApprovalRequest[];\n onResolve?: ApprovalResolveHandler;\n}) {\n return (\n <section>\n <h3 className=\"mb-density-2 flex items-center gap-1.5 text-xs font-semibold uppercase text-amber-600 dark:text-amber-400\">\n <Icon icon={UiClock} className=\"size-3.5\" />\n Awaiting approval ({requests.length})\n </h3>\n <ul className=\"space-y-density-2\">\n {requests.map((request) => (\n <li key={request.id}>\n <PendingApprovalRow\n request={request}\n {...(onResolve ? { onResolve } : {})}\n />\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\nfunction PendingApprovalRow({\n request,\n onResolve,\n}: {\n request: SessionApprovalRequest;\n onResolve?: ApprovalResolveHandler;\n}) {\n const [error, setError] = useState<string | undefined>(undefined);\n const [busy, setBusy] = useState(false);\n\n const part: AnyToolPart = {\n type: \"dynamic-tool\",\n toolName: request.tool,\n toolCallId: request.toolCallId || request.id,\n state: \"approval-requested\",\n input: request.input,\n approval: { id: request.id },\n };\n\n const handleApprove = (\n approvalId: string,\n approved: boolean,\n reason?: string,\n ) => {\n if (!onResolve) return;\n setError(undefined);\n setBusy(true);\n void Promise.resolve(onResolve(approvalId, approved ? \"approve\" : \"deny\", reason))\n .catch((err: unknown) => {\n setError(err instanceof Error ? err.message : String(err));\n })\n .finally(() => setBusy(false));\n };\n\n return (\n <div className=\"rounded-md border border-amber-300/60 bg-amber-50/40 p-density-3 dark:border-amber-800/60 dark:bg-amber-950/20\">\n <div className=\"mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground\">\n <span>\n {request.requestedBy\n ? `Requested by ${request.requestedBy}`\n : \"Requested\"}\n </span>\n <span className=\"flex gap-density-3\">\n {request.createdAt ? (\n <span title={formatDate(request.createdAt)}>\n {ageLabel(request.createdAt)} ago\n </span>\n ) : null}\n {request.expiresAt ? (\n <span title={formatDate(request.expiresAt)}>\n {remainingLabel(request.expiresAt)}\n </span>\n ) : null}\n </span>\n </div>\n <ToolCall\n part={part}\n defaultOpen\n onApprove={busy ? undefined : handleApprove}\n />\n {busy ? (\n <p className=\"mt-1.5 pl-4 text-xs text-muted-foreground\">\n Submitting…\n </p>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"mt-1.5 pl-4 text-xs text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction ageLabel(createdAt: string): string {\n return durationLabel(createdAt) || \"0s\";\n}\n\nfunction remainingLabel(expiresAt: string): string {\n const expiry = new Date(expiresAt).getTime();\n if (Number.isNaN(expiry)) return \"\";\n const now = Date.now();\n if (expiry <= now) return \"expired\";\n const label = durationLabel(new Date(now).toISOString(), expiresAt);\n return label ? `${label} left` : \"\";\n}\n"],"names":["pendingApprovalRequests","jsx","EmptyState","jsxs","KeyValueList","kv","SimpleList","Icon","UiClock","useState","formatDate","ToolCall","durationLabel"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { ApprovalResolveHandler } from './SessionInspector.approvals-model';
2
+ import { SessionApprovalRequest, SessionApprovalStats } from './SessionViewer.unified';
3
+ export type { ApprovalResolveAction, ApprovalResolveHandler, } from './SessionInspector.approvals-model';
4
+ /** Renders every pending tool approval directly from `session.requests[]`
5
+ * (never from transcript parts — an approval brokered outside this session's
6
+ * own chat has no transcript part) plus the resolved approve/deny/denial
7
+ * summary the panel previously showed alone. */
8
+ export declare function SessionApprovalsPanel({ approvals, requests, onResolve, }: {
9
+ approvals: SessionApprovalStats | undefined;
10
+ requests?: SessionApprovalRequest[] | undefined;
11
+ onResolve?: ApprovalResolveHandler;
12
+ }): import("react").JSX.Element;
13
+ //# 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":"AASA,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C;;;iDAGiD;AACjD,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE;IACD,SAAS,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;IAChD,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACpC,+BA4BA"}
@@ -0,0 +1,143 @@
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, SimpleList } from "./SessionInspector.panel-parts.js";
8
+ import { kv } from "./SessionInspector.panel-values.js";
9
+ import { pendingApprovalRequests } from "./SessionInspector.approvals-model.js";
10
+ import { UiClock } from "../../icons/components/UiClock.js";
11
+ function SessionApprovalsPanel({
12
+ approvals,
13
+ requests,
14
+ onResolve
15
+ }) {
16
+ var _a;
17
+ const pending = pendingApprovalRequests(requests);
18
+ const hasResolvedSummary = Boolean(
19
+ approvals && (approvals.approved || approvals.denied || approvals.cancelled || approvals.expired || ((_a = approvals.denials) == null ? void 0 : _a.length))
20
+ );
21
+ if (!pending.length && !hasResolvedSummary) {
22
+ return /* @__PURE__ */ jsx(EmptyState, { children: "No approval metadata." });
23
+ }
24
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-density-4", children: [
25
+ pending.length ? /* @__PURE__ */ jsx(
26
+ PendingApprovalsList,
27
+ {
28
+ requests: pending,
29
+ ...onResolve ? { onResolve } : {}
30
+ }
31
+ ) : null,
32
+ hasResolvedSummary ? /* @__PURE__ */ jsx(ResolvedApprovalsSummary, { approvals }) : null
33
+ ] });
34
+ }
35
+ function ResolvedApprovalsSummary({
36
+ approvals
37
+ }) {
38
+ var _a;
39
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-density-4", children: [
40
+ /* @__PURE__ */ jsx(
41
+ KeyValueList,
42
+ {
43
+ items: [
44
+ kv("Approved", approvals.approved ?? 0),
45
+ kv("Denied", approvals.denied ?? 0),
46
+ kv("Cancelled", approvals.cancelled ?? 0),
47
+ kv("Expired", approvals.expired ?? 0)
48
+ ]
49
+ }
50
+ ),
51
+ ((_a = approvals.denials) == null ? void 0 : _a.length) ? /* @__PURE__ */ jsx(
52
+ SimpleList,
53
+ {
54
+ title: "Denials",
55
+ rows: approvals.denials.map((denial, index) => ({
56
+ key: denial.toolUseId || `${denial.tool}-${index}`,
57
+ title: [denial.tool, denial.toolUseId].filter(Boolean).join(" "),
58
+ detail: denial.reason
59
+ }))
60
+ }
61
+ ) : null
62
+ ] });
63
+ }
64
+ function PendingApprovalsList({
65
+ requests,
66
+ onResolve
67
+ }) {
68
+ return /* @__PURE__ */ jsxs("section", { children: [
69
+ /* @__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: [
70
+ /* @__PURE__ */ jsx(Icon, { icon: UiClock, className: "size-3.5" }),
71
+ "Awaiting approval (",
72
+ requests.length,
73
+ ")"
74
+ ] }),
75
+ /* @__PURE__ */ jsx("ul", { className: "space-y-density-2", children: requests.map((request) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
76
+ PendingApprovalRow,
77
+ {
78
+ request,
79
+ ...onResolve ? { onResolve } : {}
80
+ }
81
+ ) }, request.id)) })
82
+ ] });
83
+ }
84
+ function PendingApprovalRow({
85
+ request,
86
+ onResolve
87
+ }) {
88
+ const [error, setError] = useState(void 0);
89
+ const [busy, setBusy] = useState(false);
90
+ const part = {
91
+ type: "dynamic-tool",
92
+ toolName: request.tool,
93
+ toolCallId: request.toolCallId || request.id,
94
+ state: "approval-requested",
95
+ input: request.input,
96
+ approval: { id: request.id }
97
+ };
98
+ const handleApprove = (approvalId, approved, reason) => {
99
+ if (!onResolve) return;
100
+ setError(void 0);
101
+ setBusy(true);
102
+ void Promise.resolve(onResolve(approvalId, approved ? "approve" : "deny", reason)).catch((err) => {
103
+ setError(err instanceof Error ? err.message : String(err));
104
+ }).finally(() => setBusy(false));
105
+ };
106
+ 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: [
107
+ /* @__PURE__ */ jsxs("div", { className: "mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground", children: [
108
+ /* @__PURE__ */ jsx("span", { children: request.requestedBy ? `Requested by ${request.requestedBy}` : "Requested" }),
109
+ /* @__PURE__ */ jsxs("span", { className: "flex gap-density-3", children: [
110
+ request.createdAt ? /* @__PURE__ */ jsxs("span", { title: formatDate(request.createdAt), children: [
111
+ ageLabel(request.createdAt),
112
+ " ago"
113
+ ] }) : null,
114
+ request.expiresAt ? /* @__PURE__ */ jsx("span", { title: formatDate(request.expiresAt), children: remainingLabel(request.expiresAt) }) : null
115
+ ] })
116
+ ] }),
117
+ /* @__PURE__ */ jsx(
118
+ ToolCall,
119
+ {
120
+ part,
121
+ defaultOpen: true,
122
+ onApprove: busy ? void 0 : handleApprove
123
+ }
124
+ ),
125
+ busy ? /* @__PURE__ */ jsx("p", { className: "mt-1.5 pl-4 text-xs text-muted-foreground", children: "Submitting…" }) : null,
126
+ error ? /* @__PURE__ */ jsx("p", { role: "alert", className: "mt-1.5 pl-4 text-xs text-destructive", children: error }) : null
127
+ ] });
128
+ }
129
+ function ageLabel(createdAt) {
130
+ return durationLabel(createdAt) || "0s";
131
+ }
132
+ function remainingLabel(expiresAt) {
133
+ const expiry = new Date(expiresAt).getTime();
134
+ if (Number.isNaN(expiry)) return "";
135
+ const now = Date.now();
136
+ if (expiry <= now) return "expired";
137
+ const label = durationLabel(new Date(now).toISOString(), expiresAt);
138
+ return label ? `${label} left` : "";
139
+ }
140
+ export {
141
+ SessionApprovalsPanel
142
+ };
143
+ //# 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 } from \"./SessionInspector.panel-parts\";\nimport { kv } from \"./SessionInspector.panel-values\";\nimport {\n type ApprovalResolveHandler,\n pendingApprovalRequests,\n} from \"./SessionInspector.approvals-model\";\nimport type {\n SessionApprovalRequest,\n SessionApprovalStats,\n} from \"./SessionViewer.unified\";\n\nexport type {\n ApprovalResolveAction,\n ApprovalResolveHandler,\n} from \"./SessionInspector.approvals-model\";\n\n/** Renders every pending tool approval directly from `session.requests[]`\n * (never from transcript parts — an approval brokered outside this session's\n * own chat has no transcript part) plus the resolved approve/deny/denial\n * summary the panel previously showed alone. */\nexport function SessionApprovalsPanel({\n approvals,\n requests,\n onResolve,\n}: {\n approvals: SessionApprovalStats | undefined;\n requests?: SessionApprovalRequest[] | undefined;\n onResolve?: ApprovalResolveHandler;\n}) {\n const pending = pendingApprovalRequests(requests);\n const hasResolvedSummary = Boolean(\n approvals &&\n (approvals.approved ||\n approvals.denied ||\n approvals.cancelled ||\n approvals.expired ||\n approvals.denials?.length),\n );\n\n if (!pending.length && !hasResolvedSummary) {\n return <EmptyState>No approval metadata.</EmptyState>;\n }\n\n return (\n <div className=\"space-y-density-4\">\n {pending.length ? (\n <PendingApprovalsList\n requests={pending}\n {...(onResolve ? { onResolve } : {})}\n />\n ) : null}\n {hasResolvedSummary ? (\n <ResolvedApprovalsSummary approvals={approvals!} />\n ) : null}\n </div>\n );\n}\n\nfunction ResolvedApprovalsSummary({\n approvals,\n}: {\n approvals: SessionApprovalStats;\n}) {\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Approved\", approvals.approved ?? 0),\n kv(\"Denied\", approvals.denied ?? 0),\n kv(\"Cancelled\", approvals.cancelled ?? 0),\n kv(\"Expired\", approvals.expired ?? 0),\n ]}\n />\n {approvals.denials?.length ? (\n <SimpleList\n title=\"Denials\"\n rows={approvals.denials.map((denial, index) => ({\n key: denial.toolUseId || `${denial.tool}-${index}`,\n title: [denial.tool, denial.toolUseId].filter(Boolean).join(\" \"),\n detail: denial.reason,\n }))}\n />\n ) : null}\n </div>\n );\n}\n\nfunction PendingApprovalsList({\n requests,\n onResolve,\n}: {\n requests: SessionApprovalRequest[];\n onResolve?: ApprovalResolveHandler;\n}) {\n return (\n <section>\n <h3 className=\"mb-density-2 flex items-center gap-1.5 text-xs font-semibold uppercase text-amber-600 dark:text-amber-400\">\n <Icon icon={UiClock} className=\"size-3.5\" />\n Awaiting approval ({requests.length})\n </h3>\n <ul className=\"space-y-density-2\">\n {requests.map((request) => (\n <li key={request.id}>\n <PendingApprovalRow\n request={request}\n {...(onResolve ? { onResolve } : {})}\n />\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\nfunction PendingApprovalRow({\n request,\n onResolve,\n}: {\n request: SessionApprovalRequest;\n onResolve?: ApprovalResolveHandler;\n}) {\n const [error, setError] = useState<string | undefined>(undefined);\n const [busy, setBusy] = useState(false);\n\n const part: AnyToolPart = {\n type: \"dynamic-tool\",\n toolName: request.tool,\n toolCallId: request.toolCallId || request.id,\n state: \"approval-requested\",\n input: request.input,\n approval: { id: request.id },\n };\n\n const handleApprove = (\n approvalId: string,\n approved: boolean,\n reason?: string,\n ) => {\n if (!onResolve) return;\n setError(undefined);\n setBusy(true);\n void Promise.resolve(onResolve(approvalId, approved ? \"approve\" : \"deny\", reason))\n .catch((err: unknown) => {\n setError(err instanceof Error ? err.message : String(err));\n })\n .finally(() => setBusy(false));\n };\n\n return (\n <div className=\"rounded-md border border-amber-300/60 bg-amber-50/40 p-density-3 dark:border-amber-800/60 dark:bg-amber-950/20\">\n <div className=\"mb-1 flex flex-wrap items-center justify-between gap-2 text-[11px] text-muted-foreground\">\n <span>\n {request.requestedBy\n ? `Requested by ${request.requestedBy}`\n : \"Requested\"}\n </span>\n <span className=\"flex gap-density-3\">\n {request.createdAt ? (\n <span title={formatDate(request.createdAt)}>\n {ageLabel(request.createdAt)} ago\n </span>\n ) : null}\n {request.expiresAt ? (\n <span title={formatDate(request.expiresAt)}>\n {remainingLabel(request.expiresAt)}\n </span>\n ) : null}\n </span>\n </div>\n <ToolCall\n part={part}\n defaultOpen\n onApprove={busy ? undefined : handleApprove}\n />\n {busy ? (\n <p className=\"mt-1.5 pl-4 text-xs text-muted-foreground\">\n Submitting…\n </p>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"mt-1.5 pl-4 text-xs text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction ageLabel(createdAt: string): string {\n return durationLabel(createdAt) || \"0s\";\n}\n\nfunction remainingLabel(expiresAt: string): string {\n const expiry = new Date(expiresAt).getTime();\n if (Number.isNaN(expiry)) return \"\";\n const now = Date.now();\n if (expiry <= now) return \"expired\";\n const label = durationLabel(new Date(now).toISOString(), expiresAt);\n return label ? `${label} left` : \"\";\n}\n"],"names":[],"mappings":"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"}
@@ -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_approvalsModel = require("./SessionInspector.approvals-model.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_approvalsModel.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) {