@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInspector.legacy.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.legacy.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKjD,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAE/B;6EAC6E;AAC7E,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,SAAS,EACT,UAAyB,EACzB,GAAG,EAAE,aAAa,EAClB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,MAAkB,EAClB,QAAQ,EACR,cAAc,GACf,EAAE;IACD,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,cAAc,CAAC,EAAE,SAAS,CAAC;CAC5B,+BAiGA"}
@@ -0,0 +1,116 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { cn } from "../../lib/utils.js";
4
+ import { SessionInspectorPanel } from "./SessionInspector.panels.js";
5
+ import { CompactSessionInspectorToolbar } from "./SessionInspector.compact.js";
6
+ import { InspectorTabs } from "./SessionInspector.tabs.js";
7
+ import { inspectorTabs } from "./SessionInspector.tabs.model.js";
8
+ import { useInspectorTab } from "./SessionInspector.tab-state.js";
9
+ import { SessionViewer } from "./SessionViewer.js";
10
+ import { getSessionMetadata } from "./SessionViewer.model.js";
11
+ function LegacySessionInspector({
12
+ session,
13
+ className,
14
+ defaultTab = "transcript",
15
+ tab: controlledTab,
16
+ onTabChange,
17
+ transcriptProps,
18
+ composer,
19
+ layout = "default",
20
+ metadata,
21
+ toolbarActions
22
+ }) {
23
+ const compact = layout === "compact";
24
+ const [menuHost, setMenuHost] = useState(null);
25
+ const [tab, setTab] = useInspectorTab(
26
+ defaultTab,
27
+ false,
28
+ controlledTab,
29
+ onTabChange
30
+ );
31
+ const transcriptClassName = cn("h-full", transcriptProps == null ? void 0 : transcriptProps.className);
32
+ const compactTabs = inspectorTabs(false);
33
+ const compactMetadata = metadata ?? getSessionMetadata(session);
34
+ const viewerProps = compact ? {
35
+ ...transcriptProps,
36
+ menuContainer: menuHost,
37
+ showMenu: menuHost !== null && (transcriptProps == null ? void 0 : transcriptProps.showMenu) !== false
38
+ } : transcriptProps;
39
+ return /* @__PURE__ */ jsxs(
40
+ "div",
41
+ {
42
+ className: cn(
43
+ "flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm",
44
+ compact ? "@container rounded-none border-0 shadow-none" : "rounded-xl border border-border shadow-sm",
45
+ className
46
+ ),
47
+ children: [
48
+ compact ? /* @__PURE__ */ jsx(
49
+ CompactSessionInspectorToolbar,
50
+ {
51
+ tabs: compactTabs,
52
+ activeTab: tab,
53
+ onSelect: (next) => setTab(next),
54
+ onMenuHost: setMenuHost,
55
+ ...compactMetadata ? { metadata: compactMetadata } : {},
56
+ ...toolbarActions ? { toolbarActions } : {}
57
+ }
58
+ ) : /* @__PURE__ */ jsx(InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab }),
59
+ /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [
60
+ compact ? /* @__PURE__ */ jsxs(Fragment, { children: [
61
+ /* @__PURE__ */ jsx(
62
+ "div",
63
+ {
64
+ className: cn(
65
+ "min-h-0 flex-1 overflow-hidden",
66
+ tab !== "transcript" && "hidden"
67
+ ),
68
+ children: /* @__PURE__ */ jsx(
69
+ SessionViewer,
70
+ {
71
+ session,
72
+ scrollable: true,
73
+ showRowMetadata: true,
74
+ ...viewerProps,
75
+ className: transcriptClassName,
76
+ showHeader: false,
77
+ showContextMeter: false
78
+ }
79
+ )
80
+ }
81
+ ),
82
+ tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
83
+ SessionInspectorPanel,
84
+ {
85
+ tab,
86
+ detail: void 0,
87
+ session
88
+ }
89
+ ) }) : null
90
+ ] }) : /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: tab === "transcript" ? /* @__PURE__ */ jsx(
91
+ SessionViewer,
92
+ {
93
+ session,
94
+ scrollable: true,
95
+ showRowMetadata: true,
96
+ ...transcriptProps,
97
+ className: transcriptClassName
98
+ }
99
+ ) : /* @__PURE__ */ jsx(
100
+ SessionInspectorPanel,
101
+ {
102
+ tab,
103
+ detail: void 0,
104
+ session
105
+ }
106
+ ) }),
107
+ composer ? /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
108
+ ] })
109
+ ]
110
+ }
111
+ );
112
+ }
113
+ export {
114
+ LegacySessionInspector
115
+ };
116
+ //# sourceMappingURL=SessionInspector.legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInspector.legacy.js","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":[],"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,IAAI,SAAiC,IAAI;AACrE,QAAM,CAAC,KAAK,MAAM,IAAI;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,sBAAsB,GAAG,UAAU,mDAAiB,SAAS;AACnE,QAAM,cAAc,cAAc,KAAK;AACvC,QAAM,kBAAkB,YAAY,mBAAmB,OAAO;AAC9D,QAAM,cAAc,UAChB;AAAA,IACE,GAAG;AAAA,IACH,eAAe;AAAA,IACf,UAAU,aAAa,SAAQ,mDAAiB,cAAa;AAAA,EAAA,IAE/D;AACJ,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,UACI,iDACA;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,UACC;AAAA,UAAC;AAAA,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,IAG9C,oBAAC,eAAA,EAAc,KAAU,MAAM,aAAa,UAAU,QAAQ;AAAA,QAEhE,qBAAC,OAAA,EAAI,WAAU,gDACZ,UAAA;AAAA,UAAA,UACC,qBAAA,UAAA,EACE,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,QAAQ,gBAAgB;AAAA,gBAAA;AAAA,gBAG1B,UAAA;AAAA,kBAAC;AAAA,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,eACP,oBAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA,QAAQ;AAAA,gBACR;AAAA,cAAA;AAAA,YAAA,GAEJ,IACE;AAAA,UAAA,GACN,IAEA,oBAAC,OAAA,EAAI,WAAU,kCACZ,kBAAQ,eACP;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,YAAU;AAAA,cACV,iBAAe;AAAA,cACd,GAAG;AAAA,cACJ,WAAW;AAAA,YAAA;AAAA,UAAA,IAGb;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,QAAQ;AAAA,cACR;AAAA,YAAA;AAAA,UAAA,GAGN;AAAA,UAED,WACC,oBAAC,OAAA,EAAI,WAAU,+CACZ,oBACH,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -7,6 +7,7 @@ const sessionCost = require("./session-cost.cjs");
7
7
  const SessionInspector_model = require("./SessionInspector.model.cjs");
8
8
  const SessionInspector_files = require("./SessionInspector.files.cjs");
9
9
  const SessionInspector_plan = require("./SessionInspector.plan.cjs");
10
+ const SessionInspector_verification = require("./SessionInspector.verification.cjs");
10
11
  const SessionInspector_approvals = require("./SessionInspector.approvals.cjs");
11
12
  const SessionInspector_panelParts = require("./SessionInspector.panel-parts.cjs");
12
13
  const SessionInspector_panelValues = require("./SessionInspector.panel-values.cjs");
@@ -21,6 +22,8 @@ function SessionInspectorPanel({
21
22
  switch (tab) {
22
23
  case "output":
23
24
  return /* @__PURE__ */ jsxRuntime.jsx(StructuredOutputPanel, { value: detail == null ? void 0 : detail.structuredOutput });
25
+ case "verification":
26
+ return /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_verification.SessionVerificationPanel, { verifications: detail == null ? void 0 : detail.verifications });
24
27
  case "files":
25
28
  return /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_files.SessionFilesPanel, { files: detail == null ? void 0 : detail.files });
26
29
  case "plan":
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.panels.cjs","sources":["../../../src/data/ai/SessionInspector.panels.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { KeyValueList, type KeyValueListItem } from \"../KeyValueList\";\nimport {\n compactTokens,\n costTotal,\n formatCost,\n tokenTotal,\n} from \"./session-cost\";\nimport { durationLabel, formatDate } from \"./SessionInspector.model\";\nimport { SessionFilesPanel } from \"./SessionInspector.files\";\nimport { SessionPlanPanel } from \"./SessionInspector.plan\";\nimport {\n SessionApprovalsPanel,\n type ApprovalResolveHandler,\n} from \"./SessionInspector.approvals\";\nimport { EmptyState } from \"./SessionInspector.panel-parts\";\nimport { kv, muted } from \"./SessionInspector.panel-values\";\nimport type { SessionInput } from \"./SessionViewer.model\";\nimport type {\n SessionCost,\n SessionHealth,\n SessionLiveProcess,\n SessionUsage,\n UnifiedSessionInput,\n} from \"./SessionViewer.unified\";\nimport type { SessionInspectorTab } from \"./SessionInspector\";\n\nexport function SessionInspectorPanel({\n tab,\n detail,\n session,\n onPlanChange,\n onResolveApproval,\n}: {\n tab: SessionInspectorTab;\n detail: UnifiedSessionInput | undefined;\n session: SessionInput;\n onPlanChange?: (content: string) => void;\n onResolveApproval?: ApprovalResolveHandler;\n}) {\n switch (tab) {\n case \"output\":\n return <StructuredOutputPanel value={detail?.structuredOutput} />;\n case \"files\":\n return <SessionFilesPanel files={detail?.files} />;\n case \"plan\":\n return (\n <SessionPlanPanel\n plan={detail?.plan}\n {...(onPlanChange ? { onChange: onPlanChange } : {})}\n />\n );\n case \"approvals\":\n return (\n <SessionApprovalsPanel\n approvals={detail?.approvals}\n requests={detail?.requests}\n {...(onResolveApproval ? { onResolve: onResolveApproval } : {})}\n />\n );\n case \"costs\":\n return (\n <CostsPanel\n usage={detail?.usage}\n cost={detail?.cost}\n toolCosts={detail?.toolCosts}\n />\n );\n case \"metadata\":\n return <MetadataPanel session={detail} />;\n case \"raw\":\n return <RawPanel value={detail ?? session} />;\n default:\n return null;\n }\n}\n\nfunction StructuredOutputPanel({ value }: { value: unknown }) {\n if (value === undefined || value === null)\n return <EmptyState>No structured output.</EmptyState>;\n return (\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n copyable\n jsonDefaultOpenDepth={3}\n />\n );\n}\n\nfunction CostsPanel({\n usage,\n cost,\n toolCosts,\n}: {\n usage: SessionUsage | undefined;\n cost: SessionCost | undefined;\n toolCosts: SessionCost[] | undefined;\n}) {\n if (!usage && !cost && !toolCosts?.length)\n return <EmptyState>No cost metadata.</EmptyState>;\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Tokens\", usageLabel(usage ?? cost)),\n kv(\"Cost\", costLabel(cost)),\n kv(\"Input\", compactTokens((usage ?? cost)?.inputTokens)),\n kv(\"Output\", compactTokens((usage ?? cost)?.outputTokens)),\n kv(\"Reasoning\", compactTokens((usage ?? cost)?.reasoningTokens)),\n kv(\"Cache Read\", compactTokens((usage ?? cost)?.cacheReadTokens)),\n kv(\"Cache Write\", compactTokens((usage ?? cost)?.cacheWriteTokens)),\n ]}\n />\n {toolCosts?.length ? <CostBreakdown costs={toolCosts} /> : null}\n </div>\n );\n}\n\nfunction CostBreakdown({ costs }: { costs: SessionCost[] }) {\n return (\n <div className=\"overflow-auto rounded-md border border-border\">\n <table className=\"w-full min-w-[560px] border-collapse text-left text-sm\">\n <thead className=\"bg-muted/60 text-xs text-muted-foreground\">\n <tr>\n <Th>Model</Th>\n <Th>Tokens</Th>\n <Th>Input</Th>\n <Th>Output</Th>\n <Th>Cache</Th>\n <Th>Cost</Th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {costs.map((entry, index) => (\n <tr key={`${entry.model || \"model\"}-${index}`}>\n <Td>{entry.model || muted(\"unknown\")}</Td>\n <Td>{compactTokens(tokenTotal(entry))}</Td>\n <Td>{compactTokens(entry.inputTokens)}</Td>\n <Td>{compactTokens(entry.outputTokens)}</Td>\n <Td>\n {compactTokens(\n (entry.cacheReadTokens ?? 0) + (entry.cacheWriteTokens ?? 0)\n )}\n </Td>\n <Td>{costLabel(entry)}</Td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction MetadataPanel({\n session,\n}: {\n session: UnifiedSessionInput | undefined;\n}) {\n if (!session) return <EmptyState>No unified session metadata.</EmptyState>;\n const identity: KeyValueListItem[] = [\n kv(\"ID\", session.id),\n kv(\"Source\", session.source),\n kv(\"Project\", session.project),\n kv(\"CWD\", session.cwd),\n kv(\"History\", session.historyFile),\n kv(\"Model\", session.model),\n kv(\"Provider\", session.provider),\n kv(\"Mode\", session.modelMode),\n kv(\"Effort\", session.reasoningEffort),\n kv(\"Version\", session.version),\n kv(\"Git\", gitLabel(session.git)),\n kv(\"Started\", formatDate(session.startedAt)),\n kv(\"Ended\", formatDate(session.endedAt)),\n kv(\"Duration\", durationLabel(session.startedAt, session.endedAt)),\n kv(\"Live\", liveLabel(session.live)),\n kv(\"Health\", healthLabel(session.health)),\n ];\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList items={identity} />\n <JsonSection title=\"Capabilities\" value={session.capabilities} />\n <JsonSection title=\"Context\" value={session.context} />\n <JsonSection title=\"Budget\" value={session.budget} />\n <JsonSection title=\"Events\" value={session.events} />\n <JsonSection title=\"Prompt\" value={session.prompt} />\n </div>\n );\n}\n\nfunction RawPanel({ value }: { value: unknown }) {\n return (\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n copyable\n jsonDefaultOpenDepth={1}\n />\n );\n}\n\nfunction JsonSection({ title, value }: { title: string; value: unknown }) {\n if (\n value === undefined ||\n value === null ||\n (Array.isArray(value) && value.length === 0)\n )\n return null;\n return (\n <section>\n <h3 className=\"mb-density-2 text-xs font-semibold uppercase text-muted-foreground\">\n {title}\n </h3>\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n jsonDefaultOpenDepth={1}\n />\n </section>\n );\n}\n\nfunction Th({ children }: { children: ReactNode }) {\n return <th className=\"px-density-3 py-density-2 font-medium\">{children}</th>;\n}\n\nfunction Td({ children }: { children: ReactNode }) {\n return <td className=\"px-density-3 py-density-2\">{children}</td>;\n}\n\nfunction jsonSource(value: unknown) {\n if (typeof value === \"string\") {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction usageLabel(usage?: SessionUsage | SessionCost) {\n const total = tokenTotal(usage);\n return total ? `${compactTokens(total)} tokens` : muted(\"-\");\n}\n\nfunction costLabel(cost?: SessionCost) {\n const total = costTotal(cost);\n return total ? formatCost(total) : muted(\"-\");\n}\n\nfunction gitLabel(git?: {\n branch?: string;\n commit?: string;\n worktree?: string;\n diff?: string;\n}) {\n if (!git) return \"\";\n return [git.branch, git.commit, git.worktree, git.diff ? \"diff\" : \"\"]\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction liveLabel(live?: SessionLiveProcess) {\n if (!live) return \"\";\n return [\n live.status || (live.active ? \"active\" : \"inactive\"),\n live.pid ? `pid ${live.pid}` : \"\",\n live.command,\n ]\n .filter(Boolean)\n .join(\" - \");\n}\n\nfunction healthLabel(health?: SessionHealth[]) {\n return (\n health?.map((item) => `${item.severity}:${item.kind}`).join(\", \") ?? \"\"\n );\n}\n"],"names":["jsx","SessionFilesPanel","SessionPlanPanel","SessionApprovalsPanel","EmptyState","CodeBlock","jsxs","KeyValueList","kv","compactTokens","muted","tokenTotal","formatDate","durationLabel","costTotal","formatCost"],"mappings":"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"}
1
+ {"version":3,"file":"SessionInspector.panels.cjs","sources":["../../../src/data/ai/SessionInspector.panels.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { KeyValueList, type KeyValueListItem } from \"../KeyValueList\";\nimport {\n compactTokens,\n costTotal,\n formatCost,\n tokenTotal,\n} from \"./session-cost\";\nimport { durationLabel, formatDate } from \"./SessionInspector.model\";\nimport { SessionFilesPanel } from \"./SessionInspector.files\";\nimport { SessionPlanPanel } from \"./SessionInspector.plan\";\nimport { SessionVerificationPanel } from \"./SessionInspector.verification\";\nimport {\n SessionApprovalsPanel,\n type ApprovalResolveHandler,\n} from \"./SessionInspector.approvals\";\nimport { EmptyState } from \"./SessionInspector.panel-parts\";\nimport { kv, muted } from \"./SessionInspector.panel-values\";\nimport type { SessionInput } from \"./SessionViewer.model\";\nimport type {\n SessionCost,\n SessionHealth,\n SessionLiveProcess,\n SessionUsage,\n UnifiedSessionInput,\n} from \"./SessionViewer.unified\";\nimport type { SessionInspectorTab } from \"./SessionInspector\";\n\nexport function SessionInspectorPanel({\n tab,\n detail,\n session,\n onPlanChange,\n onResolveApproval,\n}: {\n tab: SessionInspectorTab;\n detail: UnifiedSessionInput | undefined;\n session: SessionInput;\n onPlanChange?: (content: string) => void;\n onResolveApproval?: ApprovalResolveHandler;\n}) {\n switch (tab) {\n case \"output\":\n return <StructuredOutputPanel value={detail?.structuredOutput} />;\n case \"verification\":\n return <SessionVerificationPanel verifications={detail?.verifications} />;\n case \"files\":\n return <SessionFilesPanel files={detail?.files} />;\n case \"plan\":\n return (\n <SessionPlanPanel\n plan={detail?.plan}\n {...(onPlanChange ? { onChange: onPlanChange } : {})}\n />\n );\n case \"approvals\":\n return (\n <SessionApprovalsPanel\n approvals={detail?.approvals}\n requests={detail?.requests}\n {...(onResolveApproval ? { onResolve: onResolveApproval } : {})}\n />\n );\n case \"costs\":\n return (\n <CostsPanel\n usage={detail?.usage}\n cost={detail?.cost}\n toolCosts={detail?.toolCosts}\n />\n );\n case \"metadata\":\n return <MetadataPanel session={detail} />;\n case \"raw\":\n return <RawPanel value={detail ?? session} />;\n default:\n return null;\n }\n}\n\nfunction StructuredOutputPanel({ value }: { value: unknown }) {\n if (value === undefined || value === null)\n return <EmptyState>No structured output.</EmptyState>;\n return (\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n copyable\n jsonDefaultOpenDepth={3}\n />\n );\n}\n\nfunction CostsPanel({\n usage,\n cost,\n toolCosts,\n}: {\n usage: SessionUsage | undefined;\n cost: SessionCost | undefined;\n toolCosts: SessionCost[] | undefined;\n}) {\n if (!usage && !cost && !toolCosts?.length)\n return <EmptyState>No cost metadata.</EmptyState>;\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Tokens\", usageLabel(usage ?? cost)),\n kv(\"Cost\", costLabel(cost)),\n kv(\"Input\", compactTokens((usage ?? cost)?.inputTokens)),\n kv(\"Output\", compactTokens((usage ?? cost)?.outputTokens)),\n kv(\"Reasoning\", compactTokens((usage ?? cost)?.reasoningTokens)),\n kv(\"Cache Read\", compactTokens((usage ?? cost)?.cacheReadTokens)),\n kv(\"Cache Write\", compactTokens((usage ?? cost)?.cacheWriteTokens)),\n ]}\n />\n {toolCosts?.length ? <CostBreakdown costs={toolCosts} /> : null}\n </div>\n );\n}\n\nfunction CostBreakdown({ costs }: { costs: SessionCost[] }) {\n return (\n <div className=\"overflow-auto rounded-md border border-border\">\n <table className=\"w-full min-w-[560px] border-collapse text-left text-sm\">\n <thead className=\"bg-muted/60 text-xs text-muted-foreground\">\n <tr>\n <Th>Model</Th>\n <Th>Tokens</Th>\n <Th>Input</Th>\n <Th>Output</Th>\n <Th>Cache</Th>\n <Th>Cost</Th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {costs.map((entry, index) => (\n <tr key={`${entry.model || \"model\"}-${index}`}>\n <Td>{entry.model || muted(\"unknown\")}</Td>\n <Td>{compactTokens(tokenTotal(entry))}</Td>\n <Td>{compactTokens(entry.inputTokens)}</Td>\n <Td>{compactTokens(entry.outputTokens)}</Td>\n <Td>\n {compactTokens(\n (entry.cacheReadTokens ?? 0) + (entry.cacheWriteTokens ?? 0),\n )}\n </Td>\n <Td>{costLabel(entry)}</Td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction MetadataPanel({\n session,\n}: {\n session: UnifiedSessionInput | undefined;\n}) {\n if (!session) return <EmptyState>No unified session metadata.</EmptyState>;\n const identity: KeyValueListItem[] = [\n kv(\"ID\", session.id),\n kv(\"Source\", session.source),\n kv(\"Project\", session.project),\n kv(\"CWD\", session.cwd),\n kv(\"History\", session.historyFile),\n kv(\"Model\", session.model),\n kv(\"Provider\", session.provider),\n kv(\"Mode\", session.modelMode),\n kv(\"Effort\", session.reasoningEffort),\n kv(\"Version\", session.version),\n kv(\"Git\", gitLabel(session.git)),\n kv(\"Started\", formatDate(session.startedAt)),\n kv(\"Ended\", formatDate(session.endedAt)),\n kv(\"Duration\", durationLabel(session.startedAt, session.endedAt)),\n kv(\"Live\", liveLabel(session.live)),\n kv(\"Health\", healthLabel(session.health)),\n ];\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList items={identity} />\n <JsonSection title=\"Capabilities\" value={session.capabilities} />\n <JsonSection title=\"Context\" value={session.context} />\n <JsonSection title=\"Budget\" value={session.budget} />\n <JsonSection title=\"Events\" value={session.events} />\n <JsonSection title=\"Prompt\" value={session.prompt} />\n </div>\n );\n}\n\nfunction RawPanel({ value }: { value: unknown }) {\n return (\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n copyable\n jsonDefaultOpenDepth={1}\n />\n );\n}\n\nfunction JsonSection({ title, value }: { title: string; value: unknown }) {\n if (\n value === undefined ||\n value === null ||\n (Array.isArray(value) && value.length === 0)\n )\n return null;\n return (\n <section>\n <h3 className=\"mb-density-2 text-xs font-semibold uppercase text-muted-foreground\">\n {title}\n </h3>\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n jsonDefaultOpenDepth={1}\n />\n </section>\n );\n}\n\nfunction Th({ children }: { children: ReactNode }) {\n return <th className=\"px-density-3 py-density-2 font-medium\">{children}</th>;\n}\n\nfunction Td({ children }: { children: ReactNode }) {\n return <td className=\"px-density-3 py-density-2\">{children}</td>;\n}\n\nfunction jsonSource(value: unknown) {\n if (typeof value === \"string\") {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction usageLabel(usage?: SessionUsage | SessionCost) {\n const total = tokenTotal(usage);\n return total ? `${compactTokens(total)} tokens` : muted(\"-\");\n}\n\nfunction costLabel(cost?: SessionCost) {\n const total = costTotal(cost);\n return total ? formatCost(total) : muted(\"-\");\n}\n\nfunction gitLabel(git?: {\n branch?: string;\n commit?: string;\n worktree?: string;\n diff?: string;\n}) {\n if (!git) return \"\";\n return [git.branch, git.commit, git.worktree, git.diff ? \"diff\" : \"\"]\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction liveLabel(live?: SessionLiveProcess) {\n if (!live) return \"\";\n return [\n live.status || (live.active ? \"active\" : \"inactive\"),\n live.pid ? `pid ${live.pid}` : \"\",\n live.command,\n ]\n .filter(Boolean)\n .join(\" - \");\n}\n\nfunction healthLabel(health?: SessionHealth[]) {\n return (\n health?.map((item) => `${item.severity}:${item.kind}`).join(\", \") ?? \"\"\n );\n}\n"],"names":["jsx","SessionVerificationPanel","SessionFilesPanel","SessionPlanPanel","SessionApprovalsPanel","EmptyState","CodeBlock","jsxs","KeyValueList","kv","compactTokens","muted","tokenTotal","formatDate","durationLabel","costTotal","formatCost"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.panels.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.panels.tsx"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAKV,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,wBAAgB,qBAAqB,CAAC,EACpC,GAAG,EACH,MAAM,EACN,OAAO,EACP,YAAY,EACZ,iBAAiB,GAClB,EAAE;IACD,GAAG,EAAE,mBAAmB,CAAC;IACzB,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;CAC5C,sCAoCA"}
1
+ {"version":3,"file":"SessionInspector.panels.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.panels.tsx"],"names":[],"mappings":"AAaA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAKV,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,wBAAgB,qBAAqB,CAAC,EACpC,GAAG,EACH,MAAM,EACN,OAAO,EACP,YAAY,EACZ,iBAAiB,GAClB,EAAE;IACD,GAAG,EAAE,mBAAmB,CAAC;IACzB,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;CAC5C,sCAsCA"}
@@ -5,6 +5,7 @@ import { tokenTotal, costTotal } from "./session-cost.js";
5
5
  import { formatDate, durationLabel } from "./SessionInspector.model.js";
6
6
  import { SessionFilesPanel } from "./SessionInspector.files.js";
7
7
  import { SessionPlanPanel } from "./SessionInspector.plan.js";
8
+ import { SessionVerificationPanel } from "./SessionInspector.verification.js";
8
9
  import { SessionApprovalsPanel } from "./SessionInspector.approvals.js";
9
10
  import { EmptyState } from "./SessionInspector.panel-parts.js";
10
11
  import { kv, muted } from "./SessionInspector.panel-values.js";
@@ -19,6 +20,8 @@ function SessionInspectorPanel({
19
20
  switch (tab) {
20
21
  case "output":
21
22
  return /* @__PURE__ */ jsx(StructuredOutputPanel, { value: detail == null ? void 0 : detail.structuredOutput });
23
+ case "verification":
24
+ return /* @__PURE__ */ jsx(SessionVerificationPanel, { verifications: detail == null ? void 0 : detail.verifications });
22
25
  case "files":
23
26
  return /* @__PURE__ */ jsx(SessionFilesPanel, { files: detail == null ? void 0 : detail.files });
24
27
  case "plan":
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.panels.js","sources":["../../../src/data/ai/SessionInspector.panels.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { KeyValueList, type KeyValueListItem } from \"../KeyValueList\";\nimport {\n compactTokens,\n costTotal,\n formatCost,\n tokenTotal,\n} from \"./session-cost\";\nimport { durationLabel, formatDate } from \"./SessionInspector.model\";\nimport { SessionFilesPanel } from \"./SessionInspector.files\";\nimport { SessionPlanPanel } from \"./SessionInspector.plan\";\nimport {\n SessionApprovalsPanel,\n type ApprovalResolveHandler,\n} from \"./SessionInspector.approvals\";\nimport { EmptyState } from \"./SessionInspector.panel-parts\";\nimport { kv, muted } from \"./SessionInspector.panel-values\";\nimport type { SessionInput } from \"./SessionViewer.model\";\nimport type {\n SessionCost,\n SessionHealth,\n SessionLiveProcess,\n SessionUsage,\n UnifiedSessionInput,\n} from \"./SessionViewer.unified\";\nimport type { SessionInspectorTab } from \"./SessionInspector\";\n\nexport function SessionInspectorPanel({\n tab,\n detail,\n session,\n onPlanChange,\n onResolveApproval,\n}: {\n tab: SessionInspectorTab;\n detail: UnifiedSessionInput | undefined;\n session: SessionInput;\n onPlanChange?: (content: string) => void;\n onResolveApproval?: ApprovalResolveHandler;\n}) {\n switch (tab) {\n case \"output\":\n return <StructuredOutputPanel value={detail?.structuredOutput} />;\n case \"files\":\n return <SessionFilesPanel files={detail?.files} />;\n case \"plan\":\n return (\n <SessionPlanPanel\n plan={detail?.plan}\n {...(onPlanChange ? { onChange: onPlanChange } : {})}\n />\n );\n case \"approvals\":\n return (\n <SessionApprovalsPanel\n approvals={detail?.approvals}\n requests={detail?.requests}\n {...(onResolveApproval ? { onResolve: onResolveApproval } : {})}\n />\n );\n case \"costs\":\n return (\n <CostsPanel\n usage={detail?.usage}\n cost={detail?.cost}\n toolCosts={detail?.toolCosts}\n />\n );\n case \"metadata\":\n return <MetadataPanel session={detail} />;\n case \"raw\":\n return <RawPanel value={detail ?? session} />;\n default:\n return null;\n }\n}\n\nfunction StructuredOutputPanel({ value }: { value: unknown }) {\n if (value === undefined || value === null)\n return <EmptyState>No structured output.</EmptyState>;\n return (\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n copyable\n jsonDefaultOpenDepth={3}\n />\n );\n}\n\nfunction CostsPanel({\n usage,\n cost,\n toolCosts,\n}: {\n usage: SessionUsage | undefined;\n cost: SessionCost | undefined;\n toolCosts: SessionCost[] | undefined;\n}) {\n if (!usage && !cost && !toolCosts?.length)\n return <EmptyState>No cost metadata.</EmptyState>;\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Tokens\", usageLabel(usage ?? cost)),\n kv(\"Cost\", costLabel(cost)),\n kv(\"Input\", compactTokens((usage ?? cost)?.inputTokens)),\n kv(\"Output\", compactTokens((usage ?? cost)?.outputTokens)),\n kv(\"Reasoning\", compactTokens((usage ?? cost)?.reasoningTokens)),\n kv(\"Cache Read\", compactTokens((usage ?? cost)?.cacheReadTokens)),\n kv(\"Cache Write\", compactTokens((usage ?? cost)?.cacheWriteTokens)),\n ]}\n />\n {toolCosts?.length ? <CostBreakdown costs={toolCosts} /> : null}\n </div>\n );\n}\n\nfunction CostBreakdown({ costs }: { costs: SessionCost[] }) {\n return (\n <div className=\"overflow-auto rounded-md border border-border\">\n <table className=\"w-full min-w-[560px] border-collapse text-left text-sm\">\n <thead className=\"bg-muted/60 text-xs text-muted-foreground\">\n <tr>\n <Th>Model</Th>\n <Th>Tokens</Th>\n <Th>Input</Th>\n <Th>Output</Th>\n <Th>Cache</Th>\n <Th>Cost</Th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {costs.map((entry, index) => (\n <tr key={`${entry.model || \"model\"}-${index}`}>\n <Td>{entry.model || muted(\"unknown\")}</Td>\n <Td>{compactTokens(tokenTotal(entry))}</Td>\n <Td>{compactTokens(entry.inputTokens)}</Td>\n <Td>{compactTokens(entry.outputTokens)}</Td>\n <Td>\n {compactTokens(\n (entry.cacheReadTokens ?? 0) + (entry.cacheWriteTokens ?? 0)\n )}\n </Td>\n <Td>{costLabel(entry)}</Td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction MetadataPanel({\n session,\n}: {\n session: UnifiedSessionInput | undefined;\n}) {\n if (!session) return <EmptyState>No unified session metadata.</EmptyState>;\n const identity: KeyValueListItem[] = [\n kv(\"ID\", session.id),\n kv(\"Source\", session.source),\n kv(\"Project\", session.project),\n kv(\"CWD\", session.cwd),\n kv(\"History\", session.historyFile),\n kv(\"Model\", session.model),\n kv(\"Provider\", session.provider),\n kv(\"Mode\", session.modelMode),\n kv(\"Effort\", session.reasoningEffort),\n kv(\"Version\", session.version),\n kv(\"Git\", gitLabel(session.git)),\n kv(\"Started\", formatDate(session.startedAt)),\n kv(\"Ended\", formatDate(session.endedAt)),\n kv(\"Duration\", durationLabel(session.startedAt, session.endedAt)),\n kv(\"Live\", liveLabel(session.live)),\n kv(\"Health\", healthLabel(session.health)),\n ];\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList items={identity} />\n <JsonSection title=\"Capabilities\" value={session.capabilities} />\n <JsonSection title=\"Context\" value={session.context} />\n <JsonSection title=\"Budget\" value={session.budget} />\n <JsonSection title=\"Events\" value={session.events} />\n <JsonSection title=\"Prompt\" value={session.prompt} />\n </div>\n );\n}\n\nfunction RawPanel({ value }: { value: unknown }) {\n return (\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n copyable\n jsonDefaultOpenDepth={1}\n />\n );\n}\n\nfunction JsonSection({ title, value }: { title: string; value: unknown }) {\n if (\n value === undefined ||\n value === null ||\n (Array.isArray(value) && value.length === 0)\n )\n return null;\n return (\n <section>\n <h3 className=\"mb-density-2 text-xs font-semibold uppercase text-muted-foreground\">\n {title}\n </h3>\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n jsonDefaultOpenDepth={1}\n />\n </section>\n );\n}\n\nfunction Th({ children }: { children: ReactNode }) {\n return <th className=\"px-density-3 py-density-2 font-medium\">{children}</th>;\n}\n\nfunction Td({ children }: { children: ReactNode }) {\n return <td className=\"px-density-3 py-density-2\">{children}</td>;\n}\n\nfunction jsonSource(value: unknown) {\n if (typeof value === \"string\") {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction usageLabel(usage?: SessionUsage | SessionCost) {\n const total = tokenTotal(usage);\n return total ? `${compactTokens(total)} tokens` : muted(\"-\");\n}\n\nfunction costLabel(cost?: SessionCost) {\n const total = costTotal(cost);\n return total ? formatCost(total) : muted(\"-\");\n}\n\nfunction gitLabel(git?: {\n branch?: string;\n commit?: string;\n worktree?: string;\n diff?: string;\n}) {\n if (!git) return \"\";\n return [git.branch, git.commit, git.worktree, git.diff ? \"diff\" : \"\"]\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction liveLabel(live?: SessionLiveProcess) {\n if (!live) return \"\";\n return [\n live.status || (live.active ? \"active\" : \"inactive\"),\n live.pid ? `pid ${live.pid}` : \"\",\n live.command,\n ]\n .filter(Boolean)\n .join(\" - \");\n}\n\nfunction healthLabel(health?: SessionHealth[]) {\n return (\n health?.map((item) => `${item.severity}:${item.kind}`).join(\", \") ?? \"\"\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionInspector.panels.js","sources":["../../../src/data/ai/SessionInspector.panels.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { KeyValueList, type KeyValueListItem } from \"../KeyValueList\";\nimport {\n compactTokens,\n costTotal,\n formatCost,\n tokenTotal,\n} from \"./session-cost\";\nimport { durationLabel, formatDate } from \"./SessionInspector.model\";\nimport { SessionFilesPanel } from \"./SessionInspector.files\";\nimport { SessionPlanPanel } from \"./SessionInspector.plan\";\nimport { SessionVerificationPanel } from \"./SessionInspector.verification\";\nimport {\n SessionApprovalsPanel,\n type ApprovalResolveHandler,\n} from \"./SessionInspector.approvals\";\nimport { EmptyState } from \"./SessionInspector.panel-parts\";\nimport { kv, muted } from \"./SessionInspector.panel-values\";\nimport type { SessionInput } from \"./SessionViewer.model\";\nimport type {\n SessionCost,\n SessionHealth,\n SessionLiveProcess,\n SessionUsage,\n UnifiedSessionInput,\n} from \"./SessionViewer.unified\";\nimport type { SessionInspectorTab } from \"./SessionInspector\";\n\nexport function SessionInspectorPanel({\n tab,\n detail,\n session,\n onPlanChange,\n onResolveApproval,\n}: {\n tab: SessionInspectorTab;\n detail: UnifiedSessionInput | undefined;\n session: SessionInput;\n onPlanChange?: (content: string) => void;\n onResolveApproval?: ApprovalResolveHandler;\n}) {\n switch (tab) {\n case \"output\":\n return <StructuredOutputPanel value={detail?.structuredOutput} />;\n case \"verification\":\n return <SessionVerificationPanel verifications={detail?.verifications} />;\n case \"files\":\n return <SessionFilesPanel files={detail?.files} />;\n case \"plan\":\n return (\n <SessionPlanPanel\n plan={detail?.plan}\n {...(onPlanChange ? { onChange: onPlanChange } : {})}\n />\n );\n case \"approvals\":\n return (\n <SessionApprovalsPanel\n approvals={detail?.approvals}\n requests={detail?.requests}\n {...(onResolveApproval ? { onResolve: onResolveApproval } : {})}\n />\n );\n case \"costs\":\n return (\n <CostsPanel\n usage={detail?.usage}\n cost={detail?.cost}\n toolCosts={detail?.toolCosts}\n />\n );\n case \"metadata\":\n return <MetadataPanel session={detail} />;\n case \"raw\":\n return <RawPanel value={detail ?? session} />;\n default:\n return null;\n }\n}\n\nfunction StructuredOutputPanel({ value }: { value: unknown }) {\n if (value === undefined || value === null)\n return <EmptyState>No structured output.</EmptyState>;\n return (\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n copyable\n jsonDefaultOpenDepth={3}\n />\n );\n}\n\nfunction CostsPanel({\n usage,\n cost,\n toolCosts,\n}: {\n usage: SessionUsage | undefined;\n cost: SessionCost | undefined;\n toolCosts: SessionCost[] | undefined;\n}) {\n if (!usage && !cost && !toolCosts?.length)\n return <EmptyState>No cost metadata.</EmptyState>;\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList\n items={[\n kv(\"Tokens\", usageLabel(usage ?? cost)),\n kv(\"Cost\", costLabel(cost)),\n kv(\"Input\", compactTokens((usage ?? cost)?.inputTokens)),\n kv(\"Output\", compactTokens((usage ?? cost)?.outputTokens)),\n kv(\"Reasoning\", compactTokens((usage ?? cost)?.reasoningTokens)),\n kv(\"Cache Read\", compactTokens((usage ?? cost)?.cacheReadTokens)),\n kv(\"Cache Write\", compactTokens((usage ?? cost)?.cacheWriteTokens)),\n ]}\n />\n {toolCosts?.length ? <CostBreakdown costs={toolCosts} /> : null}\n </div>\n );\n}\n\nfunction CostBreakdown({ costs }: { costs: SessionCost[] }) {\n return (\n <div className=\"overflow-auto rounded-md border border-border\">\n <table className=\"w-full min-w-[560px] border-collapse text-left text-sm\">\n <thead className=\"bg-muted/60 text-xs text-muted-foreground\">\n <tr>\n <Th>Model</Th>\n <Th>Tokens</Th>\n <Th>Input</Th>\n <Th>Output</Th>\n <Th>Cache</Th>\n <Th>Cost</Th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {costs.map((entry, index) => (\n <tr key={`${entry.model || \"model\"}-${index}`}>\n <Td>{entry.model || muted(\"unknown\")}</Td>\n <Td>{compactTokens(tokenTotal(entry))}</Td>\n <Td>{compactTokens(entry.inputTokens)}</Td>\n <Td>{compactTokens(entry.outputTokens)}</Td>\n <Td>\n {compactTokens(\n (entry.cacheReadTokens ?? 0) + (entry.cacheWriteTokens ?? 0),\n )}\n </Td>\n <Td>{costLabel(entry)}</Td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction MetadataPanel({\n session,\n}: {\n session: UnifiedSessionInput | undefined;\n}) {\n if (!session) return <EmptyState>No unified session metadata.</EmptyState>;\n const identity: KeyValueListItem[] = [\n kv(\"ID\", session.id),\n kv(\"Source\", session.source),\n kv(\"Project\", session.project),\n kv(\"CWD\", session.cwd),\n kv(\"History\", session.historyFile),\n kv(\"Model\", session.model),\n kv(\"Provider\", session.provider),\n kv(\"Mode\", session.modelMode),\n kv(\"Effort\", session.reasoningEffort),\n kv(\"Version\", session.version),\n kv(\"Git\", gitLabel(session.git)),\n kv(\"Started\", formatDate(session.startedAt)),\n kv(\"Ended\", formatDate(session.endedAt)),\n kv(\"Duration\", durationLabel(session.startedAt, session.endedAt)),\n kv(\"Live\", liveLabel(session.live)),\n kv(\"Health\", healthLabel(session.health)),\n ];\n return (\n <div className=\"space-y-density-4\">\n <KeyValueList items={identity} />\n <JsonSection title=\"Capabilities\" value={session.capabilities} />\n <JsonSection title=\"Context\" value={session.context} />\n <JsonSection title=\"Budget\" value={session.budget} />\n <JsonSection title=\"Events\" value={session.events} />\n <JsonSection title=\"Prompt\" value={session.prompt} />\n </div>\n );\n}\n\nfunction RawPanel({ value }: { value: unknown }) {\n return (\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n copyable\n jsonDefaultOpenDepth={1}\n />\n );\n}\n\nfunction JsonSection({ title, value }: { title: string; value: unknown }) {\n if (\n value === undefined ||\n value === null ||\n (Array.isArray(value) && value.length === 0)\n )\n return null;\n return (\n <section>\n <h3 className=\"mb-density-2 text-xs font-semibold uppercase text-muted-foreground\">\n {title}\n </h3>\n <CodeBlock\n language=\"json\"\n source={jsonSource(value)}\n jsonDefaultOpenDepth={1}\n />\n </section>\n );\n}\n\nfunction Th({ children }: { children: ReactNode }) {\n return <th className=\"px-density-3 py-density-2 font-medium\">{children}</th>;\n}\n\nfunction Td({ children }: { children: ReactNode }) {\n return <td className=\"px-density-3 py-density-2\">{children}</td>;\n}\n\nfunction jsonSource(value: unknown) {\n if (typeof value === \"string\") {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction usageLabel(usage?: SessionUsage | SessionCost) {\n const total = tokenTotal(usage);\n return total ? `${compactTokens(total)} tokens` : muted(\"-\");\n}\n\nfunction costLabel(cost?: SessionCost) {\n const total = costTotal(cost);\n return total ? formatCost(total) : muted(\"-\");\n}\n\nfunction gitLabel(git?: {\n branch?: string;\n commit?: string;\n worktree?: string;\n diff?: string;\n}) {\n if (!git) return \"\";\n return [git.branch, git.commit, git.worktree, git.diff ? \"diff\" : \"\"]\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction liveLabel(live?: SessionLiveProcess) {\n if (!live) return \"\";\n return [\n live.status || (live.active ? \"active\" : \"inactive\"),\n live.pid ? `pid ${live.pid}` : \"\",\n live.command,\n ]\n .filter(Boolean)\n .join(\" - \");\n}\n\nfunction healthLabel(health?: SessionHealth[]) {\n return (\n health?.map((item) => `${item.severity}:${item.kind}`).join(\", \") ?? \"\"\n );\n}\n"],"names":[],"mappings":"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"}
@@ -3,12 +3,15 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const button = require("../../components/button.cjs");
6
- const MdxEditorField = require("../../components/MdxEditorField.cjs");
7
6
  const Icon = require("../Icon.cjs");
8
7
  const Markdown = require("../Markdown.cjs");
9
8
  const UiFileText = require("../../icons/components/UiFileText.cjs");
10
9
  const UiCheck = require("../../icons/components/UiCheck.cjs");
11
10
  const UiEdit = require("../../icons/components/UiEdit.cjs");
11
+ const LazyMdxEditorField = react.lazy(async () => {
12
+ const mod = await Promise.resolve().then(() => require("../../components/MdxEditorField.cjs"));
13
+ return { default: mod.MdxEditorField };
14
+ });
12
15
  function SessionPlanPanel({
13
16
  plan,
14
17
  onChange
@@ -57,18 +60,32 @@ function SessionPlanPanel({
57
60
  )
58
61
  ] }),
59
62
  editing ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-density-3", children: /* @__PURE__ */ jsxRuntime.jsx(
60
- MdxEditorField.MdxEditorField,
63
+ react.Suspense,
61
64
  {
62
- value: content,
63
- onChange: updateContent,
64
- "aria-label": "Plan markdown",
65
- toolbar: true,
66
- headings: true,
67
- lists: true,
68
- links: true,
69
- codeBlocks: true,
70
- codeMirror: true,
71
- className: "min-h-80"
65
+ fallback: /* @__PURE__ */ jsxRuntime.jsx(
66
+ "textarea",
67
+ {
68
+ "aria-label": "Plan markdown",
69
+ className: "min-h-80 w-full rounded-md border border-input bg-background p-density-2 font-mono text-sm",
70
+ value: content,
71
+ onChange: (e) => updateContent(e.target.value)
72
+ }
73
+ ),
74
+ children: /* @__PURE__ */ jsxRuntime.jsx(
75
+ LazyMdxEditorField,
76
+ {
77
+ value: content,
78
+ onChange: updateContent,
79
+ "aria-label": "Plan markdown",
80
+ toolbar: true,
81
+ headings: true,
82
+ lists: true,
83
+ links: true,
84
+ codeBlocks: true,
85
+ codeMirror: true,
86
+ className: "min-h-80"
87
+ }
88
+ )
72
89
  }
73
90
  ) }) : content ? /* @__PURE__ */ jsxRuntime.jsx(Markdown.Markdown, { text: content, className: "px-density-1 py-density-4" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-density-6 text-center text-sm text-muted-foreground", children: "The plan is empty." })
74
91
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.plan.cjs","sources":["../../../src/data/ai/SessionInspector.plan.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { UiCheck, UiEdit, UiFileText } from \"../../icons\";\nimport { Button } from \"../../components/button\";\nimport { MdxEditorField } from \"../../components/MdxEditorField\";\nimport { Icon } from \"../Icon\";\nimport { Markdown } from \"../Markdown\";\nimport type { SessionPlan } from \"./SessionViewer.unified\";\n\nexport function SessionPlanPanel({\n plan,\n onChange,\n}: {\n plan: SessionPlan | undefined;\n onChange?: (content: string) => void;\n}) {\n const [editing, setEditing] = useState(false);\n const [content, setContent] = useState(plan?.content ?? \"\");\n\n useEffect(() => setContent(plan?.content ?? \"\"), [plan?.content]);\n\n if (!plan) {\n return (\n <div className=\"rounded-md border border-dashed border-border p-density-6 text-center text-sm text-muted-foreground\">\n No plan metadata.\n </div>\n );\n }\n\n const updateContent = (next: string) => {\n setContent(next);\n onChange?.(next);\n };\n\n return (\n <section>\n <header className=\"flex min-w-0 items-center gap-density-2 border-b border-border px-density-1 pb-density-2\">\n <Icon\n icon={UiFileText}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate font-mono text-xs text-foreground\">\n {plan.path || plan.slug || \"Session plan\"}\n </div>\n <div className=\"text-[11px] text-muted-foreground\">\n {plan.events?.length ?? 0} events\n {plan.explicit ? \" · explicit\" : \"\"}\n </div>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={editing ? \"Done editing plan\" : \"Edit plan\"}\n onClick={() => setEditing((value) => !value)}\n >\n <Icon icon={editing ? UiCheck : UiEdit} />\n {editing ? \"Done\" : \"Edit\"}\n </Button>\n </header>\n {editing ? (\n <div className=\"pt-density-3\">\n <MdxEditorField\n value={content}\n onChange={updateContent}\n aria-label=\"Plan markdown\"\n toolbar\n headings\n lists\n links\n codeBlocks\n codeMirror\n className=\"min-h-80\"\n />\n </div>\n ) : content ? (\n <Markdown text={content} className=\"px-density-1 py-density-4\" />\n ) : (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\">\n The plan is empty.\n </div>\n )}\n </section>\n );\n}\n"],"names":["useState","useEffect","jsx","jsxs","Icon","UiFileText","Button","UiCheck","UiEdit","MdxEditorField","Markdown"],"mappings":";;;;;;;;;;;AAQO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGG;;AACD,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,UAAS,6BAAM,YAAW,EAAE;AAE1DC,kBAAU,MAAM,YAAW,6BAAM,YAAW,EAAE,GAAG,CAAC,6BAAM,OAAO,CAAC;AAEhE,MAAI,CAAC,MAAM;AACT,WACEC,2BAAAA,IAAC,OAAA,EAAI,WAAU,uGAAsG,UAAA,qBAErH;AAAA,EAEJ;AAEA,QAAM,gBAAgB,CAAC,SAAiB;AACtC,eAAW,IAAI;AACf,yCAAW;AAAA,EACb;AAEA,yCACG,WAAA,EACC,UAAA;AAAA,IAAAC,2BAAAA,KAAC,UAAA,EAAO,WAAU,4FAChB,UAAA;AAAA,MAAAD,2BAAAA;AAAAA,QAACE,KAAAA;AAAAA,QAAA;AAAA,UACC,MAAMC,WAAAA;AAAAA,UACN,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZF,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAAD,2BAAAA,IAAC,SAAI,WAAU,8CACZ,eAAK,QAAQ,KAAK,QAAQ,eAAA,CAC7B;AAAA,QACAC,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,YAAA,UAAK,WAAL,mBAAa,WAAU;AAAA,UAAE;AAAA,UACzB,KAAK,WAAW,gBAAgB;AAAA,QAAA,EAAA,CACnC;AAAA,MAAA,GACF;AAAA,MACAA,2BAAAA;AAAAA,QAACG,OAAAA;AAAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,cAAY,UAAU,sBAAsB;AAAA,UAC5C,SAAS,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK;AAAA,UAE3C,UAAA;AAAA,YAAAJ,2BAAAA,IAACE,KAAAA,MAAA,EAAK,MAAM,UAAUG,QAAAA,UAAUC,OAAAA,QAAQ;AAAA,YACvC,UAAU,SAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACtB,GACF;AAAA,IACC,UACCN,2BAAAA,IAAC,OAAA,EAAI,WAAU,gBACb,UAAAA,2BAAAA;AAAAA,MAACO,eAAAA;AAAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,cAAW;AAAA,QACX,SAAO;AAAA,QACP,UAAQ;AAAA,QACR,OAAK;AAAA,QACL,OAAK;AAAA,QACL,YAAU;AAAA,QACV,YAAU;AAAA,QACV,WAAU;AAAA,MAAA;AAAA,IAAA,EACZ,CACF,IACE,UACFP,2BAAAA,IAACQ,SAAAA,YAAS,MAAM,SAAS,WAAU,4BAAA,CAA4B,IAE/DR,2BAAAA,IAAC,OAAA,EAAI,WAAU,yDAAwD,UAAA,qBAAA,CAEvE;AAAA,EAAA,GAEJ;AAEJ;;"}
1
+ {"version":3,"file":"SessionInspector.plan.cjs","sources":["../../../src/data/ai/SessionInspector.plan.tsx"],"sourcesContent":["import { lazy, Suspense, useEffect, useState } from \"react\";\nimport { UiCheck, UiEdit, UiFileText } from \"../../icons\";\nimport { Button } from \"../../components/button\";\nimport { Icon } from \"../Icon\";\nimport { Markdown } from \"../Markdown\";\nimport type { SessionPlan } from \"./SessionViewer.unified\";\n\n// Loaded lazily so a static import here doesn't pull @mdxeditor/editor into\n// every host that imports the `data`/main entry — mirrors the pattern in\n// components/json-schema-form-fields.tsx.\nconst LazyMdxEditorField = lazy(async () => {\n const mod = await import(\"../../components/MdxEditorField\");\n return { default: mod.MdxEditorField };\n});\n\nexport function SessionPlanPanel({\n plan,\n onChange,\n}: {\n plan: SessionPlan | undefined;\n onChange?: (content: string) => void;\n}) {\n const [editing, setEditing] = useState(false);\n const [content, setContent] = useState(plan?.content ?? \"\");\n\n useEffect(() => setContent(plan?.content ?? \"\"), [plan?.content]);\n\n if (!plan) {\n return (\n <div className=\"rounded-md border border-dashed border-border p-density-6 text-center text-sm text-muted-foreground\">\n No plan metadata.\n </div>\n );\n }\n\n const updateContent = (next: string) => {\n setContent(next);\n onChange?.(next);\n };\n\n return (\n <section>\n <header className=\"flex min-w-0 items-center gap-density-2 border-b border-border px-density-1 pb-density-2\">\n <Icon\n icon={UiFileText}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate font-mono text-xs text-foreground\">\n {plan.path || plan.slug || \"Session plan\"}\n </div>\n <div className=\"text-[11px] text-muted-foreground\">\n {plan.events?.length ?? 0} events\n {plan.explicit ? \" · explicit\" : \"\"}\n </div>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={editing ? \"Done editing plan\" : \"Edit plan\"}\n onClick={() => setEditing((value) => !value)}\n >\n <Icon icon={editing ? UiCheck : UiEdit} />\n {editing ? \"Done\" : \"Edit\"}\n </Button>\n </header>\n {editing ? (\n <div className=\"pt-density-3\">\n <Suspense\n fallback={\n <textarea\n aria-label=\"Plan markdown\"\n className=\"min-h-80 w-full rounded-md border border-input bg-background p-density-2 font-mono text-sm\"\n value={content}\n onChange={(e) => updateContent(e.target.value)}\n />\n }\n >\n <LazyMdxEditorField\n value={content}\n onChange={updateContent}\n aria-label=\"Plan markdown\"\n toolbar\n headings\n lists\n links\n codeBlocks\n codeMirror\n className=\"min-h-80\"\n />\n </Suspense>\n </div>\n ) : content ? (\n <Markdown text={content} className=\"px-density-1 py-density-4\" />\n ) : (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\">\n The plan is empty.\n </div>\n )}\n </section>\n );\n}\n"],"names":["lazy","useState","useEffect","jsx","jsxs","Icon","UiFileText","Button","UiCheck","UiEdit","Suspense","Markdown"],"mappings":";;;;;;;;;;AAUA,MAAM,qBAAqBA,MAAAA,KAAK,YAAY;AAC1C,QAAM,MAAM,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,qCAAiC,CAAA;AAC1D,SAAO,EAAE,SAAS,IAAI,eAAA;AACxB,CAAC;AAEM,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGG;;AACD,QAAM,CAAC,SAAS,UAAU,IAAIC,MAAAA,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,UAAS,6BAAM,YAAW,EAAE;AAE1DC,kBAAU,MAAM,YAAW,6BAAM,YAAW,EAAE,GAAG,CAAC,6BAAM,OAAO,CAAC;AAEhE,MAAI,CAAC,MAAM;AACT,WACEC,2BAAAA,IAAC,OAAA,EAAI,WAAU,uGAAsG,UAAA,qBAErH;AAAA,EAEJ;AAEA,QAAM,gBAAgB,CAAC,SAAiB;AACtC,eAAW,IAAI;AACf,yCAAW;AAAA,EACb;AAEA,yCACG,WAAA,EACC,UAAA;AAAA,IAAAC,2BAAAA,KAAC,UAAA,EAAO,WAAU,4FAChB,UAAA;AAAA,MAAAD,2BAAAA;AAAAA,QAACE,KAAAA;AAAAA,QAAA;AAAA,UACC,MAAMC,WAAAA;AAAAA,UACN,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZF,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAAD,2BAAAA,IAAC,SAAI,WAAU,8CACZ,eAAK,QAAQ,KAAK,QAAQ,eAAA,CAC7B;AAAA,QACAC,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,YAAA,UAAK,WAAL,mBAAa,WAAU;AAAA,UAAE;AAAA,UACzB,KAAK,WAAW,gBAAgB;AAAA,QAAA,EAAA,CACnC;AAAA,MAAA,GACF;AAAA,MACAA,2BAAAA;AAAAA,QAACG,OAAAA;AAAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,cAAY,UAAU,sBAAsB;AAAA,UAC5C,SAAS,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK;AAAA,UAE3C,UAAA;AAAA,YAAAJ,2BAAAA,IAACE,KAAAA,MAAA,EAAK,MAAM,UAAUG,QAAAA,UAAUC,OAAAA,QAAQ;AAAA,YACvC,UAAU,SAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACtB,GACF;AAAA,IACC,UACCN,2BAAAA,IAAC,OAAA,EAAI,WAAU,gBACb,UAAAA,2BAAAA;AAAAA,MAACO,MAAAA;AAAAA,MAAA;AAAA,QACC,UACEP,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,cAAW;AAAA,YACX,WAAU;AAAA,YACV,OAAO;AAAA,YACP,UAAU,CAAC,MAAM,cAAc,EAAE,OAAO,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAIjD,UAAAA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP,UAAU;AAAA,YACV,cAAW;AAAA,YACX,SAAO;AAAA,YACP,UAAQ;AAAA,YACR,OAAK;AAAA,YACL,OAAK;AAAA,YACL,YAAU;AAAA,YACV,YAAU;AAAA,YACV,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA,EACF,CACF,IACE,UACFA,2BAAAA,IAACQ,SAAAA,YAAS,MAAM,SAAS,WAAU,4BAAA,CAA4B,IAE/DR,2BAAAA,IAAC,OAAA,EAAI,WAAU,yDAAwD,UAAA,qBAAA,CAEvE;AAAA,EAAA,GAEJ;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.plan.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.plan.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,+BAsEA"}
1
+ {"version":3,"file":"SessionInspector.plan.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.plan.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAU3D,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,+BAiFA"}
@@ -1,12 +1,15 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect } from "react";
2
+ import { useState, useEffect, Suspense, lazy } from "react";
3
3
  import { Button } from "../../components/button.js";
4
- import { MdxEditorField } from "../../components/MdxEditorField.js";
5
4
  import { Icon } from "../Icon.js";
6
5
  import { Markdown } from "../Markdown.js";
7
6
  import { UiFileText } from "../../icons/components/UiFileText.js";
8
7
  import { UiCheck } from "../../icons/components/UiCheck.js";
9
8
  import { UiEdit } from "../../icons/components/UiEdit.js";
9
+ const LazyMdxEditorField = lazy(async () => {
10
+ const mod = await import("../../components/MdxEditorField.js");
11
+ return { default: mod.MdxEditorField };
12
+ });
10
13
  function SessionPlanPanel({
11
14
  plan,
12
15
  onChange
@@ -55,18 +58,32 @@ function SessionPlanPanel({
55
58
  )
56
59
  ] }),
57
60
  editing ? /* @__PURE__ */ jsx("div", { className: "pt-density-3", children: /* @__PURE__ */ jsx(
58
- MdxEditorField,
61
+ Suspense,
59
62
  {
60
- value: content,
61
- onChange: updateContent,
62
- "aria-label": "Plan markdown",
63
- toolbar: true,
64
- headings: true,
65
- lists: true,
66
- links: true,
67
- codeBlocks: true,
68
- codeMirror: true,
69
- className: "min-h-80"
63
+ fallback: /* @__PURE__ */ jsx(
64
+ "textarea",
65
+ {
66
+ "aria-label": "Plan markdown",
67
+ className: "min-h-80 w-full rounded-md border border-input bg-background p-density-2 font-mono text-sm",
68
+ value: content,
69
+ onChange: (e) => updateContent(e.target.value)
70
+ }
71
+ ),
72
+ children: /* @__PURE__ */ jsx(
73
+ LazyMdxEditorField,
74
+ {
75
+ value: content,
76
+ onChange: updateContent,
77
+ "aria-label": "Plan markdown",
78
+ toolbar: true,
79
+ headings: true,
80
+ lists: true,
81
+ links: true,
82
+ codeBlocks: true,
83
+ codeMirror: true,
84
+ className: "min-h-80"
85
+ }
86
+ )
70
87
  }
71
88
  ) }) : content ? /* @__PURE__ */ jsx(Markdown, { text: content, className: "px-density-1 py-density-4" }) : /* @__PURE__ */ jsx("div", { className: "p-density-6 text-center text-sm text-muted-foreground", children: "The plan is empty." })
72
89
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInspector.plan.js","sources":["../../../src/data/ai/SessionInspector.plan.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { UiCheck, UiEdit, UiFileText } from \"../../icons\";\nimport { Button } from \"../../components/button\";\nimport { MdxEditorField } from \"../../components/MdxEditorField\";\nimport { Icon } from \"../Icon\";\nimport { Markdown } from \"../Markdown\";\nimport type { SessionPlan } from \"./SessionViewer.unified\";\n\nexport function SessionPlanPanel({\n plan,\n onChange,\n}: {\n plan: SessionPlan | undefined;\n onChange?: (content: string) => void;\n}) {\n const [editing, setEditing] = useState(false);\n const [content, setContent] = useState(plan?.content ?? \"\");\n\n useEffect(() => setContent(plan?.content ?? \"\"), [plan?.content]);\n\n if (!plan) {\n return (\n <div className=\"rounded-md border border-dashed border-border p-density-6 text-center text-sm text-muted-foreground\">\n No plan metadata.\n </div>\n );\n }\n\n const updateContent = (next: string) => {\n setContent(next);\n onChange?.(next);\n };\n\n return (\n <section>\n <header className=\"flex min-w-0 items-center gap-density-2 border-b border-border px-density-1 pb-density-2\">\n <Icon\n icon={UiFileText}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate font-mono text-xs text-foreground\">\n {plan.path || plan.slug || \"Session plan\"}\n </div>\n <div className=\"text-[11px] text-muted-foreground\">\n {plan.events?.length ?? 0} events\n {plan.explicit ? \" · explicit\" : \"\"}\n </div>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={editing ? \"Done editing plan\" : \"Edit plan\"}\n onClick={() => setEditing((value) => !value)}\n >\n <Icon icon={editing ? UiCheck : UiEdit} />\n {editing ? \"Done\" : \"Edit\"}\n </Button>\n </header>\n {editing ? (\n <div className=\"pt-density-3\">\n <MdxEditorField\n value={content}\n onChange={updateContent}\n aria-label=\"Plan markdown\"\n toolbar\n headings\n lists\n links\n codeBlocks\n codeMirror\n className=\"min-h-80\"\n />\n </div>\n ) : content ? (\n <Markdown text={content} className=\"px-density-1 py-density-4\" />\n ) : (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\">\n The plan is empty.\n </div>\n )}\n </section>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAQO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGG;;AACD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,UAAS,6BAAM,YAAW,EAAE;AAE1D,YAAU,MAAM,YAAW,6BAAM,YAAW,EAAE,GAAG,CAAC,6BAAM,OAAO,CAAC;AAEhE,MAAI,CAAC,MAAM;AACT,WACE,oBAAC,OAAA,EAAI,WAAU,uGAAsG,UAAA,qBAErH;AAAA,EAEJ;AAEA,QAAM,gBAAgB,CAAC,SAAiB;AACtC,eAAW,IAAI;AACf,yCAAW;AAAA,EACb;AAEA,8BACG,WAAA,EACC,UAAA;AAAA,IAAA,qBAAC,UAAA,EAAO,WAAU,4FAChB,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ,qBAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAA,oBAAC,SAAI,WAAU,8CACZ,eAAK,QAAQ,KAAK,QAAQ,eAAA,CAC7B;AAAA,QACA,qBAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,YAAA,UAAK,WAAL,mBAAa,WAAU;AAAA,UAAE;AAAA,UACzB,KAAK,WAAW,gBAAgB;AAAA,QAAA,EAAA,CACnC;AAAA,MAAA,GACF;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,cAAY,UAAU,sBAAsB;AAAA,UAC5C,SAAS,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK;AAAA,UAE3C,UAAA;AAAA,YAAA,oBAAC,MAAA,EAAK,MAAM,UAAU,UAAU,QAAQ;AAAA,YACvC,UAAU,SAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACtB,GACF;AAAA,IACC,UACC,oBAAC,OAAA,EAAI,WAAU,gBACb,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,cAAW;AAAA,QACX,SAAO;AAAA,QACP,UAAQ;AAAA,QACR,OAAK;AAAA,QACL,OAAK;AAAA,QACL,YAAU;AAAA,QACV,YAAU;AAAA,QACV,WAAU;AAAA,MAAA;AAAA,IAAA,EACZ,CACF,IACE,UACF,oBAAC,YAAS,MAAM,SAAS,WAAU,4BAAA,CAA4B,IAE/D,oBAAC,OAAA,EAAI,WAAU,yDAAwD,UAAA,qBAAA,CAEvE;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"SessionInspector.plan.js","sources":["../../../src/data/ai/SessionInspector.plan.tsx"],"sourcesContent":["import { lazy, Suspense, useEffect, useState } from \"react\";\nimport { UiCheck, UiEdit, UiFileText } from \"../../icons\";\nimport { Button } from \"../../components/button\";\nimport { Icon } from \"../Icon\";\nimport { Markdown } from \"../Markdown\";\nimport type { SessionPlan } from \"./SessionViewer.unified\";\n\n// Loaded lazily so a static import here doesn't pull @mdxeditor/editor into\n// every host that imports the `data`/main entry — mirrors the pattern in\n// components/json-schema-form-fields.tsx.\nconst LazyMdxEditorField = lazy(async () => {\n const mod = await import(\"../../components/MdxEditorField\");\n return { default: mod.MdxEditorField };\n});\n\nexport function SessionPlanPanel({\n plan,\n onChange,\n}: {\n plan: SessionPlan | undefined;\n onChange?: (content: string) => void;\n}) {\n const [editing, setEditing] = useState(false);\n const [content, setContent] = useState(plan?.content ?? \"\");\n\n useEffect(() => setContent(plan?.content ?? \"\"), [plan?.content]);\n\n if (!plan) {\n return (\n <div className=\"rounded-md border border-dashed border-border p-density-6 text-center text-sm text-muted-foreground\">\n No plan metadata.\n </div>\n );\n }\n\n const updateContent = (next: string) => {\n setContent(next);\n onChange?.(next);\n };\n\n return (\n <section>\n <header className=\"flex min-w-0 items-center gap-density-2 border-b border-border px-density-1 pb-density-2\">\n <Icon\n icon={UiFileText}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate font-mono text-xs text-foreground\">\n {plan.path || plan.slug || \"Session plan\"}\n </div>\n <div className=\"text-[11px] text-muted-foreground\">\n {plan.events?.length ?? 0} events\n {plan.explicit ? \" · explicit\" : \"\"}\n </div>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={editing ? \"Done editing plan\" : \"Edit plan\"}\n onClick={() => setEditing((value) => !value)}\n >\n <Icon icon={editing ? UiCheck : UiEdit} />\n {editing ? \"Done\" : \"Edit\"}\n </Button>\n </header>\n {editing ? (\n <div className=\"pt-density-3\">\n <Suspense\n fallback={\n <textarea\n aria-label=\"Plan markdown\"\n className=\"min-h-80 w-full rounded-md border border-input bg-background p-density-2 font-mono text-sm\"\n value={content}\n onChange={(e) => updateContent(e.target.value)}\n />\n }\n >\n <LazyMdxEditorField\n value={content}\n onChange={updateContent}\n aria-label=\"Plan markdown\"\n toolbar\n headings\n lists\n links\n codeBlocks\n codeMirror\n className=\"min-h-80\"\n />\n </Suspense>\n </div>\n ) : content ? (\n <Markdown text={content} className=\"px-density-1 py-density-4\" />\n ) : (\n <div className=\"p-density-6 text-center text-sm text-muted-foreground\">\n The plan is empty.\n </div>\n )}\n </section>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAUA,MAAM,qBAAqB,KAAK,YAAY;AAC1C,QAAM,MAAM,MAAM,OAAO,oCAAiC;AAC1D,SAAO,EAAE,SAAS,IAAI,eAAA;AACxB,CAAC;AAEM,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGG;;AACD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,UAAS,6BAAM,YAAW,EAAE;AAE1D,YAAU,MAAM,YAAW,6BAAM,YAAW,EAAE,GAAG,CAAC,6BAAM,OAAO,CAAC;AAEhE,MAAI,CAAC,MAAM;AACT,WACE,oBAAC,OAAA,EAAI,WAAU,uGAAsG,UAAA,qBAErH;AAAA,EAEJ;AAEA,QAAM,gBAAgB,CAAC,SAAiB;AACtC,eAAW,IAAI;AACf,yCAAW;AAAA,EACb;AAEA,8BACG,WAAA,EACC,UAAA;AAAA,IAAA,qBAAC,UAAA,EAAO,WAAU,4FAChB,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ,qBAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAA,oBAAC,SAAI,WAAU,8CACZ,eAAK,QAAQ,KAAK,QAAQ,eAAA,CAC7B;AAAA,QACA,qBAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,YAAA,UAAK,WAAL,mBAAa,WAAU;AAAA,UAAE;AAAA,UACzB,KAAK,WAAW,gBAAgB;AAAA,QAAA,EAAA,CACnC;AAAA,MAAA,GACF;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,cAAY,UAAU,sBAAsB;AAAA,UAC5C,SAAS,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK;AAAA,UAE3C,UAAA;AAAA,YAAA,oBAAC,MAAA,EAAK,MAAM,UAAU,UAAU,QAAQ;AAAA,YACvC,UAAU,SAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACtB,GACF;AAAA,IACC,UACC,oBAAC,OAAA,EAAI,WAAU,gBACb,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,cAAW;AAAA,YACX,WAAU;AAAA,YACV,OAAO;AAAA,YACP,UAAU,CAAC,MAAM,cAAc,EAAE,OAAO,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAIjD,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP,UAAU;AAAA,YACV,cAAW;AAAA,YACX,SAAO;AAAA,YACP,UAAQ;AAAA,YACR,OAAK;AAAA,YACL,OAAK;AAAA,YACL,YAAU;AAAA,YACV,YAAU;AAAA,YACV,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA,EACF,CACF,IACE,UACF,oBAAC,YAAS,MAAM,SAAS,WAAU,4BAAA,CAA4B,IAE/D,oBAAC,OAAA,EAAI,WAAU,yDAAwD,UAAA,qBAAA,CAEvE;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const utils = require("../../lib/utils.cjs");
5
+ function RemoteSessionStatus({
6
+ loading,
7
+ error,
8
+ className,
9
+ children
10
+ }) {
11
+ const alert = error ? /* @__PURE__ */ jsxRuntime.jsx(
12
+ "div",
13
+ {
14
+ role: "alert",
15
+ className: "shrink-0 whitespace-pre-wrap break-words rounded-md border border-destructive/40 bg-destructive/5 px-density-3 py-density-2 text-xs text-destructive",
16
+ children: error
17
+ }
18
+ ) : null;
19
+ if (children) {
20
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("flex h-full min-h-0 w-full flex-col gap-density-2", className), children: [
21
+ alert,
22
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1", children })
23
+ ] });
24
+ }
25
+ return /* @__PURE__ */ jsxRuntime.jsx(
26
+ "div",
27
+ {
28
+ "aria-busy": loading,
29
+ className: utils.cn(
30
+ "flex h-full min-h-0 w-full flex-col gap-density-3 rounded-xl border border-border bg-background p-density-4 text-sm shadow-sm",
31
+ className
32
+ ),
33
+ children: alert ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
34
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: "Loading session…" }),
35
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-control-h w-1/3 animate-pulse rounded-md bg-muted" }),
36
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-full animate-pulse rounded bg-muted" }),
37
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-5/6 animate-pulse rounded bg-muted" }),
38
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-2/3 animate-pulse rounded bg-muted" })
39
+ ] })
40
+ }
41
+ );
42
+ }
43
+ exports.RemoteSessionStatus = RemoteSessionStatus;
44
+ //# sourceMappingURL=SessionInspector.remote-view.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInspector.remote-view.cjs","sources":["../../../src/data/ai/SessionInspector.remote-view.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/** Loading and error chrome for a SessionInspector fed from a URL. With\n * `children` (a session already loaded) the error sits above it; without,\n * it replaces the inspector: a skeleton while loading, the alert on failure. */\nexport function RemoteSessionStatus({\n loading,\n error,\n className,\n children,\n}: {\n loading: boolean;\n error?: string;\n className?: string;\n children?: ReactNode;\n}) {\n const alert = error ? (\n <div\n role=\"alert\"\n className=\"shrink-0 whitespace-pre-wrap break-words rounded-md border border-destructive/40 bg-destructive/5 px-density-3 py-density-2 text-xs text-destructive\"\n >\n {error}\n </div>\n ) : null;\n if (children) {\n return (\n <div className={cn(\"flex h-full min-h-0 w-full flex-col gap-density-2\", className)}>\n {alert}\n <div className=\"min-h-0 flex-1\">{children}</div>\n </div>\n );\n }\n return (\n <div\n aria-busy={loading}\n className={cn(\n \"flex h-full min-h-0 w-full flex-col gap-density-3 rounded-xl border border-border bg-background p-density-4 text-sm shadow-sm\",\n className,\n )}\n >\n {alert ?? (\n <>\n <p className=\"text-xs text-muted-foreground\">Loading session…</p>\n <div className=\"h-control-h w-1/3 animate-pulse rounded-md bg-muted\" />\n <div className=\"h-4 w-full animate-pulse rounded bg-muted\" />\n <div className=\"h-4 w-5/6 animate-pulse rounded bg-muted\" />\n <div className=\"h-4 w-2/3 animate-pulse rounded bg-muted\" />\n </>\n )}\n </div>\n );\n}\n"],"names":["jsx","cn","jsxs","Fragment"],"mappings":";;;;AAMO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,QAAQ,QACZA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MAET,UAAA;AAAA,IAAA;AAAA,EAAA,IAED;AACJ,MAAI,UAAU;AACZ,2CACG,OAAA,EAAI,WAAWC,MAAAA,GAAG,qDAAqD,SAAS,GAC9E,UAAA;AAAA,MAAA;AAAA,MACDD,2BAAAA,IAAC,OAAA,EAAI,WAAU,kBAAkB,SAAA,CAAS;AAAA,IAAA,GAC5C;AAAA,EAEJ;AACA,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAW;AAAA,MACX,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAGD,mBACCC,2BAAAA,KAAAC,WAAAA,UAAA,EACE,UAAA;AAAA,QAAAH,2BAAAA,IAAC,KAAA,EAAE,WAAU,iCAAgC,UAAA,oBAAgB;AAAA,QAC7DA,2BAAAA,IAAC,OAAA,EAAI,WAAU,sDAAA,CAAsD;AAAA,QACrEA,2BAAAA,IAAC,OAAA,EAAI,WAAU,4CAAA,CAA4C;AAAA,QAC3DA,2BAAAA,IAAC,OAAA,EAAI,WAAU,2CAAA,CAA2C;AAAA,QAC1DA,2BAAAA,IAAC,OAAA,EAAI,WAAU,2CAAA,CAA2C;AAAA,MAAA,EAAA,CAC5D;AAAA,IAAA;AAAA,EAAA;AAIR;;"}
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ /** Loading and error chrome for a SessionInspector fed from a URL. With
3
+ * `children` (a session already loaded) the error sits above it; without,
4
+ * it replaces the inspector: a skeleton while loading, the alert on failure. */
5
+ export declare function RemoteSessionStatus({ loading, error, className, children, }: {
6
+ loading: boolean;
7
+ error?: string;
8
+ className?: string;
9
+ children?: ReactNode;
10
+ }): import("react").JSX.Element;
11
+ //# sourceMappingURL=SessionInspector.remote-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionInspector.remote-view.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.remote-view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;iFAEiF;AACjF,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,KAAK,EACL,SAAS,EACT,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAoCA"}