dsh-plugin-core 0.32.0 → 0.33.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 (634) hide show
  1. package/README.md +197 -64
  2. package/README.zh-CN.md +242 -0
  3. package/dist/adv/explorer/FileBrowser.d.ts +58 -0
  4. package/dist/adv/explorer/FileBrowser.d.ts.map +1 -0
  5. package/dist/adv/explorer/FileBrowser.js +632 -0
  6. package/dist/adv/explorer/FileBrowser.js.map +1 -0
  7. package/dist/adv/explorer/crumb-nav.d.ts +45 -0
  8. package/dist/adv/explorer/crumb-nav.d.ts.map +1 -0
  9. package/dist/adv/explorer/crumb-nav.js +78 -0
  10. package/dist/adv/explorer/crumb-nav.js.map +1 -0
  11. package/dist/adv/explorer/crumbs-menu.d.ts +37 -0
  12. package/dist/adv/explorer/crumbs-menu.d.ts.map +1 -0
  13. package/dist/adv/explorer/crumbs-menu.js +102 -0
  14. package/dist/adv/explorer/crumbs-menu.js.map +1 -0
  15. package/dist/adv/explorer/explorer-css.d.ts +2 -0
  16. package/dist/adv/explorer/explorer-css.d.ts.map +1 -0
  17. package/dist/adv/explorer/explorer-css.generated.d.ts +2 -0
  18. package/dist/adv/explorer/explorer-css.generated.d.ts.map +1 -0
  19. package/dist/adv/explorer/explorer-css.generated.js +4 -0
  20. package/dist/adv/explorer/explorer-css.generated.js.map +1 -0
  21. package/dist/adv/explorer/explorer-css.js +3 -0
  22. package/dist/adv/explorer/explorer-css.js.map +1 -0
  23. package/dist/adv/explorer/fs-face.d.ts +36 -0
  24. package/dist/adv/explorer/fs-face.d.ts.map +1 -0
  25. package/dist/adv/explorer/fs-face.js +74 -0
  26. package/dist/adv/explorer/fs-face.js.map +1 -0
  27. package/dist/adv/explorer/index.d.ts +6 -0
  28. package/dist/adv/explorer/index.d.ts.map +1 -0
  29. package/dist/adv/explorer/index.js +6 -0
  30. package/dist/adv/explorer/index.js.map +1 -0
  31. package/dist/adv/explorer/landing.d.ts +26 -0
  32. package/dist/adv/explorer/landing.d.ts.map +1 -0
  33. package/dist/adv/explorer/landing.js +43 -0
  34. package/dist/adv/explorer/landing.js.map +1 -0
  35. package/dist/adv/explorer/open.d.ts +137 -0
  36. package/dist/adv/explorer/open.d.ts.map +1 -0
  37. package/dist/adv/explorer/open.js +350 -0
  38. package/dist/adv/explorer/open.js.map +1 -0
  39. package/dist/adv/explorer/picker-placement.d.ts +69 -0
  40. package/dist/adv/explorer/picker-placement.d.ts.map +1 -0
  41. package/dist/adv/explorer/picker-placement.js +122 -0
  42. package/dist/adv/explorer/picker-placement.js.map +1 -0
  43. package/dist/adv/explorer/preview/BytesPreview.d.ts +12 -0
  44. package/dist/adv/explorer/preview/BytesPreview.d.ts.map +1 -0
  45. package/dist/adv/explorer/preview/BytesPreview.js +60 -0
  46. package/dist/adv/explorer/preview/BytesPreview.js.map +1 -0
  47. package/dist/adv/explorer/preview/HtmlPreview.d.ts +17 -0
  48. package/dist/adv/explorer/preview/HtmlPreview.d.ts.map +1 -0
  49. package/dist/adv/explorer/preview/HtmlPreview.js +113 -0
  50. package/dist/adv/explorer/preview/HtmlPreview.js.map +1 -0
  51. package/dist/adv/explorer/preview/OfficePreview.d.ts +12 -0
  52. package/dist/adv/explorer/preview/OfficePreview.d.ts.map +1 -0
  53. package/dist/adv/explorer/preview/OfficePreview.js +63 -0
  54. package/dist/adv/explorer/preview/OfficePreview.js.map +1 -0
  55. package/dist/adv/explorer/preview/TextPreview.d.ts +18 -0
  56. package/dist/adv/explorer/preview/TextPreview.d.ts.map +1 -0
  57. package/dist/adv/explorer/preview/TextPreview.js +122 -0
  58. package/dist/adv/explorer/preview/TextPreview.js.map +1 -0
  59. package/dist/adv/explorer/preview/index.d.ts +24 -0
  60. package/dist/adv/explorer/preview/index.d.ts.map +1 -0
  61. package/dist/adv/explorer/preview/index.js +58 -0
  62. package/dist/adv/explorer/preview/index.js.map +1 -0
  63. package/dist/adv/explorer/preview/md-labels.d.ts +3 -0
  64. package/dist/adv/explorer/preview/md-labels.d.ts.map +1 -0
  65. package/dist/adv/explorer/preview/md-labels.js +12 -0
  66. package/dist/adv/explorer/preview/md-labels.js.map +1 -0
  67. package/dist/adv/explorer/preview-title-bar.d.ts +26 -0
  68. package/dist/adv/explorer/preview-title-bar.d.ts.map +1 -0
  69. package/dist/adv/explorer/preview-title-bar.js +48 -0
  70. package/dist/adv/explorer/preview-title-bar.js.map +1 -0
  71. package/dist/adv/explorer/types.d.ts +259 -0
  72. package/dist/adv/explorer/types.d.ts.map +1 -0
  73. package/dist/adv/explorer/types.js +379 -0
  74. package/dist/adv/explorer/types.js.map +1 -0
  75. package/dist/adv/session/SessionViewModal.d.ts +37 -0
  76. package/dist/adv/session/SessionViewModal.d.ts.map +1 -0
  77. package/dist/adv/session/SessionViewModal.js +1133 -0
  78. package/dist/adv/session/SessionViewModal.js.map +1 -0
  79. package/dist/adv/session/changes.d.ts +73 -0
  80. package/dist/adv/session/changes.d.ts.map +1 -0
  81. package/dist/adv/session/changes.js +134 -0
  82. package/dist/adv/session/changes.js.map +1 -0
  83. package/dist/adv/session/faces.d.ts +244 -0
  84. package/dist/adv/session/faces.d.ts.map +1 -0
  85. package/dist/adv/session/faces.js +17 -0
  86. package/dist/adv/session/faces.js.map +1 -0
  87. package/dist/adv/session/index.d.ts +7 -0
  88. package/dist/adv/session/index.d.ts.map +1 -0
  89. package/dist/adv/session/index.js +27 -0
  90. package/dist/adv/session/index.js.map +1 -0
  91. package/dist/adv/session/mirror/AskCard.d.ts +35 -0
  92. package/dist/adv/session/mirror/AskCard.d.ts.map +1 -0
  93. package/dist/adv/session/mirror/AskCard.js +131 -0
  94. package/dist/adv/session/mirror/AskCard.js.map +1 -0
  95. package/dist/adv/session/mirror/BashRow.d.ts +14 -0
  96. package/dist/adv/session/mirror/BashRow.d.ts.map +1 -0
  97. package/dist/adv/session/mirror/BashRow.js +143 -0
  98. package/dist/adv/session/mirror/BashRow.js.map +1 -0
  99. package/dist/adv/session/mirror/ChangedFileDiff.d.ts +25 -0
  100. package/dist/adv/session/mirror/ChangedFileDiff.d.ts.map +1 -0
  101. package/dist/adv/session/mirror/ChangedFileDiff.js +178 -0
  102. package/dist/adv/session/mirror/ChangedFileDiff.js.map +1 -0
  103. package/dist/adv/session/mirror/ChangedFilesCard.d.ts +18 -0
  104. package/dist/adv/session/mirror/ChangedFilesCard.d.ts.map +1 -0
  105. package/dist/adv/session/mirror/ChangedFilesCard.js +165 -0
  106. package/dist/adv/session/mirror/ChangedFilesCard.js.map +1 -0
  107. package/dist/adv/session/mirror/ChatGroupSeat.d.ts +24 -0
  108. package/dist/adv/session/mirror/ChatGroupSeat.d.ts.map +1 -0
  109. package/dist/adv/session/mirror/ChatGroupSeat.js +135 -0
  110. package/dist/adv/session/mirror/ChatGroupSeat.js.map +1 -0
  111. package/dist/adv/session/mirror/ChatNodeSeat.d.ts +43 -0
  112. package/dist/adv/session/mirror/ChatNodeSeat.d.ts.map +1 -0
  113. package/dist/adv/session/mirror/ChatNodeSeat.js +133 -0
  114. package/dist/adv/session/mirror/ChatNodeSeat.js.map +1 -0
  115. package/dist/adv/session/mirror/ChatView.d.ts +47 -0
  116. package/dist/adv/session/mirror/ChatView.d.ts.map +1 -0
  117. package/dist/adv/session/mirror/ChatView.js +138 -0
  118. package/dist/adv/session/mirror/ChatView.js.map +1 -0
  119. package/dist/adv/session/mirror/CommandCard.d.ts +20 -0
  120. package/dist/adv/session/mirror/CommandCard.d.ts.map +1 -0
  121. package/dist/adv/session/mirror/CommandCard.js +69 -0
  122. package/dist/adv/session/mirror/CommandCard.js.map +1 -0
  123. package/dist/adv/session/mirror/ContextInjectionRow.d.ts +18 -0
  124. package/dist/adv/session/mirror/ContextInjectionRow.d.ts.map +1 -0
  125. package/dist/adv/session/mirror/ContextInjectionRow.js +50 -0
  126. package/dist/adv/session/mirror/ContextInjectionRow.js.map +1 -0
  127. package/dist/adv/session/mirror/Deliverables.d.ts +24 -0
  128. package/dist/adv/session/mirror/Deliverables.d.ts.map +1 -0
  129. package/dist/adv/session/mirror/Deliverables.js +175 -0
  130. package/dist/adv/session/mirror/Deliverables.js.map +1 -0
  131. package/dist/adv/session/mirror/GenericCommandCard.d.ts +136 -0
  132. package/dist/adv/session/mirror/GenericCommandCard.d.ts.map +1 -0
  133. package/dist/adv/session/mirror/GenericCommandCard.js +948 -0
  134. package/dist/adv/session/mirror/GenericCommandCard.js.map +1 -0
  135. package/dist/adv/session/mirror/MessageIconActions.d.ts +16 -0
  136. package/dist/adv/session/mirror/MessageIconActions.d.ts.map +1 -0
  137. package/dist/adv/session/mirror/MessageIconActions.js +69 -0
  138. package/dist/adv/session/mirror/MessageIconActions.js.map +1 -0
  139. package/dist/adv/session/mirror/MessageItem.d.ts +93 -0
  140. package/dist/adv/session/mirror/MessageItem.d.ts.map +1 -0
  141. package/dist/adv/session/mirror/MessageItem.js +194 -0
  142. package/dist/adv/session/mirror/MessageItem.js.map +1 -0
  143. package/dist/adv/session/mirror/ReasoningRow.d.ts +11 -0
  144. package/dist/adv/session/mirror/ReasoningRow.d.ts.map +1 -0
  145. package/dist/adv/session/mirror/ReasoningRow.js +111 -0
  146. package/dist/adv/session/mirror/ReasoningRow.js.map +1 -0
  147. package/dist/adv/session/mirror/RunningStatus.d.ts +12 -0
  148. package/dist/adv/session/mirror/RunningStatus.d.ts.map +1 -0
  149. package/dist/adv/session/mirror/RunningStatus.js +57 -0
  150. package/dist/adv/session/mirror/RunningStatus.js.map +1 -0
  151. package/dist/adv/session/mirror/StatDialog.d.ts +20 -0
  152. package/dist/adv/session/mirror/StatDialog.d.ts.map +1 -0
  153. package/dist/adv/session/mirror/StatDialog.js +49 -0
  154. package/dist/adv/session/mirror/StatDialog.js.map +1 -0
  155. package/dist/adv/session/mirror/ToolDetails.d.ts +65 -0
  156. package/dist/adv/session/mirror/ToolDetails.d.ts.map +1 -0
  157. package/dist/adv/session/mirror/ToolDetails.js +268 -0
  158. package/dist/adv/session/mirror/ToolDetails.js.map +1 -0
  159. package/dist/adv/session/mirror/TurnProcessNodeView.d.ts +10 -0
  160. package/dist/adv/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
  161. package/dist/adv/session/mirror/TurnProcessNodeView.js +57 -0
  162. package/dist/adv/session/mirror/TurnProcessNodeView.js.map +1 -0
  163. package/dist/adv/session/mirror/TurnTailNodeView.d.ts +57 -0
  164. package/dist/adv/session/mirror/TurnTailNodeView.d.ts.map +1 -0
  165. package/dist/adv/session/mirror/TurnTailNodeView.js +106 -0
  166. package/dist/adv/session/mirror/TurnTailNodeView.js.map +1 -0
  167. package/dist/adv/session/mirror/TurnTriggerNodeView.d.ts +16 -0
  168. package/dist/adv/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
  169. package/dist/adv/session/mirror/TurnTriggerNodeView.js +103 -0
  170. package/dist/adv/session/mirror/TurnTriggerNodeView.js.map +1 -0
  171. package/dist/adv/session/mirror/TurnUsagePanel.d.ts +21 -0
  172. package/dist/adv/session/mirror/TurnUsagePanel.d.ts.map +1 -0
  173. package/dist/adv/session/mirror/TurnUsagePanel.js +41 -0
  174. package/dist/adv/session/mirror/TurnUsagePanel.js.map +1 -0
  175. package/dist/adv/session/mirror/control-details.d.ts +9 -0
  176. package/dist/adv/session/mirror/control-details.d.ts.map +1 -0
  177. package/dist/adv/session/mirror/control-details.js +549 -0
  178. package/dist/adv/session/mirror/control-details.js.map +1 -0
  179. package/dist/adv/session/mirror/detail-i18n.d.ts +4 -0
  180. package/dist/adv/session/mirror/detail-i18n.d.ts.map +1 -0
  181. package/dist/adv/session/mirror/detail-i18n.js +153 -0
  182. package/dist/adv/session/mirror/detail-i18n.js.map +1 -0
  183. package/dist/adv/session/mirror/message-chrome.d.ts +39 -0
  184. package/dist/adv/session/mirror/message-chrome.d.ts.map +1 -0
  185. package/dist/adv/session/mirror/message-chrome.js +153 -0
  186. package/dist/adv/session/mirror/message-chrome.js.map +1 -0
  187. package/dist/adv/session/mirror/process-groups.d.ts +56 -0
  188. package/dist/adv/session/mirror/process-groups.d.ts.map +1 -0
  189. package/dist/adv/session/mirror/process-groups.js +204 -0
  190. package/dist/adv/session/mirror/process-groups.js.map +1 -0
  191. package/dist/adv/session/official-classes.d.ts +28 -0
  192. package/dist/adv/session/official-classes.d.ts.map +1 -0
  193. package/dist/adv/session/official-classes.js +152 -0
  194. package/dist/adv/session/official-classes.js.map +1 -0
  195. package/dist/adv/session/open-review.d.ts +13 -0
  196. package/dist/adv/session/open-review.d.ts.map +1 -0
  197. package/dist/adv/session/open-review.js +32 -0
  198. package/dist/adv/session/open-review.js.map +1 -0
  199. package/dist/adv/session/open-session-view.d.ts +19 -0
  200. package/dist/adv/session/open-session-view.d.ts.map +1 -0
  201. package/dist/adv/session/open-session-view.js +147 -0
  202. package/dist/adv/session/open-session-view.js.map +1 -0
  203. package/dist/adv/session/pending-inputs.d.ts +33 -0
  204. package/dist/adv/session/pending-inputs.d.ts.map +1 -0
  205. package/dist/adv/session/pending-inputs.js +130 -0
  206. package/dist/adv/session/pending-inputs.js.map +1 -0
  207. package/dist/adv/session/session-css.d.ts +2 -0
  208. package/dist/adv/session/session-css.d.ts.map +1 -0
  209. package/dist/adv/session/session-css.generated.d.ts +2 -0
  210. package/dist/adv/session/session-css.generated.d.ts.map +1 -0
  211. package/dist/adv/session/session-css.generated.js +4 -0
  212. package/dist/adv/session/session-css.generated.js.map +1 -0
  213. package/dist/adv/session/session-css.js +3 -0
  214. package/dist/adv/session/session-css.js.map +1 -0
  215. package/dist/adv/session/tail-follow.d.ts +29 -0
  216. package/dist/adv/session/tail-follow.d.ts.map +1 -0
  217. package/dist/adv/session/tail-follow.js +106 -0
  218. package/dist/adv/session/tail-follow.js.map +1 -0
  219. package/dist/ui/actions/Button.d.ts +102 -0
  220. package/dist/ui/actions/Button.d.ts.map +1 -0
  221. package/dist/ui/actions/Button.js +233 -0
  222. package/dist/ui/actions/Button.js.map +1 -0
  223. package/dist/ui/actions/button-css.generated.d.ts +2 -0
  224. package/dist/ui/actions/button-css.generated.d.ts.map +1 -0
  225. package/dist/ui/actions/button-css.generated.js +4 -0
  226. package/dist/ui/actions/button-css.generated.js.map +1 -0
  227. package/dist/ui/display/Card.d.ts +65 -0
  228. package/dist/ui/display/Card.d.ts.map +1 -0
  229. package/dist/ui/display/Card.js +109 -0
  230. package/dist/ui/display/Card.js.map +1 -0
  231. package/dist/ui/display/Chip.d.ts +28 -0
  232. package/dist/ui/display/Chip.d.ts.map +1 -0
  233. package/dist/ui/display/Chip.js +36 -0
  234. package/dist/ui/display/Chip.js.map +1 -0
  235. package/dist/ui/display/CodeViewer.d.ts +38 -0
  236. package/dist/ui/display/CodeViewer.d.ts.map +1 -0
  237. package/dist/ui/display/CodeViewer.js +107 -0
  238. package/dist/ui/display/CodeViewer.js.map +1 -0
  239. package/dist/ui/display/FieldHint.d.ts +18 -0
  240. package/dist/ui/display/FieldHint.d.ts.map +1 -0
  241. package/dist/ui/display/FieldHint.js +40 -0
  242. package/dist/ui/display/FieldHint.js.map +1 -0
  243. package/dist/ui/display/FlipText.d.ts +43 -0
  244. package/dist/ui/display/FlipText.d.ts.map +1 -0
  245. package/dist/ui/display/FlipText.js +59 -0
  246. package/dist/ui/display/FlipText.js.map +1 -0
  247. package/dist/ui/display/LiveText.d.ts +13 -0
  248. package/dist/ui/display/LiveText.d.ts.map +1 -0
  249. package/dist/ui/display/LiveText.js +19 -0
  250. package/dist/ui/display/LiveText.js.map +1 -0
  251. package/dist/ui/display/MarqueeText.d.ts +22 -0
  252. package/dist/ui/display/MarqueeText.d.ts.map +1 -0
  253. package/dist/ui/display/MarqueeText.js +52 -0
  254. package/dist/ui/display/MarqueeText.js.map +1 -0
  255. package/dist/ui/display/SectionHead.d.ts +35 -0
  256. package/dist/ui/display/SectionHead.d.ts.map +1 -0
  257. package/dist/ui/display/SectionHead.js +45 -0
  258. package/dist/ui/display/SectionHead.js.map +1 -0
  259. package/dist/ui/display/Surface.d.ts +43 -0
  260. package/dist/ui/display/Surface.d.ts.map +1 -0
  261. package/dist/ui/display/Surface.js +39 -0
  262. package/dist/ui/display/Surface.js.map +1 -0
  263. package/dist/ui/display/Table.d.ts +30 -0
  264. package/dist/ui/display/Table.d.ts.map +1 -0
  265. package/dist/ui/display/Table.js +96 -0
  266. package/dist/ui/display/Table.js.map +1 -0
  267. package/dist/ui/display/card-css.d.ts +2 -0
  268. package/dist/ui/display/card-css.d.ts.map +1 -0
  269. package/dist/ui/display/card-css.generated.d.ts +2 -0
  270. package/dist/ui/display/card-css.generated.d.ts.map +1 -0
  271. package/dist/ui/display/card-css.generated.js +4 -0
  272. package/dist/ui/display/card-css.generated.js.map +1 -0
  273. package/dist/ui/display/card-css.js +5 -0
  274. package/dist/ui/display/card-css.js.map +1 -0
  275. package/dist/ui/display/chip-css.d.ts +2 -0
  276. package/dist/ui/display/chip-css.d.ts.map +1 -0
  277. package/dist/ui/display/chip-css.generated.d.ts +2 -0
  278. package/dist/ui/display/chip-css.generated.d.ts.map +1 -0
  279. package/dist/ui/display/chip-css.generated.js +4 -0
  280. package/dist/ui/display/chip-css.generated.js.map +1 -0
  281. package/dist/ui/display/chip-css.js +12 -0
  282. package/dist/ui/display/chip-css.js.map +1 -0
  283. package/dist/ui/display/code-viewer-css.d.ts +2 -0
  284. package/dist/ui/display/code-viewer-css.d.ts.map +1 -0
  285. package/dist/ui/display/code-viewer-css.generated.d.ts +2 -0
  286. package/dist/ui/display/code-viewer-css.generated.d.ts.map +1 -0
  287. package/dist/ui/display/code-viewer-css.generated.js +4 -0
  288. package/dist/ui/display/code-viewer-css.generated.js.map +1 -0
  289. package/dist/ui/display/code-viewer-css.js +3 -0
  290. package/dist/ui/display/code-viewer-css.js.map +1 -0
  291. package/dist/ui/display/code-viewer-lang.d.ts +15 -0
  292. package/dist/ui/display/code-viewer-lang.d.ts.map +1 -0
  293. package/dist/ui/display/code-viewer-lang.js +190 -0
  294. package/dist/ui/display/code-viewer-lang.js.map +1 -0
  295. package/dist/ui/display/code-viewer-theme.d.ts +5 -0
  296. package/dist/ui/display/code-viewer-theme.d.ts.map +1 -0
  297. package/dist/ui/display/code-viewer-theme.js +138 -0
  298. package/dist/ui/display/code-viewer-theme.js.map +1 -0
  299. package/dist/ui/display/flip-css.d.ts +2 -0
  300. package/dist/ui/display/flip-css.d.ts.map +1 -0
  301. package/dist/ui/display/flip-css.generated.d.ts +2 -0
  302. package/dist/ui/display/flip-css.generated.d.ts.map +1 -0
  303. package/dist/ui/display/flip-css.generated.js +4 -0
  304. package/dist/ui/display/flip-css.generated.js.map +1 -0
  305. package/dist/ui/display/flip-css.js +4 -0
  306. package/dist/ui/display/flip-css.js.map +1 -0
  307. package/dist/ui/display/hint-css.generated.d.ts +2 -0
  308. package/dist/ui/display/hint-css.generated.d.ts.map +1 -0
  309. package/dist/ui/display/hint-css.generated.js +4 -0
  310. package/dist/ui/display/hint-css.generated.js.map +1 -0
  311. package/dist/ui/display/marquee-css.d.ts +2 -0
  312. package/dist/ui/display/marquee-css.d.ts.map +1 -0
  313. package/dist/ui/display/marquee-css.generated.d.ts +2 -0
  314. package/dist/ui/display/marquee-css.generated.d.ts.map +1 -0
  315. package/dist/ui/display/marquee-css.generated.js +4 -0
  316. package/dist/ui/display/marquee-css.generated.js.map +1 -0
  317. package/dist/ui/display/marquee-css.js +4 -0
  318. package/dist/ui/display/marquee-css.js.map +1 -0
  319. package/dist/ui/display/section-head-css.generated.d.ts +2 -0
  320. package/dist/ui/display/section-head-css.generated.d.ts.map +1 -0
  321. package/dist/ui/display/section-head-css.generated.js +4 -0
  322. package/dist/ui/display/section-head-css.generated.js.map +1 -0
  323. package/dist/ui/display/surface-css.d.ts +2 -0
  324. package/dist/ui/display/surface-css.d.ts.map +1 -0
  325. package/dist/ui/display/surface-css.generated.d.ts +2 -0
  326. package/dist/ui/display/surface-css.generated.d.ts.map +1 -0
  327. package/dist/ui/display/surface-css.generated.js +4 -0
  328. package/dist/ui/display/surface-css.generated.js.map +1 -0
  329. package/dist/ui/display/surface-css.js +7 -0
  330. package/dist/ui/display/surface-css.js.map +1 -0
  331. package/dist/ui/display/table-css.generated.d.ts +2 -0
  332. package/dist/ui/display/table-css.generated.d.ts.map +1 -0
  333. package/dist/ui/display/table-css.generated.js +4 -0
  334. package/dist/ui/display/table-css.generated.js.map +1 -0
  335. package/dist/ui/display/table-logic.d.ts +110 -0
  336. package/dist/ui/display/table-logic.d.ts.map +1 -0
  337. package/dist/ui/display/table-logic.js +81 -0
  338. package/dist/ui/display/table-logic.js.map +1 -0
  339. package/dist/ui/display/table-plain-css.generated.d.ts +2 -0
  340. package/dist/ui/display/table-plain-css.generated.d.ts.map +1 -0
  341. package/dist/ui/display/table-plain-css.generated.js +4 -0
  342. package/dist/ui/display/table-plain-css.generated.js.map +1 -0
  343. package/dist/ui/display/table-shared.d.ts +101 -0
  344. package/dist/ui/display/table-shared.d.ts.map +1 -0
  345. package/dist/ui/display/table-shared.js +229 -0
  346. package/dist/ui/display/table-shared.js.map +1 -0
  347. package/dist/ui/feedback/AlertModal.d.ts +41 -0
  348. package/dist/ui/feedback/AlertModal.d.ts.map +1 -0
  349. package/dist/ui/feedback/AlertModal.js +45 -0
  350. package/dist/ui/feedback/AlertModal.js.map +1 -0
  351. package/dist/ui/feedback/ConfirmModal.d.ts +50 -0
  352. package/dist/ui/feedback/ConfirmModal.d.ts.map +1 -0
  353. package/dist/ui/feedback/ConfirmModal.js +47 -0
  354. package/dist/ui/feedback/ConfirmModal.js.map +1 -0
  355. package/dist/ui/feedback/Loader.d.ts +49 -0
  356. package/dist/ui/feedback/Loader.d.ts.map +1 -0
  357. package/dist/ui/feedback/Loader.js +79 -0
  358. package/dist/ui/feedback/Loader.js.map +1 -0
  359. package/dist/ui/feedback/LoaderBar.d.ts +38 -0
  360. package/dist/ui/feedback/LoaderBar.d.ts.map +1 -0
  361. package/dist/ui/feedback/LoaderBar.js +79 -0
  362. package/dist/ui/feedback/LoaderBar.js.map +1 -0
  363. package/dist/ui/feedback/Loading.d.ts +69 -0
  364. package/dist/ui/feedback/Loading.d.ts.map +1 -0
  365. package/dist/ui/feedback/Loading.js +164 -0
  366. package/dist/ui/feedback/Loading.js.map +1 -0
  367. package/dist/ui/feedback/Modal.d.ts +73 -0
  368. package/dist/ui/feedback/Modal.d.ts.map +1 -0
  369. package/dist/ui/feedback/Modal.js +83 -0
  370. package/dist/ui/feedback/Modal.js.map +1 -0
  371. package/dist/ui/feedback/SideSheet.d.ts +70 -0
  372. package/dist/ui/feedback/SideSheet.d.ts.map +1 -0
  373. package/dist/ui/feedback/SideSheet.js +130 -0
  374. package/dist/ui/feedback/SideSheet.js.map +1 -0
  375. package/dist/ui/feedback/Toast.d.ts +45 -0
  376. package/dist/ui/feedback/Toast.d.ts.map +1 -0
  377. package/dist/ui/feedback/Toast.js +225 -0
  378. package/dist/ui/feedback/Toast.js.map +1 -0
  379. package/dist/ui/feedback/feedback-css.d.ts +2 -0
  380. package/dist/ui/feedback/feedback-css.d.ts.map +1 -0
  381. package/dist/ui/feedback/feedback-css.generated.d.ts +2 -0
  382. package/dist/ui/feedback/feedback-css.generated.d.ts.map +1 -0
  383. package/dist/ui/feedback/feedback-css.generated.js +4 -0
  384. package/dist/ui/feedback/feedback-css.generated.js.map +1 -0
  385. package/dist/ui/feedback/feedback-css.js +4 -0
  386. package/dist/ui/feedback/feedback-css.js.map +1 -0
  387. package/dist/ui/feedback/host-toast.d.ts +23 -0
  388. package/dist/ui/feedback/host-toast.d.ts.map +1 -0
  389. package/dist/ui/feedback/host-toast.js +34 -0
  390. package/dist/ui/feedback/host-toast.js.map +1 -0
  391. package/dist/ui/feedback/loader-bar-art.d.ts +6 -0
  392. package/dist/ui/feedback/loader-bar-art.d.ts.map +1 -0
  393. package/dist/ui/feedback/loader-bar-art.js +6 -0
  394. package/dist/ui/feedback/loader-bar-art.js.map +1 -0
  395. package/dist/ui/feedback/loader-bar-css.generated.d.ts +2 -0
  396. package/dist/ui/feedback/loader-bar-css.generated.d.ts.map +1 -0
  397. package/dist/ui/feedback/loader-bar-css.generated.js +4 -0
  398. package/dist/ui/feedback/loader-bar-css.generated.js.map +1 -0
  399. package/dist/ui/feedback/loader-css.generated.d.ts +2 -0
  400. package/dist/ui/feedback/loader-css.generated.d.ts.map +1 -0
  401. package/dist/ui/feedback/loader-css.generated.js +4 -0
  402. package/dist/ui/feedback/loader-css.generated.js.map +1 -0
  403. package/dist/ui/feedback/loading-css.generated.d.ts +2 -0
  404. package/dist/ui/feedback/loading-css.generated.d.ts.map +1 -0
  405. package/dist/ui/feedback/loading-css.generated.js +4 -0
  406. package/dist/ui/feedback/loading-css.generated.js.map +1 -0
  407. package/dist/ui/feedback/loading-host.d.ts +49 -0
  408. package/dist/ui/feedback/loading-host.d.ts.map +1 -0
  409. package/dist/ui/feedback/loading-host.js +57 -0
  410. package/dist/ui/feedback/loading-host.js.map +1 -0
  411. package/dist/ui/feedback/modal-host.d.ts +51 -0
  412. package/dist/ui/feedback/modal-host.d.ts.map +1 -0
  413. package/dist/ui/feedback/modal-host.js +170 -0
  414. package/dist/ui/feedback/modal-host.js.map +1 -0
  415. package/dist/ui/feedback/side-sheet-css.d.ts +2 -0
  416. package/dist/ui/feedback/side-sheet-css.d.ts.map +1 -0
  417. package/dist/ui/feedback/side-sheet-css.generated.d.ts +2 -0
  418. package/dist/ui/feedback/side-sheet-css.generated.d.ts.map +1 -0
  419. package/dist/ui/feedback/side-sheet-css.generated.js +4 -0
  420. package/dist/ui/feedback/side-sheet-css.generated.js.map +1 -0
  421. package/dist/ui/feedback/side-sheet-css.js +2 -0
  422. package/dist/ui/feedback/side-sheet-css.js.map +1 -0
  423. package/dist/ui/feedback/toast-host.d.ts +24 -0
  424. package/dist/ui/feedback/toast-host.d.ts.map +1 -0
  425. package/dist/ui/feedback/toast-host.js +20 -0
  426. package/dist/ui/feedback/toast-host.js.map +1 -0
  427. package/dist/ui/index.d.ts +44 -44
  428. package/dist/ui/index.d.ts.map +1 -1
  429. package/dist/ui/index.js +44 -44
  430. package/dist/ui/index.js.map +1 -1
  431. package/dist/ui/infra/chevron.d.ts +22 -0
  432. package/dist/ui/infra/chevron.d.ts.map +1 -0
  433. package/dist/ui/infra/chevron.js +33 -0
  434. package/dist/ui/infra/chevron.js.map +1 -0
  435. package/dist/ui/infra/controls-css.d.ts +16 -0
  436. package/dist/ui/infra/controls-css.d.ts.map +1 -0
  437. package/dist/ui/infra/controls-css.js +26 -0
  438. package/dist/ui/infra/controls-css.js.map +1 -0
  439. package/dist/ui/infra/css.d.ts +35 -0
  440. package/dist/ui/infra/css.d.ts.map +1 -0
  441. package/dist/ui/infra/css.js +52 -0
  442. package/dist/ui/infra/css.js.map +1 -0
  443. package/dist/ui/infra/host-data.d.ts +119 -0
  444. package/dist/ui/infra/host-data.d.ts.map +1 -0
  445. package/dist/ui/infra/host-data.js +122 -0
  446. package/dist/ui/infra/host-data.js.map +1 -0
  447. package/dist/ui/infra/locale.d.ts +4 -0
  448. package/dist/ui/infra/locale.d.ts.map +1 -0
  449. package/dist/ui/infra/locale.js +17 -0
  450. package/dist/ui/infra/locale.js.map +1 -0
  451. package/dist/ui/infra/overlay-css.d.ts +2 -0
  452. package/dist/ui/infra/overlay-css.d.ts.map +1 -0
  453. package/dist/ui/infra/overlay-css.generated.d.ts +2 -0
  454. package/dist/ui/infra/overlay-css.generated.d.ts.map +1 -0
  455. package/dist/ui/infra/overlay-css.generated.js +4 -0
  456. package/dist/ui/infra/overlay-css.generated.js.map +1 -0
  457. package/dist/ui/infra/overlay-css.js +2 -0
  458. package/dist/ui/infra/overlay-css.js.map +1 -0
  459. package/dist/ui/infra/overlay.d.ts +62 -0
  460. package/dist/ui/infra/overlay.d.ts.map +1 -0
  461. package/dist/ui/infra/overlay.js +94 -0
  462. package/dist/ui/infra/overlay.js.map +1 -0
  463. package/dist/ui/infra/panel-css.d.ts +2 -0
  464. package/dist/ui/infra/panel-css.d.ts.map +1 -0
  465. package/dist/ui/infra/panel-css.generated.d.ts +2 -0
  466. package/dist/ui/infra/panel-css.generated.d.ts.map +1 -0
  467. package/dist/ui/infra/panel-css.generated.js +4 -0
  468. package/dist/ui/infra/panel-css.generated.js.map +1 -0
  469. package/dist/ui/infra/panel-css.js +2 -0
  470. package/dist/ui/infra/panel-css.js.map +1 -0
  471. package/dist/ui/infra/panel.d.ts +41 -0
  472. package/dist/ui/infra/panel.d.ts.map +1 -0
  473. package/dist/ui/infra/panel.js +37 -0
  474. package/dist/ui/infra/panel.js.map +1 -0
  475. package/dist/ui/infra/side-panel-css.d.ts +2 -0
  476. package/dist/ui/infra/side-panel-css.d.ts.map +1 -0
  477. package/dist/ui/infra/side-panel-css.generated.d.ts +2 -0
  478. package/dist/ui/infra/side-panel-css.generated.d.ts.map +1 -0
  479. package/dist/ui/infra/side-panel-css.generated.js +4 -0
  480. package/dist/ui/infra/side-panel-css.generated.js.map +1 -0
  481. package/dist/ui/infra/side-panel-css.js +2 -0
  482. package/dist/ui/infra/side-panel-css.js.map +1 -0
  483. package/dist/ui/infra/thenable.d.ts +9 -0
  484. package/dist/ui/infra/thenable.d.ts.map +1 -0
  485. package/dist/ui/infra/thenable.js +15 -0
  486. package/dist/ui/infra/thenable.js.map +1 -0
  487. package/dist/ui/infra/ticker.d.ts +8 -0
  488. package/dist/ui/infra/ticker.d.ts.map +1 -0
  489. package/dist/ui/infra/ticker.js +49 -0
  490. package/dist/ui/infra/ticker.js.map +1 -0
  491. package/dist/ui/infra/tooltip.d.ts +29 -0
  492. package/dist/ui/infra/tooltip.d.ts.map +1 -0
  493. package/dist/ui/infra/tooltip.js +10 -0
  494. package/dist/ui/infra/tooltip.js.map +1 -0
  495. package/dist/ui/inputs/Checkbox.d.ts +24 -0
  496. package/dist/ui/inputs/Checkbox.d.ts.map +1 -0
  497. package/dist/ui/inputs/Checkbox.js +35 -0
  498. package/dist/ui/inputs/Checkbox.js.map +1 -0
  499. package/dist/ui/inputs/DateTimePicker.d.ts +45 -0
  500. package/dist/ui/inputs/DateTimePicker.d.ts.map +1 -0
  501. package/dist/ui/inputs/DateTimePicker.js +462 -0
  502. package/dist/ui/inputs/DateTimePicker.js.map +1 -0
  503. package/dist/ui/inputs/Field.d.ts +125 -0
  504. package/dist/ui/inputs/Field.d.ts.map +1 -0
  505. package/dist/ui/inputs/Field.js +175 -0
  506. package/dist/ui/inputs/Field.js.map +1 -0
  507. package/dist/ui/inputs/InputGroup.d.ts +91 -0
  508. package/dist/ui/inputs/InputGroup.d.ts.map +1 -0
  509. package/dist/ui/inputs/InputGroup.js +125 -0
  510. package/dist/ui/inputs/InputGroup.js.map +1 -0
  511. package/dist/ui/inputs/ModelPicker.d.ts +48 -0
  512. package/dist/ui/inputs/ModelPicker.d.ts.map +1 -0
  513. package/dist/ui/inputs/ModelPicker.js +101 -0
  514. package/dist/ui/inputs/ModelPicker.js.map +1 -0
  515. package/dist/ui/inputs/Picker.d.ts +56 -0
  516. package/dist/ui/inputs/Picker.d.ts.map +1 -0
  517. package/dist/ui/inputs/Picker.js +244 -0
  518. package/dist/ui/inputs/Picker.js.map +1 -0
  519. package/dist/ui/inputs/Segmented.d.ts +99 -0
  520. package/dist/ui/inputs/Segmented.d.ts.map +1 -0
  521. package/dist/ui/inputs/Segmented.js +135 -0
  522. package/dist/ui/inputs/Segmented.js.map +1 -0
  523. package/dist/ui/inputs/Textarea.d.ts +36 -0
  524. package/dist/ui/inputs/Textarea.d.ts.map +1 -0
  525. package/dist/ui/inputs/Textarea.js +35 -0
  526. package/dist/ui/inputs/Textarea.js.map +1 -0
  527. package/dist/ui/inputs/WorkspacePicker.d.ts +35 -0
  528. package/dist/ui/inputs/WorkspacePicker.d.ts.map +1 -0
  529. package/dist/ui/inputs/WorkspacePicker.js +39 -0
  530. package/dist/ui/inputs/WorkspacePicker.js.map +1 -0
  531. package/dist/ui/inputs/datetime-css.generated.d.ts +2 -0
  532. package/dist/ui/inputs/datetime-css.generated.d.ts.map +1 -0
  533. package/dist/ui/inputs/datetime-css.generated.js +4 -0
  534. package/dist/ui/inputs/datetime-css.generated.js.map +1 -0
  535. package/dist/ui/inputs/datetime-logic.d.ts +102 -0
  536. package/dist/ui/inputs/datetime-logic.d.ts.map +1 -0
  537. package/dist/ui/inputs/datetime-logic.js +200 -0
  538. package/dist/ui/inputs/datetime-logic.js.map +1 -0
  539. package/dist/ui/inputs/field-css.generated.d.ts +2 -0
  540. package/dist/ui/inputs/field-css.generated.d.ts.map +1 -0
  541. package/dist/ui/inputs/field-css.generated.js +4 -0
  542. package/dist/ui/inputs/field-css.generated.js.map +1 -0
  543. package/dist/ui/inputs/input-group-css.generated.d.ts +2 -0
  544. package/dist/ui/inputs/input-group-css.generated.d.ts.map +1 -0
  545. package/dist/ui/inputs/input-group-css.generated.js +4 -0
  546. package/dist/ui/inputs/input-group-css.generated.js.map +1 -0
  547. package/dist/ui/inputs/picker-css.d.ts +2 -0
  548. package/dist/ui/inputs/picker-css.d.ts.map +1 -0
  549. package/dist/ui/inputs/picker-css.generated.d.ts +2 -0
  550. package/dist/ui/inputs/picker-css.generated.d.ts.map +1 -0
  551. package/dist/ui/inputs/picker-css.generated.js +4 -0
  552. package/dist/ui/inputs/picker-css.generated.js.map +1 -0
  553. package/dist/ui/inputs/picker-css.js +4 -0
  554. package/dist/ui/inputs/picker-css.js.map +1 -0
  555. package/dist/ui/inputs/picker-icons.d.ts +12 -0
  556. package/dist/ui/inputs/picker-icons.d.ts.map +1 -0
  557. package/dist/ui/inputs/picker-icons.js +29 -0
  558. package/dist/ui/inputs/picker-icons.js.map +1 -0
  559. package/dist/ui/inputs/picker-logic.d.ts +33 -0
  560. package/dist/ui/inputs/picker-logic.d.ts.map +1 -0
  561. package/dist/ui/inputs/picker-logic.js +68 -0
  562. package/dist/ui/inputs/picker-logic.js.map +1 -0
  563. package/dist/ui/inputs/segmented-css.generated.d.ts +2 -0
  564. package/dist/ui/inputs/segmented-css.generated.d.ts.map +1 -0
  565. package/dist/ui/inputs/segmented-css.generated.js +4 -0
  566. package/dist/ui/inputs/segmented-css.generated.js.map +1 -0
  567. package/dist/ui/layout/PanelDock.d.ts +132 -0
  568. package/dist/ui/layout/PanelDock.d.ts.map +1 -0
  569. package/dist/ui/layout/PanelDock.js +390 -0
  570. package/dist/ui/layout/PanelDock.js.map +1 -0
  571. package/dist/ui/layout/QuickToolbar.d.ts +54 -0
  572. package/dist/ui/layout/QuickToolbar.d.ts.map +1 -0
  573. package/dist/ui/layout/QuickToolbar.js +254 -0
  574. package/dist/ui/layout/QuickToolbar.js.map +1 -0
  575. package/dist/ui/layout/SplitGroup.d.ts +37 -0
  576. package/dist/ui/layout/SplitGroup.d.ts.map +1 -0
  577. package/dist/ui/layout/SplitGroup.js +36 -0
  578. package/dist/ui/layout/SplitGroup.js.map +1 -0
  579. package/dist/ui/layout/panel-dock-css.d.ts +2 -0
  580. package/dist/ui/layout/panel-dock-css.d.ts.map +1 -0
  581. package/dist/ui/layout/panel-dock-css.generated.d.ts +2 -0
  582. package/dist/ui/layout/panel-dock-css.generated.d.ts.map +1 -0
  583. package/dist/ui/layout/panel-dock-css.generated.js +4 -0
  584. package/dist/ui/layout/panel-dock-css.generated.js.map +1 -0
  585. package/dist/ui/layout/panel-dock-css.js +4 -0
  586. package/dist/ui/layout/panel-dock-css.js.map +1 -0
  587. package/dist/ui/layout/panel-dock-logic.d.ts +67 -0
  588. package/dist/ui/layout/panel-dock-logic.d.ts.map +1 -0
  589. package/dist/ui/layout/panel-dock-logic.js +110 -0
  590. package/dist/ui/layout/panel-dock-logic.js.map +1 -0
  591. package/dist/ui/layout/quick-toolbar-css.generated.d.ts +2 -0
  592. package/dist/ui/layout/quick-toolbar-css.generated.d.ts.map +1 -0
  593. package/dist/ui/layout/quick-toolbar-css.generated.js +4 -0
  594. package/dist/ui/layout/quick-toolbar-css.generated.js.map +1 -0
  595. package/dist/ui/layout/quick-toolbar-logic.d.ts +76 -0
  596. package/dist/ui/layout/quick-toolbar-logic.d.ts.map +1 -0
  597. package/dist/ui/layout/quick-toolbar-logic.js +40 -0
  598. package/dist/ui/layout/quick-toolbar-logic.js.map +1 -0
  599. package/dist/ui/layout/resizer.d.ts +29 -0
  600. package/dist/ui/layout/resizer.d.ts.map +1 -0
  601. package/dist/ui/layout/resizer.js +42 -0
  602. package/dist/ui/layout/resizer.js.map +1 -0
  603. package/dist/ui/layout/split-group-css.generated.d.ts +2 -0
  604. package/dist/ui/layout/split-group-css.generated.d.ts.map +1 -0
  605. package/dist/ui/layout/split-group-css.generated.js +4 -0
  606. package/dist/ui/layout/split-group-css.generated.js.map +1 -0
  607. package/dist/ui/navigation/Pagination.d.ts +59 -0
  608. package/dist/ui/navigation/Pagination.d.ts.map +1 -0
  609. package/dist/ui/navigation/Pagination.js +112 -0
  610. package/dist/ui/navigation/Pagination.js.map +1 -0
  611. package/dist/ui/navigation/pagination-css.generated.d.ts +2 -0
  612. package/dist/ui/navigation/pagination-css.generated.d.ts.map +1 -0
  613. package/dist/ui/navigation/pagination-css.generated.js +4 -0
  614. package/dist/ui/navigation/pagination-css.generated.js.map +1 -0
  615. package/dist/ui/navigation/pagination-logic.d.ts +36 -0
  616. package/dist/ui/navigation/pagination-logic.d.ts.map +1 -0
  617. package/dist/ui/navigation/pagination-logic.js +73 -0
  618. package/dist/ui/navigation/pagination-logic.js.map +1 -0
  619. package/dist/ui/official.js +2 -2
  620. package/dist/ui/official.js.map +1 -1
  621. package/dist/utils/i18n.d.ts +2 -2
  622. package/dist/utils/i18n.d.ts.map +1 -1
  623. package/dist/utils/i18n.js +1 -1
  624. package/dist/utils/i18n.js.map +1 -1
  625. package/docs/README.md +2 -1
  626. package/docs/design/architecture.md +9 -8
  627. package/docs/design/copywriting.md +23 -0
  628. package/docs/design/external/dsh-host.md +5 -5
  629. package/docs/design/structure.md +132 -128
  630. package/docs/design/style.md +5 -5
  631. package/docs/help/utils.doc.ts +3 -3
  632. package/docs/help/utils.md +3 -3
  633. package/docs/requirements.md +30 -290
  634. package/package.json +1 -1
@@ -0,0 +1,27 @@
1
+ // session —— 会话预览(镜像官方会话 UI 的完整业务模块)。
2
+ //
3
+ // 定位(2026-10-22 重建,替换 18-0610 的占位骨架):
4
+ // 把「看一眼某个会话、看完即关」封装成与官方会话页同构的只读弹窗——
5
+ // 数据链走宿主官方服务(sessions.retain → binding → uiConversation.target('chat')),
6
+ // 渲染按官方文件名一一对应镜像(./mirror/),**归档会话同样可读**
7
+ // (retain 物化 scope 与归档正交;archiveSession 只藏显示面)。
8
+ //
9
+ // 续聊正道(底层 keyed 数组是只读快照,官方无写面,框内不可打字续聊):
10
+ // fork 开分支 → uiWorkspace.openSession 跳官方会话区;底部暂存输入框的「确定」
11
+ // 经 onContinue 由调用方完成 fork + host 侧 agent.send 起轮次 + 跳转。
12
+ //
13
+ // 使用:
14
+ // const view = openSessionView(sessions, uiConversation, sessionId, 'dsh-task-reminder')
15
+ // if (view !== null) {
16
+ // h(SessionViewModal, {
17
+ // sessionId, view, onClose: () => { view.dispose(); setOpen(false) },
18
+ // forkSession, openHostSession, // 官方 ISessions.fork / uiWorkspace.openSession
19
+ // onContinue: async (message) => { … }, // 暂存输入框:fork + host send + 跳转
20
+ // onOpenFile: (path) => { … }, // 文件打开出口(缺省 = 链接降级纯文本)
21
+ // })
22
+ // }
23
+ export { SessionViewModal } from './SessionViewModal.js';
24
+ export { ChangedFileDiff } from './mirror/ChangedFileDiff.js';
25
+ export { openSessionReview } from './open-review.js';
26
+ export { DEFAULT_RETAIN_SOURCE, openSessionView, } from './open-session-view.js';
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adv/session/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,sCAAsC;AACtC,oCAAoC;AACpC,yEAAyE;AACzE,yCAAyC;AACzC,gDAAgD;AAChD,EAAE;AACF,yCAAyC;AACzC,yDAAyD;AACzD,yDAAyD;AACzD,EAAE;AACF,MAAM;AACN,2FAA2F;AAC3F,yBAAyB;AACzB,4BAA4B;AAC5B,4EAA4E;AAC5E,+FAA+F;AAC/F,8EAA8E;AAC9E,uEAAuE;AACvE,SAAS;AACT,MAAM;AACN,OAAO,EAAE,gBAAgB,EAA8B,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAiC,MAAM,kBAAkB,CAAA;AACnF,OAAO,EACL,qBAAqB,EACrB,eAAe,GAEhB,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { type ReactElement } from 'react';
2
+ import type { Translate } from '../../../utils/i18n.js';
3
+ /** 官方 AskQuestionCard 只两态:有答案(dl/dt/dd)与无答案(verdict + 问题清单)。 */
4
+ export interface AskCardFace {
5
+ kind: 'answered' | 'unanswered';
6
+ questions: {
7
+ id: string;
8
+ question: string;
9
+ answers?: string[];
10
+ }[];
11
+ verdict?: string;
12
+ skippedLabel?: string;
13
+ }
14
+ /** 行面:摘要在行上,卡在展开体里;`state` 覆盖官方那两处强制态。 */
15
+ export interface AskFace {
16
+ summary: string;
17
+ card?: AskCardFace;
18
+ state?: 'ok' | 'stopped';
19
+ }
20
+ /**
21
+ * 可移植的 ask_user_question 行模型(官方 AskQuestionRow 2285-2360 的子集)。
22
+ * @param name - 工具名(非 ask_user_question 一律 null)。
23
+ * @param argsRaw - 调用参数 JSON。
24
+ * @param output - 结算结果正文。
25
+ * @param errorCode - root.error.code。
26
+ * @param settled - 上游是否已结算。
27
+ * @param t - 文案。
28
+ * @returns 行面;条件不足返回 null(调用方落回通用卡)。
29
+ */
30
+ export declare function askCardModel(name: string, argsRaw: string, output: string, errorCode: string | undefined, settled: boolean, t: Translate): AskFace | null;
31
+ /** 官方 AskQuestionCard(1285-1318):无答案 = 判定语 + 问题清单;有答案 = 一问一答的 dl。 */
32
+ export declare function AskQuestionCardView({ card }: {
33
+ card: AskCardFace;
34
+ }): ReactElement;
35
+ //# sourceMappingURL=AskCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskCard.d.ts","sourceRoot":"","sources":["../../../../src/adv/session/mirror/AskCard.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKvD,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,GAAG,YAAY,CAAA;IAC/B,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;IACjE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,0CAA0C;AAC1C,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,KAAK,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CACzB;AAmED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,OAAO,EAChB,CAAC,EAAE,SAAS,GACX,OAAO,GAAG,IAAI,CA0BhB;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG,YAAY,CAsBjF"}
@@ -0,0 +1,131 @@
1
+ // 官方对照:ui-tool `toolviews/ask-question-row` + `AskQuestionCard`(lib/client.js:1285-1318、2138-2272)。
2
+ //
3
+ // 官方靠宿主投影 `userQuestions`(active / settled)判定态;弹窗拿不到投影 ⇒ 只保留可移植的部分:
4
+ // 错误码(ASK_CANCELLED / ASK_ABORTED)、未结算、结算结果里的 answers JSON。
5
+ // 拿不到的分支(TOOL_OUTCOME_UNKNOWN 的 pending/closed、事后补答)一律落回通用卡,不猜。
6
+ import { createElement as h } from 'react';
7
+ import { officialClass } from '../official-classes.js';
8
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
9
+ function parseJson(text) {
10
+ try {
11
+ return JSON.parse(text);
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ /** 官方 questionEntries(2194-2213):id 与问题文本必须齐全且 id 不重复。 */
18
+ function questionEntries(argsRaw) {
19
+ const parsed = parseJson(argsRaw);
20
+ if (!isRecord(parsed) || !Array.isArray(parsed.questions) || parsed.questions.length === 0)
21
+ return null;
22
+ const questions = [];
23
+ const ids = new Set();
24
+ for (const question of parsed.questions) {
25
+ if (!isRecord(question) || typeof question.id !== 'string' || typeof question.question !== 'string')
26
+ return null;
27
+ if (ids.has(question.id))
28
+ return null;
29
+ ids.add(question.id);
30
+ questions.push({ id: question.id, question: question.question });
31
+ }
32
+ return questions;
33
+ }
34
+ /** 官方 answerEntries(2149-2164):结果 JSON 里的 answers,形状不对整体作废。 */
35
+ function answerEntries(text) {
36
+ const parsed = parseJson(text);
37
+ if (!isRecord(parsed) || !Array.isArray(parsed.answers) || !parsed.answers.every(isRecord))
38
+ return null;
39
+ const entries = [];
40
+ for (const answer of parsed.answers) {
41
+ if (typeof answer.id !== 'string' || !Array.isArray(answer.selected))
42
+ return null;
43
+ if (!answer.selected.every(item => typeof item === 'string'))
44
+ return null;
45
+ if (answer.custom !== undefined && typeof answer.custom !== 'string')
46
+ return null;
47
+ entries.push({
48
+ id: answer.id,
49
+ selected: [...answer.selected],
50
+ ...(answer.custom === undefined ? {} : { custom: answer.custom }),
51
+ });
52
+ }
53
+ return entries;
54
+ }
55
+ /** 官方 pairAnswers(2215-2233):按回显 id 配对,数量或 id 对不上就整批作废。 */
56
+ function pairAnswers(questions, answers) {
57
+ if (questions.length !== answers.length)
58
+ return null;
59
+ const byId = new Map();
60
+ for (const answer of answers) {
61
+ if (byId.has(answer.id))
62
+ return null;
63
+ byId.set(answer.id, answer);
64
+ }
65
+ const paired = [];
66
+ for (const question of questions) {
67
+ const answer = byId.get(question.id);
68
+ if (answer === undefined)
69
+ return null;
70
+ paired.push({
71
+ id: question.id,
72
+ question: question.question,
73
+ answers: [...answer.selected, ...(answer.custom === undefined || answer.custom === '' ? [] : [answer.custom])],
74
+ });
75
+ }
76
+ return paired;
77
+ }
78
+ /**
79
+ * 可移植的 ask_user_question 行模型(官方 AskQuestionRow 2285-2360 的子集)。
80
+ * @param name - 工具名(非 ask_user_question 一律 null)。
81
+ * @param argsRaw - 调用参数 JSON。
82
+ * @param output - 结算结果正文。
83
+ * @param errorCode - root.error.code。
84
+ * @param settled - 上游是否已结算。
85
+ * @param t - 文案。
86
+ * @returns 行面;条件不足返回 null(调用方落回通用卡)。
87
+ */
88
+ export function askCardModel(name, argsRaw, output, errorCode, settled, t) {
89
+ if (name !== 'ask_user_question')
90
+ return null;
91
+ const questions = questionEntries(argsRaw);
92
+ if (errorCode === 'ASK_CANCELLED') {
93
+ return {
94
+ summary: t('askCancelled'),
95
+ state: 'ok',
96
+ ...(questions === null ? {} : { card: { kind: 'unanswered', questions, verdict: t('askCancelledDetail') } }),
97
+ };
98
+ }
99
+ if (errorCode === 'ASK_ABORTED') {
100
+ return {
101
+ summary: t('askInterrupted'),
102
+ state: 'stopped',
103
+ ...(questions === null ? {} : { card: { kind: 'unanswered', questions, verdict: t('askInterruptedDetail') } }),
104
+ };
105
+ }
106
+ if (!settled)
107
+ return { summary: t('askWaiting') };
108
+ const answers = answerEntries(output);
109
+ if (answers === null)
110
+ return null;
111
+ const answered = answers.filter(answer => answer.selected.length > 0 || (answer.custom ?? '') !== '').length;
112
+ const paired = questions === null ? null : pairAnswers(questions, answers);
113
+ return {
114
+ summary: t('askAnswered', { answered, total: answers.length }),
115
+ ...(paired === null ? {} : { card: { kind: 'answered', questions: paired, skippedLabel: t('askSkipped') } }),
116
+ };
117
+ }
118
+ /** 官方 AskQuestionCard(1285-1318):无答案 = 判定语 + 问题清单;有答案 = 一问一答的 dl。 */
119
+ export function AskQuestionCardView({ card }) {
120
+ const cls = (semantic) => officialClass('AskQuestionCard', semantic) ?? '';
121
+ if (card.kind === 'unanswered') {
122
+ return h('div', { className: cls('card') }, h('p', { className: cls('verdict') }, card.verdict), h('ul', { className: cls('questionList') }, card.questions.map(question => h('li', { key: question.id, className: cls('unansweredQuestion') }, question.question))));
123
+ }
124
+ return h('dl', { className: cls('card') }, card.questions.map(question => {
125
+ const answers = question.answers ?? [];
126
+ return h('div', { key: question.id, className: cls('item') }, h('dt', { className: cls('question') }, question.question), h('dd', { className: cls('answer') }, answers.length === 0
127
+ ? h('span', { className: cls('skipped') }, card.skippedLabel)
128
+ : answers.map((answer, index) => h('span', { key: `${question.id}-${index}`, className: cls('answerLine') }, answer))));
129
+ }));
130
+ }
131
+ //# sourceMappingURL=AskCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskCard.js","sourceRoot":"","sources":["../../../../src/adv/session/mirror/AskCard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { createElement as h } from 'react';
2
+ import type { Translate } from '../../../utils/i18n.js';
3
+ /** bash / pwsh 行(官方 BashRow 镜像)。 */
4
+ export declare function BashRowMirror(props: {
5
+ name: string;
6
+ argsRaw: string;
7
+ output: string;
8
+ isError: boolean;
9
+ settled?: boolean;
10
+ phase?: 'start' | 'preparing';
11
+ interrupted?: boolean;
12
+ t: Translate;
13
+ }): ReturnType<typeof h>;
14
+ //# sourceMappingURL=BashRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BashRow.d.ts","sourceRoot":"","sources":["../../../../src/adv/session/mirror/BashRow.ts"],"names":[],"mappings":"AAKA,OAAO,EAAY,aAAa,IAAI,CAAC,EAAqB,MAAM,OAAO,CAAA;AAUvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AA6BvD,oCAAoC;AACpC,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAgJvB"}
@@ -0,0 +1,143 @@
1
+ // 官方对照:ui-tool@0.2.1-rc.5 lib/client.js:2486-2607(BashRow)+ 2444-2467(bash-sample CSS 类)。
2
+ // bash / pwsh 专属卡:**不走 DisclosureRow**——root 自身 role=button、data-sample=bash、
3
+ // 折叠行 = 图标(+hover chevron) + 标题 + 分隔点 + 摘要 + 退出码徽章;展开体 = TerminalBlock
4
+ // (终端卡)或 ioCard(输入 / 分隔 / 输出,错误态输出红字)。
5
+ // 复用:终端/摘要模型全走 GenericCommandCard 的导出(terminalCardModel 等),样式走官方 bash-sample 类名。
6
+ import { Fragment, createElement as h, useMemo, useState } from 'react';
7
+ import { IconApiOutlineRegular, IconChevronDownOutlineRegular, IconChevronUpOutlineRegular, TerminalBlock, TextShimmer, } from '../../../ui/official.js';
8
+ import { officialClass } from '../official-classes.js';
9
+ import { ExitCodeBadge, classifyTool, deriveSummary, formatToolBody, hasSpillNotice, shellCall, terminalCardModel, terminalLabels, toolTitleKey, } from './GenericCommandCard.js';
10
+ /** 官方 BASH_ICON(tool client.js:2469):终端图标 14px。 */
11
+ const BASH_ICON = h(IconApiOutlineRegular, { size: 14 });
12
+ const firstLine = (text) => {
13
+ const nl = text.indexOf('\n');
14
+ return nl === -1 ? text : text.slice(0, nl);
15
+ };
16
+ /** 官方 terminalFailed(tool client.js:763-766):成功结算但退出码非 0 / 有信号。 */
17
+ function terminalFailedOf(model) {
18
+ return model !== null && model.running !== true
19
+ && ((model.exitCode !== undefined && model.exitCode !== null && model.exitCode !== 0) || model.signal !== undefined);
20
+ }
21
+ /** bash / pwsh 行(官方 BashRow 镜像)。 */
22
+ export function BashRowMirror(props) {
23
+ const { name, argsRaw, output, isError, settled = true, phase, interrupted, t } = props;
24
+ const [expanded, setExpanded] = useState(false);
25
+ const variant = classifyTool(name);
26
+ const titleKey = toolTitleKey(name);
27
+ const state = !settled
28
+ ? (phase === 'preparing' ? 'preparing' : 'running')
29
+ : interrupted ? 'stopped' : isError ? 'error' : 'ok';
30
+ const args = useMemo(() => {
31
+ try {
32
+ const parsed = JSON.parse(argsRaw);
33
+ return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)
34
+ ? parsed
35
+ : null;
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }, [argsRaw]);
41
+ const shell = args === null ? null : shellCall(name, args);
42
+ const background = shell?.background === true;
43
+ const persistent = shell?.persistent === true;
44
+ const spilled = hasSpillNotice(output);
45
+ const terminalFace = useMemo(() => terminalCardModel(name, argsRaw, output, isError, settled), [name, argsRaw, output, isError, settled]);
46
+ // 官方 localizeTerminalCardModel:send 命令空 =(发送输入),描述 = 终端 {sessionId};shell 描述直接用参数。
47
+ const terminal = useMemo(() => {
48
+ if (terminalFace === null)
49
+ return null;
50
+ return terminalFace.sessionId !== undefined
51
+ ? { ...terminalFace, command: terminalFace.command === '' ? t('terminalSendInput') : terminalFace.command, description: t('terminalSession', { sessionId: terminalFace.sessionId }) }
52
+ : terminalFace;
53
+ }, [terminalFace, t]);
54
+ const failedTerminal = terminalFailedOf(terminalFace);
55
+ const rowState = state === 'ok' && failedTerminal ? 'error' : state;
56
+ const running = rowState === 'running' || rowState === 'preparing';
57
+ const generic = titleKey === 'toolTitleGeneric';
58
+ const base = argsRaw === '' ? '' : deriveSummary(variant, argsRaw);
59
+ const plainSummary = [generic ? name : '', base].filter(Boolean).join(' · ');
60
+ const errorSummary = rowState === 'error' && output !== '' ? firstLine(output) : null;
61
+ const summaryText = (rowState === 'error' ? errorSummary ?? (terminal?.description ?? plainSummary) : null)
62
+ ?? terminal?.description ?? plainSummary;
63
+ // 官方 terminalExitLabel:仅前台已失败(有退出码/信号)出徽章。
64
+ const exitLabel = terminal !== null && terminalFailedOf(terminal) && !background
65
+ ? terminal.signal !== undefined
66
+ ? t('terminalSignal', { signal: terminal.signal })
67
+ : terminal.exitCode === null || terminal.exitCode === undefined
68
+ ? t('terminalNoExitCode')
69
+ : t('terminalExitCode', { code: terminal.exitCode })
70
+ : null;
71
+ const settlementLine = exitLabel !== null
72
+ ? null
73
+ : rowState === 'error' ? errorSummary ?? summaryText : rowState === 'stopped' ? t('rowStopped') : null;
74
+ const bodyRaw = formatToolBody(variant, argsRaw);
75
+ const body = expanded && terminal === null && bodyRaw !== null ? bodyRaw : null;
76
+ const outputText = output === '' ? null : output;
77
+ // 官方 genericBody:终端卡缺失时,错误 / persistent / spilled / background 才走输入输出体。
78
+ const genericBody = terminal === null && (rowState === 'error' || persistent || spilled || background)
79
+ && (bodyRaw !== null || outputText !== null);
80
+ const expandable = terminal !== null || genericBody;
81
+ const open = expanded && expandable;
82
+ const status = rowState === 'preparing' ? t('rowPreparing')
83
+ : rowState === 'running' ? t('rowRunning')
84
+ : rowState === 'error' ? t('rowFailed')
85
+ : rowState === 'stopped' ? t('rowStopped')
86
+ : null;
87
+ const summaryClassName = `${officialClass('bash-sample', 'summary') ?? ''}${exitLabel === null && rowState === 'error' ? ` ${officialClass('bash-sample', 'errorSummary') ?? ''}` : ''}${exitLabel === null && rowState === 'stopped' ? ` ${officialClass('bash-sample', 'stoppedSummary') ?? ''}` : ''}`;
88
+ const leading = open
89
+ ? h(IconChevronUpOutlineRegular, { className: officialClass('bash-sample', 'chevron') ?? '' })
90
+ : expandable
91
+ ? h(Fragment, null, h('span', { className: officialClass('bash-sample', 'iconIdle') ?? '' }, BASH_ICON), h(IconChevronDownOutlineRegular, {
92
+ className: `${officialClass('bash-sample', 'chevron') ?? ''} ${officialClass('bash-sample', 'chevronHover') ?? ''}`,
93
+ }))
94
+ : BASH_ICON;
95
+ const toggleFromKeyboard = (event) => {
96
+ if (!expandable || (event.key !== 'Enter' && event.key !== ' '))
97
+ return;
98
+ event.preventDefault();
99
+ setExpanded(value => !value);
100
+ };
101
+ return h('div', { className: officialClass('bash-sample', 'card') ?? '' }, h('div', {
102
+ className: officialClass('bash-sample', 'root') ?? '',
103
+ 'data-sample': 'bash',
104
+ 'data-variant': 'bash',
105
+ 'data-state': rowState,
106
+ 'data-expandable': expandable || undefined,
107
+ role: expandable ? 'button' : undefined,
108
+ tabIndex: expandable ? 0 : undefined,
109
+ 'aria-expanded': expandable ? open : undefined,
110
+ onClick: expandable ? () => { setExpanded(value => !value); } : undefined,
111
+ onKeyDown: expandable ? toggleFromKeyboard : undefined,
112
+ }, h('span', { className: officialClass('bash-sample', 'leading') ?? '' }, leading), status !== null
113
+ ? h('span', { className: officialClass('bash-sample', 'visuallyHidden') ?? '' }, status)
114
+ : null, h(TextShimmer, { active: running }, h(TextShimmer, { className: officialClass('bash-sample', 'title') ?? '' }, t(titleKey)), h('span', {
115
+ className: officialClass('bash-sample', 'sep') ?? '',
116
+ 'data-shimmer-decoration': true,
117
+ 'aria-hidden': true,
118
+ }), h('span', { className: summaryClassName }, h(TextShimmer, null, settlementLine ?? summaryText)), exitLabel !== null ? h(ExitCodeBadge, { label: exitLabel }) : null)), open
119
+ ? h('div', { className: officialClass('bash-sample', 'bodyWrap') ?? '' }, terminal !== null
120
+ ? h(TerminalBlock, {
121
+ command: terminal.command,
122
+ cwd: terminal.cwd,
123
+ output: terminal.output,
124
+ exitCode: terminal.exitCode,
125
+ signal: terminal.signal,
126
+ running: terminal.running,
127
+ maxLines: Infinity,
128
+ labels: terminalLabels(t),
129
+ className: officialClass('bash-sample', 'terminal') ?? '',
130
+ })
131
+ : h('div', { className: officialClass('bash-sample', 'ioCard') ?? '' }, body !== null
132
+ ? h('div', { className: officialClass('bash-sample', 'ioSection') ?? '' }, h('span', { className: officialClass('bash-sample', 'ioLabel') ?? '' }, t('toolInputLabel')), h('span', { className: officialClass('bash-sample', 'ioText') ?? '' }, body))
133
+ : null, body !== null && outputText !== null
134
+ ? h('span', { className: officialClass('bash-sample', 'ioDivider') ?? '', 'aria-hidden': true })
135
+ : null, outputText !== null
136
+ ? h('div', { className: officialClass('bash-sample', 'ioSection') ?? '' }, h('span', { className: officialClass('bash-sample', 'ioLabel') ?? '' }, t('toolOutputLabel')), h('span', {
137
+ className: officialClass('bash-sample', 'ioText') ?? '',
138
+ 'data-error': rowState === 'error' || undefined,
139
+ }, outputText))
140
+ : null))
141
+ : undefined);
142
+ }
143
+ //# sourceMappingURL=BashRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BashRow.js","sourceRoot":"","sources":["../../../../src/adv/session/mirror/BashRow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type Translate } from '../../../utils/i18n.js';
3
+ /** 一个变更文件的 diff 体(状态机 + unified 行渲染)。 */
4
+ export declare function ChangedFileDiff(props: {
5
+ sessionId: string;
6
+ seq: number;
7
+ index: number;
8
+ /** 官方 display(工作区相对路径,作卡头)。 */
9
+ display: string;
10
+ /** 文案翻译;缺省用核心字典(demo 自带字典不认 changes/diff 这些 key)。 */
11
+ t?: Translate;
12
+ /**
13
+ * 渲染变体(官方两套壳):
14
+ * - `preview`(默认)= hover 预览,`ChangedFiles.preview` 紧凑壳:限高、隐 note / hunk 头;
15
+ * - `review` = 点开后的完整 FileDiff:hunk 头(`@@ -a,b +c,d @@`)与 note 正常显示。
16
+ * 之前一律用 preview 壳,导致审阅视图里 hunk 头被 CSS 隐掉(用户截图对照官方)。
17
+ */
18
+ variant?: 'preview' | 'review';
19
+ /**
20
+ * 关掉承载它的面板(审阅态右上角那枚 ✕,与换行钮同排)。
21
+ * 用户 2026-11-04:无头面板的关钮归内容自己画 ⇒ 审阅入口必须传它。
22
+ */
23
+ onClose?: () => void;
24
+ }): ReactNode;
25
+ //# sourceMappingURL=ChangedFileDiff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangedFileDiff.d.ts","sourceRoot":"","sources":["../../../../src/adv/session/mirror/ChangedFileDiff.ts"],"names":[],"mappings":"AAWA,OAAO,EAAqF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAezH,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AA4CtE,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,CAAC,CAAC,EAAE,SAAS,CAAA;IACb;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,GAAG,SAAS,CA2IZ"}
@@ -0,0 +1,178 @@
1
+ // 官方 ChangedFilePreview + FileDiff(@deepseek-ai/dsh-client-ui-deliverables client.js:828-1507,
2
+ // 0.2.1-rc.2 解包核实)镜像:路径头 + hunk 头(`@@ -a,b +c,d @@`)+ 行(旧行号 / 新行号 / 符号 /
3
+ // 文本,grid 四列)。状态机(loading / missing / error+重试 / binary / oversized)、
4
+ // 行号计算、hunk 头、note(新建 / 删除 / 无变化)逐值照抄官方。
5
+ //
6
+ // 数据面:`api/changes.diff`(与 changes.summary 同一个宿主服务,client.js:15/103-110)。
7
+ // 承载:官方 HoverCard 的 preview 卡(client.js:1402-1435)—— content 只在 open 时挂载,
8
+ // 故每行不会预先发请求(primitives lib/index.js 已核实:card = open && pos !== null && …)。
9
+ //
10
+ // 高亮:官方 `useCodeHighlighter`(primitive hook)+ 官方 highlightedSide 映射口径
11
+ // (按一侧收集文本 → 整段高亮 → 按行号回表);语法未知 / 语法树未加载返回 undefined ⇒ 纯文本回落。
12
+ import { createElement as h, useCallback, useEffect, useMemo, useState } from 'react';
13
+ import { Button, IconCloseOutlineRegular, IconNowrapFillRegular, IconWrapFillRegular, languageForPath, useCodeHighlighter } from '../../../ui/official.js';
14
+ import { IconButton } from '../../../ui/actions/Button.js';
15
+ import { officialClass } from '../official-classes.js';
16
+ import { DIFF_MAX_RENDERED_LINES, changesDiffUrl, diffNoteKey, hunkHeader, hunkRows, parseChangesDiff, } from '../changes.js';
17
+ import { t as defaultT } from '../../../utils/i18n.js';
18
+ /** 官方 ChangedFiles / FileDiff 模块类(ui-deliverables;取不到 = 空类,不白屏)。 */
19
+ const C = (semantic) => officialClass('ChangedFiles', semantic) ?? '';
20
+ const D = (semantic) => officialClass('FileDiff', semantic) ?? '';
21
+ /** 会话级缓存:同一 (sessionId, seq, index) 只拉一次(官方 ChangesDiffStore 同语义)。 */
22
+ const cache = new Map();
23
+ /** 官方 highlightedSide:一侧收集 → 整段高亮 → 按行号回表。 */
24
+ function highlightedSide(rows, side, highlighter) {
25
+ const source = rows.flatMap((row) => (row[side] === undefined ? [] : [{ no: row[side], text: row.text }]));
26
+ if (source.length === 0)
27
+ return new Map();
28
+ const highlighted = highlighter(source.map((line) => line.text).join('\n'));
29
+ if (highlighted === undefined)
30
+ return undefined;
31
+ return new Map(source.map((line, index) => [line.no, highlighted[index] ?? []]));
32
+ }
33
+ /** 官方 DiffText:有高亮 spans 就逐段上色,否则纯文本。 */
34
+ function DiffText(props) {
35
+ const { text, spans } = props;
36
+ return h('span', { className: D('text'), 'data-diff-code': spans === undefined ? undefined : '' }, spans === undefined
37
+ ? text
38
+ : spans.map((span, index) => h('span', { key: index, style: span.style }, span.text)));
39
+ }
40
+ /** 官方 FileDiff 的行:grid 四列(旧号 / 新号 / 符号 / 文本)。 */
41
+ function DiffLine(props) {
42
+ const { row } = props;
43
+ const kindClass = row.kind === 'add' ? D('add') : row.kind === 'del' ? D('del') : D('context');
44
+ const spans = row.kind === 'del' ? props.oldSpans : props.newSpans;
45
+ return h('div', { className: `${D('line')} ${kindClass}`, 'data-diff-line': row.kind }, h('span', { className: D('number') }, row.old ?? ''), h('span', { className: D('number') }, row.new ?? ''), h('span', { className: D('sign') }, row.kind === 'add' ? '+' : row.kind === 'del' ? '-' : ' '), h(DiffText, { text: row.text, spans }));
46
+ }
47
+ /** 一个变更文件的 diff 体(状态机 + unified 行渲染)。 */
48
+ export function ChangedFileDiff(props) {
49
+ const { sessionId, seq, index, display, t = defaultT, variant = 'preview', onClose } = props;
50
+ const url = changesDiffUrl(sessionId, seq, index);
51
+ const [state, setState] = useState(undefined);
52
+ const [attempt, setAttempt] = useState(0);
53
+ // 换行开关(等价官方 ReviewTab 的 wrap 工具钮):官方 CSS 按 body[data-review-wrap] 切 pre-wrap。
54
+ const [wrap, setWrap] = useState(false);
55
+ useEffect(() => {
56
+ if (cache.has(url)) {
57
+ setState(cache.get(url));
58
+ return;
59
+ }
60
+ let alive = true;
61
+ void (async () => {
62
+ let next = null;
63
+ try {
64
+ const res = await fetch(url);
65
+ // 官方口径(deliv:226-231):404 = missing;非 2xx = error;200 但载荷不合规同样 = error(可重试)。
66
+ if (res.ok) {
67
+ next = parseChangesDiff(await res.json());
68
+ if (next === null) {
69
+ if (alive)
70
+ setState('error');
71
+ return;
72
+ }
73
+ }
74
+ else if (res.status !== 404) {
75
+ if (alive)
76
+ setState('error');
77
+ return;
78
+ }
79
+ }
80
+ catch {
81
+ // 路由缺席 / 网络失败 = 明确报「无法读取」,并给官方同款重试钮,不猜内容
82
+ if (alive)
83
+ setState('error');
84
+ return;
85
+ }
86
+ cache.set(url, next);
87
+ if (alive)
88
+ setState(next);
89
+ })();
90
+ return () => { alive = false; };
91
+ }, [url, attempt]);
92
+ const retry = useCallback(() => { setAttempt((value) => value + 1); }, []);
93
+ const path = state === undefined || state === 'error' || state === null ? undefined : state.path;
94
+ const highlighter = useCodeHighlighter(path === undefined ? undefined : languageForPath(path));
95
+ const body = useMemo(() => {
96
+ if (state === undefined)
97
+ return h('p', { className: D('status'), role: 'status' }, t('diffLoading'));
98
+ if (state === 'error') {
99
+ // 官方 error 态 = 文案 + 官方 sm 按钮重试(client.js:837-845)。
100
+ return h('div', { className: D('status') }, h('span', null, t('diffError')), h(Button, { size: 'sm', onClick: retry }, t('errorRetry')));
101
+ }
102
+ if (state === null)
103
+ return h('p', { className: D('status') }, t('diffMissing'));
104
+ if (state.kind === 'binary')
105
+ return h('p', { className: D('status') }, t('diffBinary'));
106
+ if (state.kind === 'oversized')
107
+ return h('p', { className: D('status') }, t('diffOversized'));
108
+ const note = diffNoteKey(state);
109
+ const hunks = state.hunks ?? [];
110
+ // 官方 renderedHunks:行数预算耗尽即停(防巨型对比把预览卡死)。
111
+ let budget = DIFF_MAX_RENDERED_LINES;
112
+ const kept = [];
113
+ let truncated = false;
114
+ for (const hunk of hunks) {
115
+ if (budget <= 0) {
116
+ truncated = true;
117
+ break;
118
+ }
119
+ if (hunk.lines.length > budget) {
120
+ kept.push({ ...hunk, lines: hunk.lines.slice(0, budget) });
121
+ budget = 0;
122
+ truncated = true;
123
+ break;
124
+ }
125
+ kept.push(hunk);
126
+ budget -= hunk.lines.length;
127
+ }
128
+ return h('div', { className: D('body'), 'data-review-view': 'unified', 'data-review-wrap': wrap ? true : undefined }, note === undefined ? null : h('p', {
129
+ className: D('note'),
130
+ 'data-diff-note': hunks.length === 0 ? 'empty' : 'metadata',
131
+ }, t(note)), state.coarse === true
132
+ ? h('p', { className: D('note'), 'data-diff-coarse': true }, t('diffCoarse'))
133
+ : null, truncated
134
+ ? h('p', { className: D('note'), 'data-diff-truncated': true }, t('diffTruncated', { count: String(DIFF_MAX_RENDERED_LINES) }))
135
+ : null, kept.map((hunk, position) => {
136
+ const rows = hunkRows(hunk);
137
+ const oldSpans = highlightedSide(rows, 'old', highlighter);
138
+ const newSpans = highlightedSide(rows, 'new', highlighter);
139
+ return h('section', { key: position, className: D('hunk') }, h('div', { className: D('hunkHeader'), 'data-diff-hunk-header': true }, hunkHeader(hunk)), rows.map((row, at) => h(DiffLine, {
140
+ key: at,
141
+ row,
142
+ oldSpans: oldSpans?.get(row.old ?? -1),
143
+ newSpans: newSpans?.get(row.new ?? -1),
144
+ })));
145
+ }));
146
+ }, [state, highlighter, t, retry, wrap]);
147
+ // 官方两套壳:hover 预览 = ChangedFiles.preview(限高、隐 note / hunk 头);
148
+ // 审阅视图 = 完整 FileDiff.root(hunk 头 + note 正常渲染)。
149
+ const preview = variant !== 'review';
150
+ return h('div', {
151
+ className: preview ? `${D('root')} ${C('preview')}` : D('root'),
152
+ 'data-changes-hover-preview': preview ? true : undefined,
153
+ // review 版式要填满父容器:官方 root 高度 auto 时 body 只撑到内容高,
154
+ // 横向滚动条会停在内容下沿(面板下面空一大截)。hover 预览卡不撑,保持自适应。
155
+ style: preview ? undefined : { height: '100%' },
156
+ }, h('div', { className: D('header') }, h('span', { className: C('previewPath'), 'data-changes-preview-path': true }, display),
157
+ // 审阅态右上:换行开关(等价官方 ReviewTab 的 wrap 工具钮;图标语义同官方:开着显示「取消换行」)。
158
+ preview
159
+ ? null
160
+ : h(IconButton, {
161
+ variant: 'plain',
162
+ size: 'md',
163
+ icon: h(wrap ? IconNowrapFillRegular : IconWrapFillRegular, { size: 14 }),
164
+ label: wrap ? t('diffNowrap') : t('diffWrap'),
165
+ onClick: () => { setWrap((value) => !value); },
166
+ }),
167
+ // 审阅态:行尾 ✕ 关闭(复用 FileBrowser 同一个 IconButton + 官方 ✕,不自绘新样式)。
168
+ preview || onClose === undefined
169
+ ? null
170
+ : h(IconButton, {
171
+ variant: 'plain',
172
+ size: 'md',
173
+ icon: h(IconCloseOutlineRegular, { size: 14 }),
174
+ label: t('previewClose'),
175
+ onClick: onClose,
176
+ })), body);
177
+ }
178
+ //# sourceMappingURL=ChangedFileDiff.js.map