dsh-plugin-core 0.2.14 → 0.3.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 (431) hide show
  1. package/README.md +52 -83
  2. package/dist/design/tokens-css.d.ts +1 -1
  3. package/dist/design/tokens-css.d.ts.map +1 -1
  4. package/dist/design/tokens-css.generated.d.ts +2 -0
  5. package/dist/design/tokens-css.generated.d.ts.map +1 -0
  6. package/dist/design/tokens-css.generated.js +4 -0
  7. package/dist/design/tokens-css.generated.js.map +1 -0
  8. package/dist/design/tokens-css.js +1 -252
  9. package/dist/design/tokens-css.js.map +1 -1
  10. package/dist/explorer/FileBrowser.d.ts +41 -0
  11. package/dist/explorer/FileBrowser.d.ts.map +1 -0
  12. package/dist/explorer/FileBrowser.js +659 -0
  13. package/dist/explorer/FileBrowser.js.map +1 -0
  14. package/dist/explorer/explorer-css.d.ts +1 -1
  15. package/dist/explorer/explorer-css.d.ts.map +1 -1
  16. package/dist/explorer/explorer-css.generated.d.ts +2 -0
  17. package/dist/explorer/explorer-css.generated.d.ts.map +1 -0
  18. package/dist/explorer/explorer-css.generated.js +4 -0
  19. package/dist/explorer/explorer-css.generated.js.map +1 -0
  20. package/dist/explorer/explorer-css.js +1 -31
  21. package/dist/explorer/explorer-css.js.map +1 -1
  22. package/dist/explorer/index.d.ts +4 -2
  23. package/dist/explorer/index.d.ts.map +1 -1
  24. package/dist/explorer/index.js +4 -2
  25. package/dist/explorer/index.js.map +1 -1
  26. package/dist/explorer/open.d.ts +103 -0
  27. package/dist/explorer/open.d.ts.map +1 -0
  28. package/dist/explorer/open.js +282 -0
  29. package/dist/explorer/open.js.map +1 -0
  30. package/dist/explorer/preview/BytesPreview.d.ts +13 -0
  31. package/dist/explorer/preview/BytesPreview.d.ts.map +1 -0
  32. package/dist/explorer/preview/BytesPreview.js +56 -0
  33. package/dist/explorer/preview/BytesPreview.js.map +1 -0
  34. package/dist/explorer/preview/HtmlPreview.d.ts +18 -0
  35. package/dist/explorer/preview/HtmlPreview.d.ts.map +1 -0
  36. package/dist/explorer/preview/HtmlPreview.js +112 -0
  37. package/dist/explorer/preview/HtmlPreview.js.map +1 -0
  38. package/dist/explorer/preview/OfficePreview.d.ts +11 -0
  39. package/dist/explorer/preview/OfficePreview.d.ts.map +1 -0
  40. package/dist/explorer/preview/OfficePreview.js +53 -0
  41. package/dist/explorer/preview/OfficePreview.js.map +1 -0
  42. package/dist/explorer/preview/TextPreview.d.ts +17 -0
  43. package/dist/explorer/preview/TextPreview.d.ts.map +1 -0
  44. package/dist/explorer/preview/TextPreview.js +95 -0
  45. package/dist/explorer/preview/TextPreview.js.map +1 -0
  46. package/dist/explorer/preview/index.d.ts +10 -3
  47. package/dist/explorer/preview/index.d.ts.map +1 -1
  48. package/dist/explorer/preview/index.js +52 -55
  49. package/dist/explorer/preview/index.js.map +1 -1
  50. package/dist/explorer/preview/md-labels.d.ts +3 -0
  51. package/dist/explorer/preview/md-labels.d.ts.map +1 -0
  52. package/dist/explorer/preview/md-labels.js +12 -0
  53. package/dist/explorer/preview/md-labels.js.map +1 -0
  54. package/dist/explorer/types.d.ts +186 -4
  55. package/dist/explorer/types.d.ts.map +1 -1
  56. package/dist/explorer/types.js +401 -14
  57. package/dist/explorer/types.js.map +1 -1
  58. package/dist/host/index.d.ts +66 -0
  59. package/dist/host/index.d.ts.map +1 -0
  60. package/dist/host/index.js +60 -0
  61. package/dist/host/index.js.map +1 -0
  62. package/dist/session/SessionViewModal.d.ts +42 -0
  63. package/dist/session/SessionViewModal.d.ts.map +1 -0
  64. package/dist/session/SessionViewModal.js +997 -0
  65. package/dist/session/SessionViewModal.js.map +1 -0
  66. package/dist/session/changes.d.ts +73 -0
  67. package/dist/session/changes.d.ts.map +1 -0
  68. package/dist/session/changes.js +134 -0
  69. package/dist/session/changes.js.map +1 -0
  70. package/dist/session/faces.d.ts +198 -0
  71. package/dist/session/faces.d.ts.map +1 -0
  72. package/dist/session/faces.js +17 -0
  73. package/dist/session/faces.js.map +1 -0
  74. package/dist/session/index.d.ts +5 -23
  75. package/dist/session/index.d.ts.map +1 -1
  76. package/dist/session/index.js +25 -70
  77. package/dist/session/index.js.map +1 -1
  78. package/dist/session/mirror/ChangedFileDiff.d.ts +22 -0
  79. package/dist/session/mirror/ChangedFileDiff.d.ts.map +1 -0
  80. package/dist/session/mirror/ChangedFileDiff.js +157 -0
  81. package/dist/session/mirror/ChangedFileDiff.js.map +1 -0
  82. package/dist/session/mirror/ChangedFilesCard.d.ts +18 -0
  83. package/dist/session/mirror/ChangedFilesCard.d.ts.map +1 -0
  84. package/dist/session/mirror/ChangedFilesCard.js +158 -0
  85. package/dist/session/mirror/ChangedFilesCard.js.map +1 -0
  86. package/dist/session/mirror/ChatGroupSeat.d.ts +24 -0
  87. package/dist/session/mirror/ChatGroupSeat.d.ts.map +1 -0
  88. package/dist/session/mirror/ChatGroupSeat.js +134 -0
  89. package/dist/session/mirror/ChatGroupSeat.js.map +1 -0
  90. package/dist/session/mirror/ChatNodeSeat.d.ts +43 -0
  91. package/dist/session/mirror/ChatNodeSeat.d.ts.map +1 -0
  92. package/dist/session/mirror/ChatNodeSeat.js +133 -0
  93. package/dist/session/mirror/ChatNodeSeat.js.map +1 -0
  94. package/dist/session/mirror/ChatView.d.ts +47 -0
  95. package/dist/session/mirror/ChatView.d.ts.map +1 -0
  96. package/dist/session/mirror/ChatView.js +127 -0
  97. package/dist/session/mirror/ChatView.js.map +1 -0
  98. package/dist/session/mirror/CommandCard.d.ts +20 -0
  99. package/dist/session/mirror/CommandCard.d.ts.map +1 -0
  100. package/dist/session/mirror/CommandCard.js +69 -0
  101. package/dist/session/mirror/CommandCard.js.map +1 -0
  102. package/dist/session/mirror/Deliverables.d.ts +24 -0
  103. package/dist/session/mirror/Deliverables.d.ts.map +1 -0
  104. package/dist/session/mirror/Deliverables.js +134 -0
  105. package/dist/session/mirror/Deliverables.js.map +1 -0
  106. package/dist/session/mirror/GenericCommandCard.d.ts +25 -0
  107. package/dist/session/mirror/GenericCommandCard.d.ts.map +1 -0
  108. package/dist/session/mirror/GenericCommandCard.js +567 -0
  109. package/dist/session/mirror/GenericCommandCard.js.map +1 -0
  110. package/dist/session/mirror/MessageIconActions.d.ts +16 -0
  111. package/dist/session/mirror/MessageIconActions.d.ts.map +1 -0
  112. package/dist/session/mirror/MessageIconActions.js +71 -0
  113. package/dist/session/mirror/MessageIconActions.js.map +1 -0
  114. package/dist/session/mirror/MessageItem.d.ts +66 -0
  115. package/dist/session/mirror/MessageItem.d.ts.map +1 -0
  116. package/dist/session/mirror/MessageItem.js +135 -0
  117. package/dist/session/mirror/MessageItem.js.map +1 -0
  118. package/dist/session/mirror/ReasoningRow.d.ts +11 -0
  119. package/dist/session/mirror/ReasoningRow.d.ts.map +1 -0
  120. package/dist/session/mirror/ReasoningRow.js +49 -0
  121. package/dist/session/mirror/ReasoningRow.js.map +1 -0
  122. package/dist/session/mirror/StatDialog.d.ts +20 -0
  123. package/dist/session/mirror/StatDialog.d.ts.map +1 -0
  124. package/dist/session/mirror/StatDialog.js +36 -0
  125. package/dist/session/mirror/StatDialog.js.map +1 -0
  126. package/dist/session/mirror/TurnProcessNodeView.d.ts +10 -0
  127. package/dist/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
  128. package/dist/session/mirror/TurnProcessNodeView.js +68 -0
  129. package/dist/session/mirror/TurnProcessNodeView.js.map +1 -0
  130. package/dist/session/mirror/TurnTailNodeView.d.ts +32 -0
  131. package/dist/session/mirror/TurnTailNodeView.d.ts.map +1 -0
  132. package/dist/session/mirror/TurnTailNodeView.js +48 -0
  133. package/dist/session/mirror/TurnTailNodeView.js.map +1 -0
  134. package/dist/session/mirror/TurnTriggerNodeView.d.ts +14 -0
  135. package/dist/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
  136. package/dist/session/mirror/TurnTriggerNodeView.js +87 -0
  137. package/dist/session/mirror/TurnTriggerNodeView.js.map +1 -0
  138. package/dist/session/mirror/TurnUsagePanel.d.ts +21 -0
  139. package/dist/session/mirror/TurnUsagePanel.d.ts.map +1 -0
  140. package/dist/session/mirror/TurnUsagePanel.js +41 -0
  141. package/dist/session/mirror/TurnUsagePanel.js.map +1 -0
  142. package/dist/session/mirror/message-chrome.d.ts +33 -0
  143. package/dist/session/mirror/message-chrome.d.ts.map +1 -0
  144. package/dist/session/mirror/message-chrome.js +158 -0
  145. package/dist/session/mirror/message-chrome.js.map +1 -0
  146. package/dist/session/mirror/process-groups.d.ts +56 -0
  147. package/dist/session/mirror/process-groups.d.ts.map +1 -0
  148. package/dist/session/mirror/process-groups.js +202 -0
  149. package/dist/session/mirror/process-groups.js.map +1 -0
  150. package/dist/session/official-classes.d.ts +28 -0
  151. package/dist/session/official-classes.d.ts.map +1 -0
  152. package/dist/session/official-classes.js +146 -0
  153. package/dist/session/official-classes.js.map +1 -0
  154. package/dist/session/open-session-view.d.ts +17 -0
  155. package/dist/session/open-session-view.d.ts.map +1 -0
  156. package/dist/session/open-session-view.js +136 -0
  157. package/dist/session/open-session-view.js.map +1 -0
  158. package/dist/session/session-css.d.ts +1 -1
  159. package/dist/session/session-css.d.ts.map +1 -1
  160. package/dist/session/session-css.generated.d.ts +2 -0
  161. package/dist/session/session-css.generated.d.ts.map +1 -0
  162. package/dist/session/session-css.generated.js +4 -0
  163. package/dist/session/session-css.generated.js.map +1 -0
  164. package/dist/session/session-css.js +1 -17
  165. package/dist/session/session-css.js.map +1 -1
  166. package/dist/ui/AlertModal.d.ts +28 -0
  167. package/dist/ui/AlertModal.d.ts.map +1 -0
  168. package/dist/ui/AlertModal.js +29 -0
  169. package/dist/ui/AlertModal.js.map +1 -0
  170. package/dist/ui/Button.d.ts.map +1 -1
  171. package/dist/ui/Button.js +14 -1
  172. package/dist/ui/Button.js.map +1 -1
  173. package/dist/ui/Card.d.ts +4 -2
  174. package/dist/ui/Card.d.ts.map +1 -1
  175. package/dist/ui/Card.js +12 -6
  176. package/dist/ui/Card.js.map +1 -1
  177. package/dist/ui/Chip.d.ts +9 -1
  178. package/dist/ui/Chip.d.ts.map +1 -1
  179. package/dist/ui/Chip.js +8 -2
  180. package/dist/ui/Chip.js.map +1 -1
  181. package/dist/ui/CodeViewer.d.ts +36 -0
  182. package/dist/ui/CodeViewer.d.ts.map +1 -0
  183. package/dist/ui/CodeViewer.js +90 -0
  184. package/dist/ui/CodeViewer.js.map +1 -0
  185. package/dist/ui/ConfirmModal.d.ts +30 -0
  186. package/dist/ui/ConfirmModal.d.ts.map +1 -0
  187. package/dist/ui/ConfirmModal.js +23 -0
  188. package/dist/ui/ConfirmModal.js.map +1 -0
  189. package/dist/ui/DateTimePicker.d.ts +45 -0
  190. package/dist/ui/DateTimePicker.d.ts.map +1 -0
  191. package/dist/ui/DateTimePicker.js +447 -0
  192. package/dist/ui/DateTimePicker.js.map +1 -0
  193. package/dist/ui/Field.d.ts +11 -2
  194. package/dist/ui/Field.d.ts.map +1 -1
  195. package/dist/ui/Field.js +15 -5
  196. package/dist/ui/Field.js.map +1 -1
  197. package/dist/ui/MarqueeText.d.ts.map +1 -1
  198. package/dist/ui/MarqueeText.js +3 -1
  199. package/dist/ui/MarqueeText.js.map +1 -1
  200. package/dist/ui/Modal.d.ts +25 -3
  201. package/dist/ui/Modal.d.ts.map +1 -1
  202. package/dist/ui/Modal.js +41 -7
  203. package/dist/ui/Modal.js.map +1 -1
  204. package/dist/ui/ModelPicker.d.ts +25 -12
  205. package/dist/ui/ModelPicker.d.ts.map +1 -1
  206. package/dist/ui/ModelPicker.js +67 -19
  207. package/dist/ui/ModelPicker.js.map +1 -1
  208. package/dist/ui/PanelDock.d.ts +127 -0
  209. package/dist/ui/PanelDock.d.ts.map +1 -0
  210. package/dist/ui/PanelDock.js +297 -0
  211. package/dist/ui/PanelDock.js.map +1 -0
  212. package/dist/ui/Picker.d.ts +8 -2
  213. package/dist/ui/Picker.d.ts.map +1 -1
  214. package/dist/ui/Picker.js +86 -18
  215. package/dist/ui/Picker.js.map +1 -1
  216. package/dist/ui/SectionHead.d.ts +3 -3
  217. package/dist/ui/SectionHead.d.ts.map +1 -1
  218. package/dist/ui/SectionHead.js +4 -4
  219. package/dist/ui/SectionHead.js.map +1 -1
  220. package/dist/ui/Segmented.d.ts +2 -0
  221. package/dist/ui/Segmented.d.ts.map +1 -1
  222. package/dist/ui/Segmented.js +3 -1
  223. package/dist/ui/Segmented.js.map +1 -1
  224. package/dist/ui/Textarea.d.ts +2 -0
  225. package/dist/ui/Textarea.d.ts.map +1 -1
  226. package/dist/ui/Textarea.js +6 -1
  227. package/dist/ui/Textarea.js.map +1 -1
  228. package/dist/ui/Toast.d.ts +41 -8
  229. package/dist/ui/Toast.d.ts.map +1 -1
  230. package/dist/ui/Toast.js +216 -28
  231. package/dist/ui/Toast.js.map +1 -1
  232. package/dist/ui/WorkspacePicker.d.ts +15 -28
  233. package/dist/ui/WorkspacePicker.d.ts.map +1 -1
  234. package/dist/ui/WorkspacePicker.js +18 -27
  235. package/dist/ui/WorkspacePicker.js.map +1 -1
  236. package/dist/ui/card-css.d.ts +1 -1
  237. package/dist/ui/card-css.d.ts.map +1 -1
  238. package/dist/ui/card-css.generated.d.ts +2 -0
  239. package/dist/ui/card-css.generated.d.ts.map +1 -0
  240. package/dist/ui/card-css.generated.js +4 -0
  241. package/dist/ui/card-css.generated.js.map +1 -0
  242. package/dist/ui/card-css.js +1 -35
  243. package/dist/ui/card-css.js.map +1 -1
  244. package/dist/ui/chip-css.d.ts +1 -1
  245. package/dist/ui/chip-css.d.ts.map +1 -1
  246. package/dist/ui/chip-css.generated.d.ts +2 -0
  247. package/dist/ui/chip-css.generated.d.ts.map +1 -0
  248. package/dist/ui/chip-css.generated.js +4 -0
  249. package/dist/ui/chip-css.generated.js.map +1 -0
  250. package/dist/ui/chip-css.js +1 -17
  251. package/dist/ui/chip-css.js.map +1 -1
  252. package/dist/ui/code-viewer-css.d.ts +2 -0
  253. package/dist/ui/code-viewer-css.d.ts.map +1 -0
  254. package/dist/ui/code-viewer-css.generated.d.ts +2 -0
  255. package/dist/ui/code-viewer-css.generated.d.ts.map +1 -0
  256. package/dist/ui/code-viewer-css.generated.js +4 -0
  257. package/dist/ui/code-viewer-css.generated.js.map +1 -0
  258. package/dist/ui/code-viewer-css.js +3 -0
  259. package/dist/ui/code-viewer-css.js.map +1 -0
  260. package/dist/ui/code-viewer-lang.d.ts +15 -0
  261. package/dist/ui/code-viewer-lang.d.ts.map +1 -0
  262. package/dist/ui/code-viewer-lang.js +190 -0
  263. package/dist/ui/code-viewer-lang.js.map +1 -0
  264. package/dist/ui/code-viewer-theme.d.ts +5 -0
  265. package/dist/ui/code-viewer-theme.d.ts.map +1 -0
  266. package/dist/ui/code-viewer-theme.js +138 -0
  267. package/dist/ui/code-viewer-theme.js.map +1 -0
  268. package/dist/ui/controls/back-to-top-css.generated.d.ts +2 -0
  269. package/dist/ui/controls/back-to-top-css.generated.d.ts.map +1 -0
  270. package/dist/ui/controls/back-to-top-css.generated.js +4 -0
  271. package/dist/ui/controls/back-to-top-css.generated.js.map +1 -0
  272. package/dist/ui/controls/button-css.generated.d.ts +2 -0
  273. package/dist/ui/controls/button-css.generated.d.ts.map +1 -0
  274. package/dist/ui/controls/button-css.generated.js +4 -0
  275. package/dist/ui/controls/button-css.generated.js.map +1 -0
  276. package/dist/ui/controls/datetime-css.generated.d.ts +2 -0
  277. package/dist/ui/controls/datetime-css.generated.d.ts.map +1 -0
  278. package/dist/ui/controls/datetime-css.generated.js +4 -0
  279. package/dist/ui/controls/datetime-css.generated.js.map +1 -0
  280. package/dist/ui/controls/field-css.generated.d.ts +2 -0
  281. package/dist/ui/controls/field-css.generated.d.ts.map +1 -0
  282. package/dist/ui/controls/field-css.generated.js +4 -0
  283. package/dist/ui/controls/field-css.generated.js.map +1 -0
  284. package/dist/ui/controls/hint-css.generated.d.ts +2 -0
  285. package/dist/ui/controls/hint-css.generated.d.ts.map +1 -0
  286. package/dist/ui/controls/hint-css.generated.js +4 -0
  287. package/dist/ui/controls/hint-css.generated.js.map +1 -0
  288. package/dist/ui/controls/loading-css.generated.d.ts +2 -0
  289. package/dist/ui/controls/loading-css.generated.d.ts.map +1 -0
  290. package/dist/ui/controls/loading-css.generated.js +4 -0
  291. package/dist/ui/controls/loading-css.generated.js.map +1 -0
  292. package/dist/ui/controls/segmented-css.generated.d.ts +2 -0
  293. package/dist/ui/controls/segmented-css.generated.d.ts.map +1 -0
  294. package/dist/ui/controls/segmented-css.generated.js +4 -0
  295. package/dist/ui/controls/segmented-css.generated.js.map +1 -0
  296. package/dist/ui/controls-css.d.ts +7 -8
  297. package/dist/ui/controls-css.d.ts.map +1 -1
  298. package/dist/ui/controls-css.js +13 -11
  299. package/dist/ui/controls-css.js.map +1 -1
  300. package/dist/ui/css.d.ts +5 -0
  301. package/dist/ui/css.d.ts.map +1 -1
  302. package/dist/ui/css.js +13 -4
  303. package/dist/ui/css.js.map +1 -1
  304. package/dist/ui/datetime-logic.d.ts +100 -0
  305. package/dist/ui/datetime-logic.d.ts.map +1 -0
  306. package/dist/ui/datetime-logic.js +193 -0
  307. package/dist/ui/datetime-logic.js.map +1 -0
  308. package/dist/ui/feedback-css.d.ts +1 -1
  309. package/dist/ui/feedback-css.d.ts.map +1 -1
  310. package/dist/ui/feedback-css.generated.d.ts +2 -0
  311. package/dist/ui/feedback-css.generated.d.ts.map +1 -0
  312. package/dist/ui/feedback-css.generated.js +4 -0
  313. package/dist/ui/feedback-css.generated.js.map +1 -0
  314. package/dist/ui/feedback-css.js +1 -53
  315. package/dist/ui/feedback-css.js.map +1 -1
  316. package/dist/ui/host-data.d.ts +103 -0
  317. package/dist/ui/host-data.d.ts.map +1 -0
  318. package/dist/ui/host-data.js +106 -0
  319. package/dist/ui/host-data.js.map +1 -0
  320. package/dist/ui/host-toast.d.ts +23 -0
  321. package/dist/ui/host-toast.d.ts.map +1 -0
  322. package/dist/ui/host-toast.js +34 -0
  323. package/dist/ui/host-toast.js.map +1 -0
  324. package/dist/ui/index.d.ts +12 -6
  325. package/dist/ui/index.d.ts.map +1 -1
  326. package/dist/ui/index.js +10 -4
  327. package/dist/ui/index.js.map +1 -1
  328. package/dist/ui/marquee-css.d.ts +2 -0
  329. package/dist/ui/marquee-css.d.ts.map +1 -0
  330. package/dist/ui/marquee-css.generated.d.ts +2 -0
  331. package/dist/ui/marquee-css.generated.d.ts.map +1 -0
  332. package/dist/ui/marquee-css.generated.js +4 -0
  333. package/dist/ui/marquee-css.generated.js.map +1 -0
  334. package/dist/ui/marquee-css.js +4 -0
  335. package/dist/ui/marquee-css.js.map +1 -0
  336. package/dist/ui/modal-host.d.ts +30 -0
  337. package/dist/ui/modal-host.d.ts.map +1 -0
  338. package/dist/ui/modal-host.js +101 -0
  339. package/dist/ui/modal-host.js.map +1 -0
  340. package/dist/ui/official.d.ts.map +1 -1
  341. package/dist/ui/official.js +45 -1
  342. package/dist/ui/official.js.map +1 -1
  343. package/dist/ui/panel-dock-css.d.ts +2 -0
  344. package/dist/ui/panel-dock-css.d.ts.map +1 -0
  345. package/dist/ui/panel-dock-css.generated.d.ts +2 -0
  346. package/dist/ui/panel-dock-css.generated.d.ts.map +1 -0
  347. package/dist/ui/panel-dock-css.generated.js +4 -0
  348. package/dist/ui/panel-dock-css.generated.js.map +1 -0
  349. package/dist/ui/panel-dock-css.js +4 -0
  350. package/dist/ui/panel-dock-css.js.map +1 -0
  351. package/dist/ui/panel-dock-logic.d.ts +50 -0
  352. package/dist/ui/panel-dock-logic.d.ts.map +1 -0
  353. package/dist/ui/panel-dock-logic.js +64 -0
  354. package/dist/ui/panel-dock-logic.js.map +1 -0
  355. package/dist/ui/picker-css.d.ts +1 -1
  356. package/dist/ui/picker-css.d.ts.map +1 -1
  357. package/dist/ui/picker-css.generated.d.ts +2 -0
  358. package/dist/ui/picker-css.generated.d.ts.map +1 -0
  359. package/dist/ui/picker-css.generated.js +4 -0
  360. package/dist/ui/picker-css.generated.js.map +1 -0
  361. package/dist/ui/picker-css.js +1 -48
  362. package/dist/ui/picker-css.js.map +1 -1
  363. package/dist/ui/picker-icons.d.ts +12 -0
  364. package/dist/ui/picker-icons.d.ts.map +1 -0
  365. package/dist/ui/picker-icons.js +29 -0
  366. package/dist/ui/picker-icons.js.map +1 -0
  367. package/dist/ui/picker-logic.d.ts +4 -1
  368. package/dist/ui/picker-logic.d.ts.map +1 -1
  369. package/dist/ui/picker-logic.js +1 -2
  370. package/dist/ui/picker-logic.js.map +1 -1
  371. package/dist/ui/resizer.d.ts +3 -1
  372. package/dist/ui/resizer.d.ts.map +1 -1
  373. package/dist/ui/resizer.js +1 -1
  374. package/dist/ui/resizer.js.map +1 -1
  375. package/dist/ui/toast-host.d.ts +24 -0
  376. package/dist/ui/toast-host.d.ts.map +1 -0
  377. package/dist/ui/toast-host.js +20 -0
  378. package/dist/ui/toast-host.js.map +1 -0
  379. package/dist/utils/date.d.ts +8 -0
  380. package/dist/utils/date.d.ts.map +1 -1
  381. package/dist/utils/date.js +16 -0
  382. package/dist/utils/date.js.map +1 -1
  383. package/dist/utils/i18n.d.ts +1 -1
  384. package/dist/utils/i18n.d.ts.map +1 -1
  385. package/dist/utils/i18n.js +437 -18
  386. package/dist/utils/i18n.js.map +1 -1
  387. package/dist/utils/index.d.ts +1 -1
  388. package/dist/utils/index.d.ts.map +1 -1
  389. package/dist/utils/index.js +1 -1
  390. package/dist/utils/index.js.map +1 -1
  391. package/dist/utils/path.d.ts.map +1 -1
  392. package/dist/utils/path.js +1 -0
  393. package/dist/utils/path.js.map +1 -1
  394. package/docs/README.md +12 -5
  395. package/docs/design/architecture.md +38 -8
  396. package/docs/design/copywriting.md +95 -0
  397. package/docs/design/doc-format.md +80 -0
  398. package/docs/design/doc-format.ts +39 -0
  399. package/docs/design/external/dsh-host.md +150 -1
  400. package/docs/design/features.md +4 -17
  401. package/docs/design/methods.md +13 -34
  402. package/docs/design/structure.md +25 -22
  403. package/docs/design/style.md +24 -50
  404. package/docs/help/design.doc.ts +112 -0
  405. package/docs/help/design.md +88 -0
  406. package/docs/help/explorer.doc.ts +136 -0
  407. package/docs/help/explorer.md +68 -0
  408. package/docs/help/index.doc.ts +79 -0
  409. package/docs/help/index.md +28 -0
  410. package/docs/help/integration.doc.ts +114 -0
  411. package/docs/help/integration.md +127 -0
  412. package/docs/help/methods.md +58 -0
  413. package/docs/help/session.doc.ts +154 -0
  414. package/docs/help/session.md +91 -0
  415. package/docs/help/style.md +80 -0
  416. package/docs/help/ui.doc.ts +404 -0
  417. package/docs/help/ui.md +342 -0
  418. package/docs/help/utils.doc.ts +133 -0
  419. package/docs/help/utils.md +96 -0
  420. package/docs/requirements.md +33 -12
  421. package/package.json +44 -3
  422. package/dist/ui/ErrorBoundary.d.ts +0 -22
  423. package/dist/ui/ErrorBoundary.d.ts.map +0 -1
  424. package/dist/ui/ErrorBoundary.js +0 -30
  425. package/dist/ui/ErrorBoundary.js.map +0 -1
  426. package/docs/design/features/design.md +0 -55
  427. package/docs/design/features/explorer.md +0 -73
  428. package/docs/design/features/session.md +0 -70
  429. package/docs/design/features/ui.md +0 -225
  430. package/docs/design/features/utils.md +0 -64
  431. package/docs/examples/integration.md +0 -103
@@ -1,20 +1,407 @@
1
- // 与宿主「工作区文件」能力对接的**最小接口面**。
1
+ // 与宿主「工作区文件」能力对接的**最小接口面** + 文件浏览的纯逻辑。
2
+ //
3
+ // 本文件是 explorer 的纯逻辑层:**零 React、零官方件**——node 单测直接引它
4
+ // (面板/预览体在别的文件,静态 import 官方 primitives,Node 下会
5
+ // ERR_MODULE_NOT_FOUND,那是宿主才有的平台模块)。
2
6
  //
3
7
  // 为什么不直接用 `ctx`:ctx 是宿主给的整个大对象,传进来就把本包和宿主版本焊死了。
4
8
  // 插件从 ctx 里取出这一小块传给我们,宿主 breaking 时改的是插件「取出」的一行(需求文档 §5.5)。
5
- import { extOf, mimeOf } from '../utils/path.js';
6
- /** 按扩展名猜预览类型;猜不出就 `unsupported`(不硬撑,交给调用方决定兜底)。 */
7
- export function previewKindOf(path) {
8
- if (mimeOf(path) !== undefined)
9
- return 'image';
9
+ import { extOf, mimeOf, parentOf } from '../utils/path.js';
10
+ /** HTML 静态预览的扩展名(与官方 htmlBodyDefinition 同款)。 */
11
+ export const HTML_KINDS = ['html', 'htm'];
12
+ /**
13
+ * Office 预览扩展名(官方 remote.officeToPdf 转 PDF 后再渲染)。
14
+ * ⚠️ 官方 OfficeExtension 还含 xls / xlsx,按兄弟项目 2026-10-05 拍板「Excel 向后讨论」不纳入。
15
+ */
16
+ export const OFFICE_KINDS = ['doc', 'docx', 'ppt', 'pptx'];
17
+ /** 源码态读取上限(256K,UTF-8 边界安全由截断处处理)。 */
18
+ export const SOURCE_MAX_BYTES = 256 * 1024;
19
+ /**
20
+ * 按扩展名分发预览类型。**没有 unsupported 档**:认不出的扩展名一律按 text 走,
21
+ * 由 read 抛 not-text 落「不是文本文件」空态——官方 read 才是真源,不本地猜二进制清单。
22
+ */
23
+ export function previewInfoOf(path) {
10
24
  const ext = extOf(path);
11
- if (ext === '')
12
- return 'text';
13
- const textLike = new Set([
14
- 'txt', 'md', 'markdown', 'json', 'yaml', 'yml', 'toml', 'ini', 'csv', 'log',
15
- 'ts', 'tsx', 'js', 'jsx', 'mjs', 'cjs', 'py', 'go', 'rs', 'java', 'c', 'h', 'cpp',
16
- 'sh', 'bash', 'sql', 'html', 'css', 'xml',
17
- ]);
18
- return textLike.has(ext) ? 'text' : 'unsupported';
25
+ const mime = mimeOf(path);
26
+ if (mime !== undefined)
27
+ return { kind: 'image', ext, mime };
28
+ if (ext === 'pdf')
29
+ return { kind: 'pdf', ext, mime: 'application/pdf' };
30
+ if (ext === 'md' || ext === 'markdown')
31
+ return { kind: 'md', ext };
32
+ if (HTML_KINDS.includes(ext))
33
+ return { kind: 'html', ext };
34
+ if (OFFICE_KINDS.includes(ext))
35
+ return { kind: 'office', ext, mime: 'application/pdf' };
36
+ return { kind: 'text', ext };
37
+ }
38
+ /** 只要 kind(兼容旧用法);要 ext/mime 用 previewInfoOf。 */
39
+ export function previewKindOf(path) {
40
+ return previewInfoOf(path).kind;
41
+ }
42
+ export function unwrapEnvelope(result) {
43
+ if (typeof result === 'object' && result !== null) {
44
+ const r = result;
45
+ if (r.ok === false)
46
+ return { kind: 'error', error: r.error };
47
+ if (r.ok === true && 'value' in r)
48
+ return { kind: 'ok', payload: r.value };
49
+ }
50
+ return { kind: 'ok', payload: result };
51
+ }
52
+ /** 失败分支判空(TS 收窄用)。 */
53
+ export function isFailed(value) {
54
+ return typeof value === 'object' && value !== null && 'failed' in value;
55
+ }
56
+ /** `list` 结果防御解析:返回 Listing 或失败/非法信封。 */
57
+ export function listingOf(result) {
58
+ const envelope = unwrapEnvelope(result);
59
+ if (envelope.kind === 'error')
60
+ return { failed: envelope.error };
61
+ const raw = envelope.payload;
62
+ if (typeof raw !== 'object' || raw === null) {
63
+ console.warn('[dsh-plugin-core:explorer] list 返回非对象');
64
+ return null;
65
+ }
66
+ const r = raw;
67
+ if (typeof r.path !== 'string' || !Array.isArray(r.entries) || typeof r.truncated !== 'boolean') {
68
+ console.warn('[dsh-plugin-core:explorer] list 返回形状不符契约');
69
+ return null;
70
+ }
71
+ return { path: r.path, entries: r.entries, truncated: r.truncated };
72
+ }
73
+ /** `read` 结果防御解析:page.text 必须是字符串,否则错误态(防渲染器内部抛错整页黑屏)。 */
74
+ export function textPageOf(result) {
75
+ const envelope = unwrapEnvelope(result);
76
+ if (envelope.kind === 'error')
77
+ return { failed: envelope.error };
78
+ const raw = envelope.payload;
79
+ if (typeof raw !== 'object' || raw === null) {
80
+ console.warn('[dsh-plugin-core:explorer] read 返回非对象');
81
+ return null;
82
+ }
83
+ const r = raw;
84
+ if (typeof r.text !== 'string') {
85
+ console.warn('[dsh-plugin-core:explorer] read 返回形状不符契约(无 text 字段)');
86
+ return null;
87
+ }
88
+ const offset = typeof r.offset === 'number' ? r.offset : 0;
89
+ const lines = typeof r.lines === 'number' ? r.lines : r.text === '' ? 0 : r.text.split('\n').length;
90
+ return { text: r.text, offset, lines, eof: r.eof !== false };
91
+ }
92
+ /** `readBytes` 结果防御解析:data 必须是 Uint8Array,否则错误态。 */
93
+ export function bytesOf(result) {
94
+ const envelope = unwrapEnvelope(result);
95
+ if (envelope.kind === 'error')
96
+ return { failed: envelope.error };
97
+ const data = envelope.payload?.data;
98
+ if (data instanceof Uint8Array)
99
+ return data;
100
+ console.warn('[dsh-plugin-core:explorer] readBytes 返回形状不符契约');
101
+ return null;
102
+ }
103
+ /** `stat` 结果防御解析:只取 absolutePath(信封剥壳同款;stat 仅认 regular file)。 */
104
+ export function absolutePathOf(result) {
105
+ const envelope = unwrapEnvelope(result);
106
+ if (envelope.kind === 'error')
107
+ return null;
108
+ const raw = envelope.payload;
109
+ if (typeof raw !== 'object' || raw === null)
110
+ return null;
111
+ const abs = raw.absolutePath;
112
+ return typeof abs === 'string' && abs !== '' ? abs : null;
113
+ }
114
+ // ── 错误码 → 文案(官方 RemoteError 按 code 分支,不按消息文本) ──
115
+ /** 剥 wire 命名空间前缀(如 `workspace-file/not-found` ⇒ `not-found`)。 */
116
+ export function bareCode(raw) {
117
+ if (typeof raw === 'string') {
118
+ const slash = raw.lastIndexOf('/');
119
+ return slash >= 0 ? raw.slice(slash + 1) : raw;
120
+ }
121
+ if (typeof raw === 'object' && raw !== null) {
122
+ const code = raw.code;
123
+ if (typeof code === 'string')
124
+ return bareCode(code);
125
+ }
126
+ return '';
127
+ }
128
+ /** 任意抛错/reject ⇒ 文案键。官方 code 分支 + 未知回落,绝不按消息文本猜。 */
129
+ export function errView(error) {
130
+ const code = bareCode(error);
131
+ switch (code) {
132
+ case 'outside-workspace':
133
+ return { key: 'previewOutside' };
134
+ case 'not-found':
135
+ return { key: 'previewNotFound' };
136
+ case 'not-directory':
137
+ return { key: 'previewNotDirectory' };
138
+ case 'not-regular-file':
139
+ return { key: 'previewNotDirectory' };
140
+ case 'too-large':
141
+ return { key: 'previewTooLarge' };
142
+ case 'not-text':
143
+ return { key: 'previewNotText' };
144
+ case 'invocation-unavailable':
145
+ case 'service-unavailable':
146
+ return { key: 'previewOfficeUnavailable' };
147
+ default:
148
+ // 未映射的机器码**必须留痕**:写死「加载失败」会让消费方和我们自己都永远查不出是谁的锅
149
+ // (HTML/图片预览曾因此只剩一句「加载失败」,无法定位是远端拒了还是形状不对)。
150
+ console.warn('[dsh-plugin-core:explorer] 预览失败:未映射的远端错误码', code, error);
151
+ return { key: 'previewFailedCode', params: { code } };
152
+ }
153
+ }
154
+ // ── 目录条目 ──
155
+ /** 子项排序:目录在前,文件在后,各自按名称(不区分大小写)升序。 */
156
+ export function sortEntries(entries) {
157
+ return [...entries].sort((a, b) => {
158
+ const ad = a.type === 'directory' ? 0 : 1;
159
+ const bd = b.type === 'directory' ? 0 : 1;
160
+ if (ad !== bd)
161
+ return ad - bd;
162
+ return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
163
+ });
164
+ }
165
+ /**
166
+ * 0.2.0-rc.1 起官方 list **拒绝空路径** ⇒ 空串(= 工作区根)一律以 `'.'` 上线
167
+ * (`'.'` 按 cwd = 工作区根归一解析为根本身;响应里根的 path 仍是 `''`)。
168
+ */
169
+ export function listPathOf(dir) {
170
+ return dir === '' ? '.' : dir;
171
+ }
172
+ export function createRootCache() {
173
+ const map = new Map();
174
+ return {
175
+ get: (sessionId) => map.get(sessionId),
176
+ set: (sessionId, root) => {
177
+ map.set(sessionId, root);
178
+ },
179
+ };
180
+ }
181
+ /** 宿主绝对路径形态(/ 开头或 Windows 盘符)。 */
182
+ export function isAbsoluteish(p) {
183
+ return p.startsWith('/') || p.startsWith('\\') || /^[a-zA-Z]:[\\/]/.test(p);
184
+ }
185
+ /** 工作区相对拼接(根下直接 name,不补前导 /)。 */
186
+ export function relJoin(dir, name) {
187
+ return dir.replace(/\/+$/, '') === '' ? name : `${dir.replace(/\/+$/, '')}/${name}`;
188
+ }
189
+ /** 由「相对路径 + 该文件宿主绝对路径」反推工作区根并写入缓存;学不出返回 null。 */
190
+ export function learnRoot(cache, sessionId, relativePath, absolutePath) {
191
+ const rel = relativePath.replace(/^\/+/, '').replace(/\/+$/, '');
192
+ if (rel === '' || !absolutePath.endsWith(`/${rel}`))
193
+ return null;
194
+ const root = absolutePath.slice(0, absolutePath.length - rel.length - 1);
195
+ cache.set(sessionId, root);
196
+ return root;
197
+ }
198
+ /** 把宿主绝对路径剥回工作区相对(根未知或不在根下 ⇒ 原样返回,退化)。 */
199
+ export function relativizeToRoot(cache, sessionId, dir) {
200
+ if (!isAbsoluteish(dir))
201
+ return dir;
202
+ const root = cache.get(sessionId);
203
+ if (root === undefined)
204
+ return dir;
205
+ const norm = root.replace(/\/+$/, '');
206
+ if (dir === norm)
207
+ return '';
208
+ if (dir.startsWith(`${norm}/`))
209
+ return dir.slice(norm.length + 1);
210
+ return dir;
211
+ }
212
+ /**
213
+ * 在相对目录树里找**任意一个文件**并 stat(广度优先、有界:每层最多 5 个目录、最多 3 层)。
214
+ * 用于目标目录本身没有文件子项(空目录 / 只有子目录)时反推工作区根。
215
+ */
216
+ export async function findAnyFileAbs(workspaceFiles, sessionId, startDir) {
217
+ const stat = workspaceFiles.stat;
218
+ if (stat === undefined)
219
+ return null;
220
+ let frontier = [startDir];
221
+ for (let depth = 0; depth < 3 && frontier.length > 0; depth++) {
222
+ const nextDirs = [];
223
+ for (const dir of frontier.slice(0, 5)) {
224
+ let entries;
225
+ try {
226
+ const parsed = listingOf(await workspaceFiles.list(sessionId, listPathOf(dir)));
227
+ if (parsed === null || isFailed(parsed))
228
+ continue;
229
+ entries = parsed.entries;
230
+ }
231
+ catch {
232
+ continue;
233
+ }
234
+ const file = entries.find((entry) => entry.type === 'file');
235
+ if (file !== undefined) {
236
+ const rel = relJoin(dir, file.name);
237
+ try {
238
+ const abs = absolutePathOf(await stat(sessionId, rel));
239
+ if (abs !== null)
240
+ return { absolutePath: abs, relativePath: rel };
241
+ }
242
+ catch {
243
+ /* 换下一个候选 */
244
+ }
245
+ }
246
+ for (const entry of entries) {
247
+ if (entry.type === 'directory' && nextDirs.length < 5)
248
+ nextDirs.push(relJoin(dir, entry.name));
249
+ }
250
+ }
251
+ frontier = nextDirs;
252
+ }
253
+ return null;
254
+ }
255
+ /**
256
+ * 把「工作区相对名」的目录解析成宿主绝对路径(面包屑才能从工作区根往下列)。
257
+ * 优先级:① 根已缓存 ⇒ 根 + '/' + 规范相对路径(覆盖空目录 / 只有子目录);
258
+ * ② 目录里有文件子项 ⇒ stat 它反推根;③ 有界 BFS 找任一文件反推根。
259
+ * 全部失败 ⇒ 退回入参,浏览不受影响。
260
+ */
261
+ export async function absolutizeDir(cache, workspaceFiles, sessionId, dir, canonical, entries) {
262
+ if (isAbsoluteish(dir))
263
+ return dir;
264
+ const rel = canonical !== '' ? canonical : dir;
265
+ const cached = cache.get(sessionId);
266
+ if (cached !== undefined)
267
+ return `${cached}/${rel}`;
268
+ const stat = workspaceFiles.stat;
269
+ if (stat === undefined)
270
+ return dir;
271
+ // ② 本目录里的文件子项
272
+ const file = entries.find((entry) => entry.type === 'file');
273
+ if (file !== undefined) {
274
+ try {
275
+ const sub = relJoin(rel, file.name);
276
+ const abs = absolutePathOf(await stat(sessionId, sub));
277
+ if (abs?.endsWith(`/${file.name}`) === true && learnRoot(cache, sessionId, sub, abs) !== null) {
278
+ return abs.slice(0, abs.length - file.name.length - 1);
279
+ }
280
+ }
281
+ catch {
282
+ /* 落到 ③ */
283
+ }
284
+ }
285
+ // ③ 有界 BFS 找一个文件反推根
286
+ const found = await findAnyFileAbs(workspaceFiles, sessionId, rel);
287
+ if (found === null)
288
+ return dir;
289
+ const root = learnRoot(cache, sessionId, found.relativePath, found.absolutePath);
290
+ return root === null ? dir : `${root}/${rel}`;
291
+ }
292
+ export function matchesFilter(path, isDir, filter) {
293
+ if (filter === undefined)
294
+ return true;
295
+ if (filter.dirs === true)
296
+ return isDir;
297
+ if (filter.exts === undefined || filter.exts.length === 0)
298
+ return true;
299
+ if (isDir)
300
+ return true;
301
+ return filter.exts.includes(extOf(path));
302
+ }
303
+ // ── 面包屑 ──
304
+ /** 面包屑段:把目录路径拆成可点层级(绝对路径保留前导 /)。 */
305
+ export function crumbsOfDir(dir) {
306
+ const isAbs = isAbsoluteish(dir);
307
+ const segs = dir.split('/').filter((s) => s.length > 0);
308
+ const out = [];
309
+ let acc = '';
310
+ for (const seg of segs) {
311
+ acc = acc === '' ? (isAbs ? `/${seg}` : seg) : `${acc}/${seg}`;
312
+ out.push({ label: seg, path: acc });
313
+ }
314
+ return out;
315
+ }
316
+ /** 文件/目录的显示名(末段)。 */
317
+ export function baseNameOfPath(p) {
318
+ const i = Math.max(p.lastIndexOf('/'), p.lastIndexOf('\\'));
319
+ return i < 0 ? p : p.slice(i + 1);
320
+ }
321
+ /** 父目录(无父 = 空串)。 */
322
+ export function dirnameOf(p) {
323
+ return parentOf(p);
324
+ }
325
+ /** 路径拼接(处理根与绝对/相对;沿用 utils/path 的 joinPath 语义)。 */
326
+ export { joinPath } from '../utils/path.js';
327
+ /** mimeOf 再导出(预览体要用,避免各自 import utils)。 */
328
+ export { extOf, mimeOf };
329
+ /**
330
+ * 从宿主工作区清单里挑一个**真实浏览锚点**:最近更新过、且有会话的工作区。
331
+ *
332
+ * `workspaceFiles` 是会话作用域服务(list/read 都要 sessionId),所以「打开文件夹」必须先
333
+ * 落到一个真会话上 —— 这里是它的唯一落点。
334
+ *
335
+ * @param items 宿主工作区清单(真实快照)。
336
+ * @returns 锚点;清单为空 / 都没有会话则返回 null。
337
+ */
338
+ export function pickWorkspaceAnchor(items) {
339
+ let best = null;
340
+ let bestAt = Number.NEGATIVE_INFINITY;
341
+ for (const item of items) {
342
+ const sessionId = item.sessionIds?.[item.sessionIds.length - 1];
343
+ if (typeof item.title !== 'string' || item.title === '' || typeof sessionId !== 'string' || sessionId === '')
344
+ continue;
345
+ const at = typeof item.updatedAt === 'number' && Number.isFinite(item.updatedAt) ? item.updatedAt : Number.NEGATIVE_INFINITY;
346
+ // 等号不覆盖 ⇒ 时间戳相同(含都缺失)时保留靠前的那个。
347
+ if (best !== null && at <= bestAt)
348
+ continue;
349
+ best = { title: item.title, sessionId };
350
+ bestAt = at;
351
+ }
352
+ return best;
353
+ }
354
+ /**
355
+ * 按**工作区 title** 取浏览锚点会话(`workspaceAnchors` 里该 title 最近一个会话)。
356
+ *
357
+ * 与 `workspaceAnchorForPath`(按路径匹配)互补:调用方有 title 归属信息时用这个
358
+ * (兄弟项目 `GET /options` 的 `Record<title, 会话id>` 同口径,无歧义);
359
+ * 只有裸绝对路径时才走路径匹配。没有该 title / 没有会话 ⇒ null。
360
+ */
361
+ export function anchorSessionForTitle(items, title) {
362
+ if (title === '')
363
+ return null;
364
+ const item = items.find((it) => it.title === title);
365
+ const sessionId = item?.sessionIds?.[item.sessionIds.length - 1];
366
+ return typeof sessionId === 'string' && sessionId !== '' ? sessionId : null;
367
+ }
368
+ /**
369
+ * 目标**绝对路径**落在哪个工作区 ⇒ 该工作区最近一个会话 id(list 的 sessionId)。
370
+ *
371
+ * 为什么需要:`workspaceFiles.list` 是会话作用域服务(按 sessionId 解析工作区根,目录 confinement
372
+ * 检查 `contains(root, target)`,官方 `lib/index.js:576-583`)。调用方只甩一个绝对路径进来时,
373
+ * 默认 sessionId 的工作区根未必含它 ⇒ 官方报 `outside-workspace` ⇒ 面板整条退化成只读。
374
+ * 这里把「路径 → 工作区 → 会话」的解析收敛到核心,调用方只需把宿主工作区清单(带 path)传进来。
375
+ *
376
+ * 口径:**最长前缀**赢(嵌套工作区取最具体的);尾斜杠归一;字面大小写(宿主 path 与调用方
377
+ * 路径同源,不做大小写折叠——Windows 跨形态比较是调用方归一的责任)。
378
+ * shortcut: 只解一次(入口 path),不跟踪 dir 切换;跨工作区跳转由调用方经 onSelectWorkspace 处理。
379
+ *
380
+ * @returns 锚点;无 path 字段 / 都不匹配 / 命中工作区没有会话 ⇒ null(调用方回落默认 sessionId)。
381
+ */
382
+ export function workspaceAnchorForPath(path, items) {
383
+ if (!isAbsoluteish(path) || path === '')
384
+ return null;
385
+ const norm = (p) => p.replace(/\/+$/, '');
386
+ const target = norm(path);
387
+ let best = null;
388
+ let bestLen = -1;
389
+ for (const item of items) {
390
+ if (typeof item.path !== 'string' || item.path === '')
391
+ continue;
392
+ const root = norm(item.path);
393
+ if (root === '' || !(target === root || target.startsWith(`${root}/`)))
394
+ continue;
395
+ if (root.length > bestLen) {
396
+ best = item;
397
+ bestLen = root.length;
398
+ }
399
+ }
400
+ if (best === null)
401
+ return null;
402
+ const sessionId = best.sessionIds?.[best.sessionIds.length - 1];
403
+ if (typeof sessionId !== 'string' || sessionId === '')
404
+ return null;
405
+ return { title: best.title, sessionId };
19
406
  }
20
407
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/explorer/types.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,EAAE;AACF,gDAAgD;AAChD,4DAA4D;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AA0DhD,mDAAmD;AACnD,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,OAAO,CAAA;IAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,MAAM,CAAA;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;QAC3E,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;QACjF,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;KAC1C,CAAC,CAAA;IACF,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAA;AACnD,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/explorer/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * 宿主侧数据面:把「供应商 → 模型」目录挂成一条只读 HTTP 路由,供 client 侧自取。
3
+ *
4
+ * 为什么必须走宿主侧(2026-10-20 真机定位):client 的 `remote.llm` 命名空间只有
5
+ * `listProviders` / `listConfigurableProviders`,**没有每个 provider 的模型列表**;
6
+ * 模型只能宿主侧 `llm.listModels(providerId)` 取(兄弟仓 dsh-task-dispatch-table
7
+ * `src/dispatch.ts:81-88` 同口径)。之前照抄「读设置镜像 profile.models」的路子在
8
+ * demo 里读不出任何供应商,已废弃。
9
+ *
10
+ * ⚠️ 本文件是 Node 侧入口:**不得** import React / DOM。零 `@deepseek-ai/*` 运行时依赖,
11
+ * 宿主面一律结构化声明(同兄弟仓红线)。
12
+ */
13
+ /** 宿主 `llm` 服务的最小面(0.1.x 实测形状)。 */
14
+ export interface HostLlmLike {
15
+ /** 已注册 provider,按注册序(同步)。 */
16
+ listProviders: () => readonly {
17
+ id: string;
18
+ name: string;
19
+ }[];
20
+ /** 某 provider 可发现的模型,按适配器偏好序(异步)。 */
21
+ listModels: (provider: string) => Promise<readonly {
22
+ id: string;
23
+ name?: string;
24
+ }[]>;
25
+ }
26
+ /** 宿主 `webServer` 服务的最小面(WebRoute 形状)。 */
27
+ export interface HostWebServerLike {
28
+ register: (route: {
29
+ kind: 'exact' | 'prefix';
30
+ path: string;
31
+ handler: (req: {
32
+ url?: string;
33
+ }, res: {
34
+ writeHead: (status: number, headers: Record<string, string>) => void;
35
+ end: (body: string) => void;
36
+ }) => void | Promise<void>;
37
+ }) => unknown;
38
+ }
39
+ /** 插件宿主 ctx 的最小面。 */
40
+ export interface HostContextLike {
41
+ inject: (deps: string[], cb: (services: Record<string, unknown>) => void) => void;
42
+ }
43
+ /** 一条路由:一个供应商 + 它的模型。 */
44
+ export interface ModelRouteData {
45
+ provider: string;
46
+ displayName: string;
47
+ models: {
48
+ id: string;
49
+ name?: string;
50
+ }[];
51
+ }
52
+ /**
53
+ * 现查一遍「供应商 → 模型」目录(单个 provider 列不出来就跳过它,不影响其它家)。
54
+ * 导出是为了单测与「不用 HTTP 也要这份数据」的宿主场景。
55
+ */
56
+ export declare function buildModelRoutes(llm: HostLlmLike): Promise<ModelRouteData[]>;
57
+ /**
58
+ * 注册模型目录路由(插件宿主 `apply` 里调一次)。
59
+ *
60
+ * @param ctx 插件宿主 ctx(`llm` / `webServer` 两条注入线,缺任一条就不注册)。
61
+ * @param options.path 路由路径,客户端要用**同一个常量**去 fetch(如 `/api/x/models`)。
62
+ */
63
+ export declare function serveModelCatalog(ctx: HostContextLike, options: {
64
+ path: string;
65
+ }): void;
66
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,aAAa,EAAE,MAAM,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5D,qCAAqC;IACrC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;CACpF;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE;QAChB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;QACxB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,CAAC,GAAG,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,GAAG,EAAE;YAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;YAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;SAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KACrK,KAAK,OAAO,CAAA;CACd;AAED,qBAAqB;AACrB,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,IAAI,CAAA;CAClF;AAED,yBAAyB;AACzB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACxC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAiBlF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAevF"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 宿主侧数据面:把「供应商 → 模型」目录挂成一条只读 HTTP 路由,供 client 侧自取。
3
+ *
4
+ * 为什么必须走宿主侧(2026-10-20 真机定位):client 的 `remote.llm` 命名空间只有
5
+ * `listProviders` / `listConfigurableProviders`,**没有每个 provider 的模型列表**;
6
+ * 模型只能宿主侧 `llm.listModels(providerId)` 取(兄弟仓 dsh-task-dispatch-table
7
+ * `src/dispatch.ts:81-88` 同口径)。之前照抄「读设置镜像 profile.models」的路子在
8
+ * demo 里读不出任何供应商,已废弃。
9
+ *
10
+ * ⚠️ 本文件是 Node 侧入口:**不得** import React / DOM。零 `@deepseek-ai/*` 运行时依赖,
11
+ * 宿主面一律结构化声明(同兄弟仓红线)。
12
+ */
13
+ /**
14
+ * 现查一遍「供应商 → 模型」目录(单个 provider 列不出来就跳过它,不影响其它家)。
15
+ * 导出是为了单测与「不用 HTTP 也要这份数据」的宿主场景。
16
+ */
17
+ export async function buildModelRoutes(llm) {
18
+ const routes = [];
19
+ for (const provider of llm.listProviders()) {
20
+ try {
21
+ const models = await llm.listModels(provider.id);
22
+ if (models.length === 0)
23
+ continue;
24
+ routes.push({
25
+ provider: provider.id,
26
+ displayName: provider.name,
27
+ models: models.map((model) => (model.name === undefined ? { id: model.id } : { id: model.id, name: model.name })),
28
+ });
29
+ }
30
+ catch {
31
+ // 该 provider 列不出模型(没配 key / 端点不可达):跳过,不整表失败
32
+ }
33
+ }
34
+ routes.sort((left, right) => left.displayName.localeCompare(right.displayName));
35
+ return routes;
36
+ }
37
+ /**
38
+ * 注册模型目录路由(插件宿主 `apply` 里调一次)。
39
+ *
40
+ * @param ctx 插件宿主 ctx(`llm` / `webServer` 两条注入线,缺任一条就不注册)。
41
+ * @param options.path 路由路径,客户端要用**同一个常量**去 fetch(如 `/api/x/models`)。
42
+ */
43
+ export function serveModelCatalog(ctx, options) {
44
+ ctx.inject(['llm', 'webServer'], (services) => {
45
+ const llm = services.llm;
46
+ const webServer = services.webServer;
47
+ if (llm === undefined || webServer === undefined)
48
+ return;
49
+ webServer.register({
50
+ kind: 'exact',
51
+ path: options.path,
52
+ handler: async (_req, res) => {
53
+ const routes = await buildModelRoutes(llm);
54
+ res.writeHead(200, { 'content-type': 'application/json; charset=utf-8' });
55
+ res.end(JSON.stringify({ routes }));
56
+ },
57
+ });
58
+ });
59
+ }
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA+BH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAgB;IACrD,MAAM,MAAM,GAAqB,EAAE,CAAA;IACnC,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YAChD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAQ;YACjC,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACrB,WAAW,EAAE,QAAQ,CAAC,IAAI;gBAC1B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;aAClH,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAC/E,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAoB,EAAE,OAAyB;IAC/E,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAA8B,CAAA;QACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAA0C,CAAA;QACrE,IAAI,GAAG,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;YAAE,OAAM;QACxD,SAAS,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;gBAC3B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAA;gBAC1C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE,CAAC,CAAA;gBACzE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;YACrC,CAAC;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { createElement as h } from 'react';
2
+ import type { Translate } from '../utils/i18n.js';
3
+ import type { SessionViewTarget } from './open-session-view.js';
4
+ import { type ChangedFileReviewLocator } from './mirror/ChangedFilesCard.js';
5
+ export interface SessionViewModalProps {
6
+ t?: Translate;
7
+ /** 弹窗标题:**会话自己的标题**(宿主 sessions.list 的 displayTitle);缺省用「会话预览」。 */
8
+ heading?: string;
9
+ sessionId: string;
10
+ view: SessionViewTarget;
11
+ onClose: () => void;
12
+ /**
13
+ * 会话是否已归档(由调用方注入:官方 client 服务 `workspaces` 的快照字段 `archivedSessionIds`,
14
+ * registry-global、随 follow 流实时更新,见 docs/design/external/dsh-host.md §11)。
15
+ * 分化「继续对话」行为:已归档 = 开分支图标 + 确认框(fork 后跳官方区);
16
+ * 未归档 / 未提供 = 会话图标,点击直跳官方会话页。undefined = 调用方不知道,按未归档处理。
17
+ */
18
+ archived?: boolean;
19
+ /** fork 源会话:`sessions.fork({ sessionId, increaseTitle: true })`,解析为子会话 id。 */
20
+ forkSession?: (sessionId: string, atSeq?: number) => Promise<string>;
21
+ /** 官方导航跳转:`uiWorkspace.openSession(id)`(会话区打开目标会话)。 */
22
+ openHostSession?: (sessionId: string) => void;
23
+ /**
24
+ * 暂存输入框的「确定」:调用方完成 fork + host 侧 agent.send 起轮次 + 跳官方视图。
25
+ * 缺省 = 不渲染暂存输入框(插件未接线续聊能力时功能降级,不影响预览)。
26
+ */
27
+ onContinue?: (message: string) => Promise<void>;
28
+ /** 文件打开出口(工具卡 fileLink / md 行内 mention / 交付卡共用);缺省 = 链接降级纯文本。
29
+ * 第二个参数带「文件所属的会话 id」(本视图自己在 props.sessionId 上,自动透传),
30
+ * 消费方据此在正确的工作区会话作用域里定位文件,避免用错会话导致 not-found。 */
31
+ onOpenFile?: (path: string, sessionId: string) => void;
32
+ /** 变更文件点击出口(官方 openReview 等价):带「改动身份」(sessionId+seq+index),
33
+ * 消费方据此开审阅(本包走 openFilePreview 的 content 槽)。缺省 = 变更卡整张不可点。 */
34
+ onOpenReview?: (locator: ChangedFileReviewLocator) => void;
35
+ }
36
+ /**
37
+ * 面板内只读会话弹窗:只读、不可在框内续聊(底层 keyed 数组是只读快照,官方无写面)。
38
+ * 续聊正道 = 头部「继续对话(开分支)」/ 消息行分支 icon(fork → openSession),
39
+ * 以及底部暂存输入框(打字 → 确定 → onContinue 带话开分支并起轮次)。
40
+ */
41
+ export declare function SessionViewModal(props: SessionViewModalProps): ReturnType<typeof h>;
42
+ //# sourceMappingURL=SessionViewModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionViewModal.d.ts","sourceRoot":"","sources":["../../src/session/SessionViewModal.ts"],"names":[],"mappings":"AAUA,OAAO,EAAY,aAAa,IAAI,CAAC,EAA2E,MAAM,OAAO,CAAA;AAK7H,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAUjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAY/D,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AAunB9F,MAAM,WAAW,qBAAqB;IACpC,CAAC,CAAC,EAAE,SAAS,CAAA;IACb,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,iBAAiB,CAAA;IACvB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACpE,uDAAuD;IACvD,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C;;qDAEiD;IACjD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD;mEAC+D;IAC/D,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,CAAA;CAC3D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CA4VnF"}