@mastra/playground-ui 58.0.0 → 59.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/dist/{Badge-TD55_qZJ.js → Badge-Bzn8Z-_I.js} +2 -2
- package/dist/Badge-Bzn8Z-_I.js.map +1 -0
- package/dist/{Badge-BEeYtjmv.cjs → Badge-DFNxcz-r.cjs} +2 -2
- package/dist/Badge-DFNxcz-r.cjs.map +1 -0
- package/dist/{Header-BVnFQlzE.js → Header-hTHhO02b.js} +2 -2
- package/dist/{Header-BVnFQlzE.js.map → Header-hTHhO02b.js.map} +1 -1
- package/dist/{Header-CGjhJ0nQ.cjs → Header-y51Sfo3G.cjs} +2 -2
- package/dist/{Header-CGjhJ0nQ.cjs.map → Header-y51Sfo3G.cjs.map} +1 -1
- package/dist/{Txt-DTh3Pa_a.js → Txt-BP1SRHmL.js} +4 -10
- package/dist/Txt-BP1SRHmL.js.map +1 -0
- package/dist/{Txt-B4-2nLaI.cjs → Txt-DPmEpNbp.cjs} +4 -10
- package/dist/Txt-DPmEpNbp.cjs.map +1 -0
- package/dist/{ask-user-BPpgiE7k.cjs → ask-user-4pnmHbuC.cjs} +3 -3
- package/dist/{ask-user-BPpgiE7k.cjs.map → ask-user-4pnmHbuC.cjs.map} +1 -1
- package/dist/{ask-user-jDUt7hgT.js → ask-user-CFcQN_7m.js} +3 -3
- package/dist/{ask-user-jDUt7hgT.js.map → ask-user-CFcQN_7m.js.map} +1 -1
- package/dist/{chat-notification-CmdRGO_D.js → chat-notification-BI_WRUvG.js} +3 -3
- package/dist/{chat-notification-CmdRGO_D.js.map → chat-notification-BI_WRUvG.js.map} +1 -1
- package/dist/{chat-notification-DJykWtoj.cjs → chat-notification-Dc7jwULm.cjs} +3 -3
- package/dist/{chat-notification-DJykWtoj.cjs.map → chat-notification-Dc7jwULm.cjs.map} +1 -1
- package/dist/{chat-signal-xs3FkPts.cjs → chat-signal-BodewV33.cjs} +3 -3
- package/dist/{chat-signal-xs3FkPts.cjs.map → chat-signal-BodewV33.cjs.map} +1 -1
- package/dist/{chat-signal-Vg8pGXwH.js → chat-signal-D0zw80bU.js} +3 -3
- package/dist/{chat-signal-Vg8pGXwH.js.map → chat-signal-D0zw80bU.js.map} +1 -1
- package/dist/{combobox-BoSB-muq.cjs → combobox-B19HJqE-.cjs} +2 -2
- package/dist/{combobox-BoSB-muq.cjs.map → combobox-B19HJqE-.cjs.map} +1 -1
- package/dist/{combobox-Cd0JPUQW.js → combobox-D_kmwSKS.js} +2 -2
- package/dist/{combobox-Cd0JPUQW.js.map → combobox-D_kmwSKS.js.map} +1 -1
- package/dist/components/Avatar.cjs.js +1 -1
- package/dist/components/Avatar.es.js +1 -1
- package/dist/components/Badge.cjs.js +1 -1
- package/dist/components/Badge.es.js +1 -1
- package/dist/components/ClampedText.cjs.js +1 -1
- package/dist/components/ClampedText.es.js +1 -1
- package/dist/components/Combobox.cjs.js +1 -1
- package/dist/components/Combobox.es.js +1 -1
- package/dist/components/Comment.cjs.js +2 -2
- package/dist/components/Comment.es.js +2 -2
- package/dist/components/CompactNumber.cjs.js +24 -0
- package/dist/components/CompactNumber.cjs.js.map +1 -0
- package/dist/components/CompactNumber.d.ts +2 -0
- package/dist/components/CompactNumber.es.js +20 -0
- package/dist/components/CompactNumber.es.js.map +1 -0
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataList.cjs.js +8 -14
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +8 -14
- package/dist/components/DataList.es.js.map +1 -1
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateRangeTimeline.cjs.js +1 -1
- package/dist/components/DateRangeTimeline.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +1 -1
- package/dist/components/DateTimePicker.es.js +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Entity.cjs.js +1 -1
- package/dist/components/Entity.es.js +1 -1
- package/dist/components/EntityHeader.cjs.js +1 -1
- package/dist/components/EntityHeader.es.js +1 -1
- package/dist/components/Entry.cjs.js +1 -1
- package/dist/components/Entry.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +3 -3
- package/dist/components/EnvironmentVariablesEditor.es.js +3 -3
- package/dist/components/FilterBar.cjs.js +1 -1
- package/dist/components/FilterBar.es.js +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +4 -4
- package/dist/components/FormFieldBlocks.es.js +4 -4
- package/dist/components/Header.cjs.js +1 -1
- package/dist/components/Header.es.js +1 -1
- package/dist/components/InlineCode.cjs.js +10 -0
- package/dist/components/InlineCode.cjs.js.map +1 -0
- package/dist/components/InlineCode.d.ts +2 -0
- package/dist/components/InlineCode.es.js +2 -0
- package/dist/components/InlineCode.es.js.map +1 -0
- package/dist/components/ItemList.cjs.js +5 -17
- package/dist/components/ItemList.cjs.js.map +1 -1
- package/dist/components/ItemList.es.js +5 -17
- package/dist/components/ItemList.es.js.map +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +2 -2
- package/dist/components/JSONSchemaForm.es.js +2 -2
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -2
- package/dist/components/LogsDataList.es.js +2 -2
- package/dist/components/Message.cjs.js +4 -5
- package/dist/components/Message.cjs.js.map +1 -1
- package/dist/components/Message.es.js +4 -5
- package/dist/components/Message.es.js.map +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/MetricsCardGroup.cjs.js +2 -11
- package/dist/components/MetricsCardGroup.cjs.js.map +1 -1
- package/dist/components/MetricsCardGroup.es.js +2 -11
- package/dist/components/MetricsCardGroup.es.js.map +1 -1
- package/dist/components/MetricsKpiCard.cjs.js +1 -1
- package/dist/components/MetricsKpiCard.es.js +1 -1
- package/dist/components/MetricsLineChart.cjs.js +2 -1
- package/dist/components/MetricsLineChart.cjs.js.map +1 -1
- package/dist/components/MetricsLineChart.es.js +1 -1
- package/dist/components/PageHeader.cjs.js +1 -1
- package/dist/components/PageHeader.es.js +1 -1
- package/dist/components/PageLayout.cjs.js +1 -1
- package/dist/components/PageLayout.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +1 -1
- package/dist/components/PropertyFilter.es.js +1 -1
- package/dist/components/RelativeTimestamp.cjs.js +119 -0
- package/dist/components/RelativeTimestamp.cjs.js.map +1 -0
- package/dist/components/RelativeTimestamp.d.ts +2 -0
- package/dist/components/RelativeTimestamp.es.js +115 -0
- package/dist/components/RelativeTimestamp.es.js.map +1 -0
- package/dist/components/Section.cjs.js +1 -1
- package/dist/components/Section.es.js +1 -1
- package/dist/components/SettingsRow.cjs.js +1 -1
- package/dist/components/SettingsRow.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/StatusIndicators.cjs.js +21 -14
- package/dist/components/StatusIndicators.cjs.js.map +1 -1
- package/dist/components/StatusIndicators.es.js +21 -15
- package/dist/components/StatusIndicators.es.js.map +1 -1
- package/dist/components/Table.cjs.js +3 -21
- package/dist/components/Table.cjs.js.map +1 -1
- package/dist/components/Table.es.js +3 -21
- package/dist/components/Table.es.js.map +1 -1
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/components/Txt.cjs.js +1 -1
- package/dist/components/Txt.es.js +1 -1
- package/dist/components/Workflow.cjs.js +9 -13
- package/dist/components/Workflow.cjs.js.map +1 -1
- package/dist/components/Workflow.es.js +9 -13
- package/dist/components/Workflow.es.js.map +1 -1
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/chat-event.cjs.js +3 -3
- package/dist/components/ai/chat-event.es.js +4 -4
- package/dist/components/ai/plan.cjs.js +3 -3
- package/dist/components/ai/plan.cjs.js.map +1 -1
- package/dist/components/ai/plan.es.js +3 -3
- package/dist/components/ai/plan.es.js.map +1 -1
- package/dist/components/ai/task-list.cjs.js +370 -55
- package/dist/components/ai/task-list.cjs.js.map +1 -1
- package/dist/components/ai/task-list.es.js +374 -58
- package/dist/components/ai/task-list.es.js.map +1 -1
- package/dist/components/ai/tool-call.cjs.js +7 -9
- package/dist/components/ai/tool-call.cjs.js.map +1 -1
- package/dist/components/ai/tool-call.es.js +8 -10
- package/dist/components/ai/tool-call.es.js.map +1 -1
- package/dist/{data-code-section-Cth9zVkj.js → data-code-section-BKrCkj90.js} +2 -2
- package/dist/{data-code-section-Cth9zVkj.js.map → data-code-section-BKrCkj90.js.map} +1 -1
- package/dist/{data-code-section-DE4AgaTU.cjs → data-code-section-C9z94ytx.cjs} +2 -2
- package/dist/{data-code-section-DE4AgaTU.cjs.map → data-code-section-C9z94ytx.cjs.map} +1 -1
- package/dist/{data-list-DisTjDHP.js → data-list-5-nRJbEO.js} +3 -3
- package/dist/{data-list-DisTjDHP.js.map → data-list-5-nRJbEO.js.map} +1 -1
- package/dist/{data-list-PwFpP_mo.cjs → data-list-RI8c32dk.cjs} +3 -3
- package/dist/{data-list-PwFpP_mo.cjs.map → data-list-RI8c32dk.cjs.map} +1 -1
- package/dist/{data-list-skeleton-DAfM8AjW.js → data-list-skeleton-BrSh9Y_3.js} +2 -2
- package/dist/{data-list-skeleton-DAfM8AjW.js.map → data-list-skeleton-BrSh9Y_3.js.map} +1 -1
- package/dist/{data-list-skeleton-CjwR0o3w.cjs → data-list-skeleton-CgbWqYky.cjs} +2 -2
- package/dist/{data-list-skeleton-CjwR0o3w.cjs.map → data-list-skeleton-CgbWqYky.cjs.map} +1 -1
- package/dist/{data-list-spacer-DEcgVGFM.cjs → data-list-spacer-1OqlC7WX.cjs} +2 -2
- package/dist/{data-list-spacer-DEcgVGFM.cjs.map → data-list-spacer-1OqlC7WX.cjs.map} +1 -1
- package/dist/{data-list-spacer-BmorAN0V.js → data-list-spacer-D3Rn1evn.js} +2 -2
- package/dist/{data-list-spacer-BmorAN0V.js.map → data-list-spacer-D3Rn1evn.js.map} +1 -1
- package/dist/{data-list-top-DpbOA3uw.js → data-list-top-B-AopfvE.js} +13 -21
- package/dist/data-list-top-B-AopfvE.js.map +1 -0
- package/dist/{data-list-top-WGUY167p.cjs → data-list-top-DFnudSA_.cjs} +13 -21
- package/dist/data-list-top-DFnudSA_.cjs.map +1 -0
- package/dist/{data-panel-BQVTKo86.js → data-panel-BWgExbHs.js} +2 -2
- package/dist/{data-panel-BQVTKo86.js.map → data-panel-BWgExbHs.js.map} +1 -1
- package/dist/{data-panel-XPXrhYJI.cjs → data-panel-C_BqhzeL.cjs} +2 -2
- package/dist/{data-panel-XPXrhYJI.cjs.map → data-panel-C_BqhzeL.cjs.map} +1 -1
- package/dist/{date-time-range-picker-C-t3Kdpk.js → date-time-range-picker-Bnviv7s-.js} +2 -2
- package/dist/{date-time-range-picker-C-t3Kdpk.js.map → date-time-range-picker-Bnviv7s-.js.map} +1 -1
- package/dist/{date-time-range-picker-BCzvSYx3.cjs → date-time-range-picker-sT5qAW-_.cjs} +2 -2
- package/dist/{date-time-range-picker-BCzvSYx3.cjs.map → date-time-range-picker-sT5qAW-_.cjs.map} +1 -1
- package/dist/domains/capabilities/hooks/use-feedback-available.cjs.js +16 -0
- package/dist/domains/capabilities/hooks/use-feedback-available.cjs.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-feedback-available.d.ts +2 -0
- package/dist/domains/capabilities/hooks/use-feedback-available.es.js +12 -0
- package/dist/domains/capabilities/hooks/use-feedback-available.es.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.cjs.js +20 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.cjs.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.d.ts +2 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.es.js +16 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.es.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.cjs.js +16 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.cjs.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.d.ts +2 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.es.js +12 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.es.js.map +1 -0
- package/dist/domains/capabilities/hooks.cjs.js +14 -0
- package/dist/domains/capabilities/hooks.cjs.js.map +1 -0
- package/dist/domains/capabilities/hooks.d.ts +2 -0
- package/dist/domains/capabilities/hooks.es.js +4 -0
- package/dist/domains/capabilities/hooks.es.js.map +1 -0
- package/dist/domains/capabilities.cjs.js +14 -0
- package/dist/domains/capabilities.cjs.js.map +1 -0
- package/dist/domains/capabilities.d.ts +2 -0
- package/dist/domains/capabilities.es.js +4 -0
- package/dist/domains/capabilities.es.js.map +1 -0
- package/dist/domains/chat/attachments/attachment-kind.es.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
- package/dist/domains/chat/components/section-label.cjs.js +1 -1
- package/dist/domains/chat/components/section-label.es.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.es.js +1 -1
- package/dist/domains/chat/messages/reasoning.cjs.js +4 -3
- package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
- package/dist/domains/chat/messages/reasoning.es.js +4 -3
- package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +2 -2
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +2 -2
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/user-file-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js.map +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
- package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
- package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +3 -3
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +6 -4
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +6 -4
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +11 -8
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +11 -8
- package/dist/domains/chat/tools/badges/observation-renderer.es.js.map +1 -1
- package/dist/domains/logs/components/log-data-panel.cjs.js +3 -6
- package/dist/domains/logs/components/log-data-panel.cjs.js.map +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +3 -6
- package/dist/domains/logs/components/log-data-panel.es.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
- package/dist/domains/logs/components/logs-list-view.es.js +2 -2
- package/dist/domains/logs/components/no-logs-info.cjs.js +3 -4
- package/dist/domains/logs/components/no-logs-info.cjs.js.map +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +3 -4
- package/dist/domains/logs/components/no-logs-info.es.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +7 -5
- package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +8 -6
- package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
- package/dist/domains/memory/components/observation-detail-view.cjs.js +4 -5
- package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js +4 -5
- package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
- package/dist/domains/memory/components/thread-context-progress.cjs.js +1 -1
- package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
- package/dist/domains/memory/components/thread-context-progress.es.js +1 -1
- package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
- package/dist/domains/memory/lib/timeline.cjs.js +0 -9
- package/dist/domains/memory/lib/timeline.cjs.js.map +1 -1
- package/dist/domains/memory/lib/timeline.es.js +1 -9
- package/dist/domains/memory/lib/timeline.es.js.map +1 -1
- package/dist/domains/metrics/components/bar-list.cjs.js +4 -4
- package/dist/domains/metrics/components/bar-list.cjs.js.map +1 -1
- package/dist/domains/metrics/components/bar-list.es.js +4 -4
- package/dist/domains/metrics/components/bar-list.es.js.map +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +33 -24
- package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/latency-card-view.es.js +34 -25
- package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.cjs.js +9 -8
- package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.es.js +8 -7
- package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/metrics-utils.cjs.js +0 -15
- package/dist/domains/metrics/components/metrics-utils.cjs.js.map +1 -1
- package/dist/domains/metrics/components/metrics-utils.es.js +1 -14
- package/dist/domains/metrics/components/metrics-utils.es.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +6 -5
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +4 -3
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.es.js +5 -5
- package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +7 -6
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +7 -6
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +13 -11
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +13 -11
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +7 -6
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +8 -7
- package/dist/domains/metrics/components/traces-volume-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components.cjs.js +0 -2
- package/dist/domains/metrics/components.cjs.js.map +1 -1
- package/dist/domains/metrics/components.es.js +1 -1
- package/dist/domains/metrics/hooks/use-latency-metrics.cjs.js +11 -11
- package/dist/domains/metrics/hooks/use-latency-metrics.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-latency-metrics.es.js +12 -11
- package/dist/domains/metrics/hooks/use-latency-metrics.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-metrics.cjs.js +3 -3
- package/dist/domains/metrics/hooks/use-metrics.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-metrics.es.js +3 -3
- package/dist/domains/metrics/hooks/use-metrics.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.cjs.js +5 -5
- package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.es.js +5 -5
- package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-scores-metrics.cjs.js +6 -7
- package/dist/domains/metrics/hooks/use-scores-metrics.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-scores-metrics.es.js +6 -7
- package/dist/domains/metrics/hooks/use-scores-metrics.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.cjs.js +4 -12
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.es.js +4 -12
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.es.js.map +1 -1
- package/dist/domains/metrics/hooks.cjs.js +3 -0
- package/dist/domains/metrics/hooks.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks.es.js +1 -0
- package/dist/domains/metrics/hooks.es.js.map +1 -1
- package/dist/domains/metrics/metrics-interval.cjs.js +20 -0
- package/dist/domains/metrics/metrics-interval.cjs.js.map +1 -0
- package/dist/domains/metrics/metrics-interval.d.ts +2 -0
- package/dist/domains/metrics/metrics-interval.es.js +15 -0
- package/dist/domains/metrics/metrics-interval.es.js.map +1 -0
- package/dist/domains/metrics.cjs.js +3 -2
- package/dist/domains/metrics.cjs.js.map +1 -1
- package/dist/domains/metrics.es.js +2 -1
- package/dist/domains/metrics.es.js.map +1 -1
- package/dist/domains/traces/components/no-traces-info.cjs.js +3 -4
- package/dist/domains/traces/components/no-traces-info.cjs.js.map +1 -1
- package/dist/domains/traces/components/no-traces-info.es.js +3 -4
- package/dist/domains/traces/components/no-traces-info.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +3 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +3 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +6 -4
- package/dist/domains/traces/components/span-summary-description.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-summary-description.es.js +7 -5
- package/dist/domains/traces/components/span-summary-description.es.js.map +1 -1
- package/dist/domains/traces/components/span-timeline-row.cjs.js +3 -4
- package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-timeline-row.es.js +3 -4
- package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js +6 -11
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.es.js +6 -11
- package/dist/domains/traces/components/span-timing-hover-card.es.js.map +1 -1
- package/dist/domains/traces/components/span-type-legend.cjs.js +1 -1
- package/dist/domains/traces/components/span-type-legend.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
- package/dist/domains/traces/components/timeline-timing-col.cjs.js +3 -4
- package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-timing-col.es.js +3 -4
- package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +21 -18
- package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +21 -18
- package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-span-timeline.cjs.js +10 -4
- package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-timeline.es.js +10 -4
- package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
- package/dist/domains/traces/components/trace-span-tree.cjs.js +3 -4
- package/dist/domains/traces/components/trace-span-tree.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-tree.es.js +3 -4
- package/dist/domains/traces/components/trace-span-tree.es.js.map +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +13 -10
- package/dist/domains/traces/components/trace-summary-description.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +13 -10
- package/dist/domains/traces/components/trace-summary-description.es.js.map +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +12 -10
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +12 -10
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -1
- package/dist/domains/traces/hooks/use-branch.cjs.js +0 -1
- package/dist/domains/traces/hooks/use-branch.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-branch.es.js +0 -1
- package/dist/domains/traces/hooks/use-branch.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js +0 -1
- package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-light-spans.es.js +0 -1
- package/dist/domains/traces/hooks/use-trace-light-spans.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-query.cjs.js +63 -3
- package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-query.es.js +61 -4
- package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-search.cjs.js +0 -1
- package/dist/domains/traces/hooks/use-trace-search.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-search.es.js +0 -1
- package/dist/domains/traces/hooks/use-trace-search.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-spans.cjs.js +0 -1
- package/dist/domains/traces/hooks/use-trace-spans.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-spans.es.js +0 -1
- package/dist/domains/traces/hooks/use-trace-spans.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-traces-list-source.cjs.js +42 -0
- package/dist/domains/traces/hooks/use-traces-list-source.cjs.js.map +1 -0
- package/dist/domains/traces/hooks/use-traces-list-source.d.ts +2 -0
- package/dist/domains/traces/hooks/use-traces-list-source.es.js +38 -0
- package/dist/domains/traces/hooks/use-traces-list-source.es.js.map +1 -0
- package/dist/domains/traces/hooks.cjs.js +2 -0
- package/dist/domains/traces/hooks.cjs.js.map +1 -1
- package/dist/domains/traces/hooks.es.js +1 -0
- package/dist/domains/traces/hooks.es.js.map +1 -1
- package/dist/domains/traces/trace-filters.cjs.js +10 -1
- package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
- package/dist/domains/traces/trace-filters.es.js +10 -1
- package/dist/domains/traces/trace-filters.es.js.map +1 -1
- package/dist/domains/traces/utils/span-utils.cjs.js +4 -36
- package/dist/domains/traces/utils/span-utils.cjs.js.map +1 -1
- package/dist/domains/traces/utils/span-utils.es.js +4 -32
- package/dist/domains/traces/utils/span-utils.es.js.map +1 -1
- package/dist/domains/traces/utils.cjs.js +1 -1
- package/dist/domains/traces/utils.es.js +1 -1
- package/dist/domains/traces.cjs.js +3 -1
- package/dist/domains/traces.cjs.js.map +1 -1
- package/dist/domains/traces.es.js +2 -1
- package/dist/domains/traces.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +2 -2
- package/dist/ee/signals/components/entity-index-list.es.js +2 -2
- package/dist/ee/signals/components/entity-index-model.cjs.js +3 -2
- package/dist/ee/signals/components/entity-index-model.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-model.es.js +3 -2
- package/dist/ee/signals/components/entity-index-model.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -2
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -2
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
- package/dist/ee/signals/signal-formatting.cjs.js +6 -34
- package/dist/ee/signals/signal-formatting.cjs.js.map +1 -1
- package/dist/ee/signals/signal-formatting.es.js +6 -34
- package/dist/ee/signals/signal-formatting.es.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline-data.cjs.js +1 -1
- package/dist/ee/signals/snapshot-timeline-data.cjs.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline-data.es.js +1 -1
- package/dist/ee/signals/snapshot-timeline-data.es.js.map +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
- package/dist/field-block-error-msg-Y0fi0HUC.js +22 -0
- package/dist/field-block-error-msg-Y0fi0HUC.js.map +1 -0
- package/dist/field-block-error-msg-oudJz2Hx.cjs +24 -0
- package/dist/field-block-error-msg-oudJz2Hx.cjs.map +1 -0
- package/dist/{field-error-id-DyWx33Fu.js → field-error-id-DD7OARLU.js} +2 -13
- package/dist/field-error-id-DD7OARLU.js.map +1 -0
- package/dist/{field-error-id-6EfqmQ4C.cjs → field-error-id-V_WejsRL.cjs} +4 -15
- package/dist/field-error-id-V_WejsRL.cjs.map +1 -0
- package/dist/hooks/use-elapsed-time.cjs.js +25 -0
- package/dist/hooks/use-elapsed-time.cjs.js.map +1 -0
- package/dist/hooks/use-elapsed-time.d.ts +2 -0
- package/dist/hooks/use-elapsed-time.es.js +21 -0
- package/dist/hooks/use-elapsed-time.es.js.map +1 -0
- package/dist/inline-code-BW6W121s.js +13 -0
- package/dist/inline-code-BW6W121s.js.map +1 -0
- package/dist/inline-code-CSwG-x8D.cjs +15 -0
- package/dist/inline-code-CSwG-x8D.cjs.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +3 -3
- package/dist/layout/tabbed-container.es.js +3 -3
- package/dist/{list-search-S1mco9Bl.cjs → list-search-CsYQX8qR.cjs} +2 -2
- package/dist/{list-search-S1mco9Bl.cjs.map → list-search-CsYQX8qR.cjs.map} +1 -1
- package/dist/{list-search-FJ1O5F3S.js → list-search-D1FD8FCL.js} +2 -2
- package/dist/{list-search-FJ1O5F3S.js.map → list-search-D1FD8FCL.js.map} +1 -1
- package/dist/{logs-data-list-5BAeLU57.js → logs-data-list-BKE5vYZR.js} +4 -4
- package/dist/{logs-data-list-5BAeLU57.js.map → logs-data-list-BKE5vYZR.js.map} +1 -1
- package/dist/{logs-data-list-YL9yLKF3.cjs → logs-data-list-lJK0yGYj.cjs} +4 -4
- package/dist/{logs-data-list-YL9yLKF3.cjs.map → logs-data-list-lJK0yGYj.cjs.map} +1 -1
- package/dist/{metrics-card-Bzm6m1dy.js → metrics-card-C2RTi5Ew.js} +7 -7
- package/dist/metrics-card-C2RTi5Ew.js.map +1 -0
- package/dist/{metrics-card-DCCHIG-z.cjs → metrics-card-DzcVJTAN.cjs} +7 -7
- package/dist/metrics-card-DzcVJTAN.cjs.map +1 -0
- package/dist/{metrics-kpi-card-BrnFhFQm.js → metrics-kpi-card-BVCuXeDa.js} +21 -10
- package/dist/metrics-kpi-card-BVCuXeDa.js.map +1 -0
- package/dist/{metrics-kpi-card-Bhb4R4z0.cjs → metrics-kpi-card-DoIeHfv6.cjs} +21 -10
- package/dist/metrics-kpi-card-DoIeHfv6.cjs.map +1 -0
- package/dist/{metrics-line-chart-0FR3SYSt.cjs → metrics-line-chart-BNNRRxM8.cjs} +61 -25
- package/dist/metrics-line-chart-BNNRRxM8.cjs.map +1 -0
- package/dist/{metrics-line-chart-knlgw8bV.js → metrics-line-chart-CT_pqJtC.js} +62 -27
- package/dist/metrics-line-chart-CT_pqJtC.js.map +1 -0
- package/dist/new/layout/page-header.cjs.js +1 -1
- package/dist/new/layout/page-header.es.js +1 -1
- package/dist/new/settings.cjs.js +2 -2
- package/dist/new/settings.es.js +2 -2
- package/dist/{page-header-CyXAezlZ.js → page-header-BGyZw13s.js} +2 -2
- package/dist/page-header-BGyZw13s.js.map +1 -0
- package/dist/{page-header-Dk3s3XtC.cjs → page-header-CqvBk1wE.cjs} +2 -2
- package/dist/page-header-CqvBk1wE.cjs.map +1 -0
- package/dist/{schemes-C9EhSOkB.js → schemes-CGK3gQJ6.js} +2 -2
- package/dist/{schemes-C9EhSOkB.js.map → schemes-CGK3gQJ6.js.map} +1 -1
- package/dist/{search-field-block-fU3tStmB.js → search-field-block-Dj2KJyjQ.js} +2 -2
- package/dist/{search-field-block-fU3tStmB.js.map → search-field-block-Dj2KJyjQ.js.map} +1 -1
- package/dist/{search-field-block-7-ufp4uG.cjs → search-field-block-K_e_S9WY.cjs} +2 -2
- package/dist/{search-field-block-7-ufp4uG.cjs.map → search-field-block-K_e_S9WY.cjs.map} +1 -1
- package/dist/{section-B9OLuEq3.js → section-Bi0g7cn6.js} +2 -2
- package/dist/{section-B9OLuEq3.js.map → section-Bi0g7cn6.js.map} +1 -1
- package/dist/{section-CTihfzmc.cjs → section-p9vCSmPq.cjs} +2 -2
- package/dist/{section-CTihfzmc.cjs.map → section-p9vCSmPq.cjs.map} +1 -1
- package/dist/{select-field-block-BfiHq9t6.js → select-field-block-BF8v698d.js} +2 -2
- package/dist/{select-field-block-BfiHq9t6.js.map → select-field-block-BF8v698d.js.map} +1 -1
- package/dist/{select-field-block-DJo2cX9Y.cjs → select-field-block-CaGjpIKM.cjs} +2 -2
- package/dist/{select-field-block-DJo2cX9Y.cjs.map → select-field-block-CaGjpIKM.cjs.map} +1 -1
- package/dist/{settings-row-BoAuUUuH.cjs → settings-row-Cr8gaO5a.cjs} +14 -4
- package/dist/settings-row-Cr8gaO5a.cjs.map +1 -0
- package/dist/{settings-row-B2IekRyH.js → settings-row-Cr9DsBSX.js} +14 -4
- package/dist/settings-row-Cr9DsBSX.js.map +1 -0
- package/dist/{span-payload-primitives-Buq9V8nK.js → span-payload-primitives-Dmzm3mb2.js} +2 -2
- package/dist/{span-payload-primitives-Buq9V8nK.js.map → span-payload-primitives-Dmzm3mb2.js.map} +1 -1
- package/dist/{span-payload-primitives-CjlNH9C-.cjs → span-payload-primitives-Dq8WqqNm.cjs} +2 -2
- package/dist/{span-payload-primitives-CjlNH9C-.cjs.map → span-payload-primitives-Dq8WqqNm.cjs.map} +1 -1
- package/dist/src/domains/capabilities/hooks/index.d.ts +3 -0
- package/dist/src/domains/capabilities/hooks/use-feedback-available.d.ts +8 -0
- package/dist/src/domains/capabilities/hooks/use-observability-capabilities.d.ts +22 -0
- package/dist/src/domains/capabilities/hooks/use-trace-query-available.d.ts +8 -0
- package/dist/src/domains/capabilities/index.d.ts +1 -0
- package/dist/src/domains/chat/messages/reasoning.d.ts +3 -1
- package/dist/src/domains/chat/messages/renderers/reasoning-part-renderer.d.ts +3 -1
- package/dist/src/domains/chat/stories/reasoning.stories.d.ts +1 -1
- package/dist/src/domains/memory/lib/timeline.d.ts +0 -1
- package/dist/src/domains/metrics/components/index.d.ts +1 -1
- package/dist/src/domains/metrics/components/kpi-card-view.d.ts +2 -1
- package/dist/src/domains/metrics/components/latency-card-view.d.ts +4 -1
- package/dist/src/domains/metrics/components/metrics-utils.d.ts +0 -2
- package/dist/src/domains/metrics/hooks/index.d.ts +1 -0
- package/dist/src/domains/metrics/hooks/use-latency-metrics.d.ts +2 -2
- package/dist/src/domains/metrics/hooks/use-token-usage-timeseries.d.ts +2 -1
- package/dist/src/domains/metrics/metrics-interval.d.ts +7 -0
- package/dist/src/domains/traces/components/trace-columns-menu.d.ts +3 -1
- package/dist/src/domains/traces/components/trace-data-panel-view.stories.d.ts +1 -1
- package/dist/src/domains/traces/hooks/index.d.ts +1 -0
- package/dist/src/domains/traces/hooks/use-trace-query.d.ts +19 -2
- package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +46 -0
- package/dist/src/domains/traces/trace-filters.d.ts +6 -1
- package/dist/src/domains/traces/utils/index.d.ts +1 -1
- package/dist/src/domains/traces/utils/span-utils.d.ts +1 -6
- package/dist/src/ds/components/Card/Card.d.ts +2 -2
- package/dist/src/ds/components/CompactNumber/compact-number.d.ts +6 -0
- package/dist/src/ds/components/CompactNumber/compact-number.stories.d.ts +7 -0
- package/dist/src/ds/components/CompactNumber/index.d.ts +1 -0
- package/dist/src/ds/components/DataList/data-list-cells.d.ts +4 -3
- package/dist/src/ds/components/InlineCode/index.d.ts +1 -0
- package/dist/src/ds/components/InlineCode/inline-code.d.ts +3 -0
- package/dist/src/ds/components/InlineCode/inline-code.stories.d.ts +13 -0
- package/dist/src/ds/components/ItemList/item-list-date-cell.d.ts +3 -2
- package/dist/src/ds/components/MetricsCardGroup/metrics-card-group.d.ts +3 -8
- package/dist/src/ds/components/MetricsLineChart/index.d.ts +1 -0
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart-legend.d.ts +6 -0
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +6 -4
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.stories.d.ts +1 -0
- package/dist/src/ds/components/RelativeTimestamp/index.d.ts +1 -0
- package/dist/src/ds/components/RelativeTimestamp/relative-timestamp.d.ts +6 -0
- package/dist/src/ds/components/RelativeTimestamp/relative-timestamp.stories.d.ts +7 -0
- package/dist/src/ds/components/StatusIndicators/status-dot-styles.d.ts +31 -2
- package/dist/src/ds/components/StatusIndicators/status-dot.stories.d.ts +3 -4
- package/dist/src/ds/components/StatusIndicators/status.d.ts +2 -3
- package/dist/src/ds/components/StatusIndicators/status.stories.d.ts +2 -1
- package/dist/src/ds/components/Txt/Txt.d.ts +5 -1
- package/dist/src/ds/components/ai/task-list/task-graph-node.d.ts +8 -0
- package/dist/src/ds/components/ai/task-list/task-graph.d.ts +8 -0
- package/dist/src/ds/components/ai/task-list/task-list.d.ts +4 -8
- package/dist/src/ds/components/ai/task-list/task-list.stories.d.ts +1 -1
- package/dist/src/ds/components/ai/task-list/use-focused-row-scroll.d.ts +12 -0
- package/dist/src/ds/new/layout/page-header/page-header.stories.d.ts +1 -0
- package/dist/src/ds/new/settings/settings-row.d.ts +3 -1
- package/dist/src/ds/new/settings/settings.stories.d.ts +1 -0
- package/dist/src/hooks/stories/state/use-elapsed-time.stories.d.ts +17 -0
- package/dist/src/hooks/use-elapsed-time.d.ts +2 -0
- package/dist/src/lib/cost.d.ts +6 -0
- package/dist/src/utils/cost.d.ts +1 -0
- package/dist/src/utils/date-format.d.ts +28 -0
- package/dist/src/utils/duration.d.ts +7 -1
- package/dist/src/utils/relative-time.d.ts +7 -0
- package/dist/style.css +329 -18
- package/dist/{text-field-block-DGIM1i3Z.js → text-field-block-BYPiO9h4.js} +2 -2
- package/dist/{text-field-block-DGIM1i3Z.js.map → text-field-block-BYPiO9h4.js.map} +1 -1
- package/dist/{text-field-block-DePCgDOh.cjs → text-field-block-CRh8sRXP.cjs} +2 -2
- package/dist/{text-field-block-DePCgDOh.cjs.map → text-field-block-CRh8sRXP.cjs.map} +1 -1
- package/dist/{tool-call-Bs-9Cah5.js → tool-call-CIeNEYpK.js} +2 -2
- package/dist/{tool-call-Bs-9Cah5.js.map → tool-call-CIeNEYpK.js.map} +1 -1
- package/dist/{tool-call-C0JeHe8Z.cjs → tool-call-CnEm3eE0.cjs} +2 -2
- package/dist/{tool-call-C0JeHe8Z.cjs.map → tool-call-CnEm3eE0.cjs.map} +1 -1
- package/dist/{traces-data-list-Dam8-XW-.cjs → traces-data-list-C5KZesk6.cjs} +5 -5
- package/dist/{traces-data-list-Dam8-XW-.cjs.map → traces-data-list-C5KZesk6.cjs.map} +1 -1
- package/dist/{traces-data-list-Dvi0s56v.js → traces-data-list-CdWW9J6z.js} +5 -5
- package/dist/{traces-data-list-Dvi0s56v.js.map → traces-data-list-CdWW9J6z.js.map} +1 -1
- package/dist/utils/cost.cjs.js +40 -0
- package/dist/utils/cost.cjs.js.map +1 -0
- package/dist/utils/cost.d.ts +2 -0
- package/dist/utils/cost.es.js +34 -0
- package/dist/utils/cost.es.js.map +1 -0
- package/dist/utils/date-format.cjs.js +99 -0
- package/dist/utils/date-format.cjs.js.map +1 -0
- package/dist/utils/date-format.d.ts +2 -0
- package/dist/utils/date-format.es.js +91 -0
- package/dist/utils/date-format.es.js.map +1 -0
- package/dist/utils/duration.cjs.js +19 -2
- package/dist/utils/duration.cjs.js.map +1 -1
- package/dist/utils/duration.es.js +18 -3
- package/dist/utils/duration.es.js.map +1 -1
- package/dist/utils/file.es.js +2 -2
- package/dist/utils/relative-time.cjs.js +12 -0
- package/dist/utils/relative-time.cjs.js.map +1 -0
- package/dist/utils/relative-time.d.ts +2 -0
- package/dist/utils/relative-time.es.js +8 -0
- package/dist/utils/relative-time.es.js.map +1 -0
- package/package.json +7 -7
- package/dist/Badge-BEeYtjmv.cjs.map +0 -1
- package/dist/Badge-TD55_qZJ.js.map +0 -1
- package/dist/Txt-B4-2nLaI.cjs.map +0 -1
- package/dist/Txt-DTh3Pa_a.js.map +0 -1
- package/dist/data-list-top-DpbOA3uw.js.map +0 -1
- package/dist/data-list-top-WGUY167p.cjs.map +0 -1
- package/dist/field-error-id-6EfqmQ4C.cjs.map +0 -1
- package/dist/field-error-id-DyWx33Fu.js.map +0 -1
- package/dist/metrics-card-Bzm6m1dy.js.map +0 -1
- package/dist/metrics-card-DCCHIG-z.cjs.map +0 -1
- package/dist/metrics-kpi-card-Bhb4R4z0.cjs.map +0 -1
- package/dist/metrics-kpi-card-BrnFhFQm.js.map +0 -1
- package/dist/metrics-line-chart-0FR3SYSt.cjs.map +0 -1
- package/dist/metrics-line-chart-knlgw8bV.js.map +0 -1
- package/dist/page-header-CyXAezlZ.js.map +0 -1
- package/dist/page-header-Dk3s3XtC.cjs.map +0 -1
- package/dist/settings-row-B2IekRyH.js.map +0 -1
- package/dist/settings-row-BoAuUUuH.cjs.map +0 -1
- package/dist/src/ds/components/Table/utils.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observation-marker-badge.es.js","sources":["../../../../../src/domains/chat/tools/badges/observation-marker-badge.tsx"],"sourcesContent":["import { Brain, XCircle, Loader2, ChevronDown, ChevronRight, Unplug, Eye } from 'lucide-react';\nimport { useState, useEffect } from 'react';\nimport { ObservationRenderer } from './observation-renderer';\nimport { Badge } from '@/ds/components/Badge';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Icon } from '@/ds/icons/Icon';\nimport { cn } from '@/utils/cn';\n\nexport interface OmMarkerData {\n observedAt?: string;\n completedAt?: string;\n failedAt?: string;\n startedAt?: string;\n tokensObserved?: number;\n tokensToObserve?: number;\n observationTokens?: number;\n observations?: string;\n currentTask?: string;\n suggestedResponse?: string;\n extractedValues?: Record<string, unknown>;\n extractionFailures?: Array<{ slug: string; error: string }>;\n durationMs?: number;\n error?: string;\n recordId?: string;\n cycleId?: string;\n threadId?: string;\n threadIds?: string[];\n operationType?: 'observation' | 'reflection';\n _state?: 'loading' | 'complete' | 'failed' | 'buffering' | 'buffering-complete' | 'buffering-failed' | 'activated';\n // Activation-specific fields\n chunksActivated?: number;\n tokensActivated?: number;\n messagesActivated?: number;\n config?: {\n scope?: string;\n messageTokens?: number;\n observationTokens?: number;\n };\n // Buffering-specific fields\n tokensToBuffer?: number;\n tokensBuffered?: number;\n bufferedTokens?: number;\n}\n\nexport interface ObservationMarkerBadgeProps {\n toolName: string;\n args: Record<string, unknown>;\n metadata?: {\n mode?: string;\n omData?: OmMarkerData;\n };\n}\n\n/**\n * Format token count for display (e.g., 7234 -> \"7.2k\", 234 -> \"234\")\n */\nconst formatTokens = (tokens: number): string => {\n if (tokens >= 1000) {\n return `${(tokens / 1000).toFixed(1)}k`;\n }\n return String(Math.round(tokens));\n};\n\nconst hasExtractedValue = (value: unknown) => value !== undefined && value !== null && value !== '';\n\nconst getExtractedValueEntries = (values?: Record<string, unknown>) => {\n return Object.entries(values ?? {}).filter(([, value]) => hasExtractedValue(value));\n};\n\nconst formatExtractedValue = (value: unknown): string => {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n\n try {\n return JSON.stringify(value, null, 2) ?? String(value);\n } catch {\n return String(value);\n }\n};\n\nconst isStructuredExtractedValue = (value: unknown) => typeof value === 'object' && value !== null;\n\nconst ObservationIcon = ({ className }: { className?: string }) => <Eye className={className} />;\n\nconst MarkerPill = ({\n children,\n icon,\n expanded,\n onClick,\n className,\n}: {\n children: React.ReactNode;\n icon: React.ReactNode;\n expanded?: boolean;\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}) => {\n const content = (\n <>\n {onClick && (\n <Icon>\n <ChevronDown className={cn('transition-all', expanded ? 'rotate-0' : '-rotate-90')} />\n </Icon>\n )}\n <Badge icon={icon}>{children}</Badge>\n </>\n );\n\n if (!onClick) {\n return <div className={cn('inline-flex items-center gap-2', className)}>{content}</div>;\n }\n\n return (\n <button onClick={onClick} className={cn('inline-flex items-center gap-2', className)} type=\"button\">\n {content}\n </button>\n );\n};\n\nconst ExtractedValuesPanel = ({\n extractedValues,\n extractionFailures,\n isExpanded,\n onToggle,\n}: {\n extractedValues?: Record<string, unknown>;\n extractionFailures?: Array<{ slug: string; error: string }>;\n isExpanded: boolean;\n onToggle: () => void;\n}) => {\n const entries = getExtractedValueEntries(extractedValues);\n const failures = extractionFailures ?? [];\n\n if (entries.length === 0 && failures.length === 0) return null;\n\n return (\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n onClick={onToggle}\n className=\"flex items-center gap-1 text-meta tracking-wide text-foreground uppercase transition-opacity hover:opacity-80\"\n >\n {isExpanded ? <ChevronDown className=\"size-2.5\" /> : <ChevronRight className=\"size-2.5\" />}\n Extractions ({entries.length}){failures.length > 0 ? ` · ${failures.length} failed` : ''}\n </button>\n {isExpanded && (\n <div className=\"mt-1 space-y-2\">\n {entries.map(([slug, value]) => (\n <div key={slug} className=\"rounded border border-border bg-fill-subtle p-2\">\n <div className=\"text-meta tracking-wide text-foreground/70 uppercase\">{slug}</div>\n {isStructuredExtractedValue(value) ? (\n <pre className=\"mt-1 max-h-40 overflow-auto text-caption break-words whitespace-pre-wrap text-foreground/80\">\n {formatExtractedValue(value)}\n </pre>\n ) : (\n <div className=\"mt-1 [&_code]:rounded [&_code]:bg-fill [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className=\"text-caption text-foreground/80\">\n {formatExtractedValue(value)}\n </MarkdownRenderer>\n </div>\n )}\n </div>\n ))}\n {failures.map(failure => (\n <div key={failure.slug} className=\"rounded border border-red-500/20 bg-red-500/5 p-2 text-red-700\">\n <div className=\"text-meta tracking-wide uppercase\">{failure.slug}</div>\n <div className=\"mt-1 text-caption\">{failure.error}</div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Renders an inline badge for OM observation markers.\n * These are converted from data-om-* parts to tool-call format for assistant-ui compatibility.\n *\n * The badge includes a `data-om-badge` attribute with the cycleId so that\n * the BracketOverlay can find it via DOM queries for positioning bracket lines.\n */\nexport const ObservationMarkerBadge = ({ toolName, args, metadata }: ObservationMarkerBadgeProps) => {\n const omData = (metadata?.omData || args) as OmMarkerData;\n const cycleId = omData.cycleId || '';\n\n // Use the _state field set during part merging, or fallback to detecting from data\n const state =\n omData._state ||\n (omData.failedAt\n ? 'failed'\n : omData.completedAt\n ? 'complete'\n : (omData as any).disconnectedAt\n ? 'disconnected'\n : 'loading');\n\n const isStart = state === 'loading';\n const isEnd = state === 'complete';\n const isFailed = state === 'failed';\n const isDisconnected = state === 'disconnected';\n const isBuffering = state === 'buffering';\n const isBufferingComplete = state === 'buffering-complete';\n const isBufferingFailed = state === 'buffering-failed';\n const isActivated = state === 'activated';\n const isReflection = omData.operationType === 'reflection';\n const hasExtractionContent =\n getExtractedValueEntries(omData.extractedValues).length > 0 || (omData.extractionFailures?.length ?? 0) > 0;\n const shouldAutoExpand = (isFailed && isReflection) || hasExtractionContent;\n\n // Failed reflections and extraction-bearing markers should expand by default to draw attention to new details.\n const [isExpanded, setIsExpanded] = useState(shouldAutoExpand);\n\n // Auto-expand when completion details arrive after the marker was mounted during loading.\n useEffect(() => {\n if (shouldAutoExpand) {\n setIsExpanded(true);\n }\n }, [shouldAutoExpand]);\n const [isObservationsExpanded, setIsObservationsExpanded] = useState(true);\n const [isTaskExpanded, setIsTaskExpanded] = useState(false);\n const [isResponseExpanded, setIsResponseExpanded] = useState(false);\n const [isExtractedExpanded, setIsExtractedExpanded] = useState(false);\n\n // Colors - same scheme for both observation and reflection\n const bgColor = 'bg-blue-500/10';\n const textColor = 'text-blue-600';\n const completeBgColor = 'bg-green-500/10';\n const completeTextColor = 'text-green-600';\n const completeHoverBgColor = 'hover:bg-green-500/20';\n // Same colors for expanded state\n const expandedBgColor = 'bg-green-500/5';\n const expandedBorderColor = 'border-green-500/10';\n const labelColor = 'text-green-600';\n const bufferExpandedBgColor = 'bg-background';\n const bufferExpandedBorderColor = 'border-border-1';\n const actionLabel = isReflection ? 'Reflecting' : 'Observing';\n const completedLabel = isReflection ? 'Reflected' : 'Observed';\n\n // Render based on marker type\n if (isStart) {\n const tokensToObserve = omData.tokensToObserve;\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div\n className={`inline-flex items-center gap-1.5 rounded-md px-2 py-1 ${bgColor} ${textColor} my-1 text-column`}\n >\n <Loader2 className=\"size-3 animate-spin\" />\n {isReflection ? <Brain className=\"size-3\" /> : <ObservationIcon className=\"size-3\" />}\n <span>\n {actionLabel}\n {tokensToObserve ? ` ~${formatTokens(tokensToObserve)} tokens` : '...'}\n </span>\n </div>\n </div>\n );\n }\n\n if (isEnd) {\n const tokensObserved = omData.tokensObserved;\n const observationTokens = omData.observationTokens;\n const observations = omData.observations;\n const currentTask = omData.currentTask;\n const suggestedResponse = omData.suggestedResponse;\n const extractedValues = omData.extractedValues;\n const extractionFailures = omData.extractionFailures;\n const durationMs = omData.durationMs;\n const compressionRatio =\n tokensObserved && observationTokens && observationTokens > 0\n ? Math.round(tokensObserved / observationTokens)\n : null;\n\n const handleToggle = (e: React.MouseEvent) => {\n // Prevent scroll jump by preserving scroll position\n const scrollContainer = e.currentTarget.closest('[data-radix-scroll-area-viewport]') || document.documentElement;\n const scrollTop = scrollContainer.scrollTop;\n setIsExpanded(!isExpanded);\n // Restore scroll position after React updates\n requestAnimationFrame(() => {\n scrollContainer.scrollTop = scrollTop;\n });\n };\n\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1\">\n <button\n onClick={handleToggle}\n className={`inline-flex items-center gap-1.5 rounded-md px-2 py-1 ${completeBgColor} ${completeTextColor} text-column ${completeHoverBgColor} cursor-pointer`}\n >\n {isExpanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n {isReflection ? <Brain className=\"size-3\" /> : <ObservationIcon className=\"size-3\" />}\n <span>\n {completedLabel} {tokensObserved ? formatTokens(tokensObserved) : '?'}→\n {observationTokens ? formatTokens(observationTokens) : '?'} tokens\n {compressionRatio ? ` (-${compressionRatio}x)` : ''}\n </span>\n </button>\n {isExpanded && (\n <div\n className={`mt-1 ml-6 rounded-md p-2 ${expandedBgColor} space-y-1.5 border text-caption ${expandedBorderColor}`}\n >\n {/* Stats row - all green */}\n <div className={`flex gap-4 text-caption ${labelColor}`}>\n {tokensObserved && <span>Input: {formatTokens(tokensObserved)}</span>}\n {observationTokens && <span>Output: {formatTokens(observationTokens)}</span>}\n {compressionRatio && compressionRatio > 1 && <span>Compression: {compressionRatio}x</span>}\n {durationMs && <span>Duration: {(durationMs / 1000).toFixed(2)}s</span>}\n </div>\n {observations && (\n <div className=\"mt-1 border-t border-border pt-1\">\n {/* If there's no currentTask or suggestedResponse, show observations directly without collapsible wrapper */}\n {!currentTask && !suggestedResponse ? (\n <ObservationRenderer observations={observations} maxHeight=\"500px\" />\n ) : (\n <>\n <button\n onClick={() => setIsObservationsExpanded(!isObservationsExpanded)}\n className=\"flex items-center gap-1 text-meta tracking-wide text-foreground uppercase transition-opacity hover:opacity-80\"\n >\n {isObservationsExpanded ? (\n <ChevronDown className=\"size-2.5\" />\n ) : (\n <ChevronRight className=\"size-2.5\" />\n )}\n {isReflection ? 'Reflections' : 'Observations'}\n </button>\n {isObservationsExpanded && (\n <div className=\"mt-1\">\n <ObservationRenderer observations={observations} maxHeight=\"500px\" />\n </div>\n )}\n </>\n )}\n </div>\n )}\n {currentTask && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n onClick={() => setIsTaskExpanded(!isTaskExpanded)}\n className=\"flex items-center gap-1 text-meta tracking-wide text-foreground uppercase transition-opacity hover:opacity-80\"\n >\n {isTaskExpanded ? <ChevronDown className=\"size-2.5\" /> : <ChevronRight className=\"size-2.5\" />}\n Current Task\n </button>\n {isTaskExpanded && (\n <div className=\"mt-1 [&_code]:rounded [&_code]:bg-fill [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className=\"text-caption text-foreground\">{currentTask}</MarkdownRenderer>\n </div>\n )}\n </div>\n )}\n {suggestedResponse && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n onClick={() => setIsResponseExpanded(!isResponseExpanded)}\n className=\"flex items-center gap-1 text-meta tracking-wide text-foreground uppercase transition-opacity hover:opacity-80\"\n >\n {isResponseExpanded ? <ChevronDown className=\"size-2.5\" /> : <ChevronRight className=\"size-2.5\" />}\n Suggested Response\n </button>\n {isResponseExpanded && (\n <div className=\"mt-1 italic [&_code]:rounded [&_code]:bg-fill [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className=\"text-caption text-foreground/80\">\n {suggestedResponse}\n </MarkdownRenderer>\n </div>\n )}\n </div>\n )}\n <ExtractedValuesPanel\n extractedValues={extractedValues}\n extractionFailures={extractionFailures}\n isExpanded={isExtractedExpanded}\n onToggle={() => setIsExtractedExpanded(!isExtractedExpanded)}\n />\n </div>\n )}\n </div>\n </div>\n );\n }\n\n if (isDisconnected) {\n const disconnectedLabel = isReflection ? 'Reflection interrupted' : 'Observation interrupted';\n const tokensToObserve = omData.tokensToObserve;\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1 inline-flex items-center gap-1.5 rounded-md bg-yellow-500/10 px-2 py-1 text-column text-yellow-600\">\n <Unplug className=\"size-3\" />\n <span>\n {disconnectedLabel}\n {tokensToObserve ? ` (~${formatTokens(tokensToObserve)} tokens)` : ''}\n </span>\n </div>\n </div>\n );\n }\n\n if (isFailed) {\n const error = omData.error;\n const failedLabel = isReflection ? 'Reflection failed' : 'Observation failed';\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-md bg-red-500/10 px-2 py-1 text-column text-red-600 hover:bg-red-500/20\"\n >\n {isExpanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n <XCircle className=\"size-3\" />\n <span>{failedLabel}</span>\n </button>\n\n {isExpanded && error && (\n <div className=\"mt-1 ml-4 rounded-md border border-red-500/10 bg-red-500/5 p-2 text-caption text-red-700\">\n <span className=\"text-column\">Error:</span> {error}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // Async buffering states - non-blocking background observation/reflection\n if (isBuffering) {\n const tokensToBuffer = omData.tokensToBuffer;\n const bufferingLabel = isReflection ? 'Buffering reflection' : 'Buffering observations';\n return (\n <div\n className=\"mt-2 mb-8\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <MarkerPill icon={<Loader2 className=\"animate-spin text-accent6\" />}>\n {bufferingLabel}\n {tokensToBuffer ? ` ~${formatTokens(tokensToBuffer)} tokens` : '...'}\n </MarkerPill>\n </div>\n );\n }\n\n if (isBufferingComplete) {\n const tokensBuffered = omData.tokensBuffered;\n const bufferedTokens = omData.bufferedTokens;\n const { observations, extractedValues, extractionFailures } = omData;\n const bufferedLabel = isReflection ? 'Buffered reflection' : 'Buffered observations';\n const compressionRatio =\n tokensBuffered && bufferedTokens && bufferedTokens > 0 ? Math.round(tokensBuffered / bufferedTokens) : null;\n\n const handleToggle = (e: React.MouseEvent) => {\n const scrollContainer = e.currentTarget.closest('[data-radix-scroll-area-viewport]') || document.documentElement;\n const scrollTop = scrollContainer.scrollTop;\n setIsExpanded(!isExpanded);\n requestAnimationFrame(() => {\n scrollContainer.scrollTop = scrollTop;\n });\n };\n\n return (\n <div\n className=\"mt-2 mb-8\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div>\n <MarkerPill expanded={isExpanded} onClick={handleToggle} icon={<ObservationIcon className=\"text-accent6\" />}>\n {bufferedLabel} {tokensBuffered ? formatTokens(tokensBuffered) : '?'}→\n {bufferedTokens ? formatTokens(bufferedTokens) : '?'} tokens\n {compressionRatio ? ` (-${compressionRatio}x)` : ''}\n </MarkerPill>\n\n {isExpanded && (\n <div\n className={`mt-2 ml-6 rounded-lg ${bufferExpandedBgColor} space-y-2 border p-4 text-caption ${bufferExpandedBorderColor}`}\n >\n {observations && <ObservationRenderer observations={observations} maxHeight=\"240px\" />}\n <ExtractedValuesPanel\n extractedValues={extractedValues}\n extractionFailures={extractionFailures}\n isExpanded={isExtractedExpanded}\n onToggle={() => setIsExtractedExpanded(!isExtractedExpanded)}\n />\n </div>\n )}\n </div>\n </div>\n );\n }\n\n if (isBufferingFailed) {\n const error = omData.error;\n const failedLabel = isReflection ? 'Buffered reflection failed' : 'Buffered observation failed';\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-dashed border-red-400/40 bg-red-500/10 px-2 py-1 text-column text-red-600 hover:bg-red-500/20\"\n >\n {isExpanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n <XCircle className=\"size-3\" />\n <span>{failedLabel}</span>\n </button>\n\n {isExpanded && error && (\n <div className=\"mt-1 ml-4 rounded-md border border-red-500/10 bg-red-500/5 p-2 text-caption text-red-700\">\n <span className=\"text-column\">Error:</span> {error}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // Activation state - buffered observations have been activated into active observations\n // Styled to match sync observation/reflection markers (green scheme with Brain icon)\n if (isActivated) {\n const tokensActivated = omData.tokensActivated ?? 0;\n const observationTokens = omData.observationTokens ?? 0;\n const { observations } = omData;\n const activatedLabel = isReflection ? 'Reflected' : 'Observed';\n const compressionRatio =\n tokensActivated && observationTokens && observationTokens > 0\n ? Math.round(tokensActivated / observationTokens)\n : null;\n\n const handleToggle = (e: React.MouseEvent) => {\n const scrollContainer = e.currentTarget.closest('[data-radix-scroll-area-viewport]') || document.documentElement;\n const scrollTop = scrollContainer.scrollTop;\n setIsExpanded(!isExpanded);\n requestAnimationFrame(() => {\n scrollContainer.scrollTop = scrollTop;\n });\n };\n\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n data-om-no-highlight=\"true\"\n >\n <div className=\"my-1\">\n <button\n onClick={handleToggle}\n className={`inline-flex items-center gap-1.5 rounded-md px-2 py-1 ${completeBgColor} ${completeTextColor} text-column ${completeHoverBgColor} cursor-pointer`}\n >\n {isExpanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n {isReflection ? <Brain className=\"size-3\" /> : <ObservationIcon className=\"size-3\" />}\n <span>\n {activatedLabel} {tokensActivated ? formatTokens(tokensActivated) : '?'}→\n {observationTokens ? formatTokens(observationTokens) : '?'} tokens\n {compressionRatio ? ` (-${compressionRatio}x)` : ''}\n </span>\n </button>\n {isExpanded && (\n <div\n className={`mt-1 ml-6 rounded-md p-2 ${expandedBgColor} space-y-1.5 border text-caption ${expandedBorderColor}`}\n >\n {/* Stats row */}\n <div className={`flex gap-4 text-caption ${labelColor}`}>\n {tokensActivated > 0 && <span>Input: {formatTokens(tokensActivated)}</span>}\n {observationTokens > 0 && <span>Output: {formatTokens(observationTokens)}</span>}\n {compressionRatio && compressionRatio > 1 && <span>Compression: {compressionRatio}x</span>}\n </div>\n {observations && (\n <div className=\"mt-1 border-t border-border pt-1\">\n <ObservationRenderer observations={observations} maxHeight=\"500px\" />\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // Unknown marker type - render generic\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1 inline-flex items-center gap-1.5 rounded-md bg-fill px-2 py-1 text-column text-muted-foreground\">\n <Brain className=\"size-3\" />\n <span>{toolName}</span>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observation-marker-badge.es.js","sources":["../../../../../src/domains/chat/tools/badges/observation-marker-badge.tsx"],"sourcesContent":["import { Brain, XCircle, Loader2, ChevronDown, ChevronRight, Unplug, Eye } from 'lucide-react';\nimport { useState, useEffect } from 'react';\nimport { ObservationRenderer } from './observation-renderer';\nimport { Badge } from '@/ds/components/Badge';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { cn } from '@/utils/cn';\nimport { formatDuration } from '@/utils/duration';\n\nexport interface OmMarkerData {\n observedAt?: string;\n completedAt?: string;\n failedAt?: string;\n startedAt?: string;\n tokensObserved?: number;\n tokensToObserve?: number;\n observationTokens?: number;\n observations?: string;\n currentTask?: string;\n suggestedResponse?: string;\n extractedValues?: Record<string, unknown>;\n extractionFailures?: Array<{ slug: string; error: string }>;\n durationMs?: number;\n error?: string;\n recordId?: string;\n cycleId?: string;\n threadId?: string;\n threadIds?: string[];\n operationType?: 'observation' | 'reflection';\n _state?: 'loading' | 'complete' | 'failed' | 'buffering' | 'buffering-complete' | 'buffering-failed' | 'activated';\n // Activation-specific fields\n chunksActivated?: number;\n tokensActivated?: number;\n messagesActivated?: number;\n config?: {\n scope?: string;\n messageTokens?: number;\n observationTokens?: number;\n };\n // Buffering-specific fields\n tokensToBuffer?: number;\n tokensBuffered?: number;\n bufferedTokens?: number;\n}\n\nexport interface ObservationMarkerBadgeProps {\n toolName: string;\n args: Record<string, unknown>;\n metadata?: {\n mode?: string;\n omData?: OmMarkerData;\n };\n}\n\n/**\n * Format token count for display (e.g., 7234 -> \"7.2k\", 234 -> \"234\")\n */\nconst formatTokens = (tokens: number): string => {\n if (tokens >= 1000) {\n return `${(tokens / 1000).toFixed(1)}k`;\n }\n return String(Math.round(tokens));\n};\n\nconst hasExtractedValue = (value: unknown) => value !== undefined && value !== null && value !== '';\n\nconst getExtractedValueEntries = (values?: Record<string, unknown>) => {\n return Object.entries(values ?? {}).filter(([, value]) => hasExtractedValue(value));\n};\n\nconst formatExtractedValue = (value: unknown): string => {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n\n try {\n return JSON.stringify(value, null, 2) ?? String(value);\n } catch {\n return String(value);\n }\n};\n\nconst isStructuredExtractedValue = (value: unknown) => typeof value === 'object' && value !== null;\n\nconst ObservationIcon = ({ className }: { className?: string }) => <Eye className={className} />;\n\nconst MarkerPill = ({\n children,\n icon,\n expanded,\n onClick,\n className,\n}: {\n children: React.ReactNode;\n icon: React.ReactNode;\n expanded?: boolean;\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}) => {\n const content = (\n <>\n {onClick && (\n <Icon>\n <ChevronDown className={cn('transition-all', expanded ? 'rotate-0' : '-rotate-90')} />\n </Icon>\n )}\n <Badge icon={icon}>{children}</Badge>\n </>\n );\n\n if (!onClick) {\n return <div className={cn('inline-flex items-center gap-2', className)}>{content}</div>;\n }\n\n return (\n <button onClick={onClick} className={cn('inline-flex items-center gap-2', className)} type=\"button\">\n {content}\n </button>\n );\n};\n\nconst ExtractedValuesPanel = ({\n extractedValues,\n extractionFailures,\n isExpanded,\n onToggle,\n}: {\n extractedValues?: Record<string, unknown>;\n extractionFailures?: Array<{ slug: string; error: string }>;\n isExpanded: boolean;\n onToggle: () => void;\n}) => {\n const entries = getExtractedValueEntries(extractedValues);\n const failures = extractionFailures ?? [];\n\n if (entries.length === 0 && failures.length === 0) return null;\n\n return (\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n onClick={onToggle}\n className=\"flex items-center gap-1 text-meta tracking-wide text-foreground uppercase transition-opacity hover:opacity-80\"\n >\n {isExpanded ? <ChevronDown className=\"size-2.5\" /> : <ChevronRight className=\"size-2.5\" />}\n Extractions ({entries.length}){failures.length > 0 ? ` · ${failures.length} failed` : ''}\n </button>\n {isExpanded && (\n <div className=\"mt-1 space-y-2\">\n {entries.map(([slug, value]) => (\n <div key={slug} className=\"rounded border border-border bg-fill-subtle p-2\">\n <div className=\"text-meta tracking-wide text-foreground/70 uppercase\">{slug}</div>\n {isStructuredExtractedValue(value) ? (\n <pre className=\"mt-1 max-h-40 overflow-auto text-caption break-words whitespace-pre-wrap text-foreground/80\">\n {formatExtractedValue(value)}\n </pre>\n ) : (\n <div className=\"mt-1 [&_code]:rounded [&_code]:bg-fill [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className=\"text-caption text-foreground/80\">\n {formatExtractedValue(value)}\n </MarkdownRenderer>\n </div>\n )}\n </div>\n ))}\n {failures.map(failure => (\n <div key={failure.slug} className=\"rounded border border-red-500/20 bg-red-500/5 p-2 text-red-700\">\n <div className=\"text-meta tracking-wide uppercase\">{failure.slug}</div>\n <div className=\"mt-1 text-caption\">{failure.error}</div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Renders an inline badge for OM observation markers.\n * These are converted from data-om-* parts to tool-call format for assistant-ui compatibility.\n *\n * The badge includes a `data-om-badge` attribute with the cycleId so that\n * the BracketOverlay can find it via DOM queries for positioning bracket lines.\n */\nexport const ObservationMarkerBadge = ({ toolName, args, metadata }: ObservationMarkerBadgeProps) => {\n const omData = (metadata?.omData || args) as OmMarkerData;\n const cycleId = omData.cycleId || '';\n\n // Use the _state field set during part merging, or fallback to detecting from data\n const state =\n omData._state ||\n (omData.failedAt\n ? 'failed'\n : omData.completedAt\n ? 'complete'\n : (omData as any).disconnectedAt\n ? 'disconnected'\n : 'loading');\n\n const isStart = state === 'loading';\n const isEnd = state === 'complete';\n const isFailed = state === 'failed';\n const isDisconnected = state === 'disconnected';\n const isBuffering = state === 'buffering';\n const isBufferingComplete = state === 'buffering-complete';\n const isBufferingFailed = state === 'buffering-failed';\n const isActivated = state === 'activated';\n const isReflection = omData.operationType === 'reflection';\n const hasExtractionContent =\n getExtractedValueEntries(omData.extractedValues).length > 0 || (omData.extractionFailures?.length ?? 0) > 0;\n const shouldAutoExpand = (isFailed && isReflection) || hasExtractionContent;\n\n // Failed reflections and extraction-bearing markers should expand by default to draw attention to new details.\n const [isExpanded, setIsExpanded] = useState(shouldAutoExpand);\n\n // Auto-expand when completion details arrive after the marker was mounted during loading.\n useEffect(() => {\n if (shouldAutoExpand) {\n setIsExpanded(true);\n }\n }, [shouldAutoExpand]);\n const [isObservationsExpanded, setIsObservationsExpanded] = useState(true);\n const [isTaskExpanded, setIsTaskExpanded] = useState(false);\n const [isResponseExpanded, setIsResponseExpanded] = useState(false);\n const [isExtractedExpanded, setIsExtractedExpanded] = useState(false);\n\n // Colors - same scheme for both observation and reflection\n const bgColor = 'bg-blue-500/10';\n const textColor = 'text-blue-600';\n const completeBgColor = 'bg-green-500/10';\n const completeTextColor = 'text-green-600';\n const completeHoverBgColor = 'hover:bg-green-500/20';\n // Same colors for expanded state\n const expandedBgColor = 'bg-green-500/5';\n const expandedBorderColor = 'border-green-500/10';\n const labelColor = 'text-green-600';\n const bufferExpandedBgColor = 'bg-background';\n const bufferExpandedBorderColor = 'border-border-1';\n const actionLabel = isReflection ? 'Reflecting' : 'Observing';\n const completedLabel = isReflection ? 'Reflected' : 'Observed';\n\n // Render based on marker type\n if (isStart) {\n const tokensToObserve = omData.tokensToObserve;\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div\n className={`inline-flex items-center gap-1.5 rounded-md px-2 py-1 ${bgColor} ${textColor} my-1 text-column`}\n >\n <Loader2 className=\"size-3 animate-spin\" />\n {isReflection ? <Brain className=\"size-3\" /> : <ObservationIcon className=\"size-3\" />}\n <span>\n {actionLabel}\n {tokensToObserve ? ` ~${formatTokens(tokensToObserve)} tokens` : '...'}\n </span>\n </div>\n </div>\n );\n }\n\n if (isEnd) {\n const tokensObserved = omData.tokensObserved;\n const observationTokens = omData.observationTokens;\n const observations = omData.observations;\n const currentTask = omData.currentTask;\n const suggestedResponse = omData.suggestedResponse;\n const extractedValues = omData.extractedValues;\n const extractionFailures = omData.extractionFailures;\n const durationMs = omData.durationMs;\n const compressionRatio =\n tokensObserved && observationTokens && observationTokens > 0\n ? Math.round(tokensObserved / observationTokens)\n : null;\n\n const handleToggle = (e: React.MouseEvent) => {\n // Prevent scroll jump by preserving scroll position\n const scrollContainer = e.currentTarget.closest('[data-radix-scroll-area-viewport]') || document.documentElement;\n const scrollTop = scrollContainer.scrollTop;\n setIsExpanded(!isExpanded);\n // Restore scroll position after React updates\n requestAnimationFrame(() => {\n scrollContainer.scrollTop = scrollTop;\n });\n };\n\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1\">\n <button\n onClick={handleToggle}\n className={`inline-flex items-center gap-1.5 rounded-md px-2 py-1 ${completeBgColor} ${completeTextColor} text-column ${completeHoverBgColor} cursor-pointer`}\n >\n {isExpanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n {isReflection ? <Brain className=\"size-3\" /> : <ObservationIcon className=\"size-3\" />}\n <span>\n {completedLabel} {tokensObserved ? formatTokens(tokensObserved) : '?'}→\n {observationTokens ? formatTokens(observationTokens) : '?'} tokens\n {compressionRatio ? ` (-${compressionRatio}x)` : ''}\n </span>\n </button>\n {isExpanded && (\n <div\n className={`mt-1 ml-6 rounded-md p-2 ${expandedBgColor} space-y-1.5 border text-caption ${expandedBorderColor}`}\n >\n {/* Stats row - all green */}\n <div className={`flex gap-4 text-caption ${labelColor}`}>\n {tokensObserved && <span>Input: {formatTokens(tokensObserved)}</span>}\n {observationTokens && <span>Output: {formatTokens(observationTokens)}</span>}\n {compressionRatio && compressionRatio > 1 && <span>Compression: {compressionRatio}x</span>}\n {durationMs && (\n <span>\n Duration:{' '}\n <Txt as=\"span\" variant=\"caption\" font=\"mono\">\n {formatDuration(durationMs)}\n </Txt>\n </span>\n )}\n </div>\n {observations && (\n <div className=\"mt-1 border-t border-border pt-1\">\n {/* If there's no currentTask or suggestedResponse, show observations directly without collapsible wrapper */}\n {!currentTask && !suggestedResponse ? (\n <ObservationRenderer observations={observations} maxHeight=\"500px\" />\n ) : (\n <>\n <button\n onClick={() => setIsObservationsExpanded(!isObservationsExpanded)}\n className=\"flex items-center gap-1 text-meta tracking-wide text-foreground uppercase transition-opacity hover:opacity-80\"\n >\n {isObservationsExpanded ? (\n <ChevronDown className=\"size-2.5\" />\n ) : (\n <ChevronRight className=\"size-2.5\" />\n )}\n {isReflection ? 'Reflections' : 'Observations'}\n </button>\n {isObservationsExpanded && (\n <div className=\"mt-1\">\n <ObservationRenderer observations={observations} maxHeight=\"500px\" />\n </div>\n )}\n </>\n )}\n </div>\n )}\n {currentTask && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n onClick={() => setIsTaskExpanded(!isTaskExpanded)}\n className=\"flex items-center gap-1 text-meta tracking-wide text-foreground uppercase transition-opacity hover:opacity-80\"\n >\n {isTaskExpanded ? <ChevronDown className=\"size-2.5\" /> : <ChevronRight className=\"size-2.5\" />}\n Current Task\n </button>\n {isTaskExpanded && (\n <div className=\"mt-1 [&_code]:rounded [&_code]:bg-fill [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className=\"text-caption text-foreground\">{currentTask}</MarkdownRenderer>\n </div>\n )}\n </div>\n )}\n {suggestedResponse && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <button\n onClick={() => setIsResponseExpanded(!isResponseExpanded)}\n className=\"flex items-center gap-1 text-meta tracking-wide text-foreground uppercase transition-opacity hover:opacity-80\"\n >\n {isResponseExpanded ? <ChevronDown className=\"size-2.5\" /> : <ChevronRight className=\"size-2.5\" />}\n Suggested Response\n </button>\n {isResponseExpanded && (\n <div className=\"mt-1 italic [&_code]:rounded [&_code]:bg-fill [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className=\"text-caption text-foreground/80\">\n {suggestedResponse}\n </MarkdownRenderer>\n </div>\n )}\n </div>\n )}\n <ExtractedValuesPanel\n extractedValues={extractedValues}\n extractionFailures={extractionFailures}\n isExpanded={isExtractedExpanded}\n onToggle={() => setIsExtractedExpanded(!isExtractedExpanded)}\n />\n </div>\n )}\n </div>\n </div>\n );\n }\n\n if (isDisconnected) {\n const disconnectedLabel = isReflection ? 'Reflection interrupted' : 'Observation interrupted';\n const tokensToObserve = omData.tokensToObserve;\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1 inline-flex items-center gap-1.5 rounded-md bg-yellow-500/10 px-2 py-1 text-column text-yellow-600\">\n <Unplug className=\"size-3\" />\n <span>\n {disconnectedLabel}\n {tokensToObserve ? ` (~${formatTokens(tokensToObserve)} tokens)` : ''}\n </span>\n </div>\n </div>\n );\n }\n\n if (isFailed) {\n const error = omData.error;\n const failedLabel = isReflection ? 'Reflection failed' : 'Observation failed';\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-md bg-red-500/10 px-2 py-1 text-column text-red-600 hover:bg-red-500/20\"\n >\n {isExpanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n <XCircle className=\"size-3\" />\n <span>{failedLabel}</span>\n </button>\n\n {isExpanded && error && (\n <div className=\"mt-1 ml-4 rounded-md border border-red-500/10 bg-red-500/5 p-2 text-caption text-red-700\">\n <span className=\"text-column\">Error:</span> {error}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // Async buffering states - non-blocking background observation/reflection\n if (isBuffering) {\n const tokensToBuffer = omData.tokensToBuffer;\n const bufferingLabel = isReflection ? 'Buffering reflection' : 'Buffering observations';\n return (\n <div\n className=\"mt-2 mb-8\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <MarkerPill icon={<Loader2 className=\"animate-spin text-accent6\" />}>\n {bufferingLabel}\n {tokensToBuffer ? ` ~${formatTokens(tokensToBuffer)} tokens` : '...'}\n </MarkerPill>\n </div>\n );\n }\n\n if (isBufferingComplete) {\n const tokensBuffered = omData.tokensBuffered;\n const bufferedTokens = omData.bufferedTokens;\n const { observations, extractedValues, extractionFailures } = omData;\n const bufferedLabel = isReflection ? 'Buffered reflection' : 'Buffered observations';\n const compressionRatio =\n tokensBuffered && bufferedTokens && bufferedTokens > 0 ? Math.round(tokensBuffered / bufferedTokens) : null;\n\n const handleToggle = (e: React.MouseEvent) => {\n const scrollContainer = e.currentTarget.closest('[data-radix-scroll-area-viewport]') || document.documentElement;\n const scrollTop = scrollContainer.scrollTop;\n setIsExpanded(!isExpanded);\n requestAnimationFrame(() => {\n scrollContainer.scrollTop = scrollTop;\n });\n };\n\n return (\n <div\n className=\"mt-2 mb-8\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div>\n <MarkerPill expanded={isExpanded} onClick={handleToggle} icon={<ObservationIcon className=\"text-accent6\" />}>\n {bufferedLabel} {tokensBuffered ? formatTokens(tokensBuffered) : '?'}→\n {bufferedTokens ? formatTokens(bufferedTokens) : '?'} tokens\n {compressionRatio ? ` (-${compressionRatio}x)` : ''}\n </MarkerPill>\n\n {isExpanded && (\n <div\n className={`mt-2 ml-6 rounded-lg ${bufferExpandedBgColor} space-y-2 border p-4 text-caption ${bufferExpandedBorderColor}`}\n >\n {observations && <ObservationRenderer observations={observations} maxHeight=\"240px\" />}\n <ExtractedValuesPanel\n extractedValues={extractedValues}\n extractionFailures={extractionFailures}\n isExpanded={isExtractedExpanded}\n onToggle={() => setIsExtractedExpanded(!isExtractedExpanded)}\n />\n </div>\n )}\n </div>\n </div>\n );\n }\n\n if (isBufferingFailed) {\n const error = omData.error;\n const failedLabel = isReflection ? 'Buffered reflection failed' : 'Buffered observation failed';\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-dashed border-red-400/40 bg-red-500/10 px-2 py-1 text-column text-red-600 hover:bg-red-500/20\"\n >\n {isExpanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n <XCircle className=\"size-3\" />\n <span>{failedLabel}</span>\n </button>\n\n {isExpanded && error && (\n <div className=\"mt-1 ml-4 rounded-md border border-red-500/10 bg-red-500/5 p-2 text-caption text-red-700\">\n <span className=\"text-column\">Error:</span> {error}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // Activation state - buffered observations have been activated into active observations\n // Styled to match sync observation/reflection markers (green scheme with Brain icon)\n if (isActivated) {\n const tokensActivated = omData.tokensActivated ?? 0;\n const observationTokens = omData.observationTokens ?? 0;\n const { observations } = omData;\n const activatedLabel = isReflection ? 'Reflected' : 'Observed';\n const compressionRatio =\n tokensActivated && observationTokens && observationTokens > 0\n ? Math.round(tokensActivated / observationTokens)\n : null;\n\n const handleToggle = (e: React.MouseEvent) => {\n const scrollContainer = e.currentTarget.closest('[data-radix-scroll-area-viewport]') || document.documentElement;\n const scrollTop = scrollContainer.scrollTop;\n setIsExpanded(!isExpanded);\n requestAnimationFrame(() => {\n scrollContainer.scrollTop = scrollTop;\n });\n };\n\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n data-om-no-highlight=\"true\"\n >\n <div className=\"my-1\">\n <button\n onClick={handleToggle}\n className={`inline-flex items-center gap-1.5 rounded-md px-2 py-1 ${completeBgColor} ${completeTextColor} text-column ${completeHoverBgColor} cursor-pointer`}\n >\n {isExpanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n {isReflection ? <Brain className=\"size-3\" /> : <ObservationIcon className=\"size-3\" />}\n <span>\n {activatedLabel} {tokensActivated ? formatTokens(tokensActivated) : '?'}→\n {observationTokens ? formatTokens(observationTokens) : '?'} tokens\n {compressionRatio ? ` (-${compressionRatio}x)` : ''}\n </span>\n </button>\n {isExpanded && (\n <div\n className={`mt-1 ml-6 rounded-md p-2 ${expandedBgColor} space-y-1.5 border text-caption ${expandedBorderColor}`}\n >\n {/* Stats row */}\n <div className={`flex gap-4 text-caption ${labelColor}`}>\n {tokensActivated > 0 && <span>Input: {formatTokens(tokensActivated)}</span>}\n {observationTokens > 0 && <span>Output: {formatTokens(observationTokens)}</span>}\n {compressionRatio && compressionRatio > 1 && <span>Compression: {compressionRatio}x</span>}\n </div>\n {observations && (\n <div className=\"mt-1 border-t border-border pt-1\">\n <ObservationRenderer observations={observations} maxHeight=\"500px\" />\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // Unknown marker type - render generic\n return (\n <div\n className=\"mb-3\"\n data-om-badge={cycleId}\n data-om-state={state}\n data-om-type={isReflection ? 'reflection' : 'observation'}\n >\n <div className=\"my-1 inline-flex items-center gap-1.5 rounded-md bg-fill px-2 py-1 text-column text-muted-foreground\">\n <Brain className=\"size-3\" />\n <span>{toolName}</span>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const React = require('react');
|
|
7
7
|
const markdownRenderer = require('../../../../markdown-renderer-DtH58325.cjs');
|
|
8
|
+
const Txt = require('../../../../Txt-DPmEpNbp.cjs');
|
|
8
9
|
const utils_cn = require('../../../../cn-DG0X1KEP.cjs');
|
|
9
10
|
|
|
10
11
|
const PRIORITY_COLORS = {
|
|
@@ -160,12 +161,13 @@ function ObservationItem({
|
|
|
160
161
|
observation.isNested && /* @__PURE__ */ jsxRuntime.jsx("span", { className: utils_cn.cn("shrink-0", useInheritedTextColor ? "opacity-60" : "text-muted-foreground"), children: "→" }),
|
|
161
162
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 [&_code]:rounded [&_code]:bg-black/10 [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta", children: /* @__PURE__ */ jsxRuntime.jsx(markdownRenderer.MarkdownRenderer, { className: priorityColor, children: observation.content }) }),
|
|
162
163
|
observation.time && /* @__PURE__ */ jsxRuntime.jsx(
|
|
163
|
-
|
|
164
|
+
Txt.Txt,
|
|
164
165
|
{
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
166
|
+
as: "span",
|
|
167
|
+
variant: "meta",
|
|
168
|
+
font: "mono",
|
|
169
|
+
tone: useInheritedTextColor ? void 0 : "muted",
|
|
170
|
+
className: utils_cn.cn("ml-2 shrink-0", useInheritedTextColor && "opacity-60"),
|
|
169
171
|
children: observation.time
|
|
170
172
|
}
|
|
171
173
|
)
|
|
@@ -207,12 +209,13 @@ function ThreadSection({
|
|
|
207
209
|
"div",
|
|
208
210
|
{
|
|
209
211
|
className: utils_cn.cn(
|
|
210
|
-
"mb-1 inline-block rounded px-1 py-0.5
|
|
212
|
+
"mb-1 inline-block rounded px-1 py-0.5 text-meta",
|
|
211
213
|
useInheritedTextColor ? "bg-current/10 opacity-60" : "bg-muted/50 text-muted-foreground"
|
|
212
214
|
),
|
|
213
215
|
children: [
|
|
214
|
-
"Thread
|
|
215
|
-
|
|
216
|
+
"Thread",
|
|
217
|
+
" ",
|
|
218
|
+
/* @__PURE__ */ jsxRuntime.jsx(Txt.Txt, { as: "span", variant: "meta", font: "mono", children: thread.threadId })
|
|
216
219
|
]
|
|
217
220
|
}
|
|
218
221
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observation-renderer.cjs.js","sources":["../../../../../src/domains/chat/tools/badges/observation-renderer.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { cn } from '@/utils/cn';\n\n// Priority emoji to color mapping\n// P1 (🔴) = highest priority = purple theme\n// P2 (🟡) = medium priority = blue theme\n// P3 (🟢) = lower priority = green theme\nconst PRIORITY_COLORS = {\n '🔴': 'text-foreground',\n '🟡': 'text-foreground',\n '🟢': 'text-foreground',\n} as const;\n\n// Dark backgrounds for all priorities\nconst PRIORITY_BG = {\n '🔴': 'bg-purple-500/15',\n '🟡': 'bg-blue-500/15',\n '🟢': 'bg-green-500/15',\n} as const;\n\n// Full color left border accent\nconst PRIORITY_BORDER = {\n '🔴': 'border-l-purple-500',\n '🟡': 'border-l-blue-500',\n '🟢': 'border-l-green-500',\n} as const;\n\ntype Priority = keyof typeof PRIORITY_COLORS;\n\ninterface ParsedObservation {\n priority: Priority | null;\n time: string | null;\n content: string;\n children: ParsedObservation[];\n isNested: boolean;\n}\n\ninterface ParsedDateBlock {\n date: string;\n relativeTime?: string; // e.g., \"(3 days ago)\"\n observations: ParsedObservation[];\n}\n\ninterface ParsedThread {\n threadId: string;\n dateBlocks: ParsedDateBlock[];\n}\n\ninterface ParsedObservations {\n threads: ParsedThread[];\n currentTask?: string;\n suggestedResponse?: string;\n}\n\n/**\n * Parse a single observation line\n */\nfunction parseObservationLine(line: string, isNested: boolean = false): ParsedObservation | null {\n // Match: * 🔴 (14:30) Content or * -> nested content\n const trimmed = line.trim();\n\n if (!trimmed) return null;\n\n // Check for nested arrow format: * -> content\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const content = trimmed.replace(/^\\*?\\s*->\\s*/, '');\n return {\n priority: null,\n time: null,\n content,\n children: [],\n isNested: true,\n };\n }\n\n // Check for indented dash list item: - content (used as sub-items)\n if (isNested && trimmed.startsWith('-')) {\n const content = trimmed.replace(/^-\\s*/, '');\n if (!content) return null;\n return {\n priority: null,\n time: null,\n content,\n children: [],\n isNested: true,\n };\n }\n\n // Check for standard format: * 🔴 (14:30) Content\n const match = trimmed.match(/^\\*\\s*(🔴|🟡|🟢)?\\s*(?:\\((\\d{1,2}:\\d{2})\\))?\\s*(.+)$/);\n\n if (match) {\n const [, priority, time, content] = match;\n return {\n priority: (priority as Priority) || null,\n time: time || null,\n content: (content ?? '').trim(),\n children: [],\n isNested,\n };\n }\n\n // Fallback for lines that don't match the pattern\n if (trimmed.startsWith('*')) {\n return {\n priority: null,\n time: null,\n content: trimmed.replace(/^\\*\\s*/, ''),\n children: [],\n isNested,\n };\n }\n\n return null;\n}\n\n/**\n * Parse the raw observations string into structured data\n */\nfunction parseObservations(raw: string): ParsedObservations {\n const result: ParsedObservations = {\n threads: [],\n };\n\n // Extract current-task if present\n const currentTaskMatch = raw.match(/<current-task>\\s*([\\s\\S]*?)\\s*<\\/current-task>/);\n if (currentTaskMatch) {\n result.currentTask = (currentTaskMatch[1] ?? '').trim();\n }\n\n // Extract suggested-response if present\n const suggestedMatch = raw.match(/<suggested-response>\\s*([\\s\\S]*?)\\s*<\\/suggested-response>/);\n if (suggestedMatch) {\n result.suggestedResponse = (suggestedMatch[1] ?? '').trim();\n }\n\n // Extract observations content\n const observationsMatch = raw.match(/<observations>\\s*([\\s\\S]*?)\\s*<\\/observations>/);\n const observationsContent = observationsMatch?.[1] ?? raw;\n\n // Split by thread headers if present\n const threadSections = observationsContent.split(/(?=Thread [a-f0-9]+:)/i);\n\n for (const section of threadSections) {\n const trimmedSection = section.trim();\n if (!trimmedSection) continue;\n\n // Check for thread header\n const threadMatch = trimmedSection.match(/^Thread ([a-f0-9]+):/i);\n const threadId = threadMatch?.[1] ?? 'default';\n const content = threadMatch ? trimmedSection.replace(/^Thread [a-f0-9]+:\\s*/i, '') : trimmedSection;\n\n const thread: ParsedThread = {\n threadId,\n dateBlocks: [],\n };\n\n // Split by date headers\n const lines = content.split('\\n');\n let currentDateBlock: ParsedDateBlock | null = null;\n let lastObservation: ParsedObservation | null = null;\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n // Check for date header: \"Date: Dec 4, 2025\" or \"Date: Dec 4, 2025 (3 days ago)\"\n const dateMatch = trimmedLine.match(/^Date:\\s*(.+?)(?:\\s*\\(([^)]+)\\))?$/);\n if (dateMatch) {\n if (currentDateBlock) {\n thread.dateBlocks.push(currentDateBlock);\n }\n currentDateBlock = {\n date: (dateMatch[1] ?? '').trim(),\n relativeTime: dateMatch[2]?.trim(),\n observations: [],\n };\n lastObservation = null;\n continue;\n }\n\n // Check indentation for nested observations\n const indentMatch = line.match(/^(\\s*)/);\n const indent = indentMatch?.[1]?.length ?? 0;\n const isNested =\n indent >= 2 && (trimmedLine.startsWith('* ->') || trimmedLine.startsWith('->') || trimmedLine.startsWith('-'));\n\n const observation = parseObservationLine(trimmedLine, isNested);\n\n if (observation) {\n if (!currentDateBlock) {\n // Create a default date block if none exists\n currentDateBlock = {\n date: 'Recent',\n observations: [],\n };\n }\n\n if (observation.isNested && lastObservation) {\n // Add as child of last observation\n lastObservation.children.push(observation);\n } else {\n currentDateBlock.observations.push(observation);\n lastObservation = observation;\n }\n }\n }\n\n if (currentDateBlock) {\n thread.dateBlocks.push(currentDateBlock);\n }\n\n if (thread.dateBlocks.length > 0) {\n result.threads.push(thread);\n }\n }\n\n return result;\n}\n\n/**\n * Render a single observation\n */\nfunction ObservationItem({\n observation,\n useInheritedTextColor,\n}: {\n observation: ParsedObservation;\n useInheritedTextColor?: boolean;\n}) {\n // When useInheritedTextColor is true, don't apply priority colors - inherit from parent\n const priorityColor = useInheritedTextColor\n ? ''\n : observation.priority\n ? PRIORITY_COLORS[observation.priority]\n : 'text-muted-foreground';\n const bgColor = useInheritedTextColor ? '' : observation.priority ? PRIORITY_BG[observation.priority] : '';\n\n // Get a subtle left border color based on priority (using blue shades for visual hierarchy)\n const borderColor = observation.priority ? PRIORITY_BORDER[observation.priority] : 'border-l-transparent';\n\n return (\n <div className={cn('py-0.5', observation.isNested && 'ml-4 border-l border-border/50 pl-2')}>\n <div\n className={cn(\n 'flex items-start gap-1.5 text-caption',\n bgColor && 'rounded px-1.5 py-0.5',\n bgColor,\n !observation.isNested && observation.priority && `border-l-2 ${borderColor} pl-1.5`,\n )}\n >\n {observation.isNested && (\n <span className={cn('shrink-0', useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground')}>→</span>\n )}\n <span className=\"flex-1 [&_code]:rounded [&_code]:bg-black/10 [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className={priorityColor}>{observation.content}</MarkdownRenderer>\n </span>\n {observation.time && (\n <span\n className={cn(\n 'ml-2 shrink-0 font-mono text-meta',\n useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground',\n )}\n >\n {observation.time}\n </span>\n )}\n </div>\n {observation.children.length > 0 && (\n <div className=\"mt-0.5\">\n {observation.children.map((child, i) => (\n <ObservationItem key={i} observation={child} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Render a date block\n */\nfunction DateBlock({ block, useInheritedTextColor }: { block: ParsedDateBlock; useInheritedTextColor?: boolean }) {\n return (\n <div className=\"mb-2\">\n <div\n className={cn(\n 'sticky top-0 mb-1 flex items-center gap-2 py-1 backdrop-blur-sm',\n useInheritedTextColor ? 'bg-transparent' : 'bg-background/95',\n )}\n >\n <span className={cn('text-column', useInheritedTextColor ? 'opacity-80' : 'text-foreground')}>\n {block.date}\n </span>\n {block.relativeTime && (\n <span className={cn('text-meta', useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground')}>\n ({block.relativeTime})\n </span>\n )}\n </div>\n <div className=\"space-y-0\">\n {block.observations.map((obs, i) => (\n <ObservationItem key={i} observation={obs} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * Render a thread section\n */\nfunction ThreadSection({\n thread,\n showThreadId,\n useInheritedTextColor,\n}: {\n thread: ParsedThread;\n showThreadId: boolean;\n useInheritedTextColor?: boolean;\n}) {\n return (\n <div className=\"mb-3\">\n {showThreadId && thread.threadId !== 'default' && (\n <div\n className={cn(\n 'mb-1 inline-block rounded px-1 py-0.5 font-mono text-meta',\n useInheritedTextColor ? 'bg-current/10 opacity-60' : 'bg-muted/50 text-muted-foreground',\n )}\n >\n Thread {thread.threadId}\n </div>\n )}\n {thread.dateBlocks.map((block, i) => (\n <DateBlock key={i} block={block} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n );\n}\n\nexport interface ObservationRendererProps {\n observations: string;\n className?: string;\n maxHeight?: string;\n showCurrentTask?: boolean;\n showSuggestedResponse?: boolean;\n /** If true, observations inherit text color from parent instead of using priority colors */\n useInheritedTextColor?: boolean;\n}\n\n/**\n * Renders raw observation text with proper formatting\n */\nexport function ObservationRenderer({\n observations,\n className,\n maxHeight,\n showCurrentTask = false,\n showSuggestedResponse = false,\n useInheritedTextColor = false,\n}: ObservationRendererProps) {\n const parsed = useMemo(() => parseObservations(observations), [observations]);\n\n const hasMultipleThreads =\n parsed.threads.length > 1 || (parsed.threads.length === 1 && parsed.threads[0]?.threadId !== 'default');\n\n if (parsed.threads.length === 0 && !parsed.currentTask && !parsed.suggestedResponse) {\n return <div className={cn('text-caption text-muted-foreground italic', className)}>No observations</div>;\n }\n\n return (\n <div className={cn('overflow-hidden text-body', className)}>\n <div\n className={cn('wrap-break-word', maxHeight && 'overflow-y-auto pr-1')}\n style={maxHeight ? { maxHeight } : undefined}\n >\n {parsed.threads.map((thread, i) => (\n <ThreadSection\n key={thread.threadId + i}\n thread={thread}\n showThreadId={hasMultipleThreads}\n useInheritedTextColor={useInheritedTextColor}\n />\n ))}\n </div>\n\n {showCurrentTask && parsed.currentTask && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <div className=\"mb-1 text-meta tracking-wide text-muted-foreground uppercase\">Current Task</div>\n <div className=\"text-caption whitespace-pre-wrap text-foreground\">{parsed.currentTask}</div>\n </div>\n )}\n\n {showSuggestedResponse && parsed.suggestedResponse && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <div className=\"mb-1 text-meta tracking-wide text-muted-foreground uppercase\">Suggested Response</div>\n <div className=\"text-caption whitespace-pre-wrap text-foreground/80 italic\">{parsed.suggestedResponse}</div>\n </div>\n )}\n </div>\n );\n}\n\nexport default ObservationRenderer;\n"],"names":["jsxs","cn","jsx","MarkdownRenderer","useMemo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observation-renderer.cjs.js","sources":["../../../../../src/domains/chat/tools/badges/observation-renderer.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { cn } from '@/utils/cn';\n\n// Priority emoji to color mapping\n// P1 (🔴) = highest priority = purple theme\n// P2 (🟡) = medium priority = blue theme\n// P3 (🟢) = lower priority = green theme\nconst PRIORITY_COLORS = {\n '🔴': 'text-foreground',\n '🟡': 'text-foreground',\n '🟢': 'text-foreground',\n} as const;\n\n// Dark backgrounds for all priorities\nconst PRIORITY_BG = {\n '🔴': 'bg-purple-500/15',\n '🟡': 'bg-blue-500/15',\n '🟢': 'bg-green-500/15',\n} as const;\n\n// Full color left border accent\nconst PRIORITY_BORDER = {\n '🔴': 'border-l-purple-500',\n '🟡': 'border-l-blue-500',\n '🟢': 'border-l-green-500',\n} as const;\n\ntype Priority = keyof typeof PRIORITY_COLORS;\n\ninterface ParsedObservation {\n priority: Priority | null;\n time: string | null;\n content: string;\n children: ParsedObservation[];\n isNested: boolean;\n}\n\ninterface ParsedDateBlock {\n date: string;\n relativeTime?: string; // e.g., \"(3 days ago)\"\n observations: ParsedObservation[];\n}\n\ninterface ParsedThread {\n threadId: string;\n dateBlocks: ParsedDateBlock[];\n}\n\ninterface ParsedObservations {\n threads: ParsedThread[];\n currentTask?: string;\n suggestedResponse?: string;\n}\n\n/**\n * Parse a single observation line\n */\nfunction parseObservationLine(line: string, isNested: boolean = false): ParsedObservation | null {\n // Match: * 🔴 (14:30) Content or * -> nested content\n const trimmed = line.trim();\n\n if (!trimmed) return null;\n\n // Check for nested arrow format: * -> content\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const content = trimmed.replace(/^\\*?\\s*->\\s*/, '');\n return {\n priority: null,\n time: null,\n content,\n children: [],\n isNested: true,\n };\n }\n\n // Check for indented dash list item: - content (used as sub-items)\n if (isNested && trimmed.startsWith('-')) {\n const content = trimmed.replace(/^-\\s*/, '');\n if (!content) return null;\n return {\n priority: null,\n time: null,\n content,\n children: [],\n isNested: true,\n };\n }\n\n // Check for standard format: * 🔴 (14:30) Content\n const match = trimmed.match(/^\\*\\s*(🔴|🟡|🟢)?\\s*(?:\\((\\d{1,2}:\\d{2})\\))?\\s*(.+)$/);\n\n if (match) {\n const [, priority, time, content] = match;\n return {\n priority: (priority as Priority) || null,\n time: time || null,\n content: (content ?? '').trim(),\n children: [],\n isNested,\n };\n }\n\n // Fallback for lines that don't match the pattern\n if (trimmed.startsWith('*')) {\n return {\n priority: null,\n time: null,\n content: trimmed.replace(/^\\*\\s*/, ''),\n children: [],\n isNested,\n };\n }\n\n return null;\n}\n\n/**\n * Parse the raw observations string into structured data\n */\nfunction parseObservations(raw: string): ParsedObservations {\n const result: ParsedObservations = {\n threads: [],\n };\n\n // Extract current-task if present\n const currentTaskMatch = raw.match(/<current-task>\\s*([\\s\\S]*?)\\s*<\\/current-task>/);\n if (currentTaskMatch) {\n result.currentTask = (currentTaskMatch[1] ?? '').trim();\n }\n\n // Extract suggested-response if present\n const suggestedMatch = raw.match(/<suggested-response>\\s*([\\s\\S]*?)\\s*<\\/suggested-response>/);\n if (suggestedMatch) {\n result.suggestedResponse = (suggestedMatch[1] ?? '').trim();\n }\n\n // Extract observations content\n const observationsMatch = raw.match(/<observations>\\s*([\\s\\S]*?)\\s*<\\/observations>/);\n const observationsContent = observationsMatch?.[1] ?? raw;\n\n // Split by thread headers if present\n const threadSections = observationsContent.split(/(?=Thread [a-f0-9]+:)/i);\n\n for (const section of threadSections) {\n const trimmedSection = section.trim();\n if (!trimmedSection) continue;\n\n // Check for thread header\n const threadMatch = trimmedSection.match(/^Thread ([a-f0-9]+):/i);\n const threadId = threadMatch?.[1] ?? 'default';\n const content = threadMatch ? trimmedSection.replace(/^Thread [a-f0-9]+:\\s*/i, '') : trimmedSection;\n\n const thread: ParsedThread = {\n threadId,\n dateBlocks: [],\n };\n\n // Split by date headers\n const lines = content.split('\\n');\n let currentDateBlock: ParsedDateBlock | null = null;\n let lastObservation: ParsedObservation | null = null;\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n // Check for date header: \"Date: Dec 4, 2025\" or \"Date: Dec 4, 2025 (3 days ago)\"\n const dateMatch = trimmedLine.match(/^Date:\\s*(.+?)(?:\\s*\\(([^)]+)\\))?$/);\n if (dateMatch) {\n if (currentDateBlock) {\n thread.dateBlocks.push(currentDateBlock);\n }\n currentDateBlock = {\n date: (dateMatch[1] ?? '').trim(),\n relativeTime: dateMatch[2]?.trim(),\n observations: [],\n };\n lastObservation = null;\n continue;\n }\n\n // Check indentation for nested observations\n const indentMatch = line.match(/^(\\s*)/);\n const indent = indentMatch?.[1]?.length ?? 0;\n const isNested =\n indent >= 2 && (trimmedLine.startsWith('* ->') || trimmedLine.startsWith('->') || trimmedLine.startsWith('-'));\n\n const observation = parseObservationLine(trimmedLine, isNested);\n\n if (observation) {\n if (!currentDateBlock) {\n // Create a default date block if none exists\n currentDateBlock = {\n date: 'Recent',\n observations: [],\n };\n }\n\n if (observation.isNested && lastObservation) {\n // Add as child of last observation\n lastObservation.children.push(observation);\n } else {\n currentDateBlock.observations.push(observation);\n lastObservation = observation;\n }\n }\n }\n\n if (currentDateBlock) {\n thread.dateBlocks.push(currentDateBlock);\n }\n\n if (thread.dateBlocks.length > 0) {\n result.threads.push(thread);\n }\n }\n\n return result;\n}\n\n/**\n * Render a single observation\n */\nfunction ObservationItem({\n observation,\n useInheritedTextColor,\n}: {\n observation: ParsedObservation;\n useInheritedTextColor?: boolean;\n}) {\n // When useInheritedTextColor is true, don't apply priority colors - inherit from parent\n const priorityColor = useInheritedTextColor\n ? ''\n : observation.priority\n ? PRIORITY_COLORS[observation.priority]\n : 'text-muted-foreground';\n const bgColor = useInheritedTextColor ? '' : observation.priority ? PRIORITY_BG[observation.priority] : '';\n\n // Get a subtle left border color based on priority (using blue shades for visual hierarchy)\n const borderColor = observation.priority ? PRIORITY_BORDER[observation.priority] : 'border-l-transparent';\n\n return (\n <div className={cn('py-0.5', observation.isNested && 'ml-4 border-l border-border/50 pl-2')}>\n <div\n className={cn(\n 'flex items-start gap-1.5 text-caption',\n bgColor && 'rounded px-1.5 py-0.5',\n bgColor,\n !observation.isNested && observation.priority && `border-l-2 ${borderColor} pl-1.5`,\n )}\n >\n {observation.isNested && (\n <span className={cn('shrink-0', useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground')}>→</span>\n )}\n <span className=\"flex-1 [&_code]:rounded [&_code]:bg-black/10 [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className={priorityColor}>{observation.content}</MarkdownRenderer>\n </span>\n {observation.time && (\n <Txt\n as=\"span\"\n variant=\"meta\"\n font=\"mono\"\n tone={useInheritedTextColor ? undefined : 'muted'}\n className={cn('ml-2 shrink-0', useInheritedTextColor && 'opacity-60')}\n >\n {observation.time}\n </Txt>\n )}\n </div>\n {observation.children.length > 0 && (\n <div className=\"mt-0.5\">\n {observation.children.map((child, i) => (\n <ObservationItem key={i} observation={child} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Render a date block\n */\nfunction DateBlock({ block, useInheritedTextColor }: { block: ParsedDateBlock; useInheritedTextColor?: boolean }) {\n return (\n <div className=\"mb-2\">\n <div\n className={cn(\n 'sticky top-0 mb-1 flex items-center gap-2 py-1 backdrop-blur-sm',\n useInheritedTextColor ? 'bg-transparent' : 'bg-background/95',\n )}\n >\n <span className={cn('text-column', useInheritedTextColor ? 'opacity-80' : 'text-foreground')}>\n {block.date}\n </span>\n {block.relativeTime && (\n <span className={cn('text-meta', useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground')}>\n ({block.relativeTime})\n </span>\n )}\n </div>\n <div className=\"space-y-0\">\n {block.observations.map((obs, i) => (\n <ObservationItem key={i} observation={obs} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * Render a thread section\n */\nfunction ThreadSection({\n thread,\n showThreadId,\n useInheritedTextColor,\n}: {\n thread: ParsedThread;\n showThreadId: boolean;\n useInheritedTextColor?: boolean;\n}) {\n return (\n <div className=\"mb-3\">\n {showThreadId && thread.threadId !== 'default' && (\n <div\n className={cn(\n 'mb-1 inline-block rounded px-1 py-0.5 text-meta',\n useInheritedTextColor ? 'bg-current/10 opacity-60' : 'bg-muted/50 text-muted-foreground',\n )}\n >\n Thread{' '}\n <Txt as=\"span\" variant=\"meta\" font=\"mono\">\n {thread.threadId}\n </Txt>\n </div>\n )}\n {thread.dateBlocks.map((block, i) => (\n <DateBlock key={i} block={block} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n );\n}\n\nexport interface ObservationRendererProps {\n observations: string;\n className?: string;\n maxHeight?: string;\n showCurrentTask?: boolean;\n showSuggestedResponse?: boolean;\n /** If true, observations inherit text color from parent instead of using priority colors */\n useInheritedTextColor?: boolean;\n}\n\n/**\n * Renders raw observation text with proper formatting\n */\nexport function ObservationRenderer({\n observations,\n className,\n maxHeight,\n showCurrentTask = false,\n showSuggestedResponse = false,\n useInheritedTextColor = false,\n}: ObservationRendererProps) {\n const parsed = useMemo(() => parseObservations(observations), [observations]);\n\n const hasMultipleThreads =\n parsed.threads.length > 1 || (parsed.threads.length === 1 && parsed.threads[0]?.threadId !== 'default');\n\n if (parsed.threads.length === 0 && !parsed.currentTask && !parsed.suggestedResponse) {\n return <div className={cn('text-caption text-muted-foreground italic', className)}>No observations</div>;\n }\n\n return (\n <div className={cn('overflow-hidden text-body', className)}>\n <div\n className={cn('wrap-break-word', maxHeight && 'overflow-y-auto pr-1')}\n style={maxHeight ? { maxHeight } : undefined}\n >\n {parsed.threads.map((thread, i) => (\n <ThreadSection\n key={thread.threadId + i}\n thread={thread}\n showThreadId={hasMultipleThreads}\n useInheritedTextColor={useInheritedTextColor}\n />\n ))}\n </div>\n\n {showCurrentTask && parsed.currentTask && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <div className=\"mb-1 text-meta tracking-wide text-muted-foreground uppercase\">Current Task</div>\n <div className=\"text-caption whitespace-pre-wrap text-foreground\">{parsed.currentTask}</div>\n </div>\n )}\n\n {showSuggestedResponse && parsed.suggestedResponse && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <div className=\"mb-1 text-meta tracking-wide text-muted-foreground uppercase\">Suggested Response</div>\n <div className=\"text-caption whitespace-pre-wrap text-foreground/80 italic\">{parsed.suggestedResponse}</div>\n </div>\n )}\n </div>\n );\n}\n\nexport default ObservationRenderer;\n"],"names":["jsxs","cn","jsx","MarkdownRenderer","Txt","useMemo"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { M as MarkdownRenderer } from '../../../../markdown-renderer-Ces7VyRK.js';
|
|
4
|
+
import { T as Txt } from '../../../../Txt-BP1SRHmL.js';
|
|
4
5
|
import { c as cn } from '../../../../cn-65Adrsfj.js';
|
|
5
6
|
|
|
6
7
|
const PRIORITY_COLORS = {
|
|
@@ -156,12 +157,13 @@ function ObservationItem({
|
|
|
156
157
|
observation.isNested && /* @__PURE__ */ jsx("span", { className: cn("shrink-0", useInheritedTextColor ? "opacity-60" : "text-muted-foreground"), children: "→" }),
|
|
157
158
|
/* @__PURE__ */ jsx("span", { className: "flex-1 [&_code]:rounded [&_code]:bg-black/10 [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta", children: /* @__PURE__ */ jsx(MarkdownRenderer, { className: priorityColor, children: observation.content }) }),
|
|
158
159
|
observation.time && /* @__PURE__ */ jsx(
|
|
159
|
-
|
|
160
|
+
Txt,
|
|
160
161
|
{
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
162
|
+
as: "span",
|
|
163
|
+
variant: "meta",
|
|
164
|
+
font: "mono",
|
|
165
|
+
tone: useInheritedTextColor ? void 0 : "muted",
|
|
166
|
+
className: cn("ml-2 shrink-0", useInheritedTextColor && "opacity-60"),
|
|
165
167
|
children: observation.time
|
|
166
168
|
}
|
|
167
169
|
)
|
|
@@ -203,12 +205,13 @@ function ThreadSection({
|
|
|
203
205
|
"div",
|
|
204
206
|
{
|
|
205
207
|
className: cn(
|
|
206
|
-
"mb-1 inline-block rounded px-1 py-0.5
|
|
208
|
+
"mb-1 inline-block rounded px-1 py-0.5 text-meta",
|
|
207
209
|
useInheritedTextColor ? "bg-current/10 opacity-60" : "bg-muted/50 text-muted-foreground"
|
|
208
210
|
),
|
|
209
211
|
children: [
|
|
210
|
-
"Thread
|
|
211
|
-
|
|
212
|
+
"Thread",
|
|
213
|
+
" ",
|
|
214
|
+
/* @__PURE__ */ jsx(Txt, { as: "span", variant: "meta", font: "mono", children: thread.threadId })
|
|
212
215
|
]
|
|
213
216
|
}
|
|
214
217
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observation-renderer.es.js","sources":["../../../../../src/domains/chat/tools/badges/observation-renderer.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { cn } from '@/utils/cn';\n\n// Priority emoji to color mapping\n// P1 (🔴) = highest priority = purple theme\n// P2 (🟡) = medium priority = blue theme\n// P3 (🟢) = lower priority = green theme\nconst PRIORITY_COLORS = {\n '🔴': 'text-foreground',\n '🟡': 'text-foreground',\n '🟢': 'text-foreground',\n} as const;\n\n// Dark backgrounds for all priorities\nconst PRIORITY_BG = {\n '🔴': 'bg-purple-500/15',\n '🟡': 'bg-blue-500/15',\n '🟢': 'bg-green-500/15',\n} as const;\n\n// Full color left border accent\nconst PRIORITY_BORDER = {\n '🔴': 'border-l-purple-500',\n '🟡': 'border-l-blue-500',\n '🟢': 'border-l-green-500',\n} as const;\n\ntype Priority = keyof typeof PRIORITY_COLORS;\n\ninterface ParsedObservation {\n priority: Priority | null;\n time: string | null;\n content: string;\n children: ParsedObservation[];\n isNested: boolean;\n}\n\ninterface ParsedDateBlock {\n date: string;\n relativeTime?: string; // e.g., \"(3 days ago)\"\n observations: ParsedObservation[];\n}\n\ninterface ParsedThread {\n threadId: string;\n dateBlocks: ParsedDateBlock[];\n}\n\ninterface ParsedObservations {\n threads: ParsedThread[];\n currentTask?: string;\n suggestedResponse?: string;\n}\n\n/**\n * Parse a single observation line\n */\nfunction parseObservationLine(line: string, isNested: boolean = false): ParsedObservation | null {\n // Match: * 🔴 (14:30) Content or * -> nested content\n const trimmed = line.trim();\n\n if (!trimmed) return null;\n\n // Check for nested arrow format: * -> content\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const content = trimmed.replace(/^\\*?\\s*->\\s*/, '');\n return {\n priority: null,\n time: null,\n content,\n children: [],\n isNested: true,\n };\n }\n\n // Check for indented dash list item: - content (used as sub-items)\n if (isNested && trimmed.startsWith('-')) {\n const content = trimmed.replace(/^-\\s*/, '');\n if (!content) return null;\n return {\n priority: null,\n time: null,\n content,\n children: [],\n isNested: true,\n };\n }\n\n // Check for standard format: * 🔴 (14:30) Content\n const match = trimmed.match(/^\\*\\s*(🔴|🟡|🟢)?\\s*(?:\\((\\d{1,2}:\\d{2})\\))?\\s*(.+)$/);\n\n if (match) {\n const [, priority, time, content] = match;\n return {\n priority: (priority as Priority) || null,\n time: time || null,\n content: (content ?? '').trim(),\n children: [],\n isNested,\n };\n }\n\n // Fallback for lines that don't match the pattern\n if (trimmed.startsWith('*')) {\n return {\n priority: null,\n time: null,\n content: trimmed.replace(/^\\*\\s*/, ''),\n children: [],\n isNested,\n };\n }\n\n return null;\n}\n\n/**\n * Parse the raw observations string into structured data\n */\nfunction parseObservations(raw: string): ParsedObservations {\n const result: ParsedObservations = {\n threads: [],\n };\n\n // Extract current-task if present\n const currentTaskMatch = raw.match(/<current-task>\\s*([\\s\\S]*?)\\s*<\\/current-task>/);\n if (currentTaskMatch) {\n result.currentTask = (currentTaskMatch[1] ?? '').trim();\n }\n\n // Extract suggested-response if present\n const suggestedMatch = raw.match(/<suggested-response>\\s*([\\s\\S]*?)\\s*<\\/suggested-response>/);\n if (suggestedMatch) {\n result.suggestedResponse = (suggestedMatch[1] ?? '').trim();\n }\n\n // Extract observations content\n const observationsMatch = raw.match(/<observations>\\s*([\\s\\S]*?)\\s*<\\/observations>/);\n const observationsContent = observationsMatch?.[1] ?? raw;\n\n // Split by thread headers if present\n const threadSections = observationsContent.split(/(?=Thread [a-f0-9]+:)/i);\n\n for (const section of threadSections) {\n const trimmedSection = section.trim();\n if (!trimmedSection) continue;\n\n // Check for thread header\n const threadMatch = trimmedSection.match(/^Thread ([a-f0-9]+):/i);\n const threadId = threadMatch?.[1] ?? 'default';\n const content = threadMatch ? trimmedSection.replace(/^Thread [a-f0-9]+:\\s*/i, '') : trimmedSection;\n\n const thread: ParsedThread = {\n threadId,\n dateBlocks: [],\n };\n\n // Split by date headers\n const lines = content.split('\\n');\n let currentDateBlock: ParsedDateBlock | null = null;\n let lastObservation: ParsedObservation | null = null;\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n // Check for date header: \"Date: Dec 4, 2025\" or \"Date: Dec 4, 2025 (3 days ago)\"\n const dateMatch = trimmedLine.match(/^Date:\\s*(.+?)(?:\\s*\\(([^)]+)\\))?$/);\n if (dateMatch) {\n if (currentDateBlock) {\n thread.dateBlocks.push(currentDateBlock);\n }\n currentDateBlock = {\n date: (dateMatch[1] ?? '').trim(),\n relativeTime: dateMatch[2]?.trim(),\n observations: [],\n };\n lastObservation = null;\n continue;\n }\n\n // Check indentation for nested observations\n const indentMatch = line.match(/^(\\s*)/);\n const indent = indentMatch?.[1]?.length ?? 0;\n const isNested =\n indent >= 2 && (trimmedLine.startsWith('* ->') || trimmedLine.startsWith('->') || trimmedLine.startsWith('-'));\n\n const observation = parseObservationLine(trimmedLine, isNested);\n\n if (observation) {\n if (!currentDateBlock) {\n // Create a default date block if none exists\n currentDateBlock = {\n date: 'Recent',\n observations: [],\n };\n }\n\n if (observation.isNested && lastObservation) {\n // Add as child of last observation\n lastObservation.children.push(observation);\n } else {\n currentDateBlock.observations.push(observation);\n lastObservation = observation;\n }\n }\n }\n\n if (currentDateBlock) {\n thread.dateBlocks.push(currentDateBlock);\n }\n\n if (thread.dateBlocks.length > 0) {\n result.threads.push(thread);\n }\n }\n\n return result;\n}\n\n/**\n * Render a single observation\n */\nfunction ObservationItem({\n observation,\n useInheritedTextColor,\n}: {\n observation: ParsedObservation;\n useInheritedTextColor?: boolean;\n}) {\n // When useInheritedTextColor is true, don't apply priority colors - inherit from parent\n const priorityColor = useInheritedTextColor\n ? ''\n : observation.priority\n ? PRIORITY_COLORS[observation.priority]\n : 'text-muted-foreground';\n const bgColor = useInheritedTextColor ? '' : observation.priority ? PRIORITY_BG[observation.priority] : '';\n\n // Get a subtle left border color based on priority (using blue shades for visual hierarchy)\n const borderColor = observation.priority ? PRIORITY_BORDER[observation.priority] : 'border-l-transparent';\n\n return (\n <div className={cn('py-0.5', observation.isNested && 'ml-4 border-l border-border/50 pl-2')}>\n <div\n className={cn(\n 'flex items-start gap-1.5 text-caption',\n bgColor && 'rounded px-1.5 py-0.5',\n bgColor,\n !observation.isNested && observation.priority && `border-l-2 ${borderColor} pl-1.5`,\n )}\n >\n {observation.isNested && (\n <span className={cn('shrink-0', useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground')}>→</span>\n )}\n <span className=\"flex-1 [&_code]:rounded [&_code]:bg-black/10 [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className={priorityColor}>{observation.content}</MarkdownRenderer>\n </span>\n {observation.time && (\n <span\n className={cn(\n 'ml-2 shrink-0 font-mono text-meta',\n useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground',\n )}\n >\n {observation.time}\n </span>\n )}\n </div>\n {observation.children.length > 0 && (\n <div className=\"mt-0.5\">\n {observation.children.map((child, i) => (\n <ObservationItem key={i} observation={child} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Render a date block\n */\nfunction DateBlock({ block, useInheritedTextColor }: { block: ParsedDateBlock; useInheritedTextColor?: boolean }) {\n return (\n <div className=\"mb-2\">\n <div\n className={cn(\n 'sticky top-0 mb-1 flex items-center gap-2 py-1 backdrop-blur-sm',\n useInheritedTextColor ? 'bg-transparent' : 'bg-background/95',\n )}\n >\n <span className={cn('text-column', useInheritedTextColor ? 'opacity-80' : 'text-foreground')}>\n {block.date}\n </span>\n {block.relativeTime && (\n <span className={cn('text-meta', useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground')}>\n ({block.relativeTime})\n </span>\n )}\n </div>\n <div className=\"space-y-0\">\n {block.observations.map((obs, i) => (\n <ObservationItem key={i} observation={obs} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * Render a thread section\n */\nfunction ThreadSection({\n thread,\n showThreadId,\n useInheritedTextColor,\n}: {\n thread: ParsedThread;\n showThreadId: boolean;\n useInheritedTextColor?: boolean;\n}) {\n return (\n <div className=\"mb-3\">\n {showThreadId && thread.threadId !== 'default' && (\n <div\n className={cn(\n 'mb-1 inline-block rounded px-1 py-0.5 font-mono text-meta',\n useInheritedTextColor ? 'bg-current/10 opacity-60' : 'bg-muted/50 text-muted-foreground',\n )}\n >\n Thread {thread.threadId}\n </div>\n )}\n {thread.dateBlocks.map((block, i) => (\n <DateBlock key={i} block={block} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n );\n}\n\nexport interface ObservationRendererProps {\n observations: string;\n className?: string;\n maxHeight?: string;\n showCurrentTask?: boolean;\n showSuggestedResponse?: boolean;\n /** If true, observations inherit text color from parent instead of using priority colors */\n useInheritedTextColor?: boolean;\n}\n\n/**\n * Renders raw observation text with proper formatting\n */\nexport function ObservationRenderer({\n observations,\n className,\n maxHeight,\n showCurrentTask = false,\n showSuggestedResponse = false,\n useInheritedTextColor = false,\n}: ObservationRendererProps) {\n const parsed = useMemo(() => parseObservations(observations), [observations]);\n\n const hasMultipleThreads =\n parsed.threads.length > 1 || (parsed.threads.length === 1 && parsed.threads[0]?.threadId !== 'default');\n\n if (parsed.threads.length === 0 && !parsed.currentTask && !parsed.suggestedResponse) {\n return <div className={cn('text-caption text-muted-foreground italic', className)}>No observations</div>;\n }\n\n return (\n <div className={cn('overflow-hidden text-body', className)}>\n <div\n className={cn('wrap-break-word', maxHeight && 'overflow-y-auto pr-1')}\n style={maxHeight ? { maxHeight } : undefined}\n >\n {parsed.threads.map((thread, i) => (\n <ThreadSection\n key={thread.threadId + i}\n thread={thread}\n showThreadId={hasMultipleThreads}\n useInheritedTextColor={useInheritedTextColor}\n />\n ))}\n </div>\n\n {showCurrentTask && parsed.currentTask && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <div className=\"mb-1 text-meta tracking-wide text-muted-foreground uppercase\">Current Task</div>\n <div className=\"text-caption whitespace-pre-wrap text-foreground\">{parsed.currentTask}</div>\n </div>\n )}\n\n {showSuggestedResponse && parsed.suggestedResponse && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <div className=\"mb-1 text-meta tracking-wide text-muted-foreground uppercase\">Suggested Response</div>\n <div className=\"text-caption whitespace-pre-wrap text-foreground/80 italic\">{parsed.suggestedResponse}</div>\n </div>\n )}\n </div>\n );\n}\n\nexport default ObservationRenderer;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observation-renderer.es.js","sources":["../../../../../src/domains/chat/tools/badges/observation-renderer.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { cn } from '@/utils/cn';\n\n// Priority emoji to color mapping\n// P1 (🔴) = highest priority = purple theme\n// P2 (🟡) = medium priority = blue theme\n// P3 (🟢) = lower priority = green theme\nconst PRIORITY_COLORS = {\n '🔴': 'text-foreground',\n '🟡': 'text-foreground',\n '🟢': 'text-foreground',\n} as const;\n\n// Dark backgrounds for all priorities\nconst PRIORITY_BG = {\n '🔴': 'bg-purple-500/15',\n '🟡': 'bg-blue-500/15',\n '🟢': 'bg-green-500/15',\n} as const;\n\n// Full color left border accent\nconst PRIORITY_BORDER = {\n '🔴': 'border-l-purple-500',\n '🟡': 'border-l-blue-500',\n '🟢': 'border-l-green-500',\n} as const;\n\ntype Priority = keyof typeof PRIORITY_COLORS;\n\ninterface ParsedObservation {\n priority: Priority | null;\n time: string | null;\n content: string;\n children: ParsedObservation[];\n isNested: boolean;\n}\n\ninterface ParsedDateBlock {\n date: string;\n relativeTime?: string; // e.g., \"(3 days ago)\"\n observations: ParsedObservation[];\n}\n\ninterface ParsedThread {\n threadId: string;\n dateBlocks: ParsedDateBlock[];\n}\n\ninterface ParsedObservations {\n threads: ParsedThread[];\n currentTask?: string;\n suggestedResponse?: string;\n}\n\n/**\n * Parse a single observation line\n */\nfunction parseObservationLine(line: string, isNested: boolean = false): ParsedObservation | null {\n // Match: * 🔴 (14:30) Content or * -> nested content\n const trimmed = line.trim();\n\n if (!trimmed) return null;\n\n // Check for nested arrow format: * -> content\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const content = trimmed.replace(/^\\*?\\s*->\\s*/, '');\n return {\n priority: null,\n time: null,\n content,\n children: [],\n isNested: true,\n };\n }\n\n // Check for indented dash list item: - content (used as sub-items)\n if (isNested && trimmed.startsWith('-')) {\n const content = trimmed.replace(/^-\\s*/, '');\n if (!content) return null;\n return {\n priority: null,\n time: null,\n content,\n children: [],\n isNested: true,\n };\n }\n\n // Check for standard format: * 🔴 (14:30) Content\n const match = trimmed.match(/^\\*\\s*(🔴|🟡|🟢)?\\s*(?:\\((\\d{1,2}:\\d{2})\\))?\\s*(.+)$/);\n\n if (match) {\n const [, priority, time, content] = match;\n return {\n priority: (priority as Priority) || null,\n time: time || null,\n content: (content ?? '').trim(),\n children: [],\n isNested,\n };\n }\n\n // Fallback for lines that don't match the pattern\n if (trimmed.startsWith('*')) {\n return {\n priority: null,\n time: null,\n content: trimmed.replace(/^\\*\\s*/, ''),\n children: [],\n isNested,\n };\n }\n\n return null;\n}\n\n/**\n * Parse the raw observations string into structured data\n */\nfunction parseObservations(raw: string): ParsedObservations {\n const result: ParsedObservations = {\n threads: [],\n };\n\n // Extract current-task if present\n const currentTaskMatch = raw.match(/<current-task>\\s*([\\s\\S]*?)\\s*<\\/current-task>/);\n if (currentTaskMatch) {\n result.currentTask = (currentTaskMatch[1] ?? '').trim();\n }\n\n // Extract suggested-response if present\n const suggestedMatch = raw.match(/<suggested-response>\\s*([\\s\\S]*?)\\s*<\\/suggested-response>/);\n if (suggestedMatch) {\n result.suggestedResponse = (suggestedMatch[1] ?? '').trim();\n }\n\n // Extract observations content\n const observationsMatch = raw.match(/<observations>\\s*([\\s\\S]*?)\\s*<\\/observations>/);\n const observationsContent = observationsMatch?.[1] ?? raw;\n\n // Split by thread headers if present\n const threadSections = observationsContent.split(/(?=Thread [a-f0-9]+:)/i);\n\n for (const section of threadSections) {\n const trimmedSection = section.trim();\n if (!trimmedSection) continue;\n\n // Check for thread header\n const threadMatch = trimmedSection.match(/^Thread ([a-f0-9]+):/i);\n const threadId = threadMatch?.[1] ?? 'default';\n const content = threadMatch ? trimmedSection.replace(/^Thread [a-f0-9]+:\\s*/i, '') : trimmedSection;\n\n const thread: ParsedThread = {\n threadId,\n dateBlocks: [],\n };\n\n // Split by date headers\n const lines = content.split('\\n');\n let currentDateBlock: ParsedDateBlock | null = null;\n let lastObservation: ParsedObservation | null = null;\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n // Check for date header: \"Date: Dec 4, 2025\" or \"Date: Dec 4, 2025 (3 days ago)\"\n const dateMatch = trimmedLine.match(/^Date:\\s*(.+?)(?:\\s*\\(([^)]+)\\))?$/);\n if (dateMatch) {\n if (currentDateBlock) {\n thread.dateBlocks.push(currentDateBlock);\n }\n currentDateBlock = {\n date: (dateMatch[1] ?? '').trim(),\n relativeTime: dateMatch[2]?.trim(),\n observations: [],\n };\n lastObservation = null;\n continue;\n }\n\n // Check indentation for nested observations\n const indentMatch = line.match(/^(\\s*)/);\n const indent = indentMatch?.[1]?.length ?? 0;\n const isNested =\n indent >= 2 && (trimmedLine.startsWith('* ->') || trimmedLine.startsWith('->') || trimmedLine.startsWith('-'));\n\n const observation = parseObservationLine(trimmedLine, isNested);\n\n if (observation) {\n if (!currentDateBlock) {\n // Create a default date block if none exists\n currentDateBlock = {\n date: 'Recent',\n observations: [],\n };\n }\n\n if (observation.isNested && lastObservation) {\n // Add as child of last observation\n lastObservation.children.push(observation);\n } else {\n currentDateBlock.observations.push(observation);\n lastObservation = observation;\n }\n }\n }\n\n if (currentDateBlock) {\n thread.dateBlocks.push(currentDateBlock);\n }\n\n if (thread.dateBlocks.length > 0) {\n result.threads.push(thread);\n }\n }\n\n return result;\n}\n\n/**\n * Render a single observation\n */\nfunction ObservationItem({\n observation,\n useInheritedTextColor,\n}: {\n observation: ParsedObservation;\n useInheritedTextColor?: boolean;\n}) {\n // When useInheritedTextColor is true, don't apply priority colors - inherit from parent\n const priorityColor = useInheritedTextColor\n ? ''\n : observation.priority\n ? PRIORITY_COLORS[observation.priority]\n : 'text-muted-foreground';\n const bgColor = useInheritedTextColor ? '' : observation.priority ? PRIORITY_BG[observation.priority] : '';\n\n // Get a subtle left border color based on priority (using blue shades for visual hierarchy)\n const borderColor = observation.priority ? PRIORITY_BORDER[observation.priority] : 'border-l-transparent';\n\n return (\n <div className={cn('py-0.5', observation.isNested && 'ml-4 border-l border-border/50 pl-2')}>\n <div\n className={cn(\n 'flex items-start gap-1.5 text-caption',\n bgColor && 'rounded px-1.5 py-0.5',\n bgColor,\n !observation.isNested && observation.priority && `border-l-2 ${borderColor} pl-1.5`,\n )}\n >\n {observation.isNested && (\n <span className={cn('shrink-0', useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground')}>→</span>\n )}\n <span className=\"flex-1 [&_code]:rounded [&_code]:bg-black/10 [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-meta\">\n <MarkdownRenderer className={priorityColor}>{observation.content}</MarkdownRenderer>\n </span>\n {observation.time && (\n <Txt\n as=\"span\"\n variant=\"meta\"\n font=\"mono\"\n tone={useInheritedTextColor ? undefined : 'muted'}\n className={cn('ml-2 shrink-0', useInheritedTextColor && 'opacity-60')}\n >\n {observation.time}\n </Txt>\n )}\n </div>\n {observation.children.length > 0 && (\n <div className=\"mt-0.5\">\n {observation.children.map((child, i) => (\n <ObservationItem key={i} observation={child} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Render a date block\n */\nfunction DateBlock({ block, useInheritedTextColor }: { block: ParsedDateBlock; useInheritedTextColor?: boolean }) {\n return (\n <div className=\"mb-2\">\n <div\n className={cn(\n 'sticky top-0 mb-1 flex items-center gap-2 py-1 backdrop-blur-sm',\n useInheritedTextColor ? 'bg-transparent' : 'bg-background/95',\n )}\n >\n <span className={cn('text-column', useInheritedTextColor ? 'opacity-80' : 'text-foreground')}>\n {block.date}\n </span>\n {block.relativeTime && (\n <span className={cn('text-meta', useInheritedTextColor ? 'opacity-60' : 'text-muted-foreground')}>\n ({block.relativeTime})\n </span>\n )}\n </div>\n <div className=\"space-y-0\">\n {block.observations.map((obs, i) => (\n <ObservationItem key={i} observation={obs} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * Render a thread section\n */\nfunction ThreadSection({\n thread,\n showThreadId,\n useInheritedTextColor,\n}: {\n thread: ParsedThread;\n showThreadId: boolean;\n useInheritedTextColor?: boolean;\n}) {\n return (\n <div className=\"mb-3\">\n {showThreadId && thread.threadId !== 'default' && (\n <div\n className={cn(\n 'mb-1 inline-block rounded px-1 py-0.5 text-meta',\n useInheritedTextColor ? 'bg-current/10 opacity-60' : 'bg-muted/50 text-muted-foreground',\n )}\n >\n Thread{' '}\n <Txt as=\"span\" variant=\"meta\" font=\"mono\">\n {thread.threadId}\n </Txt>\n </div>\n )}\n {thread.dateBlocks.map((block, i) => (\n <DateBlock key={i} block={block} useInheritedTextColor={useInheritedTextColor} />\n ))}\n </div>\n );\n}\n\nexport interface ObservationRendererProps {\n observations: string;\n className?: string;\n maxHeight?: string;\n showCurrentTask?: boolean;\n showSuggestedResponse?: boolean;\n /** If true, observations inherit text color from parent instead of using priority colors */\n useInheritedTextColor?: boolean;\n}\n\n/**\n * Renders raw observation text with proper formatting\n */\nexport function ObservationRenderer({\n observations,\n className,\n maxHeight,\n showCurrentTask = false,\n showSuggestedResponse = false,\n useInheritedTextColor = false,\n}: ObservationRendererProps) {\n const parsed = useMemo(() => parseObservations(observations), [observations]);\n\n const hasMultipleThreads =\n parsed.threads.length > 1 || (parsed.threads.length === 1 && parsed.threads[0]?.threadId !== 'default');\n\n if (parsed.threads.length === 0 && !parsed.currentTask && !parsed.suggestedResponse) {\n return <div className={cn('text-caption text-muted-foreground italic', className)}>No observations</div>;\n }\n\n return (\n <div className={cn('overflow-hidden text-body', className)}>\n <div\n className={cn('wrap-break-word', maxHeight && 'overflow-y-auto pr-1')}\n style={maxHeight ? { maxHeight } : undefined}\n >\n {parsed.threads.map((thread, i) => (\n <ThreadSection\n key={thread.threadId + i}\n thread={thread}\n showThreadId={hasMultipleThreads}\n useInheritedTextColor={useInheritedTextColor}\n />\n ))}\n </div>\n\n {showCurrentTask && parsed.currentTask && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <div className=\"mb-1 text-meta tracking-wide text-muted-foreground uppercase\">Current Task</div>\n <div className=\"text-caption whitespace-pre-wrap text-foreground\">{parsed.currentTask}</div>\n </div>\n )}\n\n {showSuggestedResponse && parsed.suggestedResponse && (\n <div className=\"mt-2 border-t border-border pt-2\">\n <div className=\"mb-1 text-meta tracking-wide text-muted-foreground uppercase\">Suggested Response</div>\n <div className=\"text-caption whitespace-pre-wrap text-foreground/80 italic\">{parsed.suggestedResponse}</div>\n </div>\n )}\n </div>\n );\n}\n\nexport default ObservationRenderer;\n"],"names":[],"mappings":"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"}
|
|
@@ -3,18 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
const dateFns = require('date-fns');
|
|
7
6
|
const lucideReact = require('lucide-react');
|
|
8
7
|
const React = require('react');
|
|
9
8
|
const Button = require('../../../Button-BAMnPqos.cjs');
|
|
10
9
|
const buttonsGroup = require('../../../buttons-group-CoZP3lJt.cjs');
|
|
11
10
|
const copyButton = require('../../../copy-button-D2MTGxq_.cjs');
|
|
12
11
|
const dataKeysAndValues = require('../../../data-keys-and-values-CMJ9zHKm.cjs');
|
|
13
|
-
const dataPanel = require('../../../data-panel-
|
|
12
|
+
const dataPanel = require('../../../data-panel-C_BqhzeL.cjs');
|
|
13
|
+
const utils_dateFormat = require('../../../utils/date-format.cjs.js');
|
|
14
14
|
|
|
15
|
-
function toDate(value) {
|
|
16
|
-
return value instanceof Date ? value : new Date(value);
|
|
17
|
-
}
|
|
18
15
|
function LogDataPanel({
|
|
19
16
|
log,
|
|
20
17
|
onClose,
|
|
@@ -24,7 +21,7 @@ function LogDataPanel({
|
|
|
24
21
|
onNext,
|
|
25
22
|
depth
|
|
26
23
|
}) {
|
|
27
|
-
const formattedDate = log ?
|
|
24
|
+
const formattedDate = log ? utils_dateFormat.formatTimestampPrecise(log.timestamp) ?? "" : "";
|
|
28
25
|
return /* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel, { open: !!log, onClose, title: log ? `Log ${formattedDate}` : "Log", depth, children: log && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
29
26
|
/* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Header, { children: [
|
|
30
27
|
/* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel.CloseButton, { onClick: onClose }),
|