@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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- Message bubbles: each final answer renders in a rounded bubble separating it from the page background, so text no longer sits directly on skinned hosts' wallpapers. Glass mode mixes the same tokens translucently, mirroring the user bubble's frosted treatment. A new 消息气泡 / Message bubbles switch in settings restores the flat layout when off (persisted as `bubbles` on `dsh.reader.v1`, default on).
|
|
6
|
+
|
|
7
|
+
## 0.3.3 — 2026-09-24
|
|
8
|
+
|
|
9
|
+
- Accept Harness `0.1.7-rc.2` (`dsh-v0.1.7-rc.2`, `477b4f420553e8a52c2fbccc464d7561b239c443`). Peer range stays `>=0.1.7-rc.1 <0.1.8`.
|
|
10
|
+
- `conversation.chat.turnTail` stays a list slot. The new `schedule-created` tail entry and `schedule_update` tool view are additional official registrations, mirrored through the existing seats.
|
|
11
|
+
- Developer tool-change context (`tool-addition` / `tool-removal`) uses the official title and count copy instead of a generic injection row.
|
|
12
|
+
- Local Markdown images accept the Desktop file route `dsh-app://app/api/file`.
|
|
13
|
+
|
|
14
|
+
## 0.3.2 — 2026-09-24
|
|
15
|
+
|
|
16
|
+
- 补齐 0.1.7-rc.1 官方桥接的运行时契约:工具视图传入 `phase`/`useDisclosure`/`hookContext{callId}`,聊天节点改用 `{turnData, disclosureReset}` 快照 store;修复真实宿主里官方工具视图静默落到 fallback 的问题。
|
|
17
|
+
- 折叠区吸顶车道的绘制缝隙:车道只给自己的框刷实心底色,`.turn` 14px gap、前一 cell 16px padding、status 车道右侧 `--reader-control-width` 保留区三条缝滚动时透出内容;改用同色 `box-shadow` 向上/向右补漆连成连续色带。
|
|
18
|
+
|
|
19
|
+
## 0.3.1 — 2026-09-24
|
|
20
|
+
|
|
21
|
+
- Accept Harness `0.1.7-rc.1`. Peer range is `>=0.1.7-rc.1 <0.1.8`.
|
|
22
|
+
- `conversation.chat.turnTail` is a list slot. The old chain expectation threw during client boot and left the page on “Failed to load plugins”.
|
|
23
|
+
- Icon imports use the rc.1 weight names (`IconBrowseOutlineRegular` and the rest). Size stays a prop.
|
|
24
|
+
- Pending confirmation now reads `useSessionStatus` (`pendingInteraction`). The removed `useSessionPendingInteraction` hook threw as soon as the reader painted.
|
|
25
|
+
- Code and terminal labels include the rc.1 toolbar fields (`codeLabel`, wrap, and `noExitCode`).
|
|
26
|
+
|
|
27
|
+
## 0.3.0 — 2026-09-21
|
|
28
|
+
|
|
29
|
+
- 修复关闭自动折叠、查看过程详情后,再开启仍无法折叠的问题;重新开启会恢复自动折叠规则,仍保留文本选择保护和之后的手动展开。
|
|
30
|
+
- 在现有阅读布局中接入官方反馈、工具详情、显式产物卡片、命令和未知节点渲染;官方渲染器负责注入、翻译、store 和子插槽。
|
|
31
|
+
- 移除直接调用工具组件及模拟点击展开的逻辑,保留现有摘要、折叠、动效和文件快捷操作。
|
|
32
|
+
- 接入官方文件链接服务,传递工具文件行号,补齐 RC2 本地 Markdown 图片及加载失败降级。
|
|
33
|
+
- 修复滚动跟随拉回底部的问题,统一阅读列轨道和吸顶区域的位置。
|
|
34
|
+
- 代码解释器结果按终端输出展示,上下文行兼容 `provenance` 和 `producer`。
|
|
35
|
+
- 增加可重放的官方组件集成测试、自动折叠交互回归和 Harness 升级兼容检查,依赖对齐 Harness `0.1.5-rc.2`。
|
|
36
|
+
- 设计范围、接口边界和待收敛模块见 `docs/official-rendering-bridge.md`。
|
|
37
|
+
|
|
38
|
+
## 0.2.1 — 2026-09-20
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Pinned reader lanes no longer paint over the composer. The live status row
|
|
43
|
+
(`执行过程` / `正在使用工具`) pinned at the scrollport top with `z-index: 8`,
|
|
44
|
+
while the host's sticky composer seat owns `z-index: 7` and nothing between
|
|
45
|
+
the reader and `<body>` creates a stacking context. A scrolling reader clamps
|
|
46
|
+
every turn-level sticky lane down into the footer band — the lane stops at its
|
|
47
|
+
containing block's bottom, which passes behind the input card — so the reader
|
|
48
|
+
painted its own opaque plate over the composer.
|
|
49
|
+
- The live status lane now owns the measured lane under the toolbar, exactly
|
|
50
|
+
like the closed summary rows, instead of sharing the toolbar's lane.
|
|
51
|
+
- Lanes a scroll can clamp into the footer band stay below the composer seat
|
|
52
|
+
(`z-index` 6); only the top toolbar lane keeps 7, which also keeps it above
|
|
53
|
+
the host's code-block banners.
|
|
54
|
+
- Skin mode no longer carries a second lane ladder of its own.
|
|
55
|
+
- `tests/footer-precedence.test.ts` guards the ladder in the source sheet and
|
|
56
|
+
in the committed bundle.
|
|
57
|
+
|
|
58
|
+
## 0.2.0 — 2026-09-18
|
|
59
|
+
|
|
60
|
+
### Diff review and tool presentation
|
|
61
|
+
|
|
62
|
+
- Re-engineered diff review panel: line addition/deletion statistics (`+A -R`) are pushed
|
|
63
|
+
flush to the right margin, perfectly aligned on the same 32px baseline as the summary text.
|
|
64
|
+
- Diff overlay expands cleanly within the reading column (0px horizontal overflow) with
|
|
65
|
+
independent vertical scrolling (`max-height: 420px; overscroll-behavior: contain`),
|
|
66
|
+
preventing mouse-wheel events from leaking into the conversation stream.
|
|
67
|
+
- Multi-file tabs scroll horizontally with adaptive content height on file switches.
|
|
68
|
+
- PR #12 custom tool cards: delegate tool view rendering to `tool.call.toolview` slot with
|
|
69
|
+
error boundary isolation and auto-expand capabilities.
|
|
70
|
+
|
|
71
|
+
### Translucent frosted glass and skin mode
|
|
72
|
+
|
|
73
|
+
- Translucent frosted glass mode is an opt-in toggle in Settings.
|
|
74
|
+
- When enabled, all card backgrounds, tool detail frames, and code blocks become translucent
|
|
75
|
+
with backdrop blur, eliminating opaque white patches and seamlessly adapting to third-party
|
|
76
|
+
wallpaper and window skins.
|
|
77
|
+
|
|
78
|
+
### Refined folding and liveness
|
|
79
|
+
|
|
80
|
+
- Reverted to a single, intuitive auto-fold toggle (**自动折叠开 / 关**) on the reading toolbar
|
|
81
|
+
and in Settings, removing complex multi-level rules while keeping reasoning and tools
|
|
82
|
+
completely unfolded when turned off.
|
|
83
|
+
- Fixed line-wrapping bug so digest rows stay strictly single-line when space permits.
|
|
84
|
+
- Real-time wait clocks (`WaitClock`), execution time tracking, and token throughput
|
|
85
|
+
metrics (`TurnMetrics`) fully preserved and active.
|
|
86
|
+
- Animated disclosures include fallback timeouts to prevent rendering stalls.
|
|
87
|
+
|
|
88
|
+
### Better Display settings
|
|
89
|
+
|
|
90
|
+
- Glass, auto-fold, and deliverable open-mode share the root `dsh.reader.v1` store so
|
|
91
|
+
Settings and the reading view stay in sync across refresh.
|
|
92
|
+
- Deliverable open-mode: default system app, optional Sidebar. Folder/reveal stay OS.
|
|
93
|
+
- Generative-mcpapps skill installation detection and status reporting.
|
|
94
|
+
|
|
95
|
+
### Compatibility and liveness
|
|
96
|
+
|
|
97
|
+
- A wait now restarts when a tool returns. The handover set named kinds from the
|
|
98
|
+
conversation contract (`tool-result`) while the reader matches against the chat
|
|
99
|
+
layer's kinds, where a returned tool is the `tool-call` row whose `data.root`
|
|
100
|
+
carries a result. No node ever had the old name, so the branch was dead and a
|
|
101
|
+
returned tool never restarted the clock. The set and every kind it reasons about
|
|
102
|
+
are now typed against the host's own kind union, so a wrong name fails `tsc`
|
|
103
|
+
instead of failing silently at runtime, and a tool that is still running is
|
|
104
|
+
explicitly not a wait.
|
|
105
|
+
- The fold choreography can no longer stall. Each phase advances on animation
|
|
106
|
+
promises and rendered frames, and a cancelled animation rejects while a hidden
|
|
107
|
+
tab delivers no frames — either one used to leave the machine in a non-idle
|
|
108
|
+
phase forever, which holds the frame source at the shown snapshot and pauses the
|
|
109
|
+
text reveal, so the turn looked stuck until the view remounted. Every phase now
|
|
110
|
+
also has a wall-clock deadline that forces the next phase.
|
|
111
|
+
- While the choreography holds the reveal, the stream buffer keeps absorbing the
|
|
112
|
+
source instead of returning early, so text never resumes from a stale target
|
|
113
|
+
once the fold settles.
|
|
114
|
+
- Status shows how many sub-agents the turn dispatched, read from the host's own
|
|
115
|
+
turn-process row instead of being counted again here.
|
|
116
|
+
- Drop the `command-input` render branch: that string is not a chat node kind in
|
|
117
|
+
any released host, so it only made the file look like it handled a case that
|
|
118
|
+
cannot occur.
|
|
119
|
+
- Give every animated disclosure a wall-clock deadline as well. `fill: 'both'`
|
|
120
|
+
pins the opening keyframe, so a Web Animation that never reaches `onfinish`
|
|
121
|
+
(cancelled, unmounted, or skipped by the compositor) left the row in the DOM at
|
|
122
|
+
zero height and zero opacity — clicking it looked like nothing happened.
|
|
123
|
+
- Add a Better Display settings section: deliverables still open in the system app
|
|
124
|
+
by default, with an optional right-Sidebar preview, plus generative-mcpapps
|
|
125
|
+
skill-root detection and install guidance.
|
|
126
|
+
- Guard pending-submission image echoes so a text-only send cannot crash
|
|
127
|
+
`conversation.view` (`images` / `attachments` may be missing).
|
|
128
|
+
- Install guidance names only conventional relative roots (`.dsh/skills`,
|
|
129
|
+
`.agents/skills`) and never prints host home or plugin pack absolutes.
|
|
130
|
+
|
|
131
|
+
### Reading and folding
|
|
132
|
+
|
|
133
|
+
- A later reasoning step folds only the finished process run it follows. The run
|
|
134
|
+
that is still streaming stays fully expanded, so a long turn reads as
|
|
135
|
+
alternating digests and prose instead of collapsing mid-thought.
|
|
136
|
+
- Fold intensity 2 (`过程摘要`) is PR #14's process-only mode: prose is never
|
|
137
|
+
folded; each finished run of reasoning / tool / record steps collapses into
|
|
138
|
+
one digest that names what the tools actually did (`读取 Reader.tsx`,
|
|
139
|
+
`运行 pnpm test`), read from the same tool identity the tool cards use. It is
|
|
140
|
+
not the default — standard fold (level 1) keeps current-main choreography.
|
|
141
|
+
- A finished process-only turn folds its trailing run too, and skips the
|
|
142
|
+
duplicate closed-turn counter row it no longer needs.
|
|
143
|
+
|
|
144
|
+
### Reading surface
|
|
145
|
+
|
|
146
|
+
- When frosted glass is on, sticky lanes use the same liquid glass as the
|
|
147
|
+
dsh-auto-memory pane: translucent `bg-layer-2` wash, `blur(28px)`, hairline
|
|
148
|
+
border, 16px radius and a soft lift. Detail chips stay transparent until
|
|
149
|
+
hovered or focused. When the toggle is off, chrome matches current main.
|
|
150
|
+
- The toolbar reserves the width of its whole control group. Measuring only the
|
|
151
|
+
first button let the status lane paint over every later control.
|
|
152
|
+
- A compaction divider now arrives instead of simply appearing: the rule sweeps
|
|
153
|
+
out from its centre, the pill settles in, and the dial turns once. Gated by
|
|
154
|
+
`data-motion=off` and `prefers-reduced-motion` like every other transition.
|
|
155
|
+
|
|
156
|
+
### Diff review
|
|
157
|
+
|
|
158
|
+
- Read the changed line counts from the tool result the host already attaches
|
|
159
|
+
(`meta.diffs`, `{ path, oldText, newText }`), and fall back to the call's own
|
|
160
|
+
arguments for `write` / `edit` / `str_replace_editor` when a host build does
|
|
161
|
+
not send them. The name whitelist matters: several unrelated tools take a
|
|
162
|
+
field called `content`, and counting those invented additions for calls that
|
|
163
|
+
changed no file.
|
|
164
|
+
- Fold a parent call's child calls into its own counts. A `run_code` that writes
|
|
165
|
+
files reports what its children changed rather than what its own arguments
|
|
166
|
+
contain, so a run whose edits live one level down no longer loses its counts.
|
|
167
|
+
Each child contributes through its own arguments, read from either the landed
|
|
168
|
+
result or the pending call.
|
|
169
|
+
- `+N -M` sits at the end of the row in green/red and opens a panel listing one
|
|
170
|
+
entry per changed file — the file tabs, the removed lines on a red wash and
|
|
171
|
+
the added lines on a green one, using the same `DiffBlock` primitive the
|
|
172
|
+
official tool row renders. The panel is in flow, never a floating popup, so
|
|
173
|
+
the flow cell's `overflow: clip` cannot cut it off.
|
|
174
|
+
- Opening and closing the panel animate real height in the plugin's own motion
|
|
175
|
+
language, and the card is brought back into view when it opens below the
|
|
176
|
+
fold; an open panel keeps its caret lit.
|
|
177
|
+
|
|
178
|
+
### Waiting and timing
|
|
179
|
+
|
|
180
|
+
- Show how long the model has been given the turn, next to 「深度求索中」and the
|
|
181
|
+
in-flow wait indicator. The clock is anchored to the last event that handed
|
|
182
|
+
control to the model — a returned tool, an injected context, a run command,
|
|
183
|
+
the user's own message — never to the start of the turn, so a wait that has
|
|
184
|
+
just begun does not inherit the minutes the tools already spent.
|
|
185
|
+
- Past ten seconds the readout adds a「暂未响应」badge, and the moment the model
|
|
186
|
+
produces its first block the whole indicator is withdrawn. A tool that is
|
|
187
|
+
still running is not a wait: the tool is the one working.
|
|
188
|
+
- A command that ran long keeps its duration after it returns (warning colour
|
|
189
|
+
past ten seconds); a fast one shows nothing once it is done. Running steps
|
|
190
|
+
show a live seconds readout and a shimmering summary while they work.
|
|
191
|
+
|
|
192
|
+
### Scroll
|
|
193
|
+
|
|
194
|
+
- Tail-follow only detaches on a real upward move by the reader. Content growth
|
|
195
|
+
and the follow easing itself also move `scrollTop`, and reading that as "the
|
|
196
|
+
user left the bottom" froze following mid-turn.
|
|
197
|
+
- Disable browser scroll anchoring on the conversation scroller while the reader
|
|
198
|
+
is mounted: it moved the viewport on its own as the transcript grew.
|
|
199
|
+
- Only a focused text field suspends following, and only inside the reader.
|
|
200
|
+
Focusing the composer used to stop the transcript from advancing.
|
|
201
|
+
- Stream at the source's own rate: add a feed-forward term estimated from the
|
|
202
|
+
arrival rate on top of the proportional controller. A purely proportional
|
|
203
|
+
reveal settles at a constant `catchUpMs` of lag regardless of model speed,
|
|
204
|
+
which read as 「慢」 while the backlog grew with faster models; the feed-forward
|
|
205
|
+
term drains the backlog and the proportional term absorbs transport jitter.
|
|
206
|
+
- Reveal a batch of words on one clock instead of one word per fixed gap.
|
|
207
|
+
Per-word spacing pinned the rate near 16 words/second, so a fast model still
|
|
208
|
+
arrived one word at a time; a batch now lands inside one short window while a
|
|
209
|
+
lone new word keeps the original typing cadence.
|
|
210
|
+
- The reasoning pane's own follow steps with the backlog rather than at a fixed
|
|
211
|
+
step-and-hold: it used to advance two lines every ~1.3 seconds no matter how
|
|
212
|
+
fast the text arrived, which is what made the pane look like it was lagging
|
|
213
|
+
behind a fast model.
|
|
214
|
+
### Host DOM hooks
|
|
215
|
+
|
|
216
|
+
- Keep ChatView's `data-chat-flow=""` hook on the Reader column so skins that hide `[data-composer-seat]` when the scrollport has no chat-flow (maid-atelier, phoebe-atelier, and others) still show the composer in reading view.
|
|
217
|
+
|
|
218
|
+
## 0.1.1 — 2026-09-16
|
|
219
|
+
|
|
220
|
+
The accepted reading-view integration, including the work consolidated from PRs #2, #5 and #8. Earlier `0.2.0` / `0.2.1` headings were unpublished development notes; those changes ship in this release, not as separate published versions.
|
|
221
|
+
|
|
222
|
+
### Reading and folding
|
|
223
|
+
|
|
224
|
+
- A later reasoning step can fold earlier steps in its chain into a compact count summary. Body/tool updates alone do not trigger folding; user/steering input resets the chain. The auto-fold control can disable this presentation.
|
|
225
|
+
- Stable keyed rows shrink before counters update, pause briefly, then reveal buffered output. Preserve source order, selected text, reduced-motion behavior, and the visible final answer.
|
|
226
|
+
- Keep process statistics after turn completion. Empty hidden steps no longer accumulate 16px gaps in long completed turns.
|
|
227
|
+
- Give the auto-fold control a full-width, seamless lane without divider lines or replacement shadows. Statistics remain in normal flow until reaching the top, then stick below the measured status lane, whether expanded or collapsed.
|
|
228
|
+
- Short status labels remain readable instead of truncating. Waiting time resets to the latest user/steering submission rather than inheriting the turn's original start time.
|
|
229
|
+
|
|
230
|
+
### Navigation and native parity
|
|
231
|
+
|
|
232
|
+
- Keep the newer TimelineRail, including incremental history loading, per-turn metrics, fork support, and composer-safe landing. Scroll the conversation container rather than unrelated ancestor boxes.
|
|
233
|
+
- Skip host-synthetic `turn-process` JSON cards; render `/goal` command input as labeled text; give system-prompt details their own scrollport.
|
|
234
|
+
- Use the compact back-to-bottom chevron at the native near-bottom threshold and coalesce scroll-anchor capture.
|
|
235
|
+
- Show user-message time/copy controls and turn-end duration; defer produced-file rows until the turn closes.
|
|
236
|
+
|
|
237
|
+
### Interactive content
|
|
238
|
+
|
|
239
|
+
- Render generative MCP Apps from supported code fences, custom blocks, and tool results through an isolated iframe (`sandbox="allow-scripts allow-forms"`, no `allow-same-origin`).
|
|
240
|
+
- Support SEP-1865 JSON-RPC initialization, sizing, context updates, and prompt feedback into the composer, with light/dark synchronization and bounded auto-height.
|
|
241
|
+
- Include the generative-mcpapps skill pack, examples, and bilingual documentation.
|
|
242
|
+
|
|
243
|
+
### Distribution and verification
|
|
244
|
+
|
|
245
|
+
- Target DeepSeek Harness 0.1.5-rc.2 through public plugin/client extension points. No Agent, SDK, provider, credential, or Harness-core changes.
|
|
246
|
+
- Ship the stock-install bundle patch and rebuilt committed `lib/`, including declarations; git/tarball installation does not require `prepare`.
|
|
247
|
+
- Add fold-order/timing and steering-clock unit regressions, plus real-component browser fixtures for motion, 500 hidden rows, sticky/wrapped statistics, and waiting-clock resets.
|
|
248
|
+
|
|
249
|
+
## 0.1.0
|
|
250
|
+
|
|
251
|
+
First public release of the accepted reading-view plugin, published as `dsh-better-display`.
|
|
252
|
+
|
|
253
|
+
- Native context and tool details with source-ordered, unmodified reasoning.
|
|
254
|
+
- Bounded long-reasoning cards with two-line following, expanded follow and manual pause/resume.
|
|
255
|
+
- Successful-turn process folding with a separate final answer.
|
|
256
|
+
- Source-ordered text reveal and quiet busy-state shimmer.
|
|
257
|
+
- Stable status typography and compact disclosure spacing.
|
|
258
|
+
- Native content fallbacks and a trusted-plugin block extension slot.
|
|
259
|
+
- 42 regression tests; no changes to DSH Agent, SDK, providers or core.
|
package/DESIGN.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Display contract
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Keep native DeepSeek Harness process information readable while separating the final answer after a successful turn. The reading view is a presentation of the public session projection, never a second Agent pipeline.
|
|
6
|
+
|
|
7
|
+
## Content fidelity
|
|
8
|
+
|
|
9
|
+
- Preserve literal reasoning text, whitespace, source order and block identity.
|
|
10
|
+
- Do not infer reasoning from wording, parse private provider logs, rewrite prompts or alter model settings.
|
|
11
|
+
- Preserve native context sources, tool types, summaries, filenames, details and results.
|
|
12
|
+
- Preserve the native conversation, input, model selector and approval system.
|
|
13
|
+
- Leave nontext and unknown content available through native renderers or a safe fallback.
|
|
14
|
+
|
|
15
|
+
## Lifecycle
|
|
16
|
+
|
|
17
|
+
During a turn, show its real process in chronological order. Starting body output, preparing tool input, finishing one tool, or entering another step is not whole-turn completion.
|
|
18
|
+
|
|
19
|
+
Only a successful public turn-close boundary folds process and intermediate commentary, leaving the final answer in place. Failures, interruptions, unknown terminal states and approval requests remain visible. A live text selection defers folding until the selection is released. A historical turn can always be reopened.
|
|
20
|
+
|
|
21
|
+
While a turn is still open, a later reasoning step may collapse earlier steps of the same chain into one disclosure (`思考×N`). Body or tool alone never triggers that live fold. A mid-turn user insert or steering message resets the chain. This is presentation-only and does not change the successful-turn final-answer fold.
|
|
22
|
+
|
|
23
|
+
## Long reasoning
|
|
24
|
+
|
|
25
|
+
A neutral card bounds the transcript without replacing it. The viewport mask is 28px. Follow advances by two actual line heights every 840ms, with a 500ms transform using `cubic-bezier(.22,1,.36,1)`; clamp only at the current real end. Never accelerate through a burst, clone the transcript or loop old text.
|
|
26
|
+
|
|
27
|
+
Expanding changes viewport size and preserves position and follow state. Wheel, touch, viewport focus or selection pause following. The explicit follow control resumes only when no text is selected. Completed history stays static. The full source text remains available.
|
|
28
|
+
|
|
29
|
+
## Text and status motion
|
|
30
|
+
|
|
31
|
+
Assign reveal times from source positions before rendering Markdown. Only newly appended text receives opacity/blur motion; existing paragraphs, page surfaces and text color do not animate. Unicode graphemes and punctuation keep their source order. Media and custom blocks do not enter the text queue.
|
|
32
|
+
|
|
33
|
+
Busy labels use a 2-second glyph-only shimmer and a short state swap. Initial, busy and elapsed labels all use the native font at 14px/24px, weight 400. The disclosure arrow sits 6px from the current label; no longest-state spacer. Elapsed time and attention states do not shimmer.
|
|
34
|
+
|
|
35
|
+
## Sticky reading lanes (2026-09-16)
|
|
36
|
+
|
|
37
|
+
Keep the existing in-flow positions. The auto-fold control receives a full-column, 40px-minimum lane from initial render, native page background and seamless spacing, without divider lines or replacement shadows (user preference). The status retains its source position and shares the top lane's left side only when it reaches the scrollport top. The original summary row (never a duplicate) sticks below the greater measured toolbar/status height. Expanded and collapsed live summaries remain discoverable; completed summaries obey the same sticky offset. Scope is the current flow/turn, so subsequent turns replace earlier statistics rather than displaying unrelated counts forever.
|
|
38
|
+
|
|
39
|
+
Taste checkpoint: native reading chrome, not floating badges; one column, no new card family, no shadows or rounded background tiles; existing typography. Active responsive-interaction binding: real ResizeObserver lane geometry → StickyLane + CSS offsets → verify desktop/320px, wrapped statistics, no overlap, and return to original position on reverse scroll. Preserve prior measured fold choreography and zero-height empty wrappers.
|
|
40
|
+
|
|
41
|
+
## Reading and accessibility
|
|
42
|
+
|
|
43
|
+
Manual reading, selection and keyboard access take precedence over automatic following. Reduced-motion preferences, disabled motion and background views settle to the received content. Errors stay local to their block. Do not turn user interaction into a permanent lock that prevents successful-turn folding.
|
|
44
|
+
|
|
45
|
+
## Extensions and safety
|
|
46
|
+
|
|
47
|
+
Trusted plugins may register `dsh-better-display.block`. Native content remains the fallback. Generative MCP Apps (SEP-1865 / `io.modelcontextprotocol/ui`) are supported via an isolated, sandboxed iframe (`sandbox="allow-scripts allow-forms"`, strictly without `allow-same-origin`) communicating via bidirectional JSON-RPC `postMessage` (`ui/initialize`, `ui/resize`, `ui/update-model-context`, `ui/submit`).
|
|
48
|
+
|
|
49
|
+
## Host DOM hooks
|
|
50
|
+
|
|
51
|
+
Reader replaces ChatView's message list, not the native conversation chrome. The enclosing `[data-conversation-scroll]` and sticky `[data-composer-seat]` stay host-owned. ChatView marks its column with `data-chat-flow=""`. Third-party skins (maid-atelier, phoebe-atelier, and others) treat a scrollport without that hook as inspect-only and hide the composer. Reader keeps the same empty `data-chat-flow` attribute on its column so those skins still see an interactive conversation. Turns stay on `[data-reader-turn]`; Reader does not emit native `[data-chat-flow-kind]` rows.
|
|
52
|
+
|
|
53
|
+
## Fold choreography contract (2026-09-16)
|
|
54
|
+
|
|
55
|
+
Single-agent implementation; preserve existing type, colors, source order and one-column reading layout. The memory cue is causality, not ornament: shrink → count → pause → continue. No bouncing capsule, scale-squashed text or parallel entrance spectacle.
|
|
56
|
+
|
|
57
|
+
| Active reference | Decision | Target | Verification |
|
|
58
|
+
| --- | --- | --- | --- |
|
|
59
|
+
| motion-language | One attention owner; bounded coalescing instead of replaying every arrival | ChoreographedFlow | fast/slow/burst frame samples |
|
|
60
|
+
| motion-contract | Preserve step parents/keys until shrink completes; freeze a materialized public snapshot | fold-choreography + ChoreographedFlow | DOM identity, intermediate heights, ordered phases |
|
|
61
|
+
| responsive-interaction | Controls stay usable; labels receive available width, not an arbitrary narrow box | Reader.module.css | wide/narrow/200% text checks |
|
|
62
|
+
| typography-system | Keep native 14/24 status type; full short labels; wrap exceptional long labels | StatusText CSS | actual range vs container bounds |
|
|
63
|
+
|
|
64
|
+
Motion id: `fold-choreography`. Trigger: newly received reasoning folds a previously visible chain. Historical mount is static. Native WAAPI animates measured layout height for 320ms (deliberate layout exception needed for real flow continuity), then counters roll for 160ms, then 80ms stillness, then 180ms content reveal. New data coalesces into one latest frame; it never restarts the active shrink. Newly released text uses the existing grapheme-safe bounded catch-up buffer. Counter values belong to committed presentation frames, not the transport clock.
|
|
65
|
+
|
|
66
|
+
A selected passage, new user message, approval, error, stop, reduced motion or hidden page bypasses the waiting queue. Manual fold controls remain interruptible. Only the reader scroll coordinator writes the outer scroll position; during measured size animation it tracks geometry rather than layering another scroll easing. Authoritative session data is never rewritten.
|
|
67
|
+
|
|
68
|
+
Rollback baseline: `.delivery/before-choreography-20260916.tgz` plus original commit `56a87bb2531e5ccb9db5d4c8a347c2f91d7e449a`; existing uncommitted fixes are included in the archive. Changed surface: existing client only, no Host restart or core edits.
|
|
69
|
+
|
|
70
|
+
## Verification
|
|
71
|
+
|
|
72
|
+
Use unit coverage for projection, lifecycle, source-ordered streaming, graphemes, Markdown and two-line stepping. Verify live Host manifest, served bundle, native process details, literal reasoning, motion, successful folding, reopening, narrow layouts and reduced motion separately. Keep private session evidence outside this repository.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dsh-better-display contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
Third-party material retains its original license and terms as identified in
|
|
24
|
+
THIRD_PARTY_NOTICES.md. This license does not relicense that material.
|
package/README.en.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# dsh-better-display
|
|
2
|
+
|
|
3
|
+
[中文](./README.md)
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
### DSH Studio desktop app (recommended)
|
|
8
|
+
|
|
9
|
+
Open **Settings → Plugins → Add plugin** and enter this in “Package name or address”:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
github:aa2246740/dsh-better-display#v0.3.3
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The desktop plugin manager owns the Desktop profile and its bundled package manager. This release includes built `lib/`; normal use needs no clone, build, or DSHX installation. Follow the app if it asks you to reload or reopen after installation.
|
|
16
|
+
|
|
17
|
+
### Web CLI
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
dsh plugin --profile web add github:aa2246740/dsh-better-display#v0.3.3
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This official CLI command writes only the `web` profile; it cannot modify the Desktop App profile. For an already-running Web Host, reopen that Host once and reload the page because bundles are read at boot.
|
|
24
|
+
|
|
25
|
+
Adds a **阅读** tab to DeepSeek Harness. While a turn runs you see steps, thinking, and progress. After a successful turn those collapse and the final answer stays. Native Chat / Trajectory, the composer, model picker, tools, and approvals stay. The reading column keeps ChatView's `data-chat-flow` hook so third-party skins that gate the composer on that mark still treat Reader as an interactive conversation.
|
|
26
|
+
|
|
27
|
+
A ````mcp-app` fence in the final answer mounts as an interactive card in the reading view, inside `<iframe sandbox="allow-scripts allow-forms">` without `allow-same-origin`. The card can fill the next prompt via JSON-RPC. The skill pack is [`skills/generative-mcpapps/`](skills/generative-mcpapps/). Settings → **Better Display** can preview deliverables in the right Sidebar (system app remains the default), turn on translucent frosted glass (off by default), toggle process auto-folding (On is the default), and reports whether that skill is installed in a harness skill root.
|
|
28
|
+
|
|
29
|
+
Targets DeepSeek Harness **0.1.7-rc.2**. Display only. It does not change Agent execution, the SDK, or credentials. Node.js `^22.19.0 || >=24`. New sessions default to reading.
|
|
30
|
+
|
|
31
|
+
**0.3.0** keeps the existing reading layout, folding, and motion while using official feedback, tool details, file cards, and file links. It also fixes process content staying expanded after auto-folding is re-enabled. See the [official integration notes](docs/official-rendering-bridge.md) for coverage and upgrade checks.
|
|
32
|
+
|
|
33
|
+
From a local checkout or tarball (development/local testing):
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
dsh plugin --profile web add ./dsh-better-display
|
|
37
|
+
dsh plugin --profile web add ./dsh-better-display-0.3.3.tgz
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`dsh.bundle` is captured at Host boot. Do not also insert the same row by hand in the profile `cordis.patch.yml`, or it will mount twice.
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
dsh plugin --profile web remove dsh-better-display
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Develop
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
npm test
|
|
50
|
+
npm run typecheck
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## License
|
|
54
|
+
|
|
55
|
+
Display and Markdown pieces come from DeepSeek Harness (MIT). Motion is based on [Transitions.dev](https://transitions.dev/). This repo is [MIT](LICENSE).
|
package/README.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# dsh-better-display
|
|
2
|
+
|
|
3
|
+
[English](./README.en.md)
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
### DSH Studio 桌面 App(推荐)
|
|
8
|
+
|
|
9
|
+
打开 **设置 → 插件 → 添加插件**,在“包名或地址”中输入:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
github:aa2246740/dsh-better-display#v0.3.3
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
桌面端的插件管理器负责 Desktop profile 和其内置包管理器。本发布已包含编译好的 `lib/`;普通使用不需要 clone、构建或安装 DSHX。若应用在安装完成后提示刷新或重新打开,请按提示完成。
|
|
16
|
+
|
|
17
|
+
### Web CLI
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
dsh plugin --profile web add github:aa2246740/dsh-better-display#v0.3.3
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
这条官方 CLI 命令只写入 `web` profile,不能修改 Desktop App 的 profile。对于已经运行的 Web Host,请重新打开该 Host 一次,再刷新网页;插件 bundle 会在启动时读取。
|
|
24
|
+
|
|
25
|
+
给 DeepSeek Harness 加一个 **阅读** 页签:执行时能看到步骤、思考和进度;整轮成功结束后把过程收起来,留下最终回答。原版「对话 / 轨迹」、输入框、模型选择、工具和审批都还在。阅读列保留宿主 ChatView 的 `data-chat-flow` 钩子,依赖该标记显示输入框的第三方皮肤不会把阅读页当成仅检视视图。
|
|
26
|
+
|
|
27
|
+
最终回答里的 ````mcp-app` 代码块会在阅读视图里挂成交互卡片,跑在 `<iframe sandbox="allow-scripts allow-forms">` 里,没有 `allow-same-origin`。卡片可以通过 JSON-RPC 把下一轮 prompt 填进输入框。技能包在 [`skills/generative-mcpapps/`](skills/generative-mcpapps/)。设置里的 **Better Display** 可把产物改为右侧栏预览(默认仍用系统应用),打开半透明毛玻璃(默认关),设置过程自动折叠开关(默认开),并检测该技能是否已装进宿主技能目录。
|
|
28
|
+
|
|
29
|
+
面向 DeepSeek Harness **0.1.7-rc.2**。只改展示,不改 Agent 执行、SDK 或模型凭据。Node.js `^22.19.0 || >=24`。新会话默认进阅读。
|
|
30
|
+
|
|
31
|
+
**0.3.0** 保留现有阅读布局、折叠和动效,接入官方反馈、工具详情、文件卡片及文件链接;并修复重新开启自动折叠后仍保持展开的问题。接入范围和升级检查见 [官方能力接入说明](docs/official-rendering-bridge.md)。
|
|
32
|
+
|
|
33
|
+
本地目录或 tarball(开发/本地测试):
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
dsh plugin --profile web add ./dsh-better-display
|
|
37
|
+
dsh plugin --profile web add ./dsh-better-display-0.3.3.tgz
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`dsh.bundle` 是开机捕获的。不要再往 profile 的 `cordis.patch.yml` 手写同一条 insert,会重复挂载。
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
dsh plugin --profile web remove dsh-better-display
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 开发
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
npm test
|
|
50
|
+
npm run typecheck
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 许可
|
|
54
|
+
|
|
55
|
+
展示与 Markdown 部分来自 DeepSeek Harness(MIT)。动效参考 [Transitions.dev](https://transitions.dev/)。本仓库代码 [MIT](LICENSE)。
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
The MIT license in this repository covers original plugin code. It does not
|
|
4
|
+
replace third-party licenses or the Transitions.dev recipe terms below.
|
|
5
|
+
|
|
6
|
+
## Transitions.dev product-use terms
|
|
7
|
+
|
|
8
|
+
The three free recipes used in this DSH-specific display are Streaming text,
|
|
9
|
+
Thinking states and Reasoning stream, by Jakub Antalik / Transitions.dev.
|
|
10
|
+
They are incorporated into the actual conversation UI, not redistributed as a
|
|
11
|
+
standalone effects collection, template pack or component kit. No Pro assets,
|
|
12
|
+
website fonts, stock images, demo transcript or upstream CLI are included.
|
|
13
|
+
|
|
14
|
+
The upstream [Terms & License](https://transitions.dev/terms.html), last updated
|
|
15
|
+
July 2026 and checked on 2026-08-28, permit use, modification and shipment of
|
|
16
|
+
accessible recipes within personal or commercial products. They prohibit
|
|
17
|
+
republishing the collection or a substantial part as a competing effects
|
|
18
|
+
library, template pack or component kit. The upstream MIT license applies to
|
|
19
|
+
its tooling, **not** to the transition recipes. Retain this notice and consult
|
|
20
|
+
the upstream terms when redistributing or adapting the corresponding motion
|
|
21
|
+
portions of `Reader.module.css`, `motion.tsx` and `word-timeline.ts`.
|
|
22
|
+
|
|
23
|
+
## DeepSeek Harness native process presentation
|
|
24
|
+
|
|
25
|
+
`src/client/native` copies the native context rows, form-specific context bodies, reference icon and pure tool summary model. `upstream.json` records the source commit and each original hash. The only adaptations are public type imports, relative ESM suffixes and a local icon path. The MIT license below covers these files. No Host, model, SDK, Agent or tool execution source is included or modified.
|
|
26
|
+
|
|
27
|
+
## DeepSeek Harness Markdown renderer
|
|
28
|
+
|
|
29
|
+
`src/client/markdown` derives from DeepSeek Harness commit `b150a551b8d465e31e418e1b2eaf5e79bbb7d28e`. Changes add source-offset hooks for text leaves, literal HTML, inline code and atomic code-block entry, and keep source-offset keys on finalization. Native CodeBlock is reused through the public package API without changing its content renderer. Original file hashes are recorded in `upstream.json`.
|
|
30
|
+
|
|
31
|
+
MIT License
|
|
32
|
+
|
|
33
|
+
Copyright (c) 2026 DeepSeek
|
|
34
|
+
|
|
35
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
36
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
37
|
+
in the Software without restriction, including without limitation the rights
|
|
38
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
39
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
40
|
+
furnished to do so, subject to the following conditions:
|
|
41
|
+
|
|
42
|
+
The above copyright notice and this permission notice shall be included in all
|
|
43
|
+
copies or substantial portions of the Software.
|
|
44
|
+
|
|
45
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
46
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
47
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
48
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
49
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
50
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
51
|
+
SOFTWARE.
|
|
52
|
+
|
|
53
|
+
## Transitions.dev Streaming text
|
|
54
|
+
|
|
55
|
+
Motion recipe: https://github.com/Jakubantalik/transitions.dev/blob/ef497bb64867ce569689730198fc66f49db56317/cli/free/streaming-text.md
|
|
56
|
+
|
|
57
|
+
Author: Jakub Antalik. The public free recipe is presented for copying into projects. Opacity 0 to 1, blur 1px to 0, 350ms, 60ms gap and cubic-bezier(0.22,1,0.36,1) are used here. The live adapter animates only appended words rather than replaying existing paragraphs. No protected recipes were retrieved and no license for the entire upstream repository is asserted.
|
|
58
|
+
|
|
59
|
+
## Transitions.dev Thinking states
|
|
60
|
+
|
|
61
|
+
Author: Jakub Antalik. Source: the public [Thinking states recipe](https://github.com/Jakubantalik/transitions.dev/blob/ef497bb64867ce569689730198fc66f49db56317/cli/free/thinking-states.md). The scoped implementation retains its glyph-only `::before` sweep (2 seconds, 400% background), 150ms state transition, 50ms entry gap, 8px travel and 2px blur. DSH semantic colors replace fixed colors; real Host events replace the demo's timed state carousel. Hidden visual copies are excluded from accessibility, and interrupted/off/reduced/background states settle to the current label.
|
|
62
|
+
|
|
63
|
+
## Transitions.dev Reasoning stream
|
|
64
|
+
|
|
65
|
+
Author: Jakub Antalik. Source: the public [Reasoning stream recipe](https://github.com/Jakubantalik/transitions.dev/blob/ef497bb64867ce569689730198fc66f49db56317/cli/free/reasoning-stream.md). This adaptation retains the 28px viewport mask, 840ms cadence, 500ms cubic-bezier(0.22,1,0.36,1) CSS transform and fixed two-line steps, clamped only at the real transcript's current end. One real text tree replaces the demo's cloned loop. Body and tool phases do not prematurely stop the current step's motion; manual reading receives the painted offset through native scrolling, preserving selection and keyboard access. Bursts never increase the step distance. Reduced motion and closed historical turns remain static.
|