@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.
- package/README.md +5 -13
- package/dist/components/error-boundary.js +1 -1
- package/dist/components/event-list-view.d.ts +46 -1
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +235 -97
- package/dist/components/hook-actions.js +1 -1
- package/dist/components/index.d.ts +8 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -4
- package/dist/components/sidebar/attribute-panel.d.ts +4 -1
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +173 -119
- package/dist/components/sidebar/attributes-block.d.ts +40 -0
- package/dist/components/sidebar/attributes-block.d.ts.map +1 -0
- package/dist/components/sidebar/attributes-block.js +140 -0
- package/dist/components/sidebar/conversation-view.js +1 -1
- package/dist/components/sidebar/copyable-data-block.d.ts +2 -0
- package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
- package/dist/components/sidebar/copyable-data-block.js +17 -16
- package/dist/components/sidebar/entity-detail-panel.d.ts +11 -11
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +37 -71
- package/dist/components/sidebar/events-list.d.ts +6 -2
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +77 -63
- package/dist/components/sidebar/resolve-hook-modal.js +1 -1
- package/dist/components/sidebar/sidebar-data-context.d.ts +10 -7
- package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar-data-context.js +1 -1
- package/dist/components/sidebar/span-detail-merge.d.ts +31 -0
- package/dist/components/sidebar/span-detail-merge.d.ts.map +1 -0
- package/dist/components/sidebar/span-detail-merge.js +92 -0
- package/dist/components/sidebar/use-selected-span-detail.d.ts +16 -0
- package/dist/components/sidebar/use-selected-span-detail.d.ts.map +1 -0
- package/dist/components/sidebar/use-selected-span-detail.js +93 -0
- package/dist/components/stream-viewer-skeleton.d.ts +2 -0
- package/dist/components/stream-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/stream-viewer-skeleton.js +12 -0
- package/dist/components/stream-viewer.d.ts +1 -1
- package/dist/components/stream-viewer.d.ts.map +1 -1
- package/dist/components/stream-viewer.js +9 -26
- package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/copy-button.js +27 -0
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts +34 -0
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
- package/dist/components/trace-viewer/components/detail-panel.d.ts +14 -0
- package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/detail-panel.js +122 -0
- package/dist/components/trace-viewer/components/draggable-border.d.ts +31 -0
- package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/draggable-border.js +140 -0
- package/dist/components/trace-viewer/components/event-list.d.ts +10 -0
- package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/event-list.js +47 -0
- package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +1 -1
- package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
- package/dist/components/trace-viewer/components/minimap.d.ts +14 -0
- package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/minimap.js +337 -0
- package/dist/components/trace-viewer/components/pane-constants.d.ts +14 -0
- package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/pane-constants.js +16 -0
- package/dist/components/trace-viewer/components/span-markers.d.ts +46 -0
- package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/span-markers.js +85 -0
- package/dist/components/trace-viewer/components/split-pane.d.ts +10 -0
- package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/split-pane.js +41 -0
- package/dist/components/trace-viewer/components/timeline.d.ts +42 -0
- package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/timeline.js +321 -0
- package/dist/components/trace-viewer/components/timeline.module.css +46 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts +5 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
- package/dist/components/trace-viewer/components/use-element-width.d.ts +8 -0
- package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-element-width.js +25 -0
- package/dist/components/trace-viewer/components/use-row-window.d.ts +34 -0
- package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-row-window.js +107 -0
- package/dist/components/trace-viewer/context.d.ts +14 -182
- package/dist/components/trace-viewer/context.d.ts.map +1 -1
- package/dist/components/trace-viewer/context.js +44 -351
- package/dist/components/trace-viewer/icons.d.ts.map +1 -0
- package/dist/components/trace-viewer/icons.js +15 -0
- package/dist/components/trace-viewer/search.d.ts +19 -0
- package/dist/components/trace-viewer/search.d.ts.map +1 -0
- package/dist/components/trace-viewer/search.js +134 -0
- package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
- package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +306 -356
- package/dist/components/trace-viewer/types.d.ts +2 -211
- package/dist/components/trace-viewer/types.d.ts.map +1 -1
- package/dist/components/trace-viewer/types.js +1 -1
- package/dist/components/trace-viewer/util/timing.d.ts +2 -2
- package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
- package/dist/components/trace-viewer/util/timing.js +3 -3
- package/dist/components/trace-viewer/utils.d.ts +111 -0
- package/dist/components/trace-viewer/utils.d.ts.map +1 -0
- package/dist/components/trace-viewer/utils.js +430 -0
- package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +7 -3
- package/dist/components/trace-viewer.d.ts.map +1 -0
- package/dist/components/trace-viewer.js +21 -0
- package/dist/components/ui/alert.js +3 -3
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +46 -0
- package/dist/components/ui/card.d.ts.map +1 -1
- package/dist/components/ui/card.js +4 -4
- package/dist/components/ui/collapsible.d.ts +46 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +66 -0
- package/dist/components/ui/context-card.d.ts +47 -0
- package/dist/components/ui/context-card.d.ts.map +1 -0
- package/dist/components/ui/context-card.js +471 -0
- package/dist/components/ui/data-inspector.d.ts +7 -6
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +232 -99
- package/dist/components/ui/data-inspector.styles.d.ts +29 -0
- package/dist/components/ui/data-inspector.styles.d.ts.map +1 -0
- package/dist/components/ui/data-inspector.styles.js +95 -0
- package/dist/components/ui/decrypt-button.js +1 -1
- package/dist/components/ui/error-card.js +3 -3
- package/dist/components/ui/error-stack-block.d.ts +17 -10
- package/dist/components/ui/error-stack-block.d.ts.map +1 -1
- package/dist/components/ui/error-stack-block.js +49 -30
- package/dist/components/ui/icon-button.d.ts +19 -0
- package/dist/components/ui/icon-button.d.ts.map +1 -0
- package/dist/components/ui/icon-button.js +29 -0
- package/dist/components/ui/kbd.d.ts +10 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +25 -0
- package/dist/components/ui/load-more-button.js +1 -1
- package/dist/components/ui/menu-dropdown.js +1 -1
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/spinner.js +1 -1
- package/dist/components/ui/timestamp-tooltip.d.ts +34 -1
- package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
- package/dist/components/ui/timestamp-tooltip.js +80 -132
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +12 -0
- package/dist/components/workflow-traces/event-colors.d.ts +2 -1
- package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
- package/dist/components/workflow-traces/event-colors.js +15 -7
- package/dist/components/workflow-traces/trace-span-construction.d.ts +6 -3
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +71 -30
- package/dist/components/workflow-traces/trace-time-utils.js +1 -1
- package/dist/hooks/use-dark-mode.js +1 -1
- package/dist/hooks/use-intersection-observer.d.ts +17 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.js +29 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
- package/dist/hooks/use-load-more-on-scroll.js +28 -0
- package/dist/hooks/use-reduced-motion.d.ts +10 -0
- package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
- package/dist/hooks/use-reduced-motion.js +29 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/lib/cn.d.ts +10 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +83 -0
- package/dist/lib/event-analysis.d.ts +1 -1
- package/dist/lib/event-analysis.d.ts.map +1 -1
- package/dist/lib/event-analysis.js +3 -2
- package/dist/lib/event-materialization.d.ts +1 -1
- package/dist/lib/event-materialization.d.ts.map +1 -1
- package/dist/lib/event-materialization.js +29 -21
- package/dist/lib/exact-event-search-id.d.ts +25 -0
- package/dist/lib/exact-event-search-id.d.ts.map +1 -0
- package/dist/lib/exact-event-search-id.js +39 -0
- package/dist/lib/hydration.d.ts +17 -2
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +194 -23
- package/dist/lib/stream-display.js +1 -1
- package/dist/lib/toast.js +1 -1
- package/dist/lib/trace-builder.d.ts +17 -5
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +32 -14
- package/dist/lib/trace-types.d.ts +54 -0
- package/dist/lib/trace-types.d.ts.map +1 -0
- package/dist/lib/trace-types.js +2 -0
- package/dist/lib/utils.d.ts +14 -2
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +46 -6
- package/dist/lib/zstd-browser-decoder.d.ts +7 -0
- package/dist/lib/zstd-browser-decoder.d.ts.map +1 -0
- package/dist/lib/zstd-browser-decoder.js +41 -0
- package/dist/styles.css +210 -139
- package/package.json +11 -8
- package/src/components/event-list-view.tsx +385 -123
- package/src/components/index.ts +14 -8
- package/src/components/sidebar/attribute-panel.tsx +331 -282
- package/src/components/sidebar/attributes-block.tsx +326 -0
- package/src/components/sidebar/copyable-data-block.tsx +50 -28
- package/src/components/sidebar/entity-detail-panel.tsx +92 -126
- package/src/components/sidebar/events-list.tsx +197 -179
- package/src/components/sidebar/sidebar-data-context.tsx +11 -11
- package/src/components/sidebar/span-detail-merge.ts +134 -0
- package/src/components/sidebar/use-selected-span-detail.ts +146 -0
- package/src/components/stream-viewer-skeleton.tsx +34 -0
- package/src/components/stream-viewer.tsx +34 -106
- package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +2 -2
- package/src/components/trace-viewer/components/detail-panel-width.test.ts +123 -0
- package/src/components/trace-viewer/components/detail-panel-width.ts +76 -0
- package/src/components/trace-viewer/components/detail-panel.tsx +273 -0
- package/src/components/trace-viewer/components/draggable-border.tsx +216 -0
- package/src/components/trace-viewer/components/event-list.tsx +144 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +8 -8
- package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +1 -1
- package/src/components/trace-viewer/components/minimap.tsx +556 -0
- package/src/components/trace-viewer/components/pane-constants.ts +19 -0
- package/src/components/trace-viewer/components/span-markers.tsx +173 -0
- package/src/components/trace-viewer/components/split-pane.tsx +141 -0
- package/src/components/trace-viewer/components/timeline.module.css +46 -0
- package/src/components/trace-viewer/components/timeline.tsx +850 -0
- package/src/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/src/components/trace-viewer/components/trace-shortcut-helper.tsx +116 -0
- package/src/components/trace-viewer/components/trace-viewer-skeleton.tsx +114 -0
- package/src/components/trace-viewer/components/use-element-width.ts +29 -0
- package/src/components/trace-viewer/components/use-row-window.ts +140 -0
- package/src/components/trace-viewer/context.tsx +63 -656
- package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +2 -2
- package/src/components/trace-viewer/search.ts +178 -0
- package/src/components/trace-viewer/trace-viewer.tsx +563 -531
- package/src/components/trace-viewer/types.ts +2 -234
- package/src/components/trace-viewer/util/timing.ts +2 -2
- package/src/components/trace-viewer/utils.test.ts +458 -0
- package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +271 -50
- package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +24 -18
- package/src/components/ui/alert.tsx +2 -2
- package/src/components/ui/button.tsx +68 -0
- package/src/components/ui/card.tsx +3 -10
- package/src/components/ui/collapsible.tsx +219 -0
- package/src/components/ui/context-card.tsx +784 -0
- package/src/components/ui/data-inspector.styles.ts +96 -0
- package/src/components/ui/data-inspector.tsx +501 -204
- package/src/components/ui/error-card.tsx +4 -4
- package/src/components/ui/error-stack-block.tsx +84 -55
- package/src/components/ui/icon-button.tsx +53 -0
- package/src/components/ui/kbd.tsx +43 -0
- package/src/components/ui/skeleton.tsx +1 -1
- package/src/components/ui/timestamp-tooltip.tsx +132 -194
- package/src/components/ui/tooltip.tsx +47 -0
- package/src/components/workflow-traces/event-colors.ts +15 -11
- package/src/components/workflow-traces/trace-span-construction.test.ts +85 -0
- package/src/components/workflow-traces/trace-span-construction.ts +97 -32
- package/src/hooks/use-intersection-observer.ts +57 -0
- package/src/hooks/use-load-more-on-scroll.ts +49 -0
- package/src/hooks/use-reduced-motion.ts +34 -0
- package/src/index.ts +10 -4
- package/src/lib/cn.ts +93 -0
- package/src/lib/event-analysis.ts +6 -4
- package/src/lib/event-materialization.ts +35 -21
- package/src/lib/exact-event-search-id.ts +67 -0
- package/src/lib/hydration.ts +210 -30
- package/src/lib/trace-builder.ts +43 -19
- package/src/lib/trace-types.ts +56 -0
- package/src/lib/utils.test.ts +33 -0
- package/src/lib/utils.ts +53 -6
- package/src/lib/zstd-browser-decoder.ts +42 -0
- package/src/styles.css +210 -139
- package/dist/components/error-boundary.js.map +0 -1
- package/dist/components/event-list-view.js.map +0 -1
- package/dist/components/hook-actions.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
- package/dist/components/new-trace-viewer/components/copy-button.js.map +0 -1
- package/dist/components/new-trace-viewer/components/event-list.d.ts +0 -8
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/event-list.js +0 -38
- package/dist/components/new-trace-viewer/components/event-list.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js.map +0 -1
- package/dist/components/new-trace-viewer/components/split-pane.d.ts +0 -14
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/split-pane.js +0 -99
- package/dist/components/new-trace-viewer/components/split-pane.js.map +0 -1
- package/dist/components/new-trace-viewer/components/timeline.d.ts +0 -31
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/timeline.js +0 -138
- package/dist/components/new-trace-viewer/components/timeline.js.map +0 -1
- package/dist/components/new-trace-viewer/context.d.ts +0 -15
- package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/context.js +0 -47
- package/dist/components/new-trace-viewer/context.js.map +0 -1
- package/dist/components/new-trace-viewer/detail-panel.d.ts +0 -10
- package/dist/components/new-trace-viewer/detail-panel.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/detail-panel.js +0 -12
- package/dist/components/new-trace-viewer/detail-panel.js.map +0 -1
- package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/icons.js +0 -15
- package/dist/components/new-trace-viewer/icons.js.map +0 -1
- package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -8
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +0 -349
- package/dist/components/new-trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/new-trace-viewer/types.d.ts +0 -1
- package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/types.js +0 -2
- package/dist/components/new-trace-viewer/types.js.map +0 -1
- package/dist/components/new-trace-viewer/util/constants.d.ts +0 -1
- package/dist/components/new-trace-viewer/util/constants.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/util/constants.js +0 -2
- package/dist/components/new-trace-viewer/util/constants.js.map +0 -1
- package/dist/components/new-trace-viewer/utils.d.ts +0 -42
- package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/utils.js +0 -305
- package/dist/components/new-trace-viewer/utils.js.map +0 -1
- package/dist/components/run-trace-view.d.ts +0 -25
- package/dist/components/run-trace-view.d.ts.map +0 -1
- package/dist/components/run-trace-view.js +0 -11
- package/dist/components/run-trace-view.js.map +0 -1
- package/dist/components/sidebar/attribute-panel.js.map +0 -1
- package/dist/components/sidebar/conversation-view.js.map +0 -1
- package/dist/components/sidebar/copyable-data-block.js.map +0 -1
- package/dist/components/sidebar/detail-card.d.ts +0 -14
- package/dist/components/sidebar/detail-card.d.ts.map +0 -1
- package/dist/components/sidebar/detail-card.js +0 -20
- package/dist/components/sidebar/detail-card.js.map +0 -1
- package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
- package/dist/components/sidebar/events-list.js.map +0 -1
- package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
- package/dist/components/sidebar/sidebar-data-context.js.map +0 -1
- package/dist/components/stream-viewer.js.map +0 -1
- package/dist/components/trace-viewer/components/map.d.ts +0 -8
- package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/map.js +0 -162
- package/dist/components/trace-viewer/components/map.js.map +0 -1
- package/dist/components/trace-viewer/components/markers.d.ts +0 -23
- package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/markers.js +0 -416
- package/dist/components/trace-viewer/components/markers.js.map +0 -1
- package/dist/components/trace-viewer/components/node.d.ts +0 -35
- package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/node.js +0 -285
- package/dist/components/trace-viewer/components/node.js.map +0 -1
- package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
- package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/search-input.js +0 -9
- package/dist/components/trace-viewer/components/search-input.js.map +0 -1
- package/dist/components/trace-viewer/components/search.d.ts +0 -3
- package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/search.js +0 -25
- package/dist/components/trace-viewer/components/search.js.map +0 -1
- package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
- package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-content.js +0 -137
- package/dist/components/trace-viewer/components/span-content.js.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
- package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
- package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
- package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.js +0 -445
- package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
- package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.js +0 -108
- package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
- package/dist/components/trace-viewer/components/ui.d.ts +0 -28
- package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/ui.js +0 -39
- package/dist/components/trace-viewer/components/ui.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
- package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.js +0 -29
- package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
- package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
- package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
- package/dist/components/trace-viewer/context.js.map +0 -1
- package/dist/components/trace-viewer/index.d.ts +0 -5
- package/dist/components/trace-viewer/index.d.ts.map +0 -1
- package/dist/components/trace-viewer/index.js +0 -4
- package/dist/components/trace-viewer/index.js.map +0 -1
- package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/trace-viewer/trace-viewer.module.css +0 -1465
- package/dist/components/trace-viewer/types.js.map +0 -1
- package/dist/components/trace-viewer/util/constants.d.ts +0 -9
- package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/constants.js +0 -9
- package/dist/components/trace-viewer/util/constants.js.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
- package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
- package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
- package/dist/components/trace-viewer/util/timing.js.map +0 -1
- package/dist/components/trace-viewer/util/tree.d.ts +0 -13
- package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/tree.js +0 -227
- package/dist/components/trace-viewer/util/tree.js.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
- package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
- package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
- package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
- package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
- package/dist/components/trace-viewer/worker.d.ts +0 -2
- package/dist/components/trace-viewer/worker.d.ts.map +0 -1
- package/dist/components/trace-viewer/worker.js +0 -109
- package/dist/components/trace-viewer/worker.js.map +0 -1
- package/dist/components/trace-viewer-new.d.ts.map +0 -1
- package/dist/components/trace-viewer-new.js +0 -23
- package/dist/components/trace-viewer-new.js.map +0 -1
- package/dist/components/ui/alert.js.map +0 -1
- package/dist/components/ui/card.js.map +0 -1
- package/dist/components/ui/data-inspector.js.map +0 -1
- package/dist/components/ui/decrypt-button.js.map +0 -1
- package/dist/components/ui/error-card.js.map +0 -1
- package/dist/components/ui/error-stack-block.js.map +0 -1
- package/dist/components/ui/inspector-theme.d.ts +0 -95
- package/dist/components/ui/inspector-theme.d.ts.map +0 -1
- package/dist/components/ui/inspector-theme.js +0 -82
- package/dist/components/ui/inspector-theme.js.map +0 -1
- package/dist/components/ui/load-more-button.js.map +0 -1
- package/dist/components/ui/menu-dropdown.js.map +0 -1
- package/dist/components/ui/skeleton.js.map +0 -1
- package/dist/components/ui/spinner.js.map +0 -1
- package/dist/components/ui/timestamp-tooltip.js.map +0 -1
- package/dist/components/workflow-trace-view.d.ts +0 -40
- package/dist/components/workflow-trace-view.d.ts.map +0 -1
- package/dist/components/workflow-trace-view.js +0 -695
- package/dist/components/workflow-trace-view.js.map +0 -1
- package/dist/components/workflow-traces/event-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-colors.d.ts +0 -15
- package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
- package/dist/components/workflow-traces/trace-colors.js +0 -87
- package/dist/components/workflow-traces/trace-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
- package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
- package/dist/hooks/use-dark-mode.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/event-analysis.js.map +0 -1
- package/dist/lib/event-materialization.js.map +0 -1
- package/dist/lib/hydration.js.map +0 -1
- package/dist/lib/stream-display.js.map +0 -1
- package/dist/lib/toast.js.map +0 -1
- package/dist/lib/trace-builder.js.map +0 -1
- package/dist/lib/utils.js.map +0 -1
- package/src/components/new-trace-viewer/components/event-list.tsx +0 -116
- package/src/components/new-trace-viewer/components/split-pane.tsx +0 -185
- package/src/components/new-trace-viewer/components/timeline.tsx +0 -382
- package/src/components/new-trace-viewer/context.tsx +0 -92
- package/src/components/new-trace-viewer/detail-panel.tsx +0 -58
- package/src/components/new-trace-viewer/trace-viewer.tsx +0 -645
- package/src/components/new-trace-viewer/types.ts +0 -0
- package/src/components/new-trace-viewer/util/constants.ts +0 -0
- package/src/components/run-trace-view.tsx +0 -84
- package/src/components/sidebar/detail-card.tsx +0 -65
- package/src/components/trace-viewer/components/map.tsx +0 -226
- package/src/components/trace-viewer/components/markers.tsx +0 -612
- package/src/components/trace-viewer/components/node.tsx +0 -505
- package/src/components/trace-viewer/components/search-input.tsx +0 -52
- package/src/components/trace-viewer/components/search.tsx +0 -47
- package/src/components/trace-viewer/components/span-content.tsx +0 -247
- package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
- package/src/components/trace-viewer/components/span-segments.ts +0 -585
- package/src/components/trace-viewer/components/span-strategies.ts +0 -205
- package/src/components/trace-viewer/components/ui.tsx +0 -156
- package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
- package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
- package/src/components/trace-viewer/index.tsx +0 -4
- package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
- package/src/components/trace-viewer/util/constants.ts +0 -8
- package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
- package/src/components/trace-viewer/util/tree.ts +0 -277
- package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
- package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
- package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
- package/src/components/trace-viewer/worker.ts +0 -131
- package/src/components/ui/inspector-theme.ts +0 -110
- package/src/components/workflow-trace-view.tsx +0 -1171
- package/src/components/workflow-traces/trace-colors.ts +0 -112
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
- /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import type { Span, SpanEvent } from '
|
|
2
|
-
import {
|
|
1
|
+
import type { Span, SpanEvent } from './types';
|
|
2
|
+
import {
|
|
3
|
+
formatDuration,
|
|
4
|
+
formatDurationPrecise,
|
|
5
|
+
getHighResInMs,
|
|
6
|
+
} from './util/timing';
|
|
3
7
|
|
|
4
8
|
// ---------------------------------------------------------------------------
|
|
5
9
|
// Root bounds
|
|
@@ -37,6 +41,64 @@ export function getSpanDurationMs(span: Span): number {
|
|
|
37
41
|
);
|
|
38
42
|
}
|
|
39
43
|
|
|
44
|
+
export function isSpanErrored(span: Span): boolean {
|
|
45
|
+
const workflowStatus = (span.attributes.data as Record<string, unknown>)
|
|
46
|
+
?.status as string | undefined;
|
|
47
|
+
return span.status.code === 2 || workflowStatus === 'failed';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Viewport
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
|
|
54
|
+
export interface ViewportRange {
|
|
55
|
+
start: number;
|
|
56
|
+
end: number;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Clamp a candidate viewport to the root extent. The requested duration is
|
|
61
|
+
* preserved where possible (clamped to [minDurationMs, root duration]), then
|
|
62
|
+
* the window is shifted back inside the root bounds.
|
|
63
|
+
*/
|
|
64
|
+
export function clampViewportToRoot(
|
|
65
|
+
next: ViewportRange,
|
|
66
|
+
rootStart: number,
|
|
67
|
+
rootEnd: number,
|
|
68
|
+
minDurationMs: number
|
|
69
|
+
): ViewportRange {
|
|
70
|
+
const rootDuration = Math.max(rootEnd - rootStart, minDurationMs);
|
|
71
|
+
const duration = Math.min(
|
|
72
|
+
rootDuration,
|
|
73
|
+
Math.max(minDurationMs, next.end - next.start)
|
|
74
|
+
);
|
|
75
|
+
const maxStart = rootEnd - duration;
|
|
76
|
+
const start = Math.min(Math.max(next.start, rootStart), maxStart);
|
|
77
|
+
return { start, end: start + duration };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
// Wheel gestures — shared between the timeline and the minimap
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
|
|
84
|
+
/** Convert a wheel delta to pixel units (line-mode deltas arrive in lines). */
|
|
85
|
+
export function wheelDeltaToPixels(delta: number, deltaMode: number): number {
|
|
86
|
+
return deltaMode === 1 ? delta * 16 : delta;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Exponential zoom factor for a wheel gesture. Coarse mouse-wheel steps are
|
|
91
|
+
* damped harder than trackpad pinches so both feel similar.
|
|
92
|
+
*/
|
|
93
|
+
export function wheelZoomScaleFactor(event: {
|
|
94
|
+
deltaY: number;
|
|
95
|
+
deltaMode: number;
|
|
96
|
+
}): number {
|
|
97
|
+
const dy = wheelDeltaToPixels(event.deltaY, event.deltaMode);
|
|
98
|
+
const isMouseWheel = event.deltaMode === 1 || Math.abs(event.deltaY) >= 50;
|
|
99
|
+
return 2 ** (dy / (isMouseWheel ? 200 : 60));
|
|
100
|
+
}
|
|
101
|
+
|
|
40
102
|
// ---------------------------------------------------------------------------
|
|
41
103
|
// Time markers
|
|
42
104
|
// ---------------------------------------------------------------------------
|
|
@@ -56,6 +118,8 @@ const NICE_INTERVALS = [
|
|
|
56
118
|
|
|
57
119
|
const MAX_MARKERS = 8;
|
|
58
120
|
|
|
121
|
+
const MS_IN_SECOND = 1000;
|
|
122
|
+
|
|
59
123
|
function pickInterval(viewDuration: number, maxTicks: number): number {
|
|
60
124
|
for (const interval of NICE_INTERVALS) {
|
|
61
125
|
if (viewDuration / interval <= maxTicks) return interval;
|
|
@@ -72,6 +136,13 @@ export function computeTimeMarkers(
|
|
|
72
136
|
const maxTicks = 6;
|
|
73
137
|
const interval = pickInterval(viewDuration, maxTicks);
|
|
74
138
|
|
|
139
|
+
// Sub-second steps need fractional labels, or ticks past 1s collide as
|
|
140
|
+
// duplicate whole seconds ("…1s, 2s, 2s, 3s"). Scale decimals to the step.
|
|
141
|
+
const fractionDigits =
|
|
142
|
+
interval >= MS_IN_SECOND
|
|
143
|
+
? 0
|
|
144
|
+
: Math.ceil(-Math.log10(interval / MS_IN_SECOND));
|
|
145
|
+
|
|
75
146
|
const firstTick = Math.ceil(offset / interval) * interval;
|
|
76
147
|
const markers: TimeMarker[] = [];
|
|
77
148
|
|
|
@@ -80,7 +151,10 @@ export function computeTimeMarkers(
|
|
|
80
151
|
if (position < -0.01 || position > 1.01) continue;
|
|
81
152
|
markers.push({
|
|
82
153
|
position: Math.min(Math.max(position, 0), 1),
|
|
83
|
-
label:
|
|
154
|
+
label:
|
|
155
|
+
fractionDigits === 0
|
|
156
|
+
? formatDuration(Math.abs(t), true)
|
|
157
|
+
: formatDurationPrecise(Math.abs(t), fractionDigits),
|
|
84
158
|
value: t,
|
|
85
159
|
});
|
|
86
160
|
if (markers.length >= MAX_MARKERS) break;
|
|
@@ -100,6 +174,11 @@ export interface SpanGap {
|
|
|
100
174
|
rowIndex: number;
|
|
101
175
|
}
|
|
102
176
|
|
|
177
|
+
/** Project an absolute time onto the viewport as a clamped [0, 1] fraction. */
|
|
178
|
+
function toViewportFrac(ms: number, viewStart: number, range: number): number {
|
|
179
|
+
return Math.min(Math.max((ms - viewStart) / range, 0), 1);
|
|
180
|
+
}
|
|
181
|
+
|
|
103
182
|
export function computeSpanGaps(
|
|
104
183
|
spans: Span[],
|
|
105
184
|
viewStart: number,
|
|
@@ -115,8 +194,8 @@ export function computeSpanGaps(
|
|
|
115
194
|
const gapMs = startTime - endTime;
|
|
116
195
|
if (gapMs <= 0) continue;
|
|
117
196
|
|
|
118
|
-
const leftFrac =
|
|
119
|
-
const rightFrac =
|
|
197
|
+
const leftFrac = toViewportFrac(endTime, viewStart, range);
|
|
198
|
+
const rightFrac = toViewportFrac(startTime, viewStart, range);
|
|
120
199
|
if (rightFrac - leftFrac < 0.001) continue;
|
|
121
200
|
|
|
122
201
|
gaps.push({ gapMs, leftFrac, rightFrac, rowIndex: i });
|
|
@@ -124,24 +203,129 @@ export function computeSpanGaps(
|
|
|
124
203
|
return gaps;
|
|
125
204
|
}
|
|
126
205
|
|
|
206
|
+
export interface SpanDelta {
|
|
207
|
+
/** True measured time between the two spans, unaffected by clamping. */
|
|
208
|
+
deltaMs: number;
|
|
209
|
+
/** Viewport-clamped fraction of the anchor span's measured edge. */
|
|
210
|
+
anchorFrac: number;
|
|
211
|
+
/** Viewport-clamped fraction of the hovered span's measured edge. */
|
|
212
|
+
hoveredFrac: number;
|
|
213
|
+
/**
|
|
214
|
+
* Which edge of the anchor span the measurement runs from: its end when the
|
|
215
|
+
* spans are disjoint and the anchor comes first, otherwise its start.
|
|
216
|
+
*/
|
|
217
|
+
anchorEdge: 'start' | 'end';
|
|
218
|
+
/**
|
|
219
|
+
* Set when the hovered span lies entirely outside the viewport on one side,
|
|
220
|
+
* i.e. its row renders an off-screen arrow the line should stop short of.
|
|
221
|
+
*/
|
|
222
|
+
hoveredOffscreen: 'left' | 'right' | null;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Measure the temporal delta between an anchor (selected) span and a hovered
|
|
227
|
+
* span for the Alt+hover measurement overlay. Ordering the two spans by start
|
|
228
|
+
* time (E = earlier-starting, L = later-starting), the measurement runs to
|
|
229
|
+
* L's start from E's end when the spans are disjoint ("how long after E ended
|
|
230
|
+
* did L start"), or from E's start when they overlap ("how long after E
|
|
231
|
+
* started did L start"). Fractions are clamped to the viewport like
|
|
232
|
+
* `computeSpanGaps`; `deltaMs` is always the true duration. Returns null when
|
|
233
|
+
* the measurement lies entirely outside the viewport.
|
|
234
|
+
*/
|
|
235
|
+
export function computeSpanDelta(
|
|
236
|
+
anchor: Span,
|
|
237
|
+
hovered: Span,
|
|
238
|
+
viewStart: number,
|
|
239
|
+
viewEnd: number
|
|
240
|
+
): SpanDelta | null {
|
|
241
|
+
const range = viewEnd - viewStart;
|
|
242
|
+
if (range <= 0) return null;
|
|
243
|
+
|
|
244
|
+
const anchorStart = getHighResInMs(anchor.startTime);
|
|
245
|
+
const hoveredStart = getHighResInMs(hovered.startTime);
|
|
246
|
+
const anchorIsEarlier = anchorStart <= hoveredStart;
|
|
247
|
+
const earlierStart = anchorIsEarlier ? anchorStart : hoveredStart;
|
|
248
|
+
const earlierEnd = getHighResInMs(
|
|
249
|
+
anchorIsEarlier ? anchor.endTime : hovered.endTime
|
|
250
|
+
);
|
|
251
|
+
const laterStart = anchorIsEarlier ? hoveredStart : anchorStart;
|
|
252
|
+
|
|
253
|
+
const originMs = earlierEnd <= laterStart ? earlierEnd : earlierStart;
|
|
254
|
+
const deltaMs = laterStart - originMs;
|
|
255
|
+
|
|
256
|
+
// Entirely outside the viewport. Compared in time-space (not clamped
|
|
257
|
+
// fractions) so a zero-delta point sitting exactly on a viewport edge —
|
|
258
|
+
// e.g. the root span selected at default zoom — still renders.
|
|
259
|
+
if (laterStart < viewStart || originMs > viewEnd) {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
const originFrac = toViewportFrac(originMs, viewStart, range);
|
|
264
|
+
const laterFrac = toViewportFrac(laterStart, viewStart, range);
|
|
265
|
+
|
|
266
|
+
const hoveredEnd = getHighResInMs(hovered.endTime);
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
deltaMs,
|
|
270
|
+
anchorFrac: anchorIsEarlier ? originFrac : laterFrac,
|
|
271
|
+
hoveredFrac: anchorIsEarlier ? laterFrac : originFrac,
|
|
272
|
+
anchorEdge: anchorIsEarlier && earlierEnd <= laterStart ? 'end' : 'start',
|
|
273
|
+
hoveredOffscreen:
|
|
274
|
+
hoveredStart > viewEnd ? 'right' : hoveredEnd < viewStart ? 'left' : null,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
|
|
127
278
|
// ---------------------------------------------------------------------------
|
|
128
279
|
// Resource colors
|
|
129
280
|
// ---------------------------------------------------------------------------
|
|
130
281
|
|
|
131
282
|
export const RESOURCE_COLORS: Record<
|
|
132
283
|
string,
|
|
133
|
-
{
|
|
284
|
+
{
|
|
285
|
+
bg: string;
|
|
286
|
+
border: string;
|
|
287
|
+
errorBg?: string;
|
|
288
|
+
errorBorder?: string;
|
|
289
|
+
}
|
|
134
290
|
> = {
|
|
135
|
-
run: {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
291
|
+
run: {
|
|
292
|
+
bg: 'var(--ds-blue-200)',
|
|
293
|
+
border: 'var(--ds-blue-500)',
|
|
294
|
+
errorBg: 'var(--ds-red-200)',
|
|
295
|
+
errorBorder: 'var(--ds-red-500)',
|
|
296
|
+
},
|
|
297
|
+
step: {
|
|
298
|
+
bg: 'var(--ds-green-200)',
|
|
299
|
+
border: 'var(--ds-green-500)',
|
|
300
|
+
errorBg: 'var(--ds-red-200)',
|
|
301
|
+
errorBorder: 'var(--ds-red-500)',
|
|
302
|
+
},
|
|
303
|
+
// Passive spans (hooks) stay gray — matches event-list icons and the minimap.
|
|
304
|
+
hook: {
|
|
305
|
+
bg: 'var(--ds-gray-200)',
|
|
306
|
+
border: 'var(--ds-gray-500)',
|
|
307
|
+
errorBg: 'var(--ds-red-200)',
|
|
308
|
+
errorBorder: 'var(--ds-red-500)',
|
|
309
|
+
},
|
|
310
|
+
sleep: {
|
|
311
|
+
bg: 'var(--ds-purple-200)',
|
|
312
|
+
border: 'var(--ds-purple-500)',
|
|
313
|
+
errorBg: 'var(--ds-red-200)',
|
|
314
|
+
errorBorder: 'var(--ds-red-500)',
|
|
315
|
+
},
|
|
316
|
+
default: {
|
|
317
|
+
bg: 'var(--ds-gray-200)',
|
|
318
|
+
border: 'var(--ds-gray-500)',
|
|
319
|
+
errorBg: 'var(--ds-red-200)',
|
|
320
|
+
errorBorder: 'var(--ds-red-500)',
|
|
321
|
+
},
|
|
140
322
|
};
|
|
141
323
|
|
|
142
324
|
export function getResourceColor(resource: string): {
|
|
143
|
-
|
|
144
|
-
|
|
325
|
+
bg: string;
|
|
326
|
+
border: string;
|
|
327
|
+
errorBg?: string;
|
|
328
|
+
errorBorder?: string;
|
|
145
329
|
} {
|
|
146
330
|
return RESOURCE_COLORS[resource] ?? RESOURCE_COLORS.default;
|
|
147
331
|
}
|
|
@@ -152,7 +336,9 @@ export function getResourceColor(resource: string): {
|
|
|
152
336
|
|
|
153
337
|
export type SegmentStatus =
|
|
154
338
|
| 'queued'
|
|
339
|
+
| 'pending'
|
|
155
340
|
| 'running'
|
|
341
|
+
| 'completed'
|
|
156
342
|
| 'failed'
|
|
157
343
|
| 'retrying'
|
|
158
344
|
| 'succeeded'
|
|
@@ -210,7 +396,7 @@ function computeStepSegmentsFromSpan(
|
|
|
210
396
|
]);
|
|
211
397
|
|
|
212
398
|
if (marks.length === 0) {
|
|
213
|
-
segments.push({ startFraction: 0, endFraction: 1, status: '
|
|
399
|
+
segments.push({ startFraction: 0, endFraction: 1, status: 'queued' });
|
|
214
400
|
return segments;
|
|
215
401
|
}
|
|
216
402
|
|
|
@@ -245,7 +431,7 @@ function computeStepSegmentsFromSpan(
|
|
|
245
431
|
? 'failed'
|
|
246
432
|
: nextType === 'step_completed'
|
|
247
433
|
? 'succeeded'
|
|
248
|
-
: '
|
|
434
|
+
: 'retrying';
|
|
249
435
|
segments.push({
|
|
250
436
|
startFraction: markFrac,
|
|
251
437
|
endFraction: nextFrac,
|
|
@@ -280,47 +466,20 @@ function computeHookSegmentsFromSpan(
|
|
|
280
466
|
const segments: Segment[] = [];
|
|
281
467
|
if (duration <= 0) return segments;
|
|
282
468
|
|
|
283
|
-
const
|
|
284
|
-
.map((e) => ({ name: e.name, time: getHighResInMs(e.timestamp) }))
|
|
285
|
-
.sort((a, b) => a.time - b.time);
|
|
286
|
-
|
|
287
|
-
const received = sorted.find((e) => e.name === 'hook_received');
|
|
288
|
-
const disposed = sorted.find((e) => e.name === 'hook_disposed');
|
|
289
|
-
|
|
290
|
-
if (!received && !disposed) {
|
|
291
|
-
segments.push({ startFraction: 0, endFraction: 1, status: 'waiting' });
|
|
292
|
-
return segments;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
const receivedFrac = received
|
|
296
|
-
? timeToFraction(received.time, startMs, duration)
|
|
297
|
-
: null;
|
|
469
|
+
const disposed = sortedEventMarks(events, ['hook_disposed'])[0];
|
|
298
470
|
const disposedFrac = disposed
|
|
299
471
|
? timeToFraction(disposed.time, startMs, duration)
|
|
300
472
|
: null;
|
|
301
473
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
startFraction: 0,
|
|
305
|
-
endFraction: receivedFrac,
|
|
306
|
-
status: 'waiting',
|
|
307
|
-
});
|
|
308
|
-
} else if (receivedFrac === null && disposedFrac !== null) {
|
|
474
|
+
const waitingEnd = disposedFrac ?? 1;
|
|
475
|
+
if (waitingEnd > 0.001) {
|
|
309
476
|
segments.push({
|
|
310
477
|
startFraction: 0,
|
|
311
|
-
endFraction:
|
|
478
|
+
endFraction: waitingEnd,
|
|
312
479
|
status: 'waiting',
|
|
313
480
|
});
|
|
314
481
|
}
|
|
315
482
|
|
|
316
|
-
if (receivedFrac !== null) {
|
|
317
|
-
segments.push({
|
|
318
|
-
startFraction: receivedFrac,
|
|
319
|
-
endFraction: disposedFrac ?? 1,
|
|
320
|
-
status: 'received',
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
|
|
324
483
|
if (disposedFrac !== null && disposedFrac < 0.999) {
|
|
325
484
|
segments.push({
|
|
326
485
|
startFraction: disposedFrac,
|
|
@@ -341,6 +500,13 @@ function computeSleepSegmentsFromSpan(
|
|
|
341
500
|
return [{ startFraction: 0, endFraction: 1, status: 'sleeping' }];
|
|
342
501
|
}
|
|
343
502
|
|
|
503
|
+
function runSegmentStatus(runStatus: string | undefined): SegmentStatus {
|
|
504
|
+
if (runStatus === 'failed') return 'failed';
|
|
505
|
+
if (runStatus === 'pending') return 'pending';
|
|
506
|
+
if (runStatus === 'running') return 'running';
|
|
507
|
+
return 'completed';
|
|
508
|
+
}
|
|
509
|
+
|
|
344
510
|
function computeRunSegmentsFromSpan(
|
|
345
511
|
startMs: number,
|
|
346
512
|
duration: number,
|
|
@@ -355,11 +521,12 @@ function computeRunSegmentsFromSpan(
|
|
|
355
521
|
.map((e) => ({ name: e.name, time: getHighResInMs(e.timestamp) }))
|
|
356
522
|
.sort((a, b) => a.time - b.time);
|
|
357
523
|
|
|
524
|
+
const runData = attributes?.data as Record<string, unknown> | undefined;
|
|
525
|
+
const runStatus = runData?.status as string | undefined;
|
|
526
|
+
|
|
358
527
|
const hasRunCreated = sorted.some((e) => e.name === 'run_created');
|
|
359
528
|
|
|
360
529
|
if (!hasRunCreated) {
|
|
361
|
-
const runData = attributes?.data as Record<string, unknown> | undefined;
|
|
362
|
-
const runStatus = runData?.status as string | undefined;
|
|
363
530
|
return computeV1RunSegments(startMs, duration, activeStartMs, runStatus);
|
|
364
531
|
}
|
|
365
532
|
|
|
@@ -381,7 +548,7 @@ function computeRunSegmentsFromSpan(
|
|
|
381
548
|
segments.push({
|
|
382
549
|
startFraction: cursor,
|
|
383
550
|
endFraction: 1,
|
|
384
|
-
status: failedEvent ? 'failed' :
|
|
551
|
+
status: failedEvent ? 'failed' : runSegmentStatus(runStatus),
|
|
385
552
|
});
|
|
386
553
|
|
|
387
554
|
return segments;
|
|
@@ -411,7 +578,7 @@ function computeV1RunSegments(
|
|
|
411
578
|
segments.push({
|
|
412
579
|
startFraction: cursor,
|
|
413
580
|
endFraction: 1,
|
|
414
|
-
status: runStatus
|
|
581
|
+
status: runSegmentStatus(runStatus),
|
|
415
582
|
});
|
|
416
583
|
|
|
417
584
|
return segments;
|
|
@@ -448,3 +615,57 @@ export function computeSpanSegments(span: Span): Segment[] {
|
|
|
448
615
|
return [];
|
|
449
616
|
}
|
|
450
617
|
}
|
|
618
|
+
|
|
619
|
+
// ---------------------------------------------------------------------------
|
|
620
|
+
// Span markers — point-in-time events rendered as ticks on top of a bar
|
|
621
|
+
// ---------------------------------------------------------------------------
|
|
622
|
+
|
|
623
|
+
export interface SpanMarker {
|
|
624
|
+
timeMs: number;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
// `hook_received` = a resumption; `attr_set` = attributes written mid-span.
|
|
628
|
+
const MARKER_EVENT_NAMES = ['hook_received', 'attr_set'];
|
|
629
|
+
|
|
630
|
+
export function computeSpanMarkers(span: Span): SpanMarker[] {
|
|
631
|
+
return sortedEventMarks(span.events, MARKER_EVENT_NAMES).map((mark) => ({
|
|
632
|
+
timeMs: mark.time,
|
|
633
|
+
}));
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
export interface OffscreenSide {
|
|
637
|
+
count: number;
|
|
638
|
+
/** Nearest off-screen marker — the one a reveal jumps to. */
|
|
639
|
+
nearestMs: number;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
export interface OffscreenMarkers {
|
|
643
|
+
left: OffscreenSide | null;
|
|
644
|
+
right: OffscreenSide | null;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
/** Partition markers outside `[visibleStartMs, visibleEndMs]` by side. */
|
|
648
|
+
export function computeOffscreenMarkers(
|
|
649
|
+
markers: SpanMarker[],
|
|
650
|
+
visibleStartMs: number,
|
|
651
|
+
visibleEndMs: number
|
|
652
|
+
): OffscreenMarkers {
|
|
653
|
+
let leftCount = 0;
|
|
654
|
+
let rightCount = 0;
|
|
655
|
+
let nearestLeft = Number.NEGATIVE_INFINITY;
|
|
656
|
+
let nearestRight = Number.POSITIVE_INFINITY;
|
|
657
|
+
for (const { timeMs } of markers) {
|
|
658
|
+
if (timeMs < visibleStartMs) {
|
|
659
|
+
leftCount++;
|
|
660
|
+
if (timeMs > nearestLeft) nearestLeft = timeMs;
|
|
661
|
+
} else if (timeMs > visibleEndMs) {
|
|
662
|
+
rightCount++;
|
|
663
|
+
if (timeMs < nearestRight) nearestRight = timeMs;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
return {
|
|
667
|
+
left: leftCount > 0 ? { count: leftCount, nearestMs: nearestLeft } : null,
|
|
668
|
+
right:
|
|
669
|
+
rightCount > 0 ? { count: rightCount, nearestMs: nearestRight } : null,
|
|
670
|
+
};
|
|
671
|
+
}
|
|
@@ -1,49 +1,55 @@
|
|
|
1
|
-
import { useMemo } from 'react';
|
|
2
1
|
import type { WorkflowRun } from '@workflow/core/runtime';
|
|
3
2
|
import type { Event } from '@workflow/world';
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
4
|
import { buildTrace, type TraceWithMeta } from '../lib/trace-builder';
|
|
5
|
-
import { NewTraceViewer as NewTraceViewerComponent } from './new-trace-viewer/trace-viewer';
|
|
6
5
|
import {
|
|
7
|
-
SidebarDataProvider,
|
|
8
6
|
type SidebarDataContextValue,
|
|
7
|
+
SidebarDataProvider,
|
|
9
8
|
} from './sidebar/sidebar-data-context';
|
|
10
|
-
import
|
|
9
|
+
import { TraceViewerSkeleton } from './trace-viewer/components/trace-viewer-skeleton';
|
|
10
|
+
import { TraceViewer as TraceViewerComponent } from './trace-viewer/trace-viewer';
|
|
11
11
|
|
|
12
|
-
const
|
|
12
|
+
const TraceViewer = ({
|
|
13
13
|
run,
|
|
14
14
|
events,
|
|
15
15
|
sidebarData,
|
|
16
|
+
onLoadMore,
|
|
17
|
+
hasMore,
|
|
18
|
+
isLoadingMore,
|
|
19
|
+
loading = false,
|
|
16
20
|
}: {
|
|
17
21
|
run: WorkflowRun;
|
|
18
22
|
events: Event[];
|
|
19
23
|
sidebarData: SidebarDataContextValue;
|
|
24
|
+
onLoadMore?: () => void | Promise<void>;
|
|
25
|
+
hasMore?: boolean;
|
|
26
|
+
isLoadingMore?: boolean;
|
|
27
|
+
loading?: boolean;
|
|
20
28
|
}) => {
|
|
21
|
-
|
|
22
|
-
// Active span widths are animated imperatively by useLiveTick at 60fps.
|
|
23
|
-
const traceWithMeta: TraceWithMeta | undefined = useMemo(() => {
|
|
29
|
+
const trace: TraceWithMeta | undefined = useMemo(() => {
|
|
24
30
|
if (!run?.runId) {
|
|
25
31
|
return undefined;
|
|
26
32
|
}
|
|
27
33
|
return buildTrace(run, events, new Date());
|
|
28
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps -- `new Date()` is intentionally not a dep
|
|
34
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- `new Date()` is intentionally not a dep
|
|
29
35
|
}, [run, events]);
|
|
30
|
-
const trace = traceWithMeta;
|
|
31
36
|
|
|
32
|
-
if (!trace) {
|
|
33
|
-
return
|
|
34
|
-
<div className="relative w-full h-full flex items-center justify-center">
|
|
35
|
-
<div className="text-gray-500 text-sm">Loading trace…</div>
|
|
36
|
-
</div>
|
|
37
|
-
);
|
|
37
|
+
if (!trace || (loading && events.length === 0)) {
|
|
38
|
+
return <TraceViewerSkeleton />;
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
return (
|
|
41
42
|
<SidebarDataProvider value={sidebarData}>
|
|
42
43
|
<div className="relative w-full h-full flex">
|
|
43
|
-
<
|
|
44
|
+
<TraceViewerComponent
|
|
45
|
+
trace={trace}
|
|
46
|
+
onLoadMore={onLoadMore}
|
|
47
|
+
hasMore={hasMore}
|
|
48
|
+
isLoadingMore={isLoadingMore}
|
|
49
|
+
/>
|
|
44
50
|
</div>
|
|
45
51
|
</SidebarDataProvider>
|
|
46
52
|
);
|
|
47
53
|
};
|
|
48
54
|
|
|
49
|
-
export {
|
|
55
|
+
export { TraceViewer };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cva, type VariantProps } from 'class-variance-authority';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
|
|
4
|
-
import { cn } from '../../lib/
|
|
4
|
+
import { cn } from '../../lib/cn';
|
|
5
5
|
|
|
6
6
|
const alertVariants = cva(
|
|
7
7
|
'relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4',
|
|
@@ -50,7 +50,7 @@ const AlertDescription = React.forwardRef<
|
|
|
50
50
|
>(({ className, ...props }, ref) => (
|
|
51
51
|
<div
|
|
52
52
|
ref={ref}
|
|
53
|
-
className={cn('text-
|
|
53
|
+
className={cn('text-copy-14 [&_p]:leading-relaxed', className)}
|
|
54
54
|
{...props}
|
|
55
55
|
/>
|
|
56
56
|
));
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { cva, type VariantProps } from 'class-variance-authority';
|
|
2
|
+
import type * as React from 'react';
|
|
3
|
+
import { cn } from '../../lib/cn';
|
|
4
|
+
|
|
5
|
+
const buttonVariants = cva(
|
|
6
|
+
[
|
|
7
|
+
'outline-none m-0 border-0 align-baseline no-underline group/trigger',
|
|
8
|
+
'relative cursor-pointer select-none transform translate-z-0',
|
|
9
|
+
'inline-flex max-w-full items-center justify-center gap-x-1 whitespace-nowrap rounded-md font-medium',
|
|
10
|
+
'!text-gray-100',
|
|
11
|
+
'bg-gray-1000',
|
|
12
|
+
'transition-[border-color,background,color,transform,box-shadow] duration-150 ease-in-out',
|
|
13
|
+
// Geist invert hover: literal fallbacks (no token dep, so it resolves in any
|
|
14
|
+
// consuming app), darkened via ancestor theme class without a registered variant.
|
|
15
|
+
'hover:bg-[var(--themed-hover-bg,_hsl(0,_0%,_22%))]',
|
|
16
|
+
'[.dark-theme_&]:hover:bg-[var(--themed-hover-bg,_hsl(0,_0%,_80%))]',
|
|
17
|
+
'[[data-theme=dark]_&]:hover:bg-[var(--themed-hover-bg,_hsl(0,_0%,_80%))]',
|
|
18
|
+
// Geist focus ring as arbitrary properties (no bare `outline`/ambiguous
|
|
19
|
+
// arbitrary-color utilities, which differ between Tailwind v3 and v4).
|
|
20
|
+
'focus-visible:[outline:2px_solid_var(--ds-focus-color)] focus-visible:[outline-offset:2px]',
|
|
21
|
+
// disabled styles
|
|
22
|
+
'disabled:cursor-not-allowed aria-disabled:cursor-not-allowed',
|
|
23
|
+
'disabled:bg-gray-100 disabled:!text-gray-700 disabled:hover:bg-gray-100',
|
|
24
|
+
'aria-disabled:bg-gray-100 aria-disabled:text-gray-700 aria-disabled:hover:bg-gray-100',
|
|
25
|
+
],
|
|
26
|
+
{
|
|
27
|
+
variants: {
|
|
28
|
+
variant: {
|
|
29
|
+
default: '',
|
|
30
|
+
secondary:
|
|
31
|
+
'border border-gray-alpha-400 [--themed-bg:_var(--ds-background-100)] [--themed-fg:_var(--ds-gray-1000)] [--themed-hover-bg:_var(--ds-gray-alpha-200)]',
|
|
32
|
+
ghost:
|
|
33
|
+
'[--themed-bg:_transparent] [--themed-fg:_var(--ds-gray-1000)] [--themed-hover-bg:_var(--ds-gray-alpha-100)]',
|
|
34
|
+
},
|
|
35
|
+
size: {
|
|
36
|
+
default: 'h-10 px-4 text-button-14',
|
|
37
|
+
sm: 'h-8 px-3 text-button-14',
|
|
38
|
+
xs: 'h-6 px-1.5 py-0.5 text-button-12 rounded-[4px]',
|
|
39
|
+
icon: 'h-8 w-8',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
defaultVariants: {
|
|
43
|
+
variant: 'default',
|
|
44
|
+
size: 'default',
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> &
|
|
50
|
+
VariantProps<typeof buttonVariants>;
|
|
51
|
+
|
|
52
|
+
export function Button({
|
|
53
|
+
className,
|
|
54
|
+
variant,
|
|
55
|
+
size,
|
|
56
|
+
type = 'button',
|
|
57
|
+
...props
|
|
58
|
+
}: ButtonProps) {
|
|
59
|
+
return (
|
|
60
|
+
<button
|
|
61
|
+
type={type}
|
|
62
|
+
className={cn(buttonVariants({ variant, size, className }))}
|
|
63
|
+
{...props}
|
|
64
|
+
/>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { buttonVariants };
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
|
|
5
|
-
import { cn } from '../../lib/
|
|
5
|
+
import { cn } from '../../lib/cn';
|
|
6
6
|
|
|
7
7
|
const Card = React.forwardRef<
|
|
8
8
|
HTMLDivElement,
|
|
@@ -32,14 +32,7 @@ const CardTitle = React.forwardRef<
|
|
|
32
32
|
HTMLDivElement,
|
|
33
33
|
React.HTMLAttributes<HTMLDivElement>
|
|
34
34
|
>(({ className, ...props }, ref) => (
|
|
35
|
-
<div
|
|
36
|
-
ref={ref}
|
|
37
|
-
className={cn(
|
|
38
|
-
'text-2xl font-semibold leading-none tracking-tight',
|
|
39
|
-
className
|
|
40
|
-
)}
|
|
41
|
-
{...props}
|
|
42
|
-
/>
|
|
35
|
+
<div ref={ref} className={cn('text-heading-24', className)} {...props} />
|
|
43
36
|
));
|
|
44
37
|
CardTitle.displayName = 'CardTitle';
|
|
45
38
|
|
|
@@ -49,7 +42,7 @@ const CardDescription = React.forwardRef<
|
|
|
49
42
|
>(({ className, ...props }, ref) => (
|
|
50
43
|
<div
|
|
51
44
|
ref={ref}
|
|
52
|
-
className={cn('text-
|
|
45
|
+
className={cn('text-copy-14', className)}
|
|
53
46
|
style={{ color: 'var(--ds-gray-900)' }}
|
|
54
47
|
{...props}
|
|
55
48
|
/>
|