@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,452 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // Adapted from DeepSeek Harness b150a551b8d465e31e418e1b2eaf5e79bbb7d28e (MIT). See THIRD_PARTY_NOTICES.md.
3
+ /**
4
+ * Direct mdast→React markdown renderer. Replaces the react-markdown /
5
+ * remark-rehype pipeline with one switch over parsed nodes so streaming can
6
+ * cache frozen blocks as React elements; the rendered DOM is pinned
7
+ * byte-for-byte by `tests/fixtures/markdown-dom` and must not drift.
8
+ *
9
+ * Untrusted-output policy (unchanged from the replaced pipeline): link and
10
+ * image destinations pass a protocol allowlist, images additionally require
11
+ * absolute HTTP(S), raw HTML renders as literal text (no HTML enters the
12
+ * DOM), and KaTeX runs without trusted commands. Fragment-anchor URLs fail
13
+ * the allowlist, so footnote references and back-references render as plain
14
+ * text rather than in-page links.
15
+ *
16
+ * Merge-extensible node unions fall through the documented default (render
17
+ * nothing) rather than ending in assertNever: grammars registered elsewhere
18
+ * may add node types this renderer has no mapping for.
19
+ */
20
+ import { Fragment, createElement, useState } from 'react';
21
+ import clsx from 'clsx';
22
+ import { normalizeUri } from 'micromark-util-sanitize-uri';
23
+ import { CodeBlock } from '@deepseek-ai/dsh-client-ui-primitives';
24
+ import { renderTexToReact } from './katex.js';
25
+ import { McpAppCodeBlock, StreamingMcpAppPlaceholder } from '../McpAppFrame.js';
26
+ import { isMcpAppCodeBlock, extractMcpAppTitle, extractMcpAppHeight } from '../mcp-app.js';
27
+ import css from './MarkdownText.module.css';
28
+ function sanitizeUrl(url) {
29
+ try {
30
+ switch (new URL(url).protocol) {
31
+ case 'http:':
32
+ case 'https:':
33
+ case 'mailto:':
34
+ return url;
35
+ default:
36
+ return '';
37
+ }
38
+ }
39
+ catch {
40
+ // Relative and otherwise unparsable destinations are disallowed alongside
41
+ // disallowed protocols; new URL() has no other failure mode for strings.
42
+ return '';
43
+ }
44
+ }
45
+ function remoteImageUrl(url) {
46
+ try {
47
+ const protocol = new URL(url).protocol;
48
+ return protocol === 'http:' || protocol === 'https:' ? url : undefined;
49
+ }
50
+ catch {
51
+ // Same single failure mode as above: not an absolute URL.
52
+ return undefined;
53
+ }
54
+ }
55
+ /**
56
+ * Create an empty {@link ReferenceTargets}.
57
+ * @returns Fresh empty maps.
58
+ */
59
+ export function createReferenceTargets() {
60
+ return { definitions: new Map(), footnotes: new Map() };
61
+ }
62
+ /**
63
+ * Record every definition and footnote definition under `nodes` into
64
+ * `targets`, depth-first, keeping the first definition per identifier.
65
+ * @param nodes - Subtrees to walk (top-level blocks or any nested children).
66
+ * @param targets - Accumulator, typically shared across incremental segments.
67
+ */
68
+ export function collectReferenceTargets(nodes, targets) {
69
+ for (const node of nodes) {
70
+ if (node.type === 'definition') {
71
+ const id = node.identifier.toUpperCase();
72
+ if (!targets.definitions.has(id))
73
+ targets.definitions.set(id, node);
74
+ }
75
+ else if (node.type === 'footnoteDefinition') {
76
+ const id = node.identifier.toUpperCase();
77
+ if (!targets.footnotes.has(id))
78
+ targets.footnotes.set(id, node);
79
+ }
80
+ if ('children' in node)
81
+ collectReferenceTargets(node.children, targets);
82
+ }
83
+ }
84
+ /**
85
+ * Render top-level blocks. Nodes that render nothing (definitions, unmapped
86
+ * types) are dropped rather than kept as null placeholders, matching the
87
+ * replaced pipeline's child lists so separator newlines land identically.
88
+ * @param blocks - Blocks with their stream-stable render keys.
89
+ * @param context - The pass state; footnote numbering mutates in document order.
90
+ * @returns One React node per rendered block.
91
+ */
92
+ export function renderBlocks(blocks, context) {
93
+ return blocks
94
+ .map(block => renderNode(block.node, block.key, {
95
+ ...context,
96
+ sourceOffset: block.key - (block.node.position?.start.offset ?? block.key),
97
+ }))
98
+ .filter(element => element !== null);
99
+ }
100
+ /**
101
+ * Interleave the newline text nodes the replaced pipeline emitted between
102
+ * block-level children. They are invisible between elements but coalesce
103
+ * into adjacent literal raw-HTML text, where the DOM parity fixtures pin
104
+ * them.
105
+ * @param elements - Rendered block children with empty renders already dropped.
106
+ * @param edges - Also emit the leading and trailing newline (hast's loose wrap).
107
+ * @returns The interleaved children.
108
+ */
109
+ export function wrapBlockChildren(elements, edges) {
110
+ const wrapped = [];
111
+ for (const element of elements) {
112
+ if (edges || wrapped.length > 0)
113
+ wrapped.push('\n');
114
+ wrapped.push(element);
115
+ }
116
+ if (edges && elements.length > 0)
117
+ wrapped.push('\n');
118
+ return wrapped;
119
+ }
120
+ /** Render container children into {@link BlockEntry} values, dropping empty renders. */
121
+ function renderBlockEntries(blocks, context) {
122
+ const entries = [];
123
+ for (const [index, block] of blocks.entries()) {
124
+ if (block.type === 'paragraph') {
125
+ entries.push({ paragraph: renderChildren(block.children, context) });
126
+ }
127
+ else {
128
+ const element = renderNode(block, index, context);
129
+ if (element !== null)
130
+ entries.push({ element });
131
+ }
132
+ }
133
+ return entries;
134
+ }
135
+ function renderChildren(nodes, context) {
136
+ return nodes.map((node, index) => renderNode(node, index, context));
137
+ }
138
+ function renderNode(node, key, context) {
139
+ switch (node.type) {
140
+ case 'text':
141
+ return context.renderText ? context.renderText(node.value, (context.sourceOffset ?? 0) + (node.position?.start.offset ?? 0)) : node.value;
142
+ case 'paragraph':
143
+ return _jsx("p", { children: renderChildren(node.children, context) }, key);
144
+ case 'heading':
145
+ return createElement(`h${node.depth}`, { key }, ...renderChildren(node.children, context));
146
+ case 'blockquote':
147
+ return (_jsx("blockquote", { children: wrapBlockChildren(renderChildren(node.children, { ...context, inBlockquote: true }).filter(child => child !== null), true) }, key));
148
+ case 'thematicBreak':
149
+ return _jsx("hr", {}, key);
150
+ case 'break':
151
+ // The replaced pipeline emitted a newline text node after each <br>.
152
+ return _jsxs(Fragment, { children: [_jsx("br", {}), '\n'] }, key);
153
+ case 'strong':
154
+ return _jsx("strong", { children: renderChildren(node.children, context) }, key);
155
+ case 'emphasis':
156
+ return _jsx("em", { children: renderChildren(node.children, context) }, key);
157
+ case 'delete':
158
+ return _jsx("del", { children: renderChildren(node.children, context) }, key);
159
+ case 'inlineCode': {
160
+ // Parity with mdast-util-to-hast: inline code renders line endings as spaces.
161
+ const value = node.value.replace(/\r?\n|\r/g, ' ');
162
+ // Native code chips are inline-flex. Keep a single inline formatting
163
+ // context so motion spans do not become flex items or drop code spaces.
164
+ const content = context.renderText ? _jsx("span", { children: context.renderText(value, (context.sourceOffset ?? 0) + (node.position?.start.offset ?? 0), true) }) : value;
165
+ // An inline-code token that is entirely an absolute HTTP(S) URL keeps
166
+ // its code chrome and gains the same safe external anchor as a link;
167
+ // commands, partial URLs, and other schemes stay inert. The value is
168
+ // authored text, not a parsed destination, so no normalizeUri: port,
169
+ // path, and query render unchanged.
170
+ const href = inlineCodeHttpUrl(value);
171
+ if (href !== undefined)
172
+ return _jsx("code", { children: renderSafeLink(href, [content], 'link') }, key);
173
+ // A token the owner's file-mention vocabulary recognizes opens that
174
+ // file; the resolver, not this renderer, decides what names a file.
175
+ // Inside an anchor the token stays inert — a button cannot nest there.
176
+ const mention = context.inLink === true ? undefined : context.fileMentions?.resolve(value);
177
+ if (mention !== undefined) {
178
+ return (_jsx("code", { children: _jsx("button", { type: "button", className: css.fileMention, title: mention.title, "aria-label": mention.label, onClick: mention.open, children: content }) }, key));
179
+ }
180
+ return _jsx("code", { children: content }, key);
181
+ }
182
+ case 'html':
183
+ // No HTML parser enters the pipeline: raw HTML stays literal text.
184
+ return context.renderText ? context.renderText(node.value, (context.sourceOffset ?? 0) + (node.position?.start.offset ?? 0)) : node.value;
185
+ case 'code': {
186
+ const code = renderCode(node, key, context);
187
+ return context.renderAtom ? _jsx(Fragment, { children: context.renderAtom(code, (context.sourceOffset ?? 0) + (node.position?.start.offset ?? 0)) }, key) : code;
188
+ }
189
+ case 'math':
190
+ return _jsx(Fragment, { children: renderTexToReact(node.value, true) }, key);
191
+ case 'inlineMath':
192
+ return _jsx(Fragment, { children: renderTexToReact(node.value, false) }, key);
193
+ case 'list':
194
+ return renderList(node, key, context);
195
+ case 'listItem':
196
+ // Reachable only in hand-built trees: the grammar emits items inside lists.
197
+ return renderListItem(node, listItemLoose(node), key, context);
198
+ case 'table':
199
+ return renderTable(node, key, context);
200
+ case 'link':
201
+ return renderAnchor(node.url, renderChildren(node.children, { ...context, inLink: true }), key);
202
+ case 'linkReference':
203
+ return renderLinkReference(node, key, context);
204
+ case 'image':
205
+ return renderImage(node.url, node.alt ?? '', key, context);
206
+ case 'imageReference':
207
+ return renderImageReference(node, key, context);
208
+ case 'footnoteReference':
209
+ return renderFootnoteReference(node, key, context);
210
+ case 'definition':
211
+ case 'footnoteDefinition':
212
+ // Targets render elsewhere: definitions resolve references in place;
213
+ // footnote bodies render in the trailing section.
214
+ return null;
215
+ default:
216
+ // Documented default for the merge-extensible union: node types without
217
+ // a mapping (tableRow/tableCell outside a table, frontmatter, future
218
+ // grammar contributions) render nothing.
219
+ return null;
220
+ }
221
+ }
222
+ function renderCode(node, key, context) {
223
+ const language = node.lang ?? undefined;
224
+ if (node.value === '') {
225
+ // Parity: the replaced pipeline kept the stock <pre> for an empty fence.
226
+ return (_jsx("pre", { children: _jsx("code", { className: language === undefined ? undefined : `language-${language}` }) }, key));
227
+ }
228
+ // The replaced pipeline recovered the grammar id from the hast class with
229
+ // /language-([\w-]+)/, which truncates at the first non-word character.
230
+ const lang = language === undefined ? undefined : /^[\w-]+/.exec(language)?.[0];
231
+ if (isMcpAppCodeBlock(node.lang, node.meta, node.value)) {
232
+ const title = extractMcpAppTitle(node.meta, node.value);
233
+ const initialHeight = extractMcpAppHeight(node.meta);
234
+ if (context.streaming) {
235
+ return _jsx(StreamingMcpAppPlaceholder, { title: title }, key);
236
+ }
237
+ return _jsx(McpAppCodeBlock, { html: node.value, title: title, initialHeight: initialHeight }, key);
238
+ }
239
+ if (!context.streaming && lang === 'math') {
240
+ // ```math fences render as display TeX once settled (rehype-katex parity);
241
+ // its text extraction saw the code block's trailing newline.
242
+ return _jsx(Fragment, { children: renderTexToReact(`${node.value}\n`, true) }, key);
243
+ }
244
+ return (_jsx(CodeBlock, {
245
+ // The replaced hast pipeline appended one synthetic newline that
246
+ // CodeBlock's display trim removes; feeding the bare value would make
247
+ // that trim eat a REAL trailing blank line inside the fence instead.
248
+ code: `${node.value}\n`, lang: context.streaming ? undefined : lang, copyLabel: context.codeLabels?.copyLabel ?? '复制代码', copiedLabel: context.codeLabels?.copiedLabel ?? '已复制' }, key));
249
+ }
250
+ /** A list is loose when it or any of its items is spread; every item then keeps its paragraphs. */
251
+ function listLoose(list) {
252
+ return (list.spread ?? false) || list.children.some(listItemLoose);
253
+ }
254
+ function listItemLoose(item) {
255
+ return item.spread ?? item.children.length > 1;
256
+ }
257
+ function renderList(node, key, context) {
258
+ const loose = listLoose(node);
259
+ const properties = {};
260
+ if (typeof node.start === 'number' && node.start !== 1)
261
+ properties.start = node.start;
262
+ if (node.children.some(item => typeof item.checked === 'boolean')) {
263
+ properties.className = 'contains-task-list';
264
+ }
265
+ return createElement(node.ordered === true ? 'ol' : 'ul', { key, ...properties }, ...node.children.map((item, index) => renderListItem(item, loose, index, context)));
266
+ }
267
+ function renderListItem(item, loose, key, context) {
268
+ const entries = renderBlockEntries(item.children, context);
269
+ const task = typeof item.checked === 'boolean';
270
+ if (task) {
271
+ const checkbox = _jsx("input", { type: "checkbox", checked: item.checked === true, disabled: true }, "task-checkbox");
272
+ const head = entries[0];
273
+ if (head !== undefined && 'paragraph' in head) {
274
+ head.paragraph = head.paragraph.length > 0 ? [checkbox, ' ', ...head.paragraph] : [checkbox];
275
+ }
276
+ else {
277
+ entries.unshift({ paragraph: [checkbox] });
278
+ }
279
+ }
280
+ // Newline placement and tight-paragraph unwrapping mirror
281
+ // mdast-util-to-hast's list-item handler: a newline before every child
282
+ // except a tight leading paragraph, and after a trailing non-paragraph
283
+ // (or any trailing child when loose).
284
+ const parts = [];
285
+ for (const [index, entry] of entries.entries()) {
286
+ const isParagraph = 'paragraph' in entry;
287
+ if (loose || index !== 0 || !isParagraph)
288
+ parts.push('\n');
289
+ if (!isParagraph)
290
+ parts.push(entry.element);
291
+ else if (loose)
292
+ parts.push(_jsx("p", { children: entry.paragraph }, `p-${index}`));
293
+ else
294
+ parts.push(_jsx(Fragment, { children: entry.paragraph }, `p-${index}`));
295
+ }
296
+ const tail = entries[entries.length - 1];
297
+ if (tail !== undefined && (loose || !('paragraph' in tail)))
298
+ parts.push('\n');
299
+ return (_jsx("li", { className: task ? 'task-list-item' : undefined, children: parts }, key));
300
+ }
301
+ function renderTable(node, key, context) {
302
+ const align = node.align ?? null;
303
+ const [headRow, ...bodyRows] = node.children;
304
+ const columns = align === null ? headRow?.children.length ?? 0 : align.length;
305
+ // Four or more columns read as a comparison matrix: the block keeps the
306
+ // table at natural width and exposes the stable `md-table-wide` hook so a
307
+ // hosting layout (the chat transcript) can widen it past the message
308
+ // column. Narrower tables — and any table inside a blockquote — fill the
309
+ // column and wrap instead (deepsuite chat TableWrapper parity).
310
+ const wide = columns >= 4 && context.inBlockquote !== true;
311
+ return (_jsx("div", { className: clsx(css.tableScroll, wide ? 'md-table-wide' : css.tableFill), tabIndex: wide ? 0 : undefined, children: _jsxs("table", { children: [headRow !== undefined && _jsx("thead", { children: renderTableRow(headRow, 'th', align, 0, context) }), bodyRows.length > 0 && (_jsx("tbody", { children: bodyRows.map((row, index) => renderTableRow(row, 'td', align, index + 1, context)) }))] }) }, key));
312
+ }
313
+ function renderTableRow(row, cellTag, align, key, context) {
314
+ // With column alignment present, every row renders exactly one cell per
315
+ // column, padding or truncating the row (mdast-util-to-hast parity).
316
+ const length = align === null ? row.children.length : align.length;
317
+ const cells = [];
318
+ for (let index = 0; index < length; index++) {
319
+ const cell = row.children[index];
320
+ const alignValue = align?.[index];
321
+ cells.push(createElement(cellTag,
322
+ // hast-util-to-jsx-runtime's default tableCellAlignToStyle turned the
323
+ // deprecated align attribute into an inline style; keep that DOM.
324
+ { key: index, style: alignValue == null ? undefined : { textAlign: alignValue } }, ...(cell === undefined ? [] : renderChildren(cell.children, context))));
325
+ }
326
+ return _jsx("tr", { children: cells }, key);
327
+ }
328
+ /** Anchor over an already-authored href: allowlisted or unwrapped, external links get the safe attributes. */
329
+ function renderSafeLink(href, children, key) {
330
+ const safeHref = sanitizeUrl(href);
331
+ if (safeHref === '')
332
+ return _jsx(Fragment, { children: children }, key);
333
+ const external = ['http:', 'https:'].includes(new URL(safeHref).protocol);
334
+ return (_jsx("a", { href: safeHref, ...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {}), children: children }, key));
335
+ }
336
+ /** Anchor over a parsed markdown destination, which hast normalized before the allowlist saw it. */
337
+ function renderAnchor(url, children, key) {
338
+ return renderSafeLink(normalizeUri(url), children, key);
339
+ }
340
+ /**
341
+ * The complete inline-code value when it is exactly an absolute HTTP(S) URL
342
+ * (no surrounding whitespace); anything else stays inert code.
343
+ */
344
+ function inlineCodeHttpUrl(value) {
345
+ if (value.trim() !== value)
346
+ return undefined;
347
+ try {
348
+ const protocol = new URL(value).protocol;
349
+ return protocol === 'http:' || protocol === 'https:' ? value : undefined;
350
+ }
351
+ catch {
352
+ // Not an absolute URL at all — the only way new URL() rejects a string.
353
+ return undefined;
354
+ }
355
+ }
356
+ function renderImage(url, alt, key, context) {
357
+ // RC2 semantics, including the revalidation of a trusted vocabulary result.
358
+ const remote = remoteImageUrl(sanitizeUrl(normalizeUri(url)));
359
+ const rewritten = remote === undefined ? context.pathImages?.resolve(url) : undefined;
360
+ let imageSrc = remote;
361
+ if (rewritten !== undefined) {
362
+ try {
363
+ const parsed = new URL(rewritten);
364
+ if (['http:', 'https:', 'blob:', 'data:'].includes(parsed.protocol) || rewritten.startsWith('dsh-app://app/api/file?'))
365
+ imageSrc = rewritten;
366
+ }
367
+ catch { /* A vocabulary result must be an absolute URL. */ }
368
+ }
369
+ if (imageSrc === undefined) {
370
+ return _jsx("span", { className: css.imageAlt, children: alt }, key);
371
+ }
372
+ return _jsx(MarkdownImage, { src: imageSrc, alt: alt, destination: url }, `${key}:${imageSrc}`);
373
+ }
374
+ function MarkdownImage({ src, alt, destination }) {
375
+ const [failed, setFailed] = useState(false);
376
+ if (failed)
377
+ return _jsx("span", { className: css.imageAlt, children: alt || destination });
378
+ return (_jsx("img", { className: css.image, src: src, alt: alt, onError: () => { setFailed(true); }, loading: "lazy", decoding: "async", referrerPolicy: "no-referrer" }));
379
+ }
380
+ /** The bracketed source text a reference reverts to when its definition is missing. */
381
+ function referenceSuffix(node) {
382
+ if (node.referenceType === 'collapsed')
383
+ return '][]';
384
+ if (node.referenceType === 'full')
385
+ return `][${node.label ?? node.identifier}]`;
386
+ return ']';
387
+ }
388
+ function renderLinkReference(node, key, context) {
389
+ const definition = context.targets.definitions.get(node.identifier.toUpperCase());
390
+ if (definition === undefined) {
391
+ // The grammar only emits references whose definitions exist somewhere in
392
+ // the same parse, but incremental segments and hand-built trees may still
393
+ // present unresolved ones: revert to the bracketed source text — which is
394
+ // not an anchor, so mentions inside it stay live.
395
+ return _jsxs(Fragment, { children: ['[', renderChildren(node.children, context), referenceSuffix(node)] }, key);
396
+ }
397
+ return renderAnchor(definition.url, renderChildren(node.children, { ...context, inLink: true }), key);
398
+ }
399
+ function renderImageReference(node, key, context) {
400
+ const definition = context.targets.definitions.get(node.identifier.toUpperCase());
401
+ if (definition === undefined)
402
+ return `![${node.alt ?? ''}${referenceSuffix(node)}`;
403
+ return renderImage(definition.url, node.alt ?? '', key, context);
404
+ }
405
+ function renderFootnoteReference(node, key, context) {
406
+ const id = node.identifier.toUpperCase();
407
+ const seen = context.footnoteCounts.get(id);
408
+ if (seen === undefined)
409
+ context.footnoteOrder.push(id);
410
+ context.footnoteCounts.set(id, (seen ?? 0) + 1);
411
+ // The in-page anchor fails the protocol allowlist, so only the numbered
412
+ // superscript renders (matching the replaced pipeline's unwrapped link).
413
+ return _jsx("sup", { children: String(context.footnoteOrder.indexOf(id) + 1) }, key);
414
+ }
415
+ /**
416
+ * Render the trailing footnote section for every footnote referenced during
417
+ * the pass, in first-reference order, with one plain-text back-reference
418
+ * marker per rendered reference.
419
+ * @param context - The pass state after all blocks rendered.
420
+ * @returns The section, or null when no referenced footnote has a definition.
421
+ */
422
+ export function renderFootnoteSection(context) {
423
+ const items = [];
424
+ for (const id of context.footnoteOrder) {
425
+ const definition = context.targets.footnotes.get(id);
426
+ if (definition === undefined)
427
+ continue;
428
+ const count = context.footnoteCounts.get(id) ?? 0;
429
+ const backrefs = [];
430
+ for (let reference = 1; reference <= count; reference++) {
431
+ if (backrefs.length > 0)
432
+ backrefs.push(' ');
433
+ backrefs.push('↩');
434
+ if (reference > 1)
435
+ backrefs.push(_jsx("sup", { children: String(reference) }, `re-${reference}`));
436
+ }
437
+ const entries = renderBlockEntries(definition.children, context);
438
+ const tail = entries[entries.length - 1];
439
+ const body = entries.map((entry, index) => ('paragraph' in entry
440
+ ? (_jsxs("p", { children: [entry.paragraph, entry === tail && _jsxs(_Fragment, { children: [' ', backrefs] })] }, `p-${index}`))
441
+ : entry.element));
442
+ // Without a trailing paragraph the back-references join the block list
443
+ // itself (and pick up the wrap newlines), as in the replaced pipeline.
444
+ if (tail === undefined || !('paragraph' in tail))
445
+ body.push(...backrefs);
446
+ items.push(_jsx("li", { id: `user-content-fn-${normalizeUri(id.toLowerCase())}`, children: wrapBlockChildren(body, true) }, id));
447
+ }
448
+ if (items.length === 0)
449
+ return null;
450
+ return (_jsxs("section", { "data-footnotes": true, className: "footnotes", children: [_jsx("h2", { id: "footnote-label", className: "sr-only", children: "Footnotes" }), _jsx("ol", { children: items })] }, "footnotes"));
451
+ }
452
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../src/client/markdown/render.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Core pure functions for SEP-1865 / MCP Apps integration.
3
+ * Free of CSS module imports so it can be cleanly tested in Node test environments.
4
+ */
5
+ export declare function getHostTheme(): 'dark' | 'light';
6
+ export declare function getCssTokens(theme: 'dark' | 'light'): Record<string, string>;
7
+ /**
8
+ * Extracts a title from the HTML document's <title> tag.
9
+ */
10
+ export declare function extractHtmlTitle(html: string): string | undefined;
11
+ /**
12
+ * Normalizes user/model generated HTML to ensure a valid HTML5 structure
13
+ * and embeds a dynamic theme listener so dark/light mode switches take effect immediately.
14
+ */
15
+ export declare function ensureHtmlDocument(rawHtml: string, initialTheme?: 'dark' | 'light'): string;
16
+ /**
17
+ * Determines whether a markdown code block represents an MCP App.
18
+ */
19
+ export declare function isMcpAppCodeBlock(lang: string | null | undefined, meta: string | null | undefined, value: string): boolean;
20
+ /**
21
+ * Extracts a title from code block meta or HTML content.
22
+ */
23
+ export declare function extractMcpAppTitle(meta: string | null | undefined, value: string): string | undefined;
24
+ /**
25
+ * Extracts an explicit height budget from code block meta (e.g. height=600 or height="500px").
26
+ */
27
+ export declare function extractMcpAppHeight(meta: string | null | undefined): number | undefined;
28
+ /**
29
+ * Formats a user-submitted MCP App event into a concise, natural language conversational prompt.
30
+ * Avoids raw multiline JSON and excessive whitespace.
31
+ */
32
+ export declare function formatReceiptPrompt(params: Record<string, unknown>, title?: string): string;
33
+ /**
34
+ * Finds the DSH composer textarea. The page can contain multiple (hidden)
35
+ * textareas, so prefer a visible, enabled one carrying the input-bar
36
+ * `data-phase` marker; fall back to the tallest visible, then any enabled.
37
+ */
38
+ export declare function findComposerTextarea(doc?: Document): HTMLTextAreaElement | null;
39
+ /**
40
+ * DOM fallback for composer fill: types into the Lexical contenteditable
41
+ * surface (`[data-composer-input]`) via execCommand insertText so the editor
42
+ * adopts the change as a genuine user edit. Returns true when accepted.
43
+ */
44
+ export declare function fillComposerDom(text: string, doc?: Document): boolean;
45
+ /**
46
+ * Updates a React-controlled textarea and properly notifies React's valueTracker
47
+ * so the backdrop and input state immediately reflect the text.
48
+ */
49
+ export declare function setReactInputValue(textarea: HTMLTextAreaElement, value: string): void;
50
+ //# sourceMappingURL=mcp-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-app.d.ts","sourceRoot":"","sources":["../../../src/client/mcp-app.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,YAAY,IAAI,MAAM,GAAG,OAAO,CAS/C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,GAAG,OAAiB,GAAG,MAAM,CA6HpG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAa1H;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQrG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQvF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAqB3F;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,mBAAmB,GAAG,IAAI,CAe/E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,CAiCrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAgBrF"}