@flanksource/clicky-ui 0.3.40 → 0.3.41

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 (342) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +10 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +10 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/components/AccordionList.cjs +5 -1
  7. package/dist/components/AccordionList.cjs.map +1 -1
  8. package/dist/components/AccordionList.d.ts +3 -1
  9. package/dist/components/AccordionList.d.ts.map +1 -1
  10. package/dist/components/AccordionList.js +5 -1
  11. package/dist/components/AccordionList.js.map +1 -1
  12. package/dist/components/JsonSchemaForm.cjs +9 -4
  13. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  14. package/dist/components/JsonSchemaForm.d.ts +1 -1
  15. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  16. package/dist/components/JsonSchemaForm.js +8 -3
  17. package/dist/components/JsonSchemaForm.js.map +1 -1
  18. package/dist/components/json-schema-form-accordion-array.cjs +3 -1
  19. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  20. package/dist/components/json-schema-form-accordion-array.d.ts +4 -1
  21. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  22. package/dist/components/json-schema-form-accordion-array.js +3 -1
  23. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  24. package/dist/components/json-schema-form-array-view.cjs +63 -0
  25. package/dist/components/json-schema-form-array-view.cjs.map +1 -0
  26. package/dist/components/json-schema-form-array-view.d.ts +21 -0
  27. package/dist/components/json-schema-form-array-view.d.ts.map +1 -0
  28. package/dist/components/json-schema-form-array-view.js +63 -0
  29. package/dist/components/json-schema-form-array-view.js.map +1 -0
  30. package/dist/components/json-schema-form-array.cjs +3 -7
  31. package/dist/components/json-schema-form-array.cjs.map +1 -1
  32. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  33. package/dist/components/json-schema-form-array.js +3 -7
  34. package/dist/components/json-schema-form-array.js.map +1 -1
  35. package/dist/components/json-schema-form-conditionals.cjs +67 -0
  36. package/dist/components/json-schema-form-conditionals.cjs.map +1 -0
  37. package/dist/components/json-schema-form-conditionals.d.ts +9 -0
  38. package/dist/components/json-schema-form-conditionals.d.ts.map +1 -0
  39. package/dist/components/json-schema-form-conditionals.js +67 -0
  40. package/dist/components/json-schema-form-conditionals.js.map +1 -0
  41. package/dist/components/json-schema-form-defaults.cjs +68 -0
  42. package/dist/components/json-schema-form-defaults.cjs.map +1 -0
  43. package/dist/components/json-schema-form-defaults.d.ts +4 -0
  44. package/dist/components/json-schema-form-defaults.d.ts.map +1 -0
  45. package/dist/components/json-schema-form-defaults.js +68 -0
  46. package/dist/components/json-schema-form-defaults.js.map +1 -0
  47. package/dist/components/json-schema-form-errors.cjs +49 -31
  48. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  49. package/dist/components/json-schema-form-errors.d.ts +4 -2
  50. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  51. package/dist/components/json-schema-form-errors.js +51 -33
  52. package/dist/components/json-schema-form-errors.js.map +1 -1
  53. package/dist/components/json-schema-form-filter.cjs +2 -1
  54. package/dist/components/json-schema-form-filter.cjs.map +1 -1
  55. package/dist/components/json-schema-form-filter.js +2 -1
  56. package/dist/components/json-schema-form-filter.js.map +1 -1
  57. package/dist/components/json-schema-form-item-summary.cjs +6 -2
  58. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  59. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  60. package/dist/components/json-schema-form-item-summary.js +6 -2
  61. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  62. package/dist/components/json-schema-form-layout.cjs +28 -19
  63. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  64. package/dist/components/json-schema-form-layout.d.ts +8 -6
  65. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  66. package/dist/components/json-schema-form-layout.js +29 -20
  67. package/dist/components/json-schema-form-layout.js.map +1 -1
  68. package/dist/components/json-schema-form-listener-paths.cjs +52 -0
  69. package/dist/components/json-schema-form-listener-paths.cjs.map +1 -0
  70. package/dist/components/json-schema-form-listener-paths.d.ts +10 -0
  71. package/dist/components/json-schema-form-listener-paths.d.ts.map +1 -0
  72. package/dist/components/json-schema-form-listener-paths.js +52 -0
  73. package/dist/components/json-schema-form-listener-paths.js.map +1 -0
  74. package/dist/components/json-schema-form-listener-types.d.ts +22 -0
  75. package/dist/components/json-schema-form-listener-types.d.ts.map +1 -0
  76. package/dist/components/json-schema-form-listeners.cjs +250 -0
  77. package/dist/components/json-schema-form-listeners.cjs.map +1 -0
  78. package/dist/components/json-schema-form-listeners.d.ts +13 -0
  79. package/dist/components/json-schema-form-listeners.d.ts.map +1 -0
  80. package/dist/components/json-schema-form-listeners.js +250 -0
  81. package/dist/components/json-schema-form-listeners.js.map +1 -0
  82. package/dist/components/json-schema-form-object-array-view.cjs +62 -0
  83. package/dist/components/json-schema-form-object-array-view.cjs.map +1 -0
  84. package/dist/components/json-schema-form-object-array-view.d.ts +14 -0
  85. package/dist/components/json-schema-form-object-array-view.d.ts.map +1 -0
  86. package/dist/components/json-schema-form-object-array-view.js +62 -0
  87. package/dist/components/json-schema-form-object-array-view.js.map +1 -0
  88. package/dist/components/json-schema-form-object.cjs +3 -0
  89. package/dist/components/json-schema-form-object.cjs.map +1 -1
  90. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  91. package/dist/components/json-schema-form-object.js +3 -0
  92. package/dist/components/json-schema-form-object.js.map +1 -1
  93. package/dist/components/json-schema-form-render.cjs +17 -9
  94. package/dist/components/json-schema-form-render.cjs.map +1 -1
  95. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  96. package/dist/components/json-schema-form-render.js +19 -11
  97. package/dist/components/json-schema-form-render.js.map +1 -1
  98. package/dist/components/json-schema-form-resolve.cjs +6 -99
  99. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  100. package/dist/components/json-schema-form-resolve.d.ts +1 -8
  101. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  102. package/dist/components/json-schema-form-resolve.js +5 -98
  103. package/dist/components/json-schema-form-resolve.js.map +1 -1
  104. package/dist/components/json-schema-form-runtime-types.d.ts +15 -0
  105. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
  106. package/dist/components/json-schema-form-table-array.cjs +67 -16
  107. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  108. package/dist/components/json-schema-form-table-array.d.ts +4 -1
  109. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  110. package/dist/components/json-schema-form-table-array.js +70 -19
  111. package/dist/components/json-schema-form-table-array.js.map +1 -1
  112. package/dist/components/json-schema-form-types.d.ts +16 -0
  113. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  114. package/dist/components/json-schema-form-utils.cjs +7 -1
  115. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  116. package/dist/components/json-schema-form-utils.d.ts +2 -1
  117. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  118. package/dist/components/json-schema-form-utils.js +7 -1
  119. package/dist/components/json-schema-form-utils.js.map +1 -1
  120. package/dist/components.cjs +3 -2
  121. package/dist/components.cjs.map +1 -1
  122. package/dist/components.d.ts +3 -2
  123. package/dist/components.d.ts.map +1 -1
  124. package/dist/components.js +2 -1
  125. package/dist/components.js.map +1 -1
  126. package/dist/data/DataTable.cjs +9 -3
  127. package/dist/data/DataTable.cjs.map +1 -1
  128. package/dist/data/DataTable.d.ts +6 -0
  129. package/dist/data/DataTable.d.ts.map +1 -1
  130. package/dist/data/DataTable.js +9 -3
  131. package/dist/data/DataTable.js.map +1 -1
  132. package/dist/data/FixtureEditor/FixtureEditor.cjs +43 -24
  133. package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -1
  134. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -1
  135. package/dist/data/FixtureEditor/FixtureEditor.js +43 -24
  136. package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -1
  137. package/dist/data/Tree.cjs +10 -2
  138. package/dist/data/Tree.cjs.map +1 -1
  139. package/dist/data/Tree.d.ts +6 -1
  140. package/dist/data/Tree.d.ts.map +1 -1
  141. package/dist/data/Tree.js +10 -2
  142. package/dist/data/Tree.js.map +1 -1
  143. package/dist/data/ai/SessionInspector.cjs +143 -167
  144. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  145. package/dist/data/ai/SessionInspector.collection-types.d.ts +5 -0
  146. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
  147. package/dist/data/ai/SessionInspector.collection.cjs +18 -5
  148. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
  149. package/dist/data/ai/SessionInspector.collection.d.ts +2 -0
  150. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -1
  151. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts +6 -0
  152. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts.map +1 -0
  153. package/dist/data/ai/SessionInspector.collection.js +18 -5
  154. package/dist/data/ai/SessionInspector.collection.js.map +1 -1
  155. package/dist/data/ai/SessionInspector.d.ts +24 -2
  156. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  157. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +105 -7
  158. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -1
  159. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +12 -1
  160. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -1
  161. package/dist/data/ai/SessionInspector.hierarchy-state.js +107 -9
  162. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -1
  163. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  164. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  165. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  166. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  167. package/dist/data/ai/SessionInspector.js +144 -168
  168. package/dist/data/ai/SessionInspector.js.map +1 -1
  169. package/dist/data/ai/SessionInspector.legacy.cjs +116 -0
  170. package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -0
  171. package/dist/data/ai/SessionInspector.legacy.d.ts +19 -0
  172. package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -0
  173. package/dist/data/ai/SessionInspector.legacy.js +116 -0
  174. package/dist/data/ai/SessionInspector.legacy.js.map +1 -0
  175. package/dist/data/ai/SessionInspector.panels.cjs +3 -0
  176. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  177. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  178. package/dist/data/ai/SessionInspector.panels.js +3 -0
  179. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  180. package/dist/data/ai/SessionInspector.plan.cjs +29 -12
  181. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -1
  182. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -1
  183. package/dist/data/ai/SessionInspector.plan.js +30 -13
  184. package/dist/data/ai/SessionInspector.plan.js.map +1 -1
  185. package/dist/data/ai/SessionInspector.remote-view.cjs +44 -0
  186. package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -0
  187. package/dist/data/ai/SessionInspector.remote-view.d.ts +11 -0
  188. package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -0
  189. package/dist/data/ai/SessionInspector.remote-view.js +44 -0
  190. package/dist/data/ai/SessionInspector.remote-view.js.map +1 -0
  191. package/dist/data/ai/SessionInspector.remote.cjs +275 -0
  192. package/dist/data/ai/SessionInspector.remote.cjs.map +1 -0
  193. package/dist/data/ai/SessionInspector.remote.d.ts +57 -0
  194. package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -0
  195. package/dist/data/ai/SessionInspector.remote.js +275 -0
  196. package/dist/data/ai/SessionInspector.remote.js.map +1 -0
  197. package/dist/data/ai/SessionInspector.summary.cjs +0 -156
  198. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  199. package/dist/data/ai/SessionInspector.summary.d.ts +0 -3
  200. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
  201. package/dist/data/ai/SessionInspector.summary.js +2 -158
  202. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  203. package/dist/data/ai/SessionInspector.tab-state.cjs +15 -0
  204. package/dist/data/ai/SessionInspector.tab-state.cjs.map +1 -0
  205. package/dist/data/ai/SessionInspector.tab-state.d.ts +3 -0
  206. package/dist/data/ai/SessionInspector.tab-state.d.ts.map +1 -0
  207. package/dist/data/ai/SessionInspector.tab-state.js +15 -0
  208. package/dist/data/ai/SessionInspector.tab-state.js.map +1 -0
  209. package/dist/data/ai/SessionInspector.tabs.model.cjs +31 -18
  210. package/dist/data/ai/SessionInspector.tabs.model.cjs.map +1 -1
  211. package/dist/data/ai/SessionInspector.tabs.model.d.ts +3 -1
  212. package/dist/data/ai/SessionInspector.tabs.model.d.ts.map +1 -1
  213. package/dist/data/ai/SessionInspector.tabs.model.js +32 -19
  214. package/dist/data/ai/SessionInspector.tabs.model.js.map +1 -1
  215. package/dist/data/ai/SessionInspector.verification.cjs +53 -0
  216. package/dist/data/ai/SessionInspector.verification.cjs.map +1 -0
  217. package/dist/data/ai/SessionInspector.verification.d.ts +7 -0
  218. package/dist/data/ai/SessionInspector.verification.d.ts.map +1 -0
  219. package/dist/data/ai/SessionInspector.verification.js +53 -0
  220. package/dist/data/ai/SessionInspector.verification.js.map +1 -0
  221. package/dist/data/ai/SessionViewer.model.cjs +7 -1
  222. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  223. package/dist/data/ai/SessionViewer.model.d.ts +21 -3
  224. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  225. package/dist/data/ai/SessionViewer.model.js +7 -1
  226. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  227. package/dist/data/ai/SessionViewer.unified.d.ts +13 -0
  228. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  229. package/dist/data/ai/index.d.ts +3 -1
  230. package/dist/data/ai/index.d.ts.map +1 -1
  231. package/dist/data/version-info.cjs +3 -3
  232. package/dist/data/version-info.js +3 -3
  233. package/dist/devtools/useDebugStream.cjs +5 -1
  234. package/dist/devtools/useDebugStream.cjs.map +1 -1
  235. package/dist/devtools/useDebugStream.d.ts.map +1 -1
  236. package/dist/devtools/useDebugStream.js +6 -2
  237. package/dist/devtools/useDebugStream.js.map +1 -1
  238. package/dist/hooks/event-source-provider.cjs +9 -0
  239. package/dist/hooks/event-source-provider.cjs.map +1 -0
  240. package/dist/hooks/event-source-provider.d.ts +15 -0
  241. package/dist/hooks/event-source-provider.d.ts.map +1 -0
  242. package/dist/hooks/event-source-provider.js +9 -0
  243. package/dist/hooks/event-source-provider.js.map +1 -0
  244. package/dist/hooks/event-source.cjs +11 -0
  245. package/dist/hooks/event-source.cjs.map +1 -0
  246. package/dist/hooks/event-source.d.ts +22 -0
  247. package/dist/hooks/event-source.d.ts.map +1 -0
  248. package/dist/hooks/event-source.js +11 -0
  249. package/dist/hooks/event-source.js.map +1 -0
  250. package/dist/hooks/use-log-tail.cjs +5 -1
  251. package/dist/hooks/use-log-tail.cjs.map +1 -1
  252. package/dist/hooks/use-log-tail.d.ts.map +1 -1
  253. package/dist/hooks/use-log-tail.js +5 -1
  254. package/dist/hooks/use-log-tail.js.map +1 -1
  255. package/dist/hooks/use-prompts.cjs +5 -1
  256. package/dist/hooks/use-prompts.cjs.map +1 -1
  257. package/dist/hooks/use-prompts.d.ts.map +1 -1
  258. package/dist/hooks/use-prompts.js +6 -2
  259. package/dist/hooks/use-prompts.js.map +1 -1
  260. package/dist/hooks/use-task-run.cjs +9 -2
  261. package/dist/hooks/use-task-run.cjs.map +1 -1
  262. package/dist/hooks/use-task-run.d.ts.map +1 -1
  263. package/dist/hooks/use-task-run.js +10 -3
  264. package/dist/hooks/use-task-run.js.map +1 -1
  265. package/dist/hooks.cjs +4 -0
  266. package/dist/hooks.cjs.map +1 -1
  267. package/dist/hooks.d.ts +2 -0
  268. package/dist/hooks.d.ts.map +1 -1
  269. package/dist/hooks.js +4 -0
  270. package/dist/hooks.js.map +1 -1
  271. package/dist/icons/programmingCatalog.cjs +34 -34
  272. package/dist/icons/programmingCatalog.cjs.map +1 -1
  273. package/dist/icons/programmingCatalog.js +34 -34
  274. package/dist/icons/programmingCatalog.js.map +1 -1
  275. package/dist/index.cjs +9 -2
  276. package/dist/index.cjs.map +1 -1
  277. package/dist/index.js +8 -1
  278. package/dist/index.js.map +1 -1
  279. package/dist/monaco/MonacoEditor.cjs +4 -1
  280. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  281. package/dist/monaco/MonacoEditor.d.ts +1 -1
  282. package/dist/monaco/MonacoEditor.d.ts.map +1 -1
  283. package/dist/monaco/MonacoEditor.js +4 -1
  284. package/dist/monaco/MonacoEditor.js.map +1 -1
  285. package/dist/monaco/types.d.ts +2 -1
  286. package/dist/monaco/types.d.ts.map +1 -1
  287. package/dist/overlay/CommandPalette.cjs +14 -4
  288. package/dist/overlay/CommandPalette.cjs.map +1 -1
  289. package/dist/overlay/CommandPalette.d.ts +5 -1
  290. package/dist/overlay/CommandPalette.d.ts.map +1 -1
  291. package/dist/overlay/CommandPalette.js +14 -4
  292. package/dist/overlay/CommandPalette.js.map +1 -1
  293. package/dist/overlay/CommandPaletteList.cjs +5 -0
  294. package/dist/overlay/CommandPaletteList.cjs.map +1 -1
  295. package/dist/overlay/CommandPaletteList.d.ts +4 -2
  296. package/dist/overlay/CommandPaletteList.d.ts.map +1 -1
  297. package/dist/overlay/CommandPaletteList.js +5 -0
  298. package/dist/overlay/CommandPaletteList.js.map +1 -1
  299. package/dist/overlay/DropdownMenu.cjs +1 -0
  300. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  301. package/dist/overlay/DropdownMenu.js +1 -0
  302. package/dist/overlay/DropdownMenu.js.map +1 -1
  303. package/dist/rpc/OperationCatalog.cjs +29 -26
  304. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  305. package/dist/rpc/OperationCatalog.d.ts +9 -1
  306. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  307. package/dist/rpc/OperationCatalog.js +29 -26
  308. package/dist/rpc/OperationCatalog.js.map +1 -1
  309. package/dist/rpc/OperationEntityContextPicker.cjs +62 -256
  310. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
  311. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
  312. package/dist/rpc/OperationEntityContextPicker.js +64 -258
  313. package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
  314. package/dist/rpc/OperationEntityPicker.cjs +185 -0
  315. package/dist/rpc/OperationEntityPicker.cjs.map +1 -0
  316. package/dist/rpc/OperationEntityPicker.d.ts +51 -0
  317. package/dist/rpc/OperationEntityPicker.d.ts.map +1 -0
  318. package/dist/rpc/OperationEntityPicker.js +185 -0
  319. package/dist/rpc/OperationEntityPicker.js.map +1 -0
  320. package/dist/rpc/OperationEntityPicker.model.cjs +39 -0
  321. package/dist/rpc/OperationEntityPicker.model.cjs.map +1 -0
  322. package/dist/rpc/OperationEntityPicker.model.d.ts +27 -0
  323. package/dist/rpc/OperationEntityPicker.model.d.ts.map +1 -0
  324. package/dist/rpc/OperationEntityPicker.model.js +39 -0
  325. package/dist/rpc/OperationEntityPicker.model.js.map +1 -0
  326. package/dist/rpc/operationCatalogRowSelection.cjs +85 -0
  327. package/dist/rpc/operationCatalogRowSelection.cjs.map +1 -0
  328. package/dist/rpc/operationCatalogRowSelection.d.ts +57 -0
  329. package/dist/rpc/operationCatalogRowSelection.d.ts.map +1 -0
  330. package/dist/rpc/operationCatalogRowSelection.js +85 -0
  331. package/dist/rpc/operationCatalogRowSelection.js.map +1 -0
  332. package/dist/rpc/operationEntityPicker.fixtures.d.ts +13 -0
  333. package/dist/rpc/operationEntityPicker.fixtures.d.ts.map +1 -0
  334. package/dist/rpc.cjs +2 -0
  335. package/dist/rpc.cjs.map +1 -1
  336. package/dist/rpc.d.ts +2 -0
  337. package/dist/rpc.d.ts.map +1 -1
  338. package/dist/rpc.js +2 -0
  339. package/dist/rpc.js.map +1 -1
  340. package/dist/styles.css +1 -1
  341. package/package.json +4 -1
  342. package/schemas/json-schema-form.schema.json +566 -0
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import { useMemo, useState, useEffect } from "react";
2
+ import { useMemo, useState } from "react";
3
3
  import { cn } from "../../lib/utils.js";
4
4
  import { SessionInspectorPanel } from "./SessionInspector.panels.js";
5
- import { SessionInspectorHeader, SessionInspectorSidebar } from "./SessionInspector.summary.js";
5
+ import { SessionInspectorHeader } from "./SessionInspector.summary.js";
6
6
  import { CompactSessionInspectorToolbar } from "./SessionInspector.compact.js";
7
7
  import { InspectorTabs } from "./SessionInspector.tabs.js";
8
8
  import { hasStructuredOutput, inspectorTabs } from "./SessionInspector.tabs.model.js";
@@ -10,12 +10,70 @@ import { SessionTranscript } from "./SessionInspector.transcript.js";
10
10
  import { isSessionCollectionInput } from "./SessionInspector.collection.js";
11
11
  import { SessionHierarchyTree, SessionHierarchyPicker } from "./SessionInspector.hierarchy.js";
12
12
  import { useSessionHierarchy } from "./SessionInspector.hierarchy-state.js";
13
- import { SessionViewer } from "./SessionViewer.js";
13
+ import { LegacySessionInspector } from "./SessionInspector.legacy.js";
14
+ import { useInspectorTab } from "./SessionInspector.tab-state.js";
15
+ import { useRemoteSession, useRemoteCollection } from "./SessionInspector.remote.js";
16
+ import { RemoteSessionStatus } from "./SessionInspector.remote-view.js";
14
17
  import { getSessionMetadata } from "./SessionViewer.model.js";
15
18
  function SessionInspector({
16
19
  session,
20
+ src,
21
+ follow,
22
+ className,
23
+ ...options
24
+ }) {
25
+ if (session !== void 0 && src !== void 0) {
26
+ throw new Error(
27
+ "SessionInspector takes either `session` or `src`, not both"
28
+ );
29
+ }
30
+ if (session === void 0 && src === void 0) {
31
+ throw new Error("SessionInspector requires a `session` or a `src`");
32
+ }
33
+ const followOptions = follow === void 0 ? {} : { follow };
34
+ const remote = useRemoteSession(src, followOptions);
35
+ const collection = session !== void 0 && isSessionCollectionInput(session) ? session : void 0;
36
+ const remoteCollection = useRemoteCollection(collection, followOptions);
37
+ const status = src !== void 0 ? remote : remoteCollection;
38
+ const resolved = src !== void 0 ? remote.session : collection ? remoteCollection.collection : session;
39
+ const remoteBacked = src !== void 0 || collection !== void 0 && remoteCollection.collection !== collection;
40
+ if (resolved && !remoteBacked) {
41
+ return /* @__PURE__ */ jsx(
42
+ SessionInspectorView,
43
+ {
44
+ session: resolved,
45
+ ...followOptions,
46
+ ...options,
47
+ ...className ? { className } : {}
48
+ }
49
+ );
50
+ }
51
+ return /* @__PURE__ */ jsx(
52
+ RemoteSessionStatus,
53
+ {
54
+ loading: status.loading,
55
+ ...status.error ? { error: status.error } : {},
56
+ ...className ? { className } : {},
57
+ children: resolved ? /* @__PURE__ */ jsx(
58
+ SessionInspectorView,
59
+ {
60
+ session: resolved,
61
+ ...followOptions,
62
+ ...options
63
+ }
64
+ ) : null
65
+ }
66
+ );
67
+ }
68
+ function SessionInspectorView({
69
+ session,
70
+ follow,
17
71
  className,
18
72
  defaultTab = "transcript",
73
+ tab,
74
+ onTabChange,
75
+ selectedSessionIds,
76
+ onSelectedSessionIdsChange,
19
77
  transcriptProps,
20
78
  renderSessionActions,
21
79
  onPlanChange,
@@ -33,8 +91,16 @@ function SessionInspector({
33
91
  () => isSessionCollectionInput(session) ? session : detail ? singleSessionCollection(detail) : void 0,
34
92
  [detail, session]
35
93
  );
94
+ const tabProps = {
95
+ ...tab ? { tab } : {},
96
+ ...onTabChange ? { onTabChange } : {}
97
+ };
36
98
  if (collection) {
37
99
  const optionalProps = {
100
+ ...tabProps,
101
+ ...follow === void 0 ? {} : { follow },
102
+ ...selectedSessionIds ? { selectedSessionIds } : {},
103
+ ...onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {},
38
104
  ...className ? { className } : {},
39
105
  ...transcriptProps ? { transcriptProps } : {},
40
106
  ...renderSessionActions ? { renderSessionActions } : {},
@@ -59,6 +125,7 @@ function SessionInspector({
59
125
  {
60
126
  session,
61
127
  defaultTab,
128
+ ...tabProps,
62
129
  ...className ? { className } : {},
63
130
  ...transcriptProps ? { transcriptProps } : {},
64
131
  ...composer ? { composer } : {},
@@ -70,8 +137,13 @@ function SessionInspector({
70
137
  }
71
138
  function CollectionSessionInspector({
72
139
  collection,
140
+ follow,
73
141
  className,
74
142
  defaultTab = "transcript",
143
+ tab: controlledTab,
144
+ onTabChange,
145
+ selectedSessionIds,
146
+ onSelectedSessionIdsChange,
75
147
  transcriptProps,
76
148
  renderSessionActions,
77
149
  onPlanChange,
@@ -81,15 +153,22 @@ function CollectionSessionInspector({
81
153
  metadata,
82
154
  toolbarActions
83
155
  }) {
84
- const hierarchy = useSessionHierarchy(collection);
156
+ const hierarchy = useSessionHierarchy(collection, {
157
+ ...selectedSessionIds ? { selectedSessionIds } : {},
158
+ ...onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {},
159
+ ...follow === void 0 ? {} : { follow }
160
+ });
85
161
  const compact = layout === "compact";
86
162
  const [menuHost, setMenuHost] = useState(null);
87
163
  const outputVisible = hasStructuredOutput(hierarchy.current);
88
- const [tab, setTab] = useState(
89
- defaultTab === "output" && !outputVisible ? "transcript" : defaultTab
164
+ const [tab, setTab] = useInspectorTab(
165
+ defaultTab,
166
+ outputVisible,
167
+ controlledTab,
168
+ onTabChange
90
169
  );
91
170
  const transcriptClassName = cn("h-full", transcriptProps == null ? void 0 : transcriptProps.className);
92
- const panelDetail = tab === "costs" ? hierarchy.filtered : hierarchy.current;
171
+ const panelDetail = tab === "costs" || tab === "verification" ? hierarchy.filtered : hierarchy.current;
93
172
  const compactMetadata = metadata ?? getSessionMetadata(hierarchy.current);
94
173
  const compactTabs = inspectorTabs(
95
174
  outputVisible,
@@ -115,9 +194,6 @@ function CollectionSessionInspector({
115
194
  menuHeader: compactMenuHeader,
116
195
  showMenu: menuHost !== null && (transcriptProps == null ? void 0 : transcriptProps.showMenu) !== false
117
196
  } : transcriptProps;
118
- useEffect(() => {
119
- if (tab === "output" && !outputVisible) setTab("transcript");
120
- }, [outputVisible, tab]);
121
197
  return /* @__PURE__ */ jsxs(
122
198
  "div",
123
199
  {
@@ -157,189 +233,89 @@ function CollectionSessionInspector({
157
233
  ),
158
234
  /* @__PURE__ */ jsx(InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab })
159
235
  ] }),
160
- /* @__PURE__ */ jsxs(
236
+ /* @__PURE__ */ jsx(
161
237
  "div",
162
238
  {
163
239
  className: cn(
164
240
  "min-h-0 flex-1 overflow-y-auto",
165
- !compact && "grid lg:grid-cols-[minmax(0,1fr)_18rem] lg:overflow-hidden"
241
+ !compact && "flex flex-col lg:overflow-hidden"
166
242
  ),
167
- children: [
168
- /* @__PURE__ */ jsxs(
169
- "main",
170
- {
171
- className: cn(
172
- "flex min-w-0 flex-col",
173
- compact ? "min-h-0" : "min-h-[28rem] lg:min-h-0"
174
- ),
175
- children: [
176
- compact ? /* @__PURE__ */ jsxs(Fragment, { children: [
177
- /* @__PURE__ */ jsx(
178
- "div",
179
- {
180
- className: cn(
181
- "min-h-0 flex-1 overflow-hidden",
182
- tab !== "transcript" && "hidden"
183
- ),
184
- children: /* @__PURE__ */ jsx(
185
- SessionTranscript,
186
- {
187
- session: hierarchy.filtered,
188
- viewerProps: {
189
- ...compactTranscriptProps,
190
- className: transcriptClassName
191
- }
192
- }
193
- )
194
- }
195
- ),
196
- tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
197
- SessionInspectorPanel,
198
- {
199
- tab,
200
- detail: panelDetail,
201
- session: hierarchy.current,
202
- ...onPlanChange ? { onPlanChange } : {},
203
- ...onResolveApproval ? { onResolveApproval } : {}
204
- }
205
- ) }) : null
206
- ] }) : /* @__PURE__ */ jsx(
243
+ children: /* @__PURE__ */ jsxs(
244
+ "main",
245
+ {
246
+ className: cn(
247
+ "flex min-w-0 flex-col",
248
+ compact ? "min-h-0" : "min-h-[28rem] flex-1 lg:min-h-0"
249
+ ),
250
+ children: [
251
+ compact ? /* @__PURE__ */ jsxs(Fragment, { children: [
252
+ /* @__PURE__ */ jsx(
207
253
  "div",
208
254
  {
209
255
  className: cn(
210
- "min-h-0 flex-1",
211
- tab === "transcript" ? "overflow-hidden" : "overflow-auto p-density-4"
256
+ "min-h-0 flex-1 overflow-hidden",
257
+ tab !== "transcript" && "hidden"
212
258
  ),
213
- children: tab === "transcript" ? /* @__PURE__ */ jsx(
259
+ children: /* @__PURE__ */ jsx(
214
260
  SessionTranscript,
215
261
  {
216
262
  session: hierarchy.filtered,
217
263
  viewerProps: {
218
- ...transcriptProps,
264
+ ...compactTranscriptProps,
219
265
  className: transcriptClassName
220
266
  }
221
267
  }
222
- ) : /* @__PURE__ */ jsx(
223
- SessionInspectorPanel,
224
- {
225
- tab,
226
- detail: panelDetail,
227
- session: hierarchy.current,
228
- ...onPlanChange ? { onPlanChange } : {},
229
- ...onResolveApproval ? { onResolveApproval } : {}
230
- }
231
268
  )
232
269
  }
233
270
  ),
234
- composer ? /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
235
- ]
236
- }
237
- ),
238
- !compact ? /* @__PURE__ */ jsx(SessionInspectorSidebar, { session: hierarchy.current }) : null
239
- ]
271
+ tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
272
+ SessionInspectorPanel,
273
+ {
274
+ tab,
275
+ detail: panelDetail,
276
+ session: hierarchy.current,
277
+ ...onPlanChange ? { onPlanChange } : {},
278
+ ...onResolveApproval ? { onResolveApproval } : {}
279
+ }
280
+ ) }) : null
281
+ ] }) : /* @__PURE__ */ jsx(
282
+ "div",
283
+ {
284
+ className: cn(
285
+ "min-h-0 flex-1",
286
+ tab === "transcript" ? "overflow-hidden" : "overflow-auto p-density-4"
287
+ ),
288
+ children: tab === "transcript" ? /* @__PURE__ */ jsx(
289
+ SessionTranscript,
290
+ {
291
+ session: hierarchy.filtered,
292
+ viewerProps: {
293
+ ...transcriptProps,
294
+ className: transcriptClassName
295
+ }
296
+ }
297
+ ) : /* @__PURE__ */ jsx(
298
+ SessionInspectorPanel,
299
+ {
300
+ tab,
301
+ detail: panelDetail,
302
+ session: hierarchy.current,
303
+ ...onPlanChange ? { onPlanChange } : {},
304
+ ...onResolveApproval ? { onResolveApproval } : {}
305
+ }
306
+ )
307
+ }
308
+ ),
309
+ composer ? /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
310
+ ]
311
+ }
312
+ )
240
313
  }
241
314
  )
242
315
  ]
243
316
  }
244
317
  );
245
318
  }
246
- function LegacySessionInspector({
247
- session,
248
- className,
249
- defaultTab = "transcript",
250
- transcriptProps,
251
- composer,
252
- layout = "default",
253
- metadata,
254
- toolbarActions
255
- }) {
256
- const compact = layout === "compact";
257
- const [menuHost, setMenuHost] = useState(null);
258
- const [tab, setTab] = useState(
259
- defaultTab === "output" ? "transcript" : defaultTab
260
- );
261
- const transcriptClassName = cn("h-full", transcriptProps == null ? void 0 : transcriptProps.className);
262
- const compactTabs = inspectorTabs(false);
263
- const compactMetadata = metadata ?? getSessionMetadata(session);
264
- const viewerProps = compact ? {
265
- ...transcriptProps,
266
- menuContainer: menuHost,
267
- showMenu: menuHost !== null && (transcriptProps == null ? void 0 : transcriptProps.showMenu) !== false
268
- } : transcriptProps;
269
- return /* @__PURE__ */ jsxs(
270
- "div",
271
- {
272
- className: cn(
273
- "flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm",
274
- compact ? "@container rounded-none border-0 shadow-none" : "rounded-xl border border-border shadow-sm",
275
- className
276
- ),
277
- children: [
278
- compact ? /* @__PURE__ */ jsx(
279
- CompactSessionInspectorToolbar,
280
- {
281
- tabs: compactTabs,
282
- activeTab: tab,
283
- onSelect: (next) => setTab(next),
284
- onMenuHost: setMenuHost,
285
- ...compactMetadata ? { metadata: compactMetadata } : {},
286
- ...toolbarActions ? { toolbarActions } : {}
287
- }
288
- ) : /* @__PURE__ */ jsx(InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab }),
289
- /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [
290
- compact ? /* @__PURE__ */ jsxs(Fragment, { children: [
291
- /* @__PURE__ */ jsx(
292
- "div",
293
- {
294
- className: cn(
295
- "min-h-0 flex-1 overflow-hidden",
296
- tab !== "transcript" && "hidden"
297
- ),
298
- children: /* @__PURE__ */ jsx(
299
- SessionViewer,
300
- {
301
- session,
302
- scrollable: true,
303
- showRowMetadata: true,
304
- ...viewerProps,
305
- className: transcriptClassName,
306
- showHeader: false,
307
- showContextMeter: false
308
- }
309
- )
310
- }
311
- ),
312
- tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
313
- SessionInspectorPanel,
314
- {
315
- tab,
316
- detail: void 0,
317
- session
318
- }
319
- ) }) : null
320
- ] }) : /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: tab === "transcript" ? /* @__PURE__ */ jsx(
321
- SessionViewer,
322
- {
323
- session,
324
- scrollable: true,
325
- showRowMetadata: true,
326
- ...transcriptProps,
327
- className: transcriptClassName
328
- }
329
- ) : /* @__PURE__ */ jsx(
330
- SessionInspectorPanel,
331
- {
332
- tab,
333
- detail: void 0,
334
- session
335
- }
336
- ) }),
337
- composer ? /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
338
- ] })
339
- ]
340
- }
341
- );
342
- }
343
319
  function singleSessionCollection(session) {
344
320
  const id = session.id || "session";
345
321
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.js","sources":["../../../src/data/ai/SessionInspector.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport {\n SessionInspectorHeader,\n SessionInspectorSidebar,\n} from \"./SessionInspector.summary\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n hasStructuredOutput,\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { SessionTranscript } from \"./SessionInspector.transcript\";\nimport {\n isSessionCollectionInput,\n type SessionCollectionInput,\n type SessionCollectionItem,\n type SessionInspectorInput,\n} from \"./SessionInspector.collection\";\nimport {\n SessionHierarchyPicker,\n SessionHierarchyTree,\n} from \"./SessionInspector.hierarchy\";\nimport { useSessionHierarchy } from \"./SessionInspector.hierarchy-state\";\nimport { type ApprovalResolveHandler } from \"./SessionInspector.approvals-model\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\nimport type { UnifiedSessionInput } from \"./SessionViewer.unified\";\n\nexport type { SessionInspectorTab } from \"./SessionInspector.tabs.model\";\n\nexport interface SessionInspectorProps {\n session: SessionInspectorInput;\n className?: string;\n /** Compact keeps tabs, runtime context, host actions, and session options on one line. */\n layout?: \"default\" | \"compact\";\n /** Runtime metadata to display in the compact context bar. Defaults to session metadata. */\n metadata?: SessionMetadataSummary;\n /** Host controls rendered before Session options in the compact toolbar. */\n toolbarActions?: ReactNode;\n defaultTab?: SessionInspectorTab;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n renderSessionActions?: (item: SessionCollectionItem) => ReactNode;\n /** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */\n onPlanChange?: (content: string) => void;\n /** Resolves one pending tool approval from the Approvals tab. Omitted, the\n * tab still lists pending requests but renders no Approve/Deny controls. */\n onResolveApproval?: ApprovalResolveHandler;\n composer?: ReactNode;\n}\n\nexport function SessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorProps) {\n const detail = useMemo(\n () =>\n isSessionCollectionInput(session) ? undefined : asUnifiedSession(session),\n [session],\n );\n const collection = useMemo(\n () =>\n isSessionCollectionInput(session)\n ? session\n : detail\n ? singleSessionCollection(detail)\n : undefined,\n [detail, session],\n );\n\n if (collection) {\n const optionalProps = {\n ...(className ? { className } : {}),\n ...(transcriptProps ? { transcriptProps } : {}),\n ...(renderSessionActions ? { renderSessionActions } : {}),\n ...(onPlanChange ? { onPlanChange } : {}),\n ...(onResolveApproval ? { onResolveApproval } : {}),\n ...(composer ? { composer } : {}),\n ...(layout === \"compact\" ? { layout } : {}),\n ...(metadata ? { metadata } : {}),\n ...(toolbarActions ? { toolbarActions } : {}),\n };\n return (\n <CollectionSessionInspector\n collection={collection}\n defaultTab={defaultTab}\n {...optionalProps}\n />\n );\n }\n\n return (\n <LegacySessionInspector\n session={session as SessionInput}\n defaultTab={defaultTab}\n {...(className ? { className } : {})}\n {...(transcriptProps ? { transcriptProps } : {})}\n {...(composer ? { composer } : {})}\n {...(layout === \"compact\" ? { layout } : {})}\n {...(metadata ? { metadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n );\n}\n\nfunction CollectionSessionInspector({\n collection,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: Omit<SessionInspectorProps, \"session\"> & {\n collection: SessionCollectionInput;\n}) {\n const hierarchy = useSessionHierarchy(collection);\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const outputVisible = hasStructuredOutput(hierarchy.current);\n const [tab, setTab] = useState<SessionInspectorTab>(\n defaultTab === \"output\" && !outputVisible ? \"transcript\" : defaultTab,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const panelDetail = tab === \"costs\" ? hierarchy.filtered : hierarchy.current;\n const compactMetadata = metadata ?? getSessionMetadata(hierarchy.current);\n const compactTabs = inspectorTabs(\n outputVisible,\n hierarchy.current,\n hierarchy.filtered,\n );\n const compactMenuHeader = (\n <div className=\"w-[min(38rem,calc(100vw-4rem))]\">\n <p className=\"px-1 pb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Session content\n </p>\n <SessionHierarchyTree\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n className=\"h-[min(32rem,52vh)]\"\n />\n {transcriptProps?.menuHeader ? (\n <div className=\"mt-1 border-t border-border pt-1\">\n {transcriptProps.menuHeader}\n </div>\n ) : null}\n </div>\n );\n const compactTranscriptProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n menuHeader: compactMenuHeader,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n\n useEffect(() => {\n if (tab === \"output\" && !outputVisible) setTab(\"transcript\");\n }, [outputVisible, tab]);\n\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <>\n <SessionInspectorHeader session={hierarchy.current} />\n <div\n role=\"toolbar\"\n aria-label=\"Session content controls\"\n className=\"flex shrink-0 justify-start border-b border-border px-density-2 py-density-2\"\n >\n <SessionHierarchyPicker\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n />\n </div>\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n </>\n )}\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto\",\n !compact &&\n \"grid lg:grid-cols-[minmax(0,1fr)_18rem] lg:overflow-hidden\",\n )}\n >\n <main\n className={cn(\n \"flex min-w-0 flex-col\",\n compact ? \"min-h-0\" : \"min-h-[28rem] lg:min-h-0\",\n )}\n >\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...compactTranscriptProps,\n className: transcriptClassName,\n }}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div\n className={cn(\n \"min-h-0 flex-1\",\n tab === \"transcript\"\n ? \"overflow-hidden\"\n : \"overflow-auto p-density-4\",\n )}\n >\n {tab === \"transcript\" ? (\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...transcriptProps,\n className: transcriptClassName,\n }}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n )}\n </div>\n )}\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </main>\n {!compact ? (\n <SessionInspectorSidebar session={hierarchy.current} />\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n transcriptProps,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: Pick<\n SessionInspectorProps,\n | \"className\"\n | \"defaultTab\"\n | \"transcriptProps\"\n | \"composer\"\n | \"layout\"\n | \"metadata\"\n | \"toolbarActions\"\n> & {\n session: SessionInput;\n}) {\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const [tab, setTab] = useState<SessionInspectorTab>(\n defaultTab === \"output\" ? \"transcript\" : defaultTab,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const compactTabs = inspectorTabs(false);\n const compactMetadata = metadata ?? getSessionMetadata(session);\n const viewerProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n )}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...viewerProps}\n className={transcriptClassName}\n showHeader={false}\n showContextMeter={false}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {tab === \"transcript\" ? (\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...transcriptProps}\n className={transcriptClassName}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n )}\n </div>\n )}\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction singleSessionCollection(\n session: UnifiedSessionInput,\n): SessionCollectionInput {\n const id = session.id || \"session\";\n return {\n kind: \"session-collection\",\n id,\n currentSessionId: id,\n sessions: [{ id, session }],\n };\n}\n\nfunction asUnifiedSession(\n session: SessionInput,\n): UnifiedSessionInput | undefined {\n if (typeof session !== \"object\" || session === null || Array.isArray(session))\n return undefined;\n return session as UnifiedSessionInput;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionInspector.js","sources":["../../../src/data/ai/SessionInspector.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { SessionInspectorHeader } from \"./SessionInspector.summary\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n hasStructuredOutput,\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { SessionTranscript } from \"./SessionInspector.transcript\";\nimport {\n isSessionCollectionInput,\n type SessionCollectionInput,\n type SessionCollectionItem,\n type SessionInspectorInput,\n} from \"./SessionInspector.collection\";\nimport {\n SessionHierarchyPicker,\n SessionHierarchyTree,\n} from \"./SessionInspector.hierarchy\";\nimport { useSessionHierarchy } from \"./SessionInspector.hierarchy-state\";\nimport { type ApprovalResolveHandler } from \"./SessionInspector.approvals-model\";\nimport { LegacySessionInspector } from \"./SessionInspector.legacy\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport {\n useRemoteCollection,\n useRemoteSession,\n} from \"./SessionInspector.remote\";\nimport { RemoteSessionStatus } from \"./SessionInspector.remote-view\";\nimport type { SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\nimport type { UnifiedSessionInput } from \"./SessionViewer.unified\";\n\nexport type { SessionInspectorTab } from \"./SessionInspector.tabs.model\";\n\n/**\n * Either an in-memory `session` or a session URL `src` (never both — the\n * types forbid it and the component throws). With `src` the inspector fetches\n * the session and follows it while it is live; see `SessionInput` for the URL\n * contract. `follow` forces (`true`) or suppresses (`false`) the live stream\n * for `src` and for collection items that carry `src`.\n */\nexport type SessionInspectorProps = SessionInspectorOptions &\n (\n | { session: SessionInspectorInput; src?: never; follow?: boolean }\n | { src: string; session?: never; follow?: boolean }\n );\n\nexport interface SessionInspectorOptions {\n className?: string;\n /** Compact keeps tabs, runtime context, host actions, and session options on one line. */\n layout?: \"default\" | \"compact\";\n /** Runtime metadata to display in the compact context bar. Defaults to session metadata. */\n metadata?: SessionMetadataSummary;\n /** Host controls rendered before Session options in the compact toolbar. */\n toolbarActions?: ReactNode;\n defaultTab?: SessionInspectorTab;\n /** Controlled active tab (e.g. from the URL); pair with `onTabChange`. */\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n /** Controlled session-level selection of a session collection; `[]` selects\n * nothing. Omit to start from the collection's defaults. */\n selectedSessionIds?: readonly string[];\n onSelectedSessionIdsChange?: (ids: string[]) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n renderSessionActions?: (item: SessionCollectionItem) => ReactNode;\n /** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */\n onPlanChange?: (content: string) => void;\n /** Resolves one pending tool approval from the Approvals tab. Omitted, the\n * tab still lists pending requests but renders no Approve/Deny controls. */\n onResolveApproval?: ApprovalResolveHandler;\n composer?: ReactNode;\n}\n\nexport function SessionInspector({\n session,\n src,\n follow,\n className,\n ...options\n}: SessionInspectorProps) {\n if (session !== undefined && src !== undefined) {\n throw new Error(\n \"SessionInspector takes either `session` or `src`, not both\",\n );\n }\n if (session === undefined && src === undefined) {\n throw new Error(\"SessionInspector requires a `session` or a `src`\");\n }\n const followOptions = follow === undefined ? {} : { follow };\n const remote = useRemoteSession(src, followOptions);\n const collection =\n session !== undefined && isSessionCollectionInput(session)\n ? session\n : undefined;\n const remoteCollection = useRemoteCollection(collection, followOptions);\n const status = src !== undefined ? remote : remoteCollection;\n const resolved: SessionInspectorInput | undefined =\n src !== undefined\n ? remote.session\n : collection\n ? remoteCollection.collection\n : session;\n\n // A URL-backed inspector always renders inside the status wrapper, so an\n // error arriving mid-follow adds the alert without remounting the view.\n const remoteBacked =\n src !== undefined ||\n (collection !== undefined && remoteCollection.collection !== collection);\n if (resolved && !remoteBacked) {\n return (\n <SessionInspectorView\n session={resolved}\n {...followOptions}\n {...options}\n {...(className ? { className } : {})}\n />\n );\n }\n return (\n <RemoteSessionStatus\n loading={status.loading}\n {...(status.error ? { error: status.error } : {})}\n {...(className ? { className } : {})}\n >\n {resolved ? (\n <SessionInspectorView\n session={resolved}\n {...followOptions}\n {...options}\n />\n ) : null}\n </RemoteSessionStatus>\n );\n}\n\nfunction SessionInspectorView({\n session,\n follow,\n className,\n defaultTab = \"transcript\",\n tab,\n onTabChange,\n selectedSessionIds,\n onSelectedSessionIdsChange,\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorOptions & {\n session: SessionInspectorInput;\n follow?: boolean;\n}) {\n const detail = useMemo(\n () =>\n isSessionCollectionInput(session) ? undefined : asUnifiedSession(session),\n [session],\n );\n const collection = useMemo(\n () =>\n isSessionCollectionInput(session)\n ? session\n : detail\n ? singleSessionCollection(detail)\n : undefined,\n [detail, session],\n );\n\n const tabProps = {\n ...(tab ? { tab } : {}),\n ...(onTabChange ? { onTabChange } : {}),\n };\n\n if (collection) {\n const optionalProps = {\n ...tabProps,\n ...(follow === undefined ? {} : { follow }),\n ...(selectedSessionIds ? { selectedSessionIds } : {}),\n ...(onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {}),\n ...(className ? { className } : {}),\n ...(transcriptProps ? { transcriptProps } : {}),\n ...(renderSessionActions ? { renderSessionActions } : {}),\n ...(onPlanChange ? { onPlanChange } : {}),\n ...(onResolveApproval ? { onResolveApproval } : {}),\n ...(composer ? { composer } : {}),\n ...(layout === \"compact\" ? { layout } : {}),\n ...(metadata ? { metadata } : {}),\n ...(toolbarActions ? { toolbarActions } : {}),\n };\n return (\n <CollectionSessionInspector\n collection={collection}\n defaultTab={defaultTab}\n {...optionalProps}\n />\n );\n }\n\n return (\n <LegacySessionInspector\n session={session as SessionInput}\n defaultTab={defaultTab}\n {...tabProps}\n {...(className ? { className } : {})}\n {...(transcriptProps ? { transcriptProps } : {})}\n {...(composer ? { composer } : {})}\n {...(layout === \"compact\" ? { layout } : {})}\n {...(metadata ? { metadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n );\n}\n\nfunction CollectionSessionInspector({\n collection,\n follow,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n selectedSessionIds,\n onSelectedSessionIdsChange,\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorOptions & {\n collection: SessionCollectionInput;\n follow?: boolean;\n}) {\n const hierarchy = useSessionHierarchy(collection, {\n ...(selectedSessionIds ? { selectedSessionIds } : {}),\n ...(onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {}),\n ...(follow === undefined ? {} : { follow }),\n });\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const outputVisible = hasStructuredOutput(hierarchy.current);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n outputVisible,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const panelDetail =\n tab === \"costs\" || tab === \"verification\"\n ? hierarchy.filtered\n : hierarchy.current;\n const compactMetadata = metadata ?? getSessionMetadata(hierarchy.current);\n const compactTabs = inspectorTabs(\n outputVisible,\n hierarchy.current,\n hierarchy.filtered,\n );\n const compactMenuHeader = (\n <div className=\"w-[min(38rem,calc(100vw-4rem))]\">\n <p className=\"px-1 pb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Session content\n </p>\n <SessionHierarchyTree\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n className=\"h-[min(32rem,52vh)]\"\n />\n {transcriptProps?.menuHeader ? (\n <div className=\"mt-1 border-t border-border pt-1\">\n {transcriptProps.menuHeader}\n </div>\n ) : null}\n </div>\n );\n const compactTranscriptProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n menuHeader: compactMenuHeader,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <>\n <SessionInspectorHeader session={hierarchy.current} />\n <div\n role=\"toolbar\"\n aria-label=\"Session content controls\"\n className=\"flex shrink-0 justify-start border-b border-border px-density-2 py-density-2\"\n >\n <SessionHierarchyPicker\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n />\n </div>\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n </>\n )}\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto\",\n !compact && \"flex flex-col lg:overflow-hidden\",\n )}\n >\n <main\n className={cn(\n \"flex min-w-0 flex-col\",\n compact ? \"min-h-0\" : \"min-h-[28rem] flex-1 lg:min-h-0\",\n )}\n >\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...compactTranscriptProps,\n className: transcriptClassName,\n }}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div\n className={cn(\n \"min-h-0 flex-1\",\n tab === \"transcript\"\n ? \"overflow-hidden\"\n : \"overflow-auto p-density-4\",\n )}\n >\n {tab === \"transcript\" ? (\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...transcriptProps,\n className: transcriptClassName,\n }}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n )}\n </div>\n )}\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </main>\n </div>\n </div>\n );\n}\n\nfunction singleSessionCollection(\n session: UnifiedSessionInput,\n): SessionCollectionInput {\n const id = session.id || \"session\";\n return {\n kind: \"session-collection\",\n id,\n currentSessionId: id,\n sessions: [{ id, session }],\n };\n}\n\nfunction asUnifiedSession(\n session: SessionInput,\n): UnifiedSessionInput | undefined {\n if (typeof session !== \"object\" || session === null || Array.isArray(session))\n return undefined;\n return session as UnifiedSessionInput;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
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 utils = require("../../lib/utils.cjs");
6
+ const SessionInspector_panels = require("./SessionInspector.panels.cjs");
7
+ const SessionInspector_compact = require("./SessionInspector.compact.cjs");
8
+ const SessionInspector_tabs = require("./SessionInspector.tabs.cjs");
9
+ const SessionInspector_tabs_model = require("./SessionInspector.tabs.model.cjs");
10
+ const SessionInspector_tabState = require("./SessionInspector.tab-state.cjs");
11
+ const SessionViewer = require("./SessionViewer.cjs");
12
+ const SessionViewer_model = require("./SessionViewer.model.cjs");
13
+ function LegacySessionInspector({
14
+ session,
15
+ className,
16
+ defaultTab = "transcript",
17
+ tab: controlledTab,
18
+ onTabChange,
19
+ transcriptProps,
20
+ composer,
21
+ layout = "default",
22
+ metadata,
23
+ toolbarActions
24
+ }) {
25
+ const compact = layout === "compact";
26
+ const [menuHost, setMenuHost] = react.useState(null);
27
+ const [tab, setTab] = SessionInspector_tabState.useInspectorTab(
28
+ defaultTab,
29
+ false,
30
+ controlledTab,
31
+ onTabChange
32
+ );
33
+ const transcriptClassName = utils.cn("h-full", transcriptProps == null ? void 0 : transcriptProps.className);
34
+ const compactTabs = SessionInspector_tabs_model.inspectorTabs(false);
35
+ const compactMetadata = metadata ?? SessionViewer_model.getSessionMetadata(session);
36
+ const viewerProps = compact ? {
37
+ ...transcriptProps,
38
+ menuContainer: menuHost,
39
+ showMenu: menuHost !== null && (transcriptProps == null ? void 0 : transcriptProps.showMenu) !== false
40
+ } : transcriptProps;
41
+ return /* @__PURE__ */ jsxRuntime.jsxs(
42
+ "div",
43
+ {
44
+ className: utils.cn(
45
+ "flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm",
46
+ compact ? "@container rounded-none border-0 shadow-none" : "rounded-xl border border-border shadow-sm",
47
+ className
48
+ ),
49
+ children: [
50
+ compact ? /* @__PURE__ */ jsxRuntime.jsx(
51
+ SessionInspector_compact.CompactSessionInspectorToolbar,
52
+ {
53
+ tabs: compactTabs,
54
+ activeTab: tab,
55
+ onSelect: (next) => setTab(next),
56
+ onMenuHost: setMenuHost,
57
+ ...compactMetadata ? { metadata: compactMetadata } : {},
58
+ ...toolbarActions ? { toolbarActions } : {}
59
+ }
60
+ ) : /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_tabs.InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab }),
61
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [
62
+ compact ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
63
+ /* @__PURE__ */ jsxRuntime.jsx(
64
+ "div",
65
+ {
66
+ className: utils.cn(
67
+ "min-h-0 flex-1 overflow-hidden",
68
+ tab !== "transcript" && "hidden"
69
+ ),
70
+ children: /* @__PURE__ */ jsxRuntime.jsx(
71
+ SessionViewer.SessionViewer,
72
+ {
73
+ session,
74
+ scrollable: true,
75
+ showRowMetadata: true,
76
+ ...viewerProps,
77
+ className: transcriptClassName,
78
+ showHeader: false,
79
+ showContextMeter: false
80
+ }
81
+ )
82
+ }
83
+ ),
84
+ tab !== "transcript" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsxRuntime.jsx(
85
+ SessionInspector_panels.SessionInspectorPanel,
86
+ {
87
+ tab,
88
+ detail: void 0,
89
+ session
90
+ }
91
+ ) }) : null
92
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: tab === "transcript" ? /* @__PURE__ */ jsxRuntime.jsx(
93
+ SessionViewer.SessionViewer,
94
+ {
95
+ session,
96
+ scrollable: true,
97
+ showRowMetadata: true,
98
+ ...transcriptProps,
99
+ className: transcriptClassName
100
+ }
101
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
102
+ SessionInspector_panels.SessionInspectorPanel,
103
+ {
104
+ tab,
105
+ detail: void 0,
106
+ session
107
+ }
108
+ ) }),
109
+ composer ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
110
+ ] })
111
+ ]
112
+ }
113
+ );
114
+ }
115
+ exports.LegacySessionInspector = LegacySessionInspector;
116
+ //# sourceMappingURL=SessionInspector.legacy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInspector.legacy.cjs","sources":["../../../src/data/ai/SessionInspector.legacy.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\n\n/** The inspector for a non-unified session (legacy entries or raw log text):\n * only the transcript carries content, so it has no hierarchy or facets. */\nexport function LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n transcriptProps,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: {\n session: SessionInput;\n className?: string;\n defaultTab?: SessionInspectorTab;\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n composer?: ReactNode;\n layout?: \"default\" | \"compact\";\n metadata?: SessionMetadataSummary;\n toolbarActions?: ReactNode;\n}) {\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n false,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const compactTabs = inspectorTabs(false);\n const compactMetadata = metadata ?? getSessionMetadata(session);\n const viewerProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n )}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...viewerProps}\n className={transcriptClassName}\n showHeader={false}\n showContextMeter={false}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {tab === \"transcript\" ? (\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...transcriptProps}\n className={transcriptClassName}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n )}\n </div>\n )}\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["useState","useInspectorTab","cn","inspectorTabs","getSessionMetadata","jsxs","jsx","CompactSessionInspectorToolbar","InspectorTabs","Fragment","SessionViewer","SessionInspectorPanel"],"mappings":";;;;;;;;;;;;AAmBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAWG;AACD,QAAM,UAAU,WAAW;AAC3B,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAAiC,IAAI;AACrE,QAAM,CAAC,KAAK,MAAM,IAAIC,0BAAAA;AAAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,sBAAsBC,MAAAA,GAAG,UAAU,mDAAiB,SAAS;AACnE,QAAM,cAAcC,4BAAAA,cAAc,KAAK;AACvC,QAAM,kBAAkB,YAAYC,oBAAAA,mBAAmB,OAAO;AAC9D,QAAM,cAAc,UAChB;AAAA,IACE,GAAG;AAAA,IACH,eAAe;AAAA,IACf,UAAU,aAAa,SAAQ,mDAAiB,cAAa;AAAA,EAAA,IAE/D;AACJ,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH,MAAAA;AAAAA,QACT;AAAA,QACA,UACI,iDACA;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,UACCI,2BAAAA;AAAAA,UAACC,yBAAAA;AAAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAW;AAAA,YACX,UAAU,CAAC,SAAS,OAAO,IAA2B;AAAA,YACtD,YAAY;AAAA,YACX,GAAI,kBAAkB,EAAE,UAAU,gBAAA,IAAoB,CAAA;AAAA,YACtD,GAAI,iBAAiB,EAAE,mBAAmB,CAAA;AAAA,UAAC;AAAA,QAAA,IAG9CD,2BAAAA,IAACE,sBAAAA,eAAA,EAAc,KAAU,MAAM,aAAa,UAAU,QAAQ;AAAA,QAEhEH,2BAAAA,KAAC,OAAA,EAAI,WAAU,gDACZ,UAAA;AAAA,UAAA,UACCA,2BAAAA,KAAAI,qBAAA,EACE,UAAA;AAAA,YAAAH,2BAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWJ,MAAAA;AAAAA,kBACT;AAAA,kBACA,QAAQ,gBAAgB;AAAA,gBAAA;AAAA,gBAG1B,UAAAI,2BAAAA;AAAAA,kBAACI,cAAAA;AAAAA,kBAAA;AAAA,oBACC;AAAA,oBACA,YAAU;AAAA,oBACV,iBAAe;AAAA,oBACd,GAAG;AAAA,oBACJ,WAAW;AAAA,oBACX,YAAY;AAAA,oBACZ,kBAAkB;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACpB;AAAA,YAAA;AAAA,YAED,QAAQ,eACPJ,+BAAC,OAAA,EAAI,WAAU,4CACb,UAAAA,2BAAAA;AAAAA,cAACK,wBAAAA;AAAAA,cAAA;AAAA,gBACC;AAAA,gBACA,QAAQ;AAAA,gBACR;AAAA,cAAA;AAAA,YAAA,GAEJ,IACE;AAAA,UAAA,GACN,IAEAL,+BAAC,OAAA,EAAI,WAAU,kCACZ,kBAAQ,eACPA,2BAAAA;AAAAA,YAACI,cAAAA;AAAAA,YAAA;AAAA,cACC;AAAA,cACA,YAAU;AAAA,cACV,iBAAe;AAAA,cACd,GAAG;AAAA,cACJ,WAAW;AAAA,YAAA;AAAA,UAAA,IAGbJ,2BAAAA;AAAAA,YAACK,wBAAAA;AAAAA,YAAA;AAAA,cACC;AAAA,cACA,QAAQ;AAAA,cACR;AAAA,YAAA;AAAA,UAAA,GAGN;AAAA,UAED,WACCL,2BAAAA,IAAC,OAAA,EAAI,WAAU,+CACZ,oBACH,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;;"}
@@ -0,0 +1,19 @@
1
+ import { ReactNode } from 'react';
2
+ import { SessionInspectorTab } from './SessionInspector.tabs.model.js';
3
+ import { SessionViewerProps } from './SessionViewer.js';
4
+ import { SessionInput, SessionMetadataSummary } from './SessionViewer.model.js';
5
+ /** The inspector for a non-unified session (legacy entries or raw log text):
6
+ * only the transcript carries content, so it has no hierarchy or facets. */
7
+ export declare function LegacySessionInspector({ session, className, defaultTab, tab: controlledTab, onTabChange, transcriptProps, composer, layout, metadata, toolbarActions, }: {
8
+ session: SessionInput;
9
+ className?: string;
10
+ defaultTab?: SessionInspectorTab;
11
+ tab?: SessionInspectorTab;
12
+ onTabChange?: (tab: SessionInspectorTab) => void;
13
+ transcriptProps?: Omit<SessionViewerProps, "session">;
14
+ composer?: ReactNode;
15
+ layout?: "default" | "compact";
16
+ metadata?: SessionMetadataSummary;
17
+ toolbarActions?: ReactNode;
18
+ }): import("react").JSX.Element;
19
+ //# sourceMappingURL=SessionInspector.legacy.d.ts.map