@workflow/web-shared 5.0.0-beta.4 → 5.0.0-beta.40

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 (517) hide show
  1. package/README.md +5 -13
  2. package/dist/components/error-boundary.js +1 -1
  3. package/dist/components/event-list-view.d.ts +46 -1
  4. package/dist/components/event-list-view.d.ts.map +1 -1
  5. package/dist/components/event-list-view.js +235 -97
  6. package/dist/components/hook-actions.js +1 -1
  7. package/dist/components/index.d.ts +8 -5
  8. package/dist/components/index.d.ts.map +1 -1
  9. package/dist/components/index.js +6 -4
  10. package/dist/components/sidebar/attribute-panel.d.ts +4 -1
  11. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  12. package/dist/components/sidebar/attribute-panel.js +173 -119
  13. package/dist/components/sidebar/attributes-block.d.ts +40 -0
  14. package/dist/components/sidebar/attributes-block.d.ts.map +1 -0
  15. package/dist/components/sidebar/attributes-block.js +140 -0
  16. package/dist/components/sidebar/conversation-view.js +1 -1
  17. package/dist/components/sidebar/copyable-data-block.d.ts +2 -0
  18. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  19. package/dist/components/sidebar/copyable-data-block.js +17 -16
  20. package/dist/components/sidebar/entity-detail-panel.d.ts +11 -11
  21. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  22. package/dist/components/sidebar/entity-detail-panel.js +37 -71
  23. package/dist/components/sidebar/events-list.d.ts +6 -2
  24. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  25. package/dist/components/sidebar/events-list.js +77 -63
  26. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  27. package/dist/components/sidebar/sidebar-data-context.d.ts +10 -7
  28. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
  29. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  30. package/dist/components/sidebar/span-detail-merge.d.ts +31 -0
  31. package/dist/components/sidebar/span-detail-merge.d.ts.map +1 -0
  32. package/dist/components/sidebar/span-detail-merge.js +92 -0
  33. package/dist/components/sidebar/use-selected-span-detail.d.ts +16 -0
  34. package/dist/components/sidebar/use-selected-span-detail.d.ts.map +1 -0
  35. package/dist/components/sidebar/use-selected-span-detail.js +93 -0
  36. package/dist/components/stream-viewer-skeleton.d.ts +2 -0
  37. package/dist/components/stream-viewer-skeleton.d.ts.map +1 -0
  38. package/dist/components/stream-viewer-skeleton.js +12 -0
  39. package/dist/components/stream-viewer.d.ts +1 -1
  40. package/dist/components/stream-viewer.d.ts.map +1 -1
  41. package/dist/components/stream-viewer.js +9 -26
  42. package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
  43. package/dist/components/trace-viewer/components/copy-button.js +27 -0
  44. package/dist/components/trace-viewer/components/detail-panel-width.d.ts +34 -0
  45. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
  46. package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
  47. package/dist/components/trace-viewer/components/detail-panel.d.ts +14 -0
  48. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
  49. package/dist/components/trace-viewer/components/detail-panel.js +122 -0
  50. package/dist/components/trace-viewer/components/draggable-border.d.ts +31 -0
  51. package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
  52. package/dist/components/trace-viewer/components/draggable-border.js +140 -0
  53. package/dist/components/trace-viewer/components/event-list.d.ts +10 -0
  54. package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
  55. package/dist/components/trace-viewer/components/event-list.js +47 -0
  56. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  57. package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  58. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  59. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  60. package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +1 -1
  61. package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  62. package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
  63. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  64. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  65. package/dist/components/trace-viewer/components/minimap.d.ts +14 -0
  66. package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
  67. package/dist/components/trace-viewer/components/minimap.js +337 -0
  68. package/dist/components/trace-viewer/components/pane-constants.d.ts +14 -0
  69. package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
  70. package/dist/components/trace-viewer/components/pane-constants.js +16 -0
  71. package/dist/components/trace-viewer/components/span-markers.d.ts +46 -0
  72. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
  73. package/dist/components/trace-viewer/components/span-markers.js +85 -0
  74. package/dist/components/trace-viewer/components/split-pane.d.ts +10 -0
  75. package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
  76. package/dist/components/trace-viewer/components/split-pane.js +41 -0
  77. package/dist/components/trace-viewer/components/timeline.d.ts +42 -0
  78. package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
  79. package/dist/components/trace-viewer/components/timeline.js +321 -0
  80. package/dist/components/trace-viewer/components/timeline.module.css +46 -0
  81. package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts +5 -0
  82. package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
  83. package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
  84. package/dist/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
  85. package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
  86. package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
  87. package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
  88. package/dist/components/trace-viewer/components/use-element-width.d.ts +8 -0
  89. package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
  90. package/dist/components/trace-viewer/components/use-element-width.js +25 -0
  91. package/dist/components/trace-viewer/components/use-row-window.d.ts +34 -0
  92. package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
  93. package/dist/components/trace-viewer/components/use-row-window.js +107 -0
  94. package/dist/components/trace-viewer/context.d.ts +14 -182
  95. package/dist/components/trace-viewer/context.d.ts.map +1 -1
  96. package/dist/components/trace-viewer/context.js +44 -351
  97. package/dist/components/trace-viewer/icons.d.ts.map +1 -0
  98. package/dist/components/trace-viewer/icons.js +15 -0
  99. package/dist/components/trace-viewer/search.d.ts +19 -0
  100. package/dist/components/trace-viewer/search.d.ts.map +1 -0
  101. package/dist/components/trace-viewer/search.js +134 -0
  102. package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
  103. package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
  104. package/dist/components/trace-viewer/trace-viewer.js +306 -356
  105. package/dist/components/trace-viewer/types.d.ts +2 -211
  106. package/dist/components/trace-viewer/types.d.ts.map +1 -1
  107. package/dist/components/trace-viewer/types.js +1 -1
  108. package/dist/components/trace-viewer/util/timing.d.ts +2 -2
  109. package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
  110. package/dist/components/trace-viewer/util/timing.js +3 -3
  111. package/dist/components/trace-viewer/utils.d.ts +111 -0
  112. package/dist/components/trace-viewer/utils.d.ts.map +1 -0
  113. package/dist/components/trace-viewer/utils.js +430 -0
  114. package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +7 -3
  115. package/dist/components/trace-viewer.d.ts.map +1 -0
  116. package/dist/components/trace-viewer.js +21 -0
  117. package/dist/components/ui/alert.js +3 -3
  118. package/dist/components/ui/button.d.ts +10 -0
  119. package/dist/components/ui/button.d.ts.map +1 -0
  120. package/dist/components/ui/button.js +46 -0
  121. package/dist/components/ui/card.d.ts.map +1 -1
  122. package/dist/components/ui/card.js +4 -4
  123. package/dist/components/ui/collapsible.d.ts +46 -0
  124. package/dist/components/ui/collapsible.d.ts.map +1 -0
  125. package/dist/components/ui/collapsible.js +66 -0
  126. package/dist/components/ui/context-card.d.ts +47 -0
  127. package/dist/components/ui/context-card.d.ts.map +1 -0
  128. package/dist/components/ui/context-card.js +471 -0
  129. package/dist/components/ui/data-inspector.d.ts +7 -6
  130. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  131. package/dist/components/ui/data-inspector.js +232 -99
  132. package/dist/components/ui/data-inspector.styles.d.ts +29 -0
  133. package/dist/components/ui/data-inspector.styles.d.ts.map +1 -0
  134. package/dist/components/ui/data-inspector.styles.js +95 -0
  135. package/dist/components/ui/decrypt-button.js +1 -1
  136. package/dist/components/ui/error-card.js +3 -3
  137. package/dist/components/ui/error-stack-block.d.ts +17 -10
  138. package/dist/components/ui/error-stack-block.d.ts.map +1 -1
  139. package/dist/components/ui/error-stack-block.js +49 -30
  140. package/dist/components/ui/icon-button.d.ts +19 -0
  141. package/dist/components/ui/icon-button.d.ts.map +1 -0
  142. package/dist/components/ui/icon-button.js +29 -0
  143. package/dist/components/ui/kbd.d.ts +10 -0
  144. package/dist/components/ui/kbd.d.ts.map +1 -0
  145. package/dist/components/ui/kbd.js +25 -0
  146. package/dist/components/ui/load-more-button.js +1 -1
  147. package/dist/components/ui/menu-dropdown.js +1 -1
  148. package/dist/components/ui/skeleton.js +2 -2
  149. package/dist/components/ui/spinner.js +1 -1
  150. package/dist/components/ui/timestamp-tooltip.d.ts +34 -1
  151. package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
  152. package/dist/components/ui/timestamp-tooltip.js +80 -132
  153. package/dist/components/ui/tooltip.d.ts +10 -0
  154. package/dist/components/ui/tooltip.d.ts.map +1 -0
  155. package/dist/components/ui/tooltip.js +12 -0
  156. package/dist/components/workflow-traces/event-colors.d.ts +2 -1
  157. package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
  158. package/dist/components/workflow-traces/event-colors.js +15 -7
  159. package/dist/components/workflow-traces/trace-span-construction.d.ts +6 -3
  160. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  161. package/dist/components/workflow-traces/trace-span-construction.js +71 -30
  162. package/dist/components/workflow-traces/trace-time-utils.js +1 -1
  163. package/dist/hooks/use-dark-mode.js +1 -1
  164. package/dist/hooks/use-intersection-observer.d.ts +17 -0
  165. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  166. package/dist/hooks/use-intersection-observer.js +29 -0
  167. package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
  168. package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
  169. package/dist/hooks/use-load-more-on-scroll.js +28 -0
  170. package/dist/hooks/use-reduced-motion.d.ts +10 -0
  171. package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
  172. package/dist/hooks/use-reduced-motion.js +29 -0
  173. package/dist/index.d.ts +4 -3
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +4 -3
  176. package/dist/lib/cn.d.ts +10 -0
  177. package/dist/lib/cn.d.ts.map +1 -0
  178. package/dist/lib/cn.js +83 -0
  179. package/dist/lib/event-analysis.d.ts +1 -1
  180. package/dist/lib/event-analysis.d.ts.map +1 -1
  181. package/dist/lib/event-analysis.js +3 -2
  182. package/dist/lib/event-materialization.d.ts +1 -1
  183. package/dist/lib/event-materialization.d.ts.map +1 -1
  184. package/dist/lib/event-materialization.js +29 -21
  185. package/dist/lib/exact-event-search-id.d.ts +25 -0
  186. package/dist/lib/exact-event-search-id.d.ts.map +1 -0
  187. package/dist/lib/exact-event-search-id.js +39 -0
  188. package/dist/lib/hydration.d.ts +17 -2
  189. package/dist/lib/hydration.d.ts.map +1 -1
  190. package/dist/lib/hydration.js +194 -23
  191. package/dist/lib/stream-display.js +1 -1
  192. package/dist/lib/toast.js +1 -1
  193. package/dist/lib/trace-builder.d.ts +17 -5
  194. package/dist/lib/trace-builder.d.ts.map +1 -1
  195. package/dist/lib/trace-builder.js +32 -14
  196. package/dist/lib/trace-types.d.ts +54 -0
  197. package/dist/lib/trace-types.d.ts.map +1 -0
  198. package/dist/lib/trace-types.js +2 -0
  199. package/dist/lib/utils.d.ts +14 -2
  200. package/dist/lib/utils.d.ts.map +1 -1
  201. package/dist/lib/utils.js +46 -6
  202. package/dist/lib/zstd-browser-decoder.d.ts +7 -0
  203. package/dist/lib/zstd-browser-decoder.d.ts.map +1 -0
  204. package/dist/lib/zstd-browser-decoder.js +41 -0
  205. package/dist/styles.css +210 -139
  206. package/package.json +11 -8
  207. package/src/components/event-list-view.tsx +385 -123
  208. package/src/components/index.ts +14 -8
  209. package/src/components/sidebar/attribute-panel.tsx +331 -282
  210. package/src/components/sidebar/attributes-block.tsx +326 -0
  211. package/src/components/sidebar/copyable-data-block.tsx +50 -28
  212. package/src/components/sidebar/entity-detail-panel.tsx +92 -126
  213. package/src/components/sidebar/events-list.tsx +197 -179
  214. package/src/components/sidebar/sidebar-data-context.tsx +11 -11
  215. package/src/components/sidebar/span-detail-merge.ts +134 -0
  216. package/src/components/sidebar/use-selected-span-detail.ts +146 -0
  217. package/src/components/stream-viewer-skeleton.tsx +34 -0
  218. package/src/components/stream-viewer.tsx +34 -106
  219. package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +2 -2
  220. package/src/components/trace-viewer/components/detail-panel-width.test.ts +123 -0
  221. package/src/components/trace-viewer/components/detail-panel-width.ts +76 -0
  222. package/src/components/trace-viewer/components/detail-panel.tsx +273 -0
  223. package/src/components/trace-viewer/components/draggable-border.tsx +216 -0
  224. package/src/components/trace-viewer/components/event-list.tsx +144 -0
  225. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +8 -8
  226. package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +1 -1
  227. package/src/components/trace-viewer/components/minimap.tsx +556 -0
  228. package/src/components/trace-viewer/components/pane-constants.ts +19 -0
  229. package/src/components/trace-viewer/components/span-markers.tsx +173 -0
  230. package/src/components/trace-viewer/components/split-pane.tsx +141 -0
  231. package/src/components/trace-viewer/components/timeline.module.css +46 -0
  232. package/src/components/trace-viewer/components/timeline.tsx +850 -0
  233. package/src/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
  234. package/src/components/trace-viewer/components/trace-shortcut-helper.tsx +116 -0
  235. package/src/components/trace-viewer/components/trace-viewer-skeleton.tsx +114 -0
  236. package/src/components/trace-viewer/components/use-element-width.ts +29 -0
  237. package/src/components/trace-viewer/components/use-row-window.ts +140 -0
  238. package/src/components/trace-viewer/context.tsx +63 -656
  239. package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +2 -2
  240. package/src/components/trace-viewer/search.ts +178 -0
  241. package/src/components/trace-viewer/trace-viewer.tsx +563 -531
  242. package/src/components/trace-viewer/types.ts +2 -234
  243. package/src/components/trace-viewer/util/timing.ts +2 -2
  244. package/src/components/trace-viewer/utils.test.ts +458 -0
  245. package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +271 -50
  246. package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +24 -18
  247. package/src/components/ui/alert.tsx +2 -2
  248. package/src/components/ui/button.tsx +68 -0
  249. package/src/components/ui/card.tsx +3 -10
  250. package/src/components/ui/collapsible.tsx +219 -0
  251. package/src/components/ui/context-card.tsx +784 -0
  252. package/src/components/ui/data-inspector.styles.ts +96 -0
  253. package/src/components/ui/data-inspector.tsx +501 -204
  254. package/src/components/ui/error-card.tsx +4 -4
  255. package/src/components/ui/error-stack-block.tsx +84 -55
  256. package/src/components/ui/icon-button.tsx +53 -0
  257. package/src/components/ui/kbd.tsx +43 -0
  258. package/src/components/ui/skeleton.tsx +1 -1
  259. package/src/components/ui/timestamp-tooltip.tsx +132 -194
  260. package/src/components/ui/tooltip.tsx +47 -0
  261. package/src/components/workflow-traces/event-colors.ts +15 -11
  262. package/src/components/workflow-traces/trace-span-construction.test.ts +85 -0
  263. package/src/components/workflow-traces/trace-span-construction.ts +97 -32
  264. package/src/hooks/use-intersection-observer.ts +57 -0
  265. package/src/hooks/use-load-more-on-scroll.ts +49 -0
  266. package/src/hooks/use-reduced-motion.ts +34 -0
  267. package/src/index.ts +10 -4
  268. package/src/lib/cn.ts +93 -0
  269. package/src/lib/event-analysis.ts +6 -4
  270. package/src/lib/event-materialization.ts +35 -21
  271. package/src/lib/exact-event-search-id.ts +67 -0
  272. package/src/lib/hydration.ts +210 -30
  273. package/src/lib/trace-builder.ts +43 -19
  274. package/src/lib/trace-types.ts +56 -0
  275. package/src/lib/utils.test.ts +33 -0
  276. package/src/lib/utils.ts +53 -6
  277. package/src/lib/zstd-browser-decoder.ts +42 -0
  278. package/src/styles.css +210 -139
  279. package/dist/components/error-boundary.js.map +0 -1
  280. package/dist/components/event-list-view.js.map +0 -1
  281. package/dist/components/hook-actions.js.map +0 -1
  282. package/dist/components/index.js.map +0 -1
  283. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +0 -1
  284. package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
  285. package/dist/components/new-trace-viewer/components/copy-button.js.map +0 -1
  286. package/dist/components/new-trace-viewer/components/event-list.d.ts +0 -8
  287. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
  288. package/dist/components/new-trace-viewer/components/event-list.js +0 -38
  289. package/dist/components/new-trace-viewer/components/event-list.js.map +0 -1
  290. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
  291. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
  292. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js.map +0 -1
  293. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
  294. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
  295. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js.map +0 -1
  296. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
  297. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
  298. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js.map +0 -1
  299. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
  300. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
  301. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js.map +0 -1
  302. package/dist/components/new-trace-viewer/components/split-pane.d.ts +0 -14
  303. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
  304. package/dist/components/new-trace-viewer/components/split-pane.js +0 -99
  305. package/dist/components/new-trace-viewer/components/split-pane.js.map +0 -1
  306. package/dist/components/new-trace-viewer/components/timeline.d.ts +0 -31
  307. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
  308. package/dist/components/new-trace-viewer/components/timeline.js +0 -138
  309. package/dist/components/new-trace-viewer/components/timeline.js.map +0 -1
  310. package/dist/components/new-trace-viewer/context.d.ts +0 -15
  311. package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
  312. package/dist/components/new-trace-viewer/context.js +0 -47
  313. package/dist/components/new-trace-viewer/context.js.map +0 -1
  314. package/dist/components/new-trace-viewer/detail-panel.d.ts +0 -10
  315. package/dist/components/new-trace-viewer/detail-panel.d.ts.map +0 -1
  316. package/dist/components/new-trace-viewer/detail-panel.js +0 -12
  317. package/dist/components/new-trace-viewer/detail-panel.js.map +0 -1
  318. package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
  319. package/dist/components/new-trace-viewer/icons.js +0 -15
  320. package/dist/components/new-trace-viewer/icons.js.map +0 -1
  321. package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -8
  322. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
  323. package/dist/components/new-trace-viewer/trace-viewer.js +0 -349
  324. package/dist/components/new-trace-viewer/trace-viewer.js.map +0 -1
  325. package/dist/components/new-trace-viewer/types.d.ts +0 -1
  326. package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
  327. package/dist/components/new-trace-viewer/types.js +0 -2
  328. package/dist/components/new-trace-viewer/types.js.map +0 -1
  329. package/dist/components/new-trace-viewer/util/constants.d.ts +0 -1
  330. package/dist/components/new-trace-viewer/util/constants.d.ts.map +0 -1
  331. package/dist/components/new-trace-viewer/util/constants.js +0 -2
  332. package/dist/components/new-trace-viewer/util/constants.js.map +0 -1
  333. package/dist/components/new-trace-viewer/utils.d.ts +0 -42
  334. package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
  335. package/dist/components/new-trace-viewer/utils.js +0 -305
  336. package/dist/components/new-trace-viewer/utils.js.map +0 -1
  337. package/dist/components/run-trace-view.d.ts +0 -25
  338. package/dist/components/run-trace-view.d.ts.map +0 -1
  339. package/dist/components/run-trace-view.js +0 -11
  340. package/dist/components/run-trace-view.js.map +0 -1
  341. package/dist/components/sidebar/attribute-panel.js.map +0 -1
  342. package/dist/components/sidebar/conversation-view.js.map +0 -1
  343. package/dist/components/sidebar/copyable-data-block.js.map +0 -1
  344. package/dist/components/sidebar/detail-card.d.ts +0 -14
  345. package/dist/components/sidebar/detail-card.d.ts.map +0 -1
  346. package/dist/components/sidebar/detail-card.js +0 -20
  347. package/dist/components/sidebar/detail-card.js.map +0 -1
  348. package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
  349. package/dist/components/sidebar/events-list.js.map +0 -1
  350. package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
  351. package/dist/components/sidebar/sidebar-data-context.js.map +0 -1
  352. package/dist/components/stream-viewer.js.map +0 -1
  353. package/dist/components/trace-viewer/components/map.d.ts +0 -8
  354. package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
  355. package/dist/components/trace-viewer/components/map.js +0 -162
  356. package/dist/components/trace-viewer/components/map.js.map +0 -1
  357. package/dist/components/trace-viewer/components/markers.d.ts +0 -23
  358. package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
  359. package/dist/components/trace-viewer/components/markers.js +0 -416
  360. package/dist/components/trace-viewer/components/markers.js.map +0 -1
  361. package/dist/components/trace-viewer/components/node.d.ts +0 -35
  362. package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
  363. package/dist/components/trace-viewer/components/node.js +0 -285
  364. package/dist/components/trace-viewer/components/node.js.map +0 -1
  365. package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
  366. package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
  367. package/dist/components/trace-viewer/components/search-input.js +0 -9
  368. package/dist/components/trace-viewer/components/search-input.js.map +0 -1
  369. package/dist/components/trace-viewer/components/search.d.ts +0 -3
  370. package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
  371. package/dist/components/trace-viewer/components/search.js +0 -25
  372. package/dist/components/trace-viewer/components/search.js.map +0 -1
  373. package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
  374. package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
  375. package/dist/components/trace-viewer/components/span-content.js +0 -137
  376. package/dist/components/trace-viewer/components/span-content.js.map +0 -1
  377. package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
  378. package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
  379. package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
  380. package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
  381. package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
  382. package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
  383. package/dist/components/trace-viewer/components/span-segments.js +0 -445
  384. package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
  385. package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
  386. package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
  387. package/dist/components/trace-viewer/components/span-strategies.js +0 -108
  388. package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
  389. package/dist/components/trace-viewer/components/ui.d.ts +0 -28
  390. package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
  391. package/dist/components/trace-viewer/components/ui.js +0 -39
  392. package/dist/components/trace-viewer/components/ui.js.map +0 -1
  393. package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
  394. package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
  395. package/dist/components/trace-viewer/components/zoom-button.js +0 -29
  396. package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
  397. package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
  398. package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
  399. package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
  400. package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
  401. package/dist/components/trace-viewer/context.js.map +0 -1
  402. package/dist/components/trace-viewer/index.d.ts +0 -5
  403. package/dist/components/trace-viewer/index.d.ts.map +0 -1
  404. package/dist/components/trace-viewer/index.js +0 -4
  405. package/dist/components/trace-viewer/index.js.map +0 -1
  406. package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
  407. package/dist/components/trace-viewer/trace-viewer.module.css +0 -1465
  408. package/dist/components/trace-viewer/types.js.map +0 -1
  409. package/dist/components/trace-viewer/util/constants.d.ts +0 -9
  410. package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
  411. package/dist/components/trace-viewer/util/constants.js +0 -9
  412. package/dist/components/trace-viewer/util/constants.js.map +0 -1
  413. package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
  414. package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
  415. package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
  416. package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
  417. package/dist/components/trace-viewer/util/timing.js.map +0 -1
  418. package/dist/components/trace-viewer/util/tree.d.ts +0 -13
  419. package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
  420. package/dist/components/trace-viewer/util/tree.js +0 -227
  421. package/dist/components/trace-viewer/util/tree.js.map +0 -1
  422. package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
  423. package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
  424. package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
  425. package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
  426. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
  427. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
  428. package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
  429. package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
  430. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
  431. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
  432. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
  433. package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
  434. package/dist/components/trace-viewer/worker.d.ts +0 -2
  435. package/dist/components/trace-viewer/worker.d.ts.map +0 -1
  436. package/dist/components/trace-viewer/worker.js +0 -109
  437. package/dist/components/trace-viewer/worker.js.map +0 -1
  438. package/dist/components/trace-viewer-new.d.ts.map +0 -1
  439. package/dist/components/trace-viewer-new.js +0 -23
  440. package/dist/components/trace-viewer-new.js.map +0 -1
  441. package/dist/components/ui/alert.js.map +0 -1
  442. package/dist/components/ui/card.js.map +0 -1
  443. package/dist/components/ui/data-inspector.js.map +0 -1
  444. package/dist/components/ui/decrypt-button.js.map +0 -1
  445. package/dist/components/ui/error-card.js.map +0 -1
  446. package/dist/components/ui/error-stack-block.js.map +0 -1
  447. package/dist/components/ui/inspector-theme.d.ts +0 -95
  448. package/dist/components/ui/inspector-theme.d.ts.map +0 -1
  449. package/dist/components/ui/inspector-theme.js +0 -82
  450. package/dist/components/ui/inspector-theme.js.map +0 -1
  451. package/dist/components/ui/load-more-button.js.map +0 -1
  452. package/dist/components/ui/menu-dropdown.js.map +0 -1
  453. package/dist/components/ui/skeleton.js.map +0 -1
  454. package/dist/components/ui/spinner.js.map +0 -1
  455. package/dist/components/ui/timestamp-tooltip.js.map +0 -1
  456. package/dist/components/workflow-trace-view.d.ts +0 -40
  457. package/dist/components/workflow-trace-view.d.ts.map +0 -1
  458. package/dist/components/workflow-trace-view.js +0 -695
  459. package/dist/components/workflow-trace-view.js.map +0 -1
  460. package/dist/components/workflow-traces/event-colors.js.map +0 -1
  461. package/dist/components/workflow-traces/trace-colors.d.ts +0 -15
  462. package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
  463. package/dist/components/workflow-traces/trace-colors.js +0 -87
  464. package/dist/components/workflow-traces/trace-colors.js.map +0 -1
  465. package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
  466. package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
  467. package/dist/hooks/use-dark-mode.js.map +0 -1
  468. package/dist/index.js.map +0 -1
  469. package/dist/lib/event-analysis.js.map +0 -1
  470. package/dist/lib/event-materialization.js.map +0 -1
  471. package/dist/lib/hydration.js.map +0 -1
  472. package/dist/lib/stream-display.js.map +0 -1
  473. package/dist/lib/toast.js.map +0 -1
  474. package/dist/lib/trace-builder.js.map +0 -1
  475. package/dist/lib/utils.js.map +0 -1
  476. package/src/components/new-trace-viewer/components/event-list.tsx +0 -116
  477. package/src/components/new-trace-viewer/components/split-pane.tsx +0 -185
  478. package/src/components/new-trace-viewer/components/timeline.tsx +0 -382
  479. package/src/components/new-trace-viewer/context.tsx +0 -92
  480. package/src/components/new-trace-viewer/detail-panel.tsx +0 -58
  481. package/src/components/new-trace-viewer/trace-viewer.tsx +0 -645
  482. package/src/components/new-trace-viewer/types.ts +0 -0
  483. package/src/components/new-trace-viewer/util/constants.ts +0 -0
  484. package/src/components/run-trace-view.tsx +0 -84
  485. package/src/components/sidebar/detail-card.tsx +0 -65
  486. package/src/components/trace-viewer/components/map.tsx +0 -226
  487. package/src/components/trace-viewer/components/markers.tsx +0 -612
  488. package/src/components/trace-viewer/components/node.tsx +0 -505
  489. package/src/components/trace-viewer/components/search-input.tsx +0 -52
  490. package/src/components/trace-viewer/components/search.tsx +0 -47
  491. package/src/components/trace-viewer/components/span-content.tsx +0 -247
  492. package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
  493. package/src/components/trace-viewer/components/span-segments.ts +0 -585
  494. package/src/components/trace-viewer/components/span-strategies.ts +0 -205
  495. package/src/components/trace-viewer/components/ui.tsx +0 -156
  496. package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
  497. package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
  498. package/src/components/trace-viewer/index.tsx +0 -4
  499. package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
  500. package/src/components/trace-viewer/util/constants.ts +0 -8
  501. package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
  502. package/src/components/trace-viewer/util/tree.ts +0 -277
  503. package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
  504. package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
  505. package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
  506. package/src/components/trace-viewer/worker.ts +0 -131
  507. package/src/components/ui/inspector-theme.ts +0 -110
  508. package/src/components/workflow-trace-view.tsx +0 -1171
  509. package/src/components/workflow-traces/trace-colors.ts +0 -112
  510. /package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
  511. /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
  512. /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
  513. /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
  514. /package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
  515. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
  516. /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
  517. /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
@@ -1,585 +0,0 @@
1
- import type { SpanNode, SpanNodeEvent } from '../types';
2
- import type { ResourceType } from './span-strategies';
3
-
4
- // ──────────────────────────────────────────────────────────────────────────
5
- // Segment types
6
- // ──────────────────────────────────────────────────────────────────────────
7
-
8
- /**
9
- * Visual status of a segment within a span bar.
10
- *
11
- * - queued: Waiting to start (hatched pattern)
12
- * - running: Actively executing (solid blue)
13
- * - failed: Attempt that ended in failure (soft red)
14
- * - retrying: Waiting between retry attempts (hatched pattern)
15
- * - succeeded: Final successful attempt (soft green)
16
- * - waiting: Passive waiting, e.g. hook waiting for payload (hatched pattern)
17
- * - sleeping: Sleep in progress (soft amber)
18
- * - received: Hook received a payload (soft blue)
19
- */
20
- export type SegmentStatus =
21
- | 'queued'
22
- | 'running'
23
- | 'failed'
24
- | 'retrying'
25
- | 'succeeded'
26
- | 'waiting'
27
- | 'sleeping'
28
- | 'received';
29
-
30
- export interface Segment {
31
- /** Fraction of span width where this segment starts (0–1) */
32
- startFraction: number;
33
- /** Fraction of span width where this segment ends (0–1) */
34
- endFraction: number;
35
- /** Visual status controlling color/pattern */
36
- status: SegmentStatus;
37
- }
38
-
39
- /**
40
- * A boundary between two segments, representing an event that caused
41
- * a transition. Rendered as a hoverable divider with a tooltip.
42
- */
43
- export interface SegmentBoundary {
44
- /** Fractional position along the span (0–1) */
45
- fraction: number;
46
- /** Display label for the tooltip (e.g. "step_started") */
47
- label: string;
48
- /** Formatted timestamp relative to span start */
49
- offsetMs: number;
50
- }
51
-
52
- // ──────────────────────────────────────────────────────────────────────────
53
- // CSS class mapping (segment status → module CSS class name)
54
- // ──────────────────────────────────────────────────────────────────────────
55
-
56
- /**
57
- * Maps a SegmentStatus to the CSS module class name to use.
58
- * These class names must exist in trace-viewer.module.css.
59
- */
60
- export const SEGMENT_CLASS_MAP: Record<SegmentStatus, string> = {
61
- queued: 'segQueued',
62
- running: 'segRunning',
63
- failed: 'segFailed',
64
- retrying: 'segRetrying',
65
- succeeded: 'segSucceeded',
66
- waiting: 'segWaiting',
67
- sleeping: 'segSleeping',
68
- received: 'segReceived',
69
- };
70
-
71
- // ──────────────────────────────────────────────────────────────────────────
72
- // Helpers
73
- // ──────────────────────────────────────────────────────────────────────────
74
-
75
- function clampFraction(value: number): number {
76
- return Math.max(0, Math.min(1, value));
77
- }
78
-
79
- function timeToFraction(
80
- time: number,
81
- spanStart: number,
82
- spanDuration: number
83
- ): number {
84
- if (spanDuration <= 0) return 0;
85
- return clampFraction((time - spanStart) / spanDuration);
86
- }
87
-
88
- /**
89
- * Sort events by timestamp ascending.
90
- */
91
- function sortedEvents(events: SpanNodeEvent[]): SpanNodeEvent[] {
92
- return [...events].sort((a, b) => a.timestamp - b.timestamp);
93
- }
94
-
95
- // ──────────────────────────────────────────────────────────────────────────
96
- // Step segments
97
- // ──────────────────────────────────────────────────────────────────────────
98
-
99
- /**
100
- * Compute segments for a step span.
101
- *
102
- * Timeline: [queued] → [attempt₁ (fail)] → [retry wait] → [attempt₂ (fail)] → ... → [attemptₙ (success)]
103
- *
104
- * Events used: step_started, step_retrying, step_failed, step_completed
105
- * The final segment is 'succeeded' if no trailing step_retrying/step_failed.
106
- */
107
- function computeStepSegments(node: SpanNode): Segment[] {
108
- const events = node.events ? sortedEvents(node.events) : [];
109
- const { startTime, duration } = node;
110
- const segments: Segment[] = [];
111
-
112
- if (duration <= 0) return segments;
113
-
114
- // Build a timeline of event boundaries
115
- interface EventMark {
116
- time: number;
117
- type: string;
118
- }
119
- const marks: EventMark[] = events
120
- .filter((e) =>
121
- [
122
- 'step_started',
123
- 'step_retrying',
124
- 'step_failed',
125
- 'step_completed',
126
- ].includes(e.event.name)
127
- )
128
- .map((e) => ({ time: e.timestamp, type: e.event.name }));
129
-
130
- if (marks.length === 0) {
131
- // No events — show entire span as running
132
- segments.push({ startFraction: 0, endFraction: 1, status: 'running' });
133
- return segments;
134
- }
135
-
136
- // Queued period: from span start to first event
137
- const firstMark = marks[0];
138
- const firstFraction = timeToFraction(firstMark.time, startTime, duration);
139
- if (firstFraction > 0.001) {
140
- segments.push({
141
- startFraction: 0,
142
- endFraction: firstFraction,
143
- status: 'queued',
144
- });
145
- }
146
-
147
- // Walk through events to build attempt/retry segments
148
- for (let i = 0; i < marks.length; i++) {
149
- const mark = marks[i];
150
- const markFraction = timeToFraction(mark.time, startTime, duration);
151
- const nextMark = marks[i + 1];
152
- const nextFraction = nextMark
153
- ? timeToFraction(nextMark.time, startTime, duration)
154
- : 1;
155
-
156
- if (mark.type === 'step_started') {
157
- // This is the start of an execution attempt.
158
- // It runs until the next event (step_retrying or step_failed) or end of span.
159
- const isLastMark = i === marks.length - 1;
160
- if (isLastMark) {
161
- // Last event is step_started — this attempt is either still running or succeeded
162
- segments.push({
163
- startFraction: markFraction,
164
- endFraction: 1,
165
- status: 'succeeded',
166
- });
167
- } else {
168
- // Attempt runs until the next event
169
- const nextType = nextMark.type;
170
- const attemptStatus: SegmentStatus =
171
- nextType === 'step_retrying' || nextType === 'step_failed'
172
- ? 'failed'
173
- : nextType === 'step_completed'
174
- ? 'succeeded'
175
- : 'running';
176
- segments.push({
177
- startFraction: markFraction,
178
- endFraction: nextFraction,
179
- status: attemptStatus,
180
- });
181
- }
182
- } else if (mark.type === 'step_retrying') {
183
- // Retry wait: from this event to the next step_started (or end)
184
- segments.push({
185
- startFraction: markFraction,
186
- endFraction: nextFraction,
187
- status: 'retrying',
188
- });
189
- } else if (mark.type === 'step_failed') {
190
- // Terminal failure: from this event to the end
191
- if (markFraction < 0.999) {
192
- segments.push({
193
- startFraction: markFraction,
194
- endFraction: 1,
195
- status: 'failed',
196
- });
197
- }
198
- } else if (mark.type === 'step_completed') {
199
- // Terminal success: do nothing here since the preceding step_started
200
- // segment already terminates at this marker.
201
- }
202
- }
203
-
204
- return segments;
205
- }
206
-
207
- // ──────────────────────────────────────────────────────────────────────────
208
- // Hook segments
209
- // ──────────────────────────────────────────────────────────────────────────
210
-
211
- /**
212
- * Compute segments for a hook span.
213
- *
214
- * Timeline: [waiting] → [received] → [disposed]
215
- */
216
- function computeHookSegments(node: SpanNode): Segment[] {
217
- const events = node.events ? sortedEvents(node.events) : [];
218
- const { startTime, duration } = node;
219
- const segments: Segment[] = [];
220
-
221
- if (duration <= 0) return segments;
222
-
223
- const receivedEvent = events.find((e) => e.event.name === 'hook_received');
224
- const disposedEvent = events.find((e) => e.event.name === 'hook_disposed');
225
-
226
- if (!receivedEvent && !disposedEvent) {
227
- // Still waiting
228
- segments.push({ startFraction: 0, endFraction: 1, status: 'waiting' });
229
- return segments;
230
- }
231
-
232
- const receivedFraction = receivedEvent
233
- ? timeToFraction(receivedEvent.timestamp, startTime, duration)
234
- : null;
235
- const disposedFraction = disposedEvent
236
- ? timeToFraction(disposedEvent.timestamp, startTime, duration)
237
- : null;
238
-
239
- // Waiting period (before received)
240
- if (receivedFraction !== null && receivedFraction > 0.001) {
241
- segments.push({
242
- startFraction: 0,
243
- endFraction: receivedFraction,
244
- status: 'waiting',
245
- });
246
- } else if (receivedFraction === null && disposedFraction !== null) {
247
- // Disposed without receiving — waiting the whole time
248
- segments.push({
249
- startFraction: 0,
250
- endFraction: disposedFraction,
251
- status: 'waiting',
252
- });
253
- }
254
-
255
- // Received period
256
- if (receivedFraction !== null) {
257
- const end = disposedFraction ?? 1;
258
- segments.push({
259
- startFraction: receivedFraction,
260
- endFraction: end,
261
- status: 'received',
262
- });
263
- }
264
-
265
- // Post-disposed (if there's remaining span after disposal)
266
- if (disposedFraction !== null && disposedFraction < 0.999) {
267
- segments.push({
268
- startFraction: disposedFraction,
269
- endFraction: 1,
270
- status: 'succeeded',
271
- });
272
- }
273
-
274
- return segments;
275
- }
276
-
277
- // ──────────────────────────────────────────────────────────────────────────
278
- // Sleep segments
279
- // ──────────────────────────────────────────────────────────────────────────
280
-
281
- /**
282
- * Compute segments for a sleep span.
283
- *
284
- * Timeline: [sleeping] → [completed]
285
- */
286
- function computeSleepSegments(node: SpanNode): Segment[] {
287
- const events = node.events ? sortedEvents(node.events) : [];
288
- const { startTime, duration } = node;
289
- const segments: Segment[] = [];
290
-
291
- if (duration <= 0) return segments;
292
-
293
- const completedEvent = events.find((e) => e.event.name === 'wait_completed');
294
-
295
- if (!completedEvent) {
296
- // Still sleeping
297
- segments.push({ startFraction: 0, endFraction: 1, status: 'sleeping' });
298
- return segments;
299
- }
300
-
301
- const completedFraction = timeToFraction(
302
- completedEvent.timestamp,
303
- startTime,
304
- duration
305
- );
306
-
307
- if (completedFraction > 0.001) {
308
- segments.push({
309
- startFraction: 0,
310
- endFraction: completedFraction,
311
- status: 'sleeping',
312
- });
313
- }
314
-
315
- segments.push({
316
- startFraction: completedFraction,
317
- endFraction: 1,
318
- status: 'succeeded',
319
- });
320
-
321
- return segments;
322
- }
323
-
324
- // ──────────────────────────────────────────────────────────────────────────
325
- // Run segments
326
- // ──────────────────────────────────────────────────────────────────────────
327
-
328
- /**
329
- * Compute segments for a run span.
330
- *
331
- * Timeline: [queued] → [running] → [completed/failed]
332
- *
333
- * The queued period is derived from activeStartTime (run.startedAt).
334
- * A synthetic run_started event is injected at that timestamp so
335
- * the boundary is hoverable in the trace viewer.
336
- */
337
- function computeRunSegments(node: SpanNode): Segment[] {
338
- const events = node.events ? sortedEvents(node.events) : [];
339
- const { startTime, duration, activeStartTime } = node;
340
- const segments: Segment[] = [];
341
-
342
- if (duration <= 0) return segments;
343
-
344
- // V1 runs (specVersion 1) don't emit run lifecycle events (run_created,
345
- // run_started, run_completed). Detect this by checking for the absence of
346
- // run_created — it's always the first event for v2 runs and is always
347
- // loaded in the first page, so its absence reliably signals a v1 run.
348
- // For v1, fall back to the run entity's status from span.attributes.data.
349
- const hasRunCreated = events.some((e) => e.event.name === 'run_created');
350
-
351
- if (!hasRunCreated) {
352
- const runData = node.span.attributes?.data as
353
- | Record<string, unknown>
354
- | undefined;
355
- const runStatus = runData?.status as string | undefined;
356
- return computeV1RunSegments(
357
- startTime,
358
- duration,
359
- activeStartTime,
360
- runStatus
361
- );
362
- }
363
-
364
- const failedEvent = events.find((e) => e.event.name === 'run_failed');
365
- const completedEvent = events.find((e) => e.event.name === 'run_completed');
366
-
367
- // Queued period (from span start to activeStartTime)
368
- let cursor = 0;
369
- if (activeStartTime && activeStartTime > startTime) {
370
- const queuedFraction = timeToFraction(activeStartTime, startTime, duration);
371
- if (queuedFraction > 0.001) {
372
- segments.push({
373
- startFraction: 0,
374
- endFraction: queuedFraction,
375
- status: 'queued',
376
- });
377
- cursor = queuedFraction;
378
- }
379
- }
380
-
381
- if (failedEvent) {
382
- const failedFraction = timeToFraction(
383
- failedEvent.timestamp,
384
- startTime,
385
- duration
386
- );
387
- // Running until failure
388
- if (failedFraction > cursor + 0.001) {
389
- segments.push({
390
- startFraction: cursor,
391
- endFraction: failedFraction,
392
- status: 'running',
393
- });
394
- }
395
- segments.push({
396
- startFraction: failedFraction,
397
- endFraction: 1,
398
- status: 'failed',
399
- });
400
- } else if (completedEvent) {
401
- const completedFraction = timeToFraction(
402
- completedEvent.timestamp,
403
- startTime,
404
- duration
405
- );
406
- if (completedFraction > cursor + 0.001) {
407
- segments.push({
408
- startFraction: cursor,
409
- endFraction: completedFraction,
410
- status: 'running',
411
- });
412
- }
413
- segments.push({
414
- startFraction: completedFraction,
415
- endFraction: 1,
416
- status: 'succeeded',
417
- });
418
- } else {
419
- // Running to completion (or terminal events haven't loaded yet)
420
- segments.push({
421
- startFraction: cursor,
422
- endFraction: 1,
423
- status: 'running',
424
- });
425
- }
426
-
427
- return segments;
428
- }
429
-
430
- /**
431
- * Compute segments for a v1 run using only the run entity's status and
432
- * activeStartTime (derived from run.startedAt). V1 runs have no run
433
- * lifecycle events, so we infer the visual segments from entity fields.
434
- */
435
- function computeV1RunSegments(
436
- startTime: number,
437
- duration: number,
438
- activeStartTime: number | undefined,
439
- runStatus: string | undefined
440
- ): Segment[] {
441
- const segments: Segment[] = [];
442
-
443
- let cursor = 0;
444
- if (activeStartTime && activeStartTime > startTime) {
445
- const queuedFraction = timeToFraction(activeStartTime, startTime, duration);
446
- if (queuedFraction > 0.001) {
447
- segments.push({
448
- startFraction: 0,
449
- endFraction: queuedFraction,
450
- status: 'queued',
451
- });
452
- cursor = queuedFraction;
453
- }
454
- }
455
-
456
- if (runStatus === 'failed') {
457
- segments.push({
458
- startFraction: cursor,
459
- endFraction: 1,
460
- status: 'failed',
461
- });
462
- } else if (runStatus === 'completed' || runStatus === 'cancelled') {
463
- segments.push({
464
- startFraction: cursor,
465
- endFraction: 1,
466
- status: 'succeeded',
467
- });
468
- } else {
469
- segments.push({
470
- startFraction: cursor,
471
- endFraction: 1,
472
- status: 'running',
473
- });
474
- }
475
-
476
- return segments;
477
- }
478
-
479
- // ──────────────────────────────────────────────────────────────────────────
480
- // Dispatcher
481
- // ──────────────────────────────────────────────────────────────────────────
482
-
483
- export interface SegmentResult {
484
- segments: Segment[];
485
- boundaries: SegmentBoundary[];
486
- }
487
-
488
- // ──────────────────────────────────────────────────────────────────────────
489
- // Boundary computation
490
- // ──────────────────────────────────────────────────────────────────────────
491
-
492
- /** Event names to human-readable labels */
493
- const EVENT_LABELS: Record<string, string> = {
494
- step_started: 'Started',
495
- step_retrying: 'Retrying',
496
- step_failed: 'Failed',
497
- hook_created: 'Created',
498
- hook_received: 'Received',
499
- hook_disposed: 'Resolved',
500
- wait_created: 'Sleep started',
501
- wait_completed: 'Sleep completed',
502
- run_completed: 'Completed',
503
- run_failed: 'Run failed',
504
- step_completed: 'Completed',
505
- };
506
-
507
- /**
508
- * Extract boundaries from a span's events. Each boundary sits at the
509
- * fractional position of a relevant event within the span duration.
510
- * Only includes events that are used as segment boundaries (not at the
511
- * very start or very end of the span, to avoid edge clutter).
512
- */
513
- function computeBoundaries(
514
- node: SpanNode,
515
- relevantEventNames: string[]
516
- ): SegmentBoundary[] {
517
- const events = node.events ? sortedEvents(node.events) : [];
518
- const { startTime, duration } = node;
519
-
520
- if (duration <= 0) return [];
521
-
522
- const boundaries: SegmentBoundary[] = [];
523
- for (const e of events) {
524
- if (!relevantEventNames.includes(e.event.name)) continue;
525
-
526
- const fraction = timeToFraction(e.timestamp, startTime, duration);
527
- // Skip boundaries at the very edges (< 1% or > 99%) to avoid clutter
528
- if (fraction < 0.01 || fraction > 0.99) continue;
529
-
530
- boundaries.push({
531
- fraction,
532
- label: EVENT_LABELS[e.event.name] ?? e.event.name,
533
- offsetMs: e.timestamp - startTime,
534
- });
535
- }
536
-
537
- return boundaries;
538
- }
539
-
540
- // ──────────────────────────────────────────────────────────────────────────
541
- // Dispatcher
542
- // ──────────────────────────────────────────────────────────────────────────
543
-
544
- /**
545
- * Compute the event-based segments and boundaries for a span based on its resource type.
546
- * Returns empty arrays for 'default' (generic OTEL) spans.
547
- */
548
- export function computeSegments(
549
- resourceType: ResourceType,
550
- node: SpanNode
551
- ): SegmentResult {
552
- switch (resourceType) {
553
- case 'step':
554
- return {
555
- segments: computeStepSegments(node),
556
- boundaries: computeBoundaries(node, [
557
- 'step_started',
558
- 'step_retrying',
559
- 'step_failed',
560
- 'step_completed',
561
- ]),
562
- };
563
- case 'hook':
564
- return {
565
- segments: computeHookSegments(node),
566
- boundaries: computeBoundaries(node, [
567
- 'hook_created',
568
- 'hook_received',
569
- 'hook_disposed',
570
- ]),
571
- };
572
- case 'sleep':
573
- return {
574
- segments: computeSleepSegments(node),
575
- boundaries: computeBoundaries(node, ['wait_created', 'wait_completed']),
576
- };
577
- case 'run':
578
- return {
579
- segments: computeRunSegments(node),
580
- boundaries: computeBoundaries(node, ['run_completed', 'run_failed']),
581
- };
582
- default:
583
- return { segments: [], boundaries: [] };
584
- }
585
- }