@assistant-ui/react-devtools 1.2.6 → 1.2.7
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 +26 -8
- package/dist/DevToolsModal.d.ts +18 -2
- package/dist/DevToolsModal.d.ts.map +1 -1
- package/dist/DevToolsModal.js +25 -232
- package/dist/DevToolsModal.js.map +1 -1
- package/dist/DevToolsModalImpl.d.ts +11 -0
- package/dist/DevToolsModalImpl.d.ts.map +1 -0
- package/dist/DevToolsModalImpl.js +62 -0
- package/dist/DevToolsModalImpl.js.map +1 -0
- package/dist/data/createInProcessClient.d.ts +17 -0
- package/dist/data/createInProcessClient.d.ts.map +1 -0
- package/dist/data/createInProcessClient.js +54 -0
- package/dist/data/createInProcessClient.js.map +1 -0
- package/dist/data/projectApi.d.ts +22 -0
- package/dist/data/projectApi.d.ts.map +1 -0
- package/dist/data/projectApi.js +103 -0
- package/dist/data/projectApi.js.map +1 -0
- package/dist/data/types.d.ts +52 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/data/types.js +10 -0
- package/dist/data/types.js.map +1 -0
- package/dist/data/useDevToolsClient.d.ts +19 -0
- package/dist/data/useDevToolsClient.d.ts.map +1 -0
- package/dist/data/useDevToolsClient.js +70 -0
- package/dist/data/useDevToolsClient.js.map +1 -0
- package/dist/index.d.ts +9 -10
- package/dist/index.js +7 -9
- package/dist/shell/DevToolsOverlay.d.ts +23 -0
- package/dist/shell/DevToolsOverlay.d.ts.map +1 -0
- package/dist/shell/DevToolsOverlay.js +106 -0
- package/dist/shell/DevToolsOverlay.js.map +1 -0
- package/dist/shell/DevToolsPanel.d.ts +23 -0
- package/dist/shell/DevToolsPanel.d.ts.map +1 -0
- package/dist/shell/DevToolsPanel.js +256 -0
- package/dist/shell/DevToolsPanel.js.map +1 -0
- package/dist/shell/ShadowRoot.d.ts +24 -0
- package/dist/shell/ShadowRoot.d.ts.map +1 -0
- package/dist/shell/ShadowRoot.js +107 -0
- package/dist/shell/ShadowRoot.js.map +1 -0
- package/dist/shell/SplitLayout.d.ts +28 -0
- package/dist/shell/SplitLayout.d.ts.map +1 -0
- package/dist/shell/SplitLayout.js +67 -0
- package/dist/shell/SplitLayout.js.map +1 -0
- package/dist/shell/registry.d.ts +41 -0
- package/dist/shell/registry.d.ts.map +1 -0
- package/dist/shell/registry.js +36 -0
- package/dist/shell/registry.js.map +1 -0
- package/dist/shell/tabs/ActivityTab.d.ts +13 -0
- package/dist/shell/tabs/ActivityTab.d.ts.map +1 -0
- package/dist/shell/tabs/ActivityTab.js +259 -0
- package/dist/shell/tabs/ActivityTab.js.map +1 -0
- package/dist/shell/tabs/ContextTab.d.ts +11 -0
- package/dist/shell/tabs/ContextTab.d.ts.map +1 -0
- package/dist/shell/tabs/ContextTab.js +210 -0
- package/dist/shell/tabs/ContextTab.js.map +1 -0
- package/dist/shell/tabs/RawTab.d.ts +11 -0
- package/dist/shell/tabs/RawTab.d.ts.map +1 -0
- package/dist/shell/tabs/RawTab.js +238 -0
- package/dist/shell/tabs/RawTab.js.map +1 -0
- package/dist/shell/tabs/ThreadTab.d.ts +12 -0
- package/dist/shell/tabs/ThreadTab.d.ts.map +1 -0
- package/dist/shell/tabs/ThreadTab.js +426 -0
- package/dist/shell/tabs/ThreadTab.js.map +1 -0
- package/dist/shell/tabs/navSelection.d.ts +10 -0
- package/dist/shell/tabs/navSelection.d.ts.map +1 -0
- package/dist/shell/tabs/navSelection.js +37 -0
- package/dist/shell/tabs/navSelection.js.map +1 -0
- package/dist/styles/panel.generated.d.ts +5 -0
- package/dist/styles/panel.generated.d.ts.map +1 -0
- package/dist/styles/panel.generated.js +6 -0
- package/dist/styles/panel.generated.js.map +1 -0
- package/dist/types.d.ts +1 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/common.d.ts +24 -0
- package/dist/utils/common.d.ts.map +1 -0
- package/dist/utils/common.js +64 -0
- package/dist/utils/common.js.map +1 -0
- package/dist/utils/diff.d.ts +16 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +41 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/serialization.d.ts.map +1 -1
- package/dist/utils/serialization.js +4 -1
- package/dist/utils/serialization.js.map +1 -1
- package/dist/views/activity/EventLogRow.d.ts +28 -0
- package/dist/views/activity/EventLogRow.d.ts.map +1 -0
- package/dist/views/activity/EventLogRow.js +185 -0
- package/dist/views/activity/EventLogRow.js.map +1 -0
- package/dist/views/activity/EventStreamPane.d.ts +11 -0
- package/dist/views/activity/EventStreamPane.d.ts.map +1 -0
- package/dist/views/activity/EventStreamPane.js +98 -0
- package/dist/views/activity/EventStreamPane.js.map +1 -0
- package/dist/views/activity/OrphansPane.d.ts +11 -0
- package/dist/views/activity/OrphansPane.d.ts.map +1 -0
- package/dist/views/activity/OrphansPane.js +39 -0
- package/dist/views/activity/OrphansPane.js.map +1 -0
- package/dist/views/activity/RunDetailPane.d.ts +11 -0
- package/dist/views/activity/RunDetailPane.d.ts.map +1 -0
- package/dist/views/activity/RunDetailPane.js +344 -0
- package/dist/views/activity/RunDetailPane.js.map +1 -0
- package/dist/views/activity/activityNodes.d.ts +39 -0
- package/dist/views/activity/activityNodes.d.ts.map +1 -0
- package/dist/views/activity/activityNodes.js +199 -0
- package/dist/views/activity/activityNodes.js.map +1 -0
- package/dist/views/activity/index.d.ts +6 -0
- package/dist/views/activity/index.js +6 -0
- package/dist/views/attachments/AttachmentList.d.ts +15 -0
- package/dist/views/attachments/AttachmentList.d.ts.map +1 -0
- package/dist/views/attachments/AttachmentList.js +279 -0
- package/dist/views/attachments/AttachmentList.js.map +1 -0
- package/dist/views/attachments/MediaPartView.d.ts +27 -0
- package/dist/views/attachments/MediaPartView.d.ts.map +1 -0
- package/dist/views/attachments/MediaPartView.js +180 -0
- package/dist/views/attachments/MediaPartView.js.map +1 -0
- package/dist/views/attachments/formatBytes.d.ts +8 -0
- package/dist/views/attachments/formatBytes.d.ts.map +1 -0
- package/dist/views/attachments/formatBytes.js +14 -0
- package/dist/views/attachments/formatBytes.js.map +1 -0
- package/dist/views/attachments/index.d.ts +5 -0
- package/dist/views/attachments/index.js +4 -0
- package/dist/views/attachments/parseAttachment.d.ts +8 -0
- package/dist/views/attachments/parseAttachment.d.ts.map +1 -0
- package/dist/views/attachments/parseAttachment.js +58 -0
- package/dist/views/attachments/parseAttachment.js.map +1 -0
- package/dist/views/attachments/types.d.ts +18 -0
- package/dist/views/attachments/types.d.ts.map +1 -0
- package/dist/views/attachments/types.js +0 -0
- package/dist/views/context/ContextDetail.d.ts +14 -0
- package/dist/views/context/ContextDetail.d.ts.map +1 -0
- package/dist/views/context/ContextDetail.js +87 -0
- package/dist/views/context/ContextDetail.js.map +1 -0
- package/dist/views/context/ToolUIsView.d.ts +9 -0
- package/dist/views/context/ToolUIsView.d.ts.map +1 -0
- package/dist/views/context/ToolUIsView.js +80 -0
- package/dist/views/context/ToolUIsView.js.map +1 -0
- package/dist/views/context/contextNodes.d.ts +32 -0
- package/dist/views/context/contextNodes.d.ts.map +1 -0
- package/dist/views/context/contextNodes.js +49 -0
- package/dist/views/context/contextNodes.js.map +1 -0
- package/dist/views/context/index.d.ts +4 -0
- package/dist/views/context/index.js +4 -0
- package/dist/views/mcp/McpView.d.ts +11 -0
- package/dist/views/mcp/McpView.d.ts.map +1 -0
- package/dist/views/mcp/McpView.js +239 -0
- package/dist/views/mcp/McpView.js.map +1 -0
- package/dist/views/mcp/index.d.ts +2 -0
- package/dist/views/mcp/index.js +2 -0
- package/dist/views/mcp/parse.d.ts +7 -0
- package/dist/views/mcp/parse.d.ts.map +1 -0
- package/dist/views/mcp/parse.js +43 -0
- package/dist/views/mcp/parse.js.map +1 -0
- package/dist/views/mcp/types.d.ts +22 -0
- package/dist/views/mcp/types.d.ts.map +1 -0
- package/dist/views/mcp/types.js +0 -0
- package/dist/views/message/ChainOfThought.d.ts +11 -0
- package/dist/views/message/ChainOfThought.d.ts.map +1 -0
- package/dist/views/message/ChainOfThought.js +132 -0
- package/dist/views/message/ChainOfThought.js.map +1 -0
- package/dist/views/message/MessageDetailPane.d.ts +12 -0
- package/dist/views/message/MessageDetailPane.d.ts.map +1 -0
- package/dist/views/message/MessageDetailPane.js +38 -0
- package/dist/views/message/MessageDetailPane.js.map +1 -0
- package/dist/views/message/MessageItem.d.ts +13 -0
- package/dist/views/message/MessageItem.d.ts.map +1 -0
- package/dist/views/message/MessageItem.js +136 -0
- package/dist/views/message/MessageItem.js.map +1 -0
- package/dist/views/message/MessageList.d.ts +13 -0
- package/dist/views/message/MessageList.d.ts.map +1 -0
- package/dist/views/message/MessageList.js +95 -0
- package/dist/views/message/MessageList.js.map +1 -0
- package/dist/views/message/MessageMetrics.d.ts +11 -0
- package/dist/views/message/MessageMetrics.d.ts.map +1 -0
- package/dist/views/message/MessageMetrics.js +93 -0
- package/dist/views/message/MessageMetrics.js.map +1 -0
- package/dist/views/message/MessageTimeline.d.ts +16 -0
- package/dist/views/message/MessageTimeline.d.ts.map +1 -0
- package/dist/views/message/MessageTimeline.js +100 -0
- package/dist/views/message/MessageTimeline.js.map +1 -0
- package/dist/views/message/PartDisclosure.d.ts +18 -0
- package/dist/views/message/PartDisclosure.d.ts.map +1 -0
- package/dist/views/message/PartDisclosure.js +79 -0
- package/dist/views/message/PartDisclosure.js.map +1 -0
- package/dist/views/message/PartView.d.ts +13 -0
- package/dist/views/message/PartView.d.ts.map +1 -0
- package/dist/views/message/PartView.js +416 -0
- package/dist/views/message/PartView.js.map +1 -0
- package/dist/views/message/RoleLabel.d.ts +11 -0
- package/dist/views/message/RoleLabel.d.ts.map +1 -0
- package/dist/views/message/RoleLabel.js +30 -0
- package/dist/views/message/RoleLabel.js.map +1 -0
- package/dist/views/message/StatusBadge.d.ts +17 -0
- package/dist/views/message/StatusBadge.d.ts.map +1 -0
- package/dist/views/message/StatusBadge.js +58 -0
- package/dist/views/message/StatusBadge.js.map +1 -0
- package/dist/views/message/ToolCallView.d.ts +13 -0
- package/dist/views/message/ToolCallView.d.ts.map +1 -0
- package/dist/views/message/ToolCallView.js +289 -0
- package/dist/views/message/ToolCallView.js.map +1 -0
- package/dist/views/message/TtftBar.d.ts +16 -0
- package/dist/views/message/TtftBar.d.ts.map +1 -0
- package/dist/views/message/TtftBar.js +128 -0
- package/dist/views/message/TtftBar.js.map +1 -0
- package/dist/views/message/index.d.ts +6 -0
- package/dist/views/message/index.js +5 -0
- package/dist/views/message/messagePlainText.d.ts +8 -0
- package/dist/views/message/messagePlainText.d.ts.map +1 -0
- package/dist/views/message/messagePlainText.js +39 -0
- package/dist/views/message/messagePlainText.js.map +1 -0
- package/dist/views/message/parse.d.ts +10 -0
- package/dist/views/message/parse.d.ts.map +1 -0
- package/dist/views/message/parse.js +235 -0
- package/dist/views/message/parse.js.map +1 -0
- package/dist/views/message/types.d.ts +114 -0
- package/dist/views/message/types.d.ts.map +1 -0
- package/dist/views/message/types.js +0 -0
- package/dist/views/model-context/ModelContextView.d.ts +26 -0
- package/dist/views/model-context/ModelContextView.d.ts.map +1 -0
- package/dist/views/model-context/ModelContextView.js +214 -0
- package/dist/views/model-context/ModelContextView.js.map +1 -0
- package/dist/views/nav.d.ts +19 -0
- package/dist/views/nav.d.ts.map +1 -0
- package/dist/views/nav.js +8 -0
- package/dist/views/nav.js.map +1 -0
- package/dist/views/raw/RawDetail.d.ts +15 -0
- package/dist/views/raw/RawDetail.d.ts.map +1 -0
- package/dist/views/raw/RawDetail.js +79 -0
- package/dist/views/raw/RawDetail.js.map +1 -0
- package/dist/views/raw/index.d.ts +3 -0
- package/dist/views/raw/index.js +3 -0
- package/dist/views/raw/rawNodes.d.ts +20 -0
- package/dist/views/raw/rawNodes.d.ts.map +1 -0
- package/dist/views/raw/rawNodes.js +78 -0
- package/dist/views/raw/rawNodes.js.map +1 -0
- package/dist/views/raw/statePreview.d.ts +5 -0
- package/dist/views/raw/statePreview.d.ts.map +1 -0
- package/dist/views/raw/statePreview.js +213 -0
- package/dist/views/raw/statePreview.js.map +1 -0
- package/dist/views/runs/PayloadDiff.d.ts +11 -0
- package/dist/views/runs/PayloadDiff.d.ts.map +1 -0
- package/dist/views/runs/PayloadDiff.js +92 -0
- package/dist/views/runs/PayloadDiff.js.map +1 -0
- package/dist/views/runs/parse.d.ts +8 -0
- package/dist/views/runs/parse.d.ts.map +1 -0
- package/dist/views/runs/parse.js +78 -0
- package/dist/views/runs/parse.js.map +1 -0
- package/dist/views/runs/types.d.ts +25 -0
- package/dist/views/runs/types.d.ts.map +1 -0
- package/dist/views/runs/types.js +0 -0
- package/dist/views/scopes/ScopesView.d.ts +9 -0
- package/dist/views/scopes/ScopesView.d.ts.map +1 -0
- package/dist/views/scopes/ScopesView.js +235 -0
- package/dist/views/scopes/ScopesView.js.map +1 -0
- package/dist/views/scopes/index.d.ts +2 -0
- package/dist/views/scopes/index.js +2 -0
- package/dist/views/scopes/parse.d.ts +7 -0
- package/dist/views/scopes/parse.d.ts.map +1 -0
- package/dist/views/scopes/parse.js +23 -0
- package/dist/views/scopes/parse.js.map +1 -0
- package/dist/views/scopes/types.d.ts +10 -0
- package/dist/views/scopes/types.d.ts.map +1 -0
- package/dist/views/scopes/types.js +0 -0
- package/dist/views/thread/ComposerAttachments.d.ts +11 -0
- package/dist/views/thread/ComposerAttachments.d.ts.map +1 -0
- package/dist/views/thread/ComposerAttachments.js +22 -0
- package/dist/views/thread/ComposerAttachments.js.map +1 -0
- package/dist/views/thread/ComposerFlags.d.ts +11 -0
- package/dist/views/thread/ComposerFlags.d.ts.map +1 -0
- package/dist/views/thread/ComposerFlags.js +54 -0
- package/dist/views/thread/ComposerFlags.js.map +1 -0
- package/dist/views/thread/ComposerQueue.d.ts +11 -0
- package/dist/views/thread/ComposerQueue.d.ts.map +1 -0
- package/dist/views/thread/ComposerQueue.js +55 -0
- package/dist/views/thread/ComposerQueue.js.map +1 -0
- package/dist/views/thread/ConversationList.d.ts +18 -0
- package/dist/views/thread/ConversationList.d.ts.map +1 -0
- package/dist/views/thread/ConversationList.js +228 -0
- package/dist/views/thread/ConversationList.js.map +1 -0
- package/dist/views/thread/ConversationStatusDot.d.ts +29 -0
- package/dist/views/thread/ConversationStatusDot.d.ts.map +1 -0
- package/dist/views/thread/ConversationStatusDot.js +91 -0
- package/dist/views/thread/ConversationStatusDot.js.map +1 -0
- package/dist/views/thread/ThreadDetails.d.ts +13 -0
- package/dist/views/thread/ThreadDetails.d.ts.map +1 -0
- package/dist/views/thread/ThreadDetails.js +170 -0
- package/dist/views/thread/ThreadDetails.js.map +1 -0
- package/dist/views/thread/Transcript.d.ts +21 -0
- package/dist/views/thread/Transcript.d.ts.map +1 -0
- package/dist/views/thread/Transcript.js +520 -0
- package/dist/views/thread/Transcript.js.map +1 -0
- package/dist/views/thread/index.d.ts +10 -0
- package/dist/views/thread/index.js +9 -0
- package/dist/views/thread/resolve.d.ts +13 -0
- package/dist/views/thread/resolve.d.ts.map +1 -0
- package/dist/views/thread/resolve.js +29 -0
- package/dist/views/thread/resolve.js.map +1 -0
- package/dist/views/thread/types.d.ts +50 -0
- package/dist/views/thread/types.d.ts.map +1 -0
- package/dist/views/thread/types.js +0 -0
- package/dist/views/thread/utils.d.ts +10 -0
- package/dist/views/thread/utils.d.ts.map +1 -0
- package/dist/views/thread/utils.js +77 -0
- package/dist/views/thread/utils.js.map +1 -0
- package/dist/views/ui/CenteredMessage.d.ts +11 -0
- package/dist/views/ui/CenteredMessage.d.ts.map +1 -0
- package/dist/views/ui/CenteredMessage.js +21 -0
- package/dist/views/ui/CenteredMessage.js.map +1 -0
- package/dist/views/ui/Chip.d.ts +13 -0
- package/dist/views/ui/Chip.d.ts.map +1 -0
- package/dist/views/ui/Chip.js +30 -0
- package/dist/views/ui/Chip.js.map +1 -0
- package/dist/views/ui/ControlButton.d.ts +10 -0
- package/dist/views/ui/ControlButton.d.ts.map +1 -0
- package/dist/views/ui/ControlButton.js +39 -0
- package/dist/views/ui/ControlButton.js.map +1 -0
- package/dist/views/ui/CopyButton.d.ts +19 -0
- package/dist/views/ui/CopyButton.d.ts.map +1 -0
- package/dist/views/ui/CopyButton.js +125 -0
- package/dist/views/ui/CopyButton.js.map +1 -0
- package/dist/views/ui/EmptyState.d.ts +11 -0
- package/dist/views/ui/EmptyState.d.ts.map +1 -0
- package/dist/views/ui/EmptyState.js +21 -0
- package/dist/views/ui/EmptyState.js.map +1 -0
- package/dist/views/ui/InfoCard.d.ts +22 -0
- package/dist/views/ui/InfoCard.d.ts.map +1 -0
- package/dist/views/ui/InfoCard.js +44 -0
- package/dist/views/ui/InfoCard.js.map +1 -0
- package/dist/views/ui/JSONTree.d.ts +16 -0
- package/dist/views/ui/JSONTree.d.ts.map +1 -0
- package/dist/views/ui/JSONTree.js +394 -0
- package/dist/views/ui/JSONTree.js.map +1 -0
- package/dist/views/ui/PaneHeader.d.ts +27 -0
- package/dist/views/ui/PaneHeader.d.ts.map +1 -0
- package/dist/views/ui/PaneHeader.js +71 -0
- package/dist/views/ui/PaneHeader.js.map +1 -0
- package/dist/views/ui/RailTime.d.ts +12 -0
- package/dist/views/ui/RailTime.d.ts.map +1 -0
- package/dist/views/ui/RailTime.js +49 -0
- package/dist/views/ui/RailTime.js.map +1 -0
- package/dist/views/ui/SectionLabel.d.ts +11 -0
- package/dist/views/ui/SectionLabel.d.ts.map +1 -0
- package/dist/views/ui/SectionLabel.js +21 -0
- package/dist/views/ui/SectionLabel.js.map +1 -0
- package/dist/views/ui/SelectableRow.d.ts +18 -0
- package/dist/views/ui/SelectableRow.d.ts.map +1 -0
- package/dist/views/ui/SelectableRow.js +49 -0
- package/dist/views/ui/SelectableRow.js.map +1 -0
- package/dist/views/ui/Sparkline.d.ts +17 -0
- package/dist/views/ui/Sparkline.d.ts.map +1 -0
- package/dist/views/ui/Sparkline.js +96 -0
- package/dist/views/ui/Sparkline.js.map +1 -0
- package/dist/views/ui/SummaryItem.d.ts +23 -0
- package/dist/views/ui/SummaryItem.d.ts.map +1 -0
- package/dist/views/ui/SummaryItem.js +59 -0
- package/dist/views/ui/SummaryItem.js.map +1 -0
- package/dist/views/ui/ToneBadge.d.ts +18 -0
- package/dist/views/ui/ToneBadge.d.ts.map +1 -0
- package/dist/views/ui/ToneBadge.js +34 -0
- package/dist/views/ui/ToneBadge.js.map +1 -0
- package/dist/views/ui/badgeTone.d.ts +21 -0
- package/dist/views/ui/badgeTone.d.ts.map +1 -0
- package/dist/views/ui/badgeTone.js +33 -0
- package/dist/views/ui/badgeTone.js.map +1 -0
- package/dist/views/ui/index.d.ts +16 -0
- package/dist/views/ui/index.js +16 -0
- package/dist/views/ui/useCopyToClipboard.d.ts +12 -0
- package/dist/views/ui/useCopyToClipboard.d.ts.map +1 -0
- package/dist/views/ui/useCopyToClipboard.js +44 -0
- package/dist/views/ui/useCopyToClipboard.js.map +1 -0
- package/package.json +9 -5
- package/src/DevToolsModal.tsx +26 -179
- package/src/DevToolsModalImpl.tsx +60 -0
- package/src/data/createInProcessClient.ts +66 -0
- package/src/data/projectApi.test.ts +100 -0
- package/src/data/projectApi.ts +169 -0
- package/src/data/types.ts +54 -0
- package/src/data/useDevToolsClient.ts +59 -0
- package/src/index.ts +16 -13
- package/src/shell/DevToolsOverlay.tsx +84 -0
- package/src/shell/DevToolsPanel.tsx +192 -0
- package/src/shell/ShadowRoot.tsx +85 -0
- package/src/shell/SplitLayout.tsx +46 -0
- package/src/shell/registry.ts +51 -0
- package/src/shell/tabs/ActivityTab.test.tsx +34 -0
- package/src/shell/tabs/ActivityTab.tsx +161 -0
- package/src/shell/tabs/ContextTab.test.tsx +37 -0
- package/src/shell/tabs/ContextTab.tsx +157 -0
- package/src/shell/tabs/RawTab.test.tsx +43 -0
- package/src/shell/tabs/RawTab.tsx +123 -0
- package/src/shell/tabs/ThreadTab.tsx +220 -0
- package/src/shell/tabs/navSelection.ts +17 -0
- package/src/styles/panel.css +153 -0
- package/src/styles/panel.generated.ts +2 -0
- package/src/types.ts +0 -5
- package/src/utils/common.test.ts +30 -0
- package/src/utils/common.ts +101 -0
- package/src/utils/diff.test.ts +37 -0
- package/src/utils/diff.ts +41 -0
- package/src/utils/serialization.test.ts +31 -0
- package/src/utils/serialization.ts +4 -1
- package/src/views/activity/EventLogRow.tsx +108 -0
- package/src/views/activity/EventStreamPane.tsx +86 -0
- package/src/views/activity/OrphansPane.tsx +23 -0
- package/src/views/activity/RunDetailPane.tsx +128 -0
- package/src/views/activity/activityNodes.test.ts +24 -0
- package/src/views/activity/activityNodes.ts +179 -0
- package/src/views/activity/index.ts +10 -0
- package/src/views/attachments/AttachmentList.tsx +122 -0
- package/src/views/attachments/MediaPartView.tsx +77 -0
- package/src/views/attachments/formatBytes.ts +15 -0
- package/src/views/attachments/index.ts +4 -0
- package/src/views/attachments/parseAttachment.test.ts +37 -0
- package/src/views/attachments/parseAttachment.ts +85 -0
- package/src/views/attachments/types.ts +15 -0
- package/src/views/context/ContextDetail.tsx +37 -0
- package/src/views/context/ToolUIsView.tsx +44 -0
- package/src/views/context/contextNodes.test.ts +31 -0
- package/src/views/context/contextNodes.ts +66 -0
- package/src/views/context/index.ts +4 -0
- package/src/views/mcp/McpView.tsx +125 -0
- package/src/views/mcp/index.ts +1 -0
- package/src/views/mcp/parse.test.ts +63 -0
- package/src/views/mcp/parse.ts +65 -0
- package/src/views/mcp/render.test.tsx +34 -0
- package/src/views/mcp/types.ts +20 -0
- package/src/views/message/ChainOfThought.tsx +74 -0
- package/src/views/message/MessageDetailPane.tsx +26 -0
- package/src/views/message/MessageItem.tsx +94 -0
- package/src/views/message/MessageList.tsx +48 -0
- package/src/views/message/MessageMetrics.tsx +68 -0
- package/src/views/message/MessageTimeline.test.tsx +78 -0
- package/src/views/message/MessageTimeline.tsx +51 -0
- package/src/views/message/PartDisclosure.tsx +32 -0
- package/src/views/message/PartView.tsx +197 -0
- package/src/views/message/RoleLabel.tsx +22 -0
- package/src/views/message/StatusBadge.tsx +28 -0
- package/src/views/message/ToolCallView.tsx +151 -0
- package/src/views/message/TtftBar.tsx +44 -0
- package/src/views/message/index.ts +5 -0
- package/src/views/message/messagePlainText.test.ts +48 -0
- package/src/views/message/messagePlainText.ts +65 -0
- package/src/views/message/parse.test.ts +269 -0
- package/src/views/message/parse.ts +282 -0
- package/src/views/message/render.test.tsx +128 -0
- package/src/views/message/types.ts +137 -0
- package/src/views/model-context/ModelContextView.tsx +71 -0
- package/src/views/model-context/render.test.tsx +24 -0
- package/src/views/nav.ts +18 -0
- package/src/views/raw/RawDetail.tsx +39 -0
- package/src/views/raw/index.ts +3 -0
- package/src/views/raw/rawNodes.test.ts +38 -0
- package/src/views/raw/rawNodes.ts +107 -0
- package/src/views/raw/statePreview.tsx +188 -0
- package/src/views/runs/PayloadDiff.tsx +49 -0
- package/src/views/runs/parse.test.ts +152 -0
- package/src/views/runs/parse.ts +110 -0
- package/src/views/runs/types.ts +23 -0
- package/src/views/scopes/ScopesView.tsx +105 -0
- package/src/views/scopes/index.ts +1 -0
- package/src/views/scopes/parse.test.ts +35 -0
- package/src/views/scopes/parse.ts +30 -0
- package/src/views/scopes/render.test.tsx +35 -0
- package/src/views/scopes/types.ts +6 -0
- package/src/views/thread/ComposerAttachments.test.tsx +36 -0
- package/src/views/thread/ComposerAttachments.tsx +8 -0
- package/src/views/thread/ComposerFlags.test.tsx +23 -0
- package/src/views/thread/ComposerFlags.tsx +19 -0
- package/src/views/thread/ComposerQueue.test.tsx +20 -0
- package/src/views/thread/ComposerQueue.tsx +26 -0
- package/src/views/thread/ConversationList.tsx +127 -0
- package/src/views/thread/ConversationStatusDot.test.ts +86 -0
- package/src/views/thread/ConversationStatusDot.tsx +126 -0
- package/src/views/thread/ThreadDetails.tsx +85 -0
- package/src/views/thread/Transcript.test.tsx +56 -0
- package/src/views/thread/Transcript.tsx +332 -0
- package/src/views/thread/index.ts +19 -0
- package/src/views/thread/render.test.tsx +41 -0
- package/src/views/thread/resolve.ts +36 -0
- package/src/views/thread/types.ts +53 -0
- package/src/views/thread/utils.test.ts +72 -0
- package/src/views/thread/utils.ts +149 -0
- package/src/views/ui/CenteredMessage.tsx +7 -0
- package/src/views/ui/Chip.tsx +17 -0
- package/src/views/ui/ControlButton.tsx +15 -0
- package/src/views/ui/CopyButton.tsx +73 -0
- package/src/views/ui/EmptyState.tsx +7 -0
- package/src/views/ui/InfoCard.tsx +35 -0
- package/src/views/ui/JSONTree.test.tsx +29 -0
- package/src/views/ui/JSONTree.tsx +240 -0
- package/src/views/ui/PaneHeader.tsx +46 -0
- package/src/views/ui/RailTime.tsx +27 -0
- package/src/views/ui/SectionLabel.tsx +7 -0
- package/src/views/ui/SelectableRow.tsx +41 -0
- package/src/views/ui/Sparkline.tsx +49 -0
- package/src/views/ui/SummaryItem.tsx +25 -0
- package/src/views/ui/ToneBadge.tsx +26 -0
- package/src/views/ui/badgeTone.ts +40 -0
- package/src/views/ui/index.ts +20 -0
- package/src/views/ui/useCopyToClipboard.ts +27 -0
- package/dist/DevToolsFrame.d.ts +0 -11
- package/dist/DevToolsFrame.d.ts.map +0 -1
- package/dist/DevToolsFrame.js +0 -66
- package/dist/DevToolsFrame.js.map +0 -1
- package/dist/DevToolsHost.d.ts +0 -38
- package/dist/DevToolsHost.d.ts.map +0 -1
- package/dist/DevToolsHost.js +0 -93
- package/dist/DevToolsHost.js.map +0 -1
- package/dist/ExtensionHost.d.ts +0 -10
- package/dist/ExtensionHost.d.ts.map +0 -1
- package/dist/ExtensionHost.js +0 -42
- package/dist/ExtensionHost.js.map +0 -1
- package/dist/FrameClient.d.ts +0 -38
- package/dist/FrameClient.d.ts.map +0 -1
- package/dist/FrameClient.js +0 -53
- package/dist/FrameClient.js.map +0 -1
- package/dist/FrameHost.d.ts +0 -11
- package/dist/FrameHost.d.ts.map +0 -1
- package/dist/FrameHost.js +0 -26
- package/dist/FrameHost.js.map +0 -1
- package/dist/constants.d.ts +0 -6
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -7
- package/dist/constants.js.map +0 -1
- package/dist/styles/DevToolsModal.styles.d.ts +0 -18
- package/dist/styles/DevToolsModal.styles.d.ts.map +0 -1
- package/dist/styles/DevToolsModal.styles.js +0 -120
- package/dist/styles/DevToolsModal.styles.js.map +0 -1
- package/src/DevToolsFrame.tsx +0 -55
- package/src/DevToolsHost.ts +0 -178
- package/src/ExtensionHost.ts +0 -57
- package/src/FrameClient.ts +0 -99
- package/src/FrameHost.ts +0 -31
- package/src/constants.ts +0 -2
- package/src/styles/DevToolsModal.styles.ts +0 -137
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
import { truncate } from "../../utils/common.js";
|
|
2
|
+
import { RAIL_STATUS_BADGE_CLASS } from "../ui/badgeTone.js";
|
|
3
|
+
import { Chip } from "../ui/Chip.js";
|
|
4
|
+
import { PaneHeader, PaneHeaderStack } from "../ui/PaneHeader.js";
|
|
5
|
+
import { RailTime } from "../ui/RailTime.js";
|
|
6
|
+
import { SelectableRow } from "../ui/SelectableRow.js";
|
|
7
|
+
import { Sparkline } from "../ui/Sparkline.js";
|
|
8
|
+
import { ToneBadge } from "../ui/ToneBadge.js";
|
|
9
|
+
import { StatusBadge } from "../message/StatusBadge.js";
|
|
10
|
+
import { messageStepCount } from "../message/MessageTimeline.js";
|
|
11
|
+
import { RoleLabel } from "../message/RoleLabel.js";
|
|
12
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
13
|
+
import { memo, useEffect, useRef, useState } from "@assistant-ui/tap/react-shim";
|
|
14
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
import clsx from "clsx";
|
|
16
|
+
//#region src/views/thread/Transcript.tsx
|
|
17
|
+
const messageNodeId = (id) => `msg:${id}`;
|
|
18
|
+
const formatTokens = (value) => value >= 1e3 ? `${(value / 1e3).toFixed(1)}k` : String(value);
|
|
19
|
+
const textOf = (parts) => parts.filter((part) => part.type === "text").map((part) => part.text).join("\n").trim();
|
|
20
|
+
const rowSummary = (message) => {
|
|
21
|
+
const text = textOf(message.parts);
|
|
22
|
+
if (text) return truncate(text, 72);
|
|
23
|
+
const tool = message.parts.find((part) => part.type === "tool-call");
|
|
24
|
+
if (tool) return tool.toolName;
|
|
25
|
+
return "—";
|
|
26
|
+
};
|
|
27
|
+
const rowStepHint = (message) => {
|
|
28
|
+
const { tools, texts } = messageStepCount(message.parts);
|
|
29
|
+
const hints = [];
|
|
30
|
+
if (tools > 1) hints.push(`${tools} tools`);
|
|
31
|
+
if (texts > 1) hints.push(`${texts} msgs`);
|
|
32
|
+
return hints.length ? hints.join(" · ") : null;
|
|
33
|
+
};
|
|
34
|
+
const railStatus = (message) => {
|
|
35
|
+
if (message.isOptimistic) return null;
|
|
36
|
+
if (!message.status || message.status.type === "complete") return null;
|
|
37
|
+
return message.status;
|
|
38
|
+
};
|
|
39
|
+
const railAttachmentCount = (message) => {
|
|
40
|
+
if (message.attachments.length > 0) return message.attachments.length;
|
|
41
|
+
return message.parts.filter((part) => part.type === "image" || part.type === "file" || part.type === "audio").length;
|
|
42
|
+
};
|
|
43
|
+
const TurnRow = memo(function TurnRow(t0) {
|
|
44
|
+
const $ = c(41);
|
|
45
|
+
const { message, selected, nodeId, onSelect, rowRef } = t0;
|
|
46
|
+
let t1;
|
|
47
|
+
if ($[0] !== message) {
|
|
48
|
+
t1 = railStatus(message);
|
|
49
|
+
$[0] = message;
|
|
50
|
+
$[1] = t1;
|
|
51
|
+
} else t1 = $[1];
|
|
52
|
+
const status = t1;
|
|
53
|
+
let t2;
|
|
54
|
+
if ($[2] !== message) {
|
|
55
|
+
t2 = rowSummary(message);
|
|
56
|
+
$[2] = message;
|
|
57
|
+
$[3] = t2;
|
|
58
|
+
} else t2 = $[3];
|
|
59
|
+
const summary = t2;
|
|
60
|
+
let t3;
|
|
61
|
+
if ($[4] !== message) {
|
|
62
|
+
t3 = rowStepHint(message);
|
|
63
|
+
$[4] = message;
|
|
64
|
+
$[5] = t3;
|
|
65
|
+
} else t3 = $[5];
|
|
66
|
+
const stepHint = t3;
|
|
67
|
+
const attachmentCount = railAttachmentCount(message);
|
|
68
|
+
let t4;
|
|
69
|
+
if ($[6] !== nodeId || $[7] !== onSelect) {
|
|
70
|
+
t4 = () => onSelect(nodeId);
|
|
71
|
+
$[6] = nodeId;
|
|
72
|
+
$[7] = onSelect;
|
|
73
|
+
$[8] = t4;
|
|
74
|
+
} else t4 = $[8];
|
|
75
|
+
const t5 = stepHint ? `${stepHint}\n${summary}` : summary;
|
|
76
|
+
let t6;
|
|
77
|
+
if ($[9] !== message.role) {
|
|
78
|
+
t6 = /* @__PURE__ */ jsx(RoleLabel, {
|
|
79
|
+
role: message.role,
|
|
80
|
+
compact: true
|
|
81
|
+
});
|
|
82
|
+
$[9] = message.role;
|
|
83
|
+
$[10] = t6;
|
|
84
|
+
} else t6 = $[10];
|
|
85
|
+
let t7;
|
|
86
|
+
if ($[11] !== message.isOptimistic || $[12] !== status) {
|
|
87
|
+
t7 = message.isOptimistic ? /* @__PURE__ */ jsx(ToneBadge, {
|
|
88
|
+
tone: "amber",
|
|
89
|
+
size: "sm",
|
|
90
|
+
className: RAIL_STATUS_BADGE_CLASS,
|
|
91
|
+
children: "opt"
|
|
92
|
+
}) : status ? /* @__PURE__ */ jsx(StatusBadge, {
|
|
93
|
+
type: status.type,
|
|
94
|
+
reason: "reason" in status ? status.reason : void 0,
|
|
95
|
+
compact: true,
|
|
96
|
+
size: "sm",
|
|
97
|
+
className: RAIL_STATUS_BADGE_CLASS
|
|
98
|
+
}) : null;
|
|
99
|
+
$[11] = message.isOptimistic;
|
|
100
|
+
$[12] = status;
|
|
101
|
+
$[13] = t7;
|
|
102
|
+
} else t7 = $[13];
|
|
103
|
+
let t8;
|
|
104
|
+
if ($[14] !== t6 || $[15] !== t7) {
|
|
105
|
+
t8 = /* @__PURE__ */ jsxs("div", {
|
|
106
|
+
className: "flex min-w-0 items-center gap-1.5",
|
|
107
|
+
children: [t6, t7]
|
|
108
|
+
});
|
|
109
|
+
$[14] = t6;
|
|
110
|
+
$[15] = t7;
|
|
111
|
+
$[16] = t8;
|
|
112
|
+
} else t8 = $[16];
|
|
113
|
+
let t9;
|
|
114
|
+
if ($[17] !== attachmentCount) {
|
|
115
|
+
t9 = attachmentCount > 0 ? /* @__PURE__ */ jsxs("span", {
|
|
116
|
+
className: "text-muted-foreground text-[10px] leading-none",
|
|
117
|
+
title: `${attachmentCount} attachment${attachmentCount === 1 ? "" : "s"}`,
|
|
118
|
+
children: ["📎", attachmentCount]
|
|
119
|
+
}) : null;
|
|
120
|
+
$[17] = attachmentCount;
|
|
121
|
+
$[18] = t9;
|
|
122
|
+
} else t9 = $[18];
|
|
123
|
+
let t10;
|
|
124
|
+
if ($[19] !== message.createdAt) {
|
|
125
|
+
t10 = /* @__PURE__ */ jsx(RailTime, { value: message.createdAt });
|
|
126
|
+
$[19] = message.createdAt;
|
|
127
|
+
$[20] = t10;
|
|
128
|
+
} else t10 = $[20];
|
|
129
|
+
let t11;
|
|
130
|
+
if ($[21] !== t10 || $[22] !== t9) {
|
|
131
|
+
t11 = /* @__PURE__ */ jsxs("div", {
|
|
132
|
+
className: "flex shrink-0 items-center gap-1",
|
|
133
|
+
children: [t9, t10]
|
|
134
|
+
});
|
|
135
|
+
$[21] = t10;
|
|
136
|
+
$[22] = t9;
|
|
137
|
+
$[23] = t11;
|
|
138
|
+
} else t11 = $[23];
|
|
139
|
+
let t12;
|
|
140
|
+
if ($[24] !== t11 || $[25] !== t8) {
|
|
141
|
+
t12 = /* @__PURE__ */ jsxs("div", {
|
|
142
|
+
className: "flex min-w-0 items-center justify-between gap-2",
|
|
143
|
+
children: [t8, t11]
|
|
144
|
+
});
|
|
145
|
+
$[24] = t11;
|
|
146
|
+
$[25] = t8;
|
|
147
|
+
$[26] = t12;
|
|
148
|
+
} else t12 = $[26];
|
|
149
|
+
let t13;
|
|
150
|
+
if ($[27] !== stepHint) {
|
|
151
|
+
t13 = stepHint ? /* @__PURE__ */ jsxs("span", {
|
|
152
|
+
className: "text-muted-foreground",
|
|
153
|
+
children: [stepHint, " · "]
|
|
154
|
+
}) : null;
|
|
155
|
+
$[27] = stepHint;
|
|
156
|
+
$[28] = t13;
|
|
157
|
+
} else t13 = $[28];
|
|
158
|
+
let t14;
|
|
159
|
+
if ($[29] !== summary || $[30] !== t13) {
|
|
160
|
+
t14 = /* @__PURE__ */ jsxs("p", {
|
|
161
|
+
className: "text-foreground min-w-0 truncate text-[12px] leading-tight",
|
|
162
|
+
children: [t13, summary]
|
|
163
|
+
});
|
|
164
|
+
$[29] = summary;
|
|
165
|
+
$[30] = t13;
|
|
166
|
+
$[31] = t14;
|
|
167
|
+
} else t14 = $[31];
|
|
168
|
+
let t15;
|
|
169
|
+
if ($[32] !== t12 || $[33] !== t14 || $[34] !== t5) {
|
|
170
|
+
t15 = /* @__PURE__ */ jsxs("div", {
|
|
171
|
+
className: "flex h-10 flex-col justify-center gap-0.5",
|
|
172
|
+
title: t5,
|
|
173
|
+
children: [t12, t14]
|
|
174
|
+
});
|
|
175
|
+
$[32] = t12;
|
|
176
|
+
$[33] = t14;
|
|
177
|
+
$[34] = t5;
|
|
178
|
+
$[35] = t15;
|
|
179
|
+
} else t15 = $[35];
|
|
180
|
+
let t16;
|
|
181
|
+
if ($[36] !== rowRef || $[37] !== selected || $[38] !== t15 || $[39] !== t4) {
|
|
182
|
+
t16 = /* @__PURE__ */ jsx(SelectableRow, {
|
|
183
|
+
ref: rowRef,
|
|
184
|
+
selected,
|
|
185
|
+
onSelect: t4,
|
|
186
|
+
dense: true,
|
|
187
|
+
children: t15
|
|
188
|
+
});
|
|
189
|
+
$[36] = rowRef;
|
|
190
|
+
$[37] = selected;
|
|
191
|
+
$[38] = t15;
|
|
192
|
+
$[39] = t4;
|
|
193
|
+
$[40] = t16;
|
|
194
|
+
} else t16 = $[40];
|
|
195
|
+
return t16;
|
|
196
|
+
});
|
|
197
|
+
const GhostComposer = (t0) => {
|
|
198
|
+
const $ = c(14);
|
|
199
|
+
const { composer } = t0;
|
|
200
|
+
let t1;
|
|
201
|
+
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
202
|
+
t1 = /* @__PURE__ */ jsx("span", {
|
|
203
|
+
className: "text-foreground font-medium",
|
|
204
|
+
children: "draft"
|
|
205
|
+
});
|
|
206
|
+
$[0] = t1;
|
|
207
|
+
} else t1 = $[0];
|
|
208
|
+
const t2 = composer.role ?? "user";
|
|
209
|
+
let t3;
|
|
210
|
+
if ($[1] !== t2) {
|
|
211
|
+
t3 = /* @__PURE__ */ jsx("span", { children: t2 });
|
|
212
|
+
$[1] = t2;
|
|
213
|
+
$[2] = t3;
|
|
214
|
+
} else t3 = $[2];
|
|
215
|
+
let t4;
|
|
216
|
+
if ($[3] !== composer.textLength) {
|
|
217
|
+
t4 = /* @__PURE__ */ jsxs("span", { children: [
|
|
218
|
+
"· ",
|
|
219
|
+
composer.textLength,
|
|
220
|
+
" chars"
|
|
221
|
+
] });
|
|
222
|
+
$[3] = composer.textLength;
|
|
223
|
+
$[4] = t4;
|
|
224
|
+
} else t4 = $[4];
|
|
225
|
+
let t5;
|
|
226
|
+
if ($[5] !== composer.canSend) {
|
|
227
|
+
t5 = composer.canSend ? /* @__PURE__ */ jsx(Chip, { children: "can send" }) : null;
|
|
228
|
+
$[5] = composer.canSend;
|
|
229
|
+
$[6] = t5;
|
|
230
|
+
} else t5 = $[6];
|
|
231
|
+
let t6;
|
|
232
|
+
if ($[7] !== composer.queue.length) {
|
|
233
|
+
t6 = composer.queue.length ? /* @__PURE__ */ jsxs(Chip, { children: [composer.queue.length, " queued"] }) : null;
|
|
234
|
+
$[7] = composer.queue.length;
|
|
235
|
+
$[8] = t6;
|
|
236
|
+
} else t6 = $[8];
|
|
237
|
+
let t7;
|
|
238
|
+
if ($[9] !== t3 || $[10] !== t4 || $[11] !== t5 || $[12] !== t6) {
|
|
239
|
+
t7 = /* @__PURE__ */ jsxs("div", {
|
|
240
|
+
className: "border-border text-muted-foreground flex items-center gap-2 border-t px-3 py-2 text-[11px]",
|
|
241
|
+
children: [
|
|
242
|
+
t1,
|
|
243
|
+
t3,
|
|
244
|
+
t4,
|
|
245
|
+
t5,
|
|
246
|
+
t6
|
|
247
|
+
]
|
|
248
|
+
});
|
|
249
|
+
$[9] = t3;
|
|
250
|
+
$[10] = t4;
|
|
251
|
+
$[11] = t5;
|
|
252
|
+
$[12] = t6;
|
|
253
|
+
$[13] = t7;
|
|
254
|
+
} else t7 = $[13];
|
|
255
|
+
return t7;
|
|
256
|
+
};
|
|
257
|
+
const collect = (messages, pick) => messages.map(pick).filter((value) => value !== void 0);
|
|
258
|
+
const metricSeries = (messages) => [
|
|
259
|
+
{
|
|
260
|
+
label: "tok/s",
|
|
261
|
+
values: collect(messages, (message) => message.timing?.tokensPerSecond),
|
|
262
|
+
format: (value) => value.toFixed(1)
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
label: "TTFT",
|
|
266
|
+
values: collect(messages, (message) => message.timing?.firstTokenTime !== void 0 && message.timing?.streamStartTime !== void 0 ? message.timing.firstTokenTime - message.timing.streamStartTime : void 0),
|
|
267
|
+
format: (value) => `${Math.round(value)}ms`
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
label: "output",
|
|
271
|
+
values: collect(messages, (message) => message.usage?.outputTokens),
|
|
272
|
+
format: (value) => String(value)
|
|
273
|
+
}
|
|
274
|
+
].filter((series) => series.values.length >= 3);
|
|
275
|
+
const TranscriptHeader = memo(function TranscriptHeader(t0) {
|
|
276
|
+
const $ = c(37);
|
|
277
|
+
const { thread } = t0;
|
|
278
|
+
const [expanded, setExpanded] = useState(false);
|
|
279
|
+
const messages = thread.messages;
|
|
280
|
+
let t1;
|
|
281
|
+
if ($[0] !== messages) {
|
|
282
|
+
t1 = messages.reduce(_temp2, 0);
|
|
283
|
+
$[0] = messages;
|
|
284
|
+
$[1] = t1;
|
|
285
|
+
} else t1 = $[1];
|
|
286
|
+
const tools = t1;
|
|
287
|
+
let t2;
|
|
288
|
+
if ($[2] !== messages) {
|
|
289
|
+
t2 = messages.filter(_temp3);
|
|
290
|
+
$[2] = messages;
|
|
291
|
+
$[3] = t2;
|
|
292
|
+
} else t2 = $[3];
|
|
293
|
+
const errors = t2.length;
|
|
294
|
+
let t3;
|
|
295
|
+
let t4;
|
|
296
|
+
if ($[4] !== messages) {
|
|
297
|
+
const tokens = messages.reduce(_temp4, 0);
|
|
298
|
+
t3 = `${messages.length} msg${messages.length === 1 ? "" : "s"}`;
|
|
299
|
+
t4 = tokens ? `${formatTokens(tokens)} tok` : null;
|
|
300
|
+
$[4] = messages;
|
|
301
|
+
$[5] = t3;
|
|
302
|
+
$[6] = t4;
|
|
303
|
+
} else {
|
|
304
|
+
t3 = $[5];
|
|
305
|
+
t4 = $[6];
|
|
306
|
+
}
|
|
307
|
+
const t5 = tools ? `${tools} tool${tools === 1 ? "" : "s"}` : null;
|
|
308
|
+
const t6 = errors ? `${errors} err` : null;
|
|
309
|
+
let t7;
|
|
310
|
+
if ($[7] !== t3 || $[8] !== t4 || $[9] !== t5 || $[10] !== t6) {
|
|
311
|
+
t7 = [
|
|
312
|
+
t3,
|
|
313
|
+
t4,
|
|
314
|
+
t5,
|
|
315
|
+
t6
|
|
316
|
+
].filter(Boolean);
|
|
317
|
+
$[7] = t3;
|
|
318
|
+
$[8] = t4;
|
|
319
|
+
$[9] = t5;
|
|
320
|
+
$[10] = t6;
|
|
321
|
+
$[11] = t7;
|
|
322
|
+
} else t7 = $[11];
|
|
323
|
+
const statParts = t7;
|
|
324
|
+
let t8;
|
|
325
|
+
if ($[12] !== messages) {
|
|
326
|
+
t8 = metricSeries(messages);
|
|
327
|
+
$[12] = messages;
|
|
328
|
+
$[13] = t8;
|
|
329
|
+
} else t8 = $[13];
|
|
330
|
+
const trendSeries = t8;
|
|
331
|
+
const t9 = trendSeries.length > 0;
|
|
332
|
+
let t10;
|
|
333
|
+
if ($[14] !== statParts || $[15] !== t9 || $[16] !== trendSeries) {
|
|
334
|
+
t10 = {
|
|
335
|
+
stats: statParts,
|
|
336
|
+
series: trendSeries,
|
|
337
|
+
canExpand: t9
|
|
338
|
+
};
|
|
339
|
+
$[14] = statParts;
|
|
340
|
+
$[15] = t9;
|
|
341
|
+
$[16] = trendSeries;
|
|
342
|
+
$[17] = t10;
|
|
343
|
+
} else t10 = $[17];
|
|
344
|
+
const { stats, series, canExpand } = t10;
|
|
345
|
+
const t11 = canExpand && expanded;
|
|
346
|
+
let t12;
|
|
347
|
+
if ($[18] !== thread.isRunning) {
|
|
348
|
+
t12 = thread.isRunning ? /* @__PURE__ */ jsx(ToneBadge, {
|
|
349
|
+
tone: "blue",
|
|
350
|
+
size: "sm",
|
|
351
|
+
children: "running"
|
|
352
|
+
}) : null;
|
|
353
|
+
$[18] = thread.isRunning;
|
|
354
|
+
$[19] = t12;
|
|
355
|
+
} else t12 = $[19];
|
|
356
|
+
let t13;
|
|
357
|
+
if ($[20] !== canExpand || $[21] !== expanded) {
|
|
358
|
+
t13 = canExpand ? /* @__PURE__ */ jsxs("button", {
|
|
359
|
+
type: "button",
|
|
360
|
+
onClick: () => setExpanded(_temp5),
|
|
361
|
+
className: "text-muted-foreground hover:text-foreground text-[11px] leading-none",
|
|
362
|
+
children: [
|
|
363
|
+
/* @__PURE__ */ jsx("span", {
|
|
364
|
+
className: clsx("inline-block transition-transform", expanded && "rotate-90"),
|
|
365
|
+
children: "›"
|
|
366
|
+
}),
|
|
367
|
+
" ",
|
|
368
|
+
"trends"
|
|
369
|
+
]
|
|
370
|
+
}) : null;
|
|
371
|
+
$[20] = canExpand;
|
|
372
|
+
$[21] = expanded;
|
|
373
|
+
$[22] = t13;
|
|
374
|
+
} else t13 = $[22];
|
|
375
|
+
let t14;
|
|
376
|
+
if ($[23] !== t12 || $[24] !== t13) {
|
|
377
|
+
t14 = /* @__PURE__ */ jsxs(Fragment$1, { children: [t12, t13] });
|
|
378
|
+
$[23] = t12;
|
|
379
|
+
$[24] = t13;
|
|
380
|
+
$[25] = t14;
|
|
381
|
+
} else t14 = $[25];
|
|
382
|
+
let t15;
|
|
383
|
+
if ($[26] !== stats) {
|
|
384
|
+
t15 = stats.join(" · ");
|
|
385
|
+
$[26] = stats;
|
|
386
|
+
$[27] = t15;
|
|
387
|
+
} else t15 = $[27];
|
|
388
|
+
let t16;
|
|
389
|
+
if ($[28] !== t11 || $[29] !== t14 || $[30] !== t15) {
|
|
390
|
+
t16 = /* @__PURE__ */ jsx(PaneHeader, {
|
|
391
|
+
borderless: t11,
|
|
392
|
+
trailing: t14,
|
|
393
|
+
children: t15
|
|
394
|
+
});
|
|
395
|
+
$[28] = t11;
|
|
396
|
+
$[29] = t14;
|
|
397
|
+
$[30] = t15;
|
|
398
|
+
$[31] = t16;
|
|
399
|
+
} else t16 = $[31];
|
|
400
|
+
const titleRow = t16;
|
|
401
|
+
if (canExpand && expanded) {
|
|
402
|
+
let t17;
|
|
403
|
+
if ($[32] !== series) {
|
|
404
|
+
t17 = series.map(_temp6);
|
|
405
|
+
$[32] = series;
|
|
406
|
+
$[33] = t17;
|
|
407
|
+
} else t17 = $[33];
|
|
408
|
+
let t18;
|
|
409
|
+
if ($[34] !== t17 || $[35] !== titleRow) {
|
|
410
|
+
t18 = /* @__PURE__ */ jsx(PaneHeaderStack, {
|
|
411
|
+
header: titleRow,
|
|
412
|
+
children: t17
|
|
413
|
+
});
|
|
414
|
+
$[34] = t17;
|
|
415
|
+
$[35] = titleRow;
|
|
416
|
+
$[36] = t18;
|
|
417
|
+
} else t18 = $[36];
|
|
418
|
+
return t18;
|
|
419
|
+
}
|
|
420
|
+
return titleRow;
|
|
421
|
+
});
|
|
422
|
+
const Transcript = (t0) => {
|
|
423
|
+
const $ = c(14);
|
|
424
|
+
const { thread, selection, onSelect } = t0;
|
|
425
|
+
const selectedRef = useRef(null);
|
|
426
|
+
const prevSelectionRef = useRef(selection);
|
|
427
|
+
let t1;
|
|
428
|
+
if ($[0] !== onSelect) {
|
|
429
|
+
t1 = (nodeId) => onSelect(nodeId);
|
|
430
|
+
$[0] = onSelect;
|
|
431
|
+
$[1] = t1;
|
|
432
|
+
} else t1 = $[1];
|
|
433
|
+
const handleSelect = t1;
|
|
434
|
+
let t2;
|
|
435
|
+
let t3;
|
|
436
|
+
if ($[2] !== selection) {
|
|
437
|
+
t2 = () => {
|
|
438
|
+
if (prevSelectionRef.current === selection) return;
|
|
439
|
+
prevSelectionRef.current = selection;
|
|
440
|
+
selectedRef.current?.scrollIntoView({ block: "nearest" });
|
|
441
|
+
};
|
|
442
|
+
t3 = [selection];
|
|
443
|
+
$[2] = selection;
|
|
444
|
+
$[3] = t2;
|
|
445
|
+
$[4] = t3;
|
|
446
|
+
} else {
|
|
447
|
+
t2 = $[3];
|
|
448
|
+
t3 = $[4];
|
|
449
|
+
}
|
|
450
|
+
useEffect(t2, t3);
|
|
451
|
+
let t4;
|
|
452
|
+
if ($[5] !== handleSelect || $[6] !== selection || $[7] !== thread.messages) {
|
|
453
|
+
t4 = thread.messages.map((message) => {
|
|
454
|
+
const nodeId_0 = messageNodeId(message.id);
|
|
455
|
+
const selected = selection === nodeId_0;
|
|
456
|
+
return /* @__PURE__ */ jsx(TurnRow, {
|
|
457
|
+
message,
|
|
458
|
+
nodeId: nodeId_0,
|
|
459
|
+
selected,
|
|
460
|
+
onSelect: handleSelect,
|
|
461
|
+
rowRef: selected ? selectedRef : void 0
|
|
462
|
+
}, message.id);
|
|
463
|
+
});
|
|
464
|
+
$[5] = handleSelect;
|
|
465
|
+
$[6] = selection;
|
|
466
|
+
$[7] = thread.messages;
|
|
467
|
+
$[8] = t4;
|
|
468
|
+
} else t4 = $[8];
|
|
469
|
+
let t5;
|
|
470
|
+
if ($[9] !== thread.composer) {
|
|
471
|
+
t5 = thread.composer && thread.composer.textLength > 0 ? /* @__PURE__ */ jsx(GhostComposer, { composer: thread.composer }) : null;
|
|
472
|
+
$[9] = thread.composer;
|
|
473
|
+
$[10] = t5;
|
|
474
|
+
} else t5 = $[10];
|
|
475
|
+
let t6;
|
|
476
|
+
if ($[11] !== t4 || $[12] !== t5) {
|
|
477
|
+
t6 = /* @__PURE__ */ jsxs(Fragment$1, { children: [t4, t5] });
|
|
478
|
+
$[11] = t4;
|
|
479
|
+
$[12] = t5;
|
|
480
|
+
$[13] = t6;
|
|
481
|
+
} else t6 = $[13];
|
|
482
|
+
return t6;
|
|
483
|
+
};
|
|
484
|
+
function _temp(part) {
|
|
485
|
+
return part.type === "tool-call";
|
|
486
|
+
}
|
|
487
|
+
function _temp2(sum, message) {
|
|
488
|
+
return sum + message.parts.filter(_temp).length;
|
|
489
|
+
}
|
|
490
|
+
function _temp3(message_0) {
|
|
491
|
+
return message_0.status?.type === "incomplete";
|
|
492
|
+
}
|
|
493
|
+
function _temp4(sum_0, message_1) {
|
|
494
|
+
return sum_0 + (message_1.usage ? message_1.usage.inputTokens + message_1.usage.outputTokens : 0);
|
|
495
|
+
}
|
|
496
|
+
function _temp5(prev) {
|
|
497
|
+
return !prev;
|
|
498
|
+
}
|
|
499
|
+
function _temp6(entry) {
|
|
500
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
501
|
+
className: "flex items-center justify-between gap-3 px-3 py-1.5",
|
|
502
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
503
|
+
className: "flex flex-col",
|
|
504
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
505
|
+
className: "text-muted-foreground text-[10px]",
|
|
506
|
+
children: entry.label
|
|
507
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
508
|
+
className: "text-foreground text-[12px] font-medium tabular-nums",
|
|
509
|
+
children: entry.format(entry.values[entry.values.length - 1])
|
|
510
|
+
})]
|
|
511
|
+
}), /* @__PURE__ */ jsx(Sparkline, {
|
|
512
|
+
values: entry.values,
|
|
513
|
+
className: "h-6 w-24"
|
|
514
|
+
})]
|
|
515
|
+
}, entry.label);
|
|
516
|
+
}
|
|
517
|
+
//#endregion
|
|
518
|
+
export { Transcript, TranscriptHeader, messageNodeId };
|
|
519
|
+
|
|
520
|
+
//# sourceMappingURL=Transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transcript.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","clsx","truncate","StatusBadge","MessagePreview","PartPreview","messageStepCount","RoleLabel","Chip","PaneHeader","PaneHeaderStack","RailTime","RAIL_STATUS_BADGE_CLASS","SelectableRow","Sparkline","ToneBadge","ComposerPreview","ThreadPreview","MetricSeries","label","values","format","value","messageNodeId","id","formatTokens","toFixed","String","textOf","parts","filter","part","Extract","type","map","text","join","trim","rowSummary","message","tool","find","toolName","rowStepHint","tools","texts","hints","push","length","railStatus","isOptimistic","status","railAttachmentCount","attachments","TurnRow","t0","$","_c","selected","nodeId","onSelect","rowRef","t1","t2","summary","t3","stepHint","attachmentCount","t4","t5","t6","role","t7","reason","undefined","t8","t9","t10","createdAt","t11","t12","t13","t14","t15","t16","GhostComposer","composer","Symbol","for","textLength","canSend","queue","collect","messages","pick","metricSeries","timing","tokensPerSecond","firstTokenTime","streamStartTime","Math","round","usage","outputTokens","series","TranscriptHeader","thread","expanded","setExpanded","reduce","_temp2","_temp3","errors","tokens","_temp4","Boolean","statParts","trendSeries","stats","canExpand","isRunning","_temp5","titleRow","t17","_temp6","t18","Transcript","selection","selectedRef","prevSelectionRef","handleSelect","current","scrollIntoView","block","nodeId_0","_temp","sum","message_0","sum_0","message_1","inputTokens","prev","entry"],"sources":["../../../src/views/thread/Transcript.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { truncate } from \"../../utils/common\";\nimport { StatusBadge } from \"../message\";\nimport type { MessagePreview, PartPreview } from \"../message\";\nimport { messageStepCount } from \"../message/MessageTimeline\";\nimport { RoleLabel } from \"../message/RoleLabel\";\nimport {\n Chip,\n PaneHeader,\n PaneHeaderStack,\n RailTime,\n RAIL_STATUS_BADGE_CLASS,\n SelectableRow,\n Sparkline,\n ToneBadge,\n} from \"../ui\";\nimport type { ComposerPreview, ThreadPreview } from \"./types\";\n\ninterface MetricSeries {\n label: string;\n values: number[];\n format: (value: number) => string;\n}\n\nexport const messageNodeId = (id: string) => `msg:${id}`;\n\nconst formatTokens = (value: number) =>\n value >= 1000 ? `${(value / 1000).toFixed(1)}k` : String(value);\n\nconst textOf = (parts: readonly PartPreview[]) =>\n parts\n .filter(\n (part): part is Extract<PartPreview, { type: \"text\" }> =>\n part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\\n\")\n .trim();\n\nconst rowSummary = (message: MessagePreview) => {\n const text = textOf(message.parts);\n if (text) return truncate(text, 72);\n const tool = message.parts.find(\n (part): part is Extract<PartPreview, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n );\n if (tool) return tool.toolName;\n return \"—\";\n};\n\nconst rowStepHint = (message: MessagePreview) => {\n const { tools, texts } = messageStepCount(message.parts);\n const hints: string[] = [];\n if (tools > 1) hints.push(`${tools} tools`);\n if (texts > 1) hints.push(`${texts} msgs`);\n return hints.length ? hints.join(\" · \") : null;\n};\n\nconst railStatus = (message: MessagePreview) => {\n if (message.isOptimistic) return null;\n if (!message.status || message.status.type === \"complete\") return null;\n return message.status;\n};\n\nconst railAttachmentCount = (message: MessagePreview) => {\n if (message.attachments.length > 0) return message.attachments.length;\n return message.parts.filter(\n (part) =>\n part.type === \"image\" || part.type === \"file\" || part.type === \"audio\",\n ).length;\n};\n\nconst TurnRow = memo(function TurnRow({\n message,\n selected,\n nodeId,\n onSelect,\n rowRef,\n}: {\n message: MessagePreview;\n selected: boolean;\n nodeId: string;\n onSelect: (nodeId: string) => void;\n rowRef?: React.Ref<HTMLButtonElement> | undefined;\n}) {\n const status = railStatus(message);\n const summary = rowSummary(message);\n const stepHint = rowStepHint(message);\n const attachmentCount = railAttachmentCount(message);\n\n return (\n <SelectableRow\n ref={rowRef}\n selected={selected}\n onSelect={() => onSelect(nodeId)}\n dense\n >\n <div\n className=\"flex h-10 flex-col justify-center gap-0.5\"\n title={stepHint ? `${stepHint}\\n${summary}` : summary}\n >\n <div className=\"flex min-w-0 items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <RoleLabel role={message.role} compact />\n {message.isOptimistic ? (\n <ToneBadge\n tone=\"amber\"\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n >\n opt\n </ToneBadge>\n ) : status ? (\n <StatusBadge\n type={status.type}\n reason={\"reason\" in status ? status.reason : undefined}\n compact\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n />\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {attachmentCount > 0 ? (\n <span\n className=\"text-muted-foreground text-[10px] leading-none\"\n title={`${attachmentCount} attachment${attachmentCount === 1 ? \"\" : \"s\"}`}\n >\n 📎{attachmentCount}\n </span>\n ) : null}\n <RailTime value={message.createdAt} />\n </div>\n </div>\n <p className=\"text-foreground min-w-0 truncate text-[12px] leading-tight\">\n {stepHint ? (\n <span className=\"text-muted-foreground\">{stepHint} · </span>\n ) : null}\n {summary}\n </p>\n </div>\n </SelectableRow>\n );\n});\n\nconst GhostComposer = ({ composer }: { composer: ComposerPreview }) => (\n <div className=\"border-border text-muted-foreground flex items-center gap-2 border-t px-3 py-2 text-[11px]\">\n <span className=\"text-foreground font-medium\">draft</span>\n <span>{composer.role ?? \"user\"}</span>\n <span>· {composer.textLength} chars</span>\n {composer.canSend ? <Chip>can send</Chip> : null}\n {composer.queue.length ? <Chip>{composer.queue.length} queued</Chip> : null}\n </div>\n);\n\nconst collect = (\n messages: readonly MessagePreview[],\n pick: (message: MessagePreview) => number | undefined,\n): number[] =>\n messages.map(pick).filter((value): value is number => value !== undefined);\n\nconst metricSeries = (messages: readonly MessagePreview[]): MetricSeries[] =>\n [\n {\n label: \"tok/s\",\n values: collect(messages, (message) => message.timing?.tokensPerSecond),\n format: (value: number) => value.toFixed(1),\n },\n {\n label: \"TTFT\",\n values: collect(messages, (message) =>\n message.timing?.firstTokenTime !== undefined &&\n message.timing?.streamStartTime !== undefined\n ? message.timing.firstTokenTime - message.timing.streamStartTime\n : undefined,\n ),\n format: (value: number) => `${Math.round(value)}ms`,\n },\n {\n label: \"output\",\n values: collect(messages, (message) => message.usage?.outputTokens),\n format: (value: number) => String(value),\n },\n ].filter((series) => series.values.length >= 3);\n\nexport const TranscriptHeader = memo(function TranscriptHeader({\n thread,\n}: {\n thread: ThreadPreview;\n}) {\n const [expanded, setExpanded] = useState(false);\n const messages = thread.messages;\n\n const { stats, series, canExpand } = useMemo(() => {\n const tools = messages.reduce(\n (sum, message) =>\n sum + message.parts.filter((part) => part.type === \"tool-call\").length,\n 0,\n );\n const errors = messages.filter(\n (message) => message.status?.type === \"incomplete\",\n ).length;\n const tokens = messages.reduce(\n (sum, message) =>\n sum +\n (message.usage\n ? message.usage.inputTokens + message.usage.outputTokens\n : 0),\n 0,\n );\n\n const statParts = [\n `${messages.length} msg${messages.length === 1 ? \"\" : \"s\"}`,\n tokens ? `${formatTokens(tokens)} tok` : null,\n tools ? `${tools} tool${tools === 1 ? \"\" : \"s\"}` : null,\n errors ? `${errors} err` : null,\n ].filter(Boolean);\n\n const trendSeries = metricSeries(messages);\n\n return {\n stats: statParts,\n series: trendSeries,\n canExpand: trendSeries.length > 0,\n };\n }, [messages]);\n\n const titleRow = (\n <PaneHeader\n borderless={canExpand && expanded}\n trailing={\n <>\n {thread.isRunning ? (\n <ToneBadge tone=\"blue\" size=\"sm\">\n running\n </ToneBadge>\n ) : null}\n {canExpand ? (\n <button\n type=\"button\"\n onClick={() => setExpanded((prev) => !prev)}\n className=\"text-muted-foreground hover:text-foreground text-[11px] leading-none\"\n >\n <span\n className={clsx(\n \"inline-block transition-transform\",\n expanded && \"rotate-90\",\n )}\n >\n ›\n </span>{\" \"}\n trends\n </button>\n ) : null}\n </>\n }\n >\n {stats.join(\" · \")}\n </PaneHeader>\n );\n\n if (canExpand && expanded) {\n return (\n <PaneHeaderStack header={titleRow}>\n {series.map((entry) => (\n <div\n key={entry.label}\n className=\"flex items-center justify-between gap-3 px-3 py-1.5\"\n >\n <div className=\"flex flex-col\">\n <span className=\"text-muted-foreground text-[10px]\">\n {entry.label}\n </span>\n <span className=\"text-foreground text-[12px] font-medium tabular-nums\">\n {entry.format(entry.values[entry.values.length - 1]!)}\n </span>\n </div>\n <Sparkline values={entry.values} className=\"h-6 w-24\" />\n </div>\n ))}\n </PaneHeaderStack>\n );\n }\n\n return titleRow;\n});\n\nexport const Transcript = ({\n thread,\n selection,\n onSelect,\n}: {\n thread: ThreadPreview;\n selection: string | null;\n onSelect: (nodeId: string) => void;\n}) => {\n const selectedRef = useRef<HTMLButtonElement>(null);\n const prevSelectionRef = useRef(selection);\n const handleSelect = useCallback(\n (nodeId: string) => onSelect(nodeId),\n [onSelect],\n );\n\n useEffect(() => {\n if (prevSelectionRef.current === selection) return;\n prevSelectionRef.current = selection;\n selectedRef.current?.scrollIntoView({ block: \"nearest\" });\n }, [selection]);\n\n return (\n <>\n {thread.messages.map((message) => {\n const nodeId = messageNodeId(message.id);\n const selected = selection === nodeId;\n return (\n <TurnRow\n key={message.id}\n message={message}\n nodeId={nodeId}\n selected={selected}\n onSelect={handleSelect}\n rowRef={selected ? selectedRef : undefined}\n />\n );\n })}\n {thread.composer && thread.composer.textLength > 0 ? (\n <GhostComposer composer={thread.composer} />\n ) : null}\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ComposerAttachments } from "./ComposerAttachments.js";
|
|
2
|
+
import { ComposerPreview, ThreadListItemPreview, ThreadListPreview, ThreadPreview } from "./types.js";
|
|
3
|
+
import { ComposerFlags } from "./ComposerFlags.js";
|
|
4
|
+
import { ComposerQueue } from "./ComposerQueue.js";
|
|
5
|
+
import { ConversationList, conversationListHeader } from "./ConversationList.js";
|
|
6
|
+
import { ThreadDetails } from "./ThreadDetails.js";
|
|
7
|
+
import { Transcript, TranscriptHeader, messageNodeId } from "./Transcript.js";
|
|
8
|
+
import { parseComposerPreview, parseThreadListItemPreview, parseThreadListPreview, parseThreadPreview } from "./utils.js";
|
|
9
|
+
import { resolveSingleThread, resolveThreadForId } from "./resolve.js";
|
|
10
|
+
export { ComposerAttachments, ComposerFlags, type ComposerPreview, ComposerQueue, ConversationList, ThreadDetails, type ThreadListItemPreview, type ThreadListPreview, type ThreadPreview, Transcript, TranscriptHeader, conversationListHeader, messageNodeId, parseComposerPreview, parseThreadListItemPreview, parseThreadListPreview, parseThreadPreview, resolveSingleThread, resolveThreadForId };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { parseComposerPreview, parseThreadListItemPreview, parseThreadListPreview, parseThreadPreview } from "./utils.js";
|
|
2
|
+
import { ConversationList, conversationListHeader } from "./ConversationList.js";
|
|
3
|
+
import { ComposerAttachments } from "./ComposerAttachments.js";
|
|
4
|
+
import { ComposerFlags } from "./ComposerFlags.js";
|
|
5
|
+
import { ComposerQueue } from "./ComposerQueue.js";
|
|
6
|
+
import { ThreadDetails } from "./ThreadDetails.js";
|
|
7
|
+
import { Transcript, TranscriptHeader, messageNodeId } from "./Transcript.js";
|
|
8
|
+
import { resolveSingleThread, resolveThreadForId } from "./resolve.js";
|
|
9
|
+
export { ComposerAttachments, ComposerFlags, ComposerQueue, ConversationList, ThreadDetails, Transcript, TranscriptHeader, conversationListHeader, messageNodeId, parseComposerPreview, parseThreadListItemPreview, parseThreadListPreview, parseThreadPreview, resolveSingleThread, resolveThreadForId };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ThreadListPreview, ThreadPreview } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/views/thread/resolve.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Picks the thread to show for a selected conversation id, preferring a cached
|
|
6
|
+
* snapshot, then the live main thread, then the single-thread runtime state.
|
|
7
|
+
*/
|
|
8
|
+
declare const resolveThreadForId: (state: Record<string, unknown>, snapshots: Readonly<Record<string, unknown>> | undefined, threadId: string, threadList: ThreadListPreview | null) => ThreadPreview | null;
|
|
9
|
+
/** Picks the thread to show when the runtime exposes no conversation list. */
|
|
10
|
+
declare const resolveSingleThread: (state: Record<string, unknown>) => ThreadPreview | null;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { resolveSingleThread, resolveThreadForId };
|
|
13
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","names":[],"sources":["../../../src/views/thread/resolve.ts"],"mappings":";;;;;AAOA;;cAAa,kBAAA,GACX,KAAA,EAAO,MAAA,mBACP,SAAA,EAAW,QAAA,CAAS,MAAA,gCACpB,QAAA,UACA,UAAA,EAAY,iBAAA,YACX,aAAA;;cAeU,mBAAA,GACX,KAAA,EAAO,MAAA,sBACN,aAAa"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { parseThreadListPreview, parseThreadPreview } from "./utils.js";
|
|
2
|
+
//#region src/views/thread/resolve.ts
|
|
3
|
+
/**
|
|
4
|
+
* Picks the thread to show for a selected conversation id, preferring a cached
|
|
5
|
+
* snapshot, then the live main thread, then the single-thread runtime state.
|
|
6
|
+
*/
|
|
7
|
+
const resolveThreadForId = (state, snapshots, threadId, threadList) => {
|
|
8
|
+
const fromSnapshot = snapshots?.[threadId];
|
|
9
|
+
if (fromSnapshot) {
|
|
10
|
+
const parsed = parseThreadPreview(fromSnapshot);
|
|
11
|
+
if (parsed) return parsed;
|
|
12
|
+
}
|
|
13
|
+
if (threadList?.mainThreadId === threadId && threadList.main) return threadList.main;
|
|
14
|
+
const single = parseThreadPreview(state.thread);
|
|
15
|
+
if (single && threadList?.threadIds.length === 0) return single;
|
|
16
|
+
return null;
|
|
17
|
+
};
|
|
18
|
+
/** Picks the thread to show when the runtime exposes no conversation list. */
|
|
19
|
+
const resolveSingleThread = (state) => {
|
|
20
|
+
const single = parseThreadPreview(state.thread);
|
|
21
|
+
if (single && single.messages.length) return single;
|
|
22
|
+
const list = parseThreadListPreview(state.threads);
|
|
23
|
+
if (list?.main && list.main.messages.length) return list.main;
|
|
24
|
+
return single ?? list?.main ?? null;
|
|
25
|
+
};
|
|
26
|
+
//#endregion
|
|
27
|
+
export { resolveSingleThread, resolveThreadForId };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","names":["parseThreadListPreview","parseThreadPreview","ThreadListPreview","ThreadPreview","resolveThreadForId","state","Record","snapshots","Readonly","threadId","threadList","fromSnapshot","parsed","mainThreadId","main","single","thread","threadIds","length","resolveSingleThread","messages","list","threads"],"sources":["../../../src/views/thread/resolve.ts"],"sourcesContent":["import { parseThreadListPreview, parseThreadPreview } from \"./utils\";\nimport type { ThreadListPreview, ThreadPreview } from \"./types\";\n\n/**\n * Picks the thread to show for a selected conversation id, preferring a cached\n * snapshot, then the live main thread, then the single-thread runtime state.\n */\nexport const resolveThreadForId = (\n state: Record<string, unknown>,\n snapshots: Readonly<Record<string, unknown>> | undefined,\n threadId: string,\n threadList: ThreadListPreview | null,\n): ThreadPreview | null => {\n const fromSnapshot = snapshots?.[threadId];\n if (fromSnapshot) {\n const parsed = parseThreadPreview(fromSnapshot);\n if (parsed) return parsed;\n }\n if (threadList?.mainThreadId === threadId && threadList.main) {\n return threadList.main;\n }\n const single = parseThreadPreview(state.thread);\n if (single && threadList?.threadIds.length === 0) return single;\n return null;\n};\n\n/** Picks the thread to show when the runtime exposes no conversation list. */\nexport const resolveSingleThread = (\n state: Record<string, unknown>,\n): ThreadPreview | null => {\n const single = parseThreadPreview(state.thread);\n if (single && single.messages.length) return single;\n const list = parseThreadListPreview(state.threads);\n if (list?.main && list.main.messages.length) return list.main;\n return single ?? list?.main ?? null;\n};\n"],"mappings":";;;;;;AAOA,MAAaI,sBACXC,OACAE,WACAE,UACAC,eACyB;CACzB,MAAMC,eAAeJ,YAAYE;CACjC,IAAIE,cAAc;EAChB,MAAMC,SAASX,mBAAmBU,YAAY;EAC9C,IAAIC,QAAQ,OAAOA;CACrB;CACA,IAAIF,YAAYG,iBAAiBJ,YAAYC,WAAWI,MACtD,OAAOJ,WAAWI;CAEpB,MAAMC,SAASd,mBAAmBI,MAAMW,MAAM;CAC9C,IAAID,UAAUL,YAAYO,UAAUC,WAAW,GAAG,OAAOH;CACzD,OAAO;AACT;;AAGA,MAAaI,uBACXd,UACyB;CACzB,MAAMU,SAASd,mBAAmBI,MAAMW,MAAM;CAC9C,IAAID,UAAUA,OAAOK,SAASF,QAAQ,OAAOH;CAC7C,MAAMM,OAAOrB,uBAAuBK,MAAMiB,OAAO;CACjD,IAAID,MAAMP,QAAQO,KAAKP,KAAKM,SAASF,QAAQ,OAAOG,KAAKP;CACzD,OAAOC,UAAUM,MAAMP,QAAQ;AACjC"}
|