dsh-plugin-core 0.2.14 → 0.4.0

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 (432) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +52 -83
  3. package/dist/design/tokens-css.d.ts +1 -1
  4. package/dist/design/tokens-css.d.ts.map +1 -1
  5. package/dist/design/tokens-css.generated.d.ts +2 -0
  6. package/dist/design/tokens-css.generated.d.ts.map +1 -0
  7. package/dist/design/tokens-css.generated.js +4 -0
  8. package/dist/design/tokens-css.generated.js.map +1 -0
  9. package/dist/design/tokens-css.js +1 -252
  10. package/dist/design/tokens-css.js.map +1 -1
  11. package/dist/explorer/FileBrowser.d.ts +41 -0
  12. package/dist/explorer/FileBrowser.d.ts.map +1 -0
  13. package/dist/explorer/FileBrowser.js +659 -0
  14. package/dist/explorer/FileBrowser.js.map +1 -0
  15. package/dist/explorer/explorer-css.d.ts +1 -1
  16. package/dist/explorer/explorer-css.d.ts.map +1 -1
  17. package/dist/explorer/explorer-css.generated.d.ts +2 -0
  18. package/dist/explorer/explorer-css.generated.d.ts.map +1 -0
  19. package/dist/explorer/explorer-css.generated.js +4 -0
  20. package/dist/explorer/explorer-css.generated.js.map +1 -0
  21. package/dist/explorer/explorer-css.js +1 -31
  22. package/dist/explorer/explorer-css.js.map +1 -1
  23. package/dist/explorer/index.d.ts +4 -2
  24. package/dist/explorer/index.d.ts.map +1 -1
  25. package/dist/explorer/index.js +4 -2
  26. package/dist/explorer/index.js.map +1 -1
  27. package/dist/explorer/open.d.ts +103 -0
  28. package/dist/explorer/open.d.ts.map +1 -0
  29. package/dist/explorer/open.js +282 -0
  30. package/dist/explorer/open.js.map +1 -0
  31. package/dist/explorer/preview/BytesPreview.d.ts +13 -0
  32. package/dist/explorer/preview/BytesPreview.d.ts.map +1 -0
  33. package/dist/explorer/preview/BytesPreview.js +56 -0
  34. package/dist/explorer/preview/BytesPreview.js.map +1 -0
  35. package/dist/explorer/preview/HtmlPreview.d.ts +18 -0
  36. package/dist/explorer/preview/HtmlPreview.d.ts.map +1 -0
  37. package/dist/explorer/preview/HtmlPreview.js +112 -0
  38. package/dist/explorer/preview/HtmlPreview.js.map +1 -0
  39. package/dist/explorer/preview/OfficePreview.d.ts +11 -0
  40. package/dist/explorer/preview/OfficePreview.d.ts.map +1 -0
  41. package/dist/explorer/preview/OfficePreview.js +53 -0
  42. package/dist/explorer/preview/OfficePreview.js.map +1 -0
  43. package/dist/explorer/preview/TextPreview.d.ts +17 -0
  44. package/dist/explorer/preview/TextPreview.d.ts.map +1 -0
  45. package/dist/explorer/preview/TextPreview.js +95 -0
  46. package/dist/explorer/preview/TextPreview.js.map +1 -0
  47. package/dist/explorer/preview/index.d.ts +10 -3
  48. package/dist/explorer/preview/index.d.ts.map +1 -1
  49. package/dist/explorer/preview/index.js +52 -55
  50. package/dist/explorer/preview/index.js.map +1 -1
  51. package/dist/explorer/preview/md-labels.d.ts +3 -0
  52. package/dist/explorer/preview/md-labels.d.ts.map +1 -0
  53. package/dist/explorer/preview/md-labels.js +12 -0
  54. package/dist/explorer/preview/md-labels.js.map +1 -0
  55. package/dist/explorer/types.d.ts +186 -4
  56. package/dist/explorer/types.d.ts.map +1 -1
  57. package/dist/explorer/types.js +401 -14
  58. package/dist/explorer/types.js.map +1 -1
  59. package/dist/host/index.d.ts +66 -0
  60. package/dist/host/index.d.ts.map +1 -0
  61. package/dist/host/index.js +60 -0
  62. package/dist/host/index.js.map +1 -0
  63. package/dist/session/SessionViewModal.d.ts +42 -0
  64. package/dist/session/SessionViewModal.d.ts.map +1 -0
  65. package/dist/session/SessionViewModal.js +997 -0
  66. package/dist/session/SessionViewModal.js.map +1 -0
  67. package/dist/session/changes.d.ts +73 -0
  68. package/dist/session/changes.d.ts.map +1 -0
  69. package/dist/session/changes.js +134 -0
  70. package/dist/session/changes.js.map +1 -0
  71. package/dist/session/faces.d.ts +198 -0
  72. package/dist/session/faces.d.ts.map +1 -0
  73. package/dist/session/faces.js +17 -0
  74. package/dist/session/faces.js.map +1 -0
  75. package/dist/session/index.d.ts +5 -23
  76. package/dist/session/index.d.ts.map +1 -1
  77. package/dist/session/index.js +25 -70
  78. package/dist/session/index.js.map +1 -1
  79. package/dist/session/mirror/ChangedFileDiff.d.ts +22 -0
  80. package/dist/session/mirror/ChangedFileDiff.d.ts.map +1 -0
  81. package/dist/session/mirror/ChangedFileDiff.js +157 -0
  82. package/dist/session/mirror/ChangedFileDiff.js.map +1 -0
  83. package/dist/session/mirror/ChangedFilesCard.d.ts +18 -0
  84. package/dist/session/mirror/ChangedFilesCard.d.ts.map +1 -0
  85. package/dist/session/mirror/ChangedFilesCard.js +158 -0
  86. package/dist/session/mirror/ChangedFilesCard.js.map +1 -0
  87. package/dist/session/mirror/ChatGroupSeat.d.ts +24 -0
  88. package/dist/session/mirror/ChatGroupSeat.d.ts.map +1 -0
  89. package/dist/session/mirror/ChatGroupSeat.js +134 -0
  90. package/dist/session/mirror/ChatGroupSeat.js.map +1 -0
  91. package/dist/session/mirror/ChatNodeSeat.d.ts +43 -0
  92. package/dist/session/mirror/ChatNodeSeat.d.ts.map +1 -0
  93. package/dist/session/mirror/ChatNodeSeat.js +133 -0
  94. package/dist/session/mirror/ChatNodeSeat.js.map +1 -0
  95. package/dist/session/mirror/ChatView.d.ts +47 -0
  96. package/dist/session/mirror/ChatView.d.ts.map +1 -0
  97. package/dist/session/mirror/ChatView.js +127 -0
  98. package/dist/session/mirror/ChatView.js.map +1 -0
  99. package/dist/session/mirror/CommandCard.d.ts +20 -0
  100. package/dist/session/mirror/CommandCard.d.ts.map +1 -0
  101. package/dist/session/mirror/CommandCard.js +69 -0
  102. package/dist/session/mirror/CommandCard.js.map +1 -0
  103. package/dist/session/mirror/Deliverables.d.ts +24 -0
  104. package/dist/session/mirror/Deliverables.d.ts.map +1 -0
  105. package/dist/session/mirror/Deliverables.js +134 -0
  106. package/dist/session/mirror/Deliverables.js.map +1 -0
  107. package/dist/session/mirror/GenericCommandCard.d.ts +25 -0
  108. package/dist/session/mirror/GenericCommandCard.d.ts.map +1 -0
  109. package/dist/session/mirror/GenericCommandCard.js +567 -0
  110. package/dist/session/mirror/GenericCommandCard.js.map +1 -0
  111. package/dist/session/mirror/MessageIconActions.d.ts +16 -0
  112. package/dist/session/mirror/MessageIconActions.d.ts.map +1 -0
  113. package/dist/session/mirror/MessageIconActions.js +71 -0
  114. package/dist/session/mirror/MessageIconActions.js.map +1 -0
  115. package/dist/session/mirror/MessageItem.d.ts +66 -0
  116. package/dist/session/mirror/MessageItem.d.ts.map +1 -0
  117. package/dist/session/mirror/MessageItem.js +135 -0
  118. package/dist/session/mirror/MessageItem.js.map +1 -0
  119. package/dist/session/mirror/ReasoningRow.d.ts +11 -0
  120. package/dist/session/mirror/ReasoningRow.d.ts.map +1 -0
  121. package/dist/session/mirror/ReasoningRow.js +49 -0
  122. package/dist/session/mirror/ReasoningRow.js.map +1 -0
  123. package/dist/session/mirror/StatDialog.d.ts +20 -0
  124. package/dist/session/mirror/StatDialog.d.ts.map +1 -0
  125. package/dist/session/mirror/StatDialog.js +36 -0
  126. package/dist/session/mirror/StatDialog.js.map +1 -0
  127. package/dist/session/mirror/TurnProcessNodeView.d.ts +10 -0
  128. package/dist/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
  129. package/dist/session/mirror/TurnProcessNodeView.js +68 -0
  130. package/dist/session/mirror/TurnProcessNodeView.js.map +1 -0
  131. package/dist/session/mirror/TurnTailNodeView.d.ts +32 -0
  132. package/dist/session/mirror/TurnTailNodeView.d.ts.map +1 -0
  133. package/dist/session/mirror/TurnTailNodeView.js +48 -0
  134. package/dist/session/mirror/TurnTailNodeView.js.map +1 -0
  135. package/dist/session/mirror/TurnTriggerNodeView.d.ts +14 -0
  136. package/dist/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
  137. package/dist/session/mirror/TurnTriggerNodeView.js +87 -0
  138. package/dist/session/mirror/TurnTriggerNodeView.js.map +1 -0
  139. package/dist/session/mirror/TurnUsagePanel.d.ts +21 -0
  140. package/dist/session/mirror/TurnUsagePanel.d.ts.map +1 -0
  141. package/dist/session/mirror/TurnUsagePanel.js +41 -0
  142. package/dist/session/mirror/TurnUsagePanel.js.map +1 -0
  143. package/dist/session/mirror/message-chrome.d.ts +33 -0
  144. package/dist/session/mirror/message-chrome.d.ts.map +1 -0
  145. package/dist/session/mirror/message-chrome.js +158 -0
  146. package/dist/session/mirror/message-chrome.js.map +1 -0
  147. package/dist/session/mirror/process-groups.d.ts +56 -0
  148. package/dist/session/mirror/process-groups.d.ts.map +1 -0
  149. package/dist/session/mirror/process-groups.js +202 -0
  150. package/dist/session/mirror/process-groups.js.map +1 -0
  151. package/dist/session/official-classes.d.ts +28 -0
  152. package/dist/session/official-classes.d.ts.map +1 -0
  153. package/dist/session/official-classes.js +146 -0
  154. package/dist/session/official-classes.js.map +1 -0
  155. package/dist/session/open-session-view.d.ts +17 -0
  156. package/dist/session/open-session-view.d.ts.map +1 -0
  157. package/dist/session/open-session-view.js +136 -0
  158. package/dist/session/open-session-view.js.map +1 -0
  159. package/dist/session/session-css.d.ts +1 -1
  160. package/dist/session/session-css.d.ts.map +1 -1
  161. package/dist/session/session-css.generated.d.ts +2 -0
  162. package/dist/session/session-css.generated.d.ts.map +1 -0
  163. package/dist/session/session-css.generated.js +4 -0
  164. package/dist/session/session-css.generated.js.map +1 -0
  165. package/dist/session/session-css.js +1 -17
  166. package/dist/session/session-css.js.map +1 -1
  167. package/dist/ui/AlertModal.d.ts +28 -0
  168. package/dist/ui/AlertModal.d.ts.map +1 -0
  169. package/dist/ui/AlertModal.js +29 -0
  170. package/dist/ui/AlertModal.js.map +1 -0
  171. package/dist/ui/Button.d.ts.map +1 -1
  172. package/dist/ui/Button.js +14 -1
  173. package/dist/ui/Button.js.map +1 -1
  174. package/dist/ui/Card.d.ts +4 -2
  175. package/dist/ui/Card.d.ts.map +1 -1
  176. package/dist/ui/Card.js +12 -6
  177. package/dist/ui/Card.js.map +1 -1
  178. package/dist/ui/Chip.d.ts +9 -1
  179. package/dist/ui/Chip.d.ts.map +1 -1
  180. package/dist/ui/Chip.js +8 -2
  181. package/dist/ui/Chip.js.map +1 -1
  182. package/dist/ui/CodeViewer.d.ts +36 -0
  183. package/dist/ui/CodeViewer.d.ts.map +1 -0
  184. package/dist/ui/CodeViewer.js +90 -0
  185. package/dist/ui/CodeViewer.js.map +1 -0
  186. package/dist/ui/ConfirmModal.d.ts +30 -0
  187. package/dist/ui/ConfirmModal.d.ts.map +1 -0
  188. package/dist/ui/ConfirmModal.js +23 -0
  189. package/dist/ui/ConfirmModal.js.map +1 -0
  190. package/dist/ui/DateTimePicker.d.ts +45 -0
  191. package/dist/ui/DateTimePicker.d.ts.map +1 -0
  192. package/dist/ui/DateTimePicker.js +447 -0
  193. package/dist/ui/DateTimePicker.js.map +1 -0
  194. package/dist/ui/Field.d.ts +11 -2
  195. package/dist/ui/Field.d.ts.map +1 -1
  196. package/dist/ui/Field.js +15 -5
  197. package/dist/ui/Field.js.map +1 -1
  198. package/dist/ui/MarqueeText.d.ts.map +1 -1
  199. package/dist/ui/MarqueeText.js +3 -1
  200. package/dist/ui/MarqueeText.js.map +1 -1
  201. package/dist/ui/Modal.d.ts +25 -3
  202. package/dist/ui/Modal.d.ts.map +1 -1
  203. package/dist/ui/Modal.js +41 -7
  204. package/dist/ui/Modal.js.map +1 -1
  205. package/dist/ui/ModelPicker.d.ts +25 -12
  206. package/dist/ui/ModelPicker.d.ts.map +1 -1
  207. package/dist/ui/ModelPicker.js +67 -19
  208. package/dist/ui/ModelPicker.js.map +1 -1
  209. package/dist/ui/PanelDock.d.ts +127 -0
  210. package/dist/ui/PanelDock.d.ts.map +1 -0
  211. package/dist/ui/PanelDock.js +297 -0
  212. package/dist/ui/PanelDock.js.map +1 -0
  213. package/dist/ui/Picker.d.ts +8 -2
  214. package/dist/ui/Picker.d.ts.map +1 -1
  215. package/dist/ui/Picker.js +86 -18
  216. package/dist/ui/Picker.js.map +1 -1
  217. package/dist/ui/SectionHead.d.ts +3 -3
  218. package/dist/ui/SectionHead.d.ts.map +1 -1
  219. package/dist/ui/SectionHead.js +4 -4
  220. package/dist/ui/SectionHead.js.map +1 -1
  221. package/dist/ui/Segmented.d.ts +4 -0
  222. package/dist/ui/Segmented.d.ts.map +1 -1
  223. package/dist/ui/Segmented.js +88 -31
  224. package/dist/ui/Segmented.js.map +1 -1
  225. package/dist/ui/Textarea.d.ts +2 -0
  226. package/dist/ui/Textarea.d.ts.map +1 -1
  227. package/dist/ui/Textarea.js +6 -1
  228. package/dist/ui/Textarea.js.map +1 -1
  229. package/dist/ui/Toast.d.ts +41 -8
  230. package/dist/ui/Toast.d.ts.map +1 -1
  231. package/dist/ui/Toast.js +216 -28
  232. package/dist/ui/Toast.js.map +1 -1
  233. package/dist/ui/WorkspacePicker.d.ts +15 -28
  234. package/dist/ui/WorkspacePicker.d.ts.map +1 -1
  235. package/dist/ui/WorkspacePicker.js +18 -27
  236. package/dist/ui/WorkspacePicker.js.map +1 -1
  237. package/dist/ui/card-css.d.ts +1 -1
  238. package/dist/ui/card-css.d.ts.map +1 -1
  239. package/dist/ui/card-css.generated.d.ts +2 -0
  240. package/dist/ui/card-css.generated.d.ts.map +1 -0
  241. package/dist/ui/card-css.generated.js +4 -0
  242. package/dist/ui/card-css.generated.js.map +1 -0
  243. package/dist/ui/card-css.js +1 -35
  244. package/dist/ui/card-css.js.map +1 -1
  245. package/dist/ui/chip-css.d.ts +1 -1
  246. package/dist/ui/chip-css.d.ts.map +1 -1
  247. package/dist/ui/chip-css.generated.d.ts +2 -0
  248. package/dist/ui/chip-css.generated.d.ts.map +1 -0
  249. package/dist/ui/chip-css.generated.js +4 -0
  250. package/dist/ui/chip-css.generated.js.map +1 -0
  251. package/dist/ui/chip-css.js +1 -17
  252. package/dist/ui/chip-css.js.map +1 -1
  253. package/dist/ui/code-viewer-css.d.ts +2 -0
  254. package/dist/ui/code-viewer-css.d.ts.map +1 -0
  255. package/dist/ui/code-viewer-css.generated.d.ts +2 -0
  256. package/dist/ui/code-viewer-css.generated.d.ts.map +1 -0
  257. package/dist/ui/code-viewer-css.generated.js +4 -0
  258. package/dist/ui/code-viewer-css.generated.js.map +1 -0
  259. package/dist/ui/code-viewer-css.js +3 -0
  260. package/dist/ui/code-viewer-css.js.map +1 -0
  261. package/dist/ui/code-viewer-lang.d.ts +15 -0
  262. package/dist/ui/code-viewer-lang.d.ts.map +1 -0
  263. package/dist/ui/code-viewer-lang.js +190 -0
  264. package/dist/ui/code-viewer-lang.js.map +1 -0
  265. package/dist/ui/code-viewer-theme.d.ts +5 -0
  266. package/dist/ui/code-viewer-theme.d.ts.map +1 -0
  267. package/dist/ui/code-viewer-theme.js +138 -0
  268. package/dist/ui/code-viewer-theme.js.map +1 -0
  269. package/dist/ui/controls/back-to-top-css.generated.d.ts +2 -0
  270. package/dist/ui/controls/back-to-top-css.generated.d.ts.map +1 -0
  271. package/dist/ui/controls/back-to-top-css.generated.js +4 -0
  272. package/dist/ui/controls/back-to-top-css.generated.js.map +1 -0
  273. package/dist/ui/controls/button-css.generated.d.ts +2 -0
  274. package/dist/ui/controls/button-css.generated.d.ts.map +1 -0
  275. package/dist/ui/controls/button-css.generated.js +4 -0
  276. package/dist/ui/controls/button-css.generated.js.map +1 -0
  277. package/dist/ui/controls/datetime-css.generated.d.ts +2 -0
  278. package/dist/ui/controls/datetime-css.generated.d.ts.map +1 -0
  279. package/dist/ui/controls/datetime-css.generated.js +4 -0
  280. package/dist/ui/controls/datetime-css.generated.js.map +1 -0
  281. package/dist/ui/controls/field-css.generated.d.ts +2 -0
  282. package/dist/ui/controls/field-css.generated.d.ts.map +1 -0
  283. package/dist/ui/controls/field-css.generated.js +4 -0
  284. package/dist/ui/controls/field-css.generated.js.map +1 -0
  285. package/dist/ui/controls/hint-css.generated.d.ts +2 -0
  286. package/dist/ui/controls/hint-css.generated.d.ts.map +1 -0
  287. package/dist/ui/controls/hint-css.generated.js +4 -0
  288. package/dist/ui/controls/hint-css.generated.js.map +1 -0
  289. package/dist/ui/controls/loading-css.generated.d.ts +2 -0
  290. package/dist/ui/controls/loading-css.generated.d.ts.map +1 -0
  291. package/dist/ui/controls/loading-css.generated.js +4 -0
  292. package/dist/ui/controls/loading-css.generated.js.map +1 -0
  293. package/dist/ui/controls/segmented-css.generated.d.ts +2 -0
  294. package/dist/ui/controls/segmented-css.generated.d.ts.map +1 -0
  295. package/dist/ui/controls/segmented-css.generated.js +4 -0
  296. package/dist/ui/controls/segmented-css.generated.js.map +1 -0
  297. package/dist/ui/controls-css.d.ts +7 -8
  298. package/dist/ui/controls-css.d.ts.map +1 -1
  299. package/dist/ui/controls-css.js +13 -11
  300. package/dist/ui/controls-css.js.map +1 -1
  301. package/dist/ui/css.d.ts +5 -0
  302. package/dist/ui/css.d.ts.map +1 -1
  303. package/dist/ui/css.js +13 -4
  304. package/dist/ui/css.js.map +1 -1
  305. package/dist/ui/datetime-logic.d.ts +100 -0
  306. package/dist/ui/datetime-logic.d.ts.map +1 -0
  307. package/dist/ui/datetime-logic.js +193 -0
  308. package/dist/ui/datetime-logic.js.map +1 -0
  309. package/dist/ui/feedback-css.d.ts +1 -1
  310. package/dist/ui/feedback-css.d.ts.map +1 -1
  311. package/dist/ui/feedback-css.generated.d.ts +2 -0
  312. package/dist/ui/feedback-css.generated.d.ts.map +1 -0
  313. package/dist/ui/feedback-css.generated.js +4 -0
  314. package/dist/ui/feedback-css.generated.js.map +1 -0
  315. package/dist/ui/feedback-css.js +1 -53
  316. package/dist/ui/feedback-css.js.map +1 -1
  317. package/dist/ui/host-data.d.ts +103 -0
  318. package/dist/ui/host-data.d.ts.map +1 -0
  319. package/dist/ui/host-data.js +106 -0
  320. package/dist/ui/host-data.js.map +1 -0
  321. package/dist/ui/host-toast.d.ts +23 -0
  322. package/dist/ui/host-toast.d.ts.map +1 -0
  323. package/dist/ui/host-toast.js +34 -0
  324. package/dist/ui/host-toast.js.map +1 -0
  325. package/dist/ui/index.d.ts +12 -6
  326. package/dist/ui/index.d.ts.map +1 -1
  327. package/dist/ui/index.js +10 -4
  328. package/dist/ui/index.js.map +1 -1
  329. package/dist/ui/marquee-css.d.ts +2 -0
  330. package/dist/ui/marquee-css.d.ts.map +1 -0
  331. package/dist/ui/marquee-css.generated.d.ts +2 -0
  332. package/dist/ui/marquee-css.generated.d.ts.map +1 -0
  333. package/dist/ui/marquee-css.generated.js +4 -0
  334. package/dist/ui/marquee-css.generated.js.map +1 -0
  335. package/dist/ui/marquee-css.js +4 -0
  336. package/dist/ui/marquee-css.js.map +1 -0
  337. package/dist/ui/modal-host.d.ts +30 -0
  338. package/dist/ui/modal-host.d.ts.map +1 -0
  339. package/dist/ui/modal-host.js +101 -0
  340. package/dist/ui/modal-host.js.map +1 -0
  341. package/dist/ui/official.d.ts.map +1 -1
  342. package/dist/ui/official.js +45 -1
  343. package/dist/ui/official.js.map +1 -1
  344. package/dist/ui/panel-dock-css.d.ts +2 -0
  345. package/dist/ui/panel-dock-css.d.ts.map +1 -0
  346. package/dist/ui/panel-dock-css.generated.d.ts +2 -0
  347. package/dist/ui/panel-dock-css.generated.d.ts.map +1 -0
  348. package/dist/ui/panel-dock-css.generated.js +4 -0
  349. package/dist/ui/panel-dock-css.generated.js.map +1 -0
  350. package/dist/ui/panel-dock-css.js +4 -0
  351. package/dist/ui/panel-dock-css.js.map +1 -0
  352. package/dist/ui/panel-dock-logic.d.ts +50 -0
  353. package/dist/ui/panel-dock-logic.d.ts.map +1 -0
  354. package/dist/ui/panel-dock-logic.js +64 -0
  355. package/dist/ui/panel-dock-logic.js.map +1 -0
  356. package/dist/ui/picker-css.d.ts +1 -1
  357. package/dist/ui/picker-css.d.ts.map +1 -1
  358. package/dist/ui/picker-css.generated.d.ts +2 -0
  359. package/dist/ui/picker-css.generated.d.ts.map +1 -0
  360. package/dist/ui/picker-css.generated.js +4 -0
  361. package/dist/ui/picker-css.generated.js.map +1 -0
  362. package/dist/ui/picker-css.js +1 -48
  363. package/dist/ui/picker-css.js.map +1 -1
  364. package/dist/ui/picker-icons.d.ts +12 -0
  365. package/dist/ui/picker-icons.d.ts.map +1 -0
  366. package/dist/ui/picker-icons.js +29 -0
  367. package/dist/ui/picker-icons.js.map +1 -0
  368. package/dist/ui/picker-logic.d.ts +4 -1
  369. package/dist/ui/picker-logic.d.ts.map +1 -1
  370. package/dist/ui/picker-logic.js +1 -2
  371. package/dist/ui/picker-logic.js.map +1 -1
  372. package/dist/ui/resizer.d.ts +3 -1
  373. package/dist/ui/resizer.d.ts.map +1 -1
  374. package/dist/ui/resizer.js +1 -1
  375. package/dist/ui/resizer.js.map +1 -1
  376. package/dist/ui/toast-host.d.ts +24 -0
  377. package/dist/ui/toast-host.d.ts.map +1 -0
  378. package/dist/ui/toast-host.js +20 -0
  379. package/dist/ui/toast-host.js.map +1 -0
  380. package/dist/utils/date.d.ts +8 -0
  381. package/dist/utils/date.d.ts.map +1 -1
  382. package/dist/utils/date.js +16 -0
  383. package/dist/utils/date.js.map +1 -1
  384. package/dist/utils/i18n.d.ts +1 -1
  385. package/dist/utils/i18n.d.ts.map +1 -1
  386. package/dist/utils/i18n.js +437 -18
  387. package/dist/utils/i18n.js.map +1 -1
  388. package/dist/utils/index.d.ts +1 -1
  389. package/dist/utils/index.d.ts.map +1 -1
  390. package/dist/utils/index.js +1 -1
  391. package/dist/utils/index.js.map +1 -1
  392. package/dist/utils/path.d.ts.map +1 -1
  393. package/dist/utils/path.js +1 -0
  394. package/dist/utils/path.js.map +1 -1
  395. package/docs/README.md +12 -5
  396. package/docs/design/architecture.md +38 -8
  397. package/docs/design/copywriting.md +95 -0
  398. package/docs/design/doc-format.md +80 -0
  399. package/docs/design/doc-format.ts +39 -0
  400. package/docs/design/external/dsh-host.md +150 -1
  401. package/docs/design/features.md +4 -17
  402. package/docs/design/methods.md +13 -34
  403. package/docs/design/structure.md +25 -22
  404. package/docs/design/style.md +24 -50
  405. package/docs/help/design.doc.ts +112 -0
  406. package/docs/help/design.md +88 -0
  407. package/docs/help/explorer.doc.ts +136 -0
  408. package/docs/help/explorer.md +68 -0
  409. package/docs/help/index.doc.ts +79 -0
  410. package/docs/help/index.md +28 -0
  411. package/docs/help/integration.doc.ts +114 -0
  412. package/docs/help/integration.md +127 -0
  413. package/docs/help/methods.md +58 -0
  414. package/docs/help/session.doc.ts +154 -0
  415. package/docs/help/session.md +91 -0
  416. package/docs/help/style.md +80 -0
  417. package/docs/help/ui.doc.ts +404 -0
  418. package/docs/help/ui.md +342 -0
  419. package/docs/help/utils.doc.ts +133 -0
  420. package/docs/help/utils.md +96 -0
  421. package/docs/requirements.md +33 -12
  422. package/package.json +44 -3
  423. package/dist/ui/ErrorBoundary.d.ts +0 -22
  424. package/dist/ui/ErrorBoundary.d.ts.map +0 -1
  425. package/dist/ui/ErrorBoundary.js +0 -30
  426. package/dist/ui/ErrorBoundary.js.map +0 -1
  427. package/docs/design/features/design.md +0 -55
  428. package/docs/design/features/explorer.md +0 -73
  429. package/docs/design/features/session.md +0 -70
  430. package/docs/design/features/ui.md +0 -225
  431. package/docs/design/features/utils.md +0 -64
  432. package/docs/examples/integration.md +0 -103
@@ -0,0 +1,202 @@
1
+ /** 官方 INDEPENDENT(process-groups.js:10565;注意与 ChatNodeSeat 的清单不同)。 */
2
+ const INDEPENDENT = new Set([
3
+ 'user',
4
+ 'steering',
5
+ 'turn-trigger',
6
+ 'model-retry',
7
+ 'turn-error',
8
+ 'turn-max-tokens',
9
+ 'turn-tail',
10
+ ]);
11
+ /** 节点所属 turn(官方 turnOf,process-groups.js:10574)。 */
12
+ function turnOfNode(node) {
13
+ const location = node.location;
14
+ return location?.kind === 'turn' || location?.kind === 'step' ? location.turn?.turn : undefined;
15
+ }
16
+ /** 官方 reasoning(10578):assistant-step 带非空思考块。 */
17
+ function hasReasoning(node) {
18
+ if (node.kind !== 'assistant-step' || !Array.isArray(node.data?.blocks))
19
+ return false;
20
+ return (node.data?.blocks).some(block => block?.kind === 'reasoning' && (block.text ?? '').trim() !== '');
21
+ }
22
+ /** 官方 reply(10581):assistant-step 带回复内容(reasoning / tool-call 不算,空文本不算)。 */
23
+ function hasReply(node) {
24
+ if (node.kind !== 'assistant-step' || !Array.isArray(node.data?.blocks))
25
+ return false;
26
+ return (node.data?.blocks).some((block) => {
27
+ if (block === null || typeof block !== 'object')
28
+ return false;
29
+ if (block.kind === 'reasoning' || block.kind === 'tool-call')
30
+ return false;
31
+ if (block.kind === 'text')
32
+ return (block.text ?? '').trim() !== '';
33
+ return true;
34
+ });
35
+ }
36
+ /** 官方 activity(10426-10449):工具名 → 活动类别。 */
37
+ export function toolActivity(name) {
38
+ if (name === 'read')
39
+ return 'read';
40
+ if (name === 'read_image')
41
+ return 'readImage';
42
+ if (name === 'grep' || name === 'glob' || name.endsWith('_inspect'))
43
+ return 'search';
44
+ if (name === 'write')
45
+ return 'write';
46
+ if (name === 'edit' || name === 'apply_patch')
47
+ return 'edit';
48
+ if (['bash', 'pwsh', 'exec_command', 'write_stdin'].includes(name) || name.startsWith('terminal_'))
49
+ return 'commands';
50
+ if (name === 'run_code')
51
+ return 'code';
52
+ if (name === 'web_search')
53
+ return 'webSearch';
54
+ if (name === 'web_fetch')
55
+ return 'webFetch';
56
+ if (name === 'subagent' || name.startsWith('subagent_'))
57
+ return 'subagents';
58
+ if (['todo_write', 'create_goal', 'update_goal', 'get_goal'].includes(name))
59
+ return 'plan';
60
+ if (name === 'ask_user_question' || name === 'request_user_input')
61
+ return 'questions';
62
+ return 'tools';
63
+ }
64
+ /** ToolCallBlock → 本次调用的名字面(running 半截在根上,settled 在 call 里)。 */
65
+ function toolCallFace(root) {
66
+ const callId = typeof root.callId === 'string' ? root.callId : '';
67
+ if (root.kind === 'tool-result') {
68
+ const name = typeof root.call?.name === 'string' ? root.call.name : '';
69
+ return callId === '' || name === '' ? null : { callId, name };
70
+ }
71
+ const name = typeof root.name === 'string' ? root.name : '';
72
+ return callId === '' || name === '' ? null : { callId, name };
73
+ }
74
+ /** 官方 processActivity(10527-10561):按去重调用数排序的活动类别(含子调用递归)。 */
75
+ function processActivity(nodes) {
76
+ const counts = new Map();
77
+ const seen = new Set();
78
+ const visit = (tool) => {
79
+ const face = toolCallFace(tool);
80
+ if (face !== null && !seen.has(face.callId)) {
81
+ seen.add(face.callId);
82
+ const kind = toolActivity(face.name);
83
+ counts.set(kind, (counts.get(kind) ?? 0) + 1);
84
+ }
85
+ for (const child of tool.subCalls ?? [])
86
+ visit(child);
87
+ };
88
+ for (const node of nodes) {
89
+ if (node.kind !== 'tool-call')
90
+ continue;
91
+ const root = node.data?.root;
92
+ if (root !== undefined && root !== null)
93
+ visit(root);
94
+ }
95
+ return [...counts]
96
+ .map(([kind, count]) => ({ kind, count }))
97
+ .sort((left, right) => right.count - left.count);
98
+ }
99
+ /**
100
+ * 官方 TurnGroups.rebuild 的移植:把 keyed 流切成「独立条目 + 过程分组」。
101
+ * @param order - 官方渲染顺序(node key 列表)。
102
+ * @param readNode - keyed 节点读取。
103
+ * @param isTurnClosed - turn 是否已闭合(官方 turns.get(turn).status === 'closed')。
104
+ */
105
+ export function buildProcessGroups(order, readNode, isTurnClosed) {
106
+ const entries = [];
107
+ const groups = new Map();
108
+ let pending = [];
109
+ let currentTurn;
110
+ const flush = (closed) => {
111
+ const first = pending[0];
112
+ if (first === undefined)
113
+ return;
114
+ const turn = currentTurn;
115
+ const ended = closed || (turn !== undefined && isTurnClosed(turn));
116
+ const members = pending;
117
+ const nodes = members
118
+ .map(member => readNode(member.key))
119
+ .filter((node) => node !== undefined);
120
+ // 官方组键 = ["process", 首成员 key, groupPart](process-groups.js:10692-10696)。
121
+ const groupKey = JSON.stringify(['process', first.key, first.groupPart ?? null]);
122
+ groups.set(groupKey, {
123
+ key: groupKey,
124
+ members,
125
+ data: { turn: turn ?? -1, closed: ended, summary: { counts: processActivity(nodes) } },
126
+ });
127
+ entries.push({ kind: 'group', key: groupKey });
128
+ pending = [];
129
+ };
130
+ for (const key of order) {
131
+ const node = readNode(key);
132
+ if (node === undefined)
133
+ continue;
134
+ const turn = turnOfNode(node);
135
+ if (turn !== currentTurn) {
136
+ flush(true);
137
+ currentTurn = turn;
138
+ }
139
+ if (INDEPENDENT.has(node.kind)) {
140
+ flush(true);
141
+ entries.push({ kind: 'node', key });
142
+ }
143
+ else if (node.kind === 'turn-process') {
144
+ entries.push({ kind: 'node', key });
145
+ }
146
+ else if (node.kind === 'assistant-step') {
147
+ if (hasReasoning(node))
148
+ pending.push({ key, groupPart: 'reasoning' });
149
+ if (hasReply(node)) {
150
+ flush(true);
151
+ entries.push({ kind: 'node', key, groupPart: 'response' });
152
+ }
153
+ }
154
+ else {
155
+ pending.push({ key });
156
+ }
157
+ }
158
+ // 归档只读视图:末组按 turn 状态闭合(live turn 的组官方也不封口)。
159
+ flush(currentTurn === undefined ? true : isTurnClosed(currentTurn));
160
+ return { entries, groups };
161
+ }
162
+ /** 官方 message.stepProcess.done.* 的键面(zh/en 文案见 utils/i18n 字典)。 */
163
+ const STEP_DONE_KEYS = {
164
+ thinking: 'stepProcessDoneThinking',
165
+ read: 'stepProcessDoneRead',
166
+ readImage: 'stepProcessDoneReadImage',
167
+ write: 'stepProcessDoneWrite',
168
+ search: 'stepProcessDoneSearch',
169
+ edit: 'stepProcessDoneEdit',
170
+ commands: 'stepProcessDoneCommands',
171
+ code: 'stepProcessDoneCode',
172
+ webSearch: 'stepProcessDoneWebSearch',
173
+ webFetch: 'stepProcessDoneWebFetch',
174
+ subagents: 'stepProcessDoneSubagents',
175
+ plan: 'stepProcessDonePlan',
176
+ questions: 'stepProcessDoneQuestions',
177
+ tools: 'stepProcessDoneTools',
178
+ };
179
+ /**
180
+ * 官方 processTitle(1820-1836):closed 组标题 = 前 3 类活动拼接
181
+ * (2 类用「A并B」且去「已」前缀;≥3 类用「,」连接、超 3 类补「等」)。
182
+ */
183
+ export function processTitle(summary, t) {
184
+ const labels = summary.counts.slice(0, 3).map(({ kind }) => t(STEP_DONE_KEYS[kind]));
185
+ const first = labels[0];
186
+ if (first === undefined)
187
+ return t('stepProcessDoneThinking');
188
+ const continuation = (label) => label.charAt(0).toLowerCase() + label.slice(1);
189
+ const second = labels[1];
190
+ if (second === undefined)
191
+ return first;
192
+ if (labels.length === 2) {
193
+ const prefix = t('stepProcessSharedPrefix');
194
+ return t('stepProcessJoinTwo', {
195
+ first,
196
+ second: continuation(prefix !== '' && first.startsWith(prefix) && second.startsWith(prefix) ? second.slice(prefix.length) : second),
197
+ });
198
+ }
199
+ const title = [first, ...labels.slice(1).map(continuation)].join(t('stepProcessComma'));
200
+ return summary.counts.length > 3 ? t('stepProcessMore', { title }) : title;
201
+ }
202
+ //# sourceMappingURL=process-groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-groups.js","sourceRoot":"","sources":["../../../src/session/mirror/process-groups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /** 语义名 → 真实(带哈希)类名。 */
2
+ export type OfficialClassMap = Map<string, string>;
3
+ /**
4
+ * 解析一段官方 CSS module 文本,抽出 {语义名 → 真实类名}。
5
+ * 纯函数、无 DOM 依赖(冒烟可直接对夹具断言)。
6
+ * @param css - style 标签的 textContent。
7
+ * @returns 语义名到真实类名的映射;解析不出哈希前缀时为空表。
8
+ */
9
+ export declare function parseOfficialCss(css: string): OfficialClassMap;
10
+ /**
11
+ * 扫描 document 里官方 chat 包注入的 style 标签,按模块缓存解析结果。
12
+ * 无 document(SSR / 冒烟)时返回空表。
13
+ */
14
+ export declare function discoverOfficialClasses(): Map<string, OfficialClassMap>;
15
+ /** 已发现的官方模块数(0 = 官方样式未注入,调用方应走自绘兜底)。 */
16
+ export declare function officialModuleCount(): number;
17
+ /**
18
+ * 取一个官方类名;取不到返回 null(调用方回退自绘样式)。
19
+ * @param module - 模块名(如 `ChatView`)。
20
+ * @param semantic - 语义名(如 `frame`)。
21
+ */
22
+ export declare function officialClass(module: string, semantic: string): string | null;
23
+ /**
24
+ * 取多个官方类名并拼成 className;取不到的项自动跳过。
25
+ * @param pairs - [模块名, 语义名] 列表。
26
+ */
27
+ export declare function officialClasses(...pairs: Array<[string, string]>): string;
28
+ //# sourceMappingURL=official-classes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"official-classes.d.ts","sourceRoot":"","sources":["../../src/session/official-classes.ts"],"names":[],"mappings":"AAuCA,uBAAuB;AACvB,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAElD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAiC9D;AAKD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAwBvE;AAED,wCAAwC;AACxC,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAOzE"}
@@ -0,0 +1,146 @@
1
+ // 复用官方真实 CSS-module 类名(会话预览弹窗外观对齐官方,方案 ①)。
2
+ //
3
+ // 事实(读 @deepseek-ai/dsh-client-ui-chat@0.1.7-rc.2 源码 lib/client.js):
4
+ // 官方 CSS module 由宿主在运行时注入 document.head,形如
5
+ // <style data-plugin="@deepseek-ai/dsh-client-ui-chat"
6
+ // data-plugin-css="@deepseek-ai/dsh-client-ui-chat/ChatView.module.css">
7
+ // .EvIC1a_frame{...} .EvIC1a_root{...} .EvIC1a_scroll{...} ...
8
+ // 类名 = <构建哈希>_<语义名>(语义名是 camelCase,来自源码里的 *_module_css_default 映射表)。
9
+ //
10
+ // 为什么要「运行时发现」而不是把类名写死:哈希每次构建都可能变,写死就会在某次宿主升级后
11
+ // 集体失效;运行时解析则**自动跟随**。语义名若被改名,取不到 ⇒ 回退到自绘样式(不崩、
12
+ // 不空白),并在控制台告警一次。
13
+ //
14
+ // 已知官方模块与语义名(源码 *_module_css_default 实测清单):
15
+ // ChatView(12): frame root scroll column flowItem hint older callRow openError modalAction toBottom toBottomSlot
16
+ // AssistantMarkdown(4): root body actions stopped
17
+ // MessageItem(32): bubble userRow userStack contextRow fileCard ... turnErrorRow retryRow ...
18
+ // GenericCommandCard(8): root row title summary body chevron leading separator
19
+ // (另有 ContextBody / StatsPills / TurnNavigator / accessibility 等,按需取用)
20
+ // ui-tool 包(工具卡,2026-09 对齐官方 GenericToolCard 时接入):
21
+ // ToolRow(30): root row leading title sep summary summarySuffix diffStat fileLink
22
+ // errorSummary stoppedSummary bodyWrap inspectButton detailsBodyWrap bodyScroll ioCard
23
+ // ioSection ioLabel ioDivider ioText codeBody terminalBody diffBody readBody imageBody
24
+ // searchBody webBody searchRecovery imageLabel imageMeta visuallyHidden
25
+ // ui-sidebar-documentpreview 包(官方文件预览体,2026-09 U11 文本渲染对齐时接入):
26
+ // CodeBody(2): renderer code(CodeBlock + lineNumbers 的官方外壳)
27
+ // ui-deliverables 包(交付文件行 + 交付文件卡,2026-09 U11 产出物入口接入):
28
+ // PresentRow(4): summary paths output inspect
29
+ // Deliverables(16): root hostStatus presented file cardPreview fileIcon fileBody details
30
+ // fileName description previewHint secondaryText toggle actions success-fade
31
+ /** 官方注入 style 标签的 data-plugin-css 包前缀(chat 主视图 + ui-tool 工具卡 + ui-deliverables)。 */
32
+ const CSS_PKG_PREFIXES = [
33
+ '@deepseek-ai/dsh-client-ui-chat/',
34
+ '@deepseek-ai/dsh-client-ui-tool/',
35
+ '@deepseek-ai/dsh-client-ui-deliverables/',
36
+ '@deepseek-ai/dsh-client-ui-sidebar-documentpreview/',
37
+ ];
38
+ /**
39
+ * 解析一段官方 CSS module 文本,抽出 {语义名 → 真实类名}。
40
+ * 纯函数、无 DOM 依赖(冒烟可直接对夹具断言)。
41
+ * @param css - style 标签的 textContent。
42
+ * @returns 语义名到真实类名的映射;解析不出哈希前缀时为空表。
43
+ */
44
+ export function parseOfficialCss(css) {
45
+ const out = new Map();
46
+ const tokens = [];
47
+ const tokenRe = /\.([A-Za-z0-9_-]+)/g;
48
+ let m = tokenRe.exec(css);
49
+ while (m !== null) {
50
+ const token = m[1];
51
+ if (token !== undefined)
52
+ tokens.push(token);
53
+ m = tokenRe.exec(css);
54
+ }
55
+ // 类名形如 <hash>_<semantic>,而 **hash 本身可能以 `_` 开头**(实测:GenericCommandCard 的
56
+ // `._5OnbHa_root`),所以必须按「最后一个下划线」切分,不能按第一个——按第一个会把
57
+ // `_5OnbHa_root` 的第一个下划线当分隔位置(下标 0)而整类跳过,导致该模块解析成空表。
58
+ // 官方语义名是 camelCase、不含下划线(源码 *_module_css_default 实测),故末位切分安全。
59
+ const counts = new Map();
60
+ for (const token of tokens) {
61
+ const at = token.lastIndexOf('_');
62
+ if (at <= 0 || at === token.length - 1)
63
+ continue;
64
+ const prefix = token.slice(0, at);
65
+ counts.set(prefix, (counts.get(prefix) ?? 0) + 1);
66
+ }
67
+ let prefix = '';
68
+ let best = 0;
69
+ counts.forEach((count, key) => { if (count > best) {
70
+ best = count;
71
+ prefix = key;
72
+ } });
73
+ if (prefix === '')
74
+ return out;
75
+ for (const token of tokens) {
76
+ if (!token.startsWith(prefix + '_'))
77
+ continue;
78
+ const semantic = token.slice(prefix.length + 1);
79
+ // 语义名是 camelCase,不含下划线;跳过复合类名(如 foo_bar_baz 的剩余部分)
80
+ if (semantic === '' || semantic.includes('_'))
81
+ continue;
82
+ if (!out.has(semantic))
83
+ out.set(semantic, token);
84
+ }
85
+ return out;
86
+ }
87
+ /** 已发现的官方模块表(只在真的发现到模块时才缓存,见 discoverOfficialClasses 内注释)。 */
88
+ let discovered = null;
89
+ /**
90
+ * 扫描 document 里官方 chat 包注入的 style 标签,按模块缓存解析结果。
91
+ * 无 document(SSR / 冒烟)时返回空表。
92
+ */
93
+ export function discoverOfficialClasses() {
94
+ if (discovered !== null)
95
+ return discovered;
96
+ const result = new Map();
97
+ if (typeof document !== 'undefined') {
98
+ const tags = document.querySelectorAll('style[data-plugin-css]');
99
+ for (let i = 0; i < tags.length; i++) {
100
+ const tag = tags[i];
101
+ const id = tag.dataset.pluginCss ?? '';
102
+ const prefix = CSS_PKG_PREFIXES.find(candidate => id.startsWith(candidate));
103
+ if (prefix === undefined)
104
+ continue;
105
+ const module = id.slice(prefix.length).replace(/\.module\.css$/, '');
106
+ const parsed = parseOfficialCss(tag.textContent ?? '');
107
+ // 解析成空表 = 解析器没认出该模块的类名格式(曾在 GenericCommandCard 上踩过:
108
+ // 哈希以 `_` 开头被首下划线切分跳过)⇒ 显式告警,别再静默退回自绘。
109
+ if (parsed.size === 0 && (tag.textContent ?? '').includes('.')) {
110
+ console.warn(`[dsh-plugin-core:session] 官方模块 ${module} 类名解析为空(格式可能变了)`);
111
+ }
112
+ result.set(module, parsed);
113
+ }
114
+ }
115
+ // 只在真的发现到模块时才缓存:本插件 client 可能先于官方 chat 包加载,
116
+ // 此时扫到空表若缓存住,后面官方样式注入了也取不到。
117
+ if (result.size > 0)
118
+ discovered = result;
119
+ return result;
120
+ }
121
+ /** 已发现的官方模块数(0 = 官方样式未注入,调用方应走自绘兜底)。 */
122
+ export function officialModuleCount() {
123
+ return discoverOfficialClasses().size;
124
+ }
125
+ /**
126
+ * 取一个官方类名;取不到返回 null(调用方回退自绘样式)。
127
+ * @param module - 模块名(如 `ChatView`)。
128
+ * @param semantic - 语义名(如 `frame`)。
129
+ */
130
+ export function officialClass(module, semantic) {
131
+ return discoverOfficialClasses().get(module)?.get(semantic) ?? null;
132
+ }
133
+ /**
134
+ * 取多个官方类名并拼成 className;取不到的项自动跳过。
135
+ * @param pairs - [模块名, 语义名] 列表。
136
+ */
137
+ export function officialClasses(...pairs) {
138
+ const out = [];
139
+ for (const [module, semantic] of pairs) {
140
+ const found = officialClass(module, semantic);
141
+ if (found !== null)
142
+ out.push(found);
143
+ }
144
+ return out.join(' ');
145
+ }
146
+ //# sourceMappingURL=official-classes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"official-classes.js","sourceRoot":"","sources":["../../src/session/official-classes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ChatViewFace, SessionSnapshotFace, SessionsFace, SnapshotFace, UiConversationFace } from './faces.js';
2
+ /** 弹窗数据源:已解析的 target 与向前翻页句柄;解析失败给 null。 */
3
+ export interface SessionViewTarget {
4
+ readonly target: SnapshotFace<ChatViewFace | undefined>;
5
+ /** 向前翻一页更早的历史(官方 loadOlder;未 open / 翻尽时官方自行空转)。 */
6
+ loadOlder(): void;
7
+ readonly session: SnapshotFace<SessionSnapshotFace>;
8
+ /** 释放 sessions.retain 引用(弹窗关闭时必调;否则会话 scope 永不回收)。 */
9
+ dispose(): void;
10
+ }
11
+ /** 默认 retain source(写进宿主 retainedBy;调用方可覆盖成自己的插件名)。 */
12
+ export declare const DEFAULT_RETAIN_SOURCE = "dsh-plugin-core";
13
+ /** 打开只读视图:物化 binding → 探测拉尾页 → 建 chat target。会话不可解析时返回 null。 */
14
+ export declare function openSessionView(sessions: SessionsFace, uiConversation: UiConversationFace, id: string,
15
+ /** retain 引用记进宿主 retainedBy 的键;默认 'dsh-plugin-core'。 */
16
+ retainSource?: string): SessionViewTarget | null;
17
+ //# sourceMappingURL=open-session-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-session-view.d.ts","sourceRoot":"","sources":["../../src/session/open-session-view.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,YAAY,EAEZ,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAEnB,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;IACvD,mDAAmD;IACnD,SAAS,IAAI,IAAI,CAAA;IACjB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,mBAAmB,CAAC,CAAA;IACnD,sDAAsD;IACtD,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,oBAAoB,CAAA;AAEtD,gEAAgE;AAChE,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,kBAAkB,EAClC,EAAE,EAAE,MAAM;AACV,wDAAwD;AACxD,YAAY,GAAE,MAA8B,GAC3C,iBAAiB,GAAG,IAAI,CAuF1B"}
@@ -0,0 +1,136 @@
1
+ // 只读会话视图的数据链(移植自兄弟项目 session-view.ts,决策 28 数据链)。
2
+ //
3
+ // 数据链(全部经源码核实,出处见 ./faces.ts 顶部注释):
4
+ // 1. `sessions.retain(id, { source })` —— binding(id) 只查已物化 scope、从不创建
5
+ // (0.1.7-rc.2 lib/client.js:3406)⇒ 归档 / 久未打开的会话返回 undefined。
6
+ // 正解 = retain → retainScope → materializeScope(3410/3472)物化 scope 并在内部触发
7
+ // manager.get(id).open() 拉历史尾页;引用用完 release()(否则 scope 永不回收)。
8
+ // **归档会话就在这条路上可读**(archiveSession 只藏显示面、不动存储,capabilities.md:26/32)。
9
+ // 2. `sessions.binding(id)` 取绑定;`uiConversation.binding(binding)` 校验归属
10
+ // (非活跃会话抛 inactive session,ui-conversation lib/client.js:3083)⇒ retain 之后即通过。
11
+ // 3. `.target('chat')`:快照 = ChatSnapshot,**同时**带两份数据:
12
+ // · `order` + `nodes`(keyed ChatNodeStore)= 官方 ChatView 真正渲染的那条流,
13
+ // turn-trigger / turn-process / assistant-step / tool-call / turn-tail 都在这里;
14
+ // · `legacy.nodes` = 官方兼容投影(老 kind 名,缺 turn-trigger / turn-process)。
15
+ // 渲染主路走 keyed 流;`legacy.nodes` 只作 order 为空时的兜底。
16
+ //
17
+ // ⛔ 已证伪、勿再尝试(兄弟项目真机实测):
18
+ // - 弹窗内渲染官方 ChatView:`ctx.slots.renderSlot` 只接受 key='root'(运行时强制);
19
+ // - `retain(source:'mainView')` 切官方视图:会锁死宿主会话导航(真机事故,已回退);
20
+ // - 冷读 RPC `$stream('session/follow')`:宿主 remote 只有 $stream/invoke,invoke 报
21
+ // 「无活动通道」⇒ 归档会话一律走上面的 retain 主路,不搞冷读。
22
+ /** 默认 retain source(写进宿主 retainedBy;调用方可覆盖成自己的插件名)。 */
23
+ export const DEFAULT_RETAIN_SOURCE = 'dsh-plugin-core';
24
+ /** 打开只读视图:物化 binding → 探测拉尾页 → 建 chat target。会话不可解析时返回 null。 */
25
+ export function openSessionView(sessions, uiConversation, id,
26
+ /** retain 引用记进宿主 retainedBy 的键;默认 'dsh-plugin-core'。 */
27
+ retainSource = DEFAULT_RETAIN_SOURCE) {
28
+ const log = (level, msg, extra) => {
29
+ if (level === 'warn')
30
+ console.warn(`[dsh-plugin-core:session] ${msg}`, extra ?? '');
31
+ else
32
+ console.info(`[dsh-plugin-core:session] ${msg}`);
33
+ };
34
+ // retain 引用:用完必须 release(否则会话 scope 不会被回收)。
35
+ let retainedRef = null;
36
+ const releaseRef = () => {
37
+ try {
38
+ retainedRef?.release();
39
+ }
40
+ catch (err) {
41
+ log('warn', `sessions.retain 引用释放失败(${id})`, err);
42
+ }
43
+ retainedRef = null;
44
+ };
45
+ let binding;
46
+ try {
47
+ const S0 = sessions;
48
+ const retainFn = S0.retain;
49
+ if (typeof retainFn === 'function') {
50
+ try {
51
+ retainedRef = retainFn
52
+ .call(S0, id, { source: retainSource });
53
+ log('info', `sessions.retain(${id}, { source: '${retainSource}' }) 成功:scope 已物化`);
54
+ }
55
+ catch (err) {
56
+ log('warn', `sessions.retain(${id}) 抛错(未知会话?)`, err);
57
+ }
58
+ }
59
+ else {
60
+ log('warn', `sessions 无 retain 方法;归档 / 久未打开的会话将不可读。自身键=[${Object.keys(S0).join(',')}]`);
61
+ }
62
+ const found = sessions.binding(id);
63
+ if (found === undefined || found === null) {
64
+ // 取证优先:把 sessions 服务真实方法面全打出来,下次不再猜。
65
+ const S0d = sessions;
66
+ const allFn = (() => {
67
+ const out = new Set();
68
+ let cur = S0d;
69
+ while (cur && (typeof cur === 'object' || typeof cur === 'function')) {
70
+ for (const k of Object.getOwnPropertyNames(cur)) {
71
+ const v = cur[k];
72
+ if (typeof v === 'function' && k !== 'constructor')
73
+ out.add(k);
74
+ }
75
+ cur = Object.getPrototypeOf(cur);
76
+ }
77
+ return [...out];
78
+ })();
79
+ log('warn', `sessions.binding(${id}) 为空(会话未就位,retain 也未物化)。sessions 方法全清单=[${allFn.join(',')}];自身键=[${Object.keys(S0d).join(',')}]`);
80
+ releaseRef();
81
+ return null;
82
+ }
83
+ binding = found;
84
+ }
85
+ catch (err) {
86
+ log('warn', `openSessionView 返回 null:sessions.binding(${id}) 抛错`, err);
87
+ releaseRef();
88
+ return null;
89
+ }
90
+ const session = binding.session;
91
+ // 数据闸门:官方 Session.open() 幂等拉历史尾页。类型未公开 ⇒ 探测调用;
92
+ // 失败软着陆(界面显示空态与重试提示,不崩面板)。
93
+ try {
94
+ const opened = session.open?.();
95
+ if (opened !== undefined && typeof opened.catch === 'function') {
96
+ opened.catch((err) => log('warn', `session.open(${id}) 失败(仅影响历史加载,不阻断弹窗)`, err));
97
+ }
98
+ }
99
+ catch (err) {
100
+ log('warn', `session.open(${id}) 抛错`, err);
101
+ }
102
+ let conversation;
103
+ try {
104
+ conversation = uiConversation.binding(binding);
105
+ }
106
+ catch (err) {
107
+ log('warn', 'openSessionView 返回 null:uiConversation.binding 抛错(binding 已取得,断点在 uiConversation 装配)', err);
108
+ return null;
109
+ }
110
+ let target;
111
+ try {
112
+ target = conversation.target('chat');
113
+ }
114
+ catch (err) {
115
+ log('warn', "openSessionView 返回 null:conversation.target('chat') 抛错", err);
116
+ return null;
117
+ }
118
+ log('info', `openSessionView 成功建立 target(${id});首屏 nodes 待订阅回填`);
119
+ return {
120
+ target,
121
+ session,
122
+ dispose: releaseRef,
123
+ loadOlder() {
124
+ try {
125
+ const page = session.loadOlder?.();
126
+ if (page !== undefined && typeof page.catch === 'function') {
127
+ page.catch((err) => log('warn', `session.loadOlder(${id}) 失败`, err));
128
+ }
129
+ }
130
+ catch (err) {
131
+ log('warn', `session.loadOlder(${id}) 抛错`, err);
132
+ }
133
+ },
134
+ };
135
+ }
136
+ //# sourceMappingURL=open-session-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-session-view.js","sourceRoot":"","sources":["../../src/session/open-session-view.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,oCAAoC;AACpC,uEAAuE;AACvE,gEAAgE;AAChE,4EAA4E;AAC5E,iEAAiE;AACjE,wEAAwE;AACxE,uEAAuE;AACvE,iFAAiF;AACjF,sDAAsD;AACtD,uEAAuE;AACvE,oFAAoF;AACpF,0EAA0E;AAC1E,mDAAmD;AACnD,EAAE;AACF,wBAAwB;AACxB,sEAAsE;AACtE,8DAA8D;AAC9D,+EAA+E;AAC/E,2CAA2C;AAqB3C,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAA;AAEtD,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAC7B,QAAsB,EACtB,cAAkC,EAClC,EAAU;AACV,wDAAwD;AACxD,eAAuB,qBAAqB;IAE5C,MAAM,GAAG,GAAG,CAAC,KAAsB,EAAE,GAAW,EAAE,KAAe,EAAQ,EAAE;QACzE,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAA;;YAC9E,OAAO,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAA;IACvD,CAAC,CAAA;IACD,4CAA4C;IAC5C,IAAI,WAAW,GAA+B,IAAI,CAAA;IAClD,MAAM,UAAU,GAAG,GAAS,EAAE;QAC5B,IAAI,CAAC;YAAC,WAAW,EAAE,OAAO,EAAE,CAAA;QAAC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAAC,CAAC;QAChG,WAAW,GAAG,IAAI,CAAA;IACpB,CAAC,CAAA;IACD,IAAI,OAA2B,CAAA;IAC/B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,QAA8C,CAAA;QACzD,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAA;QAC1B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,WAAW,GAAI,QAAsE;qBAClF,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;gBACzC,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,YAAY,mBAAmB,CAAC,CAAA;YACnF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,aAAa,EAAE,GAAG,CAAC,CAAA;YAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,EAAE,8CAA8C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACzF,CAAC;QACD,MAAM,KAAK,GAAmC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAClE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,qCAAqC;YACrC,MAAM,GAAG,GAAG,QAA8C,CAAA;YAC1D,MAAM,KAAK,GAAG,CAAC,GAAa,EAAE;gBAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;gBAC7B,IAAI,GAAG,GAAY,GAAG,CAAA;gBACtB,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,UAAU,CAAC,EAAE,CAAC;oBACrE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,mBAAmB,CAAC,GAAa,CAAC,EAAE,CAAC;wBAC1D,MAAM,CAAC,GAAI,GAA+B,CAAC,CAAC,CAAC,CAAA;wBAC7C,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,aAAa;4BAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;oBAChE,CAAC;oBACD,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;gBAClC,CAAC;gBACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAA;YACjB,CAAC,CAAC,EAAE,CAAA;YACJ,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,2CAA2C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACpI,UAAU,EAAE,CAAA;YACZ,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,GAAG,KAAK,CAAA;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,EAAE,4CAA4C,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;QACtE,UAAU,EAAE,CAAA;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAC/B,+CAA+C;IAC/C,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAI,OAA0C,CAAC,IAAI,EAAE,EAAE,CAAA;QACnE,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAA;QAClF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IAAC,CAAC;IAC5D,IAAI,YAAuD,CAAA;IAC3D,IAAI,CAAC;QACH,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,EAAE,sFAAsF,EAAE,GAAG,CAAC,CAAA;QACxG,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,MAA8C,CAAA;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,EAAE,wDAAwD,EAAE,GAAG,CAAC,CAAA;QAC1E,OAAO,IAAI,CAAA;IACb,CAAC;IACD,GAAG,CAAC,MAAM,EAAE,+BAA+B,EAAE,kBAAkB,CAAC,CAAA;IAChE,OAAO;QACL,MAAM;QACN,OAAO;QACP,OAAO,EAAE,UAAU;QACnB,SAAS;YACP,IAAI,CAAC;gBACH,MAAM,IAAI,GAAI,OAA+C,CAAC,SAAS,EAAE,EAAE,CAAA;gBAC3E,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBAC3D,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;gBACtE,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAAC,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YAAC,CAAC;QACnE,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const SESSION_CSS = "\n.dshpc-ses{display:flex;flex-direction:column;min-height:0;color:var(--dshpc-fg);font-size:13px}\n.dshpc-ses--sidebar{height:100%;border-left:1px solid var(--dshpc-border-faint);background:var(--dshpc-surface-base)}\n.dshpc-ses--page{height:100%;background:var(--dshpc-surface-base)}\n.dshpc-ses__list{flex:1;min-height:0;overflow:auto;padding:8px 12px;display:flex;flex-direction:column;gap:10px}\n.dshpc-ses__msg{padding:8px 10px;border-radius:8px;background:var(--dshpc-surface-2);border:1px solid var(--dshpc-border-faint)}\n.dshpc-ses__msg--user{background:var(--dshpc-open-bg-soft)}\n.dshpc-ses__head{display:flex;align-items:center;gap:6px;margin-bottom:4px;color:var(--dshpc-fg-3);font-size:11px}\n.dshpc-ses__text{margin:0;white-space:pre-wrap;word-break:break-word;line-height:1.6}\n.dshpc-ses__atts{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}\n.dshpc-ses__att{\n display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;\n background:var(--dshpc-chip-bg);color:var(--dshpc-fg);cursor:pointer;border:none;font:inherit;font-size:12px;\n}\n.dshpc-ses__att:hover{background:var(--dshpc-chip-bg-hover)}\n.dshpc-ses__note{padding:12px;color:var(--dshpc-fg-3);text-align:center}\n";
1
+ export { SESSION_CSS } from './session-css.generated.js';
2
2
  //# sourceMappingURL=session-css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-css.d.ts","sourceRoot":"","sources":["../../src/session/session-css.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,2sCAgBvB,CAAA"}
1
+ {"version":3,"file":"session-css.d.ts","sourceRoot":"","sources":["../../src/session/session-css.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const SESSION_CSS = "/* \u4F1A\u8BDD\u9884\u89C8\uFF08SessionViewModal\uFF09\u81EA\u7ED8\u6837\u5F0F\uFF1A\u53EA\u88C5\u672C\u5305\u81EA\u5DF1\u7684\u7EC4\u4EF6\uFF08\u6682\u5B58\u8F93\u5165\u533A / fork / \u63A2\u9488\u7B49\uFF09\n + \u4E24\u4E2A\u7A33\u5B9A\u94A9\u5B50\u7C7B\uFF08dshpc-sv-frame / dshpc-sv-scroll\uFF09\u3002\n \u5DF2\u5220\uFF1AChangedFiles \u5361\u4E0E FileDiff \u7684\u5168\u90E8\u81EA\u7ED8\u89C4\u5219\uFF082026-10-24\uFF09\u2014\u2014\u5B98\u65B9 ChangedFiles /\n FileDiff \u6A21\u5757\u7C7B\u7531 officialClass() \u8FD0\u884C\u65F6\u53D1\u73B0\u5E76\u6302\u5728\u5143\u7D20\u4E0A\uFF0C\u672C\u5305\u4E0D\u518D\u6709\u4E00\u884C\u515C\u5E95\u3002\n \u26A0\uFE0F 2026-10-23 \u8D77\u4E0D\u518D\u6709\u5B98\u65B9\u7C7B\u515C\u5E95\uFF1A\u955C\u50CF\u5B98\u65B9\u7EC4\u4EF6\u7684\u5143\u7D20\u4E00\u5F8B\u6302\u5B98\u65B9 CSS-module \u7C7B\u540D\n \uFF08officialClass() \u8FD0\u884C\u65F6\u53D1\u73B0\uFF0C\u53D6\u4E0D\u5230 = \u7A7A\u7C7B\u3001\u88F8\u7ED3\u6784\u4E0D\u767D\u5C4F\uFF09\u2014\u2014\u672C\u5305\u53EA\u8DD1 DSH \u5BBF\u4E3B\u3001\u5B98\u65B9\u6837\u5F0F\u5FC5\u5728\u573A\uFF0C\n \u81EA\u7ED8\u4E00\u4E00\u5BF9\u5E94\u662F\u6B7B\u4EE3\u7801\u3002\u8981\u6539\u5B98\u65B9\u89C2\u611F\u8D70 token \u8986\u76D6 / \u53CC\u7C7B\u540D\u94A9\u5B50\uFF08\u89C1 ChatView.ts \u5934\u6CE8\uFF09\uFF0C\u522B\u5728\u8FD9\u52A0\u515C\u5E95\u3002\n \u7C7B\u540D\u56FA\u5B9A dshpc-sv-*\uFF1B\u989C\u8272\u4E00\u5F8B\u8D70 --dshpc-* token\uFF08\u660E\u6697\u81EA\u9002\u5E94\uFF09\u3002\n \u5916\u58F3\uFF08\u906E\u7F69 / \u9762\u677F / \u5934\u90E8 / \u5173\u95ED\u94AE\uFF09= \u6838\u5FC3 Modal\uFF08size lg\uFF09\u3002 */\n/* \u4F1A\u8BDD\u533A = \u666E\u901A\u7EB5\u5411\u6D41\uFF1A\u4E0D\u8BBE\u9AD8\u5EA6\u3001\u4E0D\u81EA\u5DF1\u6EDA\uFF08\u6EDA\u52A8\u4E0E\u5185\u8DDD\u5F52\u6838\u5FC3 Modal body\uFF0C\u7528\u6237 2026-10-22 \u53E3\u5F84\uFF09\u3002 */\n.dshpc-sv{display:flex;flex-direction:column;min-width:0;gap:10px}\n\n/* \u5B98\u65B9\u6837\u5F0F\u672A\u547D\u4E2D\u65F6\u7684\u53EF\u89C1\u63A2\u9488\uFF08\u6302\u5728\u5934\u90E8\u526F\u6807\u9898\u884C\uFF0C\u4E0D\u5360\u6B63\u6587\uFF09\u3002 */\n.dshpc-sv-probe{font-size:var(--dshpc-font-xs);color:var(--dshpc-warning,#b7791f)}\n\n/* \u5934\u90E8\u5F52\u6863\u6807\u8BC6\uFF08\u5B98\u65B9\u5F52\u6863\u56FE\u6807 + \u300C\u5DF2\u5F52\u6863\u300D\uFF09\u3002 */\n.dshpc-sv-archived{display:inline-flex;align-items:center;gap:4px;font-size:var(--dshpc-font-xs);font-weight:400;color:var(--dshpc-fg-3)}\n\n/* \u5185\u8DDD\u4E0E\u6EDA\u52A8\u5168\u90E8\u8BA9\u7ED9\u6838\u5FC3 Modal body \u21D2 \u8FD9\u91CC\u628A\u5B98\u65B9 ChatView.frame / scroll \u7684\u5185\u8DDD\u3001\n overflow\u3001\u9AD8\u5EA6\u4E00\u5F8B\u5F52\u96F6\uFF08\u53CC\u7C7B\u540D 0,2,0 \u538B\u8FC7 CSS module\uFF0C\u4E0D\u9760\u6CE8\u5165\u987A\u5E8F\uFF09\u3002\n \u26A0\uFE0F \u5FC5\u987B\u540C\u65F6\u628A flex \u6536\u6389\uFF1A\u5B98\u65B9 scroll \u662F flex:1\uFF08basis=0\uFF09\uFF0C\u5728**\u81EA\u52A8\u9AD8**\u7684\u5BB9\u5668\u91CC\u4F1A\u628A\n \u4F1A\u8BDD\u533A\u538B\u6210 0 \u9AD8 \u2014\u2014 \u8FD9\u6B63\u662F\u300C\u5185\u5BB9\u81EA\u7BA1\u9AD8\u5EA6\u300D\u7684\u8001\u6BDB\u75C5\uFF0C\u522B\u518D\u653E\u56DE\u6765\u3002 */\n.dshpc-sv-frame.dshpc-sv-frame{padding-top:0;padding-bottom:0;}\n\n.dshpc-sv-scroll.dshpc-sv-scroll{padding:0;overflow:visible;height:auto;max-height:none;flex:none;}\n\n/* \u4F1A\u8BDD\u533A\u4FDD\u5E95\uFF1A\u9AD8\u5EA6\u7531\u5185\u5BB9\u51B3\u5B9A\uFF08\u6491\u5F00\u7531 Modal body \u6EDA\uFF09\u3002 */\n.dshpc-sv-chat{flex:none;min-height:0;}\n\n\n.dshpc-sv-assistant{align-self:stretch;font-size:var(--dshpc-font-lg);line-height:1.7;word-break:break-word;}\n\n.dshpc-sv-image{align-self:flex-start;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3,rgba(128,128,128,.8));border:1px dashed var(--dshpc-border,rgba(128,128,128,.35));border-radius:var(--dshpc-radius-sm);padding:4px 10px;}\n\n/* \u5DE5\u5177\u5361\u6839\uFF08SessionViewModal legacy \u515C\u5E95\u6E32\u67D3\u76F4\u63A5\u7528\uFF1B\u6B63\u5E38 keyed \u8DEF\u5F84\u4E00\u5F8B\u6302\u5B98\u65B9 ToolRow \u7C7B\uFF09\u3002 */\n.dshpc-sv-tool{flex-direction:column;display:flex;}\n\n.dshpc-sv-notice{align-self:center;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3,rgba(128,128,128,.8));padding:2px 8px;}\n\n\n.dshpc-sv-forkerr{margin:0;font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);color:var(--dshpc-danger,#e5484d);word-break:break-word;}\n\n.dshpc-sv-forktext{margin:0;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);color:var(--dshpc-fg-2);}\n\n/* \u2500\u2500 \u6682\u5B58\u8F93\u5165\u533A\uFF08\u671F4\uFF1A\u6253\u5B57 \u2192 \u786E\u5B9A \u2192 fork \u5E26\u8BDD\u8DF3\u5B98\u65B9\u89C6\u56FE\uFF09\u2500\u2500 */\n.dshpc-sv-composer{flex:1;display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap;}\n\n.dshpc-sv-composer textarea{flex:1;min-width:0;resize:none;font:inherit;font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);color:var(--dshpc-fg,#1f2328);background:var(--dshpc-surface-2,rgba(128,128,128,.10));border:1px solid var(--dshpc-border,rgba(128,128,128,.28));border-radius:var(--dshpc-radius-md);padding:8px 12px;min-height:40px;max-height:120px;}\n\n.dshpc-sv-composer textarea:focus-visible{outline:2px solid var(--dshpc-focus,#3b5bdb);outline-offset:-1px;}\n\n.dshpc-sv-composer-hint{flex:none;font-size:var(--dshpc-font-xs);color:var(--dshpc-fg-3,rgba(128,128,128,.8));padding-bottom:10px;white-space:nowrap;}";
2
+ //# sourceMappingURL=session-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-css.generated.d.ts","sourceRoot":"","sources":["../../src/session/session-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,i2KAAqhG,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/session/session.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const SESSION_CSS = "/* 会话预览(SessionViewModal)自绘样式:只装本包自己的组件(暂存输入区 / fork / 探针等)\n + 两个稳定钩子类(dshpc-sv-frame / dshpc-sv-scroll)。\n 已删:ChangedFiles 卡与 FileDiff 的全部自绘规则(2026-10-24)——官方 ChangedFiles /\n FileDiff 模块类由 officialClass() 运行时发现并挂在元素上,本包不再有一行兜底。\n ⚠️ 2026-10-23 起不再有官方类兜底:镜像官方组件的元素一律挂官方 CSS-module 类名\n (officialClass() 运行时发现,取不到 = 空类、裸结构不白屏)——本包只跑 DSH 宿主、官方样式必在场,\n 自绘一一对应是死代码。要改官方观感走 token 覆盖 / 双类名钩子(见 ChatView.ts 头注),别在这加兜底。\n 类名固定 dshpc-sv-*;颜色一律走 --dshpc-* token(明暗自适应)。\n 外壳(遮罩 / 面板 / 头部 / 关闭钮)= 核心 Modal(size lg)。 */\n/* 会话区 = 普通纵向流:不设高度、不自己滚(滚动与内距归核心 Modal body,用户 2026-10-22 口径)。 */\n.dshpc-sv{display:flex;flex-direction:column;min-width:0;gap:10px}\n\n/* 官方样式未命中时的可见探针(挂在头部副标题行,不占正文)。 */\n.dshpc-sv-probe{font-size:var(--dshpc-font-xs);color:var(--dshpc-warning,#b7791f)}\n\n/* 头部归档标识(官方归档图标 + 「已归档」)。 */\n.dshpc-sv-archived{display:inline-flex;align-items:center;gap:4px;font-size:var(--dshpc-font-xs);font-weight:400;color:var(--dshpc-fg-3)}\n\n/* 内距与滚动全部让给核心 Modal body ⇒ 这里把官方 ChatView.frame / scroll 的内距、\n overflow、高度一律归零(双类名 0,2,0 压过 CSS module,不靠注入顺序)。\n ⚠️ 必须同时把 flex 收掉:官方 scroll 是 flex:1(basis=0),在**自动高**的容器里会把\n 会话区压成 0 高 —— 这正是「内容自管高度」的老毛病,别再放回来。 */\n.dshpc-sv-frame.dshpc-sv-frame{padding-top:0;padding-bottom:0;}\n\n.dshpc-sv-scroll.dshpc-sv-scroll{padding:0;overflow:visible;height:auto;max-height:none;flex:none;}\n\n/* 会话区保底:高度由内容决定(撑开由 Modal body 滚)。 */\n.dshpc-sv-chat{flex:none;min-height:0;}\n\n\n.dshpc-sv-assistant{align-self:stretch;font-size:var(--dshpc-font-lg);line-height:1.7;word-break:break-word;}\n\n.dshpc-sv-image{align-self:flex-start;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3,rgba(128,128,128,.8));border:1px dashed var(--dshpc-border,rgba(128,128,128,.35));border-radius:var(--dshpc-radius-sm);padding:4px 10px;}\n\n/* 工具卡根(SessionViewModal legacy 兜底渲染直接用;正常 keyed 路径一律挂官方 ToolRow 类)。 */\n.dshpc-sv-tool{flex-direction:column;display:flex;}\n\n.dshpc-sv-notice{align-self:center;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3,rgba(128,128,128,.8));padding:2px 8px;}\n\n\n.dshpc-sv-forkerr{margin:0;font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);color:var(--dshpc-danger,#e5484d);word-break:break-word;}\n\n.dshpc-sv-forktext{margin:0;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);color:var(--dshpc-fg-2);}\n\n/* ── 暂存输入区(期4:打字 → 确定 → fork 带话跳官方视图)── */\n.dshpc-sv-composer{flex:1;display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap;}\n\n.dshpc-sv-composer textarea{flex:1;min-width:0;resize:none;font:inherit;font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);color:var(--dshpc-fg,#1f2328);background:var(--dshpc-surface-2,rgba(128,128,128,.10));border:1px solid var(--dshpc-border,rgba(128,128,128,.28));border-radius:var(--dshpc-radius-md);padding:8px 12px;min-height:40px;max-height:120px;}\n\n.dshpc-sv-composer textarea:focus-visible{outline:2px solid var(--dshpc-focus,#3b5bdb);outline-offset:-1px;}\n\n.dshpc-sv-composer-hint{flex:none;font-size:var(--dshpc-font-xs);color:var(--dshpc-fg-3,rgba(128,128,128,.8));padding-bottom:10px;white-space:nowrap;}";
4
+ //# sourceMappingURL=session-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-css.generated.js","sourceRoot":"","sources":["../../src/session/session-css.generated.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,khGAAkhG,CAAA"}