dsh-better-display 0.1.1 → 0.2.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.
Files changed (169) hide show
  1. package/CHANGELOG.md +177 -4
  2. package/README.en.md +17 -3
  3. package/README.md +17 -3
  4. package/lib/client.js +42319 -41533
  5. package/lib/client.js.map +1 -1
  6. package/lib/dsh-better-display.js +51 -55
  7. package/lib/types/client/Blocks.d.ts +4 -1
  8. package/lib/types/client/Blocks.d.ts.map +1 -1
  9. package/lib/types/client/Blocks.js +11 -4
  10. package/lib/types/client/Blocks.js.map +1 -1
  11. package/lib/types/client/ChoreographedFlow.d.ts.map +1 -1
  12. package/lib/types/client/ChoreographedFlow.js +68 -20
  13. package/lib/types/client/ChoreographedFlow.js.map +1 -1
  14. package/lib/types/client/ClosedProcessSummary.d.ts.map +1 -1
  15. package/lib/types/client/ClosedProcessSummary.js +3 -2
  16. package/lib/types/client/ClosedProcessSummary.js.map +1 -1
  17. package/lib/types/client/DiffPanel.d.ts +13 -0
  18. package/lib/types/client/DiffPanel.d.ts.map +1 -0
  19. package/lib/types/client/DiffPanel.js +115 -0
  20. package/lib/types/client/DiffPanel.js.map +1 -0
  21. package/lib/types/client/Reader.d.ts.map +1 -1
  22. package/lib/types/client/Reader.js +88 -54
  23. package/lib/types/client/Reader.js.map +1 -1
  24. package/lib/types/client/ReasoningCard.d.ts.map +1 -1
  25. package/lib/types/client/ReasoningCard.js +29 -8
  26. package/lib/types/client/ReasoningCard.js.map +1 -1
  27. package/lib/types/client/SettingsSection.d.ts +35 -0
  28. package/lib/types/client/SettingsSection.d.ts.map +1 -0
  29. package/lib/types/client/SettingsSection.js +62 -0
  30. package/lib/types/client/SettingsSection.js.map +1 -0
  31. package/lib/types/client/StickyLane.d.ts.map +1 -1
  32. package/lib/types/client/StickyLane.js +16 -5
  33. package/lib/types/client/StickyLane.js.map +1 -1
  34. package/lib/types/client/ToolActivity.d.ts.map +1 -1
  35. package/lib/types/client/ToolActivity.js +53 -5
  36. package/lib/types/client/ToolActivity.js.map +1 -1
  37. package/lib/types/client/WaitClock.d.ts +16 -0
  38. package/lib/types/client/WaitClock.d.ts.map +1 -0
  39. package/lib/types/client/WaitClock.js +29 -0
  40. package/lib/types/client/WaitClock.js.map +1 -0
  41. package/lib/types/client/WaitingClock.d.ts +15 -0
  42. package/lib/types/client/WaitingClock.d.ts.map +1 -0
  43. package/lib/types/client/WaitingClock.js +30 -0
  44. package/lib/types/client/WaitingClock.js.map +1 -0
  45. package/lib/types/client/WaitingStatus.d.ts.map +1 -1
  46. package/lib/types/client/WaitingStatus.js +4 -14
  47. package/lib/types/client/WaitingStatus.js.map +1 -1
  48. package/lib/types/client/fold-choreography.d.ts +12 -0
  49. package/lib/types/client/fold-choreography.d.ts.map +1 -1
  50. package/lib/types/client/fold-choreography.js +18 -1
  51. package/lib/types/client/fold-choreography.js.map +1 -1
  52. package/lib/types/client/fold-intensity.d.ts +9 -0
  53. package/lib/types/client/fold-intensity.d.ts.map +1 -0
  54. package/lib/types/client/fold-intensity.js +25 -0
  55. package/lib/types/client/fold-intensity.js.map +1 -0
  56. package/lib/types/client/index.d.ts.map +1 -1
  57. package/lib/types/client/index.js +68 -16
  58. package/lib/types/client/index.js.map +1 -1
  59. package/lib/types/client/live-turn.d.ts.map +1 -1
  60. package/lib/types/client/live-turn.js +46 -0
  61. package/lib/types/client/live-turn.js.map +1 -1
  62. package/lib/types/client/motion.d.ts.map +1 -1
  63. package/lib/types/client/motion.js +89 -12
  64. package/lib/types/client/motion.js.map +1 -1
  65. package/lib/types/client/open-file.d.ts +6 -1
  66. package/lib/types/client/open-file.d.ts.map +1 -0
  67. package/lib/types/client/open-file.js +71 -0
  68. package/lib/types/client/open-file.js.map +1 -0
  69. package/lib/types/client/pending-submission.d.ts +28 -0
  70. package/lib/types/client/pending-submission.d.ts.map +1 -0
  71. package/lib/types/client/pending-submission.js +28 -0
  72. package/lib/types/client/pending-submission.js.map +1 -0
  73. package/lib/types/client/reasoning-follow.d.ts +5 -1
  74. package/lib/types/client/reasoning-follow.d.ts.map +1 -1
  75. package/lib/types/client/reasoning-follow.js +13 -4
  76. package/lib/types/client/reasoning-follow.js.map +1 -1
  77. package/lib/types/client/resource-address.d.ts +3 -0
  78. package/lib/types/client/resource-address.d.ts.map +1 -0
  79. package/lib/types/client/resource-address.js +33 -0
  80. package/lib/types/client/resource-address.js.map +1 -0
  81. package/lib/types/client/settings-copy.d.ts +3 -2
  82. package/lib/types/client/settings-copy.d.ts.map +1 -0
  83. package/lib/types/client/settings-copy.js +49 -0
  84. package/lib/types/client/settings-copy.js.map +1 -0
  85. package/lib/types/client/settings-slots.d.ts +7 -0
  86. package/lib/types/client/settings-slots.d.ts.map +1 -0
  87. package/lib/types/client/settings-slots.js +2 -0
  88. package/lib/types/client/settings-slots.js.map +1 -0
  89. package/lib/types/client/settings.d.ts +4 -0
  90. package/lib/types/client/settings.d.ts.map +1 -0
  91. package/lib/types/client/settings.js +60 -0
  92. package/lib/types/client/settings.js.map +1 -0
  93. package/lib/types/client/skill-status.d.ts +25 -0
  94. package/lib/types/client/skill-status.d.ts.map +1 -0
  95. package/lib/types/client/skill-status.js +44 -0
  96. package/lib/types/client/skill-status.js.map +1 -0
  97. package/lib/types/client/store.d.ts +14 -0
  98. package/lib/types/client/store.d.ts.map +1 -1
  99. package/lib/types/client/store.js +23 -2
  100. package/lib/types/client/store.js.map +1 -1
  101. package/lib/types/client/stream-buffer.d.ts +11 -3
  102. package/lib/types/client/stream-buffer.d.ts.map +1 -1
  103. package/lib/types/client/stream-buffer.js +39 -2
  104. package/lib/types/client/stream-buffer.js.map +1 -1
  105. package/lib/types/client/streaming.d.ts.map +1 -1
  106. package/lib/types/client/streaming.js +9 -2
  107. package/lib/types/client/streaming.js.map +1 -1
  108. package/lib/types/client/tool-activity.d.ts +46 -0
  109. package/lib/types/client/tool-activity.d.ts.map +1 -1
  110. package/lib/types/client/tool-activity.js +116 -0
  111. package/lib/types/client/tool-activity.js.map +1 -1
  112. package/lib/types/client/types.d.ts +15 -2
  113. package/lib/types/client/types.d.ts.map +1 -1
  114. package/lib/types/client/waiting-clock.d.ts +34 -2
  115. package/lib/types/client/waiting-clock.d.ts.map +1 -1
  116. package/lib/types/client/waiting-clock.js +62 -6
  117. package/lib/types/client/waiting-clock.js.map +1 -1
  118. package/lib/types/client/word-timeline.d.ts +4 -0
  119. package/lib/types/client/word-timeline.d.ts.map +1 -1
  120. package/lib/types/client/word-timeline.js +21 -2
  121. package/lib/types/client/word-timeline.js.map +1 -1
  122. package/lib/types/dsh-better-display.d.ts.map +1 -1
  123. package/lib/types/dsh-better-display.js +42 -2
  124. package/lib/types/dsh-better-display.js.map +1 -1
  125. package/lib/types/skill-roots.d.ts +22 -0
  126. package/lib/types/skill-roots.d.ts.map +1 -0
  127. package/lib/types/skill-roots.js +126 -0
  128. package/lib/types/skill-roots.js.map +1 -0
  129. package/lib/types/skill-status.d.ts +36 -0
  130. package/lib/types/skill-status.d.ts.map +1 -0
  131. package/lib/types/skill-status.js +51 -0
  132. package/lib/types/skill-status.js.map +1 -0
  133. package/package.json +1 -1
  134. package/src/client/Blocks.tsx +11 -4
  135. package/src/client/ChoreographedFlow.tsx +68 -18
  136. package/src/client/ClosedProcessSummary.tsx +6 -2
  137. package/src/client/DiffPanel.tsx +124 -0
  138. package/src/client/Reader.module.css +319 -6
  139. package/src/client/Reader.tsx +78 -42
  140. package/src/client/ReasoningCard.tsx +27 -6
  141. package/src/client/SettingsSection.module.css +37 -0
  142. package/src/client/SettingsSection.tsx +64 -6
  143. package/src/client/StickyLane.tsx +13 -3
  144. package/src/client/ToolActivity.tsx +70 -5
  145. package/src/client/WaitClock.tsx +33 -0
  146. package/src/client/WaitingStatus.tsx +6 -15
  147. package/src/client/fold-choreography.ts +18 -1
  148. package/src/client/fold-intensity.ts +28 -0
  149. package/src/client/index.tsx +28 -2
  150. package/src/client/live-turn.ts +43 -0
  151. package/src/client/motion.tsx +80 -15
  152. package/src/client/reasoning-follow.ts +20 -4
  153. package/src/client/settings-copy.ts +21 -0
  154. package/src/client/store.ts +40 -2
  155. package/src/client/stream-buffer.ts +38 -2
  156. package/src/client/streaming.tsx +9 -1
  157. package/src/client/tool-activity.ts +139 -0
  158. package/src/client/types.ts +18 -3
  159. package/src/client/waiting-clock.ts +64 -6
  160. package/src/client/word-timeline.ts +19 -2
  161. package/tests/fold-choreography.test.ts +16 -0
  162. package/tests/fold-intensity.test.ts +94 -0
  163. package/tests/footer-precedence.test.ts +129 -0
  164. package/tests/open-file.test.ts +11 -0
  165. package/tests/stock-install.test.ts +8 -0
  166. package/tests/stream-buffer.test.ts +8 -3
  167. package/tests/tool-diff.test.ts +57 -0
  168. package/tests/waiting-clock.test.ts +78 -19
  169. package/tests/word-timeline.test.ts +14 -4
package/CHANGELOG.md CHANGED
@@ -1,10 +1,183 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 0.2.1 — 2026-09-20
4
+
5
+ ### Fixed
6
+
7
+ - Pinned reader lanes no longer paint over the composer. The live status row
8
+ (`执行过程` / `正在使用工具`) pinned at the scrollport top with `z-index: 8`,
9
+ while the host's sticky composer seat owns `z-index: 7` and nothing between
10
+ the reader and `<body>` creates a stacking context. A scrolling reader clamps
11
+ every turn-level sticky lane down into the footer band — the lane stops at its
12
+ containing block's bottom, which passes behind the input card — so the reader
13
+ painted its own opaque plate over the composer.
14
+ - The live status lane now owns the measured lane under the toolbar, exactly
15
+ like the closed summary rows, instead of sharing the toolbar's lane.
16
+ - Lanes a scroll can clamp into the footer band stay below the composer seat
17
+ (`z-index` 6); only the top toolbar lane keeps 7, which also keeps it above
18
+ the host's code-block banners.
19
+ - Skin mode no longer carries a second lane ladder of its own.
20
+ - `tests/footer-precedence.test.ts` guards the ladder in the source sheet and
21
+ in the committed bundle.
22
+
23
+ ## 0.2.0 — 2026-09-18
24
+
25
+ ### Diff review and tool presentation
26
+
27
+ - Re-engineered diff review panel: line addition/deletion statistics (`+A -R`) are pushed
28
+ flush to the right margin, perfectly aligned on the same 32px baseline as the summary text.
29
+ - Diff overlay expands cleanly within the reading column (0px horizontal overflow) with
30
+ independent vertical scrolling (`max-height: 420px; overscroll-behavior: contain`),
31
+ preventing mouse-wheel events from leaking into the conversation stream.
32
+ - Multi-file tabs scroll horizontally with adaptive content height on file switches.
33
+ - PR #12 custom tool cards: delegate tool view rendering to `tool.call.toolview` slot with
34
+ error boundary isolation and auto-expand capabilities.
35
+
36
+ ### Translucent frosted glass and skin mode
37
+
38
+ - Translucent frosted glass mode is an opt-in toggle in Settings.
39
+ - When enabled, all card backgrounds, tool detail frames, and code blocks become translucent
40
+ with backdrop blur, eliminating opaque white patches and seamlessly adapting to third-party
41
+ wallpaper and window skins.
42
+
43
+ ### Refined folding and liveness
44
+
45
+ - Reverted to a single, intuitive auto-fold toggle (**自动折叠开 / 关**) on the reading toolbar
46
+ and in Settings, removing complex multi-level rules while keeping reasoning and tools
47
+ completely unfolded when turned off.
48
+ - Fixed line-wrapping bug so digest rows stay strictly single-line when space permits.
49
+ - Real-time wait clocks (`WaitClock`), execution time tracking, and token throughput
50
+ metrics (`TurnMetrics`) fully preserved and active.
51
+ - Animated disclosures include fallback timeouts to prevent rendering stalls.
52
+
53
+ ### Better Display settings
54
+
55
+ - Glass, auto-fold, and deliverable open-mode share the root `dsh.reader.v1` store so
56
+ Settings and the reading view stay in sync across refresh.
57
+ - Deliverable open-mode: default system app, optional Sidebar. Folder/reveal stay OS.
58
+ - Generative-mcpapps skill installation detection and status reporting.
59
+
60
+ ### Compatibility and liveness
61
+
62
+ - A wait now restarts when a tool returns. The handover set named kinds from the
63
+ conversation contract (`tool-result`) while the reader matches against the chat
64
+ layer's kinds, where a returned tool is the `tool-call` row whose `data.root`
65
+ carries a result. No node ever had the old name, so the branch was dead and a
66
+ returned tool never restarted the clock. The set and every kind it reasons about
67
+ are now typed against the host's own kind union, so a wrong name fails `tsc`
68
+ instead of failing silently at runtime, and a tool that is still running is
69
+ explicitly not a wait.
70
+ - The fold choreography can no longer stall. Each phase advances on animation
71
+ promises and rendered frames, and a cancelled animation rejects while a hidden
72
+ tab delivers no frames — either one used to leave the machine in a non-idle
73
+ phase forever, which holds the frame source at the shown snapshot and pauses the
74
+ text reveal, so the turn looked stuck until the view remounted. Every phase now
75
+ also has a wall-clock deadline that forces the next phase.
76
+ - While the choreography holds the reveal, the stream buffer keeps absorbing the
77
+ source instead of returning early, so text never resumes from a stale target
78
+ once the fold settles.
79
+ - Status shows how many sub-agents the turn dispatched, read from the host's own
80
+ turn-process row instead of being counted again here.
81
+ - Drop the `command-input` render branch: that string is not a chat node kind in
82
+ any released host, so it only made the file look like it handled a case that
83
+ cannot occur.
84
+ - Give every animated disclosure a wall-clock deadline as well. `fill: 'both'`
85
+ pins the opening keyframe, so a Web Animation that never reaches `onfinish`
86
+ (cancelled, unmounted, or skipped by the compositor) left the row in the DOM at
87
+ zero height and zero opacity — clicking it looked like nothing happened.
88
+ - Add a Better Display settings section: deliverables still open in the system app
89
+ by default, with an optional right-Sidebar preview, plus generative-mcpapps
90
+ skill-root detection and install guidance.
91
+ - Guard pending-submission image echoes so a text-only send cannot crash
92
+ `conversation.view` (`images` / `attachments` may be missing).
93
+ - Install guidance names only conventional relative roots (`.dsh/skills`,
94
+ `.agents/skills`) and never prints host home or plugin pack absolutes.
95
+
96
+ ### Reading and folding
97
+
98
+ - A later reasoning step folds only the finished process run it follows. The run
99
+ that is still streaming stays fully expanded, so a long turn reads as
100
+ alternating digests and prose instead of collapsing mid-thought.
101
+ - Fold intensity 2 (`过程摘要`) is PR #14's process-only mode: prose is never
102
+ folded; each finished run of reasoning / tool / record steps collapses into
103
+ one digest that names what the tools actually did (`读取 Reader.tsx`,
104
+ `运行 pnpm test`), read from the same tool identity the tool cards use. It is
105
+ not the default — standard fold (level 1) keeps current-main choreography.
106
+ - A finished process-only turn folds its trailing run too, and skips the
107
+ duplicate closed-turn counter row it no longer needs.
108
+
109
+ ### Reading surface
110
+
111
+ - When frosted glass is on, sticky lanes use the same liquid glass as the
112
+ dsh-auto-memory pane: translucent `bg-layer-2` wash, `blur(28px)`, hairline
113
+ border, 16px radius and a soft lift. Detail chips stay transparent until
114
+ hovered or focused. When the toggle is off, chrome matches current main.
115
+ - The toolbar reserves the width of its whole control group. Measuring only the
116
+ first button let the status lane paint over every later control.
117
+ - A compaction divider now arrives instead of simply appearing: the rule sweeps
118
+ out from its centre, the pill settles in, and the dial turns once. Gated by
119
+ `data-motion=off` and `prefers-reduced-motion` like every other transition.
120
+
121
+ ### Diff review
122
+
123
+ - Read the changed line counts from the tool result the host already attaches
124
+ (`meta.diffs`, `{ path, oldText, newText }`), and fall back to the call's own
125
+ arguments for `write` / `edit` / `str_replace_editor` when a host build does
126
+ not send them. The name whitelist matters: several unrelated tools take a
127
+ field called `content`, and counting those invented additions for calls that
128
+ changed no file.
129
+ - Fold a parent call's child calls into its own counts. A `run_code` that writes
130
+ files reports what its children changed rather than what its own arguments
131
+ contain, so a run whose edits live one level down no longer loses its counts.
132
+ Each child contributes through its own arguments, read from either the landed
133
+ result or the pending call.
134
+ - `+N -M` sits at the end of the row in green/red and opens a panel listing one
135
+ entry per changed file — the file tabs, the removed lines on a red wash and
136
+ the added lines on a green one, using the same `DiffBlock` primitive the
137
+ official tool row renders. The panel is in flow, never a floating popup, so
138
+ the flow cell's `overflow: clip` cannot cut it off.
139
+ - Opening and closing the panel animate real height in the plugin's own motion
140
+ language, and the card is brought back into view when it opens below the
141
+ fold; an open panel keeps its caret lit.
142
+
143
+ ### Waiting and timing
144
+
145
+ - Show how long the model has been given the turn, next to 「深度求索中」and the
146
+ in-flow wait indicator. The clock is anchored to the last event that handed
147
+ control to the model — a returned tool, an injected context, a run command,
148
+ the user's own message — never to the start of the turn, so a wait that has
149
+ just begun does not inherit the minutes the tools already spent.
150
+ - Past ten seconds the readout adds a「暂未响应」badge, and the moment the model
151
+ produces its first block the whole indicator is withdrawn. A tool that is
152
+ still running is not a wait: the tool is the one working.
153
+ - A command that ran long keeps its duration after it returns (warning colour
154
+ past ten seconds); a fast one shows nothing once it is done. Running steps
155
+ show a live seconds readout and a shimmering summary while they work.
156
+
157
+ ### Scroll
158
+
159
+ - Tail-follow only detaches on a real upward move by the reader. Content growth
160
+ and the follow easing itself also move `scrollTop`, and reading that as "the
161
+ user left the bottom" froze following mid-turn.
162
+ - Disable browser scroll anchoring on the conversation scroller while the reader
163
+ is mounted: it moved the viewport on its own as the transcript grew.
164
+ - Only a focused text field suspends following, and only inside the reader.
165
+ Focusing the composer used to stop the transcript from advancing.
166
+ - Stream at the source's own rate: add a feed-forward term estimated from the
167
+ arrival rate on top of the proportional controller. A purely proportional
168
+ reveal settles at a constant `catchUpMs` of lag regardless of model speed,
169
+ which read as 「慢」 while the backlog grew with faster models; the feed-forward
170
+ term drains the backlog and the proportional term absorbs transport jitter.
171
+ - Reveal a batch of words on one clock instead of one word per fixed gap.
172
+ Per-word spacing pinned the rate near 16 words/second, so a fast model still
173
+ arrived one word at a time; a batch now lands inside one short window while a
174
+ lone new word keeps the original typing cadence.
175
+ - The reasoning pane's own follow steps with the backlog rather than at a fixed
176
+ step-and-hold: it used to advance two lines every ~1.3 seconds no matter how
177
+ fast the text arrived, which is what made the pane look like it was lagging
178
+ behind a fast model.
179
+ ### Host DOM hooks
4
180
 
5
- - Add a Better Display settings section: deliverables still open in the system app by default, with an optional right-Sidebar preview, plus generative-mcpapps skill-root detection and install guidance.
6
- - Guard pending-submission image echoes so a text-only send cannot crash `conversation.view` (`images` / `attachments` may be missing).
7
- - Install guidance names only conventional relative roots (`.dsh/skills`, `.agents/skills`) and never prints host home or plugin pack absolutes.
8
181
  - 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.
9
182
 
10
183
  ## 0.1.1 — 2026-09-16
package/README.en.md CHANGED
@@ -2,17 +2,31 @@
2
2
 
3
3
  [中文](./README.md)
4
4
 
5
+ Prefer npm (version-pinable):
6
+
7
+ ```sh
8
+ dsh plugin --profile web add dsh-better-display@0.2.1
9
+ ```
10
+
11
+ Or latest:
12
+
13
+ ```sh
14
+ dsh plugin --profile web add dsh-better-display
15
+ ```
16
+
17
+ Fallback: install from GitHub (tracks the default branch tip):
18
+
5
19
  ```sh
6
20
  dsh plugin --profile web add github:aa2246740/dsh-better-display
7
21
  ```
8
22
 
9
- You need official `dsh` (or `npx @deepseek-ai/dsh`) and **pnpm** on PATH. `dsh plugin add` runs pnpm in `$DSH_HOME/profiles/web`. This repo commits built `lib/`, so a git install does not need `prepare` or a profile `allowBuilds` entry.
23
+ You need official `dsh` (or `npx @deepseek-ai/dsh`) and **pnpm** on PATH. `dsh plugin add` runs pnpm in `$DSH_HOME/profiles/web`. This repo commits built `lib/`, so git / npm installs do not need `prepare` or a profile `allowBuilds` entry.
10
24
 
11
25
  Then restart that Host and reload the page. `dsh plugin add` writes the profile. It does not hot-load a running process.
12
26
 
13
27
  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.
14
28
 
15
- 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) and reports whether that skill is installed in a harness skill root.
29
+ 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.
16
30
 
17
31
  Targets DeepSeek Harness **0.1.5-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.
18
32
 
@@ -20,7 +34,7 @@ From a local checkout or tarball:
20
34
 
21
35
  ```sh
22
36
  dsh plugin --profile web add ./dsh-better-display
23
- dsh plugin --profile web add ./dsh-better-display-0.1.1.tgz
37
+ dsh plugin --profile web add ./dsh-better-display-0.2.1.tgz
24
38
  ```
25
39
 
26
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.
package/README.md CHANGED
@@ -2,17 +2,31 @@
2
2
 
3
3
  [English](./README.en.md)
4
4
 
5
+ 推荐用 npm(可钉版本):
6
+
7
+ ```sh
8
+ dsh plugin --profile web add dsh-better-display@0.2.1
9
+ ```
10
+
11
+ 也可以装 latest:
12
+
13
+ ```sh
14
+ dsh plugin --profile web add dsh-better-display
15
+ ```
16
+
17
+ 备选:从 GitHub 直装(跟默认分支最新提交):
18
+
5
19
  ```sh
6
20
  dsh plugin --profile web add github:aa2246740/dsh-better-display
7
21
  ```
8
22
 
9
- PATH 上要有官方 `dsh`(没有就用 `npx @deepseek-ai/dsh`)和 **pnpm**。`dsh plugin add` 会在 `$DSH_HOME/profiles/web` 里跑 pnpm。仓库已提交编译好的 `lib/`,git 安装不用 `prepare`,也不用改 profile 的 `allowBuilds`。
23
+ PATH 上要有官方 `dsh`(没有就用 `npx @deepseek-ai/dsh`)和 **pnpm**。`dsh plugin add` 会在 `$DSH_HOME/profiles/web` 里跑 pnpm。仓库已提交编译好的 `lib/`,git / npm 安装都不用 `prepare`,也不用改 profile 的 `allowBuilds`。
10
24
 
11
25
  然后重启这个 Host,再刷新页面。`dsh plugin add` 只写 profile,不会热挂正在跑的进程。
12
26
 
13
27
  给 DeepSeek Harness 加一个 **阅读** 页签:执行时能看到步骤、思考和进度;整轮成功结束后把过程收起来,留下最终回答。原版「对话 / 轨迹」、输入框、模型选择、工具和审批都还在。阅读列保留宿主 ChatView 的 `data-chat-flow` 钩子,依赖该标记显示输入框的第三方皮肤不会把阅读页当成仅检视视图。
14
28
 
15
- 最终回答里的 ````mcp-app` 代码块会在阅读视图里挂成交互卡片,跑在 `<iframe sandbox="allow-scripts allow-forms">` 里,没有 `allow-same-origin`。卡片可以通过 JSON-RPC 把下一轮 prompt 填进输入框。技能包在 [`skills/generative-mcpapps/`](skills/generative-mcpapps/)。设置里的 **Better Display** 可把产物改为右侧栏预览(默认仍用系统应用),并检测该技能是否已装进宿主技能目录。
29
+ 最终回答里的 ````mcp-app` 代码块会在阅读视图里挂成交互卡片,跑在 `<iframe sandbox="allow-scripts allow-forms">` 里,没有 `allow-same-origin`。卡片可以通过 JSON-RPC 把下一轮 prompt 填进输入框。技能包在 [`skills/generative-mcpapps/`](skills/generative-mcpapps/)。设置里的 **Better Display** 可把产物改为右侧栏预览(默认仍用系统应用),打开半透明毛玻璃(默认关),设置过程自动折叠开关(默认开),并检测该技能是否已装进宿主技能目录。
16
30
 
17
31
  面向 DeepSeek Harness **0.1.5-rc.2**。只改展示,不改 Agent 执行、SDK 或模型凭据。Node.js `^22.19.0 || >=24`。新会话默认进阅读。
18
32
 
@@ -20,7 +34,7 @@ PATH 上要有官方 `dsh`(没有就用 `npx @deepseek-ai/dsh`)和 **pnpm**
20
34
 
21
35
  ```sh
22
36
  dsh plugin --profile web add ./dsh-better-display
23
- dsh plugin --profile web add ./dsh-better-display-0.1.1.tgz
37
+ dsh plugin --profile web add ./dsh-better-display-0.2.1.tgz
24
38
  ```
25
39
 
26
40
  `dsh.bundle` 是开机捕获的。不要再往 profile 的 `cordis.patch.yml` 手写同一条 insert,会重复挂载。