@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,71 @@
|
|
|
1
|
+
export function deliverableOpenModeOf(value) {
|
|
2
|
+
return value === 'sidebar' ? 'sidebar' : 'external';
|
|
3
|
+
}
|
|
4
|
+
export function modeFromSnapshot(store) {
|
|
5
|
+
try {
|
|
6
|
+
return deliverableOpenModeOf(store?.getSnapshot()?.deliverableOpenMode);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return 'external';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** Workspace-folder affordances stay on the OS opener, not the Sidebar switch. */
|
|
13
|
+
export function isFolderOpenPath(path) {
|
|
14
|
+
return path === '.' || path === '';
|
|
15
|
+
}
|
|
16
|
+
function isWindowsStylePath(value) {
|
|
17
|
+
return /^[A-Za-z]:[/\\]/.test(value) || value.startsWith('\\\\');
|
|
18
|
+
}
|
|
19
|
+
function isAbsoluteWorkspacePath(path) {
|
|
20
|
+
return path.startsWith('/') || isWindowsStylePath(path);
|
|
21
|
+
}
|
|
22
|
+
function encodeSegment(segment) {
|
|
23
|
+
return encodeURIComponent(segment).replace(/%3A/gi, ':');
|
|
24
|
+
}
|
|
25
|
+
function encodePath(path) {
|
|
26
|
+
return path.split('/').map(encodeSegment).join('/');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Session-scoped `dsh-resource://file/session/<id>/…` address.
|
|
30
|
+
* Matches official `fileAddressFor` / `sessionFileAddress` (0.1.5).
|
|
31
|
+
*/
|
|
32
|
+
export function fileAddressFor(sessionId, cwd, path) {
|
|
33
|
+
const normalized = path.replace(/\\/g, '/');
|
|
34
|
+
const address = (relative) => {
|
|
35
|
+
const cleaned = relative.replace(/\\/g, '/').replace(/^(?:\.\/)+/, '');
|
|
36
|
+
return `dsh-resource://file/session/${encodeSegment(sessionId)}/${encodePath(cleaned)}`;
|
|
37
|
+
};
|
|
38
|
+
if (!isAbsoluteWorkspacePath(normalized))
|
|
39
|
+
return address(normalized);
|
|
40
|
+
const root = cwd === undefined ? '' : cwd.replace(/\\/g, '/').replace(/\/+$/, '');
|
|
41
|
+
if (root !== '' && normalized === root)
|
|
42
|
+
return address('');
|
|
43
|
+
if (root !== '' && normalized.startsWith(`${root}/`))
|
|
44
|
+
return address(normalized.slice(root.length + 1));
|
|
45
|
+
return address(normalized);
|
|
46
|
+
}
|
|
47
|
+
export function resolveOpenWorkspacePath(cwd, path, resolveWorkspacePath) {
|
|
48
|
+
return isFolderOpenPath(path) ? (cwd ?? '.') : resolveWorkspacePath(cwd, path);
|
|
49
|
+
}
|
|
50
|
+
export async function openDeliverableFile(args) {
|
|
51
|
+
const targetPath = resolveOpenWorkspacePath(args.cwd, args.path, args.resolveWorkspacePath);
|
|
52
|
+
const useSidebar = args.mode === 'sidebar' && !isFolderOpenPath(args.path);
|
|
53
|
+
if (useSidebar) {
|
|
54
|
+
if (typeof args.openSidebar !== 'function') {
|
|
55
|
+
args.warn?.('[dsh-better-display] sidebarRight.openResource is not available; falling back to system app');
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
try {
|
|
59
|
+
const address = (args.fileAddressFor ?? fileAddressFor)(args.sessionId, args.cwd, args.path);
|
|
60
|
+
args.openSidebar(address);
|
|
61
|
+
return 'sidebar';
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
args.warn?.('[dsh-better-display] sidebar open failed; falling back to system app', error);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
await args.openExternal(targetPath);
|
|
69
|
+
return 'external';
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=open-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-file.js","sourceRoot":"","sources":["../../../src/client/open-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Official PendingSubmission.images is optional at runtime; text-only sends omit it. */
|
|
2
|
+
export interface PendingSubmissionImage {
|
|
3
|
+
readonly previewUrl: string;
|
|
4
|
+
readonly width?: number;
|
|
5
|
+
readonly height?: number;
|
|
6
|
+
readonly name?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface PendingSubmissionLike {
|
|
9
|
+
readonly images?: readonly PendingSubmissionImage[] | null;
|
|
10
|
+
readonly attachments?: readonly {
|
|
11
|
+
readonly type?: string;
|
|
12
|
+
readonly value?: PendingSubmissionImage;
|
|
13
|
+
}[] | null;
|
|
14
|
+
}
|
|
15
|
+
export interface PendingSubmissionEcho extends PendingSubmissionLike {
|
|
16
|
+
readonly requestId: string;
|
|
17
|
+
readonly text?: string;
|
|
18
|
+
readonly time?: number;
|
|
19
|
+
readonly placement?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function asReadonlyArray<T>(value: unknown): readonly T[];
|
|
22
|
+
/**
|
|
23
|
+
* Safe image list for conversation.view pending echoes.
|
|
24
|
+
* Official 0.1.5 uses `images`; older hosts used `attachments`.
|
|
25
|
+
* Either field may be missing — never read `.length` on undefined.
|
|
26
|
+
*/
|
|
27
|
+
export declare function pendingSubmissionImages(submission: PendingSubmissionLike | null | undefined): readonly PendingSubmissionImage[];
|
|
28
|
+
//# sourceMappingURL=pending-submission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-submission.d.ts","sourceRoot":"","sources":["../../../src/client/pending-submission.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAEzF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,sBAAsB,EAAE,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS;QAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC;KACzC,EAAE,GAAG,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC,EAAE,CAE/D;AAMD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,sBAAsB,EAAE,CAW/H"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Official PendingSubmission.images is optional at runtime; text-only sends omit it. */
|
|
2
|
+
export function asReadonlyArray(value) {
|
|
3
|
+
return Array.isArray(value) ? value : [];
|
|
4
|
+
}
|
|
5
|
+
function isImage(value) {
|
|
6
|
+
return value !== null && typeof value === 'object' && typeof value.previewUrl === 'string';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Safe image list for conversation.view pending echoes.
|
|
10
|
+
* Official 0.1.5 uses `images`; older hosts used `attachments`.
|
|
11
|
+
* Either field may be missing — never read `.length` on undefined.
|
|
12
|
+
*/
|
|
13
|
+
export function pendingSubmissionImages(submission) {
|
|
14
|
+
if (submission == null)
|
|
15
|
+
return [];
|
|
16
|
+
if (Array.isArray(submission.images))
|
|
17
|
+
return submission.images.filter(isImage);
|
|
18
|
+
if (Array.isArray(submission.attachments)) {
|
|
19
|
+
const images = [];
|
|
20
|
+
for (const item of submission.attachments) {
|
|
21
|
+
if (item?.type === 'image' && isImage(item.value))
|
|
22
|
+
images.push(item.value);
|
|
23
|
+
}
|
|
24
|
+
return images;
|
|
25
|
+
}
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=pending-submission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-submission.js","sourceRoot":"","sources":["../../../src/client/pending-submission.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAwBzF,MAAM,UAAU,eAAe,CAAI,KAAc;IAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAgC,CAAC,UAAU,KAAK,QAAQ,CAAC;AACzH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAAoD;IAC1F,IAAI,UAAU,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C,MAAM,MAAM,GAA6B,EAAE,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Web or Desktop file route. Authorization stays Host-side. */
|
|
2
|
+
export declare function localPathMediaUrl(protocol: string, origin: string, value: string): string | undefined;
|
|
3
|
+
export declare const readerPathImages: {
|
|
4
|
+
resolve: (value: string) => string | undefined;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=platform-media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-media.d.ts","sourceRoot":"","sources":["../../../src/client/platform-media.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUrG;AAED,eAAO,MAAM,gBAAgB;qBACV,MAAM;CAExB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Web or Desktop file route. Authorization stays Host-side. */
|
|
2
|
+
export function localPathMediaUrl(protocol, origin, value) {
|
|
3
|
+
if (!value.startsWith('/') || value.startsWith('//'))
|
|
4
|
+
return undefined;
|
|
5
|
+
if (protocol === 'http:' || protocol === 'https:') {
|
|
6
|
+
return `${origin}/api/file?path=${encodeURIComponent(value)}`;
|
|
7
|
+
}
|
|
8
|
+
// Official fileMediaUrl accepts the Desktop application base dsh-app://app/.
|
|
9
|
+
if (protocol === 'dsh-app:' && origin === 'dsh-app://app') {
|
|
10
|
+
return `dsh-app://app/api/file?path=${encodeURIComponent(value)}`;
|
|
11
|
+
}
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
export const readerPathImages = {
|
|
15
|
+
resolve: (value) => typeof window === 'undefined' ? undefined
|
|
16
|
+
: localPathMediaUrl(window.location.protocol, window.location.origin, value),
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=platform-media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-media.js","sourceRoot":"","sources":["../../../src/client/platform-media.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,MAAc,EAAE,KAAa;IAC/E,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACvE,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,GAAG,MAAM,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IAChE,CAAC;IACD,6EAA6E;IAC7E,IAAI,QAAQ,KAAK,UAAU,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC1D,OAAO,+BAA+B,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS;QACnE,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;CAC/E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DiffBlockLabels, JsonTreeLabels, MarkdownLabels, ReadBlockLabels, SearchBlockLabels, TerminalBlockLabels, WebBlockLabels } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
2
|
+
export declare const markdownLabels: MarkdownLabels;
|
|
3
|
+
export declare const readBlockLabels: ReadBlockLabels;
|
|
4
|
+
export declare const terminalBlockLabels: TerminalBlockLabels;
|
|
5
|
+
export declare const diffBlockLabels: DiffBlockLabels;
|
|
6
|
+
export declare const searchBlockLabels: SearchBlockLabels;
|
|
7
|
+
export declare const webBlockLabels: WebBlockLabels;
|
|
8
|
+
export declare const jsonTreeLabels: JsonTreeLabels;
|
|
9
|
+
export declare const truncatedJsonLabel: (total: number) => string;
|
|
10
|
+
//# sourceMappingURL=primitive-labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitive-labels.d.ts","sourceRoot":"","sources":["../../../src/client/primitive-labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACf,MAAM,uCAAuC,CAAC;AAE/C,eAAO,MAAM,cAAc,EAAE,cAG5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAK7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,mBAKjC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAI7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAK/B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,cAG5B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,cAI5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAAoC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export const markdownLabels = {
|
|
2
|
+
code: { copyLabel: '复制', copiedLabel: '已复制' },
|
|
3
|
+
footnotes: '脚注',
|
|
4
|
+
};
|
|
5
|
+
export const readBlockLabels = {
|
|
6
|
+
codeLabel: '代码', wrapLabel: '自动换行', unwrapLabel: '不换行',
|
|
7
|
+
window: (shown, total) => `显示 ${shown} / ${total} 行`,
|
|
8
|
+
copy: '复制', copied: '已复制', collapseAria: '收起文件内容',
|
|
9
|
+
expandAria: hidden => `展开其余 ${hidden} 行`, collapse: '收起', expand: hidden => `展开其余 ${hidden} 行`,
|
|
10
|
+
};
|
|
11
|
+
export const terminalBlockLabels = {
|
|
12
|
+
signal: signal => `信号 ${signal}`, exitCode: code => `退出码 ${code}`, noExitCode: '无退出码',
|
|
13
|
+
running: '执行中', failed: '失败', done: '已完成', copy: '复制', copied: '已复制',
|
|
14
|
+
noOutput: '没有输出', collapseAria: '收起命令输出', collapse: '收起',
|
|
15
|
+
expandAria: hidden => `展开其余 ${hidden} 行`, expand: hidden => `展开其余 ${hidden} 行`,
|
|
16
|
+
};
|
|
17
|
+
export const diffBlockLabels = {
|
|
18
|
+
codeLabel: '代码', wrapLabel: '自动换行', unwrapLabel: '不换行',
|
|
19
|
+
copy: '复制', copied: '已复制', collapseAria: '收起差异', collapse: '收起',
|
|
20
|
+
expandAria: hidden => `展开其余 ${hidden} 行`, expand: hidden => `展开其余 ${hidden} 行`,
|
|
21
|
+
};
|
|
22
|
+
export const searchBlockLabels = {
|
|
23
|
+
pathsSummary: (shown, total, truncated) => `${shown} / ${total} 个路径${truncated ? '(结果已截断)' : ''}`,
|
|
24
|
+
matchesSummary: (shown, total, files, truncated) => `${shown} / ${total} 处匹配 · ${files} 个文件${truncated ? '(结果已截断)' : ''}`,
|
|
25
|
+
copy: '复制', copied: '已复制', noResults: '没有结果', collapseAria: '收起搜索结果', collapse: '收起',
|
|
26
|
+
expandAria: hidden => `展开其余 ${hidden} 行`, expand: hidden => `展开其余 ${hidden} 行`,
|
|
27
|
+
};
|
|
28
|
+
export const webBlockLabels = {
|
|
29
|
+
noResults: '没有结果', sourcesTruncated: '来源已截断', http: 'HTTP', contentTruncated: '内容已截断',
|
|
30
|
+
markdown: markdownLabels,
|
|
31
|
+
};
|
|
32
|
+
export const jsonTreeLabels = {
|
|
33
|
+
copyValue: '复制值', copyJson: '复制 JSON', copyPath: '复制路径', copyPrettyJson: '复制格式化 JSON',
|
|
34
|
+
copyCompactJson: '复制紧凑 JSON', copied: '已复制', copyFailed: '复制失败', collapseNode: '收起节点',
|
|
35
|
+
expandNode: '展开节点', copyButtonTitle: action => action,
|
|
36
|
+
};
|
|
37
|
+
export const truncatedJsonLabel = (total) => `内容过长,已截断(共 ${total} 个字符)`;
|
|
38
|
+
//# sourceMappingURL=primitive-labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitive-labels.js","sourceRoot":"","sources":["../../../src/client/primitive-labels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { AssistantBlock, ToolCallBlock, TurnLocation } from '@deepseek-ai/dsh-client-ui-conversation/client';
|
|
2
|
+
import type { AssistantChatData, ChatConversationViewNode } from '@deepseek-ai/dsh-client-ui-chat/client';
|
|
3
|
+
export interface ReaderGroup {
|
|
4
|
+
key: string;
|
|
5
|
+
turn: number | null;
|
|
6
|
+
keys: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export interface TurnBoundary {
|
|
9
|
+
status: 'open' | 'closed' | 'unknown';
|
|
10
|
+
reason: string | null;
|
|
11
|
+
latestStep: number;
|
|
12
|
+
closingStep: number | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function groupNodes(order: readonly string[], get: (key: string) => ChatConversationViewNode | undefined): ReaderGroup[];
|
|
15
|
+
export declare function boundaryOf(turn: TurnLocation | undefined): TurnBoundary;
|
|
16
|
+
export declare function isEarlierNarration(data: AssistantChatData, boundary: TurnBoundary): boolean;
|
|
17
|
+
export declare function processExpanded(choice: boolean | undefined, boundary: TurnBoundary): boolean;
|
|
18
|
+
/** Reading while running must not pin the process open after completion. */
|
|
19
|
+
export declare function processChoiceKey(groupKey: string, boundary: TurnBoundary): string;
|
|
20
|
+
/** A body-only assistant step is not a thinking/process disclosure. */
|
|
21
|
+
export declare function hasProcessContent(node: ChatConversationViewNode | undefined, boundary: TurnBoundary): boolean;
|
|
22
|
+
export declare function hasVisibleBody(blocks: readonly AssistantBlock[]): boolean;
|
|
23
|
+
/** Keep native block order. In particular, never lift a later Think above text. */
|
|
24
|
+
export declare function assistantSegments(blocks: readonly AssistantBlock[]): {
|
|
25
|
+
kind: 'reasoning' | 'body';
|
|
26
|
+
start: number;
|
|
27
|
+
blocks: AssistantBlock[];
|
|
28
|
+
}[];
|
|
29
|
+
export declare function toolFailed(block: ToolCallBlock): boolean;
|
|
30
|
+
export declare function toolName(block: ToolCallBlock): string;
|
|
31
|
+
export declare function terminalLabel(reason: string | null): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Extract the first usable fork anchor seq from candidate message nodes.
|
|
34
|
+
* Only the durable closing message seq cuts the intended turn prefix: an
|
|
35
|
+
* absent anchor must surface as undefined (never as 0 or NaN), because the
|
|
36
|
+
* host treats a missing atSeq as a whole-session fork.
|
|
37
|
+
*/
|
|
38
|
+
export declare function forkAnchorSeq(candidates: ReadonlyArray<{
|
|
39
|
+
seq?: unknown;
|
|
40
|
+
} | null | undefined>): number | undefined;
|
|
41
|
+
//# sourceMappingURL=projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/client/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAClH,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAG1G,MAAM,WAAW,WAAW;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AAC1F,MAAM,WAAW,YAAY;IAAG,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAG9I,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,GAAG,WAAW,EAAE,CAgB9H;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,YAAY,CAOvE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAK3F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE5F;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEjF;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAS7G;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,OAAO,CAEzE;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG;IAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,EAAE,CAAA;CAAE,EAAE,CAa9I;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAExD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAErD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAUlE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,aAAa,CAAC;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC,GAC9D,MAAM,GAAG,SAAS,CAMpB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { activityPhase } from './tool-activity.js';
|
|
2
|
+
// Run on structural publication, not on each text delta. Node seats subscribe by key.
|
|
3
|
+
export function groupNodes(order, get) {
|
|
4
|
+
const groups = [];
|
|
5
|
+
const seenTurns = new Set();
|
|
6
|
+
for (const key of order) {
|
|
7
|
+
const node = get(key);
|
|
8
|
+
if (!node || node.visibility === 'hidden')
|
|
9
|
+
continue;
|
|
10
|
+
const turn = node.location.kind === 'step' || node.location.kind === 'turn' ? node.location.turn.turn : null;
|
|
11
|
+
const previous = groups.at(-1);
|
|
12
|
+
if (turn !== null && previous?.turn === turn) {
|
|
13
|
+
previous.keys.push(key);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
groups.push({ key: turn === null ? `node:${key}` : seenTurns.has(turn) ? `turn:${turn}:${key}` : `turn:${turn}`, turn, keys: [key] });
|
|
17
|
+
if (turn !== null)
|
|
18
|
+
seenTurns.add(turn);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return groups;
|
|
22
|
+
}
|
|
23
|
+
export function boundaryOf(turn) {
|
|
24
|
+
return {
|
|
25
|
+
status: turn?.status ?? 'unknown',
|
|
26
|
+
reason: turn?.end?.data.reason.kind ?? null,
|
|
27
|
+
latestStep: turn?.steps.at(-1)?.step ?? -1,
|
|
28
|
+
closingStep: turn?.data.get('turn-tail')?.closing?.step ?? null,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function isEarlierNarration(data, boundary) {
|
|
32
|
+
// New body text, a tool call, or a settled step is not a completed turn.
|
|
33
|
+
if (data.status !== 'settled' || boundary.status !== 'closed' || boundary.reason !== 'completed')
|
|
34
|
+
return false;
|
|
35
|
+
if (data.blocks.some(block => block.kind === 'image' || block.kind === 'other'))
|
|
36
|
+
return false;
|
|
37
|
+
return boundary.closingStep !== null && data.step < boundary.closingStep;
|
|
38
|
+
}
|
|
39
|
+
export function processExpanded(choice, boundary) {
|
|
40
|
+
return choice ?? !(boundary.status === 'closed' && boundary.reason === 'completed');
|
|
41
|
+
}
|
|
42
|
+
/** Reading while running must not pin the process open after completion. */
|
|
43
|
+
export function processChoiceKey(groupKey, boundary) {
|
|
44
|
+
return `${groupKey}:${boundary.status}:${boundary.reason ?? 'pending'}`;
|
|
45
|
+
}
|
|
46
|
+
/** A body-only assistant step is not a thinking/process disclosure. */
|
|
47
|
+
export function hasProcessContent(node, boundary) {
|
|
48
|
+
if (!node || node.visibility === 'hidden')
|
|
49
|
+
return false;
|
|
50
|
+
if (node.kind === 'assistant-step') {
|
|
51
|
+
const data = node.data;
|
|
52
|
+
return data.blocks.some(block => block.kind === 'reasoning' && block.text.trim() !== '')
|
|
53
|
+
|| (isEarlierNarration(data, boundary) && hasVisibleBody(data.blocks));
|
|
54
|
+
}
|
|
55
|
+
return node.kind === 'context' || node.kind === 'model-retry' || node.kind === 'system-prompt' || node.kind === 'turn-process'
|
|
56
|
+
|| node.kind === 'command' || node.kind === 'manual-compaction' || node.kind === 'compaction';
|
|
57
|
+
}
|
|
58
|
+
export function hasVisibleBody(blocks) {
|
|
59
|
+
return blocks.some(block => block.kind === 'image' || block.kind === 'other' || (block.kind === 'text' && block.text.trim() !== ''));
|
|
60
|
+
}
|
|
61
|
+
/** Keep native block order. In particular, never lift a later Think above text. */
|
|
62
|
+
export function assistantSegments(blocks) {
|
|
63
|
+
const segments = [];
|
|
64
|
+
let previous;
|
|
65
|
+
blocks.forEach((block, index) => {
|
|
66
|
+
if (block.kind === 'tool-call') {
|
|
67
|
+
previous = undefined;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const kind = block.kind === 'reasoning' ? 'reasoning' : 'body';
|
|
71
|
+
if (previous?.kind === kind)
|
|
72
|
+
previous.blocks.push(block);
|
|
73
|
+
else {
|
|
74
|
+
previous = { kind, start: index, blocks: [block] };
|
|
75
|
+
segments.push(previous);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return segments;
|
|
79
|
+
}
|
|
80
|
+
export function toolFailed(block) {
|
|
81
|
+
return activityPhase({ block }) === 'failed';
|
|
82
|
+
}
|
|
83
|
+
export function toolName(block) {
|
|
84
|
+
return 'kind' in block ? block.call?.name ?? '工具调用' : block.name;
|
|
85
|
+
}
|
|
86
|
+
export function terminalLabel(reason) {
|
|
87
|
+
switch (reason) {
|
|
88
|
+
case 'completed': return null;
|
|
89
|
+
case 'aborted':
|
|
90
|
+
case 'interrupted': return '本轮已停止,已生成的内容仍保留。';
|
|
91
|
+
case 'blocked': return '本轮需要处理阻塞事项;请查看原对话与下方操作区。';
|
|
92
|
+
case 'max-tokens': return '输出达到本轮长度限制,内容可能尚未完整。';
|
|
93
|
+
case 'error': return '本轮未完成;错误信息保留在下方。';
|
|
94
|
+
case null: return null;
|
|
95
|
+
default: return `本轮结束状态:${reason}。请在原对话中核对完整记录。`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Extract the first usable fork anchor seq from candidate message nodes.
|
|
100
|
+
* Only the durable closing message seq cuts the intended turn prefix: an
|
|
101
|
+
* absent anchor must surface as undefined (never as 0 or NaN), because the
|
|
102
|
+
* host treats a missing atSeq as a whole-session fork.
|
|
103
|
+
*/
|
|
104
|
+
export function forkAnchorSeq(candidates) {
|
|
105
|
+
for (const candidate of candidates) {
|
|
106
|
+
const seq = candidate?.seq;
|
|
107
|
+
if (typeof seq === 'number' && Number.isFinite(seq))
|
|
108
|
+
return seq;
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/client/projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Transitions.dev Reasoning stream, adapted to appended content, never a loop. */
|
|
2
|
+
export declare const REASON_HOLD = 840;
|
|
3
|
+
export declare const REASON_STEP = 500;
|
|
4
|
+
export declare const REASON_LINES = 2;
|
|
5
|
+
/** Ceiling on how much text one catch-up step may cover. */
|
|
6
|
+
export declare const REASON_MAX_LINES = 40;
|
|
7
|
+
/** Beat between catch-up steps, while the transcript is still well behind. */
|
|
8
|
+
export declare const REASON_CHASE_HOLD = 40;
|
|
9
|
+
export declare function reasoningTarget(top: number, contentHeight: number, viewportHeight: number, lineHeight: number, backlogLines?: number): number;
|
|
10
|
+
//# sourceMappingURL=reasoning-follow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-follow.d.ts","sourceRoot":"","sources":["../../../src/client/reasoning-follow.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,SAAI,GACf,MAAM,CAWR"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Transitions.dev Reasoning stream, adapted to appended content, never a loop. */
|
|
2
|
+
export const REASON_HOLD = 840;
|
|
3
|
+
export const REASON_STEP = 500;
|
|
4
|
+
export const REASON_LINES = 2;
|
|
5
|
+
/** Ceiling on how much text one catch-up step may cover. */
|
|
6
|
+
export const REASON_MAX_LINES = 40;
|
|
7
|
+
/** Beat between catch-up steps, while the transcript is still well behind. */
|
|
8
|
+
export const REASON_CHASE_HOLD = 40;
|
|
9
|
+
export function reasoningTarget(top, contentHeight, viewportHeight, lineHeight, backlogLines = 0) {
|
|
10
|
+
const end = Math.max(0, contentHeight - viewportHeight);
|
|
11
|
+
const current = Math.min(end, Math.max(0, top));
|
|
12
|
+
// `backlogLines` is how far the newest text sits below what is painted. The
|
|
13
|
+
// reference step size is a reading pace: two lines, then a hold. That pace is
|
|
14
|
+
// far slower than a fast model writes, so the viewport used to crawl behind in
|
|
15
|
+
// fixed hops no matter how quickly the text arrived. Covering the backlog in
|
|
16
|
+
// one step keeps the newest line with the text instead; a model that writes at
|
|
17
|
+
// or below the reading pace still leaves the backlog at two lines, unchanged.
|
|
18
|
+
const lines = Math.max(REASON_LINES, Math.min(REASON_MAX_LINES, Math.ceil(backlogLines)));
|
|
19
|
+
return Math.min(end, current + Math.max(1, lineHeight) * lines);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=reasoning-follow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-follow.js","sourceRoot":"","sources":["../../../src/client/reasoning-follow.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,aAAqB,EACrB,cAAsB,EACtB,UAAkB,EAClB,YAAY,GAAG,CAAC;IAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAChD,4EAA4E;IAC5E,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,+EAA+E;IAC/E,8EAA8E;IAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-address.d.ts","sourceRoot":"","sources":["../../../src/client/resource-address.ts"],"names":[],"mappings":"AAuBA,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASpG"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `dsh-resource://file/…` address the right-hand panel opens by.
|
|
3
|
+
*
|
|
4
|
+
* The workspace-path helper that builds this is not exported by every version
|
|
5
|
+
* of the package this plugin compiles against, so the grammar is spelled out
|
|
6
|
+
* here: a path inside the Session's workspace is addressed by its
|
|
7
|
+
* workspace-relative spelling, and one outside it keeps its absolute path.
|
|
8
|
+
*/
|
|
9
|
+
const PREFIX = 'dsh-resource://file/';
|
|
10
|
+
/** One id or path segment, keeping `:` so a drive letter stays readable. */
|
|
11
|
+
function encodeSegment(segment) {
|
|
12
|
+
return encodeURIComponent(segment).replace(/%3A/gi, ':');
|
|
13
|
+
}
|
|
14
|
+
function encodePath(path) {
|
|
15
|
+
return path.split('/').map(encodeSegment).join('/');
|
|
16
|
+
}
|
|
17
|
+
function isAbsolute(path) {
|
|
18
|
+
return path.startsWith('/') || /^[A-Za-z]:\//.test(path);
|
|
19
|
+
}
|
|
20
|
+
/** Address one file for the given Session, relative to that Session's workspace. */
|
|
21
|
+
export function fileResourceAddress(sessionId, cwd, path) {
|
|
22
|
+
const normalized = path.replace(/\\/g, '/');
|
|
23
|
+
let relative = normalized;
|
|
24
|
+
if (isAbsolute(normalized) && cwd) {
|
|
25
|
+
const root = cwd.replace(/\\/g, '/').replace(/\/+$/, '');
|
|
26
|
+
if (root !== '' && normalized === root)
|
|
27
|
+
relative = '';
|
|
28
|
+
else if (root !== '' && normalized.startsWith(`${root}/`))
|
|
29
|
+
relative = normalized.slice(root.length + 1);
|
|
30
|
+
}
|
|
31
|
+
return `${PREFIX}session/${encodeSegment(sessionId)}/${encodePath(relative)}`;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=resource-address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-address.js","sourceRoot":"","sources":["../../../src/client/resource-address.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,GAAG,sBAAsB,CAAC;AAEtC,4EAA4E;AAC5E,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,GAAuB,EAAE,IAAY;IAC1F,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5C,IAAI,QAAQ,GAAG,UAAU,CAAC;IAC1B,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzD,IAAI,IAAI,KAAK,EAAE,IAAI,UAAU,KAAK,IAAI;YAAE,QAAQ,GAAG,EAAE,CAAC;aACjD,IAAI,IAAI,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC;YAAE,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,GAAG,MAAM,WAAW,aAAa,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;AAChF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type SettingsCopyKey = 'nav' | 'openTitle' | 'openDescription' | 'glassTitle' | 'glassDescription' | 'bubbleTitle' | 'bubbleDescription' | 'foldTitle' | 'foldDescription' | 'foldNone' | 'foldStandard' | 'foldSummary' | 'skillTitle' | 'skillInstalled' | 'skillMissing' | 'skillPurpose' | 'skillPluginNote' | 'skillInstall' | 'skillRecheck' | 'skillChecking' | 'skillUnavailable';
|
|
2
|
+
export type SettingsCopy = Record<SettingsCopyKey, string>;
|
|
3
|
+
export declare const en: SettingsCopy;
|
|
4
|
+
export declare const zh: SettingsCopy;
|
|
5
|
+
export declare function settingsLanguage(tag: string | undefined): 'zh' | 'en';
|
|
6
|
+
export declare function settingsCopyFor(tag: string | undefined): SettingsCopy;
|
|
7
|
+
//# sourceMappingURL=settings-copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-copy.d.ts","sourceRoot":"","sources":["../../../src/client/settings-copy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB,KAAK,GACL,WAAW,GACX,iBAAiB,GACjB,YAAY,GACZ,kBAAkB,GAClB,aAAa,GACb,mBAAmB,GACnB,WAAW,GACX,iBAAiB,GACjB,UAAU,GACV,cAAc,GACd,aAAa,GACb,YAAY,GACZ,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,cAAc,GACd,eAAe,GACf,kBAAkB,CAAC;AAEvB,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAE3D,eAAO,MAAM,EAAE,EAAE,YAsBhB,CAAC;AAEF,eAAO,MAAM,EAAE,EAAE,YAsBhB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAErE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAErE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export const en = {
|
|
2
|
+
nav: 'Better Display',
|
|
3
|
+
openTitle: 'Open deliverables in built-in panel',
|
|
4
|
+
openDescription: 'Off by default: chips and inline file mentions open in the system app. Turn this on to preview them in the right Sidebar, matching official chat. Reveal and folder actions still use the system file manager.',
|
|
5
|
+
glassTitle: 'Translucent frosted glass',
|
|
6
|
+
glassDescription: 'Off by default: reading chrome stays opaque, matching the current Host look. Turn this on to let wallpaper and skins show through the panel; path and count chips stay clear until hover or focus.',
|
|
7
|
+
bubbleTitle: 'Message bubbles',
|
|
8
|
+
bubbleDescription: 'On by default: final answers sit in a rounded bubble that separates them from the background, translucent in frosted-glass mode. Turn this off to lay answers flat on the page.',
|
|
9
|
+
foldTitle: 'Auto-fold process',
|
|
10
|
+
foldDescription: 'Default on: collapses earlier steps when new thoughts appear. Turn off to keep all thinking and tools expanded in full.',
|
|
11
|
+
foldNone: 'Off',
|
|
12
|
+
foldStandard: 'On',
|
|
13
|
+
foldSummary: 'Summary',
|
|
14
|
+
skillTitle: 'generative-mcpapps skill',
|
|
15
|
+
skillInstalled: 'Installed',
|
|
16
|
+
skillMissing: 'Not detected',
|
|
17
|
+
skillPurpose: 'This install is for model auto-selection of MCP Apps. Reader already renders mcp-app fences when the model emits them.',
|
|
18
|
+
skillPluginNote: 'Shipping the pack inside this plugin repository does not install it into the harness skill catalog.',
|
|
19
|
+
skillInstall: 'Copy the whole generative-mcpapps folder (including references and examples) into .dsh/skills or .agents/skills — in your home or the project, you choose — then Re-check. There is no one-click install that works on every host.',
|
|
20
|
+
skillRecheck: 'Re-check',
|
|
21
|
+
skillChecking: 'Checking…',
|
|
22
|
+
skillUnavailable: 'Could not query the host skill catalog. Copy into .dsh/skills or .agents/skills (home or project), then Re-check.',
|
|
23
|
+
};
|
|
24
|
+
export const zh = {
|
|
25
|
+
nav: 'Better Display',
|
|
26
|
+
openTitle: '在内置面板中打开产物',
|
|
27
|
+
openDescription: '默认关闭:产物芯片和正文中的文件提及会用系统应用打开。打开后与官方对话一致,在右侧栏预览。访达 / 资源管理器中的显示与打开所在文件夹不受此开关控制。',
|
|
28
|
+
glassTitle: '半透明毛玻璃',
|
|
29
|
+
glassDescription: '默认关闭:阅读栏保持不透明,和现在的 Host 观感一致。打开后透出宿主壁纸与皮肤;路径、行数等标签静止时透明,悬停或聚焦才显出轮廓。',
|
|
30
|
+
bubbleTitle: '消息气泡',
|
|
31
|
+
bubbleDescription: '默认开启:最终回答放进圆角气泡,与页面背景区分;毛玻璃模式下呈半透明。关闭后回答平铺在页面上。',
|
|
32
|
+
foldTitle: '自动折叠过程',
|
|
33
|
+
foldDescription: '默认开启:新思考产生时自动折叠此前步骤。关闭后全程展开,完整保留原始思考与工具流。',
|
|
34
|
+
foldNone: '关闭',
|
|
35
|
+
foldStandard: '开启',
|
|
36
|
+
foldSummary: '摘要',
|
|
37
|
+
skillTitle: 'generative-mcpapps 技能',
|
|
38
|
+
skillInstalled: '已安装',
|
|
39
|
+
skillMissing: '未检测到',
|
|
40
|
+
skillPurpose: '这项安装是为了让模型自动选用 MCP Apps。阅读页在模型写出 mcp-app 代码块时已经会渲染,不依赖该技能是否装进宿主。',
|
|
41
|
+
skillPluginNote: '技能包只出现在本插件仓库里,并不等于当前 Agent 已经加载它。',
|
|
42
|
+
skillInstall: '把完整的 generative-mcpapps 文件夹(含 references 与 examples)复制到 .dsh/skills 或 .agents/skills(家目录或项目目录,由你选),然后重新检测。没有在所有宿主上都可用的一键安装。',
|
|
43
|
+
skillRecheck: '重新检测',
|
|
44
|
+
skillChecking: '正在检测…',
|
|
45
|
+
skillUnavailable: '无法查询宿主技能目录。请复制到 .dsh/skills 或 .agents/skills(家目录或项目),再重新检测。',
|
|
46
|
+
};
|
|
47
|
+
export function settingsLanguage(tag) {
|
|
48
|
+
return (tag ?? '').toLowerCase().startsWith('zh') ? 'zh' : 'en';
|
|
49
|
+
}
|
|
50
|
+
export function settingsCopyFor(tag) {
|
|
51
|
+
return settingsLanguage(tag) === 'zh' ? zh : en;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=settings-copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-copy.js","sourceRoot":"","sources":["../../../src/client/settings-copy.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,EAAE,GAAiB;IAC9B,GAAG,EAAE,gBAAgB;IACrB,SAAS,EAAE,qCAAqC;IAChD,eAAe,EAAE,gNAAgN;IACjO,UAAU,EAAE,2BAA2B;IACvC,gBAAgB,EAAE,oMAAoM;IACtN,WAAW,EAAE,iBAAiB;IAC9B,iBAAiB,EAAE,iLAAiL;IACpM,SAAS,EAAE,mBAAmB;IAC9B,eAAe,EAAE,yHAAyH;IAC1I,QAAQ,EAAE,KAAK;IACf,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,0BAA0B;IACtC,cAAc,EAAE,WAAW;IAC3B,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,wHAAwH;IACtI,eAAe,EAAE,qGAAqG;IACtH,YAAY,EAAE,oOAAoO;IAClP,YAAY,EAAE,UAAU;IACxB,aAAa,EAAE,WAAW;IAC1B,gBAAgB,EAAE,mHAAmH;CACtI,CAAC;AAEF,MAAM,CAAC,MAAM,EAAE,GAAiB;IAC9B,GAAG,EAAE,gBAAgB;IACrB,SAAS,EAAE,YAAY;IACvB,eAAe,EAAE,6EAA6E;IAC9F,UAAU,EAAE,QAAQ;IACpB,gBAAgB,EAAE,qEAAqE;IACvF,WAAW,EAAE,MAAM;IACnB,iBAAiB,EAAE,iDAAiD;IACpE,SAAS,EAAE,QAAQ;IACnB,eAAe,EAAE,2CAA2C;IAC5D,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,uBAAuB;IACnC,cAAc,EAAE,KAAK;IACrB,YAAY,EAAE,MAAM;IACpB,YAAY,EAAE,kEAAkE;IAChF,eAAe,EAAE,mCAAmC;IACpD,YAAY,EAAE,6HAA6H;IAC3I,YAAY,EAAE,MAAM;IACpB,aAAa,EAAE,OAAO;IACtB,gBAAgB,EAAE,6DAA6D;CAChF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,GAAuB;IACtD,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAuB;IACrD,OAAO,gBAAgB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Community-plugin SlotMap merge for Settings pages.
|
|
3
|
+
* Official plugins import `@deepseek-ai/dsh-client-ui-settings/client` instead.
|
|
4
|
+
* Shape matches that package's `settings.section` (list / root / close).
|
|
5
|
+
*/
|
|
6
|
+
import type { SettingsCopyKey } from './settings-copy.js';
|
|
7
|
+
export interface SettingsSectionOwnerProps {
|
|
8
|
+
/** Close the settings panel (the shell owns the open state). */
|
|
9
|
+
close: () => void;
|
|
10
|
+
}
|
|
11
|
+
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
12
|
+
interface SlotMap {
|
|
13
|
+
'settings.section': {
|
|
14
|
+
kind: 'list';
|
|
15
|
+
scope: 'root';
|
|
16
|
+
owner: SettingsSectionOwnerProps;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
interface LocaleNamespaceMap {
|
|
20
|
+
'better-display': SettingsCopyKey;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=settings-slots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-slots.d.ts","sourceRoot":"","sources":["../../../src/client/settings-slots.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,WAAW,yBAAyB;IACxC,gEAAgE;IAChE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,OAAO;QACf,kBAAkB,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,yBAAyB,CAAA;SAAE,CAAC;KACvF;IACD,UAAU,kBAAkB;QAC1B,gBAAgB,EAAE,eAAe,CAAC;KACnC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-slots.js","sourceRoot":"","sources":["../../../src/client/settings-slots.ts"],"names":[],"mappings":""}
|