@jingyi0605/codingns4dsh 0.2.1-beta.4 → 0.2.1-beta.6

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 (459) hide show
  1. package/README.en.md +134 -159
  2. package/README.md +128 -261
  3. package/assets/provider-icons/doubao.png +0 -0
  4. package/data/build/dist/client/account-bar.d.ts +1 -1
  5. package/data/build/dist/client/account-bar.d.ts.map +1 -1
  6. package/data/build/dist/client/account-bar.js +22 -14
  7. package/data/build/dist/client/account-bar.js.map +1 -1
  8. package/data/build/dist/client/adapter-catalog-watch.d.ts +8 -0
  9. package/data/build/dist/client/adapter-catalog-watch.d.ts.map +1 -0
  10. package/data/build/dist/client/adapter-catalog-watch.js +79 -0
  11. package/data/build/dist/client/adapter-catalog-watch.js.map +1 -0
  12. package/data/build/dist/client/avatar/catalog-panel.d.ts +1 -1
  13. package/data/build/dist/client/avatar/catalog-panel.d.ts.map +1 -1
  14. package/data/build/dist/client/avatar/catalog-panel.js +13 -11
  15. package/data/build/dist/client/avatar/catalog-panel.js.map +1 -1
  16. package/data/build/dist/client/avatar/engine.d.ts.map +1 -1
  17. package/data/build/dist/client/avatar/engine.js +26 -7
  18. package/data/build/dist/client/avatar/engine.js.map +1 -1
  19. package/data/build/dist/client/avatar/live2d.d.ts +2 -0
  20. package/data/build/dist/client/avatar/live2d.d.ts.map +1 -1
  21. package/data/build/dist/client/avatar/live2d.js +16 -6
  22. package/data/build/dist/client/avatar/live2d.js.map +1 -1
  23. package/data/build/dist/client/avatar/manager.d.ts.map +1 -1
  24. package/data/build/dist/client/avatar/manager.js +8 -2
  25. package/data/build/dist/client/avatar/manager.js.map +1 -1
  26. package/data/build/dist/client/avatar/slot.d.ts.map +1 -1
  27. package/data/build/dist/client/avatar/slot.js +4 -1
  28. package/data/build/dist/client/avatar/slot.js.map +1 -1
  29. package/data/build/dist/client/bundle.js +48459 -98385
  30. package/data/build/dist/client/bundle.js.map +1 -1
  31. package/data/build/dist/client/cli-catalog.d.ts +5 -0
  32. package/data/build/dist/client/cli-catalog.d.ts.map +1 -1
  33. package/data/build/dist/client/cli-catalog.js +15 -0
  34. package/data/build/dist/client/cli-catalog.js.map +1 -1
  35. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  36. package/data/build/dist/client/cli-slots.js +7 -45
  37. package/data/build/dist/client/cli-slots.js.map +1 -1
  38. package/data/build/dist/client/client.assistant-configuration-view.js +4526 -0
  39. package/data/build/dist/client/client.assistant-configuration-view.js.map +1 -0
  40. package/data/build/dist/client/client.assistant-debug-workbench.js +764 -0
  41. package/data/build/dist/client/client.assistant-debug-workbench.js.map +1 -0
  42. package/data/build/dist/client/client.assistant-prompt-editor.js +76 -0
  43. package/data/build/dist/client/client.assistant-prompt-editor.js.map +1 -0
  44. package/data/build/dist/client/client.assistant-prompts.js +44 -0
  45. package/data/build/dist/client/client.assistant-prompts.js.map +1 -0
  46. package/data/build/dist/client/client.assistant-voice-sessions.js +144 -0
  47. package/data/build/dist/client/client.assistant-voice-sessions.js.map +1 -0
  48. package/data/build/dist/client/client.assistant-workbench.js +2929 -0
  49. package/data/build/dist/client/client.assistant-workbench.js.map +1 -0
  50. package/data/build/dist/client/client.delegate-command.js +1315 -0
  51. package/data/build/dist/client/client.delegate-command.js.map +1 -0
  52. package/data/build/dist/client/client.editor-engine.js +32486 -0
  53. package/data/build/dist/client/client.editor-engine.js.map +1 -0
  54. package/data/build/dist/client/client.manager.js +3454 -0
  55. package/data/build/dist/client/client.manager.js.map +1 -0
  56. package/data/build/dist/client/client.model-catalog-cache.js +543 -0
  57. package/data/build/dist/client/client.model-catalog-cache.js.map +1 -0
  58. package/data/build/dist/client/client.native-workspace-store.js +689 -0
  59. package/data/build/dist/client/client.native-workspace-store.js.map +1 -0
  60. package/data/build/dist/client/client.primitives-adapter.js +333 -0
  61. package/data/build/dist/client/client.primitives-adapter.js.map +1 -0
  62. package/data/build/dist/client/client.react-dom.js +7286 -0
  63. package/data/build/dist/client/client.react-dom.js.map +1 -0
  64. package/data/build/dist/client/client.rolldown-runtime.js +59 -0
  65. package/data/build/dist/client/client.theme.js +386 -0
  66. package/data/build/dist/client/client.theme.js.map +1 -0
  67. package/data/build/dist/client/client.transport.js +3323 -0
  68. package/data/build/dist/client/client.transport.js.map +1 -0
  69. package/data/build/dist/client/client.xterm-engine.js +13064 -0
  70. package/data/build/dist/client/client.xterm-engine.js.map +1 -0
  71. package/data/build/dist/client/debug/ui.d.ts.map +1 -1
  72. package/data/build/dist/client/debug/ui.js +14 -5
  73. package/data/build/dist/client/debug/ui.js.map +1 -1
  74. package/data/build/dist/client/desktop-assistant.js +19 -5
  75. package/data/build/dist/client/editor-engine.d.ts +4 -0
  76. package/data/build/dist/client/editor-engine.d.ts.map +1 -0
  77. package/data/build/dist/client/editor-engine.js +50 -0
  78. package/data/build/dist/client/editor-engine.js.map +1 -0
  79. package/data/build/dist/client/engine-loader.d.ts +5 -0
  80. package/data/build/dist/client/engine-loader.d.ts.map +1 -0
  81. package/data/build/dist/client/engine-loader.js +35 -0
  82. package/data/build/dist/client/engine-loader.js.map +1 -0
  83. package/data/build/dist/client/features/assistant-configuration-loader.d.ts +14 -0
  84. package/data/build/dist/client/features/assistant-configuration-loader.d.ts.map +1 -0
  85. package/data/build/dist/client/features/assistant-configuration-loader.js +13 -0
  86. package/data/build/dist/client/features/assistant-configuration-loader.js.map +1 -0
  87. package/data/build/dist/client/features/assistant-configuration-session.d.ts.map +1 -1
  88. package/data/build/dist/client/features/assistant-configuration-session.js +13 -4
  89. package/data/build/dist/client/features/assistant-configuration-session.js.map +1 -1
  90. package/data/build/dist/client/features/assistant-configuration-view.d.ts +66 -0
  91. package/data/build/dist/client/features/assistant-configuration-view.d.ts.map +1 -0
  92. package/data/build/dist/client/features/assistant-configuration-view.js +133 -0
  93. package/data/build/dist/client/features/assistant-configuration-view.js.map +1 -0
  94. package/data/build/dist/client/features/assistant-debug-workbench.d.ts +4 -11
  95. package/data/build/dist/client/features/assistant-debug-workbench.d.ts.map +1 -1
  96. package/data/build/dist/client/features/assistant-debug-workbench.js +41 -68
  97. package/data/build/dist/client/features/assistant-debug-workbench.js.map +1 -1
  98. package/data/build/dist/client/features/assistant-display-store.d.ts +57 -0
  99. package/data/build/dist/client/features/assistant-display-store.d.ts.map +1 -0
  100. package/data/build/dist/client/features/assistant-display-store.js +189 -0
  101. package/data/build/dist/client/features/assistant-display-store.js.map +1 -0
  102. package/data/build/dist/client/features/assistant-prompt-editor.d.ts +12 -0
  103. package/data/build/dist/client/features/assistant-prompt-editor.d.ts.map +1 -0
  104. package/data/build/dist/client/features/assistant-prompt-editor.js +14 -0
  105. package/data/build/dist/client/features/assistant-prompt-editor.js.map +1 -0
  106. package/data/build/dist/client/features/assistant-view-loader.d.ts +17 -0
  107. package/data/build/dist/client/features/assistant-view-loader.d.ts.map +1 -0
  108. package/data/build/dist/client/features/assistant-view-loader.js +49 -0
  109. package/data/build/dist/client/features/assistant-view-loader.js.map +1 -0
  110. package/data/build/dist/client/features/assistant-workbench.d.ts +1 -60
  111. package/data/build/dist/client/features/assistant-workbench.d.ts.map +1 -1
  112. package/data/build/dist/client/features/assistant-workbench.js +41 -169
  113. package/data/build/dist/client/features/assistant-workbench.js.map +1 -1
  114. package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
  115. package/data/build/dist/client/features/cli-adapters.js +44 -13
  116. package/data/build/dist/client/features/cli-adapters.js.map +1 -1
  117. package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -1
  118. package/data/build/dist/client/features/global-voice-assistant.js +33 -27
  119. package/data/build/dist/client/features/global-voice-assistant.js.map +1 -1
  120. package/data/build/dist/client/features/peer-host.d.ts +2 -1
  121. package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
  122. package/data/build/dist/client/features/peer-host.js +124 -58
  123. package/data/build/dist/client/features/peer-host.js.map +1 -1
  124. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
  125. package/data/build/dist/client/features/workspace-session-enhancement.js +37 -10
  126. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
  127. package/data/build/dist/client/file-management-dom.d.ts +3 -1
  128. package/data/build/dist/client/file-management-dom.d.ts.map +1 -1
  129. package/data/build/dist/client/file-management-dom.js +85 -79
  130. package/data/build/dist/client/file-management-dom.js.map +1 -1
  131. package/data/build/dist/client/git-management.d.ts +1 -1
  132. package/data/build/dist/client/git-management.d.ts.map +1 -1
  133. package/data/build/dist/client/git-management.js +46 -27
  134. package/data/build/dist/client/git-management.js.map +1 -1
  135. package/data/build/dist/client/locale.d.ts.map +1 -1
  136. package/data/build/dist/client/locale.js +10 -0
  137. package/data/build/dist/client/locale.js.map +1 -1
  138. package/data/build/dist/client/locales/assistantAvatar.d.ts +1 -1
  139. package/data/build/dist/client/locales/assistantAvatar.js +2 -2
  140. package/data/build/dist/client/locales/assistantAvatar.js.map +1 -1
  141. package/data/build/dist/client/locales/fileWorkspace.d.ts.map +1 -1
  142. package/data/build/dist/client/locales/fileWorkspace.js +2 -0
  143. package/data/build/dist/client/locales/fileWorkspace.js.map +1 -1
  144. package/data/build/dist/client/locales/peerHost.d.ts.map +1 -1
  145. package/data/build/dist/client/locales/peerHost.js +4 -0
  146. package/data/build/dist/client/locales/peerHost.js.map +1 -1
  147. package/data/build/dist/client/locales/peerHostWorkspace.js +2 -2
  148. package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -1
  149. package/data/build/dist/client/locales/usage.d.ts.map +1 -1
  150. package/data/build/dist/client/locales/usage.js +4 -0
  151. package/data/build/dist/client/locales/usage.js.map +1 -1
  152. package/data/build/dist/client/model-catalog-cache.d.ts.map +1 -1
  153. package/data/build/dist/client/model-catalog-cache.js +9 -2
  154. package/data/build/dist/client/model-catalog-cache.js.map +1 -1
  155. package/data/build/dist/client/peer-host-management-api.d.ts +2 -2
  156. package/data/build/dist/client/peer-host-management-api.d.ts.map +1 -1
  157. package/data/build/dist/client/peer-host-management-api.js +8 -5
  158. package/data/build/dist/client/peer-host-management-api.js.map +1 -1
  159. package/data/build/dist/client/provider-icon-assets.js +5 -39
  160. package/data/build/dist/client/provider-icon-assets.js.map +1 -1
  161. package/data/build/dist/client/provider-icon-bridge.d.ts +6 -0
  162. package/data/build/dist/client/provider-icon-bridge.d.ts.map +1 -0
  163. package/data/build/dist/client/provider-icon-bridge.js +65 -0
  164. package/data/build/dist/client/provider-icon-bridge.js.map +1 -0
  165. package/data/build/dist/client/provider-icons.d.ts +1 -0
  166. package/data/build/dist/client/provider-icons.d.ts.map +1 -1
  167. package/data/build/dist/client/provider-icons.js +2 -1
  168. package/data/build/dist/client/provider-icons.js.map +1 -1
  169. package/data/build/dist/client/remote-web-context.d.ts +2 -0
  170. package/data/build/dist/client/remote-web-context.d.ts.map +1 -1
  171. package/data/build/dist/client/remote-web-context.js +50 -2
  172. package/data/build/dist/client/remote-web-context.js.map +1 -1
  173. package/data/build/dist/client/rpc-call.d.ts +4 -0
  174. package/data/build/dist/client/rpc-call.d.ts.map +1 -0
  175. package/data/build/dist/client/rpc-call.js +23 -0
  176. package/data/build/dist/client/rpc-call.js.map +1 -0
  177. package/data/build/dist/client/serial-polling.d.ts +15 -0
  178. package/data/build/dist/client/serial-polling.d.ts.map +1 -0
  179. package/data/build/dist/client/serial-polling.js +48 -0
  180. package/data/build/dist/client/serial-polling.js.map +1 -0
  181. package/data/build/dist/client/session-adapter-cache.d.ts.map +1 -1
  182. package/data/build/dist/client/session-adapter-cache.js +11 -1
  183. package/data/build/dist/client/session-adapter-cache.js.map +1 -1
  184. package/data/build/dist/client/settings-section.js +8 -2
  185. package/data/build/dist/client/settings-section.js.map +1 -1
  186. package/data/build/dist/client/sherpa-voice-adapter.d.ts.map +1 -1
  187. package/data/build/dist/client/sherpa-voice-adapter.js +8 -8
  188. package/data/build/dist/client/sherpa-voice-adapter.js.map +1 -1
  189. package/data/build/dist/client/subscription-slot.d.ts +11 -0
  190. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  191. package/data/build/dist/client/subscription-slot.js +42 -15
  192. package/data/build/dist/client/subscription-slot.js.map +1 -1
  193. package/data/build/dist/client/terminal/xterm-engine.d.ts +4 -0
  194. package/data/build/dist/client/terminal/xterm-engine.d.ts.map +1 -0
  195. package/data/build/dist/client/terminal/xterm-engine.js +5 -0
  196. package/data/build/dist/client/terminal/xterm-engine.js.map +1 -0
  197. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
  198. package/data/build/dist/client/terminal/xterm-view.js +33 -25
  199. package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
  200. package/data/build/dist/host/avatar/temporary-previews.d.ts +3 -1
  201. package/data/build/dist/host/avatar/temporary-previews.d.ts.map +1 -1
  202. package/data/build/dist/host/avatar/temporary-previews.js +7 -2
  203. package/data/build/dist/host/avatar/temporary-previews.js.map +1 -1
  204. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +1 -1
  205. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  206. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +3 -10
  207. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  208. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts.map +1 -1
  209. package/data/build/dist/host/cli-adapters/antigravity-driver.js +2 -2
  210. package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -1
  211. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts.map +1 -1
  212. package/data/build/dist/host/cli-adapters/antigravity-subscription.js +10 -10
  213. package/data/build/dist/host/cli-adapters/antigravity-subscription.js.map +1 -1
  214. package/data/build/dist/host/cli-adapters/binary-detection.d.ts +19 -0
  215. package/data/build/dist/host/cli-adapters/binary-detection.d.ts.map +1 -0
  216. package/data/build/dist/host/cli-adapters/binary-detection.js +71 -0
  217. package/data/build/dist/host/cli-adapters/binary-detection.js.map +1 -0
  218. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +2 -0
  219. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  220. package/data/build/dist/host/cli-adapters/claude-driver.js +11 -5
  221. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  222. package/data/build/dist/host/cli-adapters/claude-model-options.d.ts.map +1 -1
  223. package/data/build/dist/host/cli-adapters/claude-model-options.js +2 -1
  224. package/data/build/dist/host/cli-adapters/claude-model-options.js.map +1 -1
  225. package/data/build/dist/host/cli-adapters/claude-process.d.ts +7 -0
  226. package/data/build/dist/host/cli-adapters/claude-process.d.ts.map +1 -0
  227. package/data/build/dist/host/cli-adapters/claude-process.js +59 -0
  228. package/data/build/dist/host/cli-adapters/claude-process.js.map +1 -0
  229. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts +3 -0
  230. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -1
  231. package/data/build/dist/host/cli-adapters/codebuddy-driver.js +26 -12
  232. package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -1
  233. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts +0 -1
  234. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  235. package/data/build/dist/host/cli-adapters/command-code-driver.js +10 -32
  236. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  237. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts.map +1 -1
  238. package/data/build/dist/host/cli-adapters/cursor-driver.js +4 -3
  239. package/data/build/dist/host/cli-adapters/cursor-driver.js.map +1 -1
  240. package/data/build/dist/host/cli-adapters/delegate-dispatch.js +1 -1
  241. package/data/build/dist/host/cli-adapters/delegate-dispatch.js.map +1 -1
  242. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.d.ts +2 -0
  243. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.d.ts.map +1 -1
  244. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js +5 -0
  245. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js.map +1 -1
  246. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts.map +1 -1
  247. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js +2 -4
  248. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js.map +1 -1
  249. package/data/build/dist/host/cli-adapters/doubao-app.d.ts +27 -0
  250. package/data/build/dist/host/cli-adapters/doubao-app.d.ts.map +1 -0
  251. package/data/build/dist/host/cli-adapters/doubao-app.js +110 -0
  252. package/data/build/dist/host/cli-adapters/doubao-app.js.map +1 -0
  253. package/data/build/dist/host/cli-adapters/doubao-artifact-store.d.ts +16 -0
  254. package/data/build/dist/host/cli-adapters/doubao-artifact-store.d.ts.map +1 -0
  255. package/data/build/dist/host/cli-adapters/doubao-artifact-store.js +142 -0
  256. package/data/build/dist/host/cli-adapters/doubao-artifact-store.js.map +1 -0
  257. package/data/build/dist/host/cli-adapters/doubao-artifacts.d.ts +16 -0
  258. package/data/build/dist/host/cli-adapters/doubao-artifacts.d.ts.map +1 -0
  259. package/data/build/dist/host/cli-adapters/doubao-artifacts.js +34 -0
  260. package/data/build/dist/host/cli-adapters/doubao-artifacts.js.map +1 -0
  261. package/data/build/dist/host/cli-adapters/doubao-cdp.d.ts +49 -0
  262. package/data/build/dist/host/cli-adapters/doubao-cdp.d.ts.map +1 -0
  263. package/data/build/dist/host/cli-adapters/doubao-cdp.js +177 -0
  264. package/data/build/dist/host/cli-adapters/doubao-cdp.js.map +1 -0
  265. package/data/build/dist/host/cli-adapters/doubao-driver.d.ts +33 -0
  266. package/data/build/dist/host/cli-adapters/doubao-driver.d.ts.map +1 -0
  267. package/data/build/dist/host/cli-adapters/doubao-driver.js +291 -0
  268. package/data/build/dist/host/cli-adapters/doubao-driver.js.map +1 -0
  269. package/data/build/dist/host/cli-adapters/doubao-events.d.ts +21 -0
  270. package/data/build/dist/host/cli-adapters/doubao-events.d.ts.map +1 -0
  271. package/data/build/dist/host/cli-adapters/doubao-events.js +126 -0
  272. package/data/build/dist/host/cli-adapters/doubao-events.js.map +1 -0
  273. package/data/build/dist/host/cli-adapters/doubao-runtime.d.ts +6 -0
  274. package/data/build/dist/host/cli-adapters/doubao-runtime.d.ts.map +1 -0
  275. package/data/build/dist/host/cli-adapters/doubao-runtime.js +176 -0
  276. package/data/build/dist/host/cli-adapters/doubao-runtime.js.map +1 -0
  277. package/data/build/dist/host/cli-adapters/doubao-tools.d.ts +8 -0
  278. package/data/build/dist/host/cli-adapters/doubao-tools.d.ts.map +1 -0
  279. package/data/build/dist/host/cli-adapters/doubao-tools.js +139 -0
  280. package/data/build/dist/host/cli-adapters/doubao-tools.js.map +1 -0
  281. package/data/build/dist/host/cli-adapters/driver.d.ts +4 -3
  282. package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -1
  283. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  284. package/data/build/dist/host/cli-adapters/feature.js +30 -36
  285. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  286. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  287. package/data/build/dist/host/cli-adapters/grok-driver.js +2 -1
  288. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  289. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
  290. package/data/build/dist/host/cli-adapters/json-rpc-process.js +3 -1
  291. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
  292. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
  293. package/data/build/dist/host/cli-adapters/kimi-driver.js +4 -3
  294. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
  295. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts +2 -0
  296. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts.map +1 -1
  297. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js +11 -0
  298. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js.map +1 -1
  299. package/data/build/dist/host/cli-adapters/log-files.d.ts +3 -0
  300. package/data/build/dist/host/cli-adapters/log-files.d.ts.map +1 -0
  301. package/data/build/dist/host/cli-adapters/log-files.js +32 -0
  302. package/data/build/dist/host/cli-adapters/log-files.js.map +1 -0
  303. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +2 -0
  304. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
  305. package/data/build/dist/host/cli-adapters/model-catalog.js +10 -0
  306. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
  307. package/data/build/dist/host/cli-adapters/native-team-subagent.js +1 -1
  308. package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -1
  309. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +11 -0
  310. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  311. package/data/build/dist/host/cli-adapters/opencode-driver.js +132 -49
  312. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  313. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts +29 -0
  314. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts.map +1 -0
  315. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js +471 -0
  316. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js.map +1 -0
  317. package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
  318. package/data/build/dist/host/cli-adapters/pi-driver.js +2 -1
  319. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  320. package/data/build/dist/host/cli-adapters/process-utils.d.ts +12 -4
  321. package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -1
  322. package/data/build/dist/host/cli-adapters/process-utils.js +151 -17
  323. package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -1
  324. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts.map +1 -1
  325. package/data/build/dist/host/cli-adapters/qoder-driver.js +63 -100
  326. package/data/build/dist/host/cli-adapters/qoder-driver.js.map +1 -1
  327. package/data/build/dist/host/cli-adapters/qoder-subscription.d.ts +6 -1
  328. package/data/build/dist/host/cli-adapters/qoder-subscription.d.ts.map +1 -1
  329. package/data/build/dist/host/cli-adapters/qoder-subscription.js +37 -10
  330. package/data/build/dist/host/cli-adapters/qoder-subscription.js.map +1 -1
  331. package/data/build/dist/host/cli-adapters/registry.d.ts +13 -21
  332. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  333. package/data/build/dist/host/cli-adapters/registry.js +102 -131
  334. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  335. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts +2 -10
  336. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts.map +1 -1
  337. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js +1 -28
  338. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js.map +1 -1
  339. package/data/build/dist/host/cli-adapters/session-store.d.ts +5 -1
  340. package/data/build/dist/host/cli-adapters/session-store.d.ts.map +1 -1
  341. package/data/build/dist/host/cli-adapters/session-store.js +68 -11
  342. package/data/build/dist/host/cli-adapters/session-store.js.map +1 -1
  343. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +3 -3
  344. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  345. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +14 -38
  346. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  347. package/data/build/dist/host/cli-adapters/windows-command-environment.d.ts +12 -0
  348. package/data/build/dist/host/cli-adapters/windows-command-environment.d.ts.map +1 -0
  349. package/data/build/dist/host/cli-adapters/windows-command-environment.js +53 -0
  350. package/data/build/dist/host/cli-adapters/windows-command-environment.js.map +1 -0
  351. package/data/build/dist/host/cli-bridge/dispatch.js +1 -1
  352. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
  353. package/data/build/dist/host/debug.d.ts.map +1 -1
  354. package/data/build/dist/host/debug.js +5 -4
  355. package/data/build/dist/host/debug.js.map +1 -1
  356. package/data/build/dist/host/dsh-runtime-version.d.ts +1 -1
  357. package/data/build/dist/host/dsh-runtime-version.d.ts.map +1 -1
  358. package/data/build/dist/host/dsh-runtime-version.js +22 -17
  359. package/data/build/dist/host/dsh-runtime-version.js.map +1 -1
  360. package/data/build/dist/host/features/assistant-avatar-runtime.d.ts.map +1 -1
  361. package/data/build/dist/host/features/assistant-avatar-runtime.js +43 -19
  362. package/data/build/dist/host/features/assistant-avatar-runtime.js.map +1 -1
  363. package/data/build/dist/host/features/assistant-background.d.ts +44 -0
  364. package/data/build/dist/host/features/assistant-background.d.ts.map +1 -0
  365. package/data/build/dist/host/features/assistant-background.js +116 -0
  366. package/data/build/dist/host/features/assistant-background.js.map +1 -0
  367. package/data/build/dist/host/features/assistant-index-updates.d.ts +5 -0
  368. package/data/build/dist/host/features/assistant-index-updates.d.ts.map +1 -1
  369. package/data/build/dist/host/features/assistant-index-updates.js +29 -6
  370. package/data/build/dist/host/features/assistant-index-updates.js.map +1 -1
  371. package/data/build/dist/host/features/assistant-source-cache.d.ts +12 -0
  372. package/data/build/dist/host/features/assistant-source-cache.d.ts.map +1 -0
  373. package/data/build/dist/host/features/assistant-source-cache.js +58 -0
  374. package/data/build/dist/host/features/assistant-source-cache.js.map +1 -0
  375. package/data/build/dist/host/features/global-voice-coordinator.d.ts.map +1 -1
  376. package/data/build/dist/host/features/global-voice-coordinator.js +15 -10
  377. package/data/build/dist/host/features/global-voice-coordinator.js.map +1 -1
  378. package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -1
  379. package/data/build/dist/host/features/global-voice-rpc.js +288 -114
  380. package/data/build/dist/host/features/global-voice-rpc.js.map +1 -1
  381. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  382. package/data/build/dist/host/features/peer-host.js +61 -21
  383. package/data/build/dist/host/features/peer-host.js.map +1 -1
  384. package/data/build/dist/host/features/sherpa-voice-worker.d.ts +18 -0
  385. package/data/build/dist/host/features/sherpa-voice-worker.d.ts.map +1 -0
  386. package/data/build/dist/host/features/sherpa-voice-worker.js +40 -0
  387. package/data/build/dist/host/features/sherpa-voice-worker.js.map +1 -0
  388. package/data/build/dist/host/features/sherpa-worker-runtime.d.ts +41 -0
  389. package/data/build/dist/host/features/sherpa-worker-runtime.d.ts.map +1 -0
  390. package/data/build/dist/host/features/sherpa-worker-runtime.js +200 -0
  391. package/data/build/dist/host/features/sherpa-worker-runtime.js.map +1 -0
  392. package/data/build/dist/host/features/types.d.ts +6 -4
  393. package/data/build/dist/host/features/types.d.ts.map +1 -1
  394. package/data/build/dist/host/index.d.ts +1 -1
  395. package/data/build/dist/host/index.d.ts.map +1 -1
  396. package/data/build/dist/host/index.js +31 -21
  397. package/data/build/dist/host/index.js.map +1 -1
  398. package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -1
  399. package/data/build/dist/host/lan-access-dsh.js +5 -22
  400. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  401. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts +6 -46
  402. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts.map +1 -1
  403. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js +48 -28
  404. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js.map +1 -1
  405. package/data/build/dist/host/modules/peer-host/peer-host-diagnostics.d.ts.map +1 -1
  406. package/data/build/dist/host/modules/peer-host/peer-host-diagnostics.js +1 -0
  407. package/data/build/dist/host/modules/peer-host/peer-host-diagnostics.js.map +1 -1
  408. package/data/build/dist/host/modules/peer-host/peer-host-handshake.d.ts.map +1 -1
  409. package/data/build/dist/host/modules/peer-host/peer-host-handshake.js +4 -1
  410. package/data/build/dist/host/modules/peer-host/peer-host-handshake.js.map +1 -1
  411. package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts +7 -1
  412. package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts.map +1 -1
  413. package/data/build/dist/host/modules/peer-host/peer-host-session.js +40 -13
  414. package/data/build/dist/host/modules/peer-host/peer-host-session.js.map +1 -1
  415. package/data/build/dist/host/provider-icon-assets.d.ts +5 -0
  416. package/data/build/dist/host/provider-icon-assets.d.ts.map +1 -0
  417. package/data/build/dist/host/provider-icon-assets.js +61 -0
  418. package/data/build/dist/host/provider-icon-assets.js.map +1 -0
  419. package/data/build/dist/host/rpc.js +2 -2
  420. package/data/build/dist/host/rpc.js.map +1 -1
  421. package/data/build/dist/host/session-migration-repair.d.ts +4 -0
  422. package/data/build/dist/host/session-migration-repair.d.ts.map +1 -1
  423. package/data/build/dist/host/session-migration-repair.js +75 -2
  424. package/data/build/dist/host/session-migration-repair.js.map +1 -1
  425. package/data/build/dist/host/terminal/backends/tmux-backend.d.ts +1 -1
  426. package/data/build/dist/host/terminal/backends/tmux-backend.d.ts.map +1 -1
  427. package/data/build/dist/host/terminal/backends/tmux-backend.js +15 -14
  428. package/data/build/dist/host/terminal/backends/tmux-backend.js.map +1 -1
  429. package/data/build/dist/shared/assistant-avatar-engine.d.ts +5 -0
  430. package/data/build/dist/shared/assistant-avatar-engine.d.ts.map +1 -1
  431. package/data/build/dist/shared/assistant-avatar-engine.js +14 -0
  432. package/data/build/dist/shared/assistant-avatar-engine.js.map +1 -1
  433. package/data/build/dist/shared/contracts/cli-adapter.d.ts +6 -0
  434. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  435. package/data/build/dist/shared/contracts/errors.d.ts +1 -0
  436. package/data/build/dist/shared/contracts/errors.d.ts.map +1 -1
  437. package/data/build/dist/shared/contracts/errors.js +1 -0
  438. package/data/build/dist/shared/contracts/errors.js.map +1 -1
  439. package/data/build/dist/shared/contracts/peer-host.d.ts +1 -0
  440. package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -1
  441. package/data/build/dist/shared/contracts/peer-host.js +1 -0
  442. package/data/build/dist/shared/contracts/peer-host.js.map +1 -1
  443. package/data/build/dist/shared/contracts/version.d.ts +3 -1
  444. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  445. package/data/build/dist/shared/contracts/version.js +20 -7
  446. package/data/build/dist/shared/contracts/version.js.map +1 -1
  447. package/data/build/dist/shared/peer-host-http-routes.d.ts +62 -0
  448. package/data/build/dist/shared/peer-host-http-routes.d.ts.map +1 -0
  449. package/data/build/dist/shared/peer-host-http-routes.js +31 -0
  450. package/data/build/dist/shared/peer-host-http-routes.js.map +1 -0
  451. package/data/build/dist/shared/provider-icon-resources.d.ts +4 -0
  452. package/data/build/dist/shared/provider-icon-resources.d.ts.map +1 -0
  453. package/data/build/dist/shared/provider-icon-resources.js +24 -0
  454. package/data/build/dist/shared/provider-icon-resources.js.map +1 -0
  455. package/package.json +2 -2
  456. package/profile/README.md +2 -2
  457. package/profile/package.json +2 -2
  458. package/profile/version.json +1 -1
  459. package/version.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.delegate-command.js","names":["providerIconUrl","resolveDelegateIcon","callCliRpc","adapterCatalogWithDsh","providerIconUrl","loadModelCatalog"],"sources":["../../../../src/shared/delegation-carrier.ts","../../../../src/client/delegate-plan.ts","../../../../src/client/delegate-ui-dom.ts","../../../../src/client/delegate-command.ts"],"sourcesContent":["/**\n * 委派目标在草稿中的稳定载体。\n *\n * 载体同时保留用户可见的 `@Agent` 文本和稳定 adapterId。HTML 注释部分在\n * DSH 的富文本渲染中不可见,但仍会随普通草稿序列化,Host 提交时会完整消费。\n */\nexport interface DelegationCarrier {\n readonly version: 1 | 2\n readonly adapterId: string\n readonly label: string\n /** 用户明确选择的目标模型;v1 carrier 没有该字段。 */\n readonly modelId?: string\n}\n\nconst CARRIER_PREFIX = '<!--codingns:delegate:v1:'\nconst CARRIER_V2_PREFIX = '<!--codingns:delegate:v2:'\nconst CARRIER_V1_PATTERN = /<!--codingns:delegate:v1:([^:>]+):([^>]+)-->/gu\nconst CARRIER_V2_PATTERN = /<!--codingns:delegate:v2:([^:>]+):([^:>]+):([^>]+)-->/gu\nconst MALFORMED_CARRIER_PATTERN = /<!--codingns:delegate:[^>]*-->/gu\n\nexport interface ParsedDelegationCarriers {\n readonly carriers: readonly DelegationCarrier[]\n readonly text: string\n readonly errors: readonly string[]\n readonly found: boolean\n}\n\nexport function encodeDelegationCarrier(adapterId: string, label: string, modelId?: string): string {\n const normalizedId = adapterId.trim()\n const normalizedLabel = label.trim() || normalizedId\n const normalizedModel = modelId?.trim() || ''\n if (normalizedId === '') throw new Error('委派 carrier 的 adapterId 不能为空')\n if (normalizedModel !== '') {\n return `@${normalizedLabel}${CARRIER_V2_PREFIX}${encodeURIComponent(normalizedId)}:${encodeURIComponent(normalizedModel)}:${encodeURIComponent(normalizedLabel)}-->`\n }\n return `@${normalizedLabel}${CARRIER_PREFIX}${encodeURIComponent(normalizedId)}:${encodeURIComponent(normalizedLabel)}-->`\n}\n\nexport function insertDelegationCarrier(draft: string, adapterId: string, label: string, modelId?: string): string {\n const parsed = parseDelegationCarriers(draft)\n if (parsed.carriers.some((item) => item.adapterId === adapterId.trim())) return draft\n const carrier = encodeDelegationCarrier(adapterId, label, modelId)\n const trimmed = draft.trimEnd()\n return trimmed === '' ? carrier : `${trimmed} ${carrier}`\n}\n\n/** 解析并移除草稿中的全部委派 carrier;不依据显示名称猜测目标。 */\nexport function parseDelegationCarriers(input: string): ParsedDelegationCarriers {\n const text = typeof input === 'string' ? input : ''\n const carriers: DelegationCarrier[] = []\n const errors: string[] = []\n const ranges: Array<readonly [number, number]> = []\n let found = false\n\n for (const match of text.matchAll(CARRIER_V2_PATTERN)) {\n found = true\n const rawId = match[1] ?? ''\n const rawModel = match[2] ?? ''\n const rawLabel = match[3] ?? ''\n const index = match.index ?? -1\n if (index < 0) continue\n let adapterId = ''\n let modelId = ''\n let label = ''\n try {\n adapterId = decodeURIComponent(rawId).trim()\n modelId = decodeURIComponent(rawModel).trim()\n label = decodeURIComponent(rawLabel).trim()\n } catch {\n errors.push('DELEGATE_CARRIER_INVALID: carrier 编码损坏')\n }\n if (adapterId === '' || modelId === '' || label === '') errors.push('DELEGATE_CARRIER_INVALID: carrier 缺少目标标识')\n const mention = label === '' ? '' : `@${label}`\n const start = mention !== '' && text.slice(Math.max(0, index - mention.length), index) === mention\n ? index - mention.length\n : index\n ranges.push([start, index + match[0].length])\n if (adapterId !== '' && modelId !== '' && label !== '' && !carriers.some((item) => item.adapterId === adapterId)) {\n carriers.push({ version: 2, adapterId, label, modelId })\n }\n }\n\n for (const match of text.matchAll(CARRIER_V1_PATTERN)) {\n found = true\n const rawId = match[1] ?? ''\n const rawLabel = match[2] ?? ''\n const index = match.index ?? -1\n if (index < 0) continue\n let adapterId = ''\n let label = ''\n try {\n adapterId = decodeURIComponent(rawId).trim()\n label = decodeURIComponent(rawLabel).trim()\n } catch {\n errors.push('DELEGATE_CARRIER_INVALID: carrier 编码损坏')\n }\n if (adapterId === '' || label === '') errors.push('DELEGATE_CARRIER_INVALID: carrier 缺少目标标识')\n const mention = label === '' ? '' : `@${label}`\n const start = mention !== '' && text.slice(Math.max(0, index - mention.length), index) === mention\n ? index - mention.length\n : index\n ranges.push([start, index + match[0].length])\n if (adapterId !== '' && label !== '' && !carriers.some((item) => item.adapterId === adapterId)) {\n carriers.push({ version: 1, adapterId, label })\n }\n }\n\n for (const match of text.matchAll(MALFORMED_CARRIER_PATTERN)) {\n const index = match.index ?? -1\n if (index < 0 || /^<!--codingns:delegate:v1:[^:>]+:[^>]+-->$/u.test(match[0]) || /^<!--codingns:delegate:v2:[^:>]+:[^:>]+:[^>]+-->$/u.test(match[0])) continue\n found = true\n errors.push('DELEGATE_CARRIER_INVALID: carrier 格式不受支持')\n ranges.push([index, index + match[0].length])\n }\n\n if (ranges.length === 0) return { carriers: [], text, errors, found }\n ranges.sort((a, b) => a[0] - b[0])\n let clean = ''\n let cursor = 0\n for (const [start, end] of ranges) {\n if (start < cursor) continue\n clean += text.slice(cursor, start)\n cursor = end\n }\n clean += text.slice(cursor)\n return { carriers, text: clean.replace(/[ \\t]{2,}/gu, ' ').trim(), errors, found }\n}\n","import type { CodingNsCliAdapterDescriptor } from '../shared/contracts/cli-adapter.js'\nimport { insertDelegationCarrier } from '../shared/delegation-carrier.js'\nexport { encodeDelegationCarrier, insertDelegationCarrier, parseDelegationCarriers } from '../shared/delegation-carrier.js'\n\n/**\n * `/委派` 命令的纯逻辑层。\n *\n * 这里不导入任何 DSH Client 包,因此可以被 Node 单测直接加载;命令注册、\n * DSH 服务探测和界面文案留在 `delegate-command.ts`。\n */\n\n/** 命令名(不带前导斜杠);`/` 菜单里的稳定标识。 */\nexport const DELEGATE_COMMAND_NAME = 'delegate'\n\n/** 一个可选的外部 Agent 适配器选项(纯数据,供 popupSelect 渲染)。 */\nexport interface DelegateAdapterOption {\n readonly id: string\n readonly label: string\n readonly detail?: string\n}\n\n/** 适配器选中后展示的模型选项。 */\nexport interface DelegateModelOption {\n readonly id: string\n readonly label: string\n readonly detail?: string\n}\n\n/**\n * 把适配器目录映射为委派选项。\n *\n * 只列出已安装且已启用的 Agent。`dsh` 由 Host 作为内置适配器提供,和外部 CLI\n * 一样允许用户明确选择;未安装或已停用的适配器即使出现在目录里也会在 Host 侧拒绝。\n */\nexport function delegateAdapterOptions(\n catalog: readonly CodingNsCliAdapterDescriptor[],\n): readonly DelegateAdapterOption[] {\n const options: DelegateAdapterOption[] = []\n for (const adapter of catalog) {\n if (!adapter.installed || !adapter.enabled) continue\n const detail = adapter.version?.trim()\n options.push({\n id: adapter.id,\n label: adapter.name.trim() === '' ? adapter.id : adapter.name,\n ...(detail === undefined || detail === '' ? {} : { detail }),\n })\n }\n return options\n}\n\n/**\n * 从当前草稿里取出委派任务描述。\n *\n * 只认「委派」命令自己的两种拼写,且必须位于草稿开头:行内出现的 `/委派` 属于普通\n * 文本,而其它命令(如 `/model deepseek`)的草稿也不该被当成委派任务。当前 M1\n * 主链路由 carrier + Host rewrite 负责,函数仅保留给旧 Client 草稿兼容测试。\n */\nexport function extractDelegateTask(draft: string, adapterId?: string, adapterName?: string): string {\n const trimmed = draft.trimStart()\n const match = /^\\/(delegate|委派)\\s*([\\s\\S]*)$/u.exec(trimmed)\n if (match === null) return ''\n let rest = (match[2] ?? '').trim()\n for (const token of [adapterId, adapterName]) {\n if (token === undefined || token.trim() === '') continue\n const prefix = token.trim()\n if (rest === prefix) {\n rest = ''\n break\n }\n if (rest.startsWith(`${prefix} `)) {\n rest = rest.slice(prefix.length).trim()\n break\n }\n }\n return rest\n}\n\n/** 把选择结果追加到草稿;重复目标按 adapterId 去重。 */\nexport function appendDelegateCarrier(draft: string, adapterId: string, adapterName: string, modelId?: string): string {\n return insertDelegationCarrier(draft, adapterId, adapterName, modelId)\n}\n","/**\n * `/委派` 的界面增强(DOM 注入)。\n *\n * DSH 的 `/` 菜单把「添加」分类写死在 `sectionRows` 的名单里(file/goal/plan/feedback),\n * 客户端贡献项只能落到「指令」分类;popupSelect 的 `SelectOption` 契约也没有图标字段。\n * 这两点都无法通过公开 API 表达,因此这里按仓库既有的 DOM 注入惯例做两件事:\n *\n * 1. 把插件自己的委派行放进「添加」分类。真实行由 React 拥有,插件**只加属性隐藏它**,\n * 绝不搬动它;「添加」分类末尾放一个克隆行,交互事件转发回真实行。\n * - 不用 CSS `order` 让真实行「看起来」在添加分类里:`order` 只改视觉位置,\n * 而菜单高亮由 store 的候选顺序(等于 DOM 顺序)驱动,两者会分叉——方向键\n * 走到委派时高亮会突然跳到上面去。克隆行则让视觉与键盘顺序保持一致。\n * - 绝不移动 React 拥有的节点,否则下一次协调时 React 的 insertBefore 会抛\n * NotFoundError 打断整个菜单。\n * - 克隆行**不能继承**隐藏标记,否则真实行和克隆行都被隐藏,委派入口整个消失;\n * 隐藏规则本身也用 `:not()` 排除克隆行作为第二道保险。\n * 2. 给委派弹层里的适配器行补上 Provider 图标。\n *\n * 依赖的 DSH 0.2.0-rc.2 契约(任何一条不成立都只是不生效,不会误改宿主界面):\n * - `/` 菜单行是 `button[role=\"option\"]`,id 前缀 `dsh-slash-option-`,标题在\n * `span[class*=\"itemName\"]`;分类标题在 `div[class*=\"sectionTitle\"]`,「添加」恒为首个;\n * - 委派弹层的搜索框 placeholder 由插件自己提供,行标题在 `span[class*=\"labelText\"]`。\n */\nimport { providerIconUrl } from './provider-icons.js'\nimport type { DelegateAdapterOption } from './delegate-plan.js'\n\n/** 被打在真实委派菜单行上的隐藏标记。 */\nexport const DELEGATE_MENU_ROW_ATTRIBUTE = 'data-codingns-delegate-row'\n/** 插件在「添加」分类里创建的克隆行标记。 */\nexport const DELEGATE_MENU_PROXY_ATTRIBUTE = 'data-codingns-delegate-proxy'\n/** 插件在委派弹层适配器行前插入的图标标记。 */\nexport const DELEGATE_POPUP_LOGO_ATTRIBUTE = 'data-codingns-delegate-logo'\n/** 委派输入 chip 前插入的 Provider Logo 标记。 */\nexport const DELEGATE_CHIP_LOGO_ATTRIBUTE = 'data-codingns-delegate-chip-logo'\n/** DSH 消息时间线中由插件投影的委派 Agent chip 标记。 */\nexport const DELEGATE_TIMELINE_CHIP_ATTRIBUTE = 'data-codingns-delegate-timeline-chip'\n/** 时间线 chip 保存的原始 carrier,停用插件时用于恢复 React 之外的 DOM。 */\nexport const DELEGATE_TIMELINE_RAW_ATTRIBUTE = 'data-codingns-delegate-timeline-raw'\n/** DSH 时间线中由 Host 改写消息投影的委派任务卡片标记。 */\nexport const DELEGATE_TIMELINE_CARD_ATTRIBUTE = 'data-codingns-delegation-card'\n/** 委派卡片保存原始指令,停用插件时用于恢复 React 之外的 DOM。 */\nexport const DELEGATE_TIMELINE_CARD_RAW_ATTRIBUTE = 'data-codingns-delegation-card-raw'\n/** DSH 空状态输入提示保存原始文案的标记。 */\nexport const DELEGATE_PLACEHOLDER_BASE_ATTRIBUTE = 'data-codingns-delegate-placeholder-base'\nexport const DELEGATE_PLACEHOLDER_MARK_ATTRIBUTE = 'data-codingns-delegate-placeholder'\n/** 插件样式标签的幂等键。 */\nexport const DELEGATE_UI_STYLE_ID = 'codingns4dsh-delegate-ui-style'\n\nconst MENU_OPTION_SELECTOR = '[role=\"option\"]'\nconst MENU_LISTBOX_SELECTOR = '[role=\"listbox\"]'\nconst MENU_OPTION_ID_PREFIX = 'dsh-slash-option-'\nconst ITEM_NAME_SELECTOR = '[class*=\"itemName\"]'\nconst SECTION_TITLE_SELECTOR = '[class*=\"sectionTitle\"]'\nconst LABEL_TEXT_SELECTOR = '[class*=\"labelText\"]'\nconst DELEGATION_INSTRUCTION_MARKER = '[CodingNS 委派指令]'\n\n// 隐藏规则排除克隆行:即使克隆意外带上了标记,也不会连克隆一起隐藏。\nconst DELEGATE_UI_STYLE_TEXT = `[${DELEGATE_MENU_ROW_ATTRIBUTE}]:not([${DELEGATE_MENU_PROXY_ATTRIBUTE}]){display:none!important}`\n + `[${DELEGATE_MENU_PROXY_ATTRIBUTE}][data-active=\"true\"]{background:var(--dsw-alias-interactive-bg-hover)}`\n + `[${DELEGATE_POPUP_LOGO_ATTRIBUTE}]{width:16px;height:16px;flex:none;object-fit:contain;border-radius:3px;margin-right:2px}`\n + `[${DELEGATE_CHIP_LOGO_ATTRIBUTE}]{width:14px;height:14px;flex:none;align-self:center;object-fit:contain;border-radius:3px;margin-right:2px}`\n // ReferenceInsert 的 session 图标是通用 SVG;已有品牌 Logo 时隐藏它,避免出现双图标。\n + `[data-composer-chip=\"codingns-delegate\"]:has([${DELEGATE_CHIP_LOGO_ATTRIBUTE}]) svg{display:none!important}`\n + `[${DELEGATE_TIMELINE_CHIP_ATTRIBUTE}]{display:inline-flex;align-items:center;vertical-align:baseline;gap:3px;padding:0 5px;border-radius:999px;background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);white-space:nowrap;font-size:.95em;line-height:1.45}`\n + `[${DELEGATE_TIMELINE_CHIP_ATTRIBUTE}] img{width:14px;height:14px;flex:none;object-fit:contain;border-radius:3px}`\n + `[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}]{box-sizing:border-box;display:flex;flex-direction:column;align-self:stretch;width:100%;max-width:100%;min-width:0;gap:8px;margin:2px 0;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2,rgba(127,127,127,.2));border-radius:10px;background:var(--dsw-alias-bg-layer-2,rgba(127,127,127,.06));line-height:1.5;overflow-wrap:anywhere}`\n + `[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}] [data-codingns-delegation-card-title]{display:flex;align-items:center;min-width:0;gap:6px;font-weight:600;overflow-wrap:anywhere}`\n + `[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}] [data-codingns-delegation-card-targets]{display:flex;flex-wrap:wrap;min-width:0;width:100%;max-width:100%;gap:5px}`\n + `[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}] [data-codingns-delegation-card-target]{box-sizing:border-box;display:inline-flex;align-items:center;flex:0 1 auto;min-width:0;max-width:100%;gap:3px;padding:1px 7px;border-radius:999px;background:var(--dsw-alias-interactive-bg-hover);font-size:.9em;white-space:normal;overflow-wrap:anywhere;word-break:break-word}`\n + `[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}] [data-codingns-delegation-card-target] img{flex:0 0 auto;width:14px;height:14px;object-fit:contain;border-radius:3px}`\n + `[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}] [data-codingns-delegation-card-target] span{min-width:0;overflow-wrap:anywhere;word-break:break-word}`\n + `[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}] [data-codingns-delegation-card-task]{box-sizing:border-box;width:100%;max-width:100%;min-width:0;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}`\n + `[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}] [data-codingns-delegation-card-status]{min-width:0;color:var(--dsw-alias-label-secondary,GrayText);font-size:.88em;overflow-wrap:anywhere;word-break:break-word}`\n + `@media (max-width:768px){[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}]{gap:6px;margin:2px 0;padding:8px 10px;border-radius:8px;font-size:.95em}[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}] [data-codingns-delegation-card-targets]{gap:4px}[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}] [data-codingns-delegation-card-target]{padding:2px 6px;font-size:.88em}}`\n\n/** 克隆行 → 真实行;真实行被 React 重建时据此判定需要重建克隆。 */\nconst proxySources = new WeakMap<Element, Element>()\n\nlet popupOptions: readonly DelegateAdapterOption[] = []\nlet requestRefresh: (() => void) | undefined\n\n/**\n * 登记当前委派弹层的适配器选项。\n *\n * `/委派` 的 `options()` 每次加载后调用;图标注入据此把行标题反查回适配器 id。\n * 行标题就是适配器显示名,因此这张表同时充当标题到 id 的映射。\n */\nexport function setDelegatePopupOptions(options: readonly DelegateAdapterOption[]): void {\n popupOptions = options\n requestRefresh?.()\n}\n\nexport interface DelegateUiDomController {\n /** 显式触发一次重扫(选项加载完成、菜单重新打开等)。 */\n refresh(): void\n /** 断开观察器并移除插件节点。 */\n dispose(): void\n}\n\nexport interface DelegateUiDomOptions {\n readonly document?: Document\n readonly MutationObserver?: typeof MutationObserver\n /** 委派命令行的本地化标题;用于在 `/` 菜单里定位插件自己的行。 */\n readonly menuLabel: () => string\n /** 委派弹层搜索框的本地化占位符;用于识别插件自己的弹层。 */\n readonly popupPlaceholder: () => string\n /** 适配器图标地址;缺省读取插件 Provider 图标表。 */\n readonly iconUrlForAdapter?: (adapterId: string) => string | undefined\n /** 时间线卡片标题;未提供时使用英文兼容回退。 */\n readonly cardTitle?: () => string\n /** 时间线卡片状态;未提供时使用英文兼容回退。 */\n readonly cardStatus?: () => string\n /** 时间线卡片目标标签;未提供时使用英文兼容回退。 */\n readonly cardTarget?: (value: { readonly label: string; readonly adapterId: string; readonly modelId?: string }) => string\n /** 对话输入框统一占位文本;未提供时不改写原生提示。 */\n readonly composerPlaceholder?: () => string\n}\n\n/**\n * 安装 `/委派` 的界面增强。\n *\n * @param options - 注入点(document/观察器/本地化文案/图标表),便于单测替换。\n * @returns 控制器;`document` 缺失时退化为空操作。\n */\nexport function startDelegateUiDom(options: DelegateUiDomOptions): DelegateUiDomController {\n const dom = options.document ?? (typeof document === 'undefined' ? undefined : document)\n const Observer = options.MutationObserver\n ?? (typeof MutationObserver === 'undefined' ? undefined : MutationObserver)\n const iconUrl = options.iconUrlForAdapter ?? providerIconUrl\n let disposed = false\n let scanQueued = false\n let observer: MutationObserver | undefined\n\n const observe = (): void => {\n if (disposed || dom === undefined || observer === undefined) return\n observer.observe(dom.documentElement, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['aria-selected'],\n })\n }\n\n const runScan = (): void => {\n if (disposed || dom === undefined) return\n // 菜单只在存在 listbox 时扫描;输入 chip 则始终检查,因为它可能在菜单关闭后\n // 才完成 Decorator 渲染。观察器挂在 documentElement 且带 subtree,扫描必须保持幂等。\n const listboxes = [...dom.querySelectorAll(MENU_LISTBOX_SELECTOR)]\n if (listboxes.length > 0) {\n relocateMenuRow(listboxes, options.menuLabel())\n decoratePopupRows(listboxes, options.popupPlaceholder(), iconUrl)\n }\n decorateReferenceChips(dom, iconUrl)\n decorateTimelineMessages(dom, iconUrl, options)\n decorateComposerPlaceholders(dom, options.composerPlaceholder)\n }\n\n const scan = (): void => {\n if (disposed || dom === undefined) return\n // 本函数会写克隆行的 aria-selected(把真实行高亮镜像到「添加」分类),而观察器\n // 恰好盯这个属性:不摘掉观察器就会「写属性 → 触发观察器 → 再扫 → 再写」无限\n // 循环,鼠标移到菜单(首次出现 aria-selected=\"true\")时页面直接卡死。断开观察器\n // 还会丢弃已入队的记录,因此本次扫描自身的改动不会再触发自己。\n observer?.disconnect()\n try {\n runScan()\n } finally {\n observe()\n }\n }\n\n const scheduleScan = (): void => {\n if (disposed || scanQueued) return\n scanQueued = true\n queueMicrotask(() => {\n scanQueued = false\n scan()\n })\n }\n requestRefresh = scheduleScan\n\n if (dom !== undefined) installDelegateUiStyles(dom)\n // 菜单行只在悬停/方向键变化时改写 aria-selected(结构不变),因此必须观察属性才能\n // 把高亮同步到克隆行;扫描期间的自我触发由 scan() 里的断开-重连兜住。\n observer = dom === undefined || Observer === undefined ? undefined : new Observer(scheduleScan)\n observe()\n scan()\n\n return {\n refresh: scheduleScan,\n dispose() {\n if (disposed) return\n disposed = true\n observer?.disconnect()\n if (requestRefresh === scheduleScan) requestRefresh = undefined\n if (dom !== undefined) removeDelegateNodes(dom)\n },\n }\n}\n\n/** 把插件自己的 `/` 菜单行搬进「添加」分类。 */\nfunction relocateMenuRow(listboxes: readonly Element[], label: string): void {\n const listbox = findSlashMenuListbox(listboxes)\n if (listbox === undefined) return\n const row = findMenuRow(listbox, label)\n const section = findAddSectionTitle(listbox)\n // 只有「能造出克隆行」时才隐藏真实行:用户一旦在 `/` 后输入过滤词,DSH 会走\n // rankByName 而不产生分类标题,此时若已经隐藏真实行,委派入口就会凭空消失。\n if (row === undefined || section === undefined) {\n removeProxies(listbox)\n if (row !== undefined) row.removeAttribute(DELEGATE_MENU_ROW_ATTRIBUTE)\n return\n }\n const existing = listbox.querySelector(`[${DELEGATE_MENU_PROXY_ATTRIBUTE}]`)\n let proxy = existing !== null && proxySources.get(existing) === row ? existing : undefined\n if (proxy === undefined) {\n existing?.remove()\n proxy = buildProxyRow(row)\n insertAfterSectionOptions(section, proxy)\n proxySources.set(proxy, row)\n }\n // 克隆行没挂进文档就撤回隐藏,宁可留在原分类,也不能让委派入口两边都看不见。\n if (proxy.parentNode === null) row.removeAttribute(DELEGATE_MENU_ROW_ATTRIBUTE)\n else row.setAttribute(DELEGATE_MENU_ROW_ATTRIBUTE, '')\n syncProxyActive(row, proxy)\n}\n\n/** 克隆真实行:视觉、图标与文案与原生行完全一致,交互转发回真实行。 */\nfunction buildProxyRow(row: Element): Element {\n const proxy = row.cloneNode(true) as Element\n // 克隆会把「隐藏真实行」的标记一起复制过来。不清掉的话克隆行会被插件自己的样式\n // 隐藏,于是真实行隐藏、克隆行也隐藏,委派入口整个从菜单里消失。\n proxy.removeAttribute(DELEGATE_MENU_ROW_ATTRIBUTE)\n proxy.removeAttribute('id')\n proxy.removeAttribute('aria-selected')\n // 克隆瞬间若真实行正被高亮,会把高亮类一起复制过来,导致克隆行永久高亮;\n // 高亮一律改由 data-active 驱动。\n stripActiveClass(proxy)\n proxy.setAttribute(DELEGATE_MENU_PROXY_ATTRIBUTE, '')\n proxy.setAttribute('data-active', 'false')\n // MenuView 用 onMouseMove 维护高亮、onMouseDown 触发选择,克隆行必须转发两者,\n // 否则「看得见的高亮」与「真正被选中的行」会分叉。\n forwardEvent(proxy, row, 'mousemove')\n forwardEvent(proxy, row, 'mousedown')\n proxy.addEventListener('click', (event: Event) => {\n event.preventDefault()\n event.stopPropagation()\n })\n return proxy\n}\n\nfunction forwardEvent(proxy: Element, target: Element, type: string): void {\n proxy.addEventListener(type, (event: Event) => {\n event.preventDefault()\n dispatchLike(target, type)\n })\n}\n\n/** 在真实行上派发一次可冒泡事件,让 React 的合成事件把它当成真实交互。 */\nfunction dispatchLike(target: Element, type: string): void {\n const view = (target.ownerDocument as (Document & { defaultView?: Window | null }) | null | undefined)?.defaultView\n const MouseEventCtor = view?.MouseEvent ?? (typeof MouseEvent === 'undefined' ? undefined : MouseEvent)\n const event = MouseEventCtor === undefined\n ? new Event(type, { bubbles: true, cancelable: true })\n : new MouseEventCtor(type, { bubbles: true, cancelable: true })\n target.dispatchEvent(event)\n}\n\n/**\n * 去掉克隆行上的原生高亮类。\n *\n * 类名带 CSS Modules 哈希(如 `_3e4SsG_active`),不能硬编码;这里按「最后一个下划线\n * 片段等于 active」识别,同时兼容没有哈希的 `active`。\n */\nfunction stripActiveClass(proxy: Element): void {\n const classes = proxy.getAttribute('class')\n if (classes === null || classes === '') return\n const kept = classes.split(/\\s+/u).filter((name) => name !== 'active' && !name.endsWith('_active'))\n proxy.setAttribute('class', kept.join(' '))\n}\n\n/**\n * 真实行被方向键/悬停高亮时,克隆行同步高亮。\n *\n * 每次写入前都必须先比较现值:这里的属性正是观察器盯着的那个,多余的写会白白\n * 触发一轮重扫(真正的死循环由 scan() 的断开-重连兜住,这里只减少无谓触发)。\n */\nfunction syncProxyActive(row: Element, proxy: Element): void {\n const active = row.getAttribute('aria-selected') === 'true'\n const next = String(active)\n if (proxy.getAttribute('data-active') !== next) proxy.setAttribute('data-active', next)\n const current = proxy.getAttribute('aria-selected')\n if (active) {\n if (current !== 'true') proxy.setAttribute('aria-selected', 'true')\n // 方向键移动时菜单会把真实行滚进视野,但用户看到的是克隆行,必须一并滚动。\n proxy.scrollIntoView?.({ block: 'nearest' })\n } else if (current !== null) {\n proxy.removeAttribute('aria-selected')\n }\n}\n\nfunction findSlashMenuListbox(listboxes: readonly Element[]): Element | undefined {\n for (const listbox of listboxes) {\n if (listbox.querySelector(`[id^=\"${MENU_OPTION_ID_PREFIX}\"]`) !== null) return listbox\n }\n return undefined\n}\n\n/**\n * 定位插件自己的菜单行。\n *\n * 必须跳过克隆行:它与真实行同名,先命中克隆行会让后续判定全部错位。\n */\nfunction findMenuRow(listbox: Element, label: string): Element | undefined {\n for (const row of listbox.querySelectorAll(MENU_OPTION_SELECTOR)) {\n if (row.hasAttribute(DELEGATE_MENU_PROXY_ATTRIBUTE)) continue\n if (row.getAttribute('id')?.startsWith(MENU_OPTION_ID_PREFIX) !== true) continue\n const name = row.querySelector(ITEM_NAME_SELECTOR)\n if (name !== null && (name.textContent ?? '').trim() === label) return row\n }\n // 类名缺失时的兜底:仍只接受插件菜单行的 id 前缀,避免命中弹层里的同名行。\n for (const row of listbox.querySelectorAll(MENU_OPTION_SELECTOR)) {\n if (row.hasAttribute(DELEGATE_MENU_PROXY_ATTRIBUTE)) continue\n if (row.getAttribute('id')?.startsWith(MENU_OPTION_ID_PREFIX) !== true) continue\n if ((row.textContent ?? '').includes(label)) return row\n }\n return undefined\n}\n\n/**\n * 「添加」分类标题。\n *\n * DSH 的 `sectionRows` 恒把添加分类排在指令分类之前,因此首个分类标题就是它;\n * 这里不硬编码「添加」字样,避免绑定语言。\n */\nfunction findAddSectionTitle(listbox: Element): Element | undefined {\n return listbox.querySelectorAll(SECTION_TITLE_SELECTOR)[0]\n}\n\n/** 插入到该分类最后一行之后;分类为空时紧贴标题。 */\nfunction insertAfterSectionOptions(section: Element, proxy: Element): void {\n let anchor: Element = section\n let sibling = section.nextElementSibling\n while (sibling !== null && sibling.matches(MENU_OPTION_SELECTOR)) {\n anchor = sibling\n sibling = sibling.nextElementSibling\n }\n const parent = anchor.parentNode\n if (parent === null) return\n parent.insertBefore(proxy, anchor.nextSibling)\n}\n\n/** 给委派弹层里的适配器行补图标。 */\nfunction decoratePopupRows(listboxes: readonly Element[], placeholder: string, iconUrl: (adapterId: string) => string | undefined): void {\n const listbox = findDelegatePopupListbox(listboxes, placeholder)\n if (listbox === undefined) return\n for (const row of listbox.querySelectorAll(MENU_OPTION_SELECTOR)) {\n if (row.querySelector(`[${DELEGATE_POPUP_LOGO_ATTRIBUTE}]`) !== null) continue\n const adapterId = adapterIdForLabel(readPopupOptionLabel(row))\n if (adapterId === undefined) continue\n const url = iconUrl(adapterId)\n if (url === undefined) continue\n const image = listbox.ownerDocument.createElement('img')\n image.setAttribute('src', url)\n image.setAttribute('alt', '')\n image.setAttribute('aria-hidden', 'true')\n image.setAttribute(DELEGATE_POPUP_LOGO_ATTRIBUTE, adapterId)\n row.insertBefore(image, row.firstChild)\n }\n}\n\n/**\n * 给 DSH 原生 ReferenceChip 补上外部 Agent 的品牌图标。\n *\n * ReferenceInsert 的 appearance 只支持 session/file/folder,不能传入\n * Provider 资产。只扫描本插件自己的 chip,并按 chip 标题反查委派目录;\n * 目录尚未就绪时保留 DSH 的通用 session 图标,避免误标其它引用。\n */\nfunction decorateReferenceChips(dom: Document, iconUrl: (adapterId: string) => string | undefined): void {\n for (const chip of dom.querySelectorAll('[data-composer-chip=\"codingns-delegate\"]')) {\n const labelNode = chip.querySelector('[title]')\n const label = labelNode?.getAttribute('title')?.trim()\n || labelNode?.textContent?.trim()\n || chip.textContent?.trim()\n || ''\n const adapterId = adapterIdForLabel(label)\n if (adapterId === undefined) continue\n const src = iconUrl(adapterId)\n if (src === undefined || src === '') continue\n const existing = chip.querySelector(`[${DELEGATE_CHIP_LOGO_ATTRIBUTE}]`)\n if (existing !== null) {\n if (existing.getAttribute('src') !== src) existing.setAttribute('src', src)\n continue\n }\n const logo = dom.createElement('img')\n logo.setAttribute(DELEGATE_CHIP_LOGO_ATTRIBUTE, adapterId)\n logo.setAttribute('src', src)\n logo.setAttribute('alt', '')\n logo.setAttribute('aria-hidden', 'true')\n chip.insertBefore(logo, chip.firstChild)\n }\n}\n\n/**\n * 统一 DSH 新建会话和已有会话的输入框提示。\n *\n * DSH 没有公开修改内置 placeholder 的接口,因此保存原文后更新显示文本。\n * 观察器会在 React 重绘或会话切换后重新应用,确保两种会话状态始终一致。\n */\nfunction decorateComposerPlaceholders(dom: Document, textFactory?: () => string): void {\n const text = textFactory?.().trim()\n if (text === undefined || text === '') return\n for (const placeholder of dom.querySelectorAll('[data-composer-placeholder]')) {\n const base = placeholder.getAttribute(DELEGATE_PLACEHOLDER_BASE_ATTRIBUTE)\n ?? placeholder.textContent?.trim()\n ?? ''\n if (base === '') continue\n if (!placeholder.hasAttribute(DELEGATE_PLACEHOLDER_BASE_ATTRIBUTE)) {\n placeholder.setAttribute(DELEGATE_PLACEHOLDER_BASE_ATTRIBUTE, base)\n }\n placeholder.setAttribute(DELEGATE_PLACEHOLDER_MARK_ATTRIBUTE, '')\n if (placeholder.textContent !== text) placeholder.textContent = text\n }\n}\n\n/**\n * 将已经提交到 DSH 时间线的 carrier 投影为可读的 Agent chip。\n *\n * DSH 的输入 codec 只有一个序列化结果:Host 需要的 carrier;因此 durable\n * `user/message` 也会携带这段传输文本。这里仅处理 DSH 的 userRow/bubble,\n * 不触碰 assistant、代码块和普通页面文本,避免把模型内容中的 carrier 改写。\n */\nfunction decorateTimelineMessages(dom: Document, iconUrl: (adapterId: string) => string | undefined, options: DelegateUiDomOptions): void {\n const rows = [...dom.querySelectorAll('[class*=\"userRow\"]')]\n // 发送尚未落成 durable user/message 时,DSH 的队列预览只有\n // data-submission-echo + preview 类名;也要同步清理,避免用户在短暂回显阶段看到 carrier。\n for (const row of dom.querySelectorAll('[data-submission-echo]')) {\n if (!rows.includes(row)) rows.push(row)\n }\n for (const row of rows) {\n const bubble = row.querySelector('[class*=\"bubble\"]') ?? row.querySelector('[class*=\"preview\"]')\n if (bubble === null) continue\n decorateTimelineNode(bubble, dom, iconUrl, options)\n }\n}\n\nfunction decorateTimelineNode(node: Node, dom: Document, iconUrl: (adapterId: string) => string | undefined, options: DelegateUiDomOptions): void {\n if (node.nodeType === 3) {\n const value = node.nodeValue ?? ''\n if (value.includes('<!--codingns:delegate:') || value.includes(DELEGATION_INSTRUCTION_MARKER)) replaceTimelineTextNode(node, value, dom, iconUrl, options)\n return\n }\n if (node.nodeType !== 1\n || (node as Element).hasAttribute(DELEGATE_TIMELINE_CHIP_ATTRIBUTE)\n || (node as Element).hasAttribute(DELEGATE_TIMELINE_CARD_ATTRIBUTE)) return\n for (const child of [...node.childNodes]) decorateTimelineNode(child, dom, iconUrl, options)\n}\n\nconst TIMELINE_CARRIER_V1_PATTERN = /<!--codingns:delegate:v1:([^:>]+):([^>]+)-->/gu\nconst TIMELINE_CARRIER_V2_PATTERN = /<!--codingns:delegate:v2:([^:>]+):([^:>]+):([^>]+)-->/gu\n\nexport interface DelegationTimelineMention {\n readonly raw: string\n readonly adapterId: string\n readonly label: string\n readonly start: number\n readonly end: number\n}\n\nexport interface DelegationTimelineTarget {\n readonly adapterId: string\n readonly label: string\n readonly modelId?: string\n}\n\nexport interface DelegationTimelineCard {\n readonly raw: string\n readonly task: string\n readonly targets: readonly DelegationTimelineTarget[]\n}\n\nconst DELEGATION_INSTRUCTION_PATTERN = /\\[CodingNS 委派指令\\]\\s*\\n任务:([\\s\\S]*?)\\n允许使用的外部 Agent:\\s*\\n([\\s\\S]*?)(?=\\n请先根据任务语义制定简短的角色和步骤计划:|\\n然后调用已有 agent_subagent 工具执行委派。|$)/u\nconst DEFAULT_ADAPTER_MODEL_LABEL = String.fromCodePoint(0x9002, 0x914d, 0x5668, 0x9ed8, 0x8ba4)\nconst DELEGATION_TARGET_PATTERN = /^-\\s*([^\\s((]+)\\s*[((]([^,,))]+)(?:[,,]\\s*模型:([^,,))]*))?(?:[,,][^))]*)?[))]\\s*$/gmu\n\n/** 解析 Host 改写后的委派指令,提取用户真正关心的任务和目标 Agent。 */\nexport function parseDelegationTimelineCard(value: string): DelegationTimelineCard | undefined {\n const match = DELEGATION_INSTRUCTION_PATTERN.exec(value)\n if (match === null) return undefined\n // 旧版 slash 命令可能把命令本身序列化为 `/`,Host instruction 中会留下\n // `/ 任务`;它不是用户任务的一部分,必须在卡片里隐藏。\n const task = (match[1] ?? '').trim().replace(/^\\/\\s*/u, '').trim()\n if (task === '') return undefined\n const targets: DelegationTimelineTarget[] = []\n for (const target of (match[2] ?? '').matchAll(DELEGATION_TARGET_PATTERN)) {\n const adapterId = target[1]?.trim() ?? ''\n const label = target[2]?.trim() ?? ''\n const modelId = target[3]?.trim() ?? ''\n if (adapterId === '' || label === '' || targets.some((item) => item.adapterId === adapterId)) continue\n targets.push({ adapterId, label, ...(modelId !== '' && modelId !== DEFAULT_ADAPTER_MODEL_LABEL ? { modelId } : {}) })\n }\n if (targets.length === 0) return undefined\n return { raw: value, task, targets }\n}\n\n/** 解析时间线文本中的有效 carrier;无效编码原样保留,避免误删用户内容。 */\nexport function parseDelegationTimelineCarriers(value: string): readonly DelegationTimelineMention[] {\n const mentions: DelegationTimelineMention[] = []\n const collect = (pattern: RegExp, labelGroup: number): void => {\n for (const match of value.matchAll(pattern)) {\n const carrierStart = match.index ?? -1\n const carrier = match[0] ?? ''\n const adapterId = decodeCarrierPart(match[1])\n const label = decodeCarrierPart(match[labelGroup])\n if (carrierStart < 0 || carrier === '' || adapterId === undefined || label === undefined) continue\n const mention = `@${label}`\n const start = carrierStart >= mention.length && value.slice(carrierStart - mention.length, carrierStart) === mention\n ? carrierStart - mention.length\n : carrierStart\n const raw = value.slice(start, carrierStart + carrier.length)\n mentions.push({ raw, adapterId, label, start, end: start + raw.length })\n }\n }\n collect(TIMELINE_CARRIER_V1_PATTERN, 2)\n collect(TIMELINE_CARRIER_V2_PATTERN, 3)\n return mentions.sort((a, b) => a.start - b.start)\n}\n\nfunction replaceTimelineTextNode(node: Node, value: string, dom: Document, iconUrl: (adapterId: string) => string | undefined, options: DelegateUiDomOptions): void {\n const card = parseDelegationTimelineCard(value)\n if (card !== undefined && node.parentNode !== null) {\n node.parentNode.replaceChild(buildTimelineCard(dom, card, iconUrl, options.cardTitle, options.cardStatus, options.cardTarget), node)\n return\n }\n const matches = parseDelegationTimelineCarriers(value)\n if (matches.length === 0 || node.parentNode === null) return\n const fragment = dom.createDocumentFragment()\n let cursor = 0\n for (const match of matches) {\n if (match.start < cursor) continue\n if (match.start > cursor) fragment.append(dom.createTextNode(value.slice(cursor, match.start)))\n fragment.append(buildTimelineChip(dom, match.raw, match.adapterId, match.label, iconUrl(match.adapterId)))\n cursor = match.end\n }\n if (cursor === 0) return\n if (cursor < value.length) fragment.append(dom.createTextNode(value.slice(cursor)))\n node.parentNode.replaceChild(fragment, node)\n}\n\nfunction buildTimelineCard(\n dom: Document,\n card: DelegationTimelineCard,\n iconUrl: (adapterId: string) => string | undefined,\n cardTitle: () => string = () => 'Delegation task',\n cardStatus: () => string = () => 'Delegating',\n cardTarget: (value: { readonly label: string; readonly adapterId: string; readonly modelId?: string }) => string = ({ label, adapterId, modelId }) => `${label} (${adapterId}${modelId === undefined ? '' : ` · ${modelId}`})`,\n): HTMLElement {\n const root = dom.createElement('div')\n root.setAttribute(DELEGATE_TIMELINE_CARD_ATTRIBUTE, '')\n root.setAttribute(DELEGATE_TIMELINE_CARD_RAW_ATTRIBUTE, card.raw)\n\n const title = dom.createElement('div')\n title.setAttribute('data-codingns-delegation-card-title', '')\n title.textContent = cardTitle()\n\n const targets = dom.createElement('div')\n targets.setAttribute('data-codingns-delegation-card-targets', '')\n for (const target of card.targets) {\n const badge = dom.createElement('span')\n badge.setAttribute('data-codingns-delegation-card-target', target.adapterId)\n const logoUrl = iconUrl(target.adapterId)\n if (logoUrl !== undefined && logoUrl !== '') {\n const logo = dom.createElement('img')\n logo.src = logoUrl\n logo.alt = ''\n logo.setAttribute('aria-hidden', 'true')\n badge.append(logo)\n }\n const label = dom.createElement('span')\n label.textContent = cardTarget(target)\n badge.append(label)\n targets.append(badge)\n }\n\n const task = dom.createElement('div')\n task.setAttribute('data-codingns-delegation-card-task', '')\n task.textContent = card.task\n const status = dom.createElement('div')\n status.setAttribute('data-codingns-delegation-card-status', '')\n status.textContent = cardStatus()\n root.append(title, targets, task, status)\n return root\n}\n\nfunction decodeCarrierPart(value: string | undefined): string | undefined {\n if (value === undefined || value === '') return undefined\n try {\n const decoded = decodeURIComponent(value).trim()\n return decoded === '' ? undefined : decoded\n } catch {\n return undefined\n }\n}\n\nfunction buildTimelineChip(\n dom: Document,\n raw: string,\n adapterId: string,\n label: string,\n iconUrl: string | undefined,\n): HTMLElement {\n const chip = dom.createElement('span')\n chip.setAttribute(DELEGATE_TIMELINE_CHIP_ATTRIBUTE, adapterId)\n chip.setAttribute(DELEGATE_TIMELINE_RAW_ATTRIBUTE, raw)\n chip.setAttribute('title', `@${label}`)\n if (iconUrl !== undefined && iconUrl !== '') {\n const logo = dom.createElement('img')\n logo.setAttribute('src', iconUrl)\n logo.setAttribute('alt', '')\n logo.setAttribute('aria-hidden', 'true')\n chip.append(logo)\n }\n const text = dom.createElement('span')\n text.textContent = `@${label}`\n chip.append(text)\n return chip\n}\n\n/** 通过插件自己的搜索占位符识别委派弹层,避免影响其它 popupSelect 命令。 */\nfunction findDelegatePopupListbox(listboxes: readonly Element[], placeholder: string): Element | undefined {\n for (const listbox of listboxes) {\n if (listbox.querySelector(`[id^=\"${MENU_OPTION_ID_PREFIX}\"]`) !== null) continue\n const card = listbox.parentNode\n const input = card?.querySelector?.('input') ?? null\n if (input?.getAttribute('placeholder') === placeholder) return listbox\n }\n return undefined\n}\n\nfunction readPopupOptionLabel(row: Element): string {\n const text = row.querySelector(LABEL_TEXT_SELECTOR)?.textContent ?? row.textContent ?? ''\n return text.trim()\n}\n\nfunction adapterIdForLabel(label: string): string | undefined {\n if (label === '') return undefined\n return popupOptions.find((option) => option.label === label)?.id\n}\n\nfunction removeProxies(scope: Element): void {\n for (const proxy of scope.querySelectorAll(`[${DELEGATE_MENU_PROXY_ATTRIBUTE}]`)) proxy.remove()\n}\n\nfunction removeDelegateNodes(dom: Document): void {\n for (const proxy of dom.querySelectorAll(`[${DELEGATE_MENU_PROXY_ATTRIBUTE}]`)) proxy.remove()\n for (const logo of dom.querySelectorAll(`[${DELEGATE_POPUP_LOGO_ATTRIBUTE}]`)) logo.remove()\n for (const logo of dom.querySelectorAll(`[${DELEGATE_CHIP_LOGO_ATTRIBUTE}]`)) logo.remove()\n for (const chip of dom.querySelectorAll(`[${DELEGATE_TIMELINE_CHIP_ATTRIBUTE}]`)) {\n const raw = chip.getAttribute(DELEGATE_TIMELINE_RAW_ATTRIBUTE)\n const parent = chip.parentNode\n if (raw !== null && parent !== null) parent.replaceChild(dom.createTextNode(raw), chip)\n }\n for (const card of dom.querySelectorAll(`[${DELEGATE_TIMELINE_CARD_ATTRIBUTE}]`)) {\n const raw = card.getAttribute(DELEGATE_TIMELINE_CARD_RAW_ATTRIBUTE)\n const parent = card.parentNode\n if (raw !== null && parent !== null) parent.replaceChild(dom.createTextNode(raw), card)\n }\n for (const placeholder of dom.querySelectorAll(`[${DELEGATE_PLACEHOLDER_MARK_ATTRIBUTE}]`)) {\n const base = placeholder.getAttribute(DELEGATE_PLACEHOLDER_BASE_ATTRIBUTE)\n if (base !== null) placeholder.textContent = base\n placeholder.removeAttribute(DELEGATE_PLACEHOLDER_BASE_ATTRIBUTE)\n placeholder.removeAttribute(DELEGATE_PLACEHOLDER_MARK_ATTRIBUTE)\n }\n for (const row of dom.querySelectorAll(`[${DELEGATE_MENU_ROW_ATTRIBUTE}]`)) row.removeAttribute(DELEGATE_MENU_ROW_ATTRIBUTE)\n // 隐藏规则是插件全局样式,停用时必须一并收回,避免残留选择器影响后续渲染。\n dom.querySelector(`style[data-plugin-css=\"${DELEGATE_UI_STYLE_ID}\"]`)?.remove()\n}\n\n/** 样式只装一次;重复安装由 data-plugin-css 幂等键挡住。 */\nfunction installDelegateUiStyles(dom: Document): void {\n if (dom.querySelector(`style[data-plugin-css=\"${DELEGATE_UI_STYLE_ID}\"]`) !== null) return\n const style = dom.createElement('style')\n style.setAttribute('data-plugin', 'codingns4dsh')\n style.setAttribute('data-plugin-css', DELEGATE_UI_STYLE_ID)\n style.textContent = DELEGATE_UI_STYLE_TEXT\n dom.head.appendChild(style)\n}\n","import type { Context } from '@deepseek-ai/cordis'\nimport type { CodingNsCliAdapterDescriptor } from '../shared/contracts/cli-adapter.js'\nimport type { CodingNsRpcClient } from './features/types.js'\nimport type { CodingNsLocale } from './locale.js'\nimport { adapterCatalogWithDsh, callCliRpc } from './cli-catalog.js'\nimport type { CodingNsCliModelCatalog } from '../shared/contracts/cli-adapter.js'\nimport { appendDelegateCarrier, DELEGATE_COMMAND_NAME, delegateAdapterOptions, type DelegateAdapterOption } from './delegate-plan.js'\nimport { DELEGATE_POPUP_LOGO_ATTRIBUTE, setDelegatePopupOptions, startDelegateUiDom } from './delegate-ui-dom.js'\nimport { providerIconUrl } from './provider-icons.js'\nimport { getModelCatalogCache, loadModelCatalog } from './model-catalog-cache.js'\nimport { resolveDelegateIcon } from '../dsh-capabilities/client/primitives-adapter.js'\nimport { debugInfo, debugWarn } from '../shared/debug.js'\nimport { encodeDelegationCarrier } from '../shared/delegation-carrier.js'\n\nconst DELEGATE_REFERENCE_SOURCE = 'codingns-delegate'\nconst delegateReferenceLabels = new Map<string, string>()\ninterface DelegateReferenceSelection {\n readonly adapterId: string\n readonly label: string\n readonly modelId?: string\n}\nconst delegateReferenceSelections = new Map<string, DelegateReferenceSelection>()\n\nfunction delegateReferenceKey(adapterId: string, modelId?: string): string {\n return modelId?.trim() ? `${adapterId}\\u0000${modelId.trim()}` : adapterId\n}\n\ninterface TokenSpan {\n readonly start: number\n readonly end: number\n readonly draftRev: number\n}\n\ninterface ReferenceInsert {\n readonly source: string\n readonly ref: string\n readonly label: string\n readonly appearance?: 'session' | 'file' | 'folder'\n readonly clipboardText: string\n}\n\ninterface InputTriggerSource {\n readonly trigger: '@'\n readonly name: string\n candidates(session: { readonly sessionId: string }, request: { readonly query: string; readonly signal: AbortSignal }): Promise<readonly { readonly name: string; readonly label: string; readonly value?: string; readonly icon?: 'session' }[]>\n onPick(pick: { readonly candidate: { readonly name: string; readonly label?: string; readonly value?: string }; readonly span: TokenSpan }): { readonly insert: ReferenceInsert }\n readonly codec: {\n clipboardText(ref: string): string\n serialize(ref: string, signal: AbortSignal): Promise<string>\n }\n}\n\ninterface InputTriggersService {\n registerSource(source: InputTriggerSource): () => void\n}\n\n/**\n * `/委派` 命令:把一个任务异步派发给所选外部 Agent,落地为 DSH 原生可续子会话。\n *\n * 该模块只依赖 DSH 的 `commandUi` 服务契约(结构类型),不把版本判断写进业务层:\n * 服务缺失时整块跳过并留诊断,不影响工具栏 Agent 选择器等既有能力。\n */\n\n/** `commandUi` 服务的最小结构;DSH 各版本只保证这几个方法存在。 */\ninterface CommandUiService {\n register(contribution: CommandContribution): () => void\n}\n\ninterface CommandContribution {\n readonly name: string\n label?(): string\n description?(): string\n readonly icon?: unknown\n available(session: { readonly sessionId: string }): boolean\n readonly ui: PopupSelectSpec\n}\n\ninterface PopupSelectSpec {\n readonly kind: 'popupSelect'\n readonly searchMode?: 'substring' | 'fuzzy-label'\n searchLabels?(): { readonly placeholder: string; readonly empty: string; readonly noResults: string }\n options(session: { readonly sessionId: string }, signal: AbortSignal): Promise<readonly SelectOption[]>\n onSelect(option: SelectOption, session: { readonly sessionId: string }): void | Promise<void>\n}\n\ninterface SelectOption {\n readonly id: string\n readonly label: string\n readonly detail?: string\n readonly badge?: string\n}\n\ninterface DelegateCapability {\n readonly supported: boolean\n readonly code: string\n readonly message: string\n}\n\n/** Client 侧可用的会话输入面;用来读取草稿并把委派任务取出来。 */\ninterface SessionInputFace {\n readonly state: { getSnapshot(): { readonly draft: string; readonly draftRev?: number; readonly phase?: string } }\n /** DSH 0.2 的输入外壳提供当前光标选择;旧版本没有该方法。 */\n caretSpan?(): { readonly start: number; readonly end: number; readonly draftRev?: number }\n insertReference?(reference: ReferenceInsert, span: TokenSpan): boolean\n setDraft?(text: string): void\n notify(level: 'info' | 'error', text: string): void\n}\n\ninterface SessionsService {\n scope(id: string): Context | undefined\n}\n\ninterface ConversationService {\n readonly input: { for(actx: Context): SessionInputFace; shell?(sessionId: string): SessionInputFace }\n}\n\nexport interface RegisterDelegateCommandOptions {\n readonly rpc: CodingNsRpcClient\n readonly locale: CodingNsLocale\n readonly dshVersion?: string\n}\n\n/**\n * 把 `/委派` 注册进 `/` 菜单。\n *\n * @param ctx - Client 根 Context;只用于解析 `commandUi` 等 DSH 服务。\n * @param options - RPC 边界与语言运行时。\n * @returns 注销函数;`commandUi` 不可用时返回空操作。\n */\nexport function registerDelegateCommand(ctx: Context, options: RegisterDelegateCommandOptions): () => void {\n const t = options.locale.bind('codingns')\n // 界面增强独立于 commandUi:DSH 的「添加」分类与弹层图标都不在公开契约里,\n // 只能靠 DOM 注入补齐(见 delegate-ui-dom.ts)。注入器对契约不成立的情况完全\n // 静默,因此即使菜单结构变化也不会影响其它功能。\n const ui = startDelegateUiDom({\n menuLabel: () => t('delegate.label'),\n popupPlaceholder: () => t('delegate.searchPlaceholder'),\n composerPlaceholder: () => t('delegate.composerPlaceholder'),\n cardTitle: () => t('delegate.cardTitle'),\n cardStatus: () => t('delegate.cardStatus'),\n cardTarget: (value) => t('delegate.cardTarget', {\n label: value.label,\n adapter: value.adapterId,\n model: value.modelId === undefined ? '' : ` · ${value.modelId}`,\n }),\n })\n // commandUi 由另一个 Client 插件提供,装配顺序不保证它已经就绪;直接同步读取会\n // 在加载晚于本模块时静默丢掉注册。Cordis 的 inject 会把回调推迟到服务可用时,\n // 因此用它拿服务,并把注册本身挂成该作用域的 effect(与 DSH 官方 /file 一致),\n // 模块停用时随 fiber 一起释放,不会在菜单里留下悬空命令。\n const fiber = ctx.inject(['commandUi'], (scope) => {\n registerDelegateCommandIn(scope, options)\n })\n return () => {\n ui.dispose()\n void fiber.dispose()\n }\n}\n\n/** 在 commandUi 就绪的作用域内注册 `/委派`;失败只降级为不注册。 */\nfunction registerDelegateCommandIn(ctx: Context, options: RegisterDelegateCommandOptions): void {\n const commandUi = readCommandUi(ctx)\n if (commandUi === undefined) {\n debugWarn('codingns4dsh: /委派 未注册,当前 DSH 未提供 commandUi 服务')\n return\n }\n const t = options.locale.bind('codingns')\n try {\n registerDelegateReferenceSource(ctx, options)\n // 注册必须由本作用域的 effect 持有:commandUi.register 的 disposer 只在显式\n // 调用时才移除命令,effect 保证停用时一定会调用它。\n ctx.effect(() => commandUi.register({\n name: DELEGATE_COMMAND_NAME,\n label: () => t('delegate.label'),\n description: () => t('delegate.description'),\n icon: resolveDelegateIcon(),\n // 会话本身永远可用;真正的门槛是 Host 侧的可续子代理能力,由选项加载给出可读诊断。\n available: () => true,\n ui: {\n kind: 'popupSelect',\n searchMode: 'fuzzy-label',\n searchLabels: () => ({\n placeholder: t('delegate.searchPlaceholder'),\n empty: t('delegate.searchEmpty'),\n noResults: t('delegate.searchNoResults'),\n }),\n async options(session) {\n const capability = await callCliRpc<DelegateCapability>(options.rpc, 'delegate/capability', { sessionId: session.sessionId })\n if (!capability.supported) throw new Error(capability.message)\n const catalog = await callCliRpc<readonly CodingNsCliAdapterDescriptor[]>(options.rpc, 'catalog', { sessionId: session.sessionId })\n const list = delegateAdapterOptions(adapterCatalogWithDsh(catalog, options.dshVersion))\n // 登记给 DOM 增强器,供弹层按标题反查适配器并插入图标。\n setDelegatePopupOptions(list)\n return list\n },\n async onSelect(option, session) {\n const input = readSessionInput(ctx, session.sessionId)\n if (input === undefined) {\n return\n }\n const snapshot = input.state.getSnapshot()\n const draft = snapshot.draft ?? ''\n delegateReferenceLabels.set(option.id, option.label)\n const selection = input.caretSpan?.()\n const span = snapshot.draftRev === undefined\n ? undefined\n : delegateCommandSpan(draft, snapshot.draftRev, selection) ?? (selection === undefined ? undefined : { ...selection, draftRev: snapshot.draftRev })\n const inserted = span !== undefined && input.insertReference?.({\n source: DELEGATE_REFERENCE_SOURCE,\n ref: option.id,\n label: option.label,\n appearance: 'session',\n clipboardText: `@${option.label}`,\n }, span) === true\n if (inserted) {\n return\n }\n if (input.setDraft === undefined) {\n input?.notify('error', t('delegate.draftUnsupported'))\n return\n }\n // 旧版 DSH 没有结构化引用能力时保留 carrier 字符串回退;当前 rc.2\n // 会走上面的 ReferenceChip 路径,不会再把内部 HTML 注释直接显示出来。\n input.setDraft(appendDelegateCarrier(draft, option.id, option.label))\n },\n },\n }), 'codingns4dsh: delegate command')\n debugInfo('codingns4dsh: /委派 命令已注册')\n } catch (error) {\n // 命令名与 DSH 原生命令冲突时会 fail loud;此处降级为不注册,避免影响整个 Client。\n debugWarn('codingns4dsh: /委派 命令注册失败', { error: error instanceof Error ? error.message : String(error) })\n }\n}\n\n/**\n * 找到当前 `/委派` 命令令牌,供 popupSelect 选择结果直接替换为 chip。\n * 命令弹层的 onSelect 在消费令牌前触发,此时公开的 caretSpan 可能只是折叠光标,\n * 因而不能依赖它来推断命令范围。\n */\nfunction delegateCommandSpan(\n draft: string,\n draftRev: number,\n selection?: { readonly start: number; readonly end: number },\n): TokenSpan | undefined {\n const caret = selection?.end ?? draft.length\n const token = /\\/(?:delegate|委派)(?=\\s|$)/gu\n let match: RegExpExecArray | null\n while ((match = token.exec(draft)) !== null) {\n const start = match.index\n const end = start + match[0].length\n const before = draft[start - 1]\n // 只接受命令边界;普通文本中的同名字符串不能被误替换。\n if (start > 0 && before !== undefined && !/\\s/u.test(before)) continue\n if (caret >= start && caret <= end + 1) return { start, end, draftRev }\n // 选择菜单可能把光标留在令牌末尾之后的一个空格,仍视为当前命令。\n if (caret > end && draft.slice(end, caret).trim() === '') return { start, end, draftRev }\n }\n return undefined\n}\n\n/** 注册结构化 Agent 引用源:显示层使用 chip,提交层再序列化为 Host carrier。 */\nfunction registerDelegateReferenceSource(ctx: Context, options: RegisterDelegateCommandOptions): void {\n const inputTriggers = readService<InputTriggersService>(ctx, 'inputTriggers')\n const source: InputTriggerSource = {\n trigger: '@',\n name: DELEGATE_REFERENCE_SOURCE,\n async candidates(session, request) {\n try {\n const catalog = await callCliRpc<readonly CodingNsCliAdapterDescriptor[]>(options.rpc, 'catalog', { sessionId: session.sessionId })\n const query = request.query.trim().toLowerCase()\n const available = delegateAdapterOptions(adapterCatalogWithDsh(catalog, options.dshVersion))\n // 让输入框中的 chip 也能按同一份目录补 Provider Logo。\n setDelegatePopupOptions(available)\n return available\n .filter((option) => query === '' || option.id.toLowerCase().includes(query) || option.label.toLowerCase().includes(query))\n .map((option) => {\n delegateReferenceLabels.set(option.id, option.label)\n delegateReferenceSelections.set(option.id, { adapterId: option.id, label: option.label })\n return { name: option.id, label: option.label, value: option.id, icon: 'session' as const }\n })\n } catch {\n return []\n }\n },\n onPick(pick) {\n const ref = pick.candidate.value ?? pick.candidate.name\n const selection = delegateReferenceSelections.get(ref)\n const label = pick.candidate.label?.trim() || selection?.label || delegateReferenceLabels.get(ref) || ref\n delegateReferenceLabels.set(ref, label)\n return { insert: { source: DELEGATE_REFERENCE_SOURCE, ref, label, appearance: 'session', clipboardText: `@${label}` } }\n },\n codec: {\n clipboardText(ref) {\n return `@${delegateReferenceLabels.get(ref) || ref}`\n },\n async serialize(ref) {\n const selection = delegateReferenceSelections.get(ref)\n const adapterId = selection?.adapterId || ref.split('\\u0000', 1)[0] || ref\n const label = selection?.label || delegateReferenceLabels.get(ref) || adapterId\n return encodeDelegationCarrier(adapterId, label, selection?.modelId)\n },\n },\n }\n try {\n ctx.effect(() => {\n // 自定义 `#` 入口不依赖 inputTriggers。移动端服务装配顺序可能是\n // commandUi 先就绪、inputTriggers 后就绪;不能因为一次性探测失败而丢掉核心入口。\n const disposeHashShortcut = registerDelegateHashShortcut(ctx, options)\n const disposeSource = inputTriggers !== undefined && typeof inputTriggers.registerSource === 'function'\n ? inputTriggers.registerSource(source)\n : undefined\n return () => {\n disposeHashShortcut()\n disposeSource?.()\n }\n }, 'codingns4dsh: delegate reference source')\n } catch (error) {\n debugWarn('codingns4dsh: Agent 引用源注册失败', { error: error instanceof Error ? error.message : String(error) })\n }\n}\n\n/**\n * 为 DSH 输入框补充 `#` 委派快捷入口。\n *\n * 原生 inputTriggers 只有 `/` 与 `@` 两个触发字符,而且 onPick 是同步契约,无法在\n * 选择适配器后等待 `cli/models` 再切换二级目录。因此这里使用插件自己的轻量弹层:\n * `#` 触发适配器列表,点击适配器后立即请求它的模型目录,点击模型时才写入结构化\n * ReferenceChip。草稿里不会留下“已选择,请继续输入”的持久提示。\n */\nfunction registerDelegateHashShortcut(ctx: Context, options: RegisterDelegateCommandOptions): () => void {\n if (typeof document === 'undefined' || typeof window === 'undefined') return () => undefined\n const t = options.locale.bind('codingns')\n let popup: HTMLElement | undefined\n let popupSessionId = ''\n let popupMode: 'adapter' | 'model' = 'adapter'\n let popupAdapter: DelegateAdapterOption | undefined\n let popupOptions: readonly DelegateAdapterOption[] = []\n let popupModels: readonly { id: string; label: string; detail?: string }[] = []\n let popupEditor: HTMLElement | undefined\n let popupToken: { start: number; end: number; draftRev: number } | undefined\n let popupRequestId = 0\n let refreshTimer: ReturnType<typeof setTimeout> | undefined\n\n const cancelRefresh = (): void => {\n if (refreshTimer === undefined) return\n clearTimeout(refreshTimer)\n refreshTimer = undefined\n }\n\n const close = (): void => {\n popupRequestId += 1\n popup?.remove()\n popup = undefined\n popupEditor = undefined\n popupToken = undefined\n popupAdapter = undefined\n popupOptions = []\n popupModels = []\n popupMode = 'adapter'\n }\n\n const inputFor = (sessionId: string): SessionInputFace | undefined => {\n try {\n const conversation = readConversation(ctx)\n const actx = readSessions(ctx)?.scope(sessionId)\n if (actx !== undefined && conversation !== undefined) return conversation.input.for(actx)\n // DSH rc.2 的 InputHub 同时提供按 sessionId 解析的 shell;移动端布局或\n // 早期装配阶段可能还拿不到 retained Session scope,此路径仍能读写草稿。\n return conversation?.input.shell?.(sessionId)\n } catch {\n return undefined\n }\n }\n\n const position = (): void => {\n if (popup === undefined || popupEditor === undefined) return\n const rect = popupEditor.getBoundingClientRect()\n const viewport = window.visualViewport\n const viewportLeft = viewport?.offsetLeft ?? 0\n const viewportTop = viewport?.offsetTop ?? 0\n const viewportWidth = viewport?.width ?? window.innerWidth\n const viewportHeight = viewport?.height ?? window.innerHeight\n const popupWidth = Math.min(340, Math.max(220, rect.width))\n const gap = 6\n const minEdge = 8\n const below = rect.bottom + gap\n const above = rect.top - gap - popup.offsetHeight\n const maxTop = viewportTop + viewportHeight - minEdge - popup.offsetHeight\n // 移动端输入框通常贴在视口底部,优先向上展开,避免弹层被软键盘裁掉。\n const top = above >= viewportTop + minEdge\n ? above\n : Math.min(maxTop, Math.max(viewportTop + minEdge, below))\n const left = Math.max(viewportLeft + minEdge, Math.min(rect.left, viewportLeft + viewportWidth - popupWidth - minEdge))\n Object.assign(popup.style, {\n left: `${left}px`,\n top: `${top}px`,\n minWidth: `${popupWidth}px`,\n })\n }\n\n const ensurePopup = (editor: HTMLElement, sessionId: string): HTMLElement => {\n if (popup !== undefined && popupSessionId === sessionId) {\n popupEditor = editor\n position()\n return popup\n }\n close()\n popupSessionId = sessionId\n popupEditor = editor\n popup = document.createElement('div')\n popup.setAttribute('data-codingns-delegate-hash-popup', '')\n popup.setAttribute('role', 'listbox')\n Object.assign(popup.style, {\n position: 'fixed', zIndex: '2147483647', maxWidth: 'min(360px, calc(100vw - 16px))', maxHeight: 'min(420px, calc(100vh - 24px))', overflowY: 'auto',\n padding: '6px', border: '1px solid var(--dsw-alias-border-l2,rgba(127,127,127,.35))', borderRadius: '10px',\n background: 'var(--dsw-alias-bg-layer-3,#242526)', color: 'var(--dsw-alias-label-primary,#f5f5f5)',\n boxShadow: '0 10px 30px rgba(0,0,0,.28)', font: '13px var(--dsw-font,system-ui,sans-serif)',\n })\n document.body.append(popup)\n position()\n return popup\n }\n\n const render = (title: string, rows: readonly { id: string; label: string; detail?: string; iconId?: string; onClick: () => void }[]): void => {\n if (popup === undefined) return\n popup.replaceChildren()\n const heading = document.createElement('div')\n heading.textContent = title\n Object.assign(heading.style, { padding: '5px 8px 7px', color: 'var(--dsw-alias-label-secondary,#a9adb5)', fontSize: '12px', fontWeight: '600' })\n popup.append(heading)\n if (rows.length === 0) {\n const empty = document.createElement('div')\n empty.textContent = t('delegate.popupNoResults')\n Object.assign(empty.style, { padding: '8px', color: 'var(--dsw-alias-label-secondary,#a9adb5)' })\n popup.append(empty)\n position()\n return\n }\n for (const row of rows) {\n const button = document.createElement('button')\n button.type = 'button'\n button.setAttribute('role', 'option')\n button.dataset.value = row.id\n Object.assign(button.style, { display: 'flex', width: '100%', minWidth: '0', gap: '8px', alignItems: 'center', padding: '8px', border: '0', borderRadius: '7px', background: 'transparent', color: 'inherit', textAlign: 'left', cursor: 'pointer' })\n button.addEventListener('mouseenter', () => { button.style.background = 'var(--dsw-alias-interactive-bg-hover,rgba(127,127,127,.16))' })\n button.addEventListener('mouseleave', () => { button.style.background = 'transparent' })\n button.addEventListener('click', row.onClick)\n const iconUrl = row.iconId === undefined ? undefined : providerIconUrl(row.iconId)\n if (iconUrl !== undefined && iconUrl !== '' && row.iconId !== undefined) {\n const image = document.createElement('img')\n image.setAttribute('src', iconUrl)\n image.setAttribute('alt', '')\n image.setAttribute('aria-hidden', 'true')\n image.setAttribute(DELEGATE_POPUP_LOGO_ATTRIBUTE, row.iconId)\n Object.assign(image.style, { width: '16px', height: '16px', flex: '0 0 16px', objectFit: 'contain', borderRadius: '3px' })\n button.append(image)\n }\n const text = document.createElement('span')\n text.textContent = row.label\n Object.assign(text.style, { minWidth: '0', overflowWrap: 'anywhere', flex: '1 1 auto' })\n button.append(text)\n if (row.detail) {\n const detail = document.createElement('span')\n detail.textContent = row.detail\n Object.assign(detail.style, { flex: '0 1 auto', minWidth: '0', maxWidth: '45%', overflowWrap: 'anywhere', color: 'var(--dsw-alias-label-secondary,#a9adb5)', fontSize: '12px' })\n button.append(detail)\n }\n popup.append(button)\n }\n position()\n }\n\n const selectModel = (model: { id: string; label: string; detail?: string }): void => {\n const input = inputFor(popupSessionId)\n const token = popupToken\n const adapter = popupAdapter\n if (input === undefined || token === undefined || adapter === undefined) return\n const ref = delegateReferenceKey(adapter.id, model.id)\n delegateReferenceSelections.set(ref, { adapterId: adapter.id, label: adapter.label, modelId: model.id })\n delegateReferenceLabels.set(ref, adapter.label)\n const inserted = input.insertReference?.({ source: DELEGATE_REFERENCE_SOURCE, ref, label: adapter.label, appearance: 'session', clipboardText: `@${adapter.label}` }, token) === true\n if (!inserted) {\n const snapshot = input.state.getSnapshot()\n const draft = snapshot.draft ?? ''\n const replacement = encodeDelegationCarrier(adapter.id, adapter.label, model.id)\n input.setDraft?.(`${draft.slice(0, token.start)}${replacement}${draft.slice(token.end)}`)\n }\n close()\n }\n\n const selectAdapter = async (adapter: DelegateAdapterOption): Promise<void> => {\n // 选择适配器后进入模型目录,取消触发 `#` 时为确保快照发布而安排的旧重试,\n // 避免它把已加载的模型列表重新按旧 token 过滤为空。\n cancelRefresh()\n popupAdapter = adapter\n popupMode = 'model'\n const requestId = ++popupRequestId\n const sessionId = popupSessionId\n render(t('delegate.selectModel', { name: adapter.label }), [{ id: 'loading', label: t('delegate.loadingModels'), onClick: () => undefined }])\n try {\n const catalog = await loadModelCatalog(options.rpc, adapter.id, sessionId)\n popupModels = catalog.groups.flatMap((group) => group.models.map((model) => {\n const efforts = model.efforts.map((effort) => model.effortLabels?.[effort] ?? effort)\n const effortsLabel = efforts.length === 0 ? undefined : t('cli.thinkingLevel', { value: efforts.join(t('common.listSeparator')) })\n const details = [model.description, effortsLabel].filter((value): value is string => value !== undefined && value.trim() !== '')\n return { id: model.id, label: model.name || model.id, ...(details.length === 0 ? {} : { detail: details.join(' · ') }) }\n }))\n if (popup === undefined || popupMode !== 'model' || popupRequestId !== requestId || popupSessionId !== sessionId || popupAdapter?.id !== adapter.id) return\n render(t('delegate.selectModel', { name: adapter.label }), popupModels.map((model) => ({ ...model, onClick: () => selectModel(model) })))\n } catch (error) {\n if (popup === undefined || popupMode !== 'model' || popupRequestId !== requestId || popupSessionId !== sessionId || popupAdapter?.id !== adapter.id) return\n render(t('delegate.selectModel', { name: adapter.label }), [{ id: 'error', label: error instanceof Error ? error.message : t('delegate.modelCatalogFailed'), onClick: () => undefined }])\n }\n }\n\n const sessionIdFor = (element: Element | null): string | undefined => {\n const direct = element?.closest('[data-conversation-session]')?.getAttribute('data-conversation-session')?.trim()\n if (direct) return direct\n // 某些移动端布局把 Composer 移到 sticky 容器,编辑器与会话根不再是同一棵 DOM 子树。\n // 当前页面只有一个可见会话时,按 Composer 反查对应根节点即可继续使用 scoped input。\n const editor = element?.closest('[contenteditable=\"true\"], textarea, input, [role=\"textbox\"], [data-composer-input=\"true\"]')\n if (editor === null || editor === undefined) return undefined\n const candidates = [...document.querySelectorAll('[data-conversation-session]')]\n .filter((root) => root.querySelector('[contenteditable=\"true\"], textarea, input, [role=\"textbox\"], [data-composer-input=\"true\"]') !== null)\n return candidates.length === 1 ? candidates[0]?.getAttribute('data-conversation-session')?.trim() : undefined\n }\n\n const refresh = (target: EventTarget | null): void => {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null\n const editor = element?.closest('[contenteditable=\"true\"], textarea, input, [role=\"textbox\"], [data-composer-input=\"true\"]')\n const sessionId = sessionIdFor(element)\n if (!(editor instanceof HTMLElement) || sessionId === undefined || sessionId === '') return\n const input = inputFor(sessionId)\n if (input === undefined) return\n const snapshot = input.state.getSnapshot()\n if (snapshot.phase !== undefined && snapshot.phase !== 'plain') { close(); return }\n const snapshotDraft = snapshot.draft ?? ''\n const selection = input.caretSpan?.()\n const domCaret = editorCaretOffset(editor)\n const caret = Math.max(0, selection?.end ?? domCaret ?? snapshotDraft.length)\n // Lexical 输入更新先于 SessionInput 状态发布。若快照还没有本次输入的 `#`,\n // 使用编辑器当前文本完成识别,随后再由延迟重试同步到最新 draftRev。\n const domDraft = editorDraft(editor)\n const snapshotToken = hashTokenAtCaret(snapshotDraft, caret)\n const domToken = domDraft === undefined ? undefined : hashTokenAtCaret(domDraft, caret)\n const token = domToken ?? snapshotToken\n if (token === undefined) { close(); return }\n popupSessionId = sessionId\n popupToken = { ...token, end: caret, draftRev: selection?.draftRev ?? snapshot.draftRev ?? 0 }\n const root = ensurePopup(editor, sessionId)\n const query = token.query.trim().toLowerCase()\n if (popupMode === 'model' && popupAdapter !== undefined) {\n render(t('delegate.selectModel', { name: popupAdapter.label }), popupModels.filter((model) => query === '' || model.id.toLowerCase().includes(query) || model.label.toLowerCase().includes(query)).map((model) => ({ ...model, onClick: () => selectModel(model) })))\n return\n }\n popupMode = 'adapter'\n popupAdapter = undefined\n const requestId = ++popupRequestId\n void callCliRpc<readonly CodingNsCliAdapterDescriptor[]>(options.rpc, 'catalog', { sessionId }).then((catalog) => {\n if (popup === undefined || popupSessionId !== sessionId || popupMode !== 'adapter' || popupRequestId !== requestId) return\n popupOptions = delegateAdapterOptions(adapterCatalogWithDsh(catalog, options.dshVersion))\n setDelegatePopupOptions(popupOptions)\n const rows = popupOptions\n .filter((item) => query === '' || item.id.toLowerCase().includes(query) || item.label.toLowerCase().includes(query))\n .map((item) => {\n const row: { id: string; label: string; detail?: string; iconId?: string; onClick: () => void } = {\n id: item.id,\n label: item.label,\n iconId: item.id,\n onClick: () => { void selectAdapter(item) },\n }\n if (item.detail !== undefined) row.detail = item.detail\n return row\n })\n render(t('delegate.selectAdapter'), rows)\n }).catch(() => { if (popup === root && popupRequestId === requestId) render(t('delegate.selectAdapter'), []) })\n }\n\n const scheduleRefresh = (target: EventTarget | null): void => {\n queueMicrotask(() => refresh(target))\n cancelRefresh()\n refreshTimer = setTimeout(() => {\n refreshTimer = undefined\n refresh(target)\n }, 32)\n }\n const onInput = (event: Event): void => { scheduleRefresh(event.target) }\n const onCompositionEnd = (event: Event): void => { scheduleRefresh(event.target) }\n const onFocus = (event: FocusEvent): void => { scheduleRefresh(event.target) }\n const onKeyup = (event: KeyboardEvent): void => {\n if (event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete') scheduleRefresh(event.target)\n }\n const onPointer = (event: Event): void => {\n const target = event.target\n if (popup !== undefined && target instanceof Node && !popup.contains(target)) {\n const element = target instanceof Element ? target : target.parentElement\n if (!element?.closest('[contenteditable=\"true\"], textarea, input, [role=\"textbox\"], [data-composer-input=\"true\"]')) close()\n }\n }\n const onKey = (event: KeyboardEvent): void => { if (event.key === 'Escape') close() }\n const onResize = (): void => position()\n document.addEventListener('input', onInput, true)\n document.addEventListener('compositionend', onCompositionEnd, true)\n document.addEventListener('focusin', onFocus, true)\n document.addEventListener('keyup', onKeyup, true)\n document.addEventListener('pointerdown', onPointer, true)\n document.addEventListener('keydown', onKey, true)\n window.addEventListener('resize', onResize)\n window.visualViewport?.addEventListener('resize', onResize)\n window.visualViewport?.addEventListener('scroll', onResize)\n return () => {\n close()\n cancelRefresh()\n document.removeEventListener('input', onInput, true)\n document.removeEventListener('compositionend', onCompositionEnd, true)\n document.removeEventListener('focusin', onFocus, true)\n document.removeEventListener('keyup', onKeyup, true)\n document.removeEventListener('pointerdown', onPointer, true)\n document.removeEventListener('keydown', onKey, true)\n window.removeEventListener('resize', onResize)\n window.visualViewport?.removeEventListener('resize', onResize)\n window.visualViewport?.removeEventListener('scroll', onResize)\n }\n}\n\n/** 读取编辑器当前文本;状态快照发布前先用 DOM 文本识别本轮输入。 */\nfunction editorDraft(editor: HTMLElement): string | undefined {\n if ('value' in editor && typeof editor.value === 'string') return editor.value\n return typeof editor.textContent === 'string' ? editor.textContent : undefined\n}\n\n/** 返回光标在 contenteditable 文本投影中的偏移;无法读取时由调用方回退到 draft 末尾。 */\nfunction editorCaretOffset(editor: HTMLElement): number | undefined {\n if ('selectionStart' in editor && typeof editor.selectionStart === 'number') return editor.selectionStart\n const selection = window.getSelection()\n if (selection === null || selection.rangeCount === 0 || selection.anchorNode === null || !editor.contains(selection.anchorNode)) return undefined\n try {\n const range = selection.getRangeAt(0).cloneRange()\n range.selectNodeContents(editor)\n range.setEnd(selection.anchorNode, selection.anchorOffset)\n return range.toString().length\n } catch {\n return undefined\n }\n}\n\n/** 匹配光标前最后一个以边界开头的 `#name` token;跨空格后停止,避免误触发。 */\nfunction hashTokenAtCaret(draft: string, caret: number): { readonly start: number; readonly query: string } | undefined {\n const before = draft.slice(0, Math.max(0, caret))\n const hash = before.lastIndexOf('#')\n if (hash < 0 || /\\s/u.test(before.slice(hash + 1))) return undefined\n const previous = before[hash - 1]\n if (hash > 0 && previous !== undefined && /[\\p{L}\\p{N}_]/u.test(previous)) return undefined\n return { start: hash, query: before.slice(hash + 1) }\n}\n\nfunction readSessionInput(ctx: Context, sessionId: string): SessionInputFace | undefined {\n try {\n const actx = readSessions(ctx)?.scope(sessionId)\n if (actx === undefined) return undefined\n return readConversation(ctx)?.input.for(actx)\n } catch {\n return undefined\n }\n}\n\nfunction readCommandUi(ctx: Context): CommandUiService | undefined {\n const service = readService<CommandUiService>(ctx, 'commandUi')\n return service !== undefined && typeof service.register === 'function' ? service : undefined\n}\n\nfunction readSessions(ctx: Context): SessionsService | undefined {\n const service = readService<SessionsService>(ctx, 'sessions')\n return service !== undefined && typeof service.scope === 'function' ? service : undefined\n}\n\nfunction readConversation(ctx: Context): ConversationService | undefined {\n const service = readService<ConversationService>(ctx, 'conversation')\n return service !== undefined && typeof service.input?.for === 'function' ? service : undefined\n}\n\n/** Cordis 直接读取未声明的服务会抛 without-inject;探测统一走这里。 */\nfunction readService<T>(ctx: Context, name: string): T | undefined {\n try {\n return ctx.get(name) as T | undefined\n } catch {\n return undefined\n }\n}\n"],"mappings":"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"}