@drscrewdriver/dsh-better-display 0.3.3-fork.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/CHANGELOG.md +259 -0
- package/DESIGN.md +72 -0
- package/LICENSE +24 -0
- package/README.en.md +55 -0
- package/README.md +55 -0
- package/THIRD_PARTY_NOTICES.md +65 -0
- package/compat/harness-rc2.json +99 -0
- package/cordis.patch.yml +5 -0
- package/cordis.yml +4 -0
- package/docs/official-rendering-bridge.md +65 -0
- package/dshx.yml +5 -0
- package/lib/client.js +49292 -0
- package/lib/client.js.map +1 -0
- package/lib/dsh-better-display.js +101 -0
- package/lib/types/client/Blocks.d.ts +49 -0
- package/lib/types/client/Blocks.d.ts.map +1 -0
- package/lib/types/client/Blocks.js +143 -0
- package/lib/types/client/Blocks.js.map +1 -0
- package/lib/types/client/ChoreographedFlow.d.ts +22 -0
- package/lib/types/client/ChoreographedFlow.d.ts.map +1 -0
- package/lib/types/client/ChoreographedFlow.js +218 -0
- package/lib/types/client/ChoreographedFlow.js.map +1 -0
- package/lib/types/client/ClosedProcessSummary.d.ts +9 -0
- package/lib/types/client/ClosedProcessSummary.d.ts.map +1 -0
- package/lib/types/client/ClosedProcessSummary.js +16 -0
- package/lib/types/client/ClosedProcessSummary.js.map +1 -0
- package/lib/types/client/DiffPanel.d.ts +13 -0
- package/lib/types/client/DiffPanel.d.ts.map +1 -0
- package/lib/types/client/DiffPanel.js +115 -0
- package/lib/types/client/DiffPanel.js.map +1 -0
- package/lib/types/client/LiveFold.d.ts +10 -0
- package/lib/types/client/LiveFold.d.ts.map +1 -0
- package/lib/types/client/LiveFold.js +39 -0
- package/lib/types/client/LiveFold.js.map +1 -0
- package/lib/types/client/McpAppFrame.d.ts +32 -0
- package/lib/types/client/McpAppFrame.d.ts.map +1 -0
- package/lib/types/client/McpAppFrame.js +193 -0
- package/lib/types/client/McpAppFrame.js.map +1 -0
- package/lib/types/client/OfficialContent.d.ts +25 -0
- package/lib/types/client/OfficialContent.d.ts.map +1 -0
- package/lib/types/client/OfficialContent.js +53 -0
- package/lib/types/client/OfficialContent.js.map +1 -0
- package/lib/types/client/Reader.d.ts +3 -0
- package/lib/types/client/Reader.d.ts.map +1 -0
- package/lib/types/client/Reader.js +603 -0
- package/lib/types/client/Reader.js.map +1 -0
- package/lib/types/client/ReasoningCard.d.ts +11 -0
- package/lib/types/client/ReasoningCard.d.ts.map +1 -0
- package/lib/types/client/ReasoningCard.js +322 -0
- package/lib/types/client/ReasoningCard.js.map +1 -0
- package/lib/types/client/SettingsSection.d.ts +37 -0
- package/lib/types/client/SettingsSection.d.ts.map +1 -0
- package/lib/types/client/SettingsSection.js +63 -0
- package/lib/types/client/SettingsSection.js.map +1 -0
- package/lib/types/client/StickyLane.d.ts +8 -0
- package/lib/types/client/StickyLane.d.ts.map +1 -0
- package/lib/types/client/StickyLane.js +39 -0
- package/lib/types/client/StickyLane.js.map +1 -0
- package/lib/types/client/TimelineRail.d.ts +10 -0
- package/lib/types/client/TimelineRail.d.ts.map +1 -0
- package/lib/types/client/TimelineRail.js +168 -0
- package/lib/types/client/TimelineRail.js.map +1 -0
- package/lib/types/client/ToolActivity.d.ts +17 -0
- package/lib/types/client/ToolActivity.d.ts.map +1 -0
- package/lib/types/client/ToolActivity.js +244 -0
- package/lib/types/client/ToolActivity.js.map +1 -0
- package/lib/types/client/TurnMetrics.d.ts +11 -0
- package/lib/types/client/TurnMetrics.d.ts.map +1 -0
- package/lib/types/client/TurnMetrics.js +44 -0
- package/lib/types/client/TurnMetrics.js.map +1 -0
- package/lib/types/client/WaitClock.d.ts +16 -0
- package/lib/types/client/WaitClock.d.ts.map +1 -0
- package/lib/types/client/WaitClock.js +29 -0
- package/lib/types/client/WaitClock.js.map +1 -0
- package/lib/types/client/WaitingClock.d.ts +15 -0
- package/lib/types/client/WaitingClock.d.ts.map +1 -0
- package/lib/types/client/WaitingClock.js +30 -0
- package/lib/types/client/WaitingClock.js.map +1 -0
- package/lib/types/client/WaitingStatus.d.ts +6 -0
- package/lib/types/client/WaitingStatus.d.ts.map +1 -0
- package/lib/types/client/WaitingStatus.js +9 -0
- package/lib/types/client/WaitingStatus.js.map +1 -0
- package/lib/types/client/conversation-scroll.d.ts +19 -0
- package/lib/types/client/conversation-scroll.d.ts.map +1 -0
- package/lib/types/client/conversation-scroll.js +25 -0
- package/lib/types/client/conversation-scroll.js.map +1 -0
- package/lib/types/client/deliverables.d.ts +24 -0
- package/lib/types/client/deliverables.d.ts.map +1 -0
- package/lib/types/client/deliverables.js +104 -0
- package/lib/types/client/deliverables.js.map +1 -0
- package/lib/types/client/entry-policy.d.ts +10 -0
- package/lib/types/client/entry-policy.d.ts.map +1 -0
- package/lib/types/client/entry-policy.js +24 -0
- package/lib/types/client/entry-policy.js.map +1 -0
- package/lib/types/client/entry.d.ts +4 -0
- package/lib/types/client/entry.d.ts.map +1 -0
- package/lib/types/client/entry.js +34 -0
- package/lib/types/client/entry.js.map +1 -0
- package/lib/types/client/fold-choreography.d.ts +40 -0
- package/lib/types/client/fold-choreography.d.ts.map +1 -0
- package/lib/types/client/fold-choreography.js +48 -0
- package/lib/types/client/fold-choreography.js.map +1 -0
- package/lib/types/client/fold-intensity.d.ts +11 -0
- package/lib/types/client/fold-intensity.d.ts.map +1 -0
- package/lib/types/client/fold-intensity.js +32 -0
- package/lib/types/client/fold-intensity.js.map +1 -0
- package/lib/types/client/index.d.ts +7 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/index.js +195 -0
- package/lib/types/client/index.js.map +1 -0
- package/lib/types/client/live-turn.d.ts +58 -0
- package/lib/types/client/live-turn.d.ts.map +1 -0
- package/lib/types/client/live-turn.js +190 -0
- package/lib/types/client/live-turn.js.map +1 -0
- package/lib/types/client/markdown/MarkdownText.d.ts +41 -0
- package/lib/types/client/markdown/MarkdownText.d.ts.map +1 -0
- package/lib/types/client/markdown/MarkdownText.js +178 -0
- package/lib/types/client/markdown/MarkdownText.js.map +1 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.d.ts +9 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.d.ts.map +1 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.js +73 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.js.map +1 -0
- package/lib/types/client/markdown/incremental.d.ts +69 -0
- package/lib/types/client/markdown/incremental.d.ts.map +1 -0
- package/lib/types/client/markdown/incremental.js +108 -0
- package/lib/types/client/markdown/incremental.js.map +1 -0
- package/lib/types/client/markdown/katex.d.ts +27 -0
- package/lib/types/client/markdown/katex.d.ts.map +1 -0
- package/lib/types/client/markdown/katex.js +88 -0
- package/lib/types/client/markdown/katex.js.map +1 -0
- package/lib/types/client/markdown/mathCompatibility.d.ts +11 -0
- package/lib/types/client/markdown/mathCompatibility.d.ts.map +1 -0
- package/lib/types/client/markdown/mathCompatibility.js +293 -0
- package/lib/types/client/markdown/mathCompatibility.js.map +1 -0
- package/lib/types/client/markdown/parse.d.ts +25 -0
- package/lib/types/client/markdown/parse.d.ts.map +1 -0
- package/lib/types/client/markdown/parse.js +42 -0
- package/lib/types/client/markdown/parse.js.map +1 -0
- package/lib/types/client/markdown/render.d.ts +121 -0
- package/lib/types/client/markdown/render.d.ts.map +1 -0
- package/lib/types/client/markdown/render.js +452 -0
- package/lib/types/client/markdown/render.js.map +1 -0
- package/lib/types/client/mcp-app.d.ts +50 -0
- package/lib/types/client/mcp-app.d.ts.map +1 -0
- package/lib/types/client/mcp-app.js +328 -0
- package/lib/types/client/mcp-app.js.map +1 -0
- package/lib/types/client/message-chrome.d.ts +19 -0
- package/lib/types/client/message-chrome.d.ts.map +1 -0
- package/lib/types/client/message-chrome.js +42 -0
- package/lib/types/client/message-chrome.js.map +1 -0
- package/lib/types/client/motion.d.ts +38 -0
- package/lib/types/client/motion.d.ts.map +1 -0
- package/lib/types/client/motion.js +453 -0
- package/lib/types/client/motion.js.map +1 -0
- package/lib/types/client/native/ContextBody.d.ts +130 -0
- package/lib/types/client/native/ContextBody.d.ts.map +1 -0
- package/lib/types/client/native/ContextBody.js +398 -0
- package/lib/types/client/native/ContextBody.js.map +1 -0
- package/lib/types/client/native/ContextInjectionRow.d.ts +35 -0
- package/lib/types/client/native/ContextInjectionRow.d.ts.map +1 -0
- package/lib/types/client/native/ContextInjectionRow.js +42 -0
- package/lib/types/client/native/ContextInjectionRow.js.map +1 -0
- package/lib/types/client/native/ReferenceIcon.d.ts +16 -0
- package/lib/types/client/native/ReferenceIcon.d.ts.map +1 -0
- package/lib/types/client/native/ReferenceIcon.js +16 -0
- package/lib/types/client/native/ReferenceIcon.js.map +1 -0
- package/lib/types/client/native/tool-call-model.d.ts +58 -0
- package/lib/types/client/native/tool-call-model.d.ts.map +1 -0
- package/lib/types/client/native/tool-call-model.js +219 -0
- package/lib/types/client/native/tool-call-model.js.map +1 -0
- package/lib/types/client/native/tool-update.d.ts +23 -0
- package/lib/types/client/native/tool-update.d.ts.map +1 -0
- package/lib/types/client/native/tool-update.js +22 -0
- package/lib/types/client/native/tool-update.js.map +1 -0
- package/lib/types/client/official-slots.d.ts +71 -0
- package/lib/types/client/official-slots.d.ts.map +1 -0
- package/lib/types/client/official-slots.js +183 -0
- package/lib/types/client/official-slots.js.map +1 -0
- package/lib/types/client/open-file.d.ts +29 -0
- package/lib/types/client/open-file.d.ts.map +1 -0
- package/lib/types/client/open-file.js +71 -0
- package/lib/types/client/open-file.js.map +1 -0
- package/lib/types/client/pending-submission.d.ts +28 -0
- package/lib/types/client/pending-submission.d.ts.map +1 -0
- package/lib/types/client/pending-submission.js +28 -0
- package/lib/types/client/pending-submission.js.map +1 -0
- package/lib/types/client/platform-media.d.ts +6 -0
- package/lib/types/client/platform-media.d.ts.map +1 -0
- package/lib/types/client/platform-media.js +18 -0
- package/lib/types/client/platform-media.js.map +1 -0
- package/lib/types/client/primitive-labels.d.ts +10 -0
- package/lib/types/client/primitive-labels.d.ts.map +1 -0
- package/lib/types/client/primitive-labels.js +38 -0
- package/lib/types/client/primitive-labels.js.map +1 -0
- package/lib/types/client/projection.d.ts +41 -0
- package/lib/types/client/projection.d.ts.map +1 -0
- package/lib/types/client/projection.js +112 -0
- package/lib/types/client/projection.js.map +1 -0
- package/lib/types/client/reasoning-follow.d.ts +10 -0
- package/lib/types/client/reasoning-follow.d.ts.map +1 -0
- package/lib/types/client/reasoning-follow.js +21 -0
- package/lib/types/client/reasoning-follow.js.map +1 -0
- package/lib/types/client/resource-address.d.ts +3 -0
- package/lib/types/client/resource-address.d.ts.map +1 -0
- package/lib/types/client/resource-address.js +33 -0
- package/lib/types/client/resource-address.js.map +1 -0
- package/lib/types/client/settings-copy.d.ts +7 -0
- package/lib/types/client/settings-copy.d.ts.map +1 -0
- package/lib/types/client/settings-copy.js +53 -0
- package/lib/types/client/settings-copy.js.map +1 -0
- package/lib/types/client/settings-slots.d.ts +23 -0
- package/lib/types/client/settings-slots.d.ts.map +1 -0
- package/lib/types/client/settings-slots.js +2 -0
- package/lib/types/client/settings-slots.js.map +1 -0
- package/lib/types/client/settings.d.ts +4 -0
- package/lib/types/client/settings.d.ts.map +1 -0
- package/lib/types/client/settings.js +60 -0
- package/lib/types/client/settings.js.map +1 -0
- package/lib/types/client/skill-status.d.ts +25 -0
- package/lib/types/client/skill-status.d.ts.map +1 -0
- package/lib/types/client/skill-status.js +44 -0
- package/lib/types/client/skill-status.js.map +1 -0
- package/lib/types/client/store.d.ts +35 -0
- package/lib/types/client/store.d.ts.map +1 -0
- package/lib/types/client/store.js +37 -0
- package/lib/types/client/store.js.map +1 -0
- package/lib/types/client/stream-buffer.d.ts +37 -0
- package/lib/types/client/stream-buffer.d.ts.map +1 -0
- package/lib/types/client/stream-buffer.js +150 -0
- package/lib/types/client/stream-buffer.js.map +1 -0
- package/lib/types/client/streaming.d.ts +18 -0
- package/lib/types/client/streaming.d.ts.map +1 -0
- package/lib/types/client/streaming.js +84 -0
- package/lib/types/client/streaming.js.map +1 -0
- package/lib/types/client/timeline.d.ts +26 -0
- package/lib/types/client/timeline.d.ts.map +1 -0
- package/lib/types/client/timeline.js +48 -0
- package/lib/types/client/timeline.js.map +1 -0
- package/lib/types/client/tool-activity.d.ts +98 -0
- package/lib/types/client/tool-activity.d.ts.map +1 -0
- package/lib/types/client/tool-activity.js +301 -0
- package/lib/types/client/tool-activity.js.map +1 -0
- package/lib/types/client/types.d.ts +91 -0
- package/lib/types/client/types.d.ts.map +1 -0
- package/lib/types/client/types.js +2 -0
- package/lib/types/client/types.js.map +1 -0
- package/lib/types/client/waiting-clock.d.ts +49 -0
- package/lib/types/client/waiting-clock.d.ts.map +1 -0
- package/lib/types/client/waiting-clock.js +80 -0
- package/lib/types/client/waiting-clock.js.map +1 -0
- package/lib/types/client/word-motion.d.ts +16 -0
- package/lib/types/client/word-motion.d.ts.map +1 -0
- package/lib/types/client/word-motion.js +90 -0
- package/lib/types/client/word-motion.js.map +1 -0
- package/lib/types/client/word-timeline.d.ts +32 -0
- package/lib/types/client/word-timeline.d.ts.map +1 -0
- package/lib/types/client/word-timeline.js +119 -0
- package/lib/types/client/word-timeline.js.map +1 -0
- package/lib/types/dsh-better-display.d.ts +17 -0
- package/lib/types/dsh-better-display.d.ts.map +1 -0
- package/lib/types/dsh-better-display.js +93 -0
- package/lib/types/dsh-better-display.js.map +1 -0
- package/lib/types/skill-roots.d.ts +22 -0
- package/lib/types/skill-roots.d.ts.map +1 -0
- package/lib/types/skill-roots.js +126 -0
- package/lib/types/skill-roots.js.map +1 -0
- package/lib/types/skill-status.d.ts +36 -0
- package/lib/types/skill-status.d.ts.map +1 -0
- package/lib/types/skill-status.js +51 -0
- package/lib/types/skill-status.js.map +1 -0
- package/package.json +133 -0
- package/scripts/build-motion-fixture.mjs +26 -0
- package/scripts/check-harness-compat.mjs +71 -0
- package/scripts/link-harness-dependencies.mjs +54 -0
- package/scripts/verify-auto-fold.mjs +114 -0
- package/scripts/verify-official-bridge.mjs +121 -0
- package/scripts/verify-tool-shimmer.mjs +62 -0
- package/skills/generative-mcpapps/SKILL.md +47 -0
- package/skills/generative-mcpapps/examples/interactive_quiz.html +153 -0
- package/skills/generative-mcpapps/references/html_boilerplate.md +122 -0
- package/skills/generative-mcpapps/references/sep1865_protocol.md +54 -0
- package/src/client/Blocks.tsx +213 -0
- package/src/client/ChoreographedFlow.tsx +232 -0
- package/src/client/ClosedProcessSummary.tsx +23 -0
- package/src/client/DiffPanel.tsx +124 -0
- package/src/client/LiveFold.tsx +43 -0
- package/src/client/McpAppFrame.module.css +210 -0
- package/src/client/McpAppFrame.tsx +317 -0
- package/src/client/OfficialContent.tsx +69 -0
- package/src/client/Reader.module.css +692 -0
- package/src/client/Reader.tsx +878 -0
- package/src/client/ReasoningCard.tsx +306 -0
- package/src/client/SettingsSection.module.css +184 -0
- package/src/client/SettingsSection.tsx +194 -0
- package/src/client/StickyLane.tsx +34 -0
- package/src/client/TimelineRail.module.css +170 -0
- package/src/client/TimelineRail.tsx +262 -0
- package/src/client/ToolActivity.tsx +274 -0
- package/src/client/TurnMetrics.module.css +139 -0
- package/src/client/TurnMetrics.tsx +160 -0
- package/src/client/WaitClock.tsx +33 -0
- package/src/client/WaitingStatus.tsx +13 -0
- package/src/client/conversation-scroll.ts +28 -0
- package/src/client/deliverables.ts +122 -0
- package/src/client/entry-policy.ts +20 -0
- package/src/client/entry.tsx +40 -0
- package/src/client/fold-choreography.ts +55 -0
- package/src/client/fold-intensity.ts +36 -0
- package/src/client/index.tsx +222 -0
- package/src/client/live-turn.ts +198 -0
- package/src/client/markdown/MarkdownText.module.css +304 -0
- package/src/client/markdown/MarkdownText.tsx +195 -0
- package/src/client/markdown/cjkFriendlyStrong.ts +84 -0
- package/src/client/markdown/incremental.ts +131 -0
- package/src/client/markdown/katex.tsx +91 -0
- package/src/client/markdown/mathCompatibility.ts +350 -0
- package/src/client/markdown/parse.ts +45 -0
- package/src/client/markdown/render.tsx +647 -0
- package/src/client/markdown/upstream.json +14 -0
- package/src/client/mcp-app.ts +323 -0
- package/src/client/message-chrome.ts +47 -0
- package/src/client/motion.tsx +410 -0
- package/src/client/native/ContextBody.module.css +161 -0
- package/src/client/native/ContextBody.tsx +591 -0
- package/src/client/native/ContextInjectionRow.module.css +66 -0
- package/src/client/native/ContextInjectionRow.tsx +106 -0
- package/src/client/native/ReferenceIcon.tsx +35 -0
- package/src/client/native/tool-call-model.ts +248 -0
- package/src/client/native/tool-update.ts +32 -0
- package/src/client/native/upstream.json +41 -0
- package/src/client/official-slots.tsx +211 -0
- package/src/client/open-file.ts +94 -0
- package/src/client/pending-submission.ts +49 -0
- package/src/client/platform-media.ts +17 -0
- package/src/client/primitive-labels.ts +54 -0
- package/src/client/projection.ts +118 -0
- package/src/client/reasoning-follow.ts +28 -0
- package/src/client/settings-copy.ts +80 -0
- package/src/client/settings-slots.ts +20 -0
- package/src/client/settings.tsx +73 -0
- package/src/client/skill-status.ts +78 -0
- package/src/client/store.ts +75 -0
- package/src/client/stream-buffer.ts +136 -0
- package/src/client/streaming.tsx +70 -0
- package/src/client/style.d.ts +4 -0
- package/src/client/timeline.ts +77 -0
- package/src/client/tool-activity.ts +298 -0
- package/src/client/types.ts +89 -0
- package/src/client/waiting-clock.ts +83 -0
- package/src/client/word-motion.tsx +92 -0
- package/src/client/word-timeline.ts +113 -0
- package/src/dsh-better-display.ts +108 -0
- package/src/skill-roots.ts +138 -0
- package/src/skill-status.ts +81 -0
- package/tests/browser-auto-fold.tsx +64 -0
- package/tests/browser-closed-gap.tsx +20 -0
- package/tests/browser-motion.tsx +65 -0
- package/tests/browser-official-bridge.tsx +152 -0
- package/tests/browser-sticky-lanes.tsx +22 -0
- package/tests/browser-waiting-clock.tsx +14 -0
- package/tests/chat-flow-hook.test.ts +66 -0
- package/tests/cloud-gate.test.ts +34 -0
- package/tests/context-tool-update.test.ts +33 -0
- package/tests/conversation-scroll.test.ts +47 -0
- package/tests/deliverables.test.ts +128 -0
- package/tests/entry.test.ts +42 -0
- package/tests/fixtures/maid-composer-hide.html +31 -0
- package/tests/fold-choreography.test.ts +54 -0
- package/tests/fold-intensity.test.ts +94 -0
- package/tests/footer-precedence.test.ts +129 -0
- package/tests/history-word-regression.test.ts +16 -0
- package/tests/live-turn.test.ts +218 -0
- package/tests/mcp-apps.test.ts +157 -0
- package/tests/message-chrome.test.ts +29 -0
- package/tests/official-slots.test.ts +112 -0
- package/tests/open-file.test.ts +114 -0
- package/tests/pending-submission.test.ts +45 -0
- package/tests/platform-media.test.ts +23 -0
- package/tests/projection.test.ts +184 -0
- package/tests/reasoning-follow.test.ts +34 -0
- package/tests/settings-copy.test.ts +63 -0
- package/tests/skill-status.test.ts +137 -0
- package/tests/stock-install.test.ts +58 -0
- package/tests/stream-buffer.test.ts +102 -0
- package/tests/timeline.test.ts +59 -0
- package/tests/tool-diff.test.ts +57 -0
- package/tests/waiting-clock.test.ts +83 -0
- package/tests/word-timeline.test.ts +146 -0
- package/tsconfig.json +11 -0
- package/tsdown.config.ts +51 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge host turn outline with loaded navigation items and turn deliverables.
|
|
3
|
+
* Guarantees strictly ascending turn order and dedupes entries.
|
|
4
|
+
*/
|
|
5
|
+
export function mergeTimelineItems(loaded, outline, turnsWithDeliverables) {
|
|
6
|
+
const byTurn = new Map();
|
|
7
|
+
// 1. Process host whole-log outline (if available)
|
|
8
|
+
if (Array.isArray(outline)) {
|
|
9
|
+
for (const raw of outline) {
|
|
10
|
+
if (typeof raw !== 'object' || raw === null)
|
|
11
|
+
continue;
|
|
12
|
+
const entry = raw;
|
|
13
|
+
if (typeof entry.turn !== 'number' || !Number.isSafeInteger(entry.turn) || entry.turn < 0)
|
|
14
|
+
continue;
|
|
15
|
+
if (typeof entry.seq !== 'number' || !Number.isSafeInteger(entry.seq) || entry.seq < 0)
|
|
16
|
+
continue;
|
|
17
|
+
byTurn.set(entry.turn, {
|
|
18
|
+
turn: entry.turn,
|
|
19
|
+
prompt: typeof entry.prompt === 'string' ? entry.prompt.trim() : '',
|
|
20
|
+
response: typeof entry.response === 'string' ? entry.response.trim() : '',
|
|
21
|
+
hasDeliverables: turnsWithDeliverables?.has(entry.turn) ?? false,
|
|
22
|
+
anchor: { kind: 'unloaded', seq: entry.seq },
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// 2. Overlay loaded items (taking loaded anchor, preferring freshest previews)
|
|
27
|
+
if (Array.isArray(loaded)) {
|
|
28
|
+
for (const item of loaded) {
|
|
29
|
+
if (typeof item.turn !== 'number')
|
|
30
|
+
continue;
|
|
31
|
+
const preview = byTurn.get(item.turn);
|
|
32
|
+
const prompt = item.prompt?.trim() || preview?.prompt || '';
|
|
33
|
+
const response = item.response?.trim() || preview?.response || '';
|
|
34
|
+
const hasDeliverables = turnsWithDeliverables?.has(item.turn) ?? preview?.hasDeliverables ?? false;
|
|
35
|
+
byTurn.set(item.turn, {
|
|
36
|
+
turn: item.turn,
|
|
37
|
+
prompt,
|
|
38
|
+
response,
|
|
39
|
+
hasDeliverables,
|
|
40
|
+
anchor: { kind: 'loaded', key: item.anchorKey },
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (byTurn.size === 0)
|
|
45
|
+
return [];
|
|
46
|
+
return [...byTurn.values()].sort((a, b) => a.turn - b.turn);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../../src/client/timeline.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAuD,EACvD,OAAgB,EAChB,qBAA2C;IAE3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE/C,mDAAmD;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;gBAAE,SAAS;YACtD,MAAM,KAAK,GAAG,GAAsB,CAAC;YACrC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;gBAAE,SAAS;YACpG,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC;gBAAE,SAAS;YAEjG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;gBACrB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;gBACnE,QAAQ,EAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;gBACzE,eAAe,EAAE,qBAAqB,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK;gBAChE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;aAC7C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;YAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;YAClE,MAAM,eAAe,GAAG,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,eAAe,IAAI,KAAK,CAAC;YAEnG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM;gBACN,QAAQ;gBACR,eAAe;gBACf,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE;aAChD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { AssistantBlock, ToolCallBlock, TurnLocation } from '@deepseek-ai/dsh-client-ui-conversation/client';
|
|
2
|
+
import type { ChatConversationViewNode } from '@deepseek-ai/dsh-client-ui-chat/client';
|
|
3
|
+
import type { ReaderGroup } from './projection.js';
|
|
4
|
+
export type ToolDraft = Extract<AssistantBlock, {
|
|
5
|
+
kind: 'tool-call';
|
|
6
|
+
}>;
|
|
7
|
+
export type ToolPhase = 'preparing' | 'running' | 'returned' | 'succeeded' | 'failed' | 'interrupted';
|
|
8
|
+
export type ToolCategory = 'write' | 'read' | 'terminal' | 'search' | 'web' | 'code' | 'other';
|
|
9
|
+
export interface ToolActivityEntry {
|
|
10
|
+
kind: 'tool';
|
|
11
|
+
key: string;
|
|
12
|
+
callId: string;
|
|
13
|
+
step: number;
|
|
14
|
+
order: number;
|
|
15
|
+
draft?: ToolDraft;
|
|
16
|
+
block?: ToolCallBlock;
|
|
17
|
+
}
|
|
18
|
+
export type ReaderFlowEntry = ToolActivityEntry | {
|
|
19
|
+
kind: 'node';
|
|
20
|
+
key: string;
|
|
21
|
+
nodeKey: string;
|
|
22
|
+
order: number;
|
|
23
|
+
};
|
|
24
|
+
/** Public Step data includes tool-only model output before a chat node exists. */
|
|
25
|
+
export declare function readerFlow(group: ReaderGroup, turn: TurnLocation | undefined, get: (key: string) => ChatConversationViewNode | undefined): ReaderFlowEntry[];
|
|
26
|
+
export declare function objectValue(value: unknown): Record<string, unknown> | null;
|
|
27
|
+
export declare function stringValue(record: Record<string, unknown> | null, ...keys: string[]): string | undefined;
|
|
28
|
+
/** Read only top-level JSON string values, including an unfinished final string.
|
|
29
|
+
* This never executes input or mistakes escaped/nested content for a path field. */
|
|
30
|
+
export declare function inputFields(raw: string): Record<string, unknown>;
|
|
31
|
+
export declare function toolIdentity(entry: Pick<ToolActivityEntry, 'block' | 'draft'>): {
|
|
32
|
+
name: string;
|
|
33
|
+
raw: string;
|
|
34
|
+
};
|
|
35
|
+
export declare function executionFacts(block: ToolCallBlock | undefined): {
|
|
36
|
+
exitCode?: number;
|
|
37
|
+
signal?: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Added/removed line counts for a mutation call, or null when there is no diff
|
|
41
|
+
* to show.
|
|
42
|
+
*
|
|
43
|
+
* The result metadata is preferred when the host attaches one. Not every host
|
|
44
|
+
* build does — a session log may carry no hunk payload at all — so the call's own
|
|
45
|
+
* arguments are read as the fallback, which is also what the official row uses
|
|
46
|
+
* while a write is still pending. A call whose arguments hold none of these
|
|
47
|
+
* fields (a read, a listing) yields null and shows no badge.
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* One changed file, in the exact shape the official `DiffBlock` primitive takes:
|
|
51
|
+
* `oldText` is null for a pure insertion, and `newText` is always a string. Line
|
|
52
|
+
* counts are derived from these two sides, never stored alongside them.
|
|
53
|
+
*/
|
|
54
|
+
export interface DiffHunk {
|
|
55
|
+
path: string;
|
|
56
|
+
oldText: string | null;
|
|
57
|
+
newText: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The changed files of a mutation call.
|
|
61
|
+
*
|
|
62
|
+
* Result metadata is preferred when the host attaches it. Not every host build
|
|
63
|
+
* does, so the call's own arguments are the fallback — the same source the
|
|
64
|
+
* official row reads while a write is still pending. A call whose arguments hold
|
|
65
|
+
* none of these fields (a read, a listing) yields nothing and shows no counts.
|
|
66
|
+
*/
|
|
67
|
+
/** Only these tools change a file, so only these may fall back to their arguments. */
|
|
68
|
+
export declare const DIFF_FALLBACK_TOOLS: readonly ["write", "edit", "str_replace_editor"];
|
|
69
|
+
export declare function callDiffHunks(block: ToolCallBlock | undefined, args?: Record<string, unknown>, name?: string): DiffHunk[];
|
|
70
|
+
/** Added/removed line counts for one call, or null when there is nothing to show. */
|
|
71
|
+
export declare function diffTotals(block: ToolCallBlock | undefined, args?: Record<string, unknown>, name?: string): {
|
|
72
|
+
added: number;
|
|
73
|
+
removed: number;
|
|
74
|
+
} | null;
|
|
75
|
+
/** Counts the lines on each side, under the same rule the official block uses. */
|
|
76
|
+
export declare function diffLineTotals(hunks: readonly DiffHunk[]): {
|
|
77
|
+
added: number;
|
|
78
|
+
removed: number;
|
|
79
|
+
};
|
|
80
|
+
/** Every changed file across a folded run of steps, in the order they ran. */
|
|
81
|
+
export declare function foldDiffHunks(steps: readonly {
|
|
82
|
+
kind: string;
|
|
83
|
+
entry?: ToolActivityEntry;
|
|
84
|
+
}[]): DiffHunk[];
|
|
85
|
+
export declare function activityPhase(entry: Pick<ToolActivityEntry, 'block' | 'draft'>, turnClosed?: boolean): ToolPhase;
|
|
86
|
+
export declare function activitySummary(entry: Pick<ToolActivityEntry, 'block' | 'draft'>): {
|
|
87
|
+
name: string;
|
|
88
|
+
raw: string;
|
|
89
|
+
args: Record<string, unknown>;
|
|
90
|
+
category: ToolCategory;
|
|
91
|
+
title: string;
|
|
92
|
+
target: string | undefined;
|
|
93
|
+
command: string | undefined;
|
|
94
|
+
cwd: string | undefined;
|
|
95
|
+
content: string | undefined;
|
|
96
|
+
};
|
|
97
|
+
export declare function preparingLabel(name: string): string;
|
|
98
|
+
//# sourceMappingURL=tool-activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-activity.d.ts","sourceRoot":"","sources":["../../../src/client/tool-activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/** Public Step data includes tool-only model output before a chat node exists. */
|
|
2
|
+
export function readerFlow(group, turn, get) {
|
|
3
|
+
const flow = [];
|
|
4
|
+
const calls = new Map();
|
|
5
|
+
const assistantOrder = new Map();
|
|
6
|
+
for (const key of group.keys) {
|
|
7
|
+
const node = get(key);
|
|
8
|
+
if (!node || node.visibility === 'hidden')
|
|
9
|
+
continue;
|
|
10
|
+
const step = node.location.kind === 'step' ? node.location.step.step : 0;
|
|
11
|
+
if (node.kind === 'tool-call') {
|
|
12
|
+
const block = node.data.root;
|
|
13
|
+
calls.set(block.callId, { kind: 'tool', key: `reader-tool:${block.callId}`, callId: block.callId, step, block, order: node.anchorSeq });
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
flow.push({ kind: 'node', key, nodeKey: key, order: node.anchorSeq });
|
|
17
|
+
if (node.kind === 'assistant-step')
|
|
18
|
+
assistantOrder.set(step, node.anchorSeq);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
for (const step of turn?.steps ?? []) {
|
|
22
|
+
const data = step.data.get('assistant-step');
|
|
23
|
+
let index = 0;
|
|
24
|
+
for (const draft of data?.blocks ?? []) {
|
|
25
|
+
if (draft.kind !== 'tool-call' || !draft.callId)
|
|
26
|
+
continue;
|
|
27
|
+
const previous = calls.get(draft.callId);
|
|
28
|
+
calls.set(draft.callId, previous ? { ...previous, draft } : {
|
|
29
|
+
kind: 'tool', key: `reader-tool:${draft.callId}`, callId: draft.callId, step: step.step, draft,
|
|
30
|
+
order: (assistantOrder.get(step.step) ?? step.start?.seq ?? 0) + .01 + index++ / 10000,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
flow.push(...calls.values());
|
|
35
|
+
return flow.sort((left, right) => left.order - right.order);
|
|
36
|
+
}
|
|
37
|
+
export function objectValue(value) {
|
|
38
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : null;
|
|
39
|
+
}
|
|
40
|
+
export function stringValue(record, ...keys) {
|
|
41
|
+
for (const key of keys)
|
|
42
|
+
if (typeof record?.[key] === 'string' && record[key])
|
|
43
|
+
return record[key];
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
/** Read only top-level JSON string values, including an unfinished final string.
|
|
47
|
+
* This never executes input or mistakes escaped/nested content for a path field. */
|
|
48
|
+
export function inputFields(raw) {
|
|
49
|
+
try {
|
|
50
|
+
return objectValue(JSON.parse(raw)) ?? {};
|
|
51
|
+
}
|
|
52
|
+
catch { /* an in-flight argument is normally incomplete */ }
|
|
53
|
+
const fields = Object.create(null);
|
|
54
|
+
const prefix = raw.slice(0, 262144);
|
|
55
|
+
let depth = 0;
|
|
56
|
+
let key;
|
|
57
|
+
for (let index = 0; index < prefix.length; index++) {
|
|
58
|
+
const char = prefix[index];
|
|
59
|
+
if (char === '{' || char === '[') {
|
|
60
|
+
depth++;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (char === '}' || char === ']') {
|
|
64
|
+
depth--;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (char !== '"')
|
|
68
|
+
continue;
|
|
69
|
+
const start = index;
|
|
70
|
+
let closed = false;
|
|
71
|
+
for (index++; index < prefix.length; index++) {
|
|
72
|
+
if (prefix[index] === '\\') {
|
|
73
|
+
index++;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (prefix[index] === '"') {
|
|
77
|
+
closed = true;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (depth !== 1)
|
|
82
|
+
continue;
|
|
83
|
+
const token = prefix.slice(start, closed ? index + 1 : prefix.length);
|
|
84
|
+
let value;
|
|
85
|
+
try {
|
|
86
|
+
value = JSON.parse(token);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
if (closed)
|
|
90
|
+
continue;
|
|
91
|
+
// Strip only an unfinished trailing escape/unicode escape, not content.
|
|
92
|
+
let body = token.slice(1);
|
|
93
|
+
const unicode = /(?<!\\)(?:\\\\)*\\u[\da-f]{0,3}$/i.exec(body);
|
|
94
|
+
if (unicode)
|
|
95
|
+
body = body.slice(0, unicode.index) + unicode[0].replace(/\\u[\da-f]{0,3}$/i, '');
|
|
96
|
+
let slashes = 0;
|
|
97
|
+
for (let end = body.length - 1; end >= 0 && body[end] === '\\'; end--)
|
|
98
|
+
slashes++;
|
|
99
|
+
if (slashes % 2)
|
|
100
|
+
body = body.slice(0, -1);
|
|
101
|
+
try {
|
|
102
|
+
value = JSON.parse(`"${body}"`);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (closed && /^\s*:/.test(prefix.slice(index + 1)))
|
|
109
|
+
key = value;
|
|
110
|
+
else if (key !== undefined) {
|
|
111
|
+
fields[key] = value;
|
|
112
|
+
key = undefined;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return fields;
|
|
116
|
+
}
|
|
117
|
+
export function toolIdentity(entry) {
|
|
118
|
+
const block = entry.block;
|
|
119
|
+
return {
|
|
120
|
+
name: block ? 'kind' in block ? block.call?.name ?? entry.draft?.name ?? '工具调用' : block.name : entry.draft?.name ?? '工具调用',
|
|
121
|
+
raw: block ? 'kind' in block ? block.call?.argsRaw ?? entry.draft?.argsRaw ?? '' : ('argsRaw' in block ? block.argsRaw : '') : entry.draft?.argsRaw ?? '',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/** Name and raw arguments of any call block, whether it has landed or is pending. */
|
|
125
|
+
function childIdentity(block) {
|
|
126
|
+
if (!block || !('kind' in block))
|
|
127
|
+
return { name: block?.name, raw: block && 'argsRaw' in block ? block.argsRaw : '' };
|
|
128
|
+
return { name: block.call?.name, raw: block.call?.argsRaw ?? '' };
|
|
129
|
+
}
|
|
130
|
+
export function executionFacts(block) {
|
|
131
|
+
if (!block || !('kind' in block))
|
|
132
|
+
return {};
|
|
133
|
+
const meta = objectValue(block.meta);
|
|
134
|
+
const code = meta?.exitCode ?? meta?.exit_code;
|
|
135
|
+
const text = block.content.length === 1 && block.content[0]?.type === 'text' ? block.content[0].text : '';
|
|
136
|
+
const exit = /\n\[exit code: (\d+)\]$/.exec(text);
|
|
137
|
+
const signal = /\n\[killed by signal: ([^\]\n]+)\]$/.exec(text);
|
|
138
|
+
const parsedCode = exit?.[1] === undefined ? undefined : Number(exit[1]);
|
|
139
|
+
return {
|
|
140
|
+
exitCode: typeof code === 'number' && Number.isFinite(code) ? code : parsedCode,
|
|
141
|
+
signal: stringValue(meta, 'signal') ?? signal?.[1],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/** Line counts of one text side; a trailing newline does not start a line. */
|
|
145
|
+
function lineCount(text) {
|
|
146
|
+
if (text === null)
|
|
147
|
+
return 0;
|
|
148
|
+
const body = text.endsWith('\n') ? text.slice(0, -1) : text;
|
|
149
|
+
return body === '' ? 0 : body.split('\n').length;
|
|
150
|
+
}
|
|
151
|
+
/** Argument fields that carry the text a call is about to write. */
|
|
152
|
+
const NEW_TEXT_FIELDS = ['content', 'new_string', 'new_str', 'newText', 'file_text'];
|
|
153
|
+
/** Argument fields that carry the text a call is about to replace. */
|
|
154
|
+
const OLD_TEXT_FIELDS = ['old_string', 'old_str', 'oldText'];
|
|
155
|
+
/** Argument fields that name the file a mutation call targets. */
|
|
156
|
+
const PATH_FIELDS = ['file_path', 'path', 'filePath'];
|
|
157
|
+
function firstString(source, fields) {
|
|
158
|
+
if (!source)
|
|
159
|
+
return null;
|
|
160
|
+
for (const field of fields) {
|
|
161
|
+
const value = source[field];
|
|
162
|
+
if (typeof value === 'string' && value !== '')
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* The changed files of a mutation call.
|
|
169
|
+
*
|
|
170
|
+
* Result metadata is preferred when the host attaches it. Not every host build
|
|
171
|
+
* does, so the call's own arguments are the fallback — the same source the
|
|
172
|
+
* official row reads while a write is still pending. A call whose arguments hold
|
|
173
|
+
* none of these fields (a read, a listing) yields nothing and shows no counts.
|
|
174
|
+
*/
|
|
175
|
+
/** Only these tools change a file, so only these may fall back to their arguments. */
|
|
176
|
+
export const DIFF_FALLBACK_TOOLS = ['write', 'edit', 'str_replace_editor'];
|
|
177
|
+
const MUTATION_TOOLS = new Set(DIFF_FALLBACK_TOOLS);
|
|
178
|
+
export function callDiffHunks(block, args, name) {
|
|
179
|
+
// A parent call owns whatever its children changed: a script that writes files
|
|
180
|
+
// reports those writes itself rather than through its own arguments, and the
|
|
181
|
+
// digest must see them too. Without this the counts only ever appeared on the
|
|
182
|
+
// nested row, which is what a reader noticed as a missing badge.
|
|
183
|
+
// Each child contributes through its own arguments, not the parent's: a nested
|
|
184
|
+
// write/edit records its hunks in `argsRaw`, and passing nothing here silently
|
|
185
|
+
// dropped them from the parent total. Errors are contained so one unreadable
|
|
186
|
+
// child cannot blank the whole row.
|
|
187
|
+
const nested = block && 'kind' in block && Array.isArray(block.subCalls)
|
|
188
|
+
? block.subCalls.flatMap(child => {
|
|
189
|
+
try {
|
|
190
|
+
return callDiffHunks(child, inputFields(childIdentity(child).raw), childIdentity(child).name);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
})
|
|
196
|
+
: [];
|
|
197
|
+
if (block && 'kind' in block) {
|
|
198
|
+
const diffs = objectValue(block.meta)?.diffs;
|
|
199
|
+
if (Array.isArray(diffs) && diffs.length > 0) {
|
|
200
|
+
const hunks = [];
|
|
201
|
+
for (const raw of diffs) {
|
|
202
|
+
const entry = objectValue(raw);
|
|
203
|
+
if (!entry)
|
|
204
|
+
continue;
|
|
205
|
+
const oldText = typeof entry.oldText === 'string' ? entry.oldText : null;
|
|
206
|
+
const newText = typeof entry.newText === 'string' ? entry.newText : '';
|
|
207
|
+
if (!lineCount(newText) && !lineCount(oldText))
|
|
208
|
+
continue;
|
|
209
|
+
hunks.push({ path: firstString(entry, PATH_FIELDS) ?? '', oldText, newText });
|
|
210
|
+
}
|
|
211
|
+
if (hunks.length)
|
|
212
|
+
return [...hunks, ...nested];
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Several unrelated tools take a field named `content` (a memory note, a typed
|
|
216
|
+
// message). Reading it as a file body invented counts for calls that changed no
|
|
217
|
+
// file at all, so the name decides whether arguments may be read this way.
|
|
218
|
+
if (!name || !MUTATION_TOOLS.has(name))
|
|
219
|
+
return nested;
|
|
220
|
+
const path = firstString(args, PATH_FIELDS);
|
|
221
|
+
if (!path)
|
|
222
|
+
return nested;
|
|
223
|
+
const oldText = firstString(args, OLD_TEXT_FIELDS);
|
|
224
|
+
const newText = firstString(args, NEW_TEXT_FIELDS) ?? '';
|
|
225
|
+
if (!lineCount(newText) && !lineCount(oldText))
|
|
226
|
+
return nested;
|
|
227
|
+
return [{ path, oldText, newText }, ...nested];
|
|
228
|
+
}
|
|
229
|
+
/** Added/removed line counts for one call, or null when there is nothing to show. */
|
|
230
|
+
export function diffTotals(block, args, name) {
|
|
231
|
+
const hunks = callDiffHunks(block, args, name);
|
|
232
|
+
if (!hunks.length)
|
|
233
|
+
return null;
|
|
234
|
+
return diffLineTotals(hunks);
|
|
235
|
+
}
|
|
236
|
+
/** Counts the lines on each side, under the same rule the official block uses. */
|
|
237
|
+
export function diffLineTotals(hunks) {
|
|
238
|
+
return hunks.reduce((total, hunk) => ({
|
|
239
|
+
added: total.added + lineCount(hunk.newText),
|
|
240
|
+
removed: total.removed + lineCount(hunk.oldText),
|
|
241
|
+
}), { added: 0, removed: 0 });
|
|
242
|
+
}
|
|
243
|
+
/** Every changed file across a folded run of steps, in the order they ran. */
|
|
244
|
+
export function foldDiffHunks(steps) {
|
|
245
|
+
const hunks = [];
|
|
246
|
+
for (const step of steps) {
|
|
247
|
+
if (step.kind !== 'tool' || !step.entry)
|
|
248
|
+
continue;
|
|
249
|
+
const model = activitySummary(step.entry);
|
|
250
|
+
hunks.push(...callDiffHunks(step.entry.block, model.args, model.name));
|
|
251
|
+
}
|
|
252
|
+
return hunks;
|
|
253
|
+
}
|
|
254
|
+
export function activityPhase(entry, turnClosed = false) {
|
|
255
|
+
if (!entry.block)
|
|
256
|
+
return turnClosed ? 'interrupted' : 'preparing';
|
|
257
|
+
if (!('kind' in entry.block))
|
|
258
|
+
return turnClosed ? 'interrupted' : 'running';
|
|
259
|
+
// RC1 publishes canonical cancellation as an error result with a typed code.
|
|
260
|
+
if (entry.block.error?.code === 'ABORTED' || entry.block.error?.code === 'interrupted')
|
|
261
|
+
return 'interrupted';
|
|
262
|
+
const facts = executionFacts(entry.block);
|
|
263
|
+
if (entry.block.isError || facts.signal || (facts.exitCode !== undefined && facts.exitCode !== 0)
|
|
264
|
+
|| entry.block.subCalls.some(block => activityPhase({ block }, turnClosed) === 'failed'))
|
|
265
|
+
return 'failed';
|
|
266
|
+
if (facts.exitCode === 0)
|
|
267
|
+
return 'succeeded';
|
|
268
|
+
return 'returned';
|
|
269
|
+
}
|
|
270
|
+
export function activitySummary(entry) {
|
|
271
|
+
const { name, raw } = toolIdentity(entry);
|
|
272
|
+
const args = inputFields(raw);
|
|
273
|
+
const target = stringValue(args, 'file_path', 'path', 'filename', 'filePath');
|
|
274
|
+
const command = stringValue(args, 'command', 'cmd', 'script');
|
|
275
|
+
const description = stringValue(args, 'description');
|
|
276
|
+
const file = target?.split(/[/\\]/).at(-1);
|
|
277
|
+
const category = /^(write|edit|apply_patch|patch|str_replace_editor)$/.test(name) ? 'write'
|
|
278
|
+
: /^(read|read_file)$/.test(name) ? 'read'
|
|
279
|
+
: /^(bash|shell|terminal|terminal_send|exec_command|pwsh)$/.test(name) ? 'terminal'
|
|
280
|
+
: /^(grep|glob|find|search)$/.test(name) ? 'search'
|
|
281
|
+
: /^(web_search|web_fetch|web_open)$/.test(name) ? 'web'
|
|
282
|
+
// Code interpreters: no file, no shell, no query — the call is a program.
|
|
283
|
+
// Without this branch `run_code` fell through to `other`, which has no
|
|
284
|
+
// renderer of its own, so its result text was emitted as ordinary prose
|
|
285
|
+
// and stayed outside every fold.
|
|
286
|
+
: /^(run_code|execute_code|code_interpreter|python|node|eval|repl)$/.test(name) ? 'code'
|
|
287
|
+
: 'other';
|
|
288
|
+
const title = category === 'write' ? `${name === 'write' ? '写入' : '修改'}${file ? ` ${file}` : name === 'apply_patch' ? '代码补丁' : '文件'}`
|
|
289
|
+
: category === 'read' ? `读取${file ? ` ${file}` : '文件'}`
|
|
290
|
+
: category === 'terminal' ? description || '运行命令'
|
|
291
|
+
: category === 'search' ? name === 'glob' ? '查找文件' : '搜索内容'
|
|
292
|
+
: category === 'web' ? name === 'web_search' ? '搜索网页' : '读取网页'
|
|
293
|
+
: category === 'code' ? (description || '运行代码')
|
|
294
|
+
: name;
|
|
295
|
+
return { name, raw, args, category, title, target: target ?? command ?? stringValue(args, 'query', 'pattern', 'url'), command,
|
|
296
|
+
cwd: stringValue(args, 'workdir', 'cwd'), content: stringValue(args, 'content', 'new_string', 'newText', 'file_text') };
|
|
297
|
+
}
|
|
298
|
+
export function preparingLabel(name) {
|
|
299
|
+
return /^(write|edit|apply_patch)$/.test(name) ? '正在生成文件内容' : /^(bash|shell|exec_command|pwsh)$/.test(name) ? '正在准备命令' : '正在准备工具输入';
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=tool-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-activity.js","sourceRoot":"","sources":["../../../src/client/tool-activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { ImageAttachmentRef } from '@deepseek-ai/dsh-attachment';
|
|
2
|
+
import type { AssistantBlock, MessageImageLoader } from '@deepseek-ai/dsh-client-ui-conversation/client';
|
|
3
|
+
import type { MarkdownFileMentions } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
|
+
import type { PropsLocale, PropsRenderSlots, PropsRuntime, PropsStore } from '@deepseek-ai/dsh-client-ui-slots';
|
|
5
|
+
import type { createReaderStore } from './store.js';
|
|
6
|
+
import type { OfficialSeat } from './official-slots.js';
|
|
7
|
+
import type { OpenFileOptions, TurnTailOwnerProps } from '@deepseek-ai/dsh-client-ui-chat/client';
|
|
8
|
+
export interface ReaderBlockOwner {
|
|
9
|
+
block: AssistantBlock;
|
|
10
|
+
streaming: boolean;
|
|
11
|
+
source: 'assistant' | 'user' | 'tool';
|
|
12
|
+
}
|
|
13
|
+
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
14
|
+
interface SlotMap {
|
|
15
|
+
/** Trusted installed renderers may opt in; unknown model payloads never execute code. */
|
|
16
|
+
'dsh-better-display.block': {
|
|
17
|
+
kind: 'chain';
|
|
18
|
+
scope: 'session';
|
|
19
|
+
owner: ReaderBlockOwner;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export interface ReaderInjected {
|
|
24
|
+
loadOlder: () => Promise<void>;
|
|
25
|
+
loadImage: (attachment: ImageAttachmentRef) => Promise<{
|
|
26
|
+
data: Uint8Array;
|
|
27
|
+
mediaType: string;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Writes text into this session's composer draft via the sanctioned
|
|
31
|
+
* conversation input face, with a DOM fallback. Returns true when the
|
|
32
|
+
* composer accepted the text.
|
|
33
|
+
*/
|
|
34
|
+
fillComposer: (text: string) => boolean;
|
|
35
|
+
/** Open a workspace file or directory; mode comes from the Better Display setting. */
|
|
36
|
+
openFile: (path: string, options?: OpenFileOptions) => Promise<void> | void;
|
|
37
|
+
officialImageLoader: MessageImageLoader;
|
|
38
|
+
officialFileMentions: (owner: TurnTailOwnerProps) => MarkdownFileMentions | undefined;
|
|
39
|
+
officialPreviewFile: (path: string) => void;
|
|
40
|
+
officialHost: {
|
|
41
|
+
getSnapshot: () => {
|
|
42
|
+
home?: string;
|
|
43
|
+
};
|
|
44
|
+
subscribe: (listener: () => void) => () => void;
|
|
45
|
+
};
|
|
46
|
+
/** Root-scoped Better Display prefs (`dsh.reader.v1`), shared with Settings. */
|
|
47
|
+
openPrefs?: {
|
|
48
|
+
getSnapshot: () => {
|
|
49
|
+
deliverableOpenMode?: import('./open-file.js').DeliverableOpenMode;
|
|
50
|
+
frostedGlass?: boolean;
|
|
51
|
+
bubbles?: boolean;
|
|
52
|
+
foldIntensity?: import('./fold-intensity.js').FoldIntensity;
|
|
53
|
+
autoFold?: boolean;
|
|
54
|
+
processOnly?: boolean;
|
|
55
|
+
};
|
|
56
|
+
subscribe: (fn: () => void) => () => void;
|
|
57
|
+
actions?: {
|
|
58
|
+
setFoldIntensity?: (value: import('./fold-intensity.js').FoldIntensity) => void;
|
|
59
|
+
setAutoFold?: (value: boolean) => void;
|
|
60
|
+
setFrostedGlass?: (value: boolean) => void;
|
|
61
|
+
setBubbles?: (value: boolean) => void;
|
|
62
|
+
setDeliverableOpenMode?: (value: import('./open-file.js').DeliverableOpenMode) => void;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
/** Reveal and highlight a workspace file in macOS Finder or Windows Explorer. */
|
|
66
|
+
revealFile?: (path: string) => Promise<void> | void;
|
|
67
|
+
/** Fork the conversation at a specific message sequence into a new branch session. */
|
|
68
|
+
forkAt?: (seq: number) => void;
|
|
69
|
+
/** Load session history through a target sequence number. */
|
|
70
|
+
loadThrough?: (seq: unknown) => Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
export type ReaderProps = PropsRuntime<'conversation.view'> & PropsLocale<'chat'> & PropsRenderSlots<'dsh-better-display.block' | OfficialSeat> & PropsStore<ReturnType<typeof createReaderStore>> & ReaderInjected;
|
|
73
|
+
export type BlockRenderProps = Pick<ReaderProps, 'renderSlotChain' | 'loadImage' | 'fillComposer'> & {
|
|
74
|
+
official?: Pick<ReaderProps, 'renderSlot' | 'renderSlotChain' | 'officialImageLoader' | 'officialFileMentions' | 'officialPreviewFile' | 'officialHost' | 'openView'>;
|
|
75
|
+
cwd?: string;
|
|
76
|
+
openFile?: (path: string, options?: OpenFileOptions) => Promise<void> | void;
|
|
77
|
+
revealFile?: (path: string) => Promise<void> | void;
|
|
78
|
+
forkAt?: (seq: number) => void;
|
|
79
|
+
/** Durable closing-message seq of this turn (turn-tail closing), used as the fork anchor. */
|
|
80
|
+
forkSeq?: number;
|
|
81
|
+
fileMentions?: MarkdownFileMentions;
|
|
82
|
+
metrics?: {
|
|
83
|
+
usage?: NonNullable<import('@deepseek-ai/dsh-client-ui-chat/client').TurnTailChatData['tokenUsage']>;
|
|
84
|
+
runMs?: number;
|
|
85
|
+
tokensPerSecond?: number;
|
|
86
|
+
ttftMs?: number;
|
|
87
|
+
/** Closing assistant-message time (turn-tail `closing.time`). */
|
|
88
|
+
endedAt?: number;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ChatNodeKind } from '@deepseek-ai/dsh-client-ui-chat/client';
|
|
2
|
+
export interface WaitingAnchor {
|
|
3
|
+
key: string;
|
|
4
|
+
time: number | null;
|
|
5
|
+
}
|
|
6
|
+
type InputNode = {
|
|
7
|
+
kind: string;
|
|
8
|
+
data: unknown;
|
|
9
|
+
};
|
|
10
|
+
type Submission = {
|
|
11
|
+
requestId: string;
|
|
12
|
+
time?: number;
|
|
13
|
+
placement?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Chat-layer kinds that hand the turn back to the model unconditionally.
|
|
17
|
+
*
|
|
18
|
+
* These are `ChatNodeDataMap` keys, NOT conversation-layer `ConversationNode` kinds.
|
|
19
|
+
* The two layers name the same idea differently: a returned tool is `tool-result`
|
|
20
|
+
* in the conversation contract, but the row the reader sees is the `tool-call` node.
|
|
21
|
+
* A name copied from the wrong layer silently disables the branch it guards, so
|
|
22
|
+
* the `satisfies` below makes the compiler reject any name that is not a real kind.
|
|
23
|
+
*/
|
|
24
|
+
export declare const WAIT_AFTER: Set<ChatNodeKind>;
|
|
25
|
+
/**
|
|
26
|
+
* Every chat-kind the handover logic reasons about, checked against the host's own
|
|
27
|
+
* kind union at compile time. Adding a name here that the host does not register
|
|
28
|
+
* fails `tsc` instead of failing silently at runtime.
|
|
29
|
+
*/
|
|
30
|
+
export declare const HANDOVER_KINDS: readonly ["user", "steering", "context", "model-retry", "tool-call", "command"];
|
|
31
|
+
/**
|
|
32
|
+
* Does this node leave the model on the hook for the next move?
|
|
33
|
+
*
|
|
34
|
+
* A tool or command that is *still running* is not a wait — the tool is the one
|
|
35
|
+
* working. Only its returned form hands control back, which is exactly the moment
|
|
36
|
+
* the model can stall.
|
|
37
|
+
*/
|
|
38
|
+
export declare function handsBackToModel(node: InputNode): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* The moment the current wait began.
|
|
41
|
+
*
|
|
42
|
+
* This is the time of the **last** node that handed control to the model — a
|
|
43
|
+
* returned tool, an injected context, or the user's own message. Anchoring on the
|
|
44
|
+
* user's message alone made the readout count the entire turn, so a wait that had
|
|
45
|
+
* only just begun showed the minutes the tools had already spent.
|
|
46
|
+
*/
|
|
47
|
+
export declare function waitingAnchor(order: readonly string[], get: (key: string) => InputNode | undefined, pending?: readonly Submission[]): WaitingAnchor;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=waiting-clock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waiting-clock.d.ts","sourceRoot":"","sources":["../../../src/client/waiting-clock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAE3E,MAAM,WAAW,aAAa;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AACnE,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AACjD,KAAK,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAG3E;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,mBAAoD,CAAC;AAE5E;;;;GAIG;AACH,eAAO,MAAM,cAAc,iFAEiB,CAAC;AAiB7C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAKzD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,EAAE,OAAO,GAAE,SAAS,UAAU,EAAO,GAAG,aAAa,CAkBvJ"}
|