@mastra/playground-ui 56.0.0 → 57.0.0-alpha.1

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 (1044) hide show
  1. package/dist/{Button-CVewl8nT.cjs → Button-C0DBEBcJ.cjs} +12 -5
  2. package/dist/Button-C0DBEBcJ.cjs.map +1 -0
  3. package/dist/{Button-cWcBEd-G.js → Button-C9cvaVFG.js} +13 -6
  4. package/dist/Button-C9cvaVFG.js.map +1 -0
  5. package/dist/{Card-DEvGFj-Z.js → Card-B_buJ5yF.js} +3 -3
  6. package/dist/{Card-DEvGFj-Z.js.map → Card-B_buJ5yF.js.map} +1 -1
  7. package/dist/{Card-D0kFp9j9.cjs → Card-DwGasv0K.cjs} +3 -3
  8. package/dist/{Card-D0kFp9j9.cjs.map → Card-DwGasv0K.cjs.map} +1 -1
  9. package/dist/{EmptyState-UWXhBp5U.js → EmptyState-B6cyZw6m.js} +12 -6
  10. package/dist/EmptyState-B6cyZw6m.js.map +1 -0
  11. package/dist/{EmptyState-CdRjFB06.cjs → EmptyState-DiSP6UIy.cjs} +12 -6
  12. package/dist/EmptyState-DiSP6UIy.cjs.map +1 -0
  13. package/dist/ErrorState-B0839u-q.cjs +21 -0
  14. package/dist/ErrorState-B0839u-q.cjs.map +1 -0
  15. package/dist/ErrorState-HyRJdaA2.js +19 -0
  16. package/dist/ErrorState-HyRJdaA2.js.map +1 -0
  17. package/dist/Header-BVnFQlzE.js +31 -0
  18. package/dist/Header-BVnFQlzE.js.map +1 -0
  19. package/dist/Header-CGjhJ0nQ.cjs +36 -0
  20. package/dist/Header-CGjhJ0nQ.cjs.map +1 -0
  21. package/dist/{Notice-Cjti0e0j.cjs → Notice-CoFjo8O6.cjs} +3 -3
  22. package/dist/{Notice-Cjti0e0j.cjs.map → Notice-CoFjo8O6.cjs.map} +1 -1
  23. package/dist/{Notice-Ah-84yi6.js → Notice-DUdQkUqH.js} +3 -3
  24. package/dist/{Notice-Ah-84yi6.js.map → Notice-DUdQkUqH.js.map} +1 -1
  25. package/dist/{PermissionDenied-B6TSGolC.js → PermissionDenied-CTqnE57B.js} +11 -6
  26. package/dist/PermissionDenied-CTqnE57B.js.map +1 -0
  27. package/dist/{PermissionDenied-Dz5qXpQj.cjs → PermissionDenied-fdVmTjjf.cjs} +11 -6
  28. package/dist/PermissionDenied-fdVmTjjf.cjs.map +1 -0
  29. package/dist/{SessionExpired-CF0BGNo_.cjs → SessionExpired-CFGTqnU5.cjs} +5 -6
  30. package/dist/SessionExpired-CFGTqnU5.cjs.map +1 -0
  31. package/dist/{SessionExpired-Bq5LcsDu.js → SessionExpired-COK6flhT.js} +5 -6
  32. package/dist/SessionExpired-COK6flhT.js.map +1 -0
  33. package/dist/ask-user-3fufbFt8.cjs +216 -0
  34. package/dist/ask-user-3fufbFt8.cjs.map +1 -0
  35. package/dist/ask-user-CvCMHkhI.js +206 -0
  36. package/dist/ask-user-CvCMHkhI.js.map +1 -0
  37. package/dist/buttons-group-CoZP3lJt.cjs +59 -0
  38. package/dist/buttons-group-CoZP3lJt.cjs.map +1 -0
  39. package/dist/buttons-group-DsZgrZBZ.js +37 -0
  40. package/dist/buttons-group-DsZgrZBZ.js.map +1 -0
  41. package/dist/buttons-group.css +113 -22
  42. package/dist/{chat-notification-4OuPNhtu.js → chat-notification-BM24QnK9.js} +7 -7
  43. package/dist/{chat-notification-4OuPNhtu.js.map → chat-notification-BM24QnK9.js.map} +1 -1
  44. package/dist/{chat-notification-CPrlBwP_.cjs → chat-notification-CQlc3Z3y.cjs} +7 -7
  45. package/dist/{chat-notification-CPrlBwP_.cjs.map → chat-notification-CQlc3Z3y.cjs.map} +1 -1
  46. package/dist/{chat-signal-CG5-vy21.js → chat-signal-5gAZo10e.js} +6 -6
  47. package/dist/{chat-signal-CG5-vy21.js.map → chat-signal-5gAZo10e.js.map} +1 -1
  48. package/dist/{chat-signal-B_T2DSzo.cjs → chat-signal-CUkeTh1i.cjs} +6 -6
  49. package/dist/{chat-signal-B_T2DSzo.cjs.map → chat-signal-CUkeTh1i.cjs.map} +1 -1
  50. package/dist/{code-block-Cd4u7Bo9.cjs → code-block-D2q4w1t-.cjs} +10 -10
  51. package/dist/{code-block-Cd4u7Bo9.cjs.map → code-block-D2q4w1t-.cjs.map} +1 -1
  52. package/dist/{code-block-CSqjpBvb.js → code-block-D3BWud_S.js} +10 -10
  53. package/dist/{code-block-CSqjpBvb.js.map → code-block-D3BWud_S.js.map} +1 -1
  54. package/dist/{code-diff-C5uY-3Hz.js → code-diff-BHZTS4Zh.js} +2 -2
  55. package/dist/{code-diff-C5uY-3Hz.js.map → code-diff-BHZTS4Zh.js.map} +1 -1
  56. package/dist/{code-diff-DBtbPe9D.cjs → code-diff-CG8veSa-.cjs} +2 -2
  57. package/dist/{code-diff-DBtbPe9D.cjs.map → code-diff-CG8veSa-.cjs.map} +1 -1
  58. package/dist/{code-editor-vCt7l9Bl.js → code-editor-7wJJDE9d.js} +2 -2
  59. package/dist/{code-editor-vCt7l9Bl.js.map → code-editor-7wJJDE9d.js.map} +1 -1
  60. package/dist/{code-editor-DgY7d8kg.cjs → code-editor-Ce1FXyFV.cjs} +2 -2
  61. package/dist/{code-editor-DgY7d8kg.cjs.map → code-editor-Ce1FXyFV.cjs.map} +1 -1
  62. package/dist/{collapsible-BvrI6XnN.cjs → collapsible-BFSJouuI.cjs} +2 -2
  63. package/dist/{collapsible-BvrI6XnN.cjs.map → collapsible-BFSJouuI.cjs.map} +1 -1
  64. package/dist/{collapsible-B2uUy8w5.js → collapsible-DhhP5p1j.js} +2 -2
  65. package/dist/{collapsible-B2uUy8w5.js.map → collapsible-DhhP5p1j.js.map} +1 -1
  66. package/dist/{combobox-D7xJFZuO.js → combobox-CV-Ue388.js} +5 -5
  67. package/dist/combobox-CV-Ue388.js.map +1 -0
  68. package/dist/{combobox-BWM3VH-n.cjs → combobox-Dw3W6EHS.cjs} +6 -6
  69. package/dist/combobox-Dw3W6EHS.cjs.map +1 -0
  70. package/dist/{combobox-styles-CRebmeht.js → combobox-styles-Dgc_Jp-E.js} +3 -6
  71. package/dist/combobox-styles-Dgc_Jp-E.js.map +1 -0
  72. package/dist/{combobox-styles-DYlNNjKC.cjs → combobox-styles-ExU7SMb7.cjs} +3 -6
  73. package/dist/combobox-styles-ExU7SMb7.cjs.map +1 -0
  74. package/dist/{command-DuT06mTw.cjs → command-BJrGchxZ.cjs} +6 -6
  75. package/dist/{command-DuT06mTw.cjs.map → command-BJrGchxZ.cjs.map} +1 -1
  76. package/dist/{command-jRiL1vXM.js → command-kHnYspgO.js} +6 -6
  77. package/dist/{command-jRiL1vXM.js.map → command-kHnYspgO.js.map} +1 -1
  78. package/dist/components/ActionRow.cjs.js +38 -0
  79. package/dist/components/ActionRow.cjs.js.map +1 -0
  80. package/dist/components/ActionRow.d.ts +2 -0
  81. package/dist/components/ActionRow.es.js +34 -0
  82. package/dist/components/ActionRow.es.js.map +1 -0
  83. package/dist/components/AlertDialog.cjs.js +1 -1
  84. package/dist/components/AlertDialog.es.js +1 -1
  85. package/dist/components/Breadcrumb.cjs.js +1 -1
  86. package/dist/components/Breadcrumb.cjs.js.map +1 -1
  87. package/dist/components/Breadcrumb.es.js +1 -1
  88. package/dist/components/Breadcrumb.es.js.map +1 -1
  89. package/dist/components/Button.cjs.js +2 -2
  90. package/dist/components/Button.es.js +3 -3
  91. package/dist/components/ButtonsGroup.cjs.js +1 -2
  92. package/dist/components/ButtonsGroup.cjs.js.map +1 -1
  93. package/dist/components/ButtonsGroup.es.js +1 -1
  94. package/dist/components/Card.cjs.js +1 -1
  95. package/dist/components/Card.es.js +1 -1
  96. package/dist/components/ClampedText.cjs.js +1 -1
  97. package/dist/components/ClampedText.es.js +1 -1
  98. package/dist/components/CodeBlock.cjs.js +1 -1
  99. package/dist/components/CodeBlock.es.js +1 -1
  100. package/dist/components/CodeDiff.cjs.js +1 -1
  101. package/dist/components/CodeDiff.es.js +1 -1
  102. package/dist/components/CodeEditor.cjs.js +1 -1
  103. package/dist/components/CodeEditor.es.js +1 -1
  104. package/dist/components/Collapsible.cjs.js +1 -1
  105. package/dist/components/Collapsible.es.js +1 -1
  106. package/dist/components/Columns.cjs.js +1 -1
  107. package/dist/components/Columns.es.js +1 -1
  108. package/dist/components/Combobox.cjs.js +2 -2
  109. package/dist/components/Combobox.es.js +2 -2
  110. package/dist/components/Command.cjs.js +1 -1
  111. package/dist/components/Command.es.js +1 -1
  112. package/dist/components/CommandPalette.cjs.js +12 -12
  113. package/dist/components/CommandPalette.cjs.js.map +1 -1
  114. package/dist/components/CommandPalette.es.js +12 -12
  115. package/dist/components/CommandPalette.es.js.map +1 -1
  116. package/dist/components/Comment.cjs.js +6 -7
  117. package/dist/components/Comment.cjs.js.map +1 -1
  118. package/dist/components/Comment.es.js +5 -6
  119. package/dist/components/Comment.es.js.map +1 -1
  120. package/dist/components/Composer.cjs.js +6 -6
  121. package/dist/components/Composer.cjs.js.map +1 -1
  122. package/dist/components/Composer.es.js +6 -6
  123. package/dist/components/Composer.es.js.map +1 -1
  124. package/dist/components/ContextMenu.cjs.js +1 -6
  125. package/dist/components/ContextMenu.cjs.js.map +1 -1
  126. package/dist/components/ContextMenu.es.js +1 -6
  127. package/dist/components/ContextMenu.es.js.map +1 -1
  128. package/dist/components/CopyButton.cjs.js +1 -1
  129. package/dist/components/CopyButton.es.js +1 -1
  130. package/dist/components/DataCodeSection.cjs.js +1 -1
  131. package/dist/components/DataCodeSection.es.js +1 -1
  132. package/dist/components/DataDetailsPanel.cjs.js +10 -11
  133. package/dist/components/DataDetailsPanel.cjs.js.map +1 -1
  134. package/dist/components/DataDetailsPanel.es.js +10 -11
  135. package/dist/components/DataDetailsPanel.es.js.map +1 -1
  136. package/dist/components/DataFilter.cjs.js +2 -2
  137. package/dist/components/DataFilter.es.js +2 -2
  138. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  139. package/dist/components/DataKeysAndValues.es.js +1 -1
  140. package/dist/components/DataList.cjs.js +8 -8
  141. package/dist/components/DataList.cjs.js.map +1 -1
  142. package/dist/components/DataList.es.js +8 -8
  143. package/dist/components/DataList.es.js.map +1 -1
  144. package/dist/components/DataPanel.cjs.js +1 -1
  145. package/dist/components/DataPanel.es.js +1 -1
  146. package/dist/components/DateRangeTimeline.cjs.js +6 -6
  147. package/dist/components/DateRangeTimeline.cjs.js.map +1 -1
  148. package/dist/components/DateRangeTimeline.es.js +6 -6
  149. package/dist/components/DateRangeTimeline.es.js.map +1 -1
  150. package/dist/components/DateTimePicker.cjs.js +4 -4
  151. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  152. package/dist/components/DateTimePicker.es.js +4 -4
  153. package/dist/components/DateTimePicker.es.js.map +1 -1
  154. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  155. package/dist/components/DateTimeRangePicker.es.js +1 -1
  156. package/dist/components/Dialog.cjs.js +2 -2
  157. package/dist/components/Dialog.es.js +3 -3
  158. package/dist/components/Drawer.cjs.js +1 -1
  159. package/dist/components/Drawer.es.js +1 -1
  160. package/dist/components/DropdownMenu.cjs.js +1 -1
  161. package/dist/components/DropdownMenu.es.js +1 -1
  162. package/dist/components/EmptyState.cjs.js +1 -1
  163. package/dist/components/EmptyState.es.js +1 -1
  164. package/dist/components/EntityHeader.cjs.js +1 -1
  165. package/dist/components/EntityHeader.cjs.js.map +1 -1
  166. package/dist/components/EntityHeader.es.js +1 -1
  167. package/dist/components/EntityHeader.es.js.map +1 -1
  168. package/dist/components/EnvironmentVariablesEditor.cjs.js +15 -16
  169. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  170. package/dist/components/EnvironmentVariablesEditor.es.js +9 -10
  171. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  172. package/dist/components/ErrorBoundary.cjs.js +3 -3
  173. package/dist/components/ErrorBoundary.cjs.js.map +1 -1
  174. package/dist/components/ErrorBoundary.es.js +3 -3
  175. package/dist/components/ErrorBoundary.es.js.map +1 -1
  176. package/dist/components/ErrorState.cjs.js +1 -1
  177. package/dist/components/ErrorState.es.js +1 -1
  178. package/dist/components/FilterBar.cjs.js +495 -43
  179. package/dist/components/FilterBar.cjs.js.map +1 -1
  180. package/dist/components/FilterBar.es.js +495 -47
  181. package/dist/components/FilterBar.es.js.map +1 -1
  182. package/dist/components/FormFieldBlocks.cjs.js +11 -12
  183. package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
  184. package/dist/components/FormFieldBlocks.es.js +4 -5
  185. package/dist/components/FormFieldBlocks.es.js.map +1 -1
  186. package/dist/components/Header.cjs.js +6 -31
  187. package/dist/components/Header.cjs.js.map +1 -1
  188. package/dist/components/Header.es.js +1 -30
  189. package/dist/components/Header.es.js.map +1 -1
  190. package/dist/components/HorizontalBars.cjs.js +1 -1
  191. package/dist/components/HorizontalBars.es.js +1 -1
  192. package/dist/components/HoverCard.cjs.js +1 -1
  193. package/dist/components/HoverCard.es.js +1 -1
  194. package/dist/components/InputGroup.cjs.js +1 -1
  195. package/dist/components/InputGroup.es.js +1 -1
  196. package/dist/components/IntegrationDialog.cjs.js +6 -6
  197. package/dist/components/IntegrationDialog.cjs.js.map +1 -1
  198. package/dist/components/IntegrationDialog.es.js +6 -6
  199. package/dist/components/IntegrationDialog.es.js.map +1 -1
  200. package/dist/components/ItemList.cjs.js +4 -4
  201. package/dist/components/ItemList.cjs.js.map +1 -1
  202. package/dist/components/ItemList.es.js +4 -4
  203. package/dist/components/ItemList.es.js.map +1 -1
  204. package/dist/components/JSONSchemaForm.cjs.js +3 -3
  205. package/dist/components/JSONSchemaForm.es.js +3 -3
  206. package/dist/components/Kbd.cjs.js +1 -1
  207. package/dist/components/Kbd.es.js +1 -1
  208. package/dist/components/KeyValueList.cjs.js +1 -1
  209. package/dist/components/KeyValueList.es.js +1 -1
  210. package/dist/components/ListSearch.cjs.js +1 -1
  211. package/dist/components/ListSearch.es.js +1 -1
  212. package/dist/components/LogsDataList.cjs.js +4 -2
  213. package/dist/components/LogsDataList.cjs.js.map +1 -1
  214. package/dist/components/LogsDataList.es.js +4 -2
  215. package/dist/components/LogsDataList.es.js.map +1 -1
  216. package/dist/components/MainHeader.cjs.js +3 -3
  217. package/dist/components/MainHeader.cjs.js.map +1 -1
  218. package/dist/components/MainHeader.es.js +3 -3
  219. package/dist/components/MainHeader.es.js.map +1 -1
  220. package/dist/components/MainSidebar.cjs.js +11 -125
  221. package/dist/components/MainSidebar.cjs.js.map +1 -1
  222. package/dist/components/MainSidebar.es.js +1 -120
  223. package/dist/components/MainSidebar.es.js.map +1 -1
  224. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  225. package/dist/components/MarkdownRenderer.es.js +1 -1
  226. package/dist/components/Message.cjs.js +2 -2
  227. package/dist/components/Message.es.js +3 -3
  228. package/dist/components/MetricsCard.cjs.js +1 -1
  229. package/dist/components/MetricsCard.es.js +1 -1
  230. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  231. package/dist/components/MetricsKpiCard.es.js +1 -1
  232. package/dist/components/MetricsLineChart.cjs.js +1 -1
  233. package/dist/components/MetricsLineChart.es.js +1 -1
  234. package/dist/components/Notice.cjs.js +1 -1
  235. package/dist/components/Notice.es.js +1 -1
  236. package/dist/components/PageHeader.cjs.js +1 -1
  237. package/dist/components/PageHeader.es.js +1 -1
  238. package/dist/components/PageLayout.cjs.js +30 -8
  239. package/dist/components/PageLayout.cjs.js.map +1 -1
  240. package/dist/components/PageLayout.es.js +32 -3
  241. package/dist/components/PageLayout.es.js.map +1 -1
  242. package/dist/components/PendingIndicator.cjs.js +1 -1
  243. package/dist/components/PendingIndicator.cjs.js.map +1 -1
  244. package/dist/components/PendingIndicator.es.js +1 -1
  245. package/dist/components/PendingIndicator.es.js.map +1 -1
  246. package/dist/components/PermissionDenied.cjs.js +1 -1
  247. package/dist/components/PermissionDenied.es.js +1 -1
  248. package/dist/components/PrevNextNav.cjs.js +1 -1
  249. package/dist/components/PrevNextNav.es.js +1 -1
  250. package/dist/components/PropertyFilter.cjs.js +18 -19
  251. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  252. package/dist/components/PropertyFilter.es.js +21 -22
  253. package/dist/components/PropertyFilter.es.js.map +1 -1
  254. package/dist/components/RadioGroup.cjs.js +3 -56
  255. package/dist/components/RadioGroup.cjs.js.map +1 -1
  256. package/dist/components/RadioGroup.es.js +1 -39
  257. package/dist/components/RadioGroup.es.js.map +1 -1
  258. package/dist/components/RuleBuilder.cjs.js +10 -10
  259. package/dist/components/RuleBuilder.cjs.js.map +1 -1
  260. package/dist/components/RuleBuilder.es.js +10 -10
  261. package/dist/components/RuleBuilder.es.js.map +1 -1
  262. package/dist/components/SankeyChart.cjs.js +1 -1
  263. package/dist/components/SankeyChart.es.js +1 -1
  264. package/dist/components/ScatterPlotChart.cjs.js +2 -2
  265. package/dist/components/ScatterPlotChart.cjs.js.map +1 -1
  266. package/dist/components/ScatterPlotChart.es.js +2 -2
  267. package/dist/components/ScatterPlotChart.es.js.map +1 -1
  268. package/dist/components/ScrollArea.cjs.js +1 -1
  269. package/dist/components/ScrollArea.es.js +1 -1
  270. package/dist/components/Select.cjs.js +1 -1
  271. package/dist/components/Select.es.js +1 -1
  272. package/dist/components/SessionExpired.cjs.js +1 -1
  273. package/dist/components/SessionExpired.es.js +1 -1
  274. package/dist/components/SettingsLayout.cjs.js +1 -1
  275. package/dist/components/SettingsLayout.es.js +1 -1
  276. package/dist/components/SideDialog.cjs.js +17 -10
  277. package/dist/components/SideDialog.cjs.js.map +1 -1
  278. package/dist/components/SideDialog.es.js +17 -10
  279. package/dist/components/SideDialog.es.js.map +1 -1
  280. package/dist/components/Spinner.cjs.js +1 -1
  281. package/dist/components/Spinner.es.js +1 -1
  282. package/dist/components/StatusIndicators.cjs.js +3 -3
  283. package/dist/components/StatusIndicators.cjs.js.map +1 -1
  284. package/dist/components/StatusIndicators.es.js +3 -3
  285. package/dist/components/StatusIndicators.es.js.map +1 -1
  286. package/dist/components/Steps.cjs.js +3 -3
  287. package/dist/components/Steps.cjs.js.map +1 -1
  288. package/dist/components/Steps.es.js +3 -3
  289. package/dist/components/Steps.es.js.map +1 -1
  290. package/dist/components/Tabs.cjs.js +3 -3
  291. package/dist/components/Tabs.es.js +3 -3
  292. package/dist/components/ThreadList.cjs.js +2 -2
  293. package/dist/components/ThreadList.cjs.js.map +1 -1
  294. package/dist/components/ThreadList.es.js +2 -2
  295. package/dist/components/ThreadList.es.js.map +1 -1
  296. package/dist/components/ThreadRail.cjs.js +1 -1
  297. package/dist/components/ThreadRail.es.js +1 -1
  298. package/dist/components/TokenBudget.cjs.js +1 -1
  299. package/dist/components/TokenBudget.cjs.js.map +1 -1
  300. package/dist/components/TokenBudget.es.js +1 -1
  301. package/dist/components/TokenBudget.es.js.map +1 -1
  302. package/dist/components/Tree.cjs.js +3 -3
  303. package/dist/components/Tree.cjs.js.map +1 -1
  304. package/dist/components/Tree.es.js +3 -3
  305. package/dist/components/Tree.es.js.map +1 -1
  306. package/dist/components/Truncate.cjs.js +1 -1
  307. package/dist/components/Truncate.es.js +1 -1
  308. package/dist/components/Workflow.cjs.js +36 -36
  309. package/dist/components/Workflow.cjs.js.map +1 -1
  310. package/dist/components/Workflow.es.js +36 -36
  311. package/dist/components/Workflow.es.js.map +1 -1
  312. package/dist/components/ai/ask-user.cjs.js +4 -3
  313. package/dist/components/ai/ask-user.cjs.js.map +1 -1
  314. package/dist/components/ai/ask-user.es.js +1 -1
  315. package/dist/components/ai/chat-event.cjs.js +6 -6
  316. package/dist/components/ai/chat-event.cjs.js.map +1 -1
  317. package/dist/components/ai/chat-event.es.js +7 -7
  318. package/dist/components/ai/chat-event.es.js.map +1 -1
  319. package/dist/components/ai/plan.cjs.js +2 -2
  320. package/dist/components/ai/plan.es.js +2 -2
  321. package/dist/components/ai/task-list.cjs.js +7 -7
  322. package/dist/components/ai/task-list.cjs.js.map +1 -1
  323. package/dist/components/ai/task-list.es.js +7 -7
  324. package/dist/components/ai/task-list.es.js.map +1 -1
  325. package/dist/components/ai/tool-approval.cjs.js +1 -1
  326. package/dist/components/ai/tool-approval.es.js +1 -1
  327. package/dist/components/ai/tool-call.cjs.js +8 -8
  328. package/dist/components/ai/tool-call.cjs.js.map +1 -1
  329. package/dist/components/ai/tool-call.es.js +9 -9
  330. package/dist/components/ai/tool-call.es.js.map +1 -1
  331. package/dist/components/fluid-hover-highlight.cjs.js +13 -35
  332. package/dist/components/fluid-hover-highlight.cjs.js.map +1 -1
  333. package/dist/components/fluid-hover-highlight.es.js +14 -33
  334. package/dist/components/fluid-hover-highlight.es.js.map +1 -1
  335. package/dist/{composer-BUoRnMDd.cjs → composer-B_Err196.cjs} +6 -6
  336. package/dist/{composer-BUoRnMDd.cjs.map → composer-B_Err196.cjs.map} +1 -1
  337. package/dist/{composer-CEL1glw7.js → composer-DJGAoBcn.js} +6 -6
  338. package/dist/{composer-CEL1glw7.js.map → composer-DJGAoBcn.js.map} +1 -1
  339. package/dist/{copy-button-BbDBpBMl.cjs → copy-button-C5dMlWsW.cjs} +2 -2
  340. package/dist/{copy-button-BbDBpBMl.cjs.map → copy-button-C5dMlWsW.cjs.map} +1 -1
  341. package/dist/{copy-button-2cwdZ3dW.js → copy-button-C6RswD_D.js} +2 -2
  342. package/dist/{copy-button-2cwdZ3dW.js.map → copy-button-C6RswD_D.js.map} +1 -1
  343. package/dist/{data-code-section-qujvEc6j.cjs → data-code-section-B-y2WPBl.cjs} +17 -19
  344. package/dist/data-code-section-B-y2WPBl.cjs.map +1 -0
  345. package/dist/{data-code-section-DKz9Okaz.js → data-code-section-DcocgDAN.js} +17 -19
  346. package/dist/data-code-section-DcocgDAN.js.map +1 -0
  347. package/dist/{data-keys-and-values-4pYpSbqS.cjs → data-keys-and-values-BduKvvC5.cjs} +2 -2
  348. package/dist/{data-keys-and-values-4pYpSbqS.cjs.map → data-keys-and-values-BduKvvC5.cjs.map} +1 -1
  349. package/dist/{data-keys-and-values-j0NVKPOl.js → data-keys-and-values-DhC4U4Yl.js} +2 -2
  350. package/dist/{data-keys-and-values-j0NVKPOl.js.map → data-keys-and-values-DhC4U4Yl.js.map} +1 -1
  351. package/dist/{data-list-DnSdaRES.js → data-list-gN4SP7a8.js} +5 -5
  352. package/dist/{data-list-DnSdaRES.js.map → data-list-gN4SP7a8.js.map} +1 -1
  353. package/dist/{data-list-skeleton-ADXw-opu.cjs → data-list-skeleton-DYG2LLri.cjs} +2 -2
  354. package/dist/{data-list-skeleton-ADXw-opu.cjs.map → data-list-skeleton-DYG2LLri.cjs.map} +1 -1
  355. package/dist/{data-list-skeleton-D7-glFuk.js → data-list-skeleton-PXHovGLv.js} +2 -2
  356. package/dist/{data-list-skeleton-D7-glFuk.js.map → data-list-skeleton-PXHovGLv.js.map} +1 -1
  357. package/dist/{data-list-spacer-DRHNUeeP.js → data-list-spacer-D-AQzTYw.js} +3 -3
  358. package/dist/{data-list-spacer-DRHNUeeP.js.map → data-list-spacer-D-AQzTYw.js.map} +1 -1
  359. package/dist/{data-list-spacer-EWo65MrK.cjs → data-list-spacer-MpuBsXjL.cjs} +3 -3
  360. package/dist/{data-list-spacer-EWo65MrK.cjs.map → data-list-spacer-MpuBsXjL.cjs.map} +1 -1
  361. package/dist/{data-list-top-DLwt_Sv-.js → data-list-top-BTeM7hI4.js} +5 -5
  362. package/dist/{data-list-top-DLwt_Sv-.js.map → data-list-top-BTeM7hI4.js.map} +1 -1
  363. package/dist/{data-list-top-RK_yX6z8.cjs → data-list-top-DDux1Eu4.cjs} +5 -5
  364. package/dist/{data-list-top-RK_yX6z8.cjs.map → data-list-top-DDux1Eu4.cjs.map} +1 -1
  365. package/dist/{data-list-CypPKOQ_.cjs → data-list-yJm-3f2w.cjs} +5 -5
  366. package/dist/{data-list-CypPKOQ_.cjs.map → data-list-yJm-3f2w.cjs.map} +1 -1
  367. package/dist/{data-panel-CWZJKBeW.cjs → data-panel-CM3N_4M7.cjs} +9 -9
  368. package/dist/{data-panel-CWZJKBeW.cjs.map → data-panel-CM3N_4M7.cjs.map} +1 -1
  369. package/dist/{data-panel-CWjgS1Gh.js → data-panel-D3UfzCoE.js} +9 -9
  370. package/dist/{data-panel-CWjgS1Gh.js.map → data-panel-D3UfzCoE.js.map} +1 -1
  371. package/dist/{date-time-range-picker-C6hjZswK.cjs → date-time-range-picker-2Pkg-FoU.cjs} +6 -7
  372. package/dist/{date-time-range-picker-C6hjZswK.cjs.map → date-time-range-picker-2Pkg-FoU.cjs.map} +1 -1
  373. package/dist/{date-time-range-picker-BcjLbkGu.js → date-time-range-picker-DHg-fuV3.js} +5 -6
  374. package/dist/{date-time-range-picker-BcjLbkGu.js.map → date-time-range-picker-DHg-fuV3.js.map} +1 -1
  375. package/dist/{dialog-Dm33cZqt.cjs → dialog-Cyj59QsZ.cjs} +3 -3
  376. package/dist/{dialog-Dm33cZqt.cjs.map → dialog-Cyj59QsZ.cjs.map} +1 -1
  377. package/dist/{dialog-DRpMek34.js → dialog-D8fuBETk.js} +3 -3
  378. package/dist/{dialog-DRpMek34.js.map → dialog-D8fuBETk.js.map} +1 -1
  379. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
  380. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
  381. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +1 -1
  382. package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
  383. package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
  384. package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
  385. package/dist/domains/chat/components/badge-wrapper.cjs.js +2 -2
  386. package/dist/domains/chat/components/badge-wrapper.cjs.js.map +1 -1
  387. package/dist/domains/chat/components/badge-wrapper.es.js +2 -2
  388. package/dist/domains/chat/components/badge-wrapper.es.js.map +1 -1
  389. package/dist/domains/chat/components/loading-badge.cjs.js +1 -1
  390. package/dist/domains/chat/components/loading-badge.es.js +1 -1
  391. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +4 -4
  392. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js.map +1 -1
  393. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +4 -4
  394. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js.map +1 -1
  395. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  396. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  397. package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js +1 -1
  398. package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js.map +1 -1
  399. package/dist/domains/chat/messages/reasoning-streaming-line.es.js +1 -1
  400. package/dist/domains/chat/messages/reasoning-streaming-line.es.js.map +1 -1
  401. package/dist/domains/chat/messages/reasoning.cjs.js +4 -4
  402. package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
  403. package/dist/domains/chat/messages/reasoning.es.js +4 -4
  404. package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
  405. package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
  406. package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
  407. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  408. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  409. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  410. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  411. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +6 -6
  412. package/dist/domains/chat/messages/system-reminder-badge.cjs.js.map +1 -1
  413. package/dist/domains/chat/messages/system-reminder-badge.es.js +6 -6
  414. package/dist/domains/chat/messages/system-reminder-badge.es.js.map +1 -1
  415. package/dist/domains/chat/messages/tripwire-notice.cjs.js +3 -3
  416. package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
  417. package/dist/domains/chat/messages/tripwire-notice.es.js +3 -3
  418. package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
  419. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +2 -2
  420. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js.map +1 -1
  421. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +2 -2
  422. package/dist/domains/chat/tools/badges/ask-user-badge.es.js.map +1 -1
  423. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +5 -5
  424. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
  425. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +5 -5
  426. package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
  427. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +29 -29
  428. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js.map +1 -1
  429. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +29 -29
  430. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js.map +1 -1
  431. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +11 -11
  432. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js.map +1 -1
  433. package/dist/domains/chat/tools/badges/observation-renderer.es.js +11 -11
  434. package/dist/domains/chat/tools/badges/observation-renderer.es.js.map +1 -1
  435. package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +1 -1
  436. package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +1 -1
  437. package/dist/domains/logs/components/log-details-view.cjs.js +10 -12
  438. package/dist/domains/logs/components/log-details-view.cjs.js.map +1 -1
  439. package/dist/domains/logs/components/log-details-view.es.js +10 -12
  440. package/dist/domains/logs/components/log-details-view.es.js.map +1 -1
  441. package/dist/domains/logs/components/logs-error-content.cjs.js +4 -7
  442. package/dist/domains/logs/components/logs-error-content.cjs.js.map +1 -1
  443. package/dist/domains/logs/components/logs-error-content.es.js +4 -7
  444. package/dist/domains/logs/components/logs-error-content.es.js.map +1 -1
  445. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  446. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  447. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  448. package/dist/domains/logs/components/logs-toolbar.cjs.js.map +1 -1
  449. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  450. package/dist/domains/logs/components/logs-toolbar.es.js.map +1 -1
  451. package/dist/domains/logs/components/no-logs-info.cjs.js +6 -6
  452. package/dist/domains/logs/components/no-logs-info.cjs.js.map +1 -1
  453. package/dist/domains/logs/components/no-logs-info.es.js +7 -7
  454. package/dist/domains/logs/components/no-logs-info.es.js.map +1 -1
  455. package/dist/domains/memory/components/flame-graph.cjs.js +19 -19
  456. package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
  457. package/dist/domains/memory/components/flame-graph.es.js +19 -19
  458. package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
  459. package/dist/domains/memory/components/memory-studio-panel.cjs.js +4 -4
  460. package/dist/domains/memory/components/memory-studio-panel.cjs.js.map +1 -1
  461. package/dist/domains/memory/components/memory-studio-panel.es.js +4 -4
  462. package/dist/domains/memory/components/memory-studio-panel.es.js.map +1 -1
  463. package/dist/domains/memory/components/observation-detail-view.cjs.js +17 -18
  464. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  465. package/dist/domains/memory/components/observation-detail-view.es.js +17 -18
  466. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  467. package/dist/domains/memory/components/thread-context-progress.cjs.js +3 -3
  468. package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
  469. package/dist/domains/memory/components/thread-context-progress.es.js +3 -3
  470. package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
  471. package/dist/domains/metrics/components/bar-list.cjs.js +9 -9
  472. package/dist/domains/metrics/components/bar-list.cjs.js.map +1 -1
  473. package/dist/domains/metrics/components/bar-list.es.js +9 -9
  474. package/dist/domains/metrics/components/bar-list.es.js.map +1 -1
  475. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  476. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  477. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  478. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  479. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  480. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  481. package/dist/domains/metrics/components/latency-card-view.cjs.js +5 -5
  482. package/dist/domains/metrics/components/latency-card-view.es.js +5 -5
  483. package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -5
  484. package/dist/domains/metrics/components/memory-card-view.es.js +5 -5
  485. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
  486. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
  487. package/dist/domains/metrics/components/scores-card-view.cjs.js +6 -6
  488. package/dist/domains/metrics/components/scores-card-view.es.js +6 -6
  489. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +5 -5
  490. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +5 -5
  491. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +5 -5
  492. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +5 -5
  493. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +5 -5
  494. package/dist/domains/metrics/components/traces-volume-card-view.es.js +5 -5
  495. package/dist/domains/traces/components/no-traces-info.cjs.js +2 -3
  496. package/dist/domains/traces/components/no-traces-info.cjs.js.map +1 -1
  497. package/dist/domains/traces/components/no-traces-info.es.js +2 -3
  498. package/dist/domains/traces/components/no-traces-info.es.js.map +1 -1
  499. package/dist/domains/traces/components/span-data-panel-view.cjs.js +7 -7
  500. package/dist/domains/traces/components/span-data-panel-view.es.js +7 -7
  501. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  502. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  503. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +3 -3
  504. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +3 -3
  505. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +3 -3
  506. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +3 -3
  507. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +4 -4
  508. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +4 -4
  509. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  510. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  511. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +3 -3
  512. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +3 -3
  513. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +4 -6
  514. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -1
  515. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +4 -6
  516. package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -1
  517. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  518. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  519. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  520. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  521. package/dist/domains/traces/components/span-timeline-row.cjs.js +4 -4
  522. package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
  523. package/dist/domains/traces/components/span-timeline-row.es.js +4 -4
  524. package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
  525. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +2 -2
  526. package/dist/domains/traces/components/span-timing-hover-card.es.js +2 -2
  527. package/dist/domains/traces/components/span-token-usage.cjs.js +5 -5
  528. package/dist/domains/traces/components/span-token-usage.cjs.js.map +1 -1
  529. package/dist/domains/traces/components/span-token-usage.es.js +5 -5
  530. package/dist/domains/traces/components/span-token-usage.es.js.map +1 -1
  531. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +2 -2
  532. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js.map +1 -1
  533. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +2 -2
  534. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js.map +1 -1
  535. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +4 -4
  536. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +4 -4
  537. package/dist/domains/traces/components/thread-trace/thread-trace-rail.cjs.js +1 -1
  538. package/dist/domains/traces/components/thread-trace/thread-trace-rail.es.js +1 -1
  539. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +2 -2
  540. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js.map +1 -1
  541. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +2 -2
  542. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js.map +1 -1
  543. package/dist/domains/traces/components/timeline-name-col.cjs.js +2 -2
  544. package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
  545. package/dist/domains/traces/components/timeline-name-col.es.js +2 -2
  546. package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
  547. package/dist/domains/traces/components/timeline-structure-sign.cjs.js +1 -1
  548. package/dist/domains/traces/components/timeline-structure-sign.cjs.js.map +1 -1
  549. package/dist/domains/traces/components/timeline-structure-sign.es.js +1 -1
  550. package/dist/domains/traces/components/timeline-structure-sign.es.js.map +1 -1
  551. package/dist/domains/traces/components/timeline-timing-col.cjs.js +2 -2
  552. package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
  553. package/dist/domains/traces/components/timeline-timing-col.es.js +2 -2
  554. package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
  555. package/dist/domains/traces/components/trace-columns-menu.cjs.js +8 -8
  556. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  557. package/dist/domains/traces/components/trace-columns-menu.es.js +6 -6
  558. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  559. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +11 -13
  560. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  561. package/dist/domains/traces/components/trace-data-panel-view.es.js +11 -13
  562. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  563. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  564. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  565. package/dist/domains/traces/components/trace-keys-and-values.cjs.js +1 -1
  566. package/dist/domains/traces/components/trace-keys-and-values.es.js +1 -1
  567. package/dist/domains/traces/components/trace-span-timeline.cjs.js +1 -1
  568. package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
  569. package/dist/domains/traces/components/trace-span-timeline.es.js +1 -1
  570. package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
  571. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  572. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  573. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  574. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  575. package/dist/domains/traces/components/traces-error-content.cjs.js +3 -3
  576. package/dist/domains/traces/components/traces-error-content.cjs.js.map +1 -1
  577. package/dist/domains/traces/components/traces-error-content.es.js +3 -3
  578. package/dist/domains/traces/components/traces-error-content.es.js.map +1 -1
  579. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
  580. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
  581. package/dist/domains/traces/components/traces-list-view.cjs.js +5 -5
  582. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  583. package/dist/domains/traces/components/traces-list-view.es.js +5 -5
  584. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  585. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +3 -1
  586. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  587. package/dist/domains/traces/components/traces-page-skeleton.es.js +3 -1
  588. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  589. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +4 -2
  590. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js.map +1 -1
  591. package/dist/domains/traces/hooks/use-trace-url-state.es.js +5 -3
  592. package/dist/domains/traces/hooks/use-trace-url-state.es.js.map +1 -1
  593. package/dist/domains/traces/trace-filters.cjs.js +92 -11
  594. package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
  595. package/dist/domains/traces/trace-filters.es.js +87 -13
  596. package/dist/domains/traces/trace-filters.es.js.map +1 -1
  597. package/dist/domains/traces/trace-query-filters.cjs.js +76 -45
  598. package/dist/domains/traces/trace-query-filters.cjs.js.map +1 -1
  599. package/dist/domains/traces/trace-query-filters.es.js +76 -46
  600. package/dist/domains/traces/trace-query-filters.es.js.map +1 -1
  601. package/dist/domains/traces.cjs.js +7 -0
  602. package/dist/domains/traces.cjs.js.map +1 -1
  603. package/dist/domains/traces.es.js +2 -2
  604. package/dist/{drawer-BL5shtHH.cjs → drawer-9eoZbmRK.cjs} +5 -5
  605. package/dist/{drawer-BL5shtHH.cjs.map → drawer-9eoZbmRK.cjs.map} +1 -1
  606. package/dist/{drawer-Bv2DRY8E.js → drawer-DnfOugYZ.js} +5 -5
  607. package/dist/{drawer-Bv2DRY8E.js.map → drawer-DnfOugYZ.js.map} +1 -1
  608. package/dist/{dropdown-menu-DL0MzjEb.js → dropdown-menu-DpEn6HwK.js} +2 -7
  609. package/dist/dropdown-menu-DpEn6HwK.js.map +1 -0
  610. package/dist/{dropdown-menu-DNRCA4Gj.cjs → dropdown-menu-j2y37TL5.cjs} +2 -7
  611. package/dist/dropdown-menu-j2y37TL5.cjs.map +1 -0
  612. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +4 -4
  613. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js.map +1 -1
  614. package/dist/ee/signals/components/entity-index-compact-grid.es.js +4 -4
  615. package/dist/ee/signals/components/entity-index-compact-grid.es.js.map +1 -1
  616. package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
  617. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  618. package/dist/ee/signals/components/entity-index-list.es.js +3 -1
  619. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  620. package/dist/ee/signals/components/signals-empty-state.cjs.js +34 -34
  621. package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
  622. package/dist/ee/signals/components/signals-empty-state.es.js +34 -34
  623. package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
  624. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +5 -7
  625. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js.map +1 -1
  626. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +5 -7
  627. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js.map +1 -1
  628. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +15 -17
  629. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  630. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +16 -18
  631. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  632. package/dist/ee/signals/examples-pager.cjs.js +2 -2
  633. package/dist/ee/signals/examples-pager.cjs.js.map +1 -1
  634. package/dist/ee/signals/examples-pager.es.js +2 -2
  635. package/dist/ee/signals/examples-pager.es.js.map +1 -1
  636. package/dist/ee/signals/flow-card.cjs.js +6 -6
  637. package/dist/ee/signals/flow-card.cjs.js.map +1 -1
  638. package/dist/ee/signals/flow-card.es.js +6 -6
  639. package/dist/ee/signals/flow-card.es.js.map +1 -1
  640. package/dist/ee/signals/lifeline-row.cjs.js +4 -4
  641. package/dist/ee/signals/lifeline-row.cjs.js.map +1 -1
  642. package/dist/ee/signals/lifeline-row.es.js +4 -4
  643. package/dist/ee/signals/lifeline-row.es.js.map +1 -1
  644. package/dist/ee/signals/noise-detail-panel.cjs.js +12 -12
  645. package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -1
  646. package/dist/ee/signals/noise-detail-panel.es.js +12 -12
  647. package/dist/ee/signals/noise-detail-panel.es.js.map +1 -1
  648. package/dist/ee/signals/sankey-signals.cjs.js +6 -6
  649. package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
  650. package/dist/ee/signals/sankey-signals.es.js +6 -6
  651. package/dist/ee/signals/sankey-signals.es.js.map +1 -1
  652. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +13 -14
  653. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js.map +1 -1
  654. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +6 -7
  655. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js.map +1 -1
  656. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +9 -9
  657. package/dist/ee/signals/settings/trace-signal-settings.cjs.js.map +1 -1
  658. package/dist/ee/signals/settings/trace-signal-settings.es.js +9 -9
  659. package/dist/ee/signals/settings/trace-signal-settings.es.js.map +1 -1
  660. package/dist/ee/signals/signal-delta-column.cjs.js +7 -7
  661. package/dist/ee/signals/signal-delta-column.cjs.js.map +1 -1
  662. package/dist/ee/signals/signal-delta-column.es.js +7 -7
  663. package/dist/ee/signals/signal-delta-column.es.js.map +1 -1
  664. package/dist/ee/signals/signal-lifelines.cjs.js +2 -2
  665. package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -1
  666. package/dist/ee/signals/signal-lifelines.es.js +2 -2
  667. package/dist/ee/signals/signal-lifelines.es.js.map +1 -1
  668. package/dist/ee/signals/signals-error-state.cjs.js +3 -3
  669. package/dist/ee/signals/signals-error-state.cjs.js.map +1 -1
  670. package/dist/ee/signals/signals-error-state.es.js +3 -3
  671. package/dist/ee/signals/signals-error-state.es.js.map +1 -1
  672. package/dist/ee/signals/signals-loading-skeleton.cjs.js +1 -1
  673. package/dist/ee/signals/signals-loading-skeleton.cjs.js.map +1 -1
  674. package/dist/ee/signals/signals-loading-skeleton.es.js +1 -1
  675. package/dist/ee/signals/signals-loading-skeleton.es.js.map +1 -1
  676. package/dist/ee/signals/snapshot-timeline.cjs.js +5 -5
  677. package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -1
  678. package/dist/ee/signals/snapshot-timeline.es.js +5 -5
  679. package/dist/ee/signals/snapshot-timeline.es.js.map +1 -1
  680. package/dist/ee/signals/sortable-signal-headers.cjs.js +1 -1
  681. package/dist/ee/signals/sortable-signal-headers.cjs.js.map +1 -1
  682. package/dist/ee/signals/sortable-signal-headers.es.js +1 -1
  683. package/dist/ee/signals/sortable-signal-headers.es.js.map +1 -1
  684. package/dist/ee/signals/theme-compare-sparkline.cjs.js +1 -1
  685. package/dist/ee/signals/theme-compare-sparkline.cjs.js.map +1 -1
  686. package/dist/ee/signals/theme-compare-sparkline.es.js +1 -1
  687. package/dist/ee/signals/theme-compare-sparkline.es.js.map +1 -1
  688. package/dist/ee/signals/theme-compare.cjs.js +5 -5
  689. package/dist/ee/signals/theme-compare.cjs.js.map +1 -1
  690. package/dist/ee/signals/theme-compare.es.js +5 -5
  691. package/dist/ee/signals/theme-compare.es.js.map +1 -1
  692. package/dist/ee/signals/theme-detail-panel.cjs.js +18 -18
  693. package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -1
  694. package/dist/ee/signals/theme-detail-panel.es.js +18 -18
  695. package/dist/ee/signals/theme-detail-panel.es.js.map +1 -1
  696. package/dist/ee/signals/theme-filter-banner.cjs.js +2 -2
  697. package/dist/ee/signals/theme-filter-banner.cjs.js.map +1 -1
  698. package/dist/ee/signals/theme-filter-banner.es.js +2 -2
  699. package/dist/ee/signals/theme-filter-banner.es.js.map +1 -1
  700. package/dist/ee/signals/theme-lifelines.cjs.js +1 -1
  701. package/dist/ee/signals/theme-lifelines.cjs.js.map +1 -1
  702. package/dist/ee/signals/theme-lifelines.es.js +1 -1
  703. package/dist/ee/signals/theme-lifelines.es.js.map +1 -1
  704. package/dist/ee/signals/theme-trend-chart.cjs.js +1 -1
  705. package/dist/ee/signals/theme-trend-chart.cjs.js.map +1 -1
  706. package/dist/ee/signals/theme-trend-chart.es.js +1 -1
  707. package/dist/ee/signals/theme-trend-chart.es.js.map +1 -1
  708. package/dist/ee/signals/trace-insight-view.cjs.js +12 -12
  709. package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -1
  710. package/dist/ee/signals/trace-insight-view.es.js +12 -12
  711. package/dist/ee/signals/trace-insight-view.es.js.map +1 -1
  712. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +2 -2
  713. package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -1
  714. package/dist/ee/signals/trace-intelligence-explainer.es.js +2 -2
  715. package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -1
  716. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  717. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  718. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  719. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  720. package/dist/ee/topics/components/topics-layout.cjs.js +3 -3
  721. package/dist/ee/topics/components/topics-layout.cjs.js.map +1 -1
  722. package/dist/ee/topics/components/topics-layout.es.js +3 -3
  723. package/dist/ee/topics/components/topics-layout.es.js.map +1 -1
  724. package/dist/{field-block-Dy1IaWbv.cjs → field-error-id-6EfqmQ4C.cjs} +5 -2
  725. package/dist/field-error-id-6EfqmQ4C.cjs.map +1 -0
  726. package/dist/{field-block-DWkbNcsV.js → field-error-id-DyWx33Fu.js} +5 -3
  727. package/dist/field-error-id-DyWx33Fu.js.map +1 -0
  728. package/dist/{filter-bar-chip-BxI0NgEz.cjs → filter-bar-chip-D8O9jpCW.cjs} +300 -69
  729. package/dist/filter-bar-chip-D8O9jpCW.cjs.map +1 -0
  730. package/dist/{filter-bar-chip-C-JxWUU8.js → filter-bar-chip-DMhUPTt8.js} +297 -71
  731. package/dist/filter-bar-chip-DMhUPTt8.js.map +1 -0
  732. package/dist/filter-bar-chip.css +33 -1
  733. package/dist/hooks/use-fluid-hover.cjs.js +15 -9
  734. package/dist/hooks/use-fluid-hover.cjs.js.map +1 -1
  735. package/dist/hooks/use-fluid-hover.es.js +15 -9
  736. package/dist/hooks/use-fluid-hover.es.js.map +1 -1
  737. package/dist/{horizontal-bars-nyWGmQ7g.cjs → horizontal-bars-BkVi2dEb.cjs} +7 -7
  738. package/dist/{horizontal-bars-nyWGmQ7g.cjs.map → horizontal-bars-BkVi2dEb.cjs.map} +1 -1
  739. package/dist/{horizontal-bars-CksEKcCE.js → horizontal-bars-nTOFylzc.js} +7 -7
  740. package/dist/{horizontal-bars-CksEKcCE.js.map → horizontal-bars-nTOFylzc.js.map} +1 -1
  741. package/dist/{hover-card-Ch5smNcf.js → hover-card-B1-n3amu.js} +3 -3
  742. package/dist/{hover-card-Ch5smNcf.js.map → hover-card-B1-n3amu.js.map} +1 -1
  743. package/dist/{hover-card-DdHnkGcs.cjs → hover-card-DVfZ2INZ.cjs} +3 -3
  744. package/dist/{hover-card-DdHnkGcs.cjs.map → hover-card-DVfZ2INZ.cjs.map} +1 -1
  745. package/dist/icons/Icon.cjs.js +1 -1
  746. package/dist/icons/Icon.cjs.js.map +1 -1
  747. package/dist/icons/Icon.es.js +1 -1
  748. package/dist/icons/Icon.es.js.map +1 -1
  749. package/dist/{input-group-CvWwK1Vz.cjs → input-group-2yWKRuq9.cjs} +7 -5
  750. package/dist/input-group-2yWKRuq9.cjs.map +1 -0
  751. package/dist/{input-group-BEdHivvy.js → input-group-Czviwtvr.js} +8 -6
  752. package/dist/input-group-Czviwtvr.js.map +1 -0
  753. package/dist/{kbd-CINtikLh.js → kbd-BDVTQHD_.js} +2 -2
  754. package/dist/{kbd-CINtikLh.js.map → kbd-BDVTQHD_.js.map} +1 -1
  755. package/dist/{kbd-B-Z2sNvK.cjs → kbd-BptPsKP6.cjs} +2 -2
  756. package/dist/{kbd-B-Z2sNvK.cjs.map → kbd-BptPsKP6.cjs.map} +1 -1
  757. package/dist/layout/tabbed-container.cjs.js +6 -6
  758. package/dist/layout/tabbed-container.es.js +6 -6
  759. package/dist/{list-search-BTW0Neuc.js → list-search-Jm6SLN0g.js} +2 -2
  760. package/dist/{list-search-BTW0Neuc.js.map → list-search-Jm6SLN0g.js.map} +1 -1
  761. package/dist/{list-search-vyxsZMAK.cjs → list-search-s3DRIfz6.cjs} +2 -2
  762. package/dist/{list-search-vyxsZMAK.cjs.map → list-search-s3DRIfz6.cjs.map} +1 -1
  763. package/dist/{logs-data-list-BSHJPGi6.cjs → logs-data-list-C5tjRtkQ.cjs} +5 -5
  764. package/dist/{logs-data-list-BSHJPGi6.cjs.map → logs-data-list-C5tjRtkQ.cjs.map} +1 -1
  765. package/dist/{logs-data-list-CG-UgC_x.js → logs-data-list-Cl3abARp.js} +5 -5
  766. package/dist/{logs-data-list-CG-UgC_x.js.map → logs-data-list-Cl3abARp.js.map} +1 -1
  767. package/dist/{main-sidebar-link-active-DbCvKZy2.cjs → main-sidebar-BsEmFpKN.cjs} +122 -9
  768. package/dist/main-sidebar-BsEmFpKN.cjs.map +1 -0
  769. package/dist/{main-sidebar-link-active-CmDoiX6g.js → main-sidebar-C5PU7zgc.js} +123 -11
  770. package/dist/main-sidebar-C5PU7zgc.js.map +1 -0
  771. package/dist/{markdown-renderer-D8qYAU7K.cjs → markdown-renderer-C74wABzc.cjs} +6 -7
  772. package/dist/markdown-renderer-C74wABzc.cjs.map +1 -0
  773. package/dist/{markdown-renderer-B0gTm_Ea.js → markdown-renderer-DZAcPOxC.js} +6 -7
  774. package/dist/markdown-renderer-DZAcPOxC.js.map +1 -0
  775. package/dist/{message-BrwbcLPi.js → message-Cs8NW-MR.js} +2 -2
  776. package/dist/{message-BrwbcLPi.js.map → message-Cs8NW-MR.js.map} +1 -1
  777. package/dist/{message-CszposMZ.cjs → message-D9b33Pf_.cjs} +2 -2
  778. package/dist/{message-CszposMZ.cjs.map → message-D9b33Pf_.cjs.map} +1 -1
  779. package/dist/{metrics-card-BUJxiwec.cjs → metrics-card-BdWGPlnt.cjs} +8 -8
  780. package/dist/metrics-card-BdWGPlnt.cjs.map +1 -0
  781. package/dist/{metrics-card-BlBt1WHw.js → metrics-card-C5znWn69.js} +8 -8
  782. package/dist/metrics-card-C5znWn69.js.map +1 -0
  783. package/dist/{metrics-kpi-card-CBSNmtc5.js → metrics-kpi-card-CinKYTBn.js} +4 -4
  784. package/dist/{metrics-kpi-card-CBSNmtc5.js.map → metrics-kpi-card-CinKYTBn.js.map} +1 -1
  785. package/dist/{metrics-kpi-card-CgqmNcEC.cjs → metrics-kpi-card-HU17WRTT.cjs} +4 -4
  786. package/dist/{metrics-kpi-card-CgqmNcEC.cjs.map → metrics-kpi-card-HU17WRTT.cjs.map} +1 -1
  787. package/dist/{metrics-line-chart-B_sP3eiL.cjs → metrics-line-chart-0FR3SYSt.cjs} +3 -3
  788. package/dist/{metrics-line-chart-B_sP3eiL.cjs.map → metrics-line-chart-0FR3SYSt.cjs.map} +1 -1
  789. package/dist/{metrics-line-chart-DHyrDPkJ.js → metrics-line-chart-knlgw8bV.js} +3 -3
  790. package/dist/{metrics-line-chart-DHyrDPkJ.js.map → metrics-line-chart-knlgw8bV.js.map} +1 -1
  791. package/dist/new/layout/app-shell.cjs.js +23 -28
  792. package/dist/new/layout/app-shell.cjs.js.map +1 -1
  793. package/dist/new/layout/app-shell.es.js +23 -28
  794. package/dist/new/layout/app-shell.es.js.map +1 -1
  795. package/dist/new/layout/page-header.cjs.js +1 -1
  796. package/dist/new/layout/page-header.es.js +1 -1
  797. package/dist/new/settings.cjs.js +1 -1
  798. package/dist/new/settings.es.js +1 -1
  799. package/dist/new/sidebar.cjs.js +40 -40
  800. package/dist/new/sidebar.cjs.js.map +1 -1
  801. package/dist/new/sidebar.es.js +10 -10
  802. package/dist/new/sidebar.es.js.map +1 -1
  803. package/dist/{page-header-BIoUf7MA.js → page-header-CSigVThQ.js} +2 -2
  804. package/dist/{page-header-BIoUf7MA.js.map → page-header-CSigVThQ.js.map} +1 -1
  805. package/dist/{page-header-BBlPmW-T.cjs → page-header-DzEEkOca.cjs} +2 -2
  806. package/dist/{page-header-BBlPmW-T.cjs.map → page-header-DzEEkOca.cjs.map} +1 -1
  807. package/dist/primitives/control-size.cjs.js +24 -2
  808. package/dist/primitives/control-size.cjs.js.map +1 -1
  809. package/dist/primitives/control-size.es.js +5 -3
  810. package/dist/primitives/control-size.es.js.map +1 -1
  811. package/dist/primitives/fluid-menu.cjs.js +30 -18
  812. package/dist/primitives/fluid-menu.cjs.js.map +1 -1
  813. package/dist/primitives/fluid-menu.es.js +30 -18
  814. package/dist/primitives/fluid-menu.es.js.map +1 -1
  815. package/dist/primitives/form-element.cjs.js +4 -4
  816. package/dist/primitives/form-element.cjs.js.map +1 -1
  817. package/dist/primitives/form-element.es.js +4 -3
  818. package/dist/primitives/form-element.es.js.map +1 -1
  819. package/dist/primitives/menu-item.cjs.js +7 -4
  820. package/dist/primitives/menu-item.cjs.js.map +1 -1
  821. package/dist/primitives/menu-item.es.js +7 -4
  822. package/dist/primitives/menu-item.es.js.map +1 -1
  823. package/dist/primitives/trigger-button.cjs.js +1 -1
  824. package/dist/primitives/trigger-button.es.js +1 -1
  825. package/dist/{property-filter-applied-BBiUbtr0.js → property-filter-applied-C15IJHLs.js} +30 -36
  826. package/dist/property-filter-applied-C15IJHLs.js.map +1 -0
  827. package/dist/{property-filter-applied-BmxCPe2d.cjs → property-filter-applied-DtSjGypB.cjs} +30 -36
  828. package/dist/property-filter-applied-DtSjGypB.cjs.map +1 -0
  829. package/dist/radio-group-BdEPWGzi.cjs +62 -0
  830. package/dist/radio-group-BdEPWGzi.cjs.map +1 -0
  831. package/dist/radio-group-CFZXUXZ5.js +40 -0
  832. package/dist/radio-group-CFZXUXZ5.js.map +1 -0
  833. package/dist/resize/collapsible-panel.cjs.js +1 -1
  834. package/dist/resize/collapsible-panel.es.js +1 -1
  835. package/dist/resize/panel-drawer.cjs.js +1 -1
  836. package/dist/resize/panel-drawer.es.js +1 -1
  837. package/dist/{sankey-chart-Bcm9jMhe.cjs → sankey-chart-C1e0nRc3.cjs} +4 -4
  838. package/dist/{sankey-chart-Bcm9jMhe.cjs.map → sankey-chart-C1e0nRc3.cjs.map} +1 -1
  839. package/dist/{sankey-chart-CqngN2lw.js → sankey-chart-jvMXKzud.js} +4 -4
  840. package/dist/{sankey-chart-CqngN2lw.js.map → sankey-chart-jvMXKzud.js.map} +1 -1
  841. package/dist/{scroll-area-Qjf7e0Ik.cjs → scroll-area-BzOyuS8Y.cjs} +2 -2
  842. package/dist/{scroll-area-Qjf7e0Ik.cjs.map → scroll-area-BzOyuS8Y.cjs.map} +1 -1
  843. package/dist/{scroll-area-CdQ_5bLm.js → scroll-area-DyTZoISq.js} +2 -2
  844. package/dist/{scroll-area-CdQ_5bLm.js.map → scroll-area-DyTZoISq.js.map} +1 -1
  845. package/dist/{search-field-block-D0PUUCAE.cjs → search-field-block-ChXCuPrB.cjs} +9 -10
  846. package/dist/{search-field-block-D0PUUCAE.cjs.map → search-field-block-ChXCuPrB.cjs.map} +1 -1
  847. package/dist/{search-field-block-B5vUVTpl.js → search-field-block-nVeIkFXN.js} +3 -4
  848. package/dist/{search-field-block-B5vUVTpl.js.map → search-field-block-nVeIkFXN.js.map} +1 -1
  849. package/dist/{select--DXpTg0O.js → select-CDIt5aab.js} +3 -6
  850. package/dist/select-CDIt5aab.js.map +1 -0
  851. package/dist/{select-7ACAVdGX.cjs → select-CH5XO18L.cjs} +3 -6
  852. package/dist/select-CH5XO18L.cjs.map +1 -0
  853. package/dist/{select-field-block-Bu7UXI2H.js → select-field-block-BtjE0P5d.js} +3 -4
  854. package/dist/{select-field-block-Bu7UXI2H.js.map → select-field-block-BtjE0P5d.js.map} +1 -1
  855. package/dist/{select-field-block-W2u2WmN3.cjs → select-field-block-CpzMTsP6.cjs} +9 -10
  856. package/dist/{select-field-block-W2u2WmN3.cjs.map → select-field-block-CpzMTsP6.cjs.map} +1 -1
  857. package/dist/{settings-layout-NP_1dC-e.cjs → settings-layout-BGvMSClL.cjs} +2 -2
  858. package/dist/{settings-layout-NP_1dC-e.cjs.map → settings-layout-BGvMSClL.cjs.map} +1 -1
  859. package/dist/{settings-layout-C80s-D31.js → settings-layout-DA-JWqW3.js} +2 -2
  860. package/dist/{settings-layout-C80s-D31.js.map → settings-layout-DA-JWqW3.js.map} +1 -1
  861. package/dist/{span-payload-primitives-DnRsP93D.cjs → span-payload-primitives-70wznWZl.cjs} +6 -6
  862. package/dist/{span-payload-primitives-DnRsP93D.cjs.map → span-payload-primitives-70wznWZl.cjs.map} +1 -1
  863. package/dist/{span-payload-primitives-sbxk4CHC.js → span-payload-primitives-BvoMauDb.js} +6 -6
  864. package/dist/{span-payload-primitives-sbxk4CHC.js.map → span-payload-primitives-BvoMauDb.js.map} +1 -1
  865. package/dist/{spinner-CqP-NaB2.cjs → spinner-BCpN7LL9.cjs} +9 -3
  866. package/dist/spinner-BCpN7LL9.cjs.map +1 -0
  867. package/dist/{spinner-D2C2DYw8.js → spinner-ylbE0TJA.js} +9 -3
  868. package/dist/spinner-ylbE0TJA.js.map +1 -0
  869. package/dist/src/components/fluid-hover-highlight.d.ts +4 -58
  870. package/dist/src/domains/traces/components/traces-error-content.d.ts +2 -2
  871. package/dist/src/domains/traces/hooks/use-trace-url-state.d.ts +5 -3
  872. package/dist/src/domains/traces/trace-filters.d.ts +19 -4
  873. package/dist/src/domains/traces/trace-query-filters.d.ts +13 -1
  874. package/dist/src/ds/components/ActionRow/action-row.d.ts +9 -0
  875. package/dist/src/ds/components/ActionRow/action-row.stories.d.ts +8 -0
  876. package/dist/src/ds/components/ActionRow/index.d.ts +5 -0
  877. package/dist/src/ds/components/Badge/badge.stories.d.ts +0 -1
  878. package/dist/src/ds/components/ButtonsGroup/buttons-group.d.ts +11 -11
  879. package/dist/src/ds/components/ButtonsGroup/buttons-group.stories.d.ts +17 -7
  880. package/dist/src/ds/components/EmptyState/EmptyState.d.ts +8 -2
  881. package/dist/src/ds/components/EmptyState/empty-state.stories.d.ts +1 -0
  882. package/dist/src/ds/components/ErrorState/ErrorState.d.ts +3 -1
  883. package/dist/src/ds/components/ErrorState/error-state.stories.d.ts +1 -0
  884. package/dist/src/ds/components/FilterBar/filter-bar-advanced-chip.d.ts +10 -0
  885. package/dist/src/ds/components/FilterBar/filter-bar-context.d.ts +46 -9
  886. package/dist/src/ds/components/FilterBar/filter-bar-group-editor.d.ts +25 -0
  887. package/dist/src/ds/components/FilterBar/filter-bar-input.d.ts +8 -1
  888. package/dist/src/ds/components/FilterBar/filter-bar-option-list.d.ts +5 -0
  889. package/dist/src/ds/components/FilterBar/filter-bar-tree.d.ts +36 -0
  890. package/dist/src/ds/components/FilterBar/filter-bar.d.ts +28 -7
  891. package/dist/src/ds/components/FilterBar/filter-bar.stories.d.ts +3 -0
  892. package/dist/src/ds/components/FilterBar/index.d.ts +6 -1
  893. package/dist/src/ds/components/FilterBar/types.d.ts +36 -0
  894. package/dist/src/ds/components/FilterBar/use-settle-on-leave.d.ts +2 -0
  895. package/dist/src/ds/components/PageLayout/index.d.ts +1 -2
  896. package/dist/src/ds/components/PageLayout/page-layout.d.ts +13 -11
  897. package/dist/src/ds/components/PageLayout/page-layout.stories.d.ts +1 -2
  898. package/dist/src/ds/components/PermissionDenied/PermissionDenied.d.ts +3 -1
  899. package/dist/src/ds/components/PermissionDenied/permission-denied.stories.d.ts +1 -0
  900. package/dist/src/ds/components/SessionExpired/SessionExpired.d.ts +3 -1
  901. package/dist/src/ds/components/SessionExpired/session-expired.stories.d.ts +1 -0
  902. package/dist/src/ds/components/Spinner/spinner.d.ts +6 -3
  903. package/dist/src/ds/components/Spinner/spinner.stories.d.ts +1 -0
  904. package/dist/src/ds/components/ai/ask-user/ask-user.d.ts +13 -8
  905. package/dist/src/ds/new/layout/app-shell/app-shell.d.ts +2 -8
  906. package/dist/src/ds/new/layout/app-shell/app-shell.stories.d.ts +0 -1
  907. package/dist/src/ds/primitives/control-size.d.ts +3 -1
  908. package/dist/src/ds/primitives/fluid-menu.d.ts +8 -3
  909. package/dist/src/ds/primitives/form-element.d.ts +1 -2
  910. package/dist/src/hooks/use-fluid-hover.d.ts +7 -2
  911. package/dist/style.css +83 -120
  912. package/dist/{tabs-content-CKC4kIpH.js → tabs-content-BeFlc4E_.js} +2 -2
  913. package/dist/{tabs-content-CKC4kIpH.js.map → tabs-content-BeFlc4E_.js.map} +1 -1
  914. package/dist/{tabs-content-Bz6CZuv9.cjs → tabs-content-Cdu6HP8U.cjs} +2 -2
  915. package/dist/{tabs-content-Bz6CZuv9.cjs.map → tabs-content-Cdu6HP8U.cjs.map} +1 -1
  916. package/dist/{tabs-root-C5ABfm1F.cjs → tabs-root-BiV8irc3.cjs} +4 -4
  917. package/dist/{tabs-root-C5ABfm1F.cjs.map → tabs-root-BiV8irc3.cjs.map} +1 -1
  918. package/dist/{tabs-root-CcEQrwTM.js → tabs-root-CJ3GkDzi.js} +4 -4
  919. package/dist/{tabs-root-CcEQrwTM.js.map → tabs-root-CJ3GkDzi.js.map} +1 -1
  920. package/dist/{tabs-tab-BycF4dvx.js → tabs-tab-CoSCf5Ku.js} +2 -2
  921. package/dist/{tabs-tab-BycF4dvx.js.map → tabs-tab-CoSCf5Ku.js.map} +1 -1
  922. package/dist/{tabs-tab-DA466DbX.cjs → tabs-tab-J91Szy3Q.cjs} +2 -2
  923. package/dist/{tabs-tab-DA466DbX.cjs.map → tabs-tab-J91Szy3Q.cjs.map} +1 -1
  924. package/dist/{text-field-block-BLpLWmu8.cjs → text-field-block-BmWGMw3a.cjs} +8 -9
  925. package/dist/{text-field-block-BLpLWmu8.cjs.map → text-field-block-BmWGMw3a.cjs.map} +1 -1
  926. package/dist/{text-field-block--EUJKlY_.js → text-field-block-Cihf0IRw.js} +2 -3
  927. package/dist/{text-field-block--EUJKlY_.js.map → text-field-block-Cihf0IRw.js.map} +1 -1
  928. package/dist/{thread-rail-b-8RHNX_.cjs → thread-rail-BVpfkSyT.cjs} +6 -6
  929. package/dist/{thread-rail-b-8RHNX_.cjs.map → thread-rail-BVpfkSyT.cjs.map} +1 -1
  930. package/dist/{thread-rail-vsR5C0j4.js → thread-rail-DV89nFnn.js} +6 -6
  931. package/dist/{thread-rail-vsR5C0j4.js.map → thread-rail-DV89nFnn.js.map} +1 -1
  932. package/dist/{time-picker-Dlm-C-n4.cjs → time-picker-DXuXFGa-.cjs} +2 -2
  933. package/dist/{time-picker-Dlm-C-n4.cjs.map → time-picker-DXuXFGa-.cjs.map} +1 -1
  934. package/dist/{time-picker-DVt1ZUsS.js → time-picker-vFozGRyK.js} +2 -2
  935. package/dist/{time-picker-DVt1ZUsS.js.map → time-picker-vFozGRyK.js.map} +1 -1
  936. package/dist/{tool-approval-DB82iiRa.js → tool-approval-C11ECt4s.js} +5 -5
  937. package/dist/{tool-approval-DB82iiRa.js.map → tool-approval-C11ECt4s.js.map} +1 -1
  938. package/dist/{tool-approval-Dys524ty.cjs → tool-approval-DODxfqk7.cjs} +5 -5
  939. package/dist/{tool-approval-Dys524ty.cjs.map → tool-approval-DODxfqk7.cjs.map} +1 -1
  940. package/dist/{tool-call-K147tCug.js → tool-call-BjAGFbH-.js} +5 -5
  941. package/dist/{tool-call-K147tCug.js.map → tool-call-BjAGFbH-.js.map} +1 -1
  942. package/dist/{tool-call-CMRvRE-v.cjs → tool-call-CNBGnCmO.cjs} +5 -5
  943. package/dist/{tool-call-CMRvRE-v.cjs.map → tool-call-CNBGnCmO.cjs.map} +1 -1
  944. package/dist/{traces-data-list-CDNE9P8W.js → traces-data-list-BhKK8-wa.js} +7 -7
  945. package/dist/{traces-data-list-CDNE9P8W.js.map → traces-data-list-BhKK8-wa.js.map} +1 -1
  946. package/dist/{traces-data-list-B3q_cy6c.cjs → traces-data-list-D58cw23x.cjs} +7 -7
  947. package/dist/{traces-data-list-B3q_cy6c.cjs.map → traces-data-list-D58cw23x.cjs.map} +1 -1
  948. package/dist/types-CIPrYAzY.js +9 -0
  949. package/dist/types-CIPrYAzY.js.map +1 -0
  950. package/dist/types-Ns4ZNp-g.cjs +12 -0
  951. package/dist/types-Ns4ZNp-g.cjs.map +1 -0
  952. package/package.json +6 -7
  953. package/theme/surfaces.css +2 -2
  954. package/dist/Button-CVewl8nT.cjs.map +0 -1
  955. package/dist/Button-cWcBEd-G.js.map +0 -1
  956. package/dist/EmptyState-CdRjFB06.cjs.map +0 -1
  957. package/dist/EmptyState-UWXhBp5U.js.map +0 -1
  958. package/dist/ErrorState-B3uTRAEd.cjs +0 -16
  959. package/dist/ErrorState-B3uTRAEd.cjs.map +0 -1
  960. package/dist/ErrorState-DqRx8Dw_.js +0 -14
  961. package/dist/ErrorState-DqRx8Dw_.js.map +0 -1
  962. package/dist/PermissionDenied-B6TSGolC.js.map +0 -1
  963. package/dist/PermissionDenied-Dz5qXpQj.cjs.map +0 -1
  964. package/dist/SessionExpired-Bq5LcsDu.js.map +0 -1
  965. package/dist/SessionExpired-CF0BGNo_.cjs.map +0 -1
  966. package/dist/ask-user-CS2e6Re4.cjs +0 -147
  967. package/dist/ask-user-CS2e6Re4.cjs.map +0 -1
  968. package/dist/ask-user-gS3Y1bCc.js +0 -138
  969. package/dist/ask-user-gS3Y1bCc.js.map +0 -1
  970. package/dist/buttons-group-BiLEV_Ak.cjs +0 -101
  971. package/dist/buttons-group-BiLEV_Ak.cjs.map +0 -1
  972. package/dist/buttons-group-CaA7KAWf.js +0 -78
  973. package/dist/buttons-group-CaA7KAWf.js.map +0 -1
  974. package/dist/combobox-BWM3VH-n.cjs.map +0 -1
  975. package/dist/combobox-D7xJFZuO.js.map +0 -1
  976. package/dist/combobox-styles-CRebmeht.js.map +0 -1
  977. package/dist/combobox-styles-DYlNNjKC.cjs.map +0 -1
  978. package/dist/components/MainContent.cjs.js +0 -81
  979. package/dist/components/MainContent.cjs.js.map +0 -1
  980. package/dist/components/MainContent.d.ts +0 -2
  981. package/dist/components/MainContent.es.js +0 -75
  982. package/dist/components/MainContent.es.js.map +0 -1
  983. package/dist/data-code-section-DKz9Okaz.js.map +0 -1
  984. package/dist/data-code-section-qujvEc6j.cjs.map +0 -1
  985. package/dist/dropdown-menu-DL0MzjEb.js.map +0 -1
  986. package/dist/dropdown-menu-DNRCA4Gj.cjs.map +0 -1
  987. package/dist/field-block-DWkbNcsV.js.map +0 -1
  988. package/dist/field-block-Dy1IaWbv.cjs.map +0 -1
  989. package/dist/field-error-id-B3Z2Zu5y.cjs +0 -6
  990. package/dist/field-error-id-B3Z2Zu5y.cjs.map +0 -1
  991. package/dist/field-error-id-D3yg1nBh.js +0 -4
  992. package/dist/field-error-id-D3yg1nBh.js.map +0 -1
  993. package/dist/filter-bar-chip-BxI0NgEz.cjs.map +0 -1
  994. package/dist/filter-bar-chip-C-JxWUU8.js.map +0 -1
  995. package/dist/input-group-BEdHivvy.js.map +0 -1
  996. package/dist/input-group-CvWwK1Vz.cjs.map +0 -1
  997. package/dist/lib/springs.cjs.js +0 -32
  998. package/dist/lib/springs.cjs.js.map +0 -1
  999. package/dist/lib/springs.d.ts +0 -2
  1000. package/dist/lib/springs.es.js +0 -27
  1001. package/dist/lib/springs.es.js.map +0 -1
  1002. package/dist/main-sidebar-link-active-CmDoiX6g.js.map +0 -1
  1003. package/dist/main-sidebar-link-active-DbCvKZy2.cjs.map +0 -1
  1004. package/dist/markdown-renderer-B0gTm_Ea.js.map +0 -1
  1005. package/dist/markdown-renderer-D8qYAU7K.cjs.map +0 -1
  1006. package/dist/metrics-card-BUJxiwec.cjs.map +0 -1
  1007. package/dist/metrics-card-BlBt1WHw.js.map +0 -1
  1008. package/dist/new/layout/page-shell.cjs.js +0 -34
  1009. package/dist/new/layout/page-shell.cjs.js.map +0 -1
  1010. package/dist/new/layout/page-shell.d.ts +0 -2
  1011. package/dist/new/layout/page-shell.es.js +0 -30
  1012. package/dist/new/layout/page-shell.es.js.map +0 -1
  1013. package/dist/no-data-page-layout-DcVPjj-J.js +0 -9
  1014. package/dist/no-data-page-layout-DcVPjj-J.js.map +0 -1
  1015. package/dist/no-data-page-layout-Drzbg_w8.cjs +0 -11
  1016. package/dist/no-data-page-layout-Drzbg_w8.cjs.map +0 -1
  1017. package/dist/page-heading-context-D3yjYoJE.js +0 -9
  1018. package/dist/page-heading-context-D3yjYoJE.js.map +0 -1
  1019. package/dist/page-heading-context-Du-CpxAx.cjs +0 -12
  1020. package/dist/page-heading-context-Du-CpxAx.cjs.map +0 -1
  1021. package/dist/page-layout-C9ifD9Q8.cjs +0 -99
  1022. package/dist/page-layout-C9ifD9Q8.cjs.map +0 -1
  1023. package/dist/page-layout-xcM8IR-B.js +0 -97
  1024. package/dist/page-layout-xcM8IR-B.js.map +0 -1
  1025. package/dist/property-filter-applied-BBiUbtr0.js.map +0 -1
  1026. package/dist/property-filter-applied-BmxCPe2d.cjs.map +0 -1
  1027. package/dist/select--DXpTg0O.js.map +0 -1
  1028. package/dist/select-7ACAVdGX.cjs.map +0 -1
  1029. package/dist/spinner-CqP-NaB2.cjs.map +0 -1
  1030. package/dist/spinner-D2C2DYw8.js.map +0 -1
  1031. package/dist/src/ds/components/MainContent/index.d.ts +0 -1
  1032. package/dist/src/ds/components/MainContent/main-content.d.ts +0 -21
  1033. package/dist/src/ds/components/MainContent/main-content.stories.d.ts +0 -10
  1034. package/dist/src/ds/components/PageLayout/no-data-page-layout.d.ts +0 -6
  1035. package/dist/src/ds/components/PageLayout/page-heading-context.d.ts +0 -2
  1036. package/dist/src/ds/components/PageLayout/page-layout-column.d.ts +0 -5
  1037. package/dist/src/ds/components/PageLayout/page-layout-main-area.d.ts +0 -7
  1038. package/dist/src/ds/components/PageLayout/page-layout-root.d.ts +0 -7
  1039. package/dist/src/ds/components/PageLayout/page-layout-row.d.ts +0 -11
  1040. package/dist/src/ds/components/PageLayout/page-layout-top-area.d.ts +0 -5
  1041. package/dist/src/ds/new/layout/page-shell/index.d.ts +0 -1
  1042. package/dist/src/ds/new/layout/page-shell/page-shell.d.ts +0 -24
  1043. package/dist/src/ds/new/layout/page-shell/page-shell.stories.d.ts +0 -63
  1044. package/dist/src/lib/springs.d.ts +0 -31
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { ArrowLeftIcon } from 'lucide-react';
3
3
  import { useState, useMemo, useEffect } from 'react';
4
- import { B as Button } from '../../../Button-cWcBEd-G.js';
4
+ import { B as Button } from '../../../Button-C9cvaVFG.js';
5
5
  import { S as Skeleton } from '../../../skeleton-BsRAXyh5.js';
6
6
  import { T as Txt } from '../../../Txt-DTh3Pa_a.js';
7
7
  import { MemoryIcon } from '../../../icons/MemoryIcon.es.js';
@@ -50,9 +50,9 @@ function MemoryStudioPanel({
50
50
  const manualSelectionInRange = manualOMRecordId != null && visibleRecords.some((r) => r.id === manualOMRecordId) ? manualOMRecordId : null;
51
51
  const selectedOMRecordId = replayRecordId ?? manualSelectionInRange;
52
52
  return /* @__PURE__ */ jsxs("div", { className: "flex size-full flex-col overflow-hidden", children: [
53
- /* @__PURE__ */ jsxs("div", { className: "border-border flex shrink-0 items-center gap-2 border-b px-3 py-2.5", children: [
53
+ /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-3 py-2.5", children: [
54
54
  /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "icon-sm", tooltip: "Back to memory", onClick: () => onClose?.(), children: /* @__PURE__ */ jsx(ArrowLeftIcon, {}) }),
55
- /* @__PURE__ */ jsxs("span", { className: "text-foreground flex min-w-0 items-center gap-1.5", children: [
55
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1.5 text-foreground", children: [
56
56
  /* @__PURE__ */ jsx(MemoryIcon, { className: "size-4 shrink-0" }),
57
57
  /* @__PURE__ */ jsx(Txt, { as: "span", variant: "column", children: "Observational memory" })
58
58
  ] })
@@ -71,7 +71,7 @@ function MemoryStudioPanel({
71
71
  isLoading
72
72
  }
73
73
  ) }),
74
- /* @__PURE__ */ jsxs("div", { className: "border-border border-t", children: [
74
+ /* @__PURE__ */ jsxs("div", { className: "border-t border-border", children: [
75
75
  /* @__PURE__ */ jsx(
76
76
  ThreadContextProgress,
77
77
  {
@@ -1 +1 @@
1
- {"version":3,"file":"memory-studio-panel.es.js","sources":["../../../../src/domains/memory/components/memory-studio-panel.tsx"],"sourcesContent":["import { ArrowLeftIcon } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../../../ds/components/Button';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { Txt } from '../../../ds/components/Txt';\nimport { MemoryIcon } from '../../../ds/icons/MemoryIcon';\nimport { extractOmMarkers } from '../lib/extract-markers';\nimport { findRecordIdAtOrBefore, getObservationTimestampMs } from '../lib/replay-selection';\nimport { getLatestThreadContextWindowState } from '../lib/thread-context-window-state';\nimport { timestampsToTDomain } from '../lib/timeline';\nimport type { MemoryMessage, OMHistoryRecord } from '../types';\nimport { FlameGraph } from './flame-graph';\nimport type { ZoomRange } from './flame-graph';\nimport { ObservationDetailView } from './observation-detail-view';\nimport { ThreadContextProgress } from './thread-context-progress';\n\nexport interface MemoryStudioPanelProps {\n messages: MemoryMessage[];\n omRecords: OMHistoryRecord[];\n isLoading?: boolean;\n onClose?: () => void;\n /** Replay cursor (ms epoch) driven by the timeline; selects the matching observation. */\n selectedTimestamp?: number | null;\n /** Fired when the flame graph timeline is clicked, surfacing the replay cursor. */\n onSelectTimestamp?: (timestamp: number | null) => void;\n /**\n * Authoritative context-window token counts/thresholds supplied by the caller\n * (e.g. derived from the OM record + live stream progress). When provided these\n * take precedence over the values re-derived from message markers, keeping this\n * panel aligned with the OM sidebar. Marker-derived values remain the fallback\n * for standalone usage.\n */\n contextWindow?: {\n messageTokens?: number;\n messageThreshold?: number;\n memoryTokens?: number;\n memoryThreshold?: number;\n };\n}\n\nexport function MemoryStudioPanel({\n messages,\n omRecords,\n isLoading = false,\n onClose,\n selectedTimestamp,\n onSelectTimestamp,\n contextWindow,\n}: MemoryStudioPanelProps) {\n const [manualOMRecordId, setManualOMRecordId] = useState<string | null>(null);\n\n const markers = useMemo(() => extractOmMarkers(messages), [messages]);\n // timestampsToTDomain already returns the unit domain for an empty list.\n const tDomain = useMemo(\n () => timestampsToTDomain(messages.map(m => new Date(m.createdAt).toISOString())),\n [messages],\n );\n const windowState = useMemo(() => getLatestThreadContextWindowState({ markers, omRecords }), [markers, omRecords]);\n\n const memoryTokens = contextWindow?.memoryTokens ?? windowState.memoryTokens;\n const memoryThreshold = contextWindow?.memoryThreshold ?? windowState.memoryThreshold;\n\n // Zoom range (epoch ms) is owned here so it can both scope the FlameGraph\n // charts and filter the observation list. It resets to the full domain\n // whenever the domain changes (mirrors the FlameGraph's own reset behaviour).\n const [zoomRange, setZoomRange] = useState<ZoomRange>({ left: tDomain.tMin, right: tDomain.tMax });\n useEffect(() => {\n setZoomRange({ left: tDomain.tMin, right: tDomain.tMax });\n }, [tDomain.tMin, tDomain.tMax]);\n\n // The full-domain case is a strict pass-through so an untouched range never\n // hides records (e.g. observations outside the message-derived domain).\n const isFullRange = zoomRange.left <= tDomain.tMin && zoomRange.right >= tDomain.tMax;\n const visibleRecords = useMemo(() => {\n if (isFullRange) return omRecords;\n return omRecords.filter(record => {\n const t = getObservationTimestampMs(record);\n return t >= zoomRange.left && t <= zoomRange.right;\n });\n }, [omRecords, isFullRange, zoomRange.left, zoomRange.right]);\n\n // Replay cursor (controlled) overrides manual history selection. Resolve it\n // against the visible records so selection stays consistent with the list.\n const replayRecordId = useMemo(\n () => (selectedTimestamp != null ? findRecordIdAtOrBefore(visibleRecords, selectedTimestamp) : null),\n [visibleRecords, selectedTimestamp],\n );\n // Ignore a manual selection that the range has filtered out, so the detail\n // view falls back to a record that is actually visible instead of an empty state.\n const manualSelectionInRange =\n manualOMRecordId != null && visibleRecords.some(r => r.id === manualOMRecordId) ? manualOMRecordId : null;\n const selectedOMRecordId = replayRecordId ?? manualSelectionInRange;\n\n return (\n <div className=\"flex size-full flex-col overflow-hidden\">\n <div className=\"border-border flex shrink-0 items-center gap-2 border-b px-3 py-2.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" tooltip=\"Back to memory\" onClick={() => onClose?.()}>\n <ArrowLeftIcon />\n </Button>\n <span className=\"text-foreground flex min-w-0 items-center gap-1.5\">\n <MemoryIcon className=\"size-4 shrink-0\" />\n <Txt as=\"span\" variant=\"column\">\n Observational memory\n </Txt>\n </span>\n </div>\n\n {isLoading ? (\n <div data-testid=\"memory-studio-loading\" className=\"flex flex-1 flex-col gap-3 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-16 w-full\" />\n </div>\n ) : (\n <div className=\"grid min-h-0 flex-1 grid-rows-[1fr_auto] overflow-hidden\">\n <div className=\"flex min-h-0 flex-col overflow-hidden\">\n <ObservationDetailView\n records={visibleRecords}\n selectedRecordId={selectedOMRecordId}\n onSelectRecord={setManualOMRecordId}\n isLoading={isLoading}\n />\n </div>\n <div className=\"border-border border-t\">\n <ThreadContextProgress\n messageTokens={contextWindow?.messageTokens ?? windowState.messageTokens}\n messageThreshold={contextWindow?.messageThreshold ?? windowState.messageThreshold}\n memoryTokens={memoryTokens}\n memoryThreshold={memoryThreshold}\n memoryLabel=\"Observations\"\n />\n <FlameGraph\n omRecords={omRecords}\n markers={markers}\n messages={messages}\n tDomain={tDomain}\n onSelectTimestamp={onSelectTimestamp}\n zoomRange={zoomRange}\n onZoomRangeChange={setZoomRange}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-studio-panel.es.js","sources":["../../../../src/domains/memory/components/memory-studio-panel.tsx"],"sourcesContent":["import { ArrowLeftIcon } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../../../ds/components/Button';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { Txt } from '../../../ds/components/Txt';\nimport { MemoryIcon } from '../../../ds/icons/MemoryIcon';\nimport { extractOmMarkers } from '../lib/extract-markers';\nimport { findRecordIdAtOrBefore, getObservationTimestampMs } from '../lib/replay-selection';\nimport { getLatestThreadContextWindowState } from '../lib/thread-context-window-state';\nimport { timestampsToTDomain } from '../lib/timeline';\nimport type { MemoryMessage, OMHistoryRecord } from '../types';\nimport { FlameGraph } from './flame-graph';\nimport type { ZoomRange } from './flame-graph';\nimport { ObservationDetailView } from './observation-detail-view';\nimport { ThreadContextProgress } from './thread-context-progress';\n\nexport interface MemoryStudioPanelProps {\n messages: MemoryMessage[];\n omRecords: OMHistoryRecord[];\n isLoading?: boolean;\n onClose?: () => void;\n /** Replay cursor (ms epoch) driven by the timeline; selects the matching observation. */\n selectedTimestamp?: number | null;\n /** Fired when the flame graph timeline is clicked, surfacing the replay cursor. */\n onSelectTimestamp?: (timestamp: number | null) => void;\n /**\n * Authoritative context-window token counts/thresholds supplied by the caller\n * (e.g. derived from the OM record + live stream progress). When provided these\n * take precedence over the values re-derived from message markers, keeping this\n * panel aligned with the OM sidebar. Marker-derived values remain the fallback\n * for standalone usage.\n */\n contextWindow?: {\n messageTokens?: number;\n messageThreshold?: number;\n memoryTokens?: number;\n memoryThreshold?: number;\n };\n}\n\nexport function MemoryStudioPanel({\n messages,\n omRecords,\n isLoading = false,\n onClose,\n selectedTimestamp,\n onSelectTimestamp,\n contextWindow,\n}: MemoryStudioPanelProps) {\n const [manualOMRecordId, setManualOMRecordId] = useState<string | null>(null);\n\n const markers = useMemo(() => extractOmMarkers(messages), [messages]);\n // timestampsToTDomain already returns the unit domain for an empty list.\n const tDomain = useMemo(\n () => timestampsToTDomain(messages.map(m => new Date(m.createdAt).toISOString())),\n [messages],\n );\n const windowState = useMemo(() => getLatestThreadContextWindowState({ markers, omRecords }), [markers, omRecords]);\n\n const memoryTokens = contextWindow?.memoryTokens ?? windowState.memoryTokens;\n const memoryThreshold = contextWindow?.memoryThreshold ?? windowState.memoryThreshold;\n\n // Zoom range (epoch ms) is owned here so it can both scope the FlameGraph\n // charts and filter the observation list. It resets to the full domain\n // whenever the domain changes (mirrors the FlameGraph's own reset behaviour).\n const [zoomRange, setZoomRange] = useState<ZoomRange>({ left: tDomain.tMin, right: tDomain.tMax });\n useEffect(() => {\n setZoomRange({ left: tDomain.tMin, right: tDomain.tMax });\n }, [tDomain.tMin, tDomain.tMax]);\n\n // The full-domain case is a strict pass-through so an untouched range never\n // hides records (e.g. observations outside the message-derived domain).\n const isFullRange = zoomRange.left <= tDomain.tMin && zoomRange.right >= tDomain.tMax;\n const visibleRecords = useMemo(() => {\n if (isFullRange) return omRecords;\n return omRecords.filter(record => {\n const t = getObservationTimestampMs(record);\n return t >= zoomRange.left && t <= zoomRange.right;\n });\n }, [omRecords, isFullRange, zoomRange.left, zoomRange.right]);\n\n // Replay cursor (controlled) overrides manual history selection. Resolve it\n // against the visible records so selection stays consistent with the list.\n const replayRecordId = useMemo(\n () => (selectedTimestamp != null ? findRecordIdAtOrBefore(visibleRecords, selectedTimestamp) : null),\n [visibleRecords, selectedTimestamp],\n );\n // Ignore a manual selection that the range has filtered out, so the detail\n // view falls back to a record that is actually visible instead of an empty state.\n const manualSelectionInRange =\n manualOMRecordId != null && visibleRecords.some(r => r.id === manualOMRecordId) ? manualOMRecordId : null;\n const selectedOMRecordId = replayRecordId ?? manualSelectionInRange;\n\n return (\n <div className=\"flex size-full flex-col overflow-hidden\">\n <div className=\"flex shrink-0 items-center gap-2 border-b border-border px-3 py-2.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" tooltip=\"Back to memory\" onClick={() => onClose?.()}>\n <ArrowLeftIcon />\n </Button>\n <span className=\"flex min-w-0 items-center gap-1.5 text-foreground\">\n <MemoryIcon className=\"size-4 shrink-0\" />\n <Txt as=\"span\" variant=\"column\">\n Observational memory\n </Txt>\n </span>\n </div>\n\n {isLoading ? (\n <div data-testid=\"memory-studio-loading\" className=\"flex flex-1 flex-col gap-3 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-16 w-full\" />\n </div>\n ) : (\n <div className=\"grid min-h-0 flex-1 grid-rows-[1fr_auto] overflow-hidden\">\n <div className=\"flex min-h-0 flex-col overflow-hidden\">\n <ObservationDetailView\n records={visibleRecords}\n selectedRecordId={selectedOMRecordId}\n onSelectRecord={setManualOMRecordId}\n isLoading={isLoading}\n />\n </div>\n <div className=\"border-t border-border\">\n <ThreadContextProgress\n messageTokens={contextWindow?.messageTokens ?? windowState.messageTokens}\n messageThreshold={contextWindow?.messageThreshold ?? windowState.messageThreshold}\n memoryTokens={memoryTokens}\n memoryThreshold={memoryThreshold}\n memoryLabel=\"Observations\"\n />\n <FlameGraph\n omRecords={omRecords}\n markers={markers}\n messages={messages}\n tDomain={tDomain}\n onSelectTimestamp={onSelectTimestamp}\n zoomRange={zoomRange}\n onZoomRangeChange={setZoomRange}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -3,11 +3,10 @@
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
- const lucideReact = require('lucide-react');
7
6
  const React = require('react');
8
7
  const checkbox = require('../../../checkbox-CI8JtZKS.cjs');
9
- const codeDiff = require('../../../code-diff-DBtbPe9D.cjs');
10
- const EmptyState = require('../../../EmptyState-CdRjFB06.cjs');
8
+ const codeDiff = require('../../../code-diff-CG8veSa-.cjs');
9
+ const EmptyState = require('../../../EmptyState-DiSP6UIy.cjs');
11
10
  const skeleton = require('../../../skeleton-cXUjPrq9.cjs');
12
11
  const utils_cn = require('../../../cn-DG0X1KEP.cjs');
13
12
 
@@ -154,10 +153,10 @@ function parseObservations(raw) {
154
153
  return sections;
155
154
  }
156
155
  function ObservationItems({ items, nested = false }) {
157
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: nested ? "border-border space-y-2 border-l pl-4" : "space-y-3", children: items.map((item, i) => {
156
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: nested ? "space-y-2 border-l border-border pl-4" : "space-y-3", children: items.map((item, i) => {
158
157
  const styles = priorityClasses(item.priority, nested);
159
158
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
160
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-12 shrink-0 pt-2 text-right", children: item.time && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-meta font-mono ${styles.time}`, children: formatObservationTime(item.time) }) }),
159
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-12 shrink-0 pt-2 text-right", children: item.time && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `font-mono text-meta ${styles.time}`, children: formatObservationTime(item.time) }) }),
161
160
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils_cn.cn("min-w-0 flex-1 rounded-md border px-3 py-2", styles.card), children: [
162
161
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: utils_cn.cn("text-body break-words whitespace-pre-wrap", styles.text), children: item.text }),
163
162
  item.children.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsxRuntime.jsx(ObservationItems, { items: item.children, nested: true }) })
@@ -168,12 +167,12 @@ function ObservationItems({ items, nested = false }) {
168
167
  function ObservationContent({ observations }) {
169
168
  const sections = React.useMemo(() => parseObservations(observations), [observations]);
170
169
  if (sections.length === 0) {
171
- return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-caption italic", children: "Initialized" });
170
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-caption text-muted-foreground italic", children: "Initialized" });
172
171
  }
173
172
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-5", children: sections.map((section, i) => /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "space-y-3", children: [
174
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border flex items-baseline justify-between gap-3 border-b pb-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
173
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-baseline justify-between gap-3 border-b border-border pb-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
175
174
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-column text-foreground", children: section.title }),
176
- section.relativeTime && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-meta", children: section.relativeTime })
175
+ section.relativeTime && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-meta text-muted-foreground", children: section.relativeTime })
177
176
  ] }) }),
178
177
  /* @__PURE__ */ jsxRuntime.jsx(ObservationItems, { items: section.items })
179
178
  ] }, `${section.title}-${i}`)) });
@@ -184,8 +183,8 @@ function ObservationHistoryPanel({
184
183
  onSelectRecord
185
184
  }) {
186
185
  if (records.length <= 1) return null;
187
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-border flex w-50 min-w-45 flex-col overflow-hidden border-l", children: [
188
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border border-b px-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-body text-foreground", children: "History" }) }),
186
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-50 min-w-45 flex-col overflow-hidden border-l border-border", children: [
187
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-border px-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-body text-foreground", children: "History" }) }),
189
188
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto", children: records.map((record) => {
190
189
  const isSelected = record.id === selectedRecordId;
191
190
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -193,7 +192,7 @@ function ObservationHistoryPanel({
193
192
  {
194
193
  type: "button",
195
194
  className: utils_cn.cn(
196
- "text-muted-foreground w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left text-caption hover:bg-fill-subtle",
195
+ "w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left text-caption text-muted-foreground hover:bg-fill-subtle",
197
196
  isSelected && "border-l-accent1 bg-fill-hover"
198
197
  ),
199
198
  onClick: () => onSelectRecord(record.id),
@@ -232,21 +231,21 @@ function ObservationDetailView({
232
231
  ] });
233
232
  }
234
233
  if (!selected) {
235
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
234
+ return /* @__PURE__ */ jsxRuntime.jsx(
236
235
  EmptyState.EmptyState,
237
236
  {
238
- iconSlot: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleSlashIcon, { className: "size-4" }),
239
237
  titleSlot: "No observations",
240
- descriptionSlot: "No observational memory snapshots available for this thread."
238
+ descriptionSlot: "No observational memory snapshots available for this thread.",
239
+ variant: "fill"
241
240
  }
242
- ) });
241
+ );
243
242
  }
244
243
  const activeObservations = typeof selected.activeObservations === "string" ? selected.activeObservations : "";
245
244
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex size-full overflow-hidden", children: [
246
245
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col overflow-hidden", children: [
247
- previousRecord && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border border-b px-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-start justify-end gap-3", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "text-caption flex cursor-pointer items-center gap-1.5", children: [
246
+ previousRecord && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-border px-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-start justify-end gap-3", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex cursor-pointer items-center gap-1.5 text-caption", children: [
248
247
  /* @__PURE__ */ jsxRuntime.jsx(checkbox.Checkbox, { checked: showDiff, onCheckedChange: (v) => setShowDiff(v === true) }),
249
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-caption", children: "Show diff" })
248
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-caption text-muted-foreground", children: "Show diff" })
250
249
  ] }) }) }),
251
250
  /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": "observation-detail-body", className: "flex-1 overflow-y-auto p-4", children: showDiff && previousRecord ? /* @__PURE__ */ jsxRuntime.jsx(
252
251
  codeDiff.CodeDiff,
@@ -254,7 +253,7 @@ function ObservationDetailView({
254
253
  codeA: typeof previousRecord.activeObservations === "string" ? previousRecord.activeObservations : "",
255
254
  codeB: activeObservations
256
255
  }
257
- ) : activeObservations ? /* @__PURE__ */ jsxRuntime.jsx(ObservationContent, { observations: activeObservations }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-caption italic", children: selected.isObserving || selected.isReflecting ? "Processing…" : "Initialized" }) })
256
+ ) : activeObservations ? /* @__PURE__ */ jsxRuntime.jsx(ObservationContent, { observations: activeObservations }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-caption text-muted-foreground italic", children: selected.isObserving || selected.isReflecting ? "Processing…" : "Initialized" }) })
258
257
  ] }),
259
258
  /* @__PURE__ */ jsxRuntime.jsx(ObservationHistoryPanel, { records: sorted, selectedRecordId: selected.id, onSelectRecord })
260
259
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"observation-detail-view.cjs.js","sources":["../../../../src/domains/memory/components/observation-detail-view.tsx"],"sourcesContent":["import { CircleSlashIcon } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Checkbox } from '../../../ds/components/Checkbox';\nimport { CodeDiff } from '../../../ds/components/CodeDiff';\nimport { EmptyState } from '../../../ds/components/EmptyState';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { cn } from '../../../lib/utils';\nimport type { OMHistoryRecord } from '../types';\n\ntype ParsedItem = {\n text: string;\n time: string | null;\n priority: 'high' | 'medium' | 'low' | 'complete' | null;\n children: ParsedItem[];\n};\n\ntype ParsedSection = {\n title: string;\n relativeTime: string | null;\n items: ParsedItem[];\n};\n\nfunction formatObservationTime(time: string | null) {\n if (!time) return null;\n const match = time.match(/^(\\d{1,2}):(\\d{2})$/);\n if (!match) return time;\n const [, hours, minutes] = match;\n const hour = Number(hours);\n const suffix = hour >= 12 ? 'PM' : 'AM';\n const normalizedHour = hour % 12 || 12;\n return `${normalizedHour}:${minutes} ${suffix}`;\n}\n\nfunction getPriorityFromEmoji(emoji?: string): ParsedItem['priority'] {\n if (emoji === '🔴') return 'high';\n if (emoji === '🟡') return 'medium';\n if (emoji === '🟢') return 'low';\n if (emoji === '✅') return 'complete';\n return null;\n}\n\nfunction priorityClasses(priority: ParsedItem['priority'], nested: boolean) {\n if (nested) {\n return {\n card: 'bg-transparent border-transparent',\n text: 'text-muted-foreground',\n time: 'text-muted-foreground',\n };\n }\n switch (priority) {\n case 'high':\n return {\n card: 'border-purple-400/30 bg-purple-500/10',\n text: 'text-foreground',\n time: 'text-purple-200/80',\n };\n case 'medium':\n return {\n card: 'border-blue-400/30 bg-blue-500/10',\n text: 'text-foreground',\n time: 'text-blue-200/80',\n };\n case 'low':\n return {\n card: 'border-emerald-400/30 bg-emerald-500/10',\n text: 'text-foreground',\n time: 'text-emerald-200/80',\n };\n case 'complete':\n return {\n card: 'border-green-400/30 bg-green-500/10',\n text: 'text-foreground',\n time: 'text-green-200/80',\n };\n default:\n return {\n card: 'border-border bg-background',\n text: 'text-foreground',\n time: 'text-muted-foreground',\n };\n }\n}\n\nfunction parseItem(line: string): ParsedItem | null {\n const trimmed = line.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const text = trimmed.replace(/^\\*?\\s*->\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n if (trimmed.startsWith('-')) {\n const text = trimmed.replace(/^-\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n // Extracts a root observation line of the form `* 🔴 (11:55) some text`,\n // where the priority emoji and `(HH:MM)` timestamp are both optional:\n // → { priority: high, time: '11:55', text: 'some text' }.\n // Parsed incrementally instead of with a single regex: adjacent `\\s*` runs\n // around optional groups backtrack polynomially on adversarial input\n // (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('*')) {\n let rest = trimmed.slice(1).trimStart();\n let priority: ParsedItem['priority'] = null;\n for (const emoji of ['🔴', '🟡', '🟢', '✅']) {\n if (rest.startsWith(emoji)) {\n priority = getPriorityFromEmoji(emoji);\n rest = rest.slice(emoji.length).trimStart();\n break;\n }\n }\n let time: string | null = null;\n const timeMatch = rest.match(/^\\((\\d{1,2}:\\d{2})\\)/);\n if (timeMatch) {\n const [matchedText, matchedTime] = timeMatch;\n if (matchedText !== undefined && matchedTime !== undefined) {\n time = matchedTime;\n rest = rest.slice(matchedText.length).trimStart();\n }\n }\n if (rest) {\n return { text: rest, time, priority, children: [] };\n }\n }\n return { text: trimmed, time: null, priority: null, children: [] };\n}\n\nfunction parseObservations(raw: string): ParsedSection[] {\n // Extracts the text between `<observations>` and `</observations>` (falls\n // back to the whole string when the tags are absent). indexOf instead of a\n // lazy regex to avoid polynomial backtracking on adversarial input\n // (CodeQL js/polynomial-redos).\n const openTag = '<observations>';\n const openIdx = raw.indexOf(openTag);\n const closeIdx = openIdx === -1 ? -1 : raw.indexOf('</observations>', openIdx + openTag.length);\n const content = (closeIdx === -1 ? raw : raw.slice(openIdx + openTag.length, closeIdx)).trim();\n if (!content) return [];\n const lines = content.split('\\n');\n const sections: ParsedSection[] = [];\n let current: ParsedSection | null = null;\n let lastRoot: ParsedItem | null = null;\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n // Extracts a section header of the form `Date: Jul 2, 2026 (today)`,\n // where the parenthesized relative time is optional:\n // → { title: 'Jul 2, 2026', relativeTime: 'today' }.\n // Parsed with string ops instead of a lazy regex with an optional trailing\n // group, which backtracks polynomially (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('Date:')) {\n let title = trimmed.slice('Date:'.length).trim();\n let relativeTime: string | null = null;\n if (title.endsWith(')')) {\n const openParen = title.lastIndexOf('(');\n const inner = openParen === -1 ? '' : title.slice(openParen + 1, -1);\n // `inner` must not contain ')' — mirrors the original `\\(([^)]+)\\)$` semantics\n if (openParen > 0 && inner && !inner.includes(')')) {\n relativeTime = inner.trim();\n title = title.slice(0, openParen).trim();\n }\n }\n if (title) {\n current = { title, relativeTime, items: [] };\n sections.push(current);\n lastRoot = null;\n continue;\n }\n }\n if (!current) {\n current = { title: 'Recent', relativeTime: null, items: [] };\n sections.push(current);\n }\n const indent = line.match(/^(\\s*)/)?.[1]?.length ?? 0;\n const isNested = indent >= 2 && (trimmed.startsWith('* ->') || trimmed.startsWith('->') || trimmed.startsWith('-'));\n const item = parseItem(line);\n if (!item) continue;\n if (isNested && lastRoot) {\n lastRoot.children.push(item);\n continue;\n }\n current.items.push(item);\n lastRoot = item;\n }\n return sections;\n}\n\nfunction ObservationItems({ items, nested = false }: { items: ParsedItem[]; nested?: boolean }) {\n return (\n <div className={nested ? 'border-border space-y-2 border-l pl-4' : 'space-y-3'}>\n {items.map((item, i) => {\n const styles = priorityClasses(item.priority, nested);\n return (\n <div key={`${item.text.slice(0, 20)}-${i}`} className=\"space-y-2\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-12 shrink-0 pt-2 text-right\">\n {item.time && (\n <span className={`text-meta font-mono ${styles.time}`}>{formatObservationTime(item.time)}</span>\n )}\n </div>\n <div className={cn('min-w-0 flex-1 rounded-md border px-3 py-2', styles.card)}>\n <p className={cn('text-body break-words whitespace-pre-wrap', styles.text)}>{item.text}</p>\n {item.children.length > 0 && (\n <div className=\"mt-3\">\n <ObservationItems items={item.children} nested />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ObservationContent({ observations }: { observations: string }) {\n const sections = useMemo(() => parseObservations(observations), [observations]);\n if (sections.length === 0) {\n return <p className=\"text-muted-foreground text-caption italic\">Initialized</p>;\n }\n return (\n <div className=\"space-y-5\">\n {sections.map((section, i) => (\n <section key={`${section.title}-${i}`} className=\"space-y-3\">\n <div className=\"border-border flex items-baseline justify-between gap-3 border-b pb-2\">\n <div className=\"min-w-0\">\n <h3 className=\"text-column text-foreground\">{section.title}</h3>\n {section.relativeTime && <p className=\"text-muted-foreground text-meta\">{section.relativeTime}</p>}\n </div>\n </div>\n <ObservationItems items={section.items} />\n </section>\n ))}\n </div>\n );\n}\n\nfunction ObservationHistoryPanel({\n records,\n selectedRecordId,\n onSelectRecord,\n}: {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n}) {\n if (records.length <= 1) return null;\n\n return (\n <div className=\"border-border flex w-50 min-w-45 flex-col overflow-hidden border-l\">\n <div className=\"border-border border-b px-4 py-2\">\n <p className=\"text-body text-foreground\">History</p>\n </div>\n <div className=\"flex-1 overflow-y-auto\">\n {records.map(record => {\n const isSelected = record.id === selectedRecordId;\n return (\n <button\n key={record.id}\n type=\"button\"\n className={cn(\n 'text-muted-foreground w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left text-caption hover:bg-fill-subtle',\n isSelected && 'border-l-accent1 bg-fill-hover',\n )}\n onClick={() => onSelectRecord(record.id)}\n >\n {record.activeObservations || (\n <span className=\"text-muted-foreground italic\">\n {record.isObserving || record.isReflecting ? 'Processing\\u2026' : 'Initialized'}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface ObservationDetailViewProps {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n isLoading?: boolean;\n}\n\nexport function ObservationDetailView({\n records,\n selectedRecordId,\n onSelectRecord,\n isLoading,\n}: ObservationDetailViewProps) {\n const [showDiff, setShowDiff] = useState(false);\n\n const sorted = useMemo(\n () => [...records].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()),\n [records],\n );\n\n const selected = selectedRecordId ? sorted.find(r => r.id === selectedRecordId) : sorted[sorted.length - 1];\n const selectedIndex = selected ? sorted.findIndex(r => r.id === selected.id) : -1;\n const previousRecord = selectedIndex > 0 ? sorted[selectedIndex - 1] : null;\n\n useEffect(() => {\n const last = sorted.at(-1);\n if (!selectedRecordId && last) {\n onSelectRecord(last.id);\n }\n }, [selectedRecordId, sorted, onSelectRecord]);\n\n if (isLoading) {\n return (\n <div className=\"space-y-4 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-32 w-full\" />\n </div>\n );\n }\n\n if (!selected) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState\n iconSlot={<CircleSlashIcon className=\"size-4\" />}\n titleSlot=\"No observations\"\n descriptionSlot=\"No observational memory snapshots available for this thread.\"\n />\n </div>\n );\n }\n\n const activeObservations = typeof selected.activeObservations === 'string' ? selected.activeObservations : '';\n\n return (\n <div className=\"flex size-full overflow-hidden\">\n {/* Main observation content */}\n <div className=\"flex min-w-0 flex-1 flex-col overflow-hidden\">\n {previousRecord && (\n <div className=\"border-border border-b px-4 py-2\">\n <div className=\"flex items-start justify-end gap-3\">\n <label className=\"text-caption flex cursor-pointer items-center gap-1.5\">\n <Checkbox checked={showDiff} onCheckedChange={v => setShowDiff(v === true)} />\n <span className=\"text-muted-foreground text-caption\">Show diff</span>\n </label>\n </div>\n </div>\n )}\n\n <div data-testid=\"observation-detail-body\" className=\"flex-1 overflow-y-auto p-4\">\n {showDiff && previousRecord ? (\n <CodeDiff\n codeA={typeof previousRecord.activeObservations === 'string' ? previousRecord.activeObservations : ''}\n codeB={activeObservations}\n />\n ) : activeObservations ? (\n <ObservationContent observations={activeObservations} />\n ) : (\n <p className=\"text-muted-foreground text-caption italic\">\n {selected.isObserving || selected.isReflecting ? 'Processing…' : 'Initialized'}\n </p>\n )}\n </div>\n </div>\n\n {/* History sidebar */}\n <ObservationHistoryPanel records={sorted} selectedRecordId={selected.id} onSelectRecord={onSelectRecord} />\n </div>\n );\n}\n"],"names":["jsx","jsxs","cn","useMemo","useState","useEffect","Skeleton","EmptyState","CircleSlashIcon","Checkbox","CodeDiff"],"mappings":"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"}
1
+ {"version":3,"file":"observation-detail-view.cjs.js","sources":["../../../../src/domains/memory/components/observation-detail-view.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport { Checkbox } from '../../../ds/components/Checkbox';\nimport { CodeDiff } from '../../../ds/components/CodeDiff';\nimport { EmptyState } from '../../../ds/components/EmptyState';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { cn } from '../../../lib/utils';\nimport type { OMHistoryRecord } from '../types';\n\ntype ParsedItem = {\n text: string;\n time: string | null;\n priority: 'high' | 'medium' | 'low' | 'complete' | null;\n children: ParsedItem[];\n};\n\ntype ParsedSection = {\n title: string;\n relativeTime: string | null;\n items: ParsedItem[];\n};\n\nfunction formatObservationTime(time: string | null) {\n if (!time) return null;\n const match = time.match(/^(\\d{1,2}):(\\d{2})$/);\n if (!match) return time;\n const [, hours, minutes] = match;\n const hour = Number(hours);\n const suffix = hour >= 12 ? 'PM' : 'AM';\n const normalizedHour = hour % 12 || 12;\n return `${normalizedHour}:${minutes} ${suffix}`;\n}\n\nfunction getPriorityFromEmoji(emoji?: string): ParsedItem['priority'] {\n if (emoji === '🔴') return 'high';\n if (emoji === '🟡') return 'medium';\n if (emoji === '🟢') return 'low';\n if (emoji === '✅') return 'complete';\n return null;\n}\n\nfunction priorityClasses(priority: ParsedItem['priority'], nested: boolean) {\n if (nested) {\n return {\n card: 'bg-transparent border-transparent',\n text: 'text-muted-foreground',\n time: 'text-muted-foreground',\n };\n }\n switch (priority) {\n case 'high':\n return {\n card: 'border-purple-400/30 bg-purple-500/10',\n text: 'text-foreground',\n time: 'text-purple-200/80',\n };\n case 'medium':\n return {\n card: 'border-blue-400/30 bg-blue-500/10',\n text: 'text-foreground',\n time: 'text-blue-200/80',\n };\n case 'low':\n return {\n card: 'border-emerald-400/30 bg-emerald-500/10',\n text: 'text-foreground',\n time: 'text-emerald-200/80',\n };\n case 'complete':\n return {\n card: 'border-green-400/30 bg-green-500/10',\n text: 'text-foreground',\n time: 'text-green-200/80',\n };\n default:\n return {\n card: 'border-border bg-background',\n text: 'text-foreground',\n time: 'text-muted-foreground',\n };\n }\n}\n\nfunction parseItem(line: string): ParsedItem | null {\n const trimmed = line.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const text = trimmed.replace(/^\\*?\\s*->\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n if (trimmed.startsWith('-')) {\n const text = trimmed.replace(/^-\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n // Extracts a root observation line of the form `* 🔴 (11:55) some text`,\n // where the priority emoji and `(HH:MM)` timestamp are both optional:\n // → { priority: high, time: '11:55', text: 'some text' }.\n // Parsed incrementally instead of with a single regex: adjacent `\\s*` runs\n // around optional groups backtrack polynomially on adversarial input\n // (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('*')) {\n let rest = trimmed.slice(1).trimStart();\n let priority: ParsedItem['priority'] = null;\n for (const emoji of ['🔴', '🟡', '🟢', '✅']) {\n if (rest.startsWith(emoji)) {\n priority = getPriorityFromEmoji(emoji);\n rest = rest.slice(emoji.length).trimStart();\n break;\n }\n }\n let time: string | null = null;\n const timeMatch = rest.match(/^\\((\\d{1,2}:\\d{2})\\)/);\n if (timeMatch) {\n const [matchedText, matchedTime] = timeMatch;\n if (matchedText !== undefined && matchedTime !== undefined) {\n time = matchedTime;\n rest = rest.slice(matchedText.length).trimStart();\n }\n }\n if (rest) {\n return { text: rest, time, priority, children: [] };\n }\n }\n return { text: trimmed, time: null, priority: null, children: [] };\n}\n\nfunction parseObservations(raw: string): ParsedSection[] {\n // Extracts the text between `<observations>` and `</observations>` (falls\n // back to the whole string when the tags are absent). indexOf instead of a\n // lazy regex to avoid polynomial backtracking on adversarial input\n // (CodeQL js/polynomial-redos).\n const openTag = '<observations>';\n const openIdx = raw.indexOf(openTag);\n const closeIdx = openIdx === -1 ? -1 : raw.indexOf('</observations>', openIdx + openTag.length);\n const content = (closeIdx === -1 ? raw : raw.slice(openIdx + openTag.length, closeIdx)).trim();\n if (!content) return [];\n const lines = content.split('\\n');\n const sections: ParsedSection[] = [];\n let current: ParsedSection | null = null;\n let lastRoot: ParsedItem | null = null;\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n // Extracts a section header of the form `Date: Jul 2, 2026 (today)`,\n // where the parenthesized relative time is optional:\n // → { title: 'Jul 2, 2026', relativeTime: 'today' }.\n // Parsed with string ops instead of a lazy regex with an optional trailing\n // group, which backtracks polynomially (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('Date:')) {\n let title = trimmed.slice('Date:'.length).trim();\n let relativeTime: string | null = null;\n if (title.endsWith(')')) {\n const openParen = title.lastIndexOf('(');\n const inner = openParen === -1 ? '' : title.slice(openParen + 1, -1);\n // `inner` must not contain ')' — mirrors the original `\\(([^)]+)\\)$` semantics\n if (openParen > 0 && inner && !inner.includes(')')) {\n relativeTime = inner.trim();\n title = title.slice(0, openParen).trim();\n }\n }\n if (title) {\n current = { title, relativeTime, items: [] };\n sections.push(current);\n lastRoot = null;\n continue;\n }\n }\n if (!current) {\n current = { title: 'Recent', relativeTime: null, items: [] };\n sections.push(current);\n }\n const indent = line.match(/^(\\s*)/)?.[1]?.length ?? 0;\n const isNested = indent >= 2 && (trimmed.startsWith('* ->') || trimmed.startsWith('->') || trimmed.startsWith('-'));\n const item = parseItem(line);\n if (!item) continue;\n if (isNested && lastRoot) {\n lastRoot.children.push(item);\n continue;\n }\n current.items.push(item);\n lastRoot = item;\n }\n return sections;\n}\n\nfunction ObservationItems({ items, nested = false }: { items: ParsedItem[]; nested?: boolean }) {\n return (\n <div className={nested ? 'space-y-2 border-l border-border pl-4' : 'space-y-3'}>\n {items.map((item, i) => {\n const styles = priorityClasses(item.priority, nested);\n return (\n <div key={`${item.text.slice(0, 20)}-${i}`} className=\"space-y-2\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-12 shrink-0 pt-2 text-right\">\n {item.time && (\n <span className={`font-mono text-meta ${styles.time}`}>{formatObservationTime(item.time)}</span>\n )}\n </div>\n <div className={cn('min-w-0 flex-1 rounded-md border px-3 py-2', styles.card)}>\n <p className={cn('text-body break-words whitespace-pre-wrap', styles.text)}>{item.text}</p>\n {item.children.length > 0 && (\n <div className=\"mt-3\">\n <ObservationItems items={item.children} nested />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ObservationContent({ observations }: { observations: string }) {\n const sections = useMemo(() => parseObservations(observations), [observations]);\n if (sections.length === 0) {\n return <p className=\"text-caption text-muted-foreground italic\">Initialized</p>;\n }\n return (\n <div className=\"space-y-5\">\n {sections.map((section, i) => (\n <section key={`${section.title}-${i}`} className=\"space-y-3\">\n <div className=\"flex items-baseline justify-between gap-3 border-b border-border pb-2\">\n <div className=\"min-w-0\">\n <h3 className=\"text-column text-foreground\">{section.title}</h3>\n {section.relativeTime && <p className=\"text-meta text-muted-foreground\">{section.relativeTime}</p>}\n </div>\n </div>\n <ObservationItems items={section.items} />\n </section>\n ))}\n </div>\n );\n}\n\nfunction ObservationHistoryPanel({\n records,\n selectedRecordId,\n onSelectRecord,\n}: {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n}) {\n if (records.length <= 1) return null;\n\n return (\n <div className=\"flex w-50 min-w-45 flex-col overflow-hidden border-l border-border\">\n <div className=\"border-b border-border px-4 py-2\">\n <p className=\"text-body text-foreground\">History</p>\n </div>\n <div className=\"flex-1 overflow-y-auto\">\n {records.map(record => {\n const isSelected = record.id === selectedRecordId;\n return (\n <button\n key={record.id}\n type=\"button\"\n className={cn(\n 'w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left text-caption text-muted-foreground hover:bg-fill-subtle',\n isSelected && 'border-l-accent1 bg-fill-hover',\n )}\n onClick={() => onSelectRecord(record.id)}\n >\n {record.activeObservations || (\n <span className=\"text-muted-foreground italic\">\n {record.isObserving || record.isReflecting ? 'Processing\\u2026' : 'Initialized'}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface ObservationDetailViewProps {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n isLoading?: boolean;\n}\n\nexport function ObservationDetailView({\n records,\n selectedRecordId,\n onSelectRecord,\n isLoading,\n}: ObservationDetailViewProps) {\n const [showDiff, setShowDiff] = useState(false);\n\n const sorted = useMemo(\n () => [...records].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()),\n [records],\n );\n\n const selected = selectedRecordId ? sorted.find(r => r.id === selectedRecordId) : sorted[sorted.length - 1];\n const selectedIndex = selected ? sorted.findIndex(r => r.id === selected.id) : -1;\n const previousRecord = selectedIndex > 0 ? sorted[selectedIndex - 1] : null;\n\n useEffect(() => {\n const last = sorted.at(-1);\n if (!selectedRecordId && last) {\n onSelectRecord(last.id);\n }\n }, [selectedRecordId, sorted, onSelectRecord]);\n\n if (isLoading) {\n return (\n <div className=\"space-y-4 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-32 w-full\" />\n </div>\n );\n }\n\n if (!selected) {\n return (\n <EmptyState\n titleSlot=\"No observations\"\n descriptionSlot=\"No observational memory snapshots available for this thread.\"\n variant=\"fill\"\n />\n );\n }\n\n const activeObservations = typeof selected.activeObservations === 'string' ? selected.activeObservations : '';\n\n return (\n <div className=\"flex size-full overflow-hidden\">\n {/* Main observation content */}\n <div className=\"flex min-w-0 flex-1 flex-col overflow-hidden\">\n {previousRecord && (\n <div className=\"border-b border-border px-4 py-2\">\n <div className=\"flex items-start justify-end gap-3\">\n <label className=\"flex cursor-pointer items-center gap-1.5 text-caption\">\n <Checkbox checked={showDiff} onCheckedChange={v => setShowDiff(v === true)} />\n <span className=\"text-caption text-muted-foreground\">Show diff</span>\n </label>\n </div>\n </div>\n )}\n\n <div data-testid=\"observation-detail-body\" className=\"flex-1 overflow-y-auto p-4\">\n {showDiff && previousRecord ? (\n <CodeDiff\n codeA={typeof previousRecord.activeObservations === 'string' ? previousRecord.activeObservations : ''}\n codeB={activeObservations}\n />\n ) : activeObservations ? (\n <ObservationContent observations={activeObservations} />\n ) : (\n <p className=\"text-caption text-muted-foreground italic\">\n {selected.isObserving || selected.isReflecting ? 'Processing…' : 'Initialized'}\n </p>\n )}\n </div>\n </div>\n\n {/* History sidebar */}\n <ObservationHistoryPanel records={sorted} selectedRecordId={selected.id} onSelectRecord={onSelectRecord} />\n </div>\n );\n}\n"],"names":["jsx","jsxs","cn","useMemo","useState","useEffect","Skeleton","EmptyState","Checkbox","CodeDiff"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { CircleSlashIcon } from 'lucide-react';
3
2
  import { useState, useMemo, useEffect } from 'react';
4
3
  import { C as Checkbox } from '../../../checkbox-CQedzgsi.js';
5
- import { C as CodeDiff } from '../../../code-diff-C5uY-3Hz.js';
6
- import { E as EmptyState } from '../../../EmptyState-UWXhBp5U.js';
4
+ import { C as CodeDiff } from '../../../code-diff-BHZTS4Zh.js';
5
+ import { E as EmptyState } from '../../../EmptyState-B6cyZw6m.js';
7
6
  import { S as Skeleton } from '../../../skeleton-BsRAXyh5.js';
8
7
  import { c as cn } from '../../../cn-65Adrsfj.js';
9
8
 
@@ -150,10 +149,10 @@ function parseObservations(raw) {
150
149
  return sections;
151
150
  }
152
151
  function ObservationItems({ items, nested = false }) {
153
- return /* @__PURE__ */ jsx("div", { className: nested ? "border-border space-y-2 border-l pl-4" : "space-y-3", children: items.map((item, i) => {
152
+ return /* @__PURE__ */ jsx("div", { className: nested ? "space-y-2 border-l border-border pl-4" : "space-y-3", children: items.map((item, i) => {
154
153
  const styles = priorityClasses(item.priority, nested);
155
154
  return /* @__PURE__ */ jsx("div", { className: "space-y-2", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
156
- /* @__PURE__ */ jsx("div", { className: "w-12 shrink-0 pt-2 text-right", children: item.time && /* @__PURE__ */ jsx("span", { className: `text-meta font-mono ${styles.time}`, children: formatObservationTime(item.time) }) }),
155
+ /* @__PURE__ */ jsx("div", { className: "w-12 shrink-0 pt-2 text-right", children: item.time && /* @__PURE__ */ jsx("span", { className: `font-mono text-meta ${styles.time}`, children: formatObservationTime(item.time) }) }),
157
156
  /* @__PURE__ */ jsxs("div", { className: cn("min-w-0 flex-1 rounded-md border px-3 py-2", styles.card), children: [
158
157
  /* @__PURE__ */ jsx("p", { className: cn("text-body break-words whitespace-pre-wrap", styles.text), children: item.text }),
159
158
  item.children.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsx(ObservationItems, { items: item.children, nested: true }) })
@@ -164,12 +163,12 @@ function ObservationItems({ items, nested = false }) {
164
163
  function ObservationContent({ observations }) {
165
164
  const sections = useMemo(() => parseObservations(observations), [observations]);
166
165
  if (sections.length === 0) {
167
- return /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-caption italic", children: "Initialized" });
166
+ return /* @__PURE__ */ jsx("p", { className: "text-caption text-muted-foreground italic", children: "Initialized" });
168
167
  }
169
168
  return /* @__PURE__ */ jsx("div", { className: "space-y-5", children: sections.map((section, i) => /* @__PURE__ */ jsxs("section", { className: "space-y-3", children: [
170
- /* @__PURE__ */ jsx("div", { className: "border-border flex items-baseline justify-between gap-3 border-b pb-2", children: /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
169
+ /* @__PURE__ */ jsx("div", { className: "flex items-baseline justify-between gap-3 border-b border-border pb-2", children: /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
171
170
  /* @__PURE__ */ jsx("h3", { className: "text-column text-foreground", children: section.title }),
172
- section.relativeTime && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-meta", children: section.relativeTime })
171
+ section.relativeTime && /* @__PURE__ */ jsx("p", { className: "text-meta text-muted-foreground", children: section.relativeTime })
173
172
  ] }) }),
174
173
  /* @__PURE__ */ jsx(ObservationItems, { items: section.items })
175
174
  ] }, `${section.title}-${i}`)) });
@@ -180,8 +179,8 @@ function ObservationHistoryPanel({
180
179
  onSelectRecord
181
180
  }) {
182
181
  if (records.length <= 1) return null;
183
- return /* @__PURE__ */ jsxs("div", { className: "border-border flex w-50 min-w-45 flex-col overflow-hidden border-l", children: [
184
- /* @__PURE__ */ jsx("div", { className: "border-border border-b px-4 py-2", children: /* @__PURE__ */ jsx("p", { className: "text-body text-foreground", children: "History" }) }),
182
+ return /* @__PURE__ */ jsxs("div", { className: "flex w-50 min-w-45 flex-col overflow-hidden border-l border-border", children: [
183
+ /* @__PURE__ */ jsx("div", { className: "border-b border-border px-4 py-2", children: /* @__PURE__ */ jsx("p", { className: "text-body text-foreground", children: "History" }) }),
185
184
  /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto", children: records.map((record) => {
186
185
  const isSelected = record.id === selectedRecordId;
187
186
  return /* @__PURE__ */ jsx(
@@ -189,7 +188,7 @@ function ObservationHistoryPanel({
189
188
  {
190
189
  type: "button",
191
190
  className: cn(
192
- "text-muted-foreground w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left text-caption hover:bg-fill-subtle",
191
+ "w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left text-caption text-muted-foreground hover:bg-fill-subtle",
193
192
  isSelected && "border-l-accent1 bg-fill-hover"
194
193
  ),
195
194
  onClick: () => onSelectRecord(record.id),
@@ -228,21 +227,21 @@ function ObservationDetailView({
228
227
  ] });
229
228
  }
230
229
  if (!selected) {
231
- return /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx(
230
+ return /* @__PURE__ */ jsx(
232
231
  EmptyState,
233
232
  {
234
- iconSlot: /* @__PURE__ */ jsx(CircleSlashIcon, { className: "size-4" }),
235
233
  titleSlot: "No observations",
236
- descriptionSlot: "No observational memory snapshots available for this thread."
234
+ descriptionSlot: "No observational memory snapshots available for this thread.",
235
+ variant: "fill"
237
236
  }
238
- ) });
237
+ );
239
238
  }
240
239
  const activeObservations = typeof selected.activeObservations === "string" ? selected.activeObservations : "";
241
240
  return /* @__PURE__ */ jsxs("div", { className: "flex size-full overflow-hidden", children: [
242
241
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col overflow-hidden", children: [
243
- previousRecord && /* @__PURE__ */ jsx("div", { className: "border-border border-b px-4 py-2", children: /* @__PURE__ */ jsx("div", { className: "flex items-start justify-end gap-3", children: /* @__PURE__ */ jsxs("label", { className: "text-caption flex cursor-pointer items-center gap-1.5", children: [
242
+ previousRecord && /* @__PURE__ */ jsx("div", { className: "border-b border-border px-4 py-2", children: /* @__PURE__ */ jsx("div", { className: "flex items-start justify-end gap-3", children: /* @__PURE__ */ jsxs("label", { className: "flex cursor-pointer items-center gap-1.5 text-caption", children: [
244
243
  /* @__PURE__ */ jsx(Checkbox, { checked: showDiff, onCheckedChange: (v) => setShowDiff(v === true) }),
245
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-caption", children: "Show diff" })
244
+ /* @__PURE__ */ jsx("span", { className: "text-caption text-muted-foreground", children: "Show diff" })
246
245
  ] }) }) }),
247
246
  /* @__PURE__ */ jsx("div", { "data-testid": "observation-detail-body", className: "flex-1 overflow-y-auto p-4", children: showDiff && previousRecord ? /* @__PURE__ */ jsx(
248
247
  CodeDiff,
@@ -250,7 +249,7 @@ function ObservationDetailView({
250
249
  codeA: typeof previousRecord.activeObservations === "string" ? previousRecord.activeObservations : "",
251
250
  codeB: activeObservations
252
251
  }
253
- ) : activeObservations ? /* @__PURE__ */ jsx(ObservationContent, { observations: activeObservations }) : /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-caption italic", children: selected.isObserving || selected.isReflecting ? "Processing…" : "Initialized" }) })
252
+ ) : activeObservations ? /* @__PURE__ */ jsx(ObservationContent, { observations: activeObservations }) : /* @__PURE__ */ jsx("p", { className: "text-caption text-muted-foreground italic", children: selected.isObserving || selected.isReflecting ? "Processing…" : "Initialized" }) })
254
253
  ] }),
255
254
  /* @__PURE__ */ jsx(ObservationHistoryPanel, { records: sorted, selectedRecordId: selected.id, onSelectRecord })
256
255
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"observation-detail-view.es.js","sources":["../../../../src/domains/memory/components/observation-detail-view.tsx"],"sourcesContent":["import { CircleSlashIcon } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Checkbox } from '../../../ds/components/Checkbox';\nimport { CodeDiff } from '../../../ds/components/CodeDiff';\nimport { EmptyState } from '../../../ds/components/EmptyState';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { cn } from '../../../lib/utils';\nimport type { OMHistoryRecord } from '../types';\n\ntype ParsedItem = {\n text: string;\n time: string | null;\n priority: 'high' | 'medium' | 'low' | 'complete' | null;\n children: ParsedItem[];\n};\n\ntype ParsedSection = {\n title: string;\n relativeTime: string | null;\n items: ParsedItem[];\n};\n\nfunction formatObservationTime(time: string | null) {\n if (!time) return null;\n const match = time.match(/^(\\d{1,2}):(\\d{2})$/);\n if (!match) return time;\n const [, hours, minutes] = match;\n const hour = Number(hours);\n const suffix = hour >= 12 ? 'PM' : 'AM';\n const normalizedHour = hour % 12 || 12;\n return `${normalizedHour}:${minutes} ${suffix}`;\n}\n\nfunction getPriorityFromEmoji(emoji?: string): ParsedItem['priority'] {\n if (emoji === '🔴') return 'high';\n if (emoji === '🟡') return 'medium';\n if (emoji === '🟢') return 'low';\n if (emoji === '✅') return 'complete';\n return null;\n}\n\nfunction priorityClasses(priority: ParsedItem['priority'], nested: boolean) {\n if (nested) {\n return {\n card: 'bg-transparent border-transparent',\n text: 'text-muted-foreground',\n time: 'text-muted-foreground',\n };\n }\n switch (priority) {\n case 'high':\n return {\n card: 'border-purple-400/30 bg-purple-500/10',\n text: 'text-foreground',\n time: 'text-purple-200/80',\n };\n case 'medium':\n return {\n card: 'border-blue-400/30 bg-blue-500/10',\n text: 'text-foreground',\n time: 'text-blue-200/80',\n };\n case 'low':\n return {\n card: 'border-emerald-400/30 bg-emerald-500/10',\n text: 'text-foreground',\n time: 'text-emerald-200/80',\n };\n case 'complete':\n return {\n card: 'border-green-400/30 bg-green-500/10',\n text: 'text-foreground',\n time: 'text-green-200/80',\n };\n default:\n return {\n card: 'border-border bg-background',\n text: 'text-foreground',\n time: 'text-muted-foreground',\n };\n }\n}\n\nfunction parseItem(line: string): ParsedItem | null {\n const trimmed = line.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const text = trimmed.replace(/^\\*?\\s*->\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n if (trimmed.startsWith('-')) {\n const text = trimmed.replace(/^-\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n // Extracts a root observation line of the form `* 🔴 (11:55) some text`,\n // where the priority emoji and `(HH:MM)` timestamp are both optional:\n // → { priority: high, time: '11:55', text: 'some text' }.\n // Parsed incrementally instead of with a single regex: adjacent `\\s*` runs\n // around optional groups backtrack polynomially on adversarial input\n // (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('*')) {\n let rest = trimmed.slice(1).trimStart();\n let priority: ParsedItem['priority'] = null;\n for (const emoji of ['🔴', '🟡', '🟢', '✅']) {\n if (rest.startsWith(emoji)) {\n priority = getPriorityFromEmoji(emoji);\n rest = rest.slice(emoji.length).trimStart();\n break;\n }\n }\n let time: string | null = null;\n const timeMatch = rest.match(/^\\((\\d{1,2}:\\d{2})\\)/);\n if (timeMatch) {\n const [matchedText, matchedTime] = timeMatch;\n if (matchedText !== undefined && matchedTime !== undefined) {\n time = matchedTime;\n rest = rest.slice(matchedText.length).trimStart();\n }\n }\n if (rest) {\n return { text: rest, time, priority, children: [] };\n }\n }\n return { text: trimmed, time: null, priority: null, children: [] };\n}\n\nfunction parseObservations(raw: string): ParsedSection[] {\n // Extracts the text between `<observations>` and `</observations>` (falls\n // back to the whole string when the tags are absent). indexOf instead of a\n // lazy regex to avoid polynomial backtracking on adversarial input\n // (CodeQL js/polynomial-redos).\n const openTag = '<observations>';\n const openIdx = raw.indexOf(openTag);\n const closeIdx = openIdx === -1 ? -1 : raw.indexOf('</observations>', openIdx + openTag.length);\n const content = (closeIdx === -1 ? raw : raw.slice(openIdx + openTag.length, closeIdx)).trim();\n if (!content) return [];\n const lines = content.split('\\n');\n const sections: ParsedSection[] = [];\n let current: ParsedSection | null = null;\n let lastRoot: ParsedItem | null = null;\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n // Extracts a section header of the form `Date: Jul 2, 2026 (today)`,\n // where the parenthesized relative time is optional:\n // → { title: 'Jul 2, 2026', relativeTime: 'today' }.\n // Parsed with string ops instead of a lazy regex with an optional trailing\n // group, which backtracks polynomially (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('Date:')) {\n let title = trimmed.slice('Date:'.length).trim();\n let relativeTime: string | null = null;\n if (title.endsWith(')')) {\n const openParen = title.lastIndexOf('(');\n const inner = openParen === -1 ? '' : title.slice(openParen + 1, -1);\n // `inner` must not contain ')' — mirrors the original `\\(([^)]+)\\)$` semantics\n if (openParen > 0 && inner && !inner.includes(')')) {\n relativeTime = inner.trim();\n title = title.slice(0, openParen).trim();\n }\n }\n if (title) {\n current = { title, relativeTime, items: [] };\n sections.push(current);\n lastRoot = null;\n continue;\n }\n }\n if (!current) {\n current = { title: 'Recent', relativeTime: null, items: [] };\n sections.push(current);\n }\n const indent = line.match(/^(\\s*)/)?.[1]?.length ?? 0;\n const isNested = indent >= 2 && (trimmed.startsWith('* ->') || trimmed.startsWith('->') || trimmed.startsWith('-'));\n const item = parseItem(line);\n if (!item) continue;\n if (isNested && lastRoot) {\n lastRoot.children.push(item);\n continue;\n }\n current.items.push(item);\n lastRoot = item;\n }\n return sections;\n}\n\nfunction ObservationItems({ items, nested = false }: { items: ParsedItem[]; nested?: boolean }) {\n return (\n <div className={nested ? 'border-border space-y-2 border-l pl-4' : 'space-y-3'}>\n {items.map((item, i) => {\n const styles = priorityClasses(item.priority, nested);\n return (\n <div key={`${item.text.slice(0, 20)}-${i}`} className=\"space-y-2\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-12 shrink-0 pt-2 text-right\">\n {item.time && (\n <span className={`text-meta font-mono ${styles.time}`}>{formatObservationTime(item.time)}</span>\n )}\n </div>\n <div className={cn('min-w-0 flex-1 rounded-md border px-3 py-2', styles.card)}>\n <p className={cn('text-body break-words whitespace-pre-wrap', styles.text)}>{item.text}</p>\n {item.children.length > 0 && (\n <div className=\"mt-3\">\n <ObservationItems items={item.children} nested />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ObservationContent({ observations }: { observations: string }) {\n const sections = useMemo(() => parseObservations(observations), [observations]);\n if (sections.length === 0) {\n return <p className=\"text-muted-foreground text-caption italic\">Initialized</p>;\n }\n return (\n <div className=\"space-y-5\">\n {sections.map((section, i) => (\n <section key={`${section.title}-${i}`} className=\"space-y-3\">\n <div className=\"border-border flex items-baseline justify-between gap-3 border-b pb-2\">\n <div className=\"min-w-0\">\n <h3 className=\"text-column text-foreground\">{section.title}</h3>\n {section.relativeTime && <p className=\"text-muted-foreground text-meta\">{section.relativeTime}</p>}\n </div>\n </div>\n <ObservationItems items={section.items} />\n </section>\n ))}\n </div>\n );\n}\n\nfunction ObservationHistoryPanel({\n records,\n selectedRecordId,\n onSelectRecord,\n}: {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n}) {\n if (records.length <= 1) return null;\n\n return (\n <div className=\"border-border flex w-50 min-w-45 flex-col overflow-hidden border-l\">\n <div className=\"border-border border-b px-4 py-2\">\n <p className=\"text-body text-foreground\">History</p>\n </div>\n <div className=\"flex-1 overflow-y-auto\">\n {records.map(record => {\n const isSelected = record.id === selectedRecordId;\n return (\n <button\n key={record.id}\n type=\"button\"\n className={cn(\n 'text-muted-foreground w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left text-caption hover:bg-fill-subtle',\n isSelected && 'border-l-accent1 bg-fill-hover',\n )}\n onClick={() => onSelectRecord(record.id)}\n >\n {record.activeObservations || (\n <span className=\"text-muted-foreground italic\">\n {record.isObserving || record.isReflecting ? 'Processing\\u2026' : 'Initialized'}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface ObservationDetailViewProps {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n isLoading?: boolean;\n}\n\nexport function ObservationDetailView({\n records,\n selectedRecordId,\n onSelectRecord,\n isLoading,\n}: ObservationDetailViewProps) {\n const [showDiff, setShowDiff] = useState(false);\n\n const sorted = useMemo(\n () => [...records].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()),\n [records],\n );\n\n const selected = selectedRecordId ? sorted.find(r => r.id === selectedRecordId) : sorted[sorted.length - 1];\n const selectedIndex = selected ? sorted.findIndex(r => r.id === selected.id) : -1;\n const previousRecord = selectedIndex > 0 ? sorted[selectedIndex - 1] : null;\n\n useEffect(() => {\n const last = sorted.at(-1);\n if (!selectedRecordId && last) {\n onSelectRecord(last.id);\n }\n }, [selectedRecordId, sorted, onSelectRecord]);\n\n if (isLoading) {\n return (\n <div className=\"space-y-4 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-32 w-full\" />\n </div>\n );\n }\n\n if (!selected) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState\n iconSlot={<CircleSlashIcon className=\"size-4\" />}\n titleSlot=\"No observations\"\n descriptionSlot=\"No observational memory snapshots available for this thread.\"\n />\n </div>\n );\n }\n\n const activeObservations = typeof selected.activeObservations === 'string' ? selected.activeObservations : '';\n\n return (\n <div className=\"flex size-full overflow-hidden\">\n {/* Main observation content */}\n <div className=\"flex min-w-0 flex-1 flex-col overflow-hidden\">\n {previousRecord && (\n <div className=\"border-border border-b px-4 py-2\">\n <div className=\"flex items-start justify-end gap-3\">\n <label className=\"text-caption flex cursor-pointer items-center gap-1.5\">\n <Checkbox checked={showDiff} onCheckedChange={v => setShowDiff(v === true)} />\n <span className=\"text-muted-foreground text-caption\">Show diff</span>\n </label>\n </div>\n </div>\n )}\n\n <div data-testid=\"observation-detail-body\" className=\"flex-1 overflow-y-auto p-4\">\n {showDiff && previousRecord ? (\n <CodeDiff\n codeA={typeof previousRecord.activeObservations === 'string' ? previousRecord.activeObservations : ''}\n codeB={activeObservations}\n />\n ) : activeObservations ? (\n <ObservationContent observations={activeObservations} />\n ) : (\n <p className=\"text-muted-foreground text-caption italic\">\n {selected.isObserving || selected.isReflecting ? 'Processing…' : 'Initialized'}\n </p>\n )}\n </div>\n </div>\n\n {/* History sidebar */}\n <ObservationHistoryPanel records={sorted} selectedRecordId={selected.id} onSelectRecord={onSelectRecord} />\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observation-detail-view.es.js","sources":["../../../../src/domains/memory/components/observation-detail-view.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport { Checkbox } from '../../../ds/components/Checkbox';\nimport { CodeDiff } from '../../../ds/components/CodeDiff';\nimport { EmptyState } from '../../../ds/components/EmptyState';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { cn } from '../../../lib/utils';\nimport type { OMHistoryRecord } from '../types';\n\ntype ParsedItem = {\n text: string;\n time: string | null;\n priority: 'high' | 'medium' | 'low' | 'complete' | null;\n children: ParsedItem[];\n};\n\ntype ParsedSection = {\n title: string;\n relativeTime: string | null;\n items: ParsedItem[];\n};\n\nfunction formatObservationTime(time: string | null) {\n if (!time) return null;\n const match = time.match(/^(\\d{1,2}):(\\d{2})$/);\n if (!match) return time;\n const [, hours, minutes] = match;\n const hour = Number(hours);\n const suffix = hour >= 12 ? 'PM' : 'AM';\n const normalizedHour = hour % 12 || 12;\n return `${normalizedHour}:${minutes} ${suffix}`;\n}\n\nfunction getPriorityFromEmoji(emoji?: string): ParsedItem['priority'] {\n if (emoji === '🔴') return 'high';\n if (emoji === '🟡') return 'medium';\n if (emoji === '🟢') return 'low';\n if (emoji === '✅') return 'complete';\n return null;\n}\n\nfunction priorityClasses(priority: ParsedItem['priority'], nested: boolean) {\n if (nested) {\n return {\n card: 'bg-transparent border-transparent',\n text: 'text-muted-foreground',\n time: 'text-muted-foreground',\n };\n }\n switch (priority) {\n case 'high':\n return {\n card: 'border-purple-400/30 bg-purple-500/10',\n text: 'text-foreground',\n time: 'text-purple-200/80',\n };\n case 'medium':\n return {\n card: 'border-blue-400/30 bg-blue-500/10',\n text: 'text-foreground',\n time: 'text-blue-200/80',\n };\n case 'low':\n return {\n card: 'border-emerald-400/30 bg-emerald-500/10',\n text: 'text-foreground',\n time: 'text-emerald-200/80',\n };\n case 'complete':\n return {\n card: 'border-green-400/30 bg-green-500/10',\n text: 'text-foreground',\n time: 'text-green-200/80',\n };\n default:\n return {\n card: 'border-border bg-background',\n text: 'text-foreground',\n time: 'text-muted-foreground',\n };\n }\n}\n\nfunction parseItem(line: string): ParsedItem | null {\n const trimmed = line.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const text = trimmed.replace(/^\\*?\\s*->\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n if (trimmed.startsWith('-')) {\n const text = trimmed.replace(/^-\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n // Extracts a root observation line of the form `* 🔴 (11:55) some text`,\n // where the priority emoji and `(HH:MM)` timestamp are both optional:\n // → { priority: high, time: '11:55', text: 'some text' }.\n // Parsed incrementally instead of with a single regex: adjacent `\\s*` runs\n // around optional groups backtrack polynomially on adversarial input\n // (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('*')) {\n let rest = trimmed.slice(1).trimStart();\n let priority: ParsedItem['priority'] = null;\n for (const emoji of ['🔴', '🟡', '🟢', '✅']) {\n if (rest.startsWith(emoji)) {\n priority = getPriorityFromEmoji(emoji);\n rest = rest.slice(emoji.length).trimStart();\n break;\n }\n }\n let time: string | null = null;\n const timeMatch = rest.match(/^\\((\\d{1,2}:\\d{2})\\)/);\n if (timeMatch) {\n const [matchedText, matchedTime] = timeMatch;\n if (matchedText !== undefined && matchedTime !== undefined) {\n time = matchedTime;\n rest = rest.slice(matchedText.length).trimStart();\n }\n }\n if (rest) {\n return { text: rest, time, priority, children: [] };\n }\n }\n return { text: trimmed, time: null, priority: null, children: [] };\n}\n\nfunction parseObservations(raw: string): ParsedSection[] {\n // Extracts the text between `<observations>` and `</observations>` (falls\n // back to the whole string when the tags are absent). indexOf instead of a\n // lazy regex to avoid polynomial backtracking on adversarial input\n // (CodeQL js/polynomial-redos).\n const openTag = '<observations>';\n const openIdx = raw.indexOf(openTag);\n const closeIdx = openIdx === -1 ? -1 : raw.indexOf('</observations>', openIdx + openTag.length);\n const content = (closeIdx === -1 ? raw : raw.slice(openIdx + openTag.length, closeIdx)).trim();\n if (!content) return [];\n const lines = content.split('\\n');\n const sections: ParsedSection[] = [];\n let current: ParsedSection | null = null;\n let lastRoot: ParsedItem | null = null;\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n // Extracts a section header of the form `Date: Jul 2, 2026 (today)`,\n // where the parenthesized relative time is optional:\n // → { title: 'Jul 2, 2026', relativeTime: 'today' }.\n // Parsed with string ops instead of a lazy regex with an optional trailing\n // group, which backtracks polynomially (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('Date:')) {\n let title = trimmed.slice('Date:'.length).trim();\n let relativeTime: string | null = null;\n if (title.endsWith(')')) {\n const openParen = title.lastIndexOf('(');\n const inner = openParen === -1 ? '' : title.slice(openParen + 1, -1);\n // `inner` must not contain ')' — mirrors the original `\\(([^)]+)\\)$` semantics\n if (openParen > 0 && inner && !inner.includes(')')) {\n relativeTime = inner.trim();\n title = title.slice(0, openParen).trim();\n }\n }\n if (title) {\n current = { title, relativeTime, items: [] };\n sections.push(current);\n lastRoot = null;\n continue;\n }\n }\n if (!current) {\n current = { title: 'Recent', relativeTime: null, items: [] };\n sections.push(current);\n }\n const indent = line.match(/^(\\s*)/)?.[1]?.length ?? 0;\n const isNested = indent >= 2 && (trimmed.startsWith('* ->') || trimmed.startsWith('->') || trimmed.startsWith('-'));\n const item = parseItem(line);\n if (!item) continue;\n if (isNested && lastRoot) {\n lastRoot.children.push(item);\n continue;\n }\n current.items.push(item);\n lastRoot = item;\n }\n return sections;\n}\n\nfunction ObservationItems({ items, nested = false }: { items: ParsedItem[]; nested?: boolean }) {\n return (\n <div className={nested ? 'space-y-2 border-l border-border pl-4' : 'space-y-3'}>\n {items.map((item, i) => {\n const styles = priorityClasses(item.priority, nested);\n return (\n <div key={`${item.text.slice(0, 20)}-${i}`} className=\"space-y-2\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-12 shrink-0 pt-2 text-right\">\n {item.time && (\n <span className={`font-mono text-meta ${styles.time}`}>{formatObservationTime(item.time)}</span>\n )}\n </div>\n <div className={cn('min-w-0 flex-1 rounded-md border px-3 py-2', styles.card)}>\n <p className={cn('text-body break-words whitespace-pre-wrap', styles.text)}>{item.text}</p>\n {item.children.length > 0 && (\n <div className=\"mt-3\">\n <ObservationItems items={item.children} nested />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ObservationContent({ observations }: { observations: string }) {\n const sections = useMemo(() => parseObservations(observations), [observations]);\n if (sections.length === 0) {\n return <p className=\"text-caption text-muted-foreground italic\">Initialized</p>;\n }\n return (\n <div className=\"space-y-5\">\n {sections.map((section, i) => (\n <section key={`${section.title}-${i}`} className=\"space-y-3\">\n <div className=\"flex items-baseline justify-between gap-3 border-b border-border pb-2\">\n <div className=\"min-w-0\">\n <h3 className=\"text-column text-foreground\">{section.title}</h3>\n {section.relativeTime && <p className=\"text-meta text-muted-foreground\">{section.relativeTime}</p>}\n </div>\n </div>\n <ObservationItems items={section.items} />\n </section>\n ))}\n </div>\n );\n}\n\nfunction ObservationHistoryPanel({\n records,\n selectedRecordId,\n onSelectRecord,\n}: {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n}) {\n if (records.length <= 1) return null;\n\n return (\n <div className=\"flex w-50 min-w-45 flex-col overflow-hidden border-l border-border\">\n <div className=\"border-b border-border px-4 py-2\">\n <p className=\"text-body text-foreground\">History</p>\n </div>\n <div className=\"flex-1 overflow-y-auto\">\n {records.map(record => {\n const isSelected = record.id === selectedRecordId;\n return (\n <button\n key={record.id}\n type=\"button\"\n className={cn(\n 'w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left text-caption text-muted-foreground hover:bg-fill-subtle',\n isSelected && 'border-l-accent1 bg-fill-hover',\n )}\n onClick={() => onSelectRecord(record.id)}\n >\n {record.activeObservations || (\n <span className=\"text-muted-foreground italic\">\n {record.isObserving || record.isReflecting ? 'Processing\\u2026' : 'Initialized'}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface ObservationDetailViewProps {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n isLoading?: boolean;\n}\n\nexport function ObservationDetailView({\n records,\n selectedRecordId,\n onSelectRecord,\n isLoading,\n}: ObservationDetailViewProps) {\n const [showDiff, setShowDiff] = useState(false);\n\n const sorted = useMemo(\n () => [...records].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()),\n [records],\n );\n\n const selected = selectedRecordId ? sorted.find(r => r.id === selectedRecordId) : sorted[sorted.length - 1];\n const selectedIndex = selected ? sorted.findIndex(r => r.id === selected.id) : -1;\n const previousRecord = selectedIndex > 0 ? sorted[selectedIndex - 1] : null;\n\n useEffect(() => {\n const last = sorted.at(-1);\n if (!selectedRecordId && last) {\n onSelectRecord(last.id);\n }\n }, [selectedRecordId, sorted, onSelectRecord]);\n\n if (isLoading) {\n return (\n <div className=\"space-y-4 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-32 w-full\" />\n </div>\n );\n }\n\n if (!selected) {\n return (\n <EmptyState\n titleSlot=\"No observations\"\n descriptionSlot=\"No observational memory snapshots available for this thread.\"\n variant=\"fill\"\n />\n );\n }\n\n const activeObservations = typeof selected.activeObservations === 'string' ? selected.activeObservations : '';\n\n return (\n <div className=\"flex size-full overflow-hidden\">\n {/* Main observation content */}\n <div className=\"flex min-w-0 flex-1 flex-col overflow-hidden\">\n {previousRecord && (\n <div className=\"border-b border-border px-4 py-2\">\n <div className=\"flex items-start justify-end gap-3\">\n <label className=\"flex cursor-pointer items-center gap-1.5 text-caption\">\n <Checkbox checked={showDiff} onCheckedChange={v => setShowDiff(v === true)} />\n <span className=\"text-caption text-muted-foreground\">Show diff</span>\n </label>\n </div>\n </div>\n )}\n\n <div data-testid=\"observation-detail-body\" className=\"flex-1 overflow-y-auto p-4\">\n {showDiff && previousRecord ? (\n <CodeDiff\n codeA={typeof previousRecord.activeObservations === 'string' ? previousRecord.activeObservations : ''}\n codeB={activeObservations}\n />\n ) : activeObservations ? (\n <ObservationContent observations={activeObservations} />\n ) : (\n <p className=\"text-caption text-muted-foreground italic\">\n {selected.isObserving || selected.isReflecting ? 'Processing…' : 'Initialized'}\n </p>\n )}\n </div>\n </div>\n\n {/* History sidebar */}\n <ObservationHistoryPanel records={sorted} selectedRecordId={selected.id} onSelectRecord={onSelectRecord} />\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -14,8 +14,8 @@ function ProgressBar({
14
14
  }) {
15
15
  const percent = Math.max(0, Math.min(100, value / max * 100));
16
16
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils_cn.cn("min-w-0 flex-1", tones.toneClass[tone]), children: [
17
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-muted-foreground text-meta mb-1 flex items-center justify-between gap-2 font-mono", children: [
18
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground tracking-wide uppercase", children: label }),
17
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex items-center justify-between gap-2 font-mono text-meta text-muted-foreground", children: [
18
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tracking-wide text-foreground uppercase", children: label }),
19
19
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground tabular-nums", children: [
20
20
  tones.formatCompactTokens(value),
21
21
  "/",
@@ -38,7 +38,7 @@ function ThreadContextProgress({
38
38
  if (!showMessages && !showMemory) {
39
39
  return null;
40
40
  }
41
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border border-b px-3 py-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 sm:flex-row", children: [
41
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-border px-3 py-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 sm:flex-row", children: [
42
42
  showMessages ? /* @__PURE__ */ jsxRuntime.jsx(ProgressBar, { label: "Messages", value: messageTokens, max: messageThreshold, tone: "messages" }) : null,
43
43
  showMemory ? /* @__PURE__ */ jsxRuntime.jsx(ProgressBar, { label: memoryLabel, value: memoryTokens, max: memoryThreshold, tone: "memory" }) : null
44
44
  ] }) });
@@ -1 +1 @@
1
- {"version":3,"file":"thread-context-progress.cjs.js","sources":["../../../../src/domains/memory/components/thread-context-progress.tsx"],"sourcesContent":["import { formatCompactTokens } from '@/ds/components/TokenBudget/format-tokens';\nimport { toneClass } from '@/ds/components/TokenBudget/tones';\nimport type { TokenBudgetTone } from '@/ds/components/TokenBudget/tones';\nimport { cn } from '@/lib/utils';\n\ninterface ThreadContextProgressProps {\n messageTokens?: number;\n messageThreshold?: number;\n memoryTokens?: number;\n memoryThreshold?: number;\n /** Label for the second (memory-toned) bar. Defaults to \"Memory\". */\n memoryLabel?: string;\n}\n\nfunction ProgressBar({\n label,\n value,\n max,\n tone,\n}: {\n label: string;\n value: number;\n max: number;\n tone: TokenBudgetTone;\n}) {\n const percent = Math.max(0, Math.min(100, (value / max) * 100));\n\n return (\n <div className={cn('min-w-0 flex-1', toneClass[tone])}>\n <div className=\"text-muted-foreground text-meta mb-1 flex items-center justify-between gap-2 font-mono\">\n <span className=\"text-foreground tracking-wide uppercase\">{label}</span>\n <span className=\"text-muted-foreground tabular-nums\">\n {formatCompactTokens(value)}/{formatCompactTokens(max)}k\n </span>\n </div>\n <div className=\"h-1.5 overflow-hidden rounded-full bg-white/[0.08]\">\n <div className=\"h-full rounded-full bg-current/80\" style={{ width: `${percent}%` }} />\n </div>\n </div>\n );\n}\n\nexport function ThreadContextProgress({\n messageTokens,\n messageThreshold,\n memoryTokens,\n memoryThreshold,\n memoryLabel = 'Memory',\n}: ThreadContextProgressProps) {\n const showMessages = messageTokens != null && messageThreshold != null && messageThreshold > 0;\n const showMemory = memoryTokens != null && memoryThreshold != null && memoryThreshold > 0;\n\n if (!showMessages && !showMemory) {\n return null;\n }\n\n return (\n <div className=\"border-border border-b px-3 py-2\">\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n {showMessages ? (\n <ProgressBar label=\"Messages\" value={messageTokens} max={messageThreshold} tone=\"messages\" />\n ) : null}\n {showMemory ? (\n <ProgressBar label={memoryLabel} value={memoryTokens} max={memoryThreshold} tone=\"memory\" />\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["jsxs","cn","toneClass","jsx","formatCompactTokens"],"mappings":";;;;;;;;AAcA,SAAS,WAAA,CAAY;AAAA,EACnB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,GAAA,EAAM,KAAA,GAAQ,GAAA,GAAO,GAAG,CAAC,CAAA;AAE9D,EAAA,uBACEA,eAAA,CAAC,SAAI,SAAA,EAAWC,WAAA,CAAG,kBAAkBC,eAAA,CAAU,IAAI,CAAC,CAAA,EAClD,QAAA,EAAA;AAAA,oBAAAF,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wFAAA,EACb,QAAA,EAAA;AAAA,sBAAAG,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACjEH,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,QAAAI,yBAAA,CAAoB,KAAK,CAAA;AAAA,QAAE,GAAA;AAAA,QAAEA,0BAAoB,GAAG,CAAA;AAAA,QAAE;AAAA,OAAA,EACzD;AAAA,KAAA,EACF,CAAA;AAAA,oBACAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACb,yCAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAoC,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA,IAAO,CAAA,EACtF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAA+B;AAC7B,EAAA,MAAM,YAAA,GAAe,aAAA,IAAiB,IAAA,IAAQ,gBAAA,IAAoB,QAAQ,gBAAA,GAAmB,CAAA;AAC7F,EAAA,MAAM,UAAA,GAAa,YAAA,IAAgB,IAAA,IAAQ,eAAA,IAAmB,QAAQ,eAAA,GAAkB,CAAA;AAExF,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,UAAA,EAAY;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,oCACb,QAAA,kBAAAH,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACZ,QAAA,EAAA;AAAA,IAAA,YAAA,mBACCG,cAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,UAAA,EAAW,KAAA,EAAO,eAAe,GAAA,EAAK,gBAAA,EAAkB,IAAA,EAAK,UAAA,EAAW,CAAA,GACzF,IAAA;AAAA,IACH,UAAA,mBACCA,cAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,eAAA,EAAiB,IAAA,EAAK,QAAA,EAAS,CAAA,GACxF;AAAA,GAAA,EACN,CAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"thread-context-progress.cjs.js","sources":["../../../../src/domains/memory/components/thread-context-progress.tsx"],"sourcesContent":["import { formatCompactTokens } from '@/ds/components/TokenBudget/format-tokens';\nimport { toneClass } from '@/ds/components/TokenBudget/tones';\nimport type { TokenBudgetTone } from '@/ds/components/TokenBudget/tones';\nimport { cn } from '@/lib/utils';\n\ninterface ThreadContextProgressProps {\n messageTokens?: number;\n messageThreshold?: number;\n memoryTokens?: number;\n memoryThreshold?: number;\n /** Label for the second (memory-toned) bar. Defaults to \"Memory\". */\n memoryLabel?: string;\n}\n\nfunction ProgressBar({\n label,\n value,\n max,\n tone,\n}: {\n label: string;\n value: number;\n max: number;\n tone: TokenBudgetTone;\n}) {\n const percent = Math.max(0, Math.min(100, (value / max) * 100));\n\n return (\n <div className={cn('min-w-0 flex-1', toneClass[tone])}>\n <div className=\"mb-1 flex items-center justify-between gap-2 font-mono text-meta text-muted-foreground\">\n <span className=\"tracking-wide text-foreground uppercase\">{label}</span>\n <span className=\"text-muted-foreground tabular-nums\">\n {formatCompactTokens(value)}/{formatCompactTokens(max)}k\n </span>\n </div>\n <div className=\"h-1.5 overflow-hidden rounded-full bg-white/[0.08]\">\n <div className=\"h-full rounded-full bg-current/80\" style={{ width: `${percent}%` }} />\n </div>\n </div>\n );\n}\n\nexport function ThreadContextProgress({\n messageTokens,\n messageThreshold,\n memoryTokens,\n memoryThreshold,\n memoryLabel = 'Memory',\n}: ThreadContextProgressProps) {\n const showMessages = messageTokens != null && messageThreshold != null && messageThreshold > 0;\n const showMemory = memoryTokens != null && memoryThreshold != null && memoryThreshold > 0;\n\n if (!showMessages && !showMemory) {\n return null;\n }\n\n return (\n <div className=\"border-b border-border px-3 py-2\">\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n {showMessages ? (\n <ProgressBar label=\"Messages\" value={messageTokens} max={messageThreshold} tone=\"messages\" />\n ) : null}\n {showMemory ? (\n <ProgressBar label={memoryLabel} value={memoryTokens} max={memoryThreshold} tone=\"memory\" />\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["jsxs","cn","toneClass","jsx","formatCompactTokens"],"mappings":";;;;;;;;AAcA,SAAS,WAAA,CAAY;AAAA,EACnB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,GAAA,EAAM,KAAA,GAAQ,GAAA,GAAO,GAAG,CAAC,CAAA;AAE9D,EAAA,uBACEA,eAAA,CAAC,SAAI,SAAA,EAAWC,WAAA,CAAG,kBAAkBC,eAAA,CAAU,IAAI,CAAC,CAAA,EAClD,QAAA,EAAA;AAAA,oBAAAF,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wFAAA,EACb,QAAA,EAAA;AAAA,sBAAAG,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACjEH,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,QAAAI,yBAAA,CAAoB,KAAK,CAAA;AAAA,QAAE,GAAA;AAAA,QAAEA,0BAAoB,GAAG,CAAA;AAAA,QAAE;AAAA,OAAA,EACzD;AAAA,KAAA,EACF,CAAA;AAAA,oBACAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACb,yCAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAoC,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA,IAAO,CAAA,EACtF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAA+B;AAC7B,EAAA,MAAM,YAAA,GAAe,aAAA,IAAiB,IAAA,IAAQ,gBAAA,IAAoB,QAAQ,gBAAA,GAAmB,CAAA;AAC7F,EAAA,MAAM,UAAA,GAAa,YAAA,IAAgB,IAAA,IAAQ,eAAA,IAAmB,QAAQ,eAAA,GAAkB,CAAA;AAExF,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,UAAA,EAAY;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,oCACb,QAAA,kBAAAH,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACZ,QAAA,EAAA;AAAA,IAAA,YAAA,mBACCG,cAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,UAAA,EAAW,KAAA,EAAO,eAAe,GAAA,EAAK,gBAAA,EAAkB,IAAA,EAAK,UAAA,EAAW,CAAA,GACzF,IAAA;AAAA,IACH,UAAA,mBACCA,cAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,eAAA,EAAiB,IAAA,EAAK,QAAA,EAAS,CAAA,GACxF;AAAA,GAAA,EACN,CAAA,EACF,CAAA;AAEJ;;;;"}