@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.
Files changed (390) hide show
  1. package/CHANGELOG.md +259 -0
  2. package/DESIGN.md +72 -0
  3. package/LICENSE +24 -0
  4. package/README.en.md +55 -0
  5. package/README.md +55 -0
  6. package/THIRD_PARTY_NOTICES.md +65 -0
  7. package/compat/harness-rc2.json +99 -0
  8. package/cordis.patch.yml +5 -0
  9. package/cordis.yml +4 -0
  10. package/docs/official-rendering-bridge.md +65 -0
  11. package/dshx.yml +5 -0
  12. package/lib/client.js +49292 -0
  13. package/lib/client.js.map +1 -0
  14. package/lib/dsh-better-display.js +101 -0
  15. package/lib/types/client/Blocks.d.ts +49 -0
  16. package/lib/types/client/Blocks.d.ts.map +1 -0
  17. package/lib/types/client/Blocks.js +143 -0
  18. package/lib/types/client/Blocks.js.map +1 -0
  19. package/lib/types/client/ChoreographedFlow.d.ts +22 -0
  20. package/lib/types/client/ChoreographedFlow.d.ts.map +1 -0
  21. package/lib/types/client/ChoreographedFlow.js +218 -0
  22. package/lib/types/client/ChoreographedFlow.js.map +1 -0
  23. package/lib/types/client/ClosedProcessSummary.d.ts +9 -0
  24. package/lib/types/client/ClosedProcessSummary.d.ts.map +1 -0
  25. package/lib/types/client/ClosedProcessSummary.js +16 -0
  26. package/lib/types/client/ClosedProcessSummary.js.map +1 -0
  27. package/lib/types/client/DiffPanel.d.ts +13 -0
  28. package/lib/types/client/DiffPanel.d.ts.map +1 -0
  29. package/lib/types/client/DiffPanel.js +115 -0
  30. package/lib/types/client/DiffPanel.js.map +1 -0
  31. package/lib/types/client/LiveFold.d.ts +10 -0
  32. package/lib/types/client/LiveFold.d.ts.map +1 -0
  33. package/lib/types/client/LiveFold.js +39 -0
  34. package/lib/types/client/LiveFold.js.map +1 -0
  35. package/lib/types/client/McpAppFrame.d.ts +32 -0
  36. package/lib/types/client/McpAppFrame.d.ts.map +1 -0
  37. package/lib/types/client/McpAppFrame.js +193 -0
  38. package/lib/types/client/McpAppFrame.js.map +1 -0
  39. package/lib/types/client/OfficialContent.d.ts +25 -0
  40. package/lib/types/client/OfficialContent.d.ts.map +1 -0
  41. package/lib/types/client/OfficialContent.js +53 -0
  42. package/lib/types/client/OfficialContent.js.map +1 -0
  43. package/lib/types/client/Reader.d.ts +3 -0
  44. package/lib/types/client/Reader.d.ts.map +1 -0
  45. package/lib/types/client/Reader.js +603 -0
  46. package/lib/types/client/Reader.js.map +1 -0
  47. package/lib/types/client/ReasoningCard.d.ts +11 -0
  48. package/lib/types/client/ReasoningCard.d.ts.map +1 -0
  49. package/lib/types/client/ReasoningCard.js +322 -0
  50. package/lib/types/client/ReasoningCard.js.map +1 -0
  51. package/lib/types/client/SettingsSection.d.ts +37 -0
  52. package/lib/types/client/SettingsSection.d.ts.map +1 -0
  53. package/lib/types/client/SettingsSection.js +63 -0
  54. package/lib/types/client/SettingsSection.js.map +1 -0
  55. package/lib/types/client/StickyLane.d.ts +8 -0
  56. package/lib/types/client/StickyLane.d.ts.map +1 -0
  57. package/lib/types/client/StickyLane.js +39 -0
  58. package/lib/types/client/StickyLane.js.map +1 -0
  59. package/lib/types/client/TimelineRail.d.ts +10 -0
  60. package/lib/types/client/TimelineRail.d.ts.map +1 -0
  61. package/lib/types/client/TimelineRail.js +168 -0
  62. package/lib/types/client/TimelineRail.js.map +1 -0
  63. package/lib/types/client/ToolActivity.d.ts +17 -0
  64. package/lib/types/client/ToolActivity.d.ts.map +1 -0
  65. package/lib/types/client/ToolActivity.js +244 -0
  66. package/lib/types/client/ToolActivity.js.map +1 -0
  67. package/lib/types/client/TurnMetrics.d.ts +11 -0
  68. package/lib/types/client/TurnMetrics.d.ts.map +1 -0
  69. package/lib/types/client/TurnMetrics.js +44 -0
  70. package/lib/types/client/TurnMetrics.js.map +1 -0
  71. package/lib/types/client/WaitClock.d.ts +16 -0
  72. package/lib/types/client/WaitClock.d.ts.map +1 -0
  73. package/lib/types/client/WaitClock.js +29 -0
  74. package/lib/types/client/WaitClock.js.map +1 -0
  75. package/lib/types/client/WaitingClock.d.ts +15 -0
  76. package/lib/types/client/WaitingClock.d.ts.map +1 -0
  77. package/lib/types/client/WaitingClock.js +30 -0
  78. package/lib/types/client/WaitingClock.js.map +1 -0
  79. package/lib/types/client/WaitingStatus.d.ts +6 -0
  80. package/lib/types/client/WaitingStatus.d.ts.map +1 -0
  81. package/lib/types/client/WaitingStatus.js +9 -0
  82. package/lib/types/client/WaitingStatus.js.map +1 -0
  83. package/lib/types/client/conversation-scroll.d.ts +19 -0
  84. package/lib/types/client/conversation-scroll.d.ts.map +1 -0
  85. package/lib/types/client/conversation-scroll.js +25 -0
  86. package/lib/types/client/conversation-scroll.js.map +1 -0
  87. package/lib/types/client/deliverables.d.ts +24 -0
  88. package/lib/types/client/deliverables.d.ts.map +1 -0
  89. package/lib/types/client/deliverables.js +104 -0
  90. package/lib/types/client/deliverables.js.map +1 -0
  91. package/lib/types/client/entry-policy.d.ts +10 -0
  92. package/lib/types/client/entry-policy.d.ts.map +1 -0
  93. package/lib/types/client/entry-policy.js +24 -0
  94. package/lib/types/client/entry-policy.js.map +1 -0
  95. package/lib/types/client/entry.d.ts +4 -0
  96. package/lib/types/client/entry.d.ts.map +1 -0
  97. package/lib/types/client/entry.js +34 -0
  98. package/lib/types/client/entry.js.map +1 -0
  99. package/lib/types/client/fold-choreography.d.ts +40 -0
  100. package/lib/types/client/fold-choreography.d.ts.map +1 -0
  101. package/lib/types/client/fold-choreography.js +48 -0
  102. package/lib/types/client/fold-choreography.js.map +1 -0
  103. package/lib/types/client/fold-intensity.d.ts +11 -0
  104. package/lib/types/client/fold-intensity.d.ts.map +1 -0
  105. package/lib/types/client/fold-intensity.js +32 -0
  106. package/lib/types/client/fold-intensity.js.map +1 -0
  107. package/lib/types/client/index.d.ts +7 -0
  108. package/lib/types/client/index.d.ts.map +1 -0
  109. package/lib/types/client/index.js +195 -0
  110. package/lib/types/client/index.js.map +1 -0
  111. package/lib/types/client/live-turn.d.ts +58 -0
  112. package/lib/types/client/live-turn.d.ts.map +1 -0
  113. package/lib/types/client/live-turn.js +190 -0
  114. package/lib/types/client/live-turn.js.map +1 -0
  115. package/lib/types/client/markdown/MarkdownText.d.ts +41 -0
  116. package/lib/types/client/markdown/MarkdownText.d.ts.map +1 -0
  117. package/lib/types/client/markdown/MarkdownText.js +178 -0
  118. package/lib/types/client/markdown/MarkdownText.js.map +1 -0
  119. package/lib/types/client/markdown/cjkFriendlyStrong.d.ts +9 -0
  120. package/lib/types/client/markdown/cjkFriendlyStrong.d.ts.map +1 -0
  121. package/lib/types/client/markdown/cjkFriendlyStrong.js +73 -0
  122. package/lib/types/client/markdown/cjkFriendlyStrong.js.map +1 -0
  123. package/lib/types/client/markdown/incremental.d.ts +69 -0
  124. package/lib/types/client/markdown/incremental.d.ts.map +1 -0
  125. package/lib/types/client/markdown/incremental.js +108 -0
  126. package/lib/types/client/markdown/incremental.js.map +1 -0
  127. package/lib/types/client/markdown/katex.d.ts +27 -0
  128. package/lib/types/client/markdown/katex.d.ts.map +1 -0
  129. package/lib/types/client/markdown/katex.js +88 -0
  130. package/lib/types/client/markdown/katex.js.map +1 -0
  131. package/lib/types/client/markdown/mathCompatibility.d.ts +11 -0
  132. package/lib/types/client/markdown/mathCompatibility.d.ts.map +1 -0
  133. package/lib/types/client/markdown/mathCompatibility.js +293 -0
  134. package/lib/types/client/markdown/mathCompatibility.js.map +1 -0
  135. package/lib/types/client/markdown/parse.d.ts +25 -0
  136. package/lib/types/client/markdown/parse.d.ts.map +1 -0
  137. package/lib/types/client/markdown/parse.js +42 -0
  138. package/lib/types/client/markdown/parse.js.map +1 -0
  139. package/lib/types/client/markdown/render.d.ts +121 -0
  140. package/lib/types/client/markdown/render.d.ts.map +1 -0
  141. package/lib/types/client/markdown/render.js +452 -0
  142. package/lib/types/client/markdown/render.js.map +1 -0
  143. package/lib/types/client/mcp-app.d.ts +50 -0
  144. package/lib/types/client/mcp-app.d.ts.map +1 -0
  145. package/lib/types/client/mcp-app.js +328 -0
  146. package/lib/types/client/mcp-app.js.map +1 -0
  147. package/lib/types/client/message-chrome.d.ts +19 -0
  148. package/lib/types/client/message-chrome.d.ts.map +1 -0
  149. package/lib/types/client/message-chrome.js +42 -0
  150. package/lib/types/client/message-chrome.js.map +1 -0
  151. package/lib/types/client/motion.d.ts +38 -0
  152. package/lib/types/client/motion.d.ts.map +1 -0
  153. package/lib/types/client/motion.js +453 -0
  154. package/lib/types/client/motion.js.map +1 -0
  155. package/lib/types/client/native/ContextBody.d.ts +130 -0
  156. package/lib/types/client/native/ContextBody.d.ts.map +1 -0
  157. package/lib/types/client/native/ContextBody.js +398 -0
  158. package/lib/types/client/native/ContextBody.js.map +1 -0
  159. package/lib/types/client/native/ContextInjectionRow.d.ts +35 -0
  160. package/lib/types/client/native/ContextInjectionRow.d.ts.map +1 -0
  161. package/lib/types/client/native/ContextInjectionRow.js +42 -0
  162. package/lib/types/client/native/ContextInjectionRow.js.map +1 -0
  163. package/lib/types/client/native/ReferenceIcon.d.ts +16 -0
  164. package/lib/types/client/native/ReferenceIcon.d.ts.map +1 -0
  165. package/lib/types/client/native/ReferenceIcon.js +16 -0
  166. package/lib/types/client/native/ReferenceIcon.js.map +1 -0
  167. package/lib/types/client/native/tool-call-model.d.ts +58 -0
  168. package/lib/types/client/native/tool-call-model.d.ts.map +1 -0
  169. package/lib/types/client/native/tool-call-model.js +219 -0
  170. package/lib/types/client/native/tool-call-model.js.map +1 -0
  171. package/lib/types/client/native/tool-update.d.ts +23 -0
  172. package/lib/types/client/native/tool-update.d.ts.map +1 -0
  173. package/lib/types/client/native/tool-update.js +22 -0
  174. package/lib/types/client/native/tool-update.js.map +1 -0
  175. package/lib/types/client/official-slots.d.ts +71 -0
  176. package/lib/types/client/official-slots.d.ts.map +1 -0
  177. package/lib/types/client/official-slots.js +183 -0
  178. package/lib/types/client/official-slots.js.map +1 -0
  179. package/lib/types/client/open-file.d.ts +29 -0
  180. package/lib/types/client/open-file.d.ts.map +1 -0
  181. package/lib/types/client/open-file.js +71 -0
  182. package/lib/types/client/open-file.js.map +1 -0
  183. package/lib/types/client/pending-submission.d.ts +28 -0
  184. package/lib/types/client/pending-submission.d.ts.map +1 -0
  185. package/lib/types/client/pending-submission.js +28 -0
  186. package/lib/types/client/pending-submission.js.map +1 -0
  187. package/lib/types/client/platform-media.d.ts +6 -0
  188. package/lib/types/client/platform-media.d.ts.map +1 -0
  189. package/lib/types/client/platform-media.js +18 -0
  190. package/lib/types/client/platform-media.js.map +1 -0
  191. package/lib/types/client/primitive-labels.d.ts +10 -0
  192. package/lib/types/client/primitive-labels.d.ts.map +1 -0
  193. package/lib/types/client/primitive-labels.js +38 -0
  194. package/lib/types/client/primitive-labels.js.map +1 -0
  195. package/lib/types/client/projection.d.ts +41 -0
  196. package/lib/types/client/projection.d.ts.map +1 -0
  197. package/lib/types/client/projection.js +112 -0
  198. package/lib/types/client/projection.js.map +1 -0
  199. package/lib/types/client/reasoning-follow.d.ts +10 -0
  200. package/lib/types/client/reasoning-follow.d.ts.map +1 -0
  201. package/lib/types/client/reasoning-follow.js +21 -0
  202. package/lib/types/client/reasoning-follow.js.map +1 -0
  203. package/lib/types/client/resource-address.d.ts +3 -0
  204. package/lib/types/client/resource-address.d.ts.map +1 -0
  205. package/lib/types/client/resource-address.js +33 -0
  206. package/lib/types/client/resource-address.js.map +1 -0
  207. package/lib/types/client/settings-copy.d.ts +7 -0
  208. package/lib/types/client/settings-copy.d.ts.map +1 -0
  209. package/lib/types/client/settings-copy.js +53 -0
  210. package/lib/types/client/settings-copy.js.map +1 -0
  211. package/lib/types/client/settings-slots.d.ts +23 -0
  212. package/lib/types/client/settings-slots.d.ts.map +1 -0
  213. package/lib/types/client/settings-slots.js +2 -0
  214. package/lib/types/client/settings-slots.js.map +1 -0
  215. package/lib/types/client/settings.d.ts +4 -0
  216. package/lib/types/client/settings.d.ts.map +1 -0
  217. package/lib/types/client/settings.js +60 -0
  218. package/lib/types/client/settings.js.map +1 -0
  219. package/lib/types/client/skill-status.d.ts +25 -0
  220. package/lib/types/client/skill-status.d.ts.map +1 -0
  221. package/lib/types/client/skill-status.js +44 -0
  222. package/lib/types/client/skill-status.js.map +1 -0
  223. package/lib/types/client/store.d.ts +35 -0
  224. package/lib/types/client/store.d.ts.map +1 -0
  225. package/lib/types/client/store.js +37 -0
  226. package/lib/types/client/store.js.map +1 -0
  227. package/lib/types/client/stream-buffer.d.ts +37 -0
  228. package/lib/types/client/stream-buffer.d.ts.map +1 -0
  229. package/lib/types/client/stream-buffer.js +150 -0
  230. package/lib/types/client/stream-buffer.js.map +1 -0
  231. package/lib/types/client/streaming.d.ts +18 -0
  232. package/lib/types/client/streaming.d.ts.map +1 -0
  233. package/lib/types/client/streaming.js +84 -0
  234. package/lib/types/client/streaming.js.map +1 -0
  235. package/lib/types/client/timeline.d.ts +26 -0
  236. package/lib/types/client/timeline.d.ts.map +1 -0
  237. package/lib/types/client/timeline.js +48 -0
  238. package/lib/types/client/timeline.js.map +1 -0
  239. package/lib/types/client/tool-activity.d.ts +98 -0
  240. package/lib/types/client/tool-activity.d.ts.map +1 -0
  241. package/lib/types/client/tool-activity.js +301 -0
  242. package/lib/types/client/tool-activity.js.map +1 -0
  243. package/lib/types/client/types.d.ts +91 -0
  244. package/lib/types/client/types.d.ts.map +1 -0
  245. package/lib/types/client/types.js +2 -0
  246. package/lib/types/client/types.js.map +1 -0
  247. package/lib/types/client/waiting-clock.d.ts +49 -0
  248. package/lib/types/client/waiting-clock.d.ts.map +1 -0
  249. package/lib/types/client/waiting-clock.js +80 -0
  250. package/lib/types/client/waiting-clock.js.map +1 -0
  251. package/lib/types/client/word-motion.d.ts +16 -0
  252. package/lib/types/client/word-motion.d.ts.map +1 -0
  253. package/lib/types/client/word-motion.js +90 -0
  254. package/lib/types/client/word-motion.js.map +1 -0
  255. package/lib/types/client/word-timeline.d.ts +32 -0
  256. package/lib/types/client/word-timeline.d.ts.map +1 -0
  257. package/lib/types/client/word-timeline.js +119 -0
  258. package/lib/types/client/word-timeline.js.map +1 -0
  259. package/lib/types/dsh-better-display.d.ts +17 -0
  260. package/lib/types/dsh-better-display.d.ts.map +1 -0
  261. package/lib/types/dsh-better-display.js +93 -0
  262. package/lib/types/dsh-better-display.js.map +1 -0
  263. package/lib/types/skill-roots.d.ts +22 -0
  264. package/lib/types/skill-roots.d.ts.map +1 -0
  265. package/lib/types/skill-roots.js +126 -0
  266. package/lib/types/skill-roots.js.map +1 -0
  267. package/lib/types/skill-status.d.ts +36 -0
  268. package/lib/types/skill-status.d.ts.map +1 -0
  269. package/lib/types/skill-status.js +51 -0
  270. package/lib/types/skill-status.js.map +1 -0
  271. package/package.json +133 -0
  272. package/scripts/build-motion-fixture.mjs +26 -0
  273. package/scripts/check-harness-compat.mjs +71 -0
  274. package/scripts/link-harness-dependencies.mjs +54 -0
  275. package/scripts/verify-auto-fold.mjs +114 -0
  276. package/scripts/verify-official-bridge.mjs +121 -0
  277. package/scripts/verify-tool-shimmer.mjs +62 -0
  278. package/skills/generative-mcpapps/SKILL.md +47 -0
  279. package/skills/generative-mcpapps/examples/interactive_quiz.html +153 -0
  280. package/skills/generative-mcpapps/references/html_boilerplate.md +122 -0
  281. package/skills/generative-mcpapps/references/sep1865_protocol.md +54 -0
  282. package/src/client/Blocks.tsx +213 -0
  283. package/src/client/ChoreographedFlow.tsx +232 -0
  284. package/src/client/ClosedProcessSummary.tsx +23 -0
  285. package/src/client/DiffPanel.tsx +124 -0
  286. package/src/client/LiveFold.tsx +43 -0
  287. package/src/client/McpAppFrame.module.css +210 -0
  288. package/src/client/McpAppFrame.tsx +317 -0
  289. package/src/client/OfficialContent.tsx +69 -0
  290. package/src/client/Reader.module.css +692 -0
  291. package/src/client/Reader.tsx +878 -0
  292. package/src/client/ReasoningCard.tsx +306 -0
  293. package/src/client/SettingsSection.module.css +184 -0
  294. package/src/client/SettingsSection.tsx +194 -0
  295. package/src/client/StickyLane.tsx +34 -0
  296. package/src/client/TimelineRail.module.css +170 -0
  297. package/src/client/TimelineRail.tsx +262 -0
  298. package/src/client/ToolActivity.tsx +274 -0
  299. package/src/client/TurnMetrics.module.css +139 -0
  300. package/src/client/TurnMetrics.tsx +160 -0
  301. package/src/client/WaitClock.tsx +33 -0
  302. package/src/client/WaitingStatus.tsx +13 -0
  303. package/src/client/conversation-scroll.ts +28 -0
  304. package/src/client/deliverables.ts +122 -0
  305. package/src/client/entry-policy.ts +20 -0
  306. package/src/client/entry.tsx +40 -0
  307. package/src/client/fold-choreography.ts +55 -0
  308. package/src/client/fold-intensity.ts +36 -0
  309. package/src/client/index.tsx +222 -0
  310. package/src/client/live-turn.ts +198 -0
  311. package/src/client/markdown/MarkdownText.module.css +304 -0
  312. package/src/client/markdown/MarkdownText.tsx +195 -0
  313. package/src/client/markdown/cjkFriendlyStrong.ts +84 -0
  314. package/src/client/markdown/incremental.ts +131 -0
  315. package/src/client/markdown/katex.tsx +91 -0
  316. package/src/client/markdown/mathCompatibility.ts +350 -0
  317. package/src/client/markdown/parse.ts +45 -0
  318. package/src/client/markdown/render.tsx +647 -0
  319. package/src/client/markdown/upstream.json +14 -0
  320. package/src/client/mcp-app.ts +323 -0
  321. package/src/client/message-chrome.ts +47 -0
  322. package/src/client/motion.tsx +410 -0
  323. package/src/client/native/ContextBody.module.css +161 -0
  324. package/src/client/native/ContextBody.tsx +591 -0
  325. package/src/client/native/ContextInjectionRow.module.css +66 -0
  326. package/src/client/native/ContextInjectionRow.tsx +106 -0
  327. package/src/client/native/ReferenceIcon.tsx +35 -0
  328. package/src/client/native/tool-call-model.ts +248 -0
  329. package/src/client/native/tool-update.ts +32 -0
  330. package/src/client/native/upstream.json +41 -0
  331. package/src/client/official-slots.tsx +211 -0
  332. package/src/client/open-file.ts +94 -0
  333. package/src/client/pending-submission.ts +49 -0
  334. package/src/client/platform-media.ts +17 -0
  335. package/src/client/primitive-labels.ts +54 -0
  336. package/src/client/projection.ts +118 -0
  337. package/src/client/reasoning-follow.ts +28 -0
  338. package/src/client/settings-copy.ts +80 -0
  339. package/src/client/settings-slots.ts +20 -0
  340. package/src/client/settings.tsx +73 -0
  341. package/src/client/skill-status.ts +78 -0
  342. package/src/client/store.ts +75 -0
  343. package/src/client/stream-buffer.ts +136 -0
  344. package/src/client/streaming.tsx +70 -0
  345. package/src/client/style.d.ts +4 -0
  346. package/src/client/timeline.ts +77 -0
  347. package/src/client/tool-activity.ts +298 -0
  348. package/src/client/types.ts +89 -0
  349. package/src/client/waiting-clock.ts +83 -0
  350. package/src/client/word-motion.tsx +92 -0
  351. package/src/client/word-timeline.ts +113 -0
  352. package/src/dsh-better-display.ts +108 -0
  353. package/src/skill-roots.ts +138 -0
  354. package/src/skill-status.ts +81 -0
  355. package/tests/browser-auto-fold.tsx +64 -0
  356. package/tests/browser-closed-gap.tsx +20 -0
  357. package/tests/browser-motion.tsx +65 -0
  358. package/tests/browser-official-bridge.tsx +152 -0
  359. package/tests/browser-sticky-lanes.tsx +22 -0
  360. package/tests/browser-waiting-clock.tsx +14 -0
  361. package/tests/chat-flow-hook.test.ts +66 -0
  362. package/tests/cloud-gate.test.ts +34 -0
  363. package/tests/context-tool-update.test.ts +33 -0
  364. package/tests/conversation-scroll.test.ts +47 -0
  365. package/tests/deliverables.test.ts +128 -0
  366. package/tests/entry.test.ts +42 -0
  367. package/tests/fixtures/maid-composer-hide.html +31 -0
  368. package/tests/fold-choreography.test.ts +54 -0
  369. package/tests/fold-intensity.test.ts +94 -0
  370. package/tests/footer-precedence.test.ts +129 -0
  371. package/tests/history-word-regression.test.ts +16 -0
  372. package/tests/live-turn.test.ts +218 -0
  373. package/tests/mcp-apps.test.ts +157 -0
  374. package/tests/message-chrome.test.ts +29 -0
  375. package/tests/official-slots.test.ts +112 -0
  376. package/tests/open-file.test.ts +114 -0
  377. package/tests/pending-submission.test.ts +45 -0
  378. package/tests/platform-media.test.ts +23 -0
  379. package/tests/projection.test.ts +184 -0
  380. package/tests/reasoning-follow.test.ts +34 -0
  381. package/tests/settings-copy.test.ts +63 -0
  382. package/tests/skill-status.test.ts +137 -0
  383. package/tests/stock-install.test.ts +58 -0
  384. package/tests/stream-buffer.test.ts +102 -0
  385. package/tests/timeline.test.ts +59 -0
  386. package/tests/tool-diff.test.ts +57 -0
  387. package/tests/waiting-clock.test.ts +83 -0
  388. package/tests/word-timeline.test.ts +146 -0
  389. package/tsconfig.json +11 -0
  390. package/tsdown.config.ts +51 -0
@@ -0,0 +1,101 @@
1
+ import { spawn } from "node:child_process";
2
+ import { scanGenerativeMcpappsStatus } from "./skill-roots.ts";
3
+ import { skillsFromListResult, toPublicSkillStatus } from "./skill-status.ts";
4
+ //#region src/dsh-better-display.ts
5
+ const name = "@drscrewdriver/dsh-better-display";
6
+ const inject = ["webServer"];
7
+ function writeJson(res, status, body) {
8
+ res.setHeader("Content-Type", "application/json");
9
+ res.statusCode = status;
10
+ res.end(JSON.stringify(body));
11
+ }
12
+ function skillLister(ctx) {
13
+ const skills = ctx.get?.("skills");
14
+ if (typeof skills?.list !== "function") return void 0;
15
+ return async () => skillsFromListResult(await skills.list({}));
16
+ }
17
+ function apply(ctx) {
18
+ console.log("[my-plugins/dsh-better-display] loaded");
19
+ if (ctx.webServer) ctx.effect(() => {
20
+ const disposeReveal = ctx.webServer.register({
21
+ kind: "exact",
22
+ path: "/better-display/reveal",
23
+ handler: async (req, res) => {
24
+ if (req.method !== "POST") {
25
+ res.statusCode = 405;
26
+ res.end();
27
+ return;
28
+ }
29
+ let body = "";
30
+ req.on("data", (chunk) => {
31
+ body += chunk;
32
+ });
33
+ req.on("end", () => {
34
+ try {
35
+ const data = JSON.parse(body);
36
+ const targetPath = typeof data.path === "string" ? data.path.trim() : "";
37
+ if (!targetPath) {
38
+ res.statusCode = 400;
39
+ res.end(JSON.stringify({
40
+ ok: false,
41
+ error: "Empty path"
42
+ }));
43
+ return;
44
+ }
45
+ if (process.platform === "darwin") spawn("open", ["-R", targetPath], {
46
+ detached: true,
47
+ stdio: "ignore"
48
+ });
49
+ else if (process.platform === "win32") spawn("explorer.exe", [`/select,${targetPath}`], {
50
+ detached: true,
51
+ stdio: "ignore"
52
+ });
53
+ else spawn("xdg-open", [targetPath], {
54
+ detached: true,
55
+ stdio: "ignore"
56
+ });
57
+ res.setHeader("Content-Type", "application/json");
58
+ res.statusCode = 200;
59
+ res.end(JSON.stringify({ ok: true }));
60
+ } catch (err) {
61
+ res.statusCode = 400;
62
+ res.end(JSON.stringify({
63
+ ok: false,
64
+ error: String(err)
65
+ }));
66
+ }
67
+ });
68
+ }
69
+ });
70
+ const disposeSkill = ctx.webServer.register({
71
+ kind: "exact",
72
+ path: "/better-display/skill-status",
73
+ handler: async (req, res) => {
74
+ if (req.method !== "GET") {
75
+ res.statusCode = 405;
76
+ res.end();
77
+ return;
78
+ }
79
+ try {
80
+ const cwd = new URL(req.url ?? "", "http://127.0.0.1").searchParams.get("cwd") ?? void 0;
81
+ const status = await scanGenerativeMcpappsStatus({
82
+ cwd,
83
+ listSkills: skillLister(ctx)
84
+ });
85
+ writeJson(res, 200, toPublicSkillStatus(status));
86
+ } catch (err) {
87
+ writeJson(res, 500, {
88
+ ok: false,
89
+ error: String(err)
90
+ });
91
+ }
92
+ }
93
+ });
94
+ return () => {
95
+ disposeReveal();
96
+ disposeSkill();
97
+ };
98
+ }, "dsh-better-display: reveal and skill-status routes");
99
+ }
100
+ //#endregion
101
+ export { apply, inject, name };
@@ -0,0 +1,49 @@
1
+ import { Component } from 'react';
2
+ import type { ReactNode } from 'react';
3
+ import type { ImageAttachmentRef } from '@deepseek-ai/dsh-attachment';
4
+ import type { AssistantBlock, UserMessageNode } from '@deepseek-ai/dsh-client-ui-conversation/client';
5
+ import type { BlockRenderProps, ReaderBlockOwner } from './types.js';
6
+ export declare class BlockBoundary extends Component<{
7
+ children: ReactNode;
8
+ }, {
9
+ failed: boolean;
10
+ detail: string;
11
+ }> {
12
+ state: {
13
+ failed: boolean;
14
+ detail: string;
15
+ };
16
+ static getDerivedStateFromError(error: unknown): {
17
+ failed: boolean;
18
+ detail: string;
19
+ };
20
+ render(): string | number | boolean | Iterable<ReactNode> | import("react").JSX.Element | null | undefined;
21
+ }
22
+ export declare const ImageBlock: import("react").MemoExoticComponent<({ attachment, loadImage }: {
23
+ attachment: ImageAttachmentRef;
24
+ loadImage: BlockRenderProps["loadImage"];
25
+ }) => import("react").JSX.Element>;
26
+ export declare function contentBlocks(content: UserMessageNode['content']): AssistantBlock[];
27
+ type TextPresentation = {
28
+ startedAt?: number;
29
+ interrupted?: boolean;
30
+ liveText?: boolean;
31
+ };
32
+ export declare const Blocks: import("react").MemoExoticComponent<({ blocks, streaming, source, holdFormatting, startedAt, interrupted, liveText, renderSlotChain, loadImage, fillComposer, fileMentions }: BlockRenderProps & TextPresentation & {
33
+ blocks: readonly AssistantBlock[];
34
+ streaming?: boolean;
35
+ source?: ReaderBlockOwner["source"];
36
+ holdFormatting?: boolean;
37
+ }) => import("react").JSX.Element>;
38
+ export declare function CopyAnswer({ blocks, onFork, metrics, extraActions }: {
39
+ blocks: readonly AssistantBlock[];
40
+ onFork?: () => void;
41
+ metrics?: BlockRenderProps['metrics'];
42
+ extraActions?: ReactNode;
43
+ }): import("react").JSX.Element | null;
44
+ export declare function UserMessageActions({ text, time }: {
45
+ text: string;
46
+ time?: number;
47
+ }): import("react").JSX.Element | null;
48
+ export {};
49
+ //# sourceMappingURL=Blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Blocks.d.ts","sourceRoot":"","sources":["../../../src/client/Blocks.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAKtG,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAOrE,qBAAa,aAAc,SAAQ,SAAS,CAAC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;IACxG,KAAK;;;MAAiC;IAGtC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO;;;;IAI9C,MAAM;CAKP;AAED,eAAO,MAAM,UAAU,kEAAuD;IAC5E,UAAU,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;CAC1E,iCAwCC,CAAC;AAEH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,GAAG,cAAc,EAAE,CAMnF;AAED,KAAK,gBAAgB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AA+C1F,eAAO,MAAM,MAAM,gLAA+L,gBAAgB,GAAG,gBAAgB,GAAG;IACtP,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACvH,iCAQC,CAAC;AAyBH,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE;IAAE,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,SAAS,CAAA;CAAE,sCAiChM;AAED,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,sCAajF"}
@@ -0,0 +1,143 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Component, Fragment, memo, useEffect, useLayoutEffect, useRef, useState } from 'react';
3
+ import { JsonBlock, MarkdownText, writeClipboard } from '@deepseek-ai/dsh-client-ui-primitives';
4
+ import { ComposerFillContext, McpAppFrame } from './McpAppFrame.js';
5
+ import { formatMessageClock } from './message-chrome.js';
6
+ import { markdownLabels, truncatedJsonLabel } from './primitive-labels.js';
7
+ import { useStreamingText } from './streaming.js';
8
+ import { MotionMarkdown, MotionPlainText } from './word-motion.js';
9
+ import css from './Reader.module.css';
10
+ const IMAGE_TYPES = new Set(['image/png', 'image/jpeg', 'image/webp', 'image/gif']);
11
+ export class BlockBoundary extends Component {
12
+ state = { failed: false, detail: '' };
13
+ // Temporary diagnostic: surface the reason inline so a recurrence is reportable
14
+ // without a console. Remove once the reported block crash is identified.
15
+ static getDerivedStateFromError(error) {
16
+ const err = error;
17
+ return { failed: true, detail: String(err?.message ?? error).slice(0, 160) };
18
+ }
19
+ render() {
20
+ return this.state.failed
21
+ ? _jsxs("div", { className: css.notice, children: ["\u6B64\u5185\u5BB9\u6682\u65F6\u65E0\u6CD5\u5728\u9605\u8BFB\u9875\u663E\u793A\uFF1B\u539F\u5BF9\u8BDD\u4E2D\u7684\u8BB0\u5F55\u672A\u53D7\u5F71\u54CD\u3002", _jsxs("span", { "data-reader-block-error": true, style: { opacity: .65 }, children: ["\uFF08", this.state.detail, "\uFF09"] })] })
22
+ : this.props.children;
23
+ }
24
+ }
25
+ export const ImageBlock = memo(function ImageBlock({ attachment, loadImage }) {
26
+ const [attempt, setAttempt] = useState(0);
27
+ const [url, setUrl] = useState(null);
28
+ const [error, setError] = useState(false);
29
+ const [decoded, setDecoded] = useState(false);
30
+ const dialog = useRef(null);
31
+ const opener = useRef(null);
32
+ useEffect(() => {
33
+ let active = true;
34
+ let owned = null;
35
+ const timeout = setTimeout(() => { if (active) {
36
+ setError(true);
37
+ active = false;
38
+ } }, 20000);
39
+ setError(false);
40
+ setDecoded(false);
41
+ setUrl(null);
42
+ void loadImage(attachment).then(result => {
43
+ if (!active)
44
+ return;
45
+ clearTimeout(timeout);
46
+ if (!IMAGE_TYPES.has(result.mediaType))
47
+ throw new Error('Unsupported image media type');
48
+ const bytes = Uint8Array.from(result.data);
49
+ owned = URL.createObjectURL(new Blob([bytes.buffer], { type: result.mediaType }));
50
+ setUrl(owned);
51
+ }).catch(() => { clearTimeout(timeout); if (active)
52
+ setError(true); });
53
+ return () => { active = false; clearTimeout(timeout); if (owned)
54
+ URL.revokeObjectURL(owned); };
55
+ }, [attachment.attachmentId, attempt, loadImage]);
56
+ const width = Number.isFinite(attachment.width) && attachment.width > 0 ? attachment.width : 4;
57
+ const height = Number.isFinite(attachment.height) && attachment.height > 0 ? attachment.height : 3;
58
+ return _jsxs("figure", { className: css.imageFigure, "data-reader-image": true, "data-image-state": error ? 'error' : decoded ? 'ready' : 'loading', children: [_jsxs("div", { className: css.imageFrame, style: { aspectRatio: `${width} / ${height}` }, children: [!error && url && _jsx("button", { ref: opener, type: "button", className: css.imageOpen, "aria-label": `放大图片${attachment.name ? `:${attachment.name}` : ''}`, onClick: () => dialog.current?.showModal(), children: _jsx("img", { src: url, alt: attachment.name ?? '会话图片', width: width, height: height, onLoad: () => setDecoded(true), onError: () => setError(true), "data-ready": decoded }) }), (!decoded || error) && _jsxs("div", { className: css.imagePlaceholder, children: [_jsx("span", { children: error ? '图片未能加载' : '正在加载图片' }), error && _jsx("button", { type: "button", className: css.textButton, onClick: () => setAttempt(value => value + 1), children: "\u91CD\u8BD5" })] })] }), attachment.name && _jsx("figcaption", { children: attachment.name }), _jsxs("dialog", { ref: dialog, className: css.imageDialog, "aria-label": "\u56FE\u7247\u9884\u89C8", onClose: () => opener.current?.focus(), onClick: event => { if (event.target === dialog.current)
59
+ dialog.current?.close(); }, children: [_jsx("button", { type: "button", autoFocus: true, className: css.dialogClose, "aria-label": "\u5173\u95ED\u56FE\u7247\u9884\u89C8", onClick: () => dialog.current?.close(), children: "\u00D7" }), url && _jsx("img", { src: url, alt: attachment.name ?? '会话图片' })] })] });
60
+ });
61
+ export function contentBlocks(content) {
62
+ return content.map(block => {
63
+ if (block.type === 'text')
64
+ return { kind: 'text', text: block.text };
65
+ if (block.type === 'image')
66
+ return { kind: 'image', attachment: block.attachment };
67
+ return { kind: 'other', block };
68
+ });
69
+ }
70
+ function ReadingMarkdown({ text, streaming, holdFormatting, startedAt, interrupted = false, liveText = false, kind = 'body', fileMentions }) {
71
+ const root = useRef(null);
72
+ const presentation = useStreamingText(text, streaming, { startedAt, interrupted: interrupted || !liveText, selected: holdFormatting });
73
+ // Native Markdown changes block keys for its full final parse. Keep the last
74
+ // committed mode while this answer is selected, then finish formatting on
75
+ // deselection. Business status and the source text still update normally.
76
+ const committedMode = useRef(streaming);
77
+ const effectiveMode = holdFormatting ? committedMode.current : presentation.formatStreaming;
78
+ useLayoutEffect(() => { committedMode.current = effectiveMode; }, [effectiveMode]);
79
+ return _jsx("div", { ref: root, className: css.readingText, "data-reader-text": true, "data-reader-text-kind": kind, "data-received-length": text.length, "data-shown-length": presentation.text.length, "data-presentation-pending": presentation.pending || undefined, "data-motion-style": "opacity-blur", "data-ud-motion": "reader-text-arrival", "data-ud-motion-type": "reveal", "data-ud-motion-no-flash": "true", children: _jsx(MotionMarkdown, { text: presentation.text, streaming: effectiveMode, enabled: liveText && presentation.reveal && effectiveMode, revision: presentation.revision, fileMentions: fileMentions }) });
80
+ }
81
+ function ReadingReasoning({ text, streaming, holdFormatting, startedAt, interrupted = false, liveText = false }) {
82
+ const presentation = useStreamingText(text, streaming, { startedAt, interrupted: interrupted || !liveText, selected: holdFormatting });
83
+ return _jsx("div", { className: css.readingText, "data-reader-text": true, "data-reader-text-kind": "reasoning", "data-received-length": text.length, "data-shown-length": presentation.text.length, "data-presentation-pending": presentation.pending || undefined, "data-motion-style": "opacity-blur", "data-ud-motion": "reader-text-arrival", "data-ud-motion-type": "reveal", "data-ud-motion-no-flash": "true", children: _jsx(MotionPlainText, { text: presentation.text, enabled: liveText && presentation.reveal, revision: presentation.revision }) });
84
+ }
85
+ function fallback(block, streaming, source, loadImage, fillComposer, holdFormatting, presentation, fileMentions) {
86
+ switch (block.kind) {
87
+ case 'text': return source === 'user' ? _jsx(MarkdownText, { text: block.text, labels: markdownLabels }) : _jsx(ReadingMarkdown, { text: block.text, streaming: streaming, holdFormatting: holdFormatting, ...presentation, fileMentions: fileMentions });
88
+ case 'image': return _jsx(ImageBlock, { attachment: block.attachment, loadImage: loadImage });
89
+ case 'reasoning': return _jsx(ReadingReasoning, { text: block.text, streaming: streaming, holdFormatting: holdFormatting, ...presentation });
90
+ case 'tool-call': return _jsx(JsonBlock, { label: `工具参数 · ${block.name}`, payload: block.argsRaw, truncatedLabel: truncatedJsonLabel });
91
+ case 'other': {
92
+ const raw = block.block;
93
+ if (raw && typeof raw === 'object') {
94
+ const item = raw;
95
+ if ((item.type === 'mcp-app' || item.type === 'mcpapp' || item.type === 'ui') && typeof item.html === 'string') {
96
+ return _jsx(McpAppFrame, { html: item.html, title: typeof item.title === 'string' ? item.title : undefined, fillComposer: fillComposer });
97
+ }
98
+ }
99
+ return _jsxs("div", { className: css.unknown, children: [_jsx("p", { children: "\u6B64\u5185\u5BB9\u7C7B\u578B\u5C1A\u672A\u63A5\u5165\u9605\u8BFB\u9875\uFF0C\u539F\u59CB\u5185\u5BB9\u5DF2\u4FDD\u7559\u3002" }), _jsx(JsonBlock, { label: "\u67E5\u770B\u539F\u59CB\u5185\u5BB9", payload: block.block, truncatedLabel: truncatedJsonLabel })] });
100
+ }
101
+ }
102
+ }
103
+ export const Blocks = memo(function Blocks({ blocks, streaming = false, source = 'assistant', holdFormatting = false, startedAt, interrupted, liveText, renderSlotChain, loadImage, fillComposer, fileMentions }) {
104
+ return _jsx(ComposerFillContext.Provider, { value: fillComposer, children: _jsx("div", { className: css.blocks, "data-streaming": streaming || undefined, children: blocks.map((block, index) => _jsx(BlockBoundary, { children: _jsx(Fragment, { children: renderSlotChain('dsh-better-display.block', { block, streaming, source }, { fallback: fallback(block, streaming, source, loadImage, fillComposer, holdFormatting, { startedAt, interrupted, liveText }, fileMentions) }) }) }, block.kind === 'image' ? `image:${block.attachment.attachmentId}:${index}` : `${index}:${block.kind}`)) }) });
105
+ });
106
+ import { TurnMetrics } from './TurnMetrics.js';
107
+ function CopyGlyph() {
108
+ return _jsxs("svg", { viewBox: "0 0 16 16", width: "16", height: "16", "aria-hidden": "true", children: [_jsx("rect", { x: "5", y: "5", width: "8", height: "8", rx: "1.5" }), _jsx("path", { d: "M3 10H2.8A.8.8 0 0 1 2 9.2V2.8a.8.8 0 0 1 .8-.8h6.4a.8.8 0 0 1 .8.8V3" })] });
109
+ }
110
+ function useCopyReceipt() {
111
+ const [receipt, setReceipt] = useState('');
112
+ const timer = useRef(null);
113
+ useEffect(() => () => { if (timer.current)
114
+ clearTimeout(timer.current); }, []);
115
+ const copy = async (text) => {
116
+ const accepted = await writeClipboard(text);
117
+ setReceipt(accepted ? '已复制' : '未能复制,请手动选择文字');
118
+ if (timer.current)
119
+ clearTimeout(timer.current);
120
+ timer.current = setTimeout(() => setReceipt(''), 2000);
121
+ };
122
+ return { receipt, copy };
123
+ }
124
+ function MessageClock({ time }) {
125
+ return _jsx("time", { className: css.messageClock, dateTime: new Date(time).toISOString(), children: formatMessageClock(time) });
126
+ }
127
+ export function CopyAnswer({ blocks, onFork, metrics, extraActions }) {
128
+ const { receipt, copy } = useCopyReceipt();
129
+ const text = blocks.filter((block) => block.kind === 'text').map(block => block.text).join('\n\n');
130
+ const endedAt = metrics?.endedAt;
131
+ const hasMetrics = metrics !== undefined && (metrics.usage !== undefined || metrics.runMs !== undefined || endedAt !== undefined);
132
+ if (!text.trim() && !onFork && !hasMetrics)
133
+ return null;
134
+ return _jsxs("div", { className: css.answerActions, children: [text.trim() !== '' && (_jsx("button", { type: "button", className: css.iconButton, "aria-label": "\u590D\u5236\u56DE\u7B54", title: "\u590D\u5236\u56DE\u7B54", onClick: () => { void copy(text); }, children: _jsx(CopyGlyph, {}) })), extraActions, onFork && (_jsx("button", { type: "button", className: css.iconButton, "aria-label": "\u4EE5\u6B64\u5904\u4E3A\u57FA\u7840\u521B\u5EFA\u5206\u53C9\u4F1A\u8BDD", title: "\u4EE5\u6B64\u5904\u4E3A\u57FA\u7840\u521B\u5EFA\u5206\u53C9\u4F1A\u8BDD (Fork)", onClick: onFork, children: _jsxs("svg", { viewBox: "0 0 16 16", width: "14", height: "14", fill: "none", stroke: "currentColor", strokeWidth: "1.2", children: [_jsx("circle", { cx: "4.5", cy: "3.5", r: "1.8" }), _jsx("circle", { cx: "4.5", cy: "12.5", r: "1.8" }), _jsx("circle", { cx: "11.5", cy: "5.5", r: "1.8" }), _jsx("path", { d: "M4.5 5.5v5M4.5 8c2.5 0 4.5-1 7-2.5", strokeLinecap: "round" })] }) })), metrics && _jsx(TurnMetrics, { usage: metrics.usage, runMs: metrics.runMs, tokensPerSecond: metrics.tokensPerSecond, ttftMs: metrics.ttftMs }), endedAt !== undefined && _jsx(MessageClock, { time: endedAt }), _jsx("span", { role: "status", className: css.meta, children: receipt })] });
135
+ }
136
+ export function UserMessageActions({ text, time }) {
137
+ const { receipt, copy } = useCopyReceipt();
138
+ const hasText = text.trim() !== '';
139
+ if (!hasText && time === undefined)
140
+ return null;
141
+ return _jsxs("div", { className: css.userActions, children: [time !== undefined && _jsx(MessageClock, { time: time }), hasText && (_jsx("button", { type: "button", className: css.iconButton, "aria-label": "\u590D\u5236\u6D88\u606F", title: "\u590D\u5236\u6D88\u606F", onClick: () => { void copy(text); }, children: _jsx(CopyGlyph, {}) })), _jsx("span", { role: "status", className: css.meta, children: receipt })] });
142
+ }
143
+ //# sourceMappingURL=Blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Blocks.js","sourceRoot":"","sources":["../../../src/client/Blocks.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ChatSnapshot } from '@deepseek-ai/dsh-client-ui-chat/client';
3
+ import type { ReaderProps } from './types.js';
4
+ import type { LiveStep, LiveTurnItem } from './live-turn.js';
5
+ /** Public projection only. Descendants cannot leak live data through a frozen frame. */
6
+ export declare const useFlowChat: ReaderProps['useChat'];
7
+ export type PresentationFrame = {
8
+ items: readonly LiveTurnItem[];
9
+ snapshot: ChatSnapshot;
10
+ };
11
+ export declare function ChoreographedFlow({ frame, motion, enabled, urgent, open, onOpenChange, processOpen, renderStep, id }: {
12
+ frame: PresentationFrame;
13
+ motion: boolean;
14
+ enabled: boolean;
15
+ urgent: boolean;
16
+ open: Readonly<Record<string, boolean>>;
17
+ onOpenChange: (key: string, value: boolean) => void;
18
+ processOpen: boolean;
19
+ renderStep: (step: LiveStep, folded: boolean) => ReactNode;
20
+ id: string;
21
+ }): import("react").JSX.Element;
22
+ //# sourceMappingURL=ChoreographedFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChoreographedFlow.d.ts","sourceRoot":"","sources":["../../../src/client/ChoreographedFlow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU7D,wFAAwF;AACxF,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,SAAS,CAI9C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAAE,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CAAC;AA0E3F,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;IACrH,KAAK,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAC7E,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7F,WAAW,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAC9F,+BAoIA"}
@@ -0,0 +1,218 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';
3
+ import { collapseRows, containsNewUser, flowRows, FOLD_TIMING, retiringKeys } from './fold-choreography.js';
4
+ import { Disclosure } from './motion.js';
5
+ import { FoldSummaryText } from './LiveFold.js';
6
+ import { DiffStat } from './DiffPanel.js';
7
+ import { StreamMotionContext } from './streaming.js';
8
+ import css from './Reader.module.css';
9
+ const FlowSnapshot = createContext(null);
10
+ /** Public projection only. Descendants cannot leak live data through a frozen frame. */
11
+ export const useFlowChat = selector => {
12
+ const snapshot = useContext(FlowSnapshot);
13
+ if (!snapshot)
14
+ throw new Error('Flow snapshot provider missing');
15
+ return selector(snapshot);
16
+ };
17
+ const idle = (frame) => ({ phase: 'idle', shown: frame, target: frame, retiring: [], beforeKeys: new Set() });
18
+ function Summary({ item, open, onChange, motion }) {
19
+ const button = useRef(null);
20
+ return _jsx("div", { "data-reader-live-fold": true, "data-expanded": open, "data-reader-live-fold-summary": item.summary, children: _jsxs("div", { className: css.summaryRow, children: [_jsx(Disclosure, { open: open, onChange: onChange, buttonRef: button, ariaLabel: "\u6B64\u524D\u6B65\u9AA4", label: _jsx(FoldSummaryText, { summary: item.summary, motion: motion }) }), _jsx(DiffStat, { steps: item.steps, label: item.summary })] }) });
21
+ }
22
+ /** Manual disclosure shares the measured-size path; children survive until finish. */
23
+ function FlowCell({ hidden, instant, motion, rowKey, children, summary = false }) {
24
+ const ref = useRef(null);
25
+ const [present, setPresent] = useState(!hidden);
26
+ const previous = useRef(hidden);
27
+ if (!hidden && !present)
28
+ setPresent(true);
29
+ useLayoutEffect(() => {
30
+ const el = ref.current;
31
+ const changed = previous.current !== hidden;
32
+ previous.current = hidden;
33
+ if (!el)
34
+ return;
35
+ if (!changed || instant || !motion) {
36
+ setPresent(!hidden);
37
+ return;
38
+ }
39
+ const height = el.scrollHeight;
40
+ const animation = el.animate([
41
+ { height: `${hidden ? height : 0}px`, opacity: hidden ? 1 : 0 },
42
+ { height: `${hidden ? 0 : height}px`, opacity: hidden ? 0 : 1 },
43
+ ], { duration: 220, easing: 'cubic-bezier(.4,0,.2,1)', fill: 'both' });
44
+ el.dispatchEvent(new CustomEvent('reader-layout-start', { bubbles: true }));
45
+ let released = false;
46
+ const release = () => { if (!released) {
47
+ released = true;
48
+ el.dispatchEvent(new CustomEvent('reader-layout-end', { bubbles: true }));
49
+ } };
50
+ // Do NOT cancel here. `fill: 'both'` is what currently holds the cell at its
51
+ // collapsed size; cancelling on finish drops that fill before React has
52
+ // committed the removal, so the cell snaps back to full height for one frame
53
+ // — the flash before it disappears. The state change alone retires it; the
54
+ // cleanup below cancels the animation once that has actually rendered.
55
+ let settled = false;
56
+ const settle = () => {
57
+ if (settled)
58
+ return;
59
+ settled = true;
60
+ setPresent(!hidden);
61
+ release();
62
+ };
63
+ animation.onfinish = settle;
64
+ // \`fill: 'both'\` pins the opening keyframe for the whole run, so if this
65
+ // animation never advances the cell stays at height 0 and opacity 0: the row is
66
+ // in the DOM but reads as "clicked it and nothing happened". A cancelled
67
+ // animation, or one inside a subtree the compositor skips, never fires
68
+ // onfinish. Fall back to the state change on a deadline; the cleanup then
69
+ // cancels the animation and drops the fill.
70
+ const deadline = window.setTimeout(settle, 220 + 240);
71
+ return () => { window.clearTimeout(deadline); animation.cancel(); release(); };
72
+ // `present` is a dependency so that committing it re-runs this effect: the
73
+ // cleanup then cancels the finished animation *after* the removal has been
74
+ // applied, which is the only moment the fill can be dropped safely. Without
75
+ // it the animation was never cancelled at all and every folded cell kept one.
76
+ }, [hidden, instant, motion, present]);
77
+ return _jsx("div", { ref: ref, className: css.flowCell, "data-flow-key": rowKey, "data-flow-summary": summary || undefined, hidden: hidden && !present, "aria-hidden": hidden || undefined, ...(hidden ? { inert: '' } : {}), children: present && _jsx("div", { className: css.flowCellInner, children: children }) });
78
+ }
79
+ export function ChoreographedFlow({ frame, motion, enabled, urgent, open, onOpenChange, processOpen, renderStep, id }) {
80
+ const root = useRef(null);
81
+ const stream = useContext(StreamMotionContext);
82
+ const latest = useRef(frame);
83
+ latest.current = frame;
84
+ const [visible, setVisible] = useState(() => !document.hidden);
85
+ const [state, setState] = useState(() => idle(frame));
86
+ const bypass = !motion || !enabled || urgent || !visible || !processOpen || (state.phase !== 'idle' && Object.values(open).some(Boolean));
87
+ // Render-time adjustment prevents even one paint of the new authoritative layout.
88
+ if ((bypass || containsNewUser(state.shown.items, frame.items)) && (state.phase !== 'idle' || state.shown !== frame)) {
89
+ setState(idle(frame));
90
+ }
91
+ else if (state.phase === 'idle' && state.shown !== frame) {
92
+ const retiring = retiringKeys(state.shown.items, frame.items, open);
93
+ setState(retiring.length ? { ...state, phase: 'collapse', target: frame, retiring,
94
+ beforeKeys: new Set(flowRows(state.shown.items).map(row => row.key)) } : idle(frame));
95
+ }
96
+ useEffect(() => {
97
+ const update = () => setVisible(!document.hidden);
98
+ document.addEventListener('visibilitychange', update);
99
+ return () => document.removeEventListener('visibilitychange', update);
100
+ }, []);
101
+ useLayoutEffect(() => {
102
+ if (state.phase !== 'collapse')
103
+ return;
104
+ const el = root.current;
105
+ if (!el)
106
+ return;
107
+ const retiring = new Set(state.retiring);
108
+ const animations = [];
109
+ el.dispatchEvent(new CustomEvent('reader-layout-start', { bubbles: true }));
110
+ for (const cell of el.querySelectorAll(':scope > [data-flow-key]')) {
111
+ const key = cell.dataset.flowKey;
112
+ const isHeader = cell.dataset.flowSummary && !state.beforeKeys.has(key);
113
+ if (!retiring.has(key) && !isHeader)
114
+ continue;
115
+ const height = cell.getBoundingClientRect().height;
116
+ animations.push(cell.animate(isHeader ? [
117
+ { height: '0px', opacity: 0 }, { height: `${height}px`, opacity: 1 },
118
+ ] : [
119
+ { height: `${height}px`, opacity: 1 },
120
+ { height: `${height * .5}px`, opacity: .85, offset: .5 },
121
+ { height: '0px', opacity: 0 },
122
+ ], { duration: FOLD_TIMING.collapse, easing: 'cubic-bezier(.4,0,.2,1)', fill: 'both' }));
123
+ }
124
+ let cancelled = false;
125
+ // Coalesce everything received during shrink, once. No animation restarts.
126
+ // Idempotent and phase-checked: the promise and the deadline race, and
127
+ // whichever arrives first wins while the other becomes a no-op.
128
+ let advanced = false;
129
+ const advance = () => {
130
+ if (cancelled || advanced)
131
+ return;
132
+ advanced = true;
133
+ setState(current => current.phase === 'collapse' ? { ...current, phase: 'count', target: latest.current } : current);
134
+ };
135
+ // `finished` rejects when an animation is cancelled and can stay pending when a
136
+ // compositor never runs it to completion, so the promise alone cannot be the only
137
+ // way out of this phase. Without a deadline a stalled phase would hold the frame
138
+ // source at `shown` and keep the reveal paused, which reads as a frozen turn
139
+ // until the view remounts.
140
+ const deadline = window.setTimeout(advance, FOLD_TIMING.collapse + FOLD_TIMING.watchdogSlack);
141
+ Promise.all(animations.map(animation => animation.finished)).then(advance, advance);
142
+ return () => {
143
+ cancelled = true;
144
+ window.clearTimeout(deadline);
145
+ animations.forEach(animation => animation.cancel());
146
+ el.dispatchEvent(new CustomEvent('reader-layout-end', { bubbles: true }));
147
+ };
148
+ }, [state.phase]);
149
+ useEffect(() => {
150
+ if (state.phase !== 'count' && state.phase !== 'settle' && state.phase !== 'reveal')
151
+ return;
152
+ const phase = state.phase;
153
+ let done = false;
154
+ const finish = () => {
155
+ if (done)
156
+ return;
157
+ done = true;
158
+ setState(current => {
159
+ if (current.phase !== phase)
160
+ return current;
161
+ if (phase === 'count')
162
+ return { ...current, phase: 'settle' };
163
+ if (phase === 'settle')
164
+ return { ...current, phase: 'reveal' };
165
+ return idle(current.target);
166
+ });
167
+ };
168
+ // Count visible presentation time, not a timer that can expire before a
169
+ // busy browser paints. Each attention phase must get actual rendered frames.
170
+ let elapsed = 0;
171
+ let previous;
172
+ let raf = 0;
173
+ const tick = (now) => {
174
+ if (previous !== undefined)
175
+ elapsed += Math.min(40, now - previous);
176
+ previous = now;
177
+ if (elapsed < FOLD_TIMING[phase]) {
178
+ raf = requestAnimationFrame(tick);
179
+ return;
180
+ }
181
+ finish();
182
+ };
183
+ raf = requestAnimationFrame(tick);
184
+ // A hidden tab gets no frames at all, so the frame counter above would never
185
+ // reach its budget and the phase would hold forever. The wall-clock deadline
186
+ // advances it anyway; a non-idle phase is what freezes the turn.
187
+ const deadline = window.setTimeout(finish, FOLD_TIMING[phase] + FOLD_TIMING.watchdogSlack);
188
+ return () => { window.clearTimeout(deadline); cancelAnimationFrame(raf); };
189
+ }, [state.phase]);
190
+ useLayoutEffect(() => {
191
+ if (state.phase !== 'reveal' || !root.current)
192
+ return;
193
+ const el = root.current;
194
+ el.dispatchEvent(new CustomEvent('reader-layout-start', { bubbles: true }));
195
+ // Opacity alone still inserts the new layout in one frame. Open real space
196
+ // first; text stays paused until this entry finishes, then catches up.
197
+ const animations = Array.from(el.children).filter(child => !child.hidden && !state.beforeKeys.has(child.dataset.flowKey))
198
+ .map(child => child.animate([
199
+ { height: '0px', opacity: 0 },
200
+ { height: `${child.getBoundingClientRect().height}px`, opacity: 1 },
201
+ ], { duration: FOLD_TIMING.reveal, easing: 'cubic-bezier(.4,0,.2,1)', fill: 'both' }));
202
+ return () => {
203
+ animations.forEach(animation => animation.cancel());
204
+ el.dispatchEvent(new CustomEvent('reader-layout-end', { bubbles: true }));
205
+ };
206
+ }, [state.phase]);
207
+ const blocked = state.phase === 'collapse' || state.phase === 'count' || state.phase === 'settle';
208
+ const source = state.phase === 'idle' || state.phase === 'collapse' ? state.shown : state.target;
209
+ const rows = state.phase === 'collapse' ? collapseRows(state.shown.items, state.target.items) : flowRows(source.items);
210
+ return _jsx(FlowSnapshot.Provider, { value: source.snapshot, children: _jsx(StreamMotionContext.Provider, { value: { ...stream, paused: state.phase !== 'idle', resumed: state.phase === 'reveal' }, children: _jsx("div", { id: id, ref: root, className: css.choreographedFlow, "data-reader-flow": true, "data-reader-transition": state.phase, "data-ud-motion": "fold-choreography", children: rows.map(row => {
211
+ if (row.kind === 'summary')
212
+ return _jsx(FlowCell, { rowKey: row.key, hidden: false, instant: true, motion: motion, summary: true, children: _jsx(Summary, { item: row.item, open: processOpen && !!open[row.key], onChange: value => onOpenChange(row.key, value), motion: motion && state.phase !== 'collapse' }) }, row.key);
213
+ const hidden = !!row.foldKey && (!processOpen || !open[row.foldKey]) || (blocked && state.phase !== 'collapse' && !state.beforeKeys.has(row.key));
214
+ // Keep retiring child props unchanged until it has actually shrunk.
215
+ return _jsx(FlowCell, { rowKey: row.key, hidden: hidden, instant: state.phase !== 'idle', motion: motion, children: renderStep(row.step, !!row.foldKey) }, row.key);
216
+ }) }) }) });
217
+ }
218
+ //# sourceMappingURL=ChoreographedFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChoreographedFlow.js","sourceRoot":"","sources":["../../../src/client/ChoreographedFlow.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { LiveStep } from './live-turn.js';
2
+ /** Keep process counts discoverable after the live-fold presentation retires. */
3
+ export declare function ClosedProcessSummary({ steps, open, onChange, controls }: {
4
+ steps: readonly LiveStep[];
5
+ open: boolean;
6
+ onChange: (value: boolean) => void;
7
+ controls: string;
8
+ }): import("react").JSX.Element | null;
9
+ //# sourceMappingURL=ClosedProcessSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClosedProcessSummary.d.ts","sourceRoot":"","sources":["../../../src/client/ClosedProcessSummary.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IACxE,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;CACjG,sCAWA"}