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

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 (711) hide show
  1. package/README.en.md +4 -4
  2. package/README.md +21 -5
  3. package/THIRD_PARTY_NOTICES +5 -0
  4. package/assets/provider-icons/r4.svg +4 -0
  5. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts +1 -1
  6. package/data/build/dist/bootstrap/index.d.ts +1 -1
  7. package/data/build/dist/client/assistant-settings-styles.d.ts.map +1 -1
  8. package/data/build/dist/client/assistant-settings-styles.js +3 -2
  9. package/data/build/dist/client/assistant-settings-styles.js.map +1 -1
  10. package/data/build/dist/client/avatar/catalog-panel.d.ts.map +1 -1
  11. package/data/build/dist/client/avatar/catalog-panel.js +7 -5
  12. package/data/build/dist/client/avatar/catalog-panel.js.map +1 -1
  13. package/data/build/dist/client/avatar/catalog-picker.d.ts.map +1 -1
  14. package/data/build/dist/client/avatar/catalog-picker.js +2 -1
  15. package/data/build/dist/client/avatar/catalog-picker.js.map +1 -1
  16. package/data/build/dist/client/avatar/desktop-bridge.d.ts +7 -3
  17. package/data/build/dist/client/avatar/desktop-bridge.d.ts.map +1 -1
  18. package/data/build/dist/client/avatar/desktop-bridge.js +64 -5
  19. package/data/build/dist/client/avatar/desktop-bridge.js.map +1 -1
  20. package/data/build/dist/client/avatar/desktop-view.d.ts +6 -0
  21. package/data/build/dist/client/avatar/desktop-view.d.ts.map +1 -1
  22. package/data/build/dist/client/avatar/desktop-view.js +98 -5
  23. package/data/build/dist/client/avatar/desktop-view.js.map +1 -1
  24. package/data/build/dist/client/avatar/engine.d.ts.map +1 -1
  25. package/data/build/dist/client/avatar/engine.js +3 -2
  26. package/data/build/dist/client/avatar/engine.js.map +1 -1
  27. package/data/build/dist/client/avatar/floating.d.ts +8 -3
  28. package/data/build/dist/client/avatar/floating.d.ts.map +1 -1
  29. package/data/build/dist/client/avatar/floating.js +22 -4
  30. package/data/build/dist/client/avatar/floating.js.map +1 -1
  31. package/data/build/dist/client/avatar/image.d.ts +1 -1
  32. package/data/build/dist/client/avatar/image.d.ts.map +1 -1
  33. package/data/build/dist/client/avatar/image.js +2 -2
  34. package/data/build/dist/client/avatar/image.js.map +1 -1
  35. package/data/build/dist/client/avatar/live2d.d.ts +14 -3
  36. package/data/build/dist/client/avatar/live2d.d.ts.map +1 -1
  37. package/data/build/dist/client/avatar/live2d.js +62 -9
  38. package/data/build/dist/client/avatar/live2d.js.map +1 -1
  39. package/data/build/dist/client/avatar/loading.d.ts.map +1 -1
  40. package/data/build/dist/client/avatar/loading.js +3 -2
  41. package/data/build/dist/client/avatar/loading.js.map +1 -1
  42. package/data/build/dist/client/avatar/notification-bubble.d.ts +39 -0
  43. package/data/build/dist/client/avatar/notification-bubble.d.ts.map +1 -0
  44. package/data/build/dist/client/avatar/notification-bubble.js +353 -0
  45. package/data/build/dist/client/avatar/notification-bubble.js.map +1 -0
  46. package/data/build/dist/client/avatar/notification-surface.d.ts +16 -0
  47. package/data/build/dist/client/avatar/notification-surface.d.ts.map +1 -0
  48. package/data/build/dist/client/avatar/notification-surface.js +54 -0
  49. package/data/build/dist/client/avatar/notification-surface.js.map +1 -0
  50. package/data/build/dist/client/avatar/reaction-badge.d.ts +7 -0
  51. package/data/build/dist/client/avatar/reaction-badge.d.ts.map +1 -0
  52. package/data/build/dist/client/avatar/reaction-badge.js +20 -0
  53. package/data/build/dist/client/avatar/reaction-badge.js.map +1 -0
  54. package/data/build/dist/client/avatar/registry.d.ts +2 -1
  55. package/data/build/dist/client/avatar/registry.d.ts.map +1 -1
  56. package/data/build/dist/client/avatar/registry.js.map +1 -1
  57. package/data/build/dist/client/avatar/settings-panel.d.ts.map +1 -1
  58. package/data/build/dist/client/avatar/settings-panel.js +7 -5
  59. package/data/build/dist/client/avatar/settings-panel.js.map +1 -1
  60. package/data/build/dist/client/avatar/slot.d.ts +2 -1
  61. package/data/build/dist/client/avatar/slot.d.ts.map +1 -1
  62. package/data/build/dist/client/avatar/slot.js +5 -4
  63. package/data/build/dist/client/avatar/slot.js.map +1 -1
  64. package/data/build/dist/client/avatar/spritesheet.d.ts +4 -2
  65. package/data/build/dist/client/avatar/spritesheet.d.ts.map +1 -1
  66. package/data/build/dist/client/avatar/spritesheet.js +18 -9
  67. package/data/build/dist/client/avatar/spritesheet.js.map +1 -1
  68. package/data/build/dist/client/bundle.js +6881 -1776
  69. package/data/build/dist/client/bundle.js.map +1 -1
  70. package/data/build/dist/client/cli-catalog.d.ts +1 -1
  71. package/data/build/dist/client/cli-catalog.d.ts.map +1 -1
  72. package/data/build/dist/client/cli-catalog.js +2 -0
  73. package/data/build/dist/client/cli-catalog.js.map +1 -1
  74. package/data/build/dist/client/cli-session-config-cache.d.ts +17 -0
  75. package/data/build/dist/client/cli-session-config-cache.d.ts.map +1 -0
  76. package/data/build/dist/client/cli-session-config-cache.js +56 -0
  77. package/data/build/dist/client/cli-session-config-cache.js.map +1 -0
  78. package/data/build/dist/client/cli-settings-rpc.d.ts +5 -0
  79. package/data/build/dist/client/cli-settings-rpc.d.ts.map +1 -0
  80. package/data/build/dist/client/cli-settings-rpc.js +60 -0
  81. package/data/build/dist/client/cli-settings-rpc.js.map +1 -0
  82. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  83. package/data/build/dist/client/cli-slots.js +24 -40
  84. package/data/build/dist/client/cli-slots.js.map +1 -1
  85. package/data/build/dist/client/client.assistant-configuration-view.js +264 -55
  86. package/data/build/dist/client/client.assistant-configuration-view.js.map +1 -1
  87. package/data/build/dist/client/client.assistant-debug-workbench.js +4 -4
  88. package/data/build/dist/client/client.assistant-debug-workbench.js.map +1 -1
  89. package/data/build/dist/client/{client.assistant-prompts.js → client.assistant-notifications.js} +63 -2
  90. package/data/build/dist/client/client.assistant-notifications.js.map +1 -0
  91. package/data/build/dist/client/client.assistant-prompt-editor.js +4 -4
  92. package/data/build/dist/client/client.assistant-prompt-editor.js.map +1 -1
  93. package/data/build/dist/client/client.assistant-workbench.js +287 -161
  94. package/data/build/dist/client/client.assistant-workbench.js.map +1 -1
  95. package/data/build/dist/client/client.delegate-command.js +12 -25
  96. package/data/build/dist/client/client.delegate-command.js.map +1 -1
  97. package/data/build/dist/client/client.manager.js +201 -25
  98. package/data/build/dist/client/client.manager.js.map +1 -1
  99. package/data/build/dist/client/client.model-catalog-cache.js +2 -1
  100. package/data/build/dist/client/client.model-catalog-cache.js.map +1 -1
  101. package/data/build/dist/client/client.native-workspace-store.js +42 -11
  102. package/data/build/dist/client/client.native-workspace-store.js.map +1 -1
  103. package/data/build/dist/client/client.primitives-adapter.js.map +1 -1
  104. package/data/build/dist/client/client.react-dom.js +250 -0
  105. package/data/build/dist/client/client.react-dom.js.map +1 -1
  106. package/data/build/dist/client/client.theme.js +58 -12
  107. package/data/build/dist/client/client.theme.js.map +1 -1
  108. package/data/build/dist/client/client.transport.js +342 -46
  109. package/data/build/dist/client/client.transport.js.map +1 -1
  110. package/data/build/dist/client/debug/ui.d.ts.map +1 -1
  111. package/data/build/dist/client/debug/ui.js +30 -29
  112. package/data/build/dist/client/debug/ui.js.map +1 -1
  113. package/data/build/dist/client/delegate-command.d.ts.map +1 -1
  114. package/data/build/dist/client/delegate-command.js +12 -21
  115. package/data/build/dist/client/delegate-command.js.map +1 -1
  116. package/data/build/dist/client/desktop-assistant.js +61859 -158
  117. package/data/build/dist/client/external-tool-stream.d.ts.map +1 -1
  118. package/data/build/dist/client/external-tool-stream.js +2 -1
  119. package/data/build/dist/client/external-tool-stream.js.map +1 -1
  120. package/data/build/dist/client/features/assistant-configuration-session.js +3 -3
  121. package/data/build/dist/client/features/assistant-configuration-session.js.map +1 -1
  122. package/data/build/dist/client/features/assistant-configuration-tabs.d.ts.map +1 -1
  123. package/data/build/dist/client/features/assistant-configuration-tabs.js +2 -1
  124. package/data/build/dist/client/features/assistant-configuration-tabs.js.map +1 -1
  125. package/data/build/dist/client/features/assistant-configuration-view.d.ts +8 -0
  126. package/data/build/dist/client/features/assistant-configuration-view.d.ts.map +1 -1
  127. package/data/build/dist/client/features/assistant-configuration-view.js +99 -3
  128. package/data/build/dist/client/features/assistant-configuration-view.js.map +1 -1
  129. package/data/build/dist/client/features/assistant-conversation-message.d.ts +2 -1
  130. package/data/build/dist/client/features/assistant-conversation-message.d.ts.map +1 -1
  131. package/data/build/dist/client/features/assistant-conversation-message.js +64 -28
  132. package/data/build/dist/client/features/assistant-conversation-message.js.map +1 -1
  133. package/data/build/dist/client/features/assistant-debug-workbench.d.ts.map +1 -1
  134. package/data/build/dist/client/features/assistant-debug-workbench.js +3 -2
  135. package/data/build/dist/client/features/assistant-debug-workbench.js.map +1 -1
  136. package/data/build/dist/client/features/assistant-floating-call.d.ts.map +1 -1
  137. package/data/build/dist/client/features/assistant-floating-call.js +4 -3
  138. package/data/build/dist/client/features/assistant-floating-call.js.map +1 -1
  139. package/data/build/dist/client/features/assistant-notification-store.d.ts +72 -0
  140. package/data/build/dist/client/features/assistant-notification-store.d.ts.map +1 -0
  141. package/data/build/dist/client/features/assistant-notification-store.js +439 -0
  142. package/data/build/dist/client/features/assistant-notification-store.js.map +1 -0
  143. package/data/build/dist/client/features/assistant-realtime-call.d.ts.map +1 -1
  144. package/data/build/dist/client/features/assistant-realtime-call.js +13 -12
  145. package/data/build/dist/client/features/assistant-realtime-call.js.map +1 -1
  146. package/data/build/dist/client/features/assistant-record-style.js +11 -4
  147. package/data/build/dist/client/features/assistant-record-style.js.map +1 -1
  148. package/data/build/dist/client/features/assistant-voice-initialization.d.ts.map +1 -1
  149. package/data/build/dist/client/features/assistant-voice-initialization.js +4 -2
  150. package/data/build/dist/client/features/assistant-voice-initialization.js.map +1 -1
  151. package/data/build/dist/client/features/assistant-voice-settings-group.d.ts.map +1 -1
  152. package/data/build/dist/client/features/assistant-voice-settings-group.js +2 -1
  153. package/data/build/dist/client/features/assistant-voice-settings-group.js.map +1 -1
  154. package/data/build/dist/client/features/assistant-voice-settings.d.ts.map +1 -1
  155. package/data/build/dist/client/features/assistant-voice-settings.js +4 -3
  156. package/data/build/dist/client/features/assistant-voice-settings.js.map +1 -1
  157. package/data/build/dist/client/features/assistant-workbench-controls.d.ts.map +1 -1
  158. package/data/build/dist/client/features/assistant-workbench-controls.js +6 -5
  159. package/data/build/dist/client/features/assistant-workbench-controls.js.map +1 -1
  160. package/data/build/dist/client/features/assistant-workbench.d.ts +4 -0
  161. package/data/build/dist/client/features/assistant-workbench.d.ts.map +1 -1
  162. package/data/build/dist/client/features/assistant-workbench.js +37 -9
  163. package/data/build/dist/client/features/assistant-workbench.js.map +1 -1
  164. package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
  165. package/data/build/dist/client/features/cli-adapters.js +140 -35
  166. package/data/build/dist/client/features/cli-adapters.js.map +1 -1
  167. package/data/build/dist/client/features/file-management-panel.d.ts.map +1 -1
  168. package/data/build/dist/client/features/file-management-panel.js +3 -10
  169. package/data/build/dist/client/features/file-management-panel.js.map +1 -1
  170. package/data/build/dist/client/features/global-voice-assistant.d.ts +6 -0
  171. package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -1
  172. package/data/build/dist/client/features/global-voice-assistant.js +117 -3
  173. package/data/build/dist/client/features/global-voice-assistant.js.map +1 -1
  174. package/data/build/dist/client/features/index.d.ts +1 -0
  175. package/data/build/dist/client/features/index.d.ts.map +1 -1
  176. package/data/build/dist/client/features/index.js +3 -0
  177. package/data/build/dist/client/features/index.js.map +1 -1
  178. package/data/build/dist/client/features/lan-access-panel.d.ts.map +1 -1
  179. package/data/build/dist/client/features/lan-access-panel.js +6 -4
  180. package/data/build/dist/client/features/lan-access-panel.js.map +1 -1
  181. package/data/build/dist/client/features/login-protection-panel.d.ts.map +1 -1
  182. package/data/build/dist/client/features/login-protection-panel.js +7 -2
  183. package/data/build/dist/client/features/login-protection-panel.js.map +1 -1
  184. package/data/build/dist/client/features/mobile-access-panel.d.ts.map +1 -1
  185. package/data/build/dist/client/features/mobile-access-panel.js +19 -13
  186. package/data/build/dist/client/features/mobile-access-panel.js.map +1 -1
  187. package/data/build/dist/client/features/peer-host.d.ts +3 -0
  188. package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
  189. package/data/build/dist/client/features/peer-host.js +445 -28
  190. package/data/build/dist/client/features/peer-host.js.map +1 -1
  191. package/data/build/dist/client/features/reverse-proxy-panel.d.ts.map +1 -1
  192. package/data/build/dist/client/features/reverse-proxy-panel.js +5 -4
  193. package/data/build/dist/client/features/reverse-proxy-panel.js.map +1 -1
  194. package/data/build/dist/client/features/subagent-collapsed-lineage.d.ts +9 -0
  195. package/data/build/dist/client/features/subagent-collapsed-lineage.d.ts.map +1 -0
  196. package/data/build/dist/client/features/subagent-collapsed-lineage.js +28 -0
  197. package/data/build/dist/client/features/subagent-collapsed-lineage.js.map +1 -0
  198. package/data/build/dist/client/features/subscription-usage-panel.d.ts.map +1 -1
  199. package/data/build/dist/client/features/subscription-usage-panel.js +4 -3
  200. package/data/build/dist/client/features/subscription-usage-panel.js.map +1 -1
  201. package/data/build/dist/client/features/terminal-enhancement-panel.d.ts.map +1 -1
  202. package/data/build/dist/client/features/terminal-enhancement-panel.js +6 -4
  203. package/data/build/dist/client/features/terminal-enhancement-panel.js.map +1 -1
  204. package/data/build/dist/client/features/types.d.ts +8 -0
  205. package/data/build/dist/client/features/types.d.ts.map +1 -1
  206. package/data/build/dist/client/features/voice-conversation-dialog.d.ts.map +1 -1
  207. package/data/build/dist/client/features/voice-conversation-dialog.js +7 -6
  208. package/data/build/dist/client/features/voice-conversation-dialog.js.map +1 -1
  209. package/data/build/dist/client/features/voice-initialization-dialog.d.ts.map +1 -1
  210. package/data/build/dist/client/features/voice-initialization-dialog.js +7 -6
  211. package/data/build/dist/client/features/voice-initialization-dialog.js.map +1 -1
  212. package/data/build/dist/client/features/workspace-session-enhancement-panel.d.ts.map +1 -1
  213. package/data/build/dist/client/features/workspace-session-enhancement-panel.js +44 -96
  214. package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -1
  215. package/data/build/dist/client/file-management-dom.d.ts.map +1 -1
  216. package/data/build/dist/client/file-management-dom.js +42 -28
  217. package/data/build/dist/client/file-management-dom.js.map +1 -1
  218. package/data/build/dist/client/font-scale.d.ts +37 -0
  219. package/data/build/dist/client/font-scale.d.ts.map +1 -0
  220. package/data/build/dist/client/font-scale.js +56 -0
  221. package/data/build/dist/client/font-scale.js.map +1 -0
  222. package/data/build/dist/client/git-management.d.ts.map +1 -1
  223. package/data/build/dist/client/git-management.js +80 -37
  224. package/data/build/dist/client/git-management.js.map +1 -1
  225. package/data/build/dist/client/index.d.ts +1 -1
  226. package/data/build/dist/client/index.d.ts.map +1 -1
  227. package/data/build/dist/client/index.js +43 -1
  228. package/data/build/dist/client/index.js.map +1 -1
  229. package/data/build/dist/client/locale.d.ts.map +1 -1
  230. package/data/build/dist/client/locale.js +27 -2
  231. package/data/build/dist/client/locale.js.map +1 -1
  232. package/data/build/dist/client/locales/assistantWorkbench.d.ts +45 -0
  233. package/data/build/dist/client/locales/assistantWorkbench.d.ts.map +1 -1
  234. package/data/build/dist/client/locales/assistantWorkbench.js +30 -6
  235. package/data/build/dist/client/locales/assistantWorkbench.js.map +1 -1
  236. package/data/build/dist/client/locales/peerHost.d.ts.map +1 -1
  237. package/data/build/dist/client/locales/peerHost.js +10 -0
  238. package/data/build/dist/client/locales/peerHost.js.map +1 -1
  239. package/data/build/dist/client/locales/peerHostWorkspace.d.ts.map +1 -1
  240. package/data/build/dist/client/locales/peerHostWorkspace.js +16 -0
  241. package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -1
  242. package/data/build/dist/client/locales/subagentCollapsed.d.ts +53 -0
  243. package/data/build/dist/client/locales/subagentCollapsed.d.ts.map +1 -0
  244. package/data/build/dist/client/locales/subagentCollapsed.js +95 -0
  245. package/data/build/dist/client/locales/subagentCollapsed.js.map +1 -0
  246. package/data/build/dist/client/locales/terminalAuth.js +2 -2
  247. package/data/build/dist/client/locales/terminalAuth.js.map +1 -1
  248. package/data/build/dist/client/locales/usage.d.ts.map +1 -1
  249. package/data/build/dist/client/locales/usage.js +48 -0
  250. package/data/build/dist/client/locales/usage.js.map +1 -1
  251. package/data/build/dist/client/native-workspace-store.d.ts +10 -0
  252. package/data/build/dist/client/native-workspace-store.d.ts.map +1 -1
  253. package/data/build/dist/client/native-workspace-store.js +22 -1
  254. package/data/build/dist/client/native-workspace-store.js.map +1 -1
  255. package/data/build/dist/client/peer-host-color.d.ts +3 -0
  256. package/data/build/dist/client/peer-host-color.d.ts.map +1 -1
  257. package/data/build/dist/client/peer-host-color.js +16 -0
  258. package/data/build/dist/client/peer-host-color.js.map +1 -1
  259. package/data/build/dist/client/peer-host-file-links.d.ts +8 -0
  260. package/data/build/dist/client/peer-host-file-links.d.ts.map +1 -0
  261. package/data/build/dist/client/peer-host-file-links.js +43 -0
  262. package/data/build/dist/client/peer-host-file-links.js.map +1 -0
  263. package/data/build/dist/client/peer-host-management-api.d.ts +2 -1
  264. package/data/build/dist/client/peer-host-management-api.d.ts.map +1 -1
  265. package/data/build/dist/client/peer-host-management-api.js +2 -1
  266. package/data/build/dist/client/peer-host-management-api.js.map +1 -1
  267. package/data/build/dist/client/peer-host-native-projection.d.ts +20 -8
  268. package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
  269. package/data/build/dist/client/peer-host-native-projection.js +127 -15
  270. package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
  271. package/data/build/dist/client/peer-host-native-store-projection.d.ts +2 -0
  272. package/data/build/dist/client/peer-host-native-store-projection.d.ts.map +1 -1
  273. package/data/build/dist/client/peer-host-native-store-projection.js +52 -13
  274. package/data/build/dist/client/peer-host-native-store-projection.js.map +1 -1
  275. package/data/build/dist/client/peer-host-reference-source.d.ts +18 -0
  276. package/data/build/dist/client/peer-host-reference-source.d.ts.map +1 -0
  277. package/data/build/dist/client/peer-host-reference-source.js +174 -0
  278. package/data/build/dist/client/peer-host-reference-source.js.map +1 -0
  279. package/data/build/dist/client/peer-host-remote-events.d.ts +48 -0
  280. package/data/build/dist/client/peer-host-remote-events.d.ts.map +1 -0
  281. package/data/build/dist/client/peer-host-remote-events.js +328 -0
  282. package/data/build/dist/client/peer-host-remote-events.js.map +1 -0
  283. package/data/build/dist/client/peer-host-scoped-client.d.ts +3 -0
  284. package/data/build/dist/client/peer-host-scoped-client.d.ts.map +1 -1
  285. package/data/build/dist/client/peer-host-scoped-client.js +5 -2
  286. package/data/build/dist/client/peer-host-scoped-client.js.map +1 -1
  287. package/data/build/dist/client/peer-host-workspace-tab.d.ts +2 -0
  288. package/data/build/dist/client/peer-host-workspace-tab.d.ts.map +1 -1
  289. package/data/build/dist/client/peer-host-workspace-tab.js +62 -29
  290. package/data/build/dist/client/peer-host-workspace-tab.js.map +1 -1
  291. package/data/build/dist/client/peer-host-workspace-tag.d.ts +5 -0
  292. package/data/build/dist/client/peer-host-workspace-tag.d.ts.map +1 -1
  293. package/data/build/dist/client/peer-host-workspace-tag.js +57 -14
  294. package/data/build/dist/client/peer-host-workspace-tag.js.map +1 -1
  295. package/data/build/dist/client/provider-icons.d.ts.map +1 -1
  296. package/data/build/dist/client/provider-icons.js +2 -1
  297. package/data/build/dist/client/provider-icons.js.map +1 -1
  298. package/data/build/dist/client/quick-phrase-slot.d.ts.map +1 -1
  299. package/data/build/dist/client/quick-phrase-slot.js +12 -11
  300. package/data/build/dist/client/quick-phrase-slot.js.map +1 -1
  301. package/data/build/dist/client/serial-polling.d.ts +1 -0
  302. package/data/build/dist/client/serial-polling.d.ts.map +1 -1
  303. package/data/build/dist/client/serial-polling.js +4 -2
  304. package/data/build/dist/client/serial-polling.js.map +1 -1
  305. package/data/build/dist/client/session-adapter-cache.d.ts +2 -0
  306. package/data/build/dist/client/session-adapter-cache.d.ts.map +1 -1
  307. package/data/build/dist/client/session-adapter-cache.js +11 -0
  308. package/data/build/dist/client/session-adapter-cache.js.map +1 -1
  309. package/data/build/dist/client/session-changed-files-view.d.ts +15 -0
  310. package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -1
  311. package/data/build/dist/client/session-changed-files-view.js +73 -29
  312. package/data/build/dist/client/session-changed-files-view.js.map +1 -1
  313. package/data/build/dist/client/settings-controls.d.ts +29 -0
  314. package/data/build/dist/client/settings-controls.d.ts.map +1 -0
  315. package/data/build/dist/client/settings-controls.js +80 -0
  316. package/data/build/dist/client/settings-controls.js.map +1 -0
  317. package/data/build/dist/client/settings-section.d.ts.map +1 -1
  318. package/data/build/dist/client/settings-section.js +7 -11
  319. package/data/build/dist/client/settings-section.js.map +1 -1
  320. package/data/build/dist/client/skill-command.d.ts.map +1 -1
  321. package/data/build/dist/client/skill-command.js +2 -1
  322. package/data/build/dist/client/skill-command.js.map +1 -1
  323. package/data/build/dist/client/style.css +2561 -0
  324. package/data/build/dist/client/subagent-collapsed-lineage.d.ts +103 -0
  325. package/data/build/dist/client/subagent-collapsed-lineage.d.ts.map +1 -0
  326. package/data/build/dist/client/subagent-collapsed-lineage.js +664 -0
  327. package/data/build/dist/client/subagent-collapsed-lineage.js.map +1 -0
  328. package/data/build/dist/client/subscription-slot.d.ts +8 -2
  329. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  330. package/data/build/dist/client/subscription-slot.js +55 -34
  331. package/data/build/dist/client/subscription-slot.js.map +1 -1
  332. package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
  333. package/data/build/dist/client/terminal/ui.js +26 -8
  334. package/data/build/dist/client/terminal/ui.js.map +1 -1
  335. package/data/build/dist/client/theme.d.ts +2 -0
  336. package/data/build/dist/client/theme.d.ts.map +1 -1
  337. package/data/build/dist/client/theme.js +20 -12
  338. package/data/build/dist/client/theme.js.map +1 -1
  339. package/data/build/dist/client/workspace-session-visibility-dom.d.ts.map +1 -1
  340. package/data/build/dist/client/workspace-session-visibility-dom.js +22 -10
  341. package/data/build/dist/client/workspace-session-visibility-dom.js.map +1 -1
  342. package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.d.ts +15 -0
  343. package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.d.ts.map +1 -0
  344. package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.js +86 -0
  345. package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.js.map +1 -0
  346. package/data/build/dist/dsh-capabilities/host/session-title-adapter.d.ts +10 -0
  347. package/data/build/dist/dsh-capabilities/host/session-title-adapter.d.ts.map +1 -0
  348. package/data/build/dist/dsh-capabilities/host/session-title-adapter.js +199 -0
  349. package/data/build/dist/dsh-capabilities/host/session-title-adapter.js.map +1 -0
  350. package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.d.ts +1 -1
  351. package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.d.ts.map +1 -1
  352. package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.js +8 -2
  353. package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.js.map +1 -1
  354. package/data/build/dist/dsh-capabilities/matrix.d.ts.map +1 -1
  355. package/data/build/dist/dsh-capabilities/matrix.js +13 -3
  356. package/data/build/dist/dsh-capabilities/matrix.js.map +1 -1
  357. package/data/build/dist/dsh-capabilities/routes.js +37 -3
  358. package/data/build/dist/dsh-capabilities/routes.js.map +1 -1
  359. package/data/build/dist/dsh-capabilities/types.d.ts +1 -1
  360. package/data/build/dist/dsh-capabilities/types.d.ts.map +1 -1
  361. package/data/build/dist/dsh-capabilities/types.js.map +1 -1
  362. package/data/build/dist/host/avatar/materials.d.ts.map +1 -1
  363. package/data/build/dist/host/avatar/materials.js +3 -1
  364. package/data/build/dist/host/avatar/materials.js.map +1 -1
  365. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +13 -0
  366. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  367. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +136 -11
  368. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  369. package/data/build/dist/host/cli-adapters/claude-driver.js +1 -1
  370. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  371. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -1
  372. package/data/build/dist/host/cli-adapters/codebuddy-driver.js +65 -31
  373. package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -1
  374. package/data/build/dist/host/cli-adapters/codex-driver.d.ts +1 -0
  375. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  376. package/data/build/dist/host/cli-adapters/codex-driver.js +36 -9
  377. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  378. package/data/build/dist/host/cli-adapters/codex-file-citations.d.ts +13 -0
  379. package/data/build/dist/host/cli-adapters/codex-file-citations.d.ts.map +1 -0
  380. package/data/build/dist/host/cli-adapters/codex-file-citations.js +271 -0
  381. package/data/build/dist/host/cli-adapters/codex-file-citations.js.map +1 -0
  382. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  383. package/data/build/dist/host/cli-adapters/command-code-driver.js +136 -16
  384. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  385. package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts +4 -3
  386. package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts.map +1 -1
  387. package/data/build/dist/host/cli-adapters/delegate-dispatch.js +7 -6
  388. package/data/build/dist/host/cli-adapters/delegate-dispatch.js.map +1 -1
  389. package/data/build/dist/host/cli-adapters/doubao-app.d.ts +32 -11
  390. package/data/build/dist/host/cli-adapters/doubao-app.d.ts.map +1 -1
  391. package/data/build/dist/host/cli-adapters/doubao-app.js +195 -24
  392. package/data/build/dist/host/cli-adapters/doubao-app.js.map +1 -1
  393. package/data/build/dist/host/cli-adapters/doubao-driver.d.ts.map +1 -1
  394. package/data/build/dist/host/cli-adapters/doubao-driver.js +3 -1
  395. package/data/build/dist/host/cli-adapters/doubao-driver.js.map +1 -1
  396. package/data/build/dist/host/cli-adapters/dsh-config.d.ts +16 -0
  397. package/data/build/dist/host/cli-adapters/dsh-config.d.ts.map +1 -0
  398. package/data/build/dist/host/cli-adapters/dsh-config.js +153 -0
  399. package/data/build/dist/host/cli-adapters/dsh-config.js.map +1 -0
  400. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts +2 -1
  401. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  402. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +16 -5
  403. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  404. package/data/build/dist/host/cli-adapters/dsh-tool-history.d.ts.map +1 -1
  405. package/data/build/dist/host/cli-adapters/dsh-tool-history.js +23 -3
  406. package/data/build/dist/host/cli-adapters/dsh-tool-history.js.map +1 -1
  407. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  408. package/data/build/dist/host/cli-adapters/feature.js +72 -28
  409. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  410. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +1 -0
  411. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
  412. package/data/build/dist/host/cli-adapters/model-catalog.js +22 -0
  413. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
  414. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +24 -2
  415. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -1
  416. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +113 -4
  417. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -1
  418. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +63 -18
  419. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -1
  420. package/data/build/dist/host/cli-adapters/native-team-subagent.js +35 -1
  421. package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -1
  422. package/data/build/dist/host/cli-adapters/new-api-subscription.d.ts.map +1 -1
  423. package/data/build/dist/host/cli-adapters/new-api-subscription.js +2 -45
  424. package/data/build/dist/host/cli-adapters/new-api-subscription.js.map +1 -1
  425. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +6 -0
  426. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  427. package/data/build/dist/host/cli-adapters/opencode-driver.js +10 -3
  428. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  429. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts.map +1 -1
  430. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js +334 -62
  431. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js.map +1 -1
  432. package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
  433. package/data/build/dist/host/cli-adapters/pi-driver.js +134 -14
  434. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  435. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +3 -0
  436. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
  437. package/data/build/dist/host/cli-adapters/provider-subscription.js +13 -45
  438. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
  439. package/data/build/dist/host/cli-adapters/r4-subscription.d.ts +13 -0
  440. package/data/build/dist/host/cli-adapters/r4-subscription.d.ts.map +1 -0
  441. package/data/build/dist/host/cli-adapters/r4-subscription.js +111 -0
  442. package/data/build/dist/host/cli-adapters/r4-subscription.js.map +1 -0
  443. package/data/build/dist/host/cli-adapters/registry.d.ts +2 -0
  444. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  445. package/data/build/dist/host/cli-adapters/registry.js +14 -3
  446. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  447. package/data/build/dist/host/cli-adapters/stream-normalizer.d.ts.map +1 -1
  448. package/data/build/dist/host/cli-adapters/stream-normalizer.js +7 -0
  449. package/data/build/dist/host/cli-adapters/stream-normalizer.js.map +1 -1
  450. package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -1
  451. package/data/build/dist/host/cli-adapters/subagent-tool.js +28 -7
  452. package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -1
  453. package/data/build/dist/host/cli-bridge/bridge-server.d.ts +1 -0
  454. package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -1
  455. package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -1
  456. package/data/build/dist/host/cli-bridge/command-code-mod.d.ts +24 -1
  457. package/data/build/dist/host/cli-bridge/command-code-mod.d.ts.map +1 -1
  458. package/data/build/dist/host/cli-bridge/command-code-mod.js +121 -23
  459. package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -1
  460. package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -1
  461. package/data/build/dist/host/cli-bridge/dispatch.js +26 -6
  462. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
  463. package/data/build/dist/host/cli-bridge/injections.d.ts +45 -4
  464. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
  465. package/data/build/dist/host/cli-bridge/injections.js +129 -14
  466. package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
  467. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +20 -5
  468. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -1
  469. package/data/build/dist/host/desktop-assistant/controller.d.ts +27 -2
  470. package/data/build/dist/host/desktop-assistant/controller.d.ts.map +1 -1
  471. package/data/build/dist/host/desktop-assistant/controller.js +197 -7
  472. package/data/build/dist/host/desktop-assistant/controller.js.map +1 -1
  473. package/data/build/dist/host/desktop-assistant/feature.d.ts.map +1 -1
  474. package/data/build/dist/host/desktop-assistant/feature.js +41 -4
  475. package/data/build/dist/host/desktop-assistant/feature.js.map +1 -1
  476. package/data/build/dist/host/desktop-assistant/launcher.d.ts.map +1 -1
  477. package/data/build/dist/host/desktop-assistant/launcher.js +3 -1
  478. package/data/build/dist/host/desktop-assistant/launcher.js.map +1 -1
  479. package/data/build/dist/host/desktop-assistant/mac-agent.d.ts.map +1 -1
  480. package/data/build/dist/host/desktop-assistant/mac-agent.js +41 -10
  481. package/data/build/dist/host/desktop-assistant/mac-agent.js.map +1 -1
  482. package/data/build/dist/host/desktop-assistant/notifications.d.ts +16 -0
  483. package/data/build/dist/host/desktop-assistant/notifications.d.ts.map +1 -0
  484. package/data/build/dist/host/desktop-assistant/notifications.js +45 -0
  485. package/data/build/dist/host/desktop-assistant/notifications.js.map +1 -0
  486. package/data/build/dist/host/desktop-assistant/win-agent.d.ts.map +1 -1
  487. package/data/build/dist/host/desktop-assistant/win-agent.js +95 -8
  488. package/data/build/dist/host/desktop-assistant/win-agent.js.map +1 -1
  489. package/data/build/dist/host/features/assistant-lifecycle-settings.js +1 -1
  490. package/data/build/dist/host/features/assistant-lifecycle-settings.js.map +1 -1
  491. package/data/build/dist/host/features/assistant-management-tools.d.ts +2 -1
  492. package/data/build/dist/host/features/assistant-management-tools.d.ts.map +1 -1
  493. package/data/build/dist/host/features/assistant-management-tools.js +10 -3
  494. package/data/build/dist/host/features/assistant-management-tools.js.map +1 -1
  495. package/data/build/dist/host/features/assistant-notification-events.d.ts +77 -0
  496. package/data/build/dist/host/features/assistant-notification-events.d.ts.map +1 -0
  497. package/data/build/dist/host/features/assistant-notification-events.js +574 -0
  498. package/data/build/dist/host/features/assistant-notification-events.js.map +1 -0
  499. package/data/build/dist/host/features/assistant-notification-source.d.ts +32 -0
  500. package/data/build/dist/host/features/assistant-notification-source.d.ts.map +1 -0
  501. package/data/build/dist/host/features/assistant-notification-source.js +101 -0
  502. package/data/build/dist/host/features/assistant-notification-source.js.map +1 -0
  503. package/data/build/dist/host/features/assistant-notification-stream.d.ts +26 -0
  504. package/data/build/dist/host/features/assistant-notification-stream.d.ts.map +1 -0
  505. package/data/build/dist/host/features/assistant-notification-stream.js +179 -0
  506. package/data/build/dist/host/features/assistant-notification-stream.js.map +1 -0
  507. package/data/build/dist/host/features/assistant-notifications.d.ts +78 -0
  508. package/data/build/dist/host/features/assistant-notifications.d.ts.map +1 -0
  509. package/data/build/dist/host/features/assistant-notifications.js +436 -0
  510. package/data/build/dist/host/features/assistant-notifications.js.map +1 -0
  511. package/data/build/dist/host/features/assistant-peer-notifications.d.ts +53 -0
  512. package/data/build/dist/host/features/assistant-peer-notifications.d.ts.map +1 -0
  513. package/data/build/dist/host/features/assistant-peer-notifications.js +197 -0
  514. package/data/build/dist/host/features/assistant-peer-notifications.js.map +1 -0
  515. package/data/build/dist/host/features/assistant-tts-service.d.ts.map +1 -1
  516. package/data/build/dist/host/features/assistant-tts-service.js +2 -2
  517. package/data/build/dist/host/features/assistant-tts-service.js.map +1 -1
  518. package/data/build/dist/host/features/assistant-voice-initialization.js +1 -1
  519. package/data/build/dist/host/features/assistant-voice-initialization.js.map +1 -1
  520. package/data/build/dist/host/features/git-management.js +2 -1
  521. package/data/build/dist/host/features/git-management.js.map +1 -1
  522. package/data/build/dist/host/features/global-voice-rpc.d.ts +2 -2
  523. package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -1
  524. package/data/build/dist/host/features/global-voice-rpc.js +179 -4
  525. package/data/build/dist/host/features/global-voice-rpc.js.map +1 -1
  526. package/data/build/dist/host/features/index.d.ts +1 -0
  527. package/data/build/dist/host/features/index.d.ts.map +1 -1
  528. package/data/build/dist/host/features/index.js +3 -0
  529. package/data/build/dist/host/features/index.js.map +1 -1
  530. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  531. package/data/build/dist/host/features/peer-host.js +193 -75
  532. package/data/build/dist/host/features/peer-host.js.map +1 -1
  533. package/data/build/dist/host/features/session-title-optimization.d.ts +5 -0
  534. package/data/build/dist/host/features/session-title-optimization.d.ts.map +1 -0
  535. package/data/build/dist/host/features/session-title-optimization.js +26 -0
  536. package/data/build/dist/host/features/session-title-optimization.js.map +1 -0
  537. package/data/build/dist/host/features/types.d.ts +9 -1
  538. package/data/build/dist/host/features/types.d.ts.map +1 -1
  539. package/data/build/dist/host/index.d.ts.map +1 -1
  540. package/data/build/dist/host/index.js +23 -1
  541. package/data/build/dist/host/index.js.map +1 -1
  542. package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -1
  543. package/data/build/dist/host/lan-access-dsh.js +9 -1
  544. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  545. package/data/build/dist/host/modules/peer-host/aggregated-host-transport.d.ts.map +1 -1
  546. package/data/build/dist/host/modules/peer-host/aggregated-host-transport.js +8 -2
  547. package/data/build/dist/host/modules/peer-host/aggregated-host-transport.js.map +1 -1
  548. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts +5 -1
  549. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts.map +1 -1
  550. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js +72 -23
  551. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js.map +1 -1
  552. package/data/build/dist/host/modules/peer-host/host-ws-proxy-service.d.ts.map +1 -1
  553. package/data/build/dist/host/modules/peer-host/host-ws-proxy-service.js +7 -5
  554. package/data/build/dist/host/modules/peer-host/host-ws-proxy-service.js.map +1 -1
  555. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts +6 -1
  556. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts.map +1 -1
  557. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js +7 -0
  558. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js.map +1 -1
  559. package/data/build/dist/host/modules/peer-host/peer-host-handshake.d.ts +2 -1
  560. package/data/build/dist/host/modules/peer-host/peer-host-handshake.d.ts.map +1 -1
  561. package/data/build/dist/host/modules/peer-host/peer-host-handshake.js +11 -10
  562. package/data/build/dist/host/modules/peer-host/peer-host-handshake.js.map +1 -1
  563. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts +7 -1
  564. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -1
  565. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +63 -1
  566. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js.map +1 -1
  567. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +6 -3
  568. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -1
  569. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +92 -5
  570. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
  571. package/data/build/dist/host/modules/peer-host/peer-host-native-streams.d.ts +15 -0
  572. package/data/build/dist/host/modules/peer-host/peer-host-native-streams.d.ts.map +1 -0
  573. package/data/build/dist/host/modules/peer-host/peer-host-native-streams.js +101 -0
  574. package/data/build/dist/host/modules/peer-host/peer-host-native-streams.js.map +1 -0
  575. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts.map +1 -1
  576. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js +44 -11
  577. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js.map +1 -1
  578. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts.map +1 -1
  579. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +75 -20
  580. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
  581. package/data/build/dist/host/modules/peer-host/peer-host-request-errors.d.ts +31 -0
  582. package/data/build/dist/host/modules/peer-host/peer-host-request-errors.d.ts.map +1 -0
  583. package/data/build/dist/host/modules/peer-host/peer-host-request-errors.js +60 -0
  584. package/data/build/dist/host/modules/peer-host/peer-host-request-errors.js.map +1 -0
  585. package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts +12 -4
  586. package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts.map +1 -1
  587. package/data/build/dist/host/modules/peer-host/peer-host-session.js +28 -18
  588. package/data/build/dist/host/modules/peer-host/peer-host-session.js.map +1 -1
  589. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts +1 -1
  590. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts.map +1 -1
  591. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js +15 -4
  592. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js.map +1 -1
  593. package/data/build/dist/host/modules/peer-host/peer-host-workspace-cache.d.ts +22 -0
  594. package/data/build/dist/host/modules/peer-host/peer-host-workspace-cache.d.ts.map +1 -0
  595. package/data/build/dist/host/modules/peer-host/peer-host-workspace-cache.js +133 -0
  596. package/data/build/dist/host/modules/peer-host/peer-host-workspace-cache.js.map +1 -0
  597. package/data/build/dist/host/native-session-bridge.d.ts +2 -0
  598. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
  599. package/data/build/dist/host/native-session-bridge.js +89 -9
  600. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  601. package/data/build/dist/host/rpc.d.ts.map +1 -1
  602. package/data/build/dist/host/rpc.js +11 -2
  603. package/data/build/dist/host/rpc.js.map +1 -1
  604. package/data/build/dist/host/settings.d.ts.map +1 -1
  605. package/data/build/dist/host/settings.js +14 -3
  606. package/data/build/dist/host/settings.js.map +1 -1
  607. package/data/build/dist/host/terminal/controller-factory.d.ts +1 -0
  608. package/data/build/dist/host/terminal/controller-factory.d.ts.map +1 -1
  609. package/data/build/dist/host/terminal/controller-factory.js +3 -0
  610. package/data/build/dist/host/terminal/controller-factory.js.map +1 -1
  611. package/data/build/dist/host/terminal/startup.d.ts +3 -0
  612. package/data/build/dist/host/terminal/startup.d.ts.map +1 -1
  613. package/data/build/dist/host/terminal/startup.js +1 -0
  614. package/data/build/dist/host/terminal/startup.js.map +1 -1
  615. package/data/build/dist/host/terminal/terminal-controller.d.ts +8 -0
  616. package/data/build/dist/host/terminal/terminal-controller.d.ts.map +1 -1
  617. package/data/build/dist/host/terminal/terminal-controller.js +2 -1
  618. package/data/build/dist/host/terminal/terminal-controller.js.map +1 -1
  619. package/data/build/dist/shared/assistant-avatar-adapters.d.ts.map +1 -1
  620. package/data/build/dist/shared/assistant-avatar-adapters.js +3 -0
  621. package/data/build/dist/shared/assistant-avatar-adapters.js.map +1 -1
  622. package/data/build/dist/shared/assistant-avatar.d.ts +11 -1
  623. package/data/build/dist/shared/assistant-avatar.d.ts.map +1 -1
  624. package/data/build/dist/shared/assistant-avatar.js +31 -1
  625. package/data/build/dist/shared/assistant-avatar.js.map +1 -1
  626. package/data/build/dist/shared/assistant-message-timeline.d.ts +11 -0
  627. package/data/build/dist/shared/assistant-message-timeline.d.ts.map +1 -1
  628. package/data/build/dist/shared/assistant-message-timeline.js +19 -0
  629. package/data/build/dist/shared/assistant-message-timeline.js.map +1 -1
  630. package/data/build/dist/shared/assistant-notification-feed.d.ts +44 -0
  631. package/data/build/dist/shared/assistant-notification-feed.d.ts.map +1 -0
  632. package/data/build/dist/shared/assistant-notification-feed.js +88 -0
  633. package/data/build/dist/shared/assistant-notification-feed.js.map +1 -0
  634. package/data/build/dist/shared/assistant-notifications.d.ts +141 -0
  635. package/data/build/dist/shared/assistant-notifications.d.ts.map +1 -0
  636. package/data/build/dist/shared/assistant-notifications.js +32 -0
  637. package/data/build/dist/shared/assistant-notifications.js.map +1 -0
  638. package/data/build/dist/shared/assistant-session-messages.d.ts +13 -0
  639. package/data/build/dist/shared/assistant-session-messages.d.ts.map +1 -0
  640. package/data/build/dist/shared/assistant-session-messages.js +155 -0
  641. package/data/build/dist/shared/assistant-session-messages.js.map +1 -0
  642. package/data/build/dist/shared/assistant-tts.js +1 -1
  643. package/data/build/dist/shared/contracts/assistant.d.ts +13 -0
  644. package/data/build/dist/shared/contracts/assistant.d.ts.map +1 -1
  645. package/data/build/dist/shared/contracts/cli-adapter.d.ts +5 -1
  646. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  647. package/data/build/dist/shared/contracts/config.d.ts +5 -0
  648. package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
  649. package/data/build/dist/shared/contracts/config.js +3 -0
  650. package/data/build/dist/shared/contracts/config.js.map +1 -1
  651. package/data/build/dist/shared/contracts/errors.d.ts +2 -2
  652. package/data/build/dist/shared/contracts/peer-host.d.ts +15 -0
  653. package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -1
  654. package/data/build/dist/shared/contracts/peer-host.js.map +1 -1
  655. package/data/build/dist/shared/contracts/subscription.d.ts +31 -0
  656. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
  657. package/data/build/dist/shared/contracts/subscription.js.map +1 -1
  658. package/data/build/dist/shared/contracts/version.d.ts +12 -8
  659. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  660. package/data/build/dist/shared/contracts/version.js +11 -7
  661. package/data/build/dist/shared/contracts/version.js.map +1 -1
  662. package/data/build/dist/shared/desktop-assistant.d.ts +74 -1
  663. package/data/build/dist/shared/desktop-assistant.d.ts.map +1 -1
  664. package/data/build/dist/shared/desktop-assistant.js +201 -2
  665. package/data/build/dist/shared/desktop-assistant.js.map +1 -1
  666. package/data/build/dist/shared/index.d.ts +2 -2
  667. package/data/build/dist/shared/index.d.ts.map +1 -1
  668. package/data/build/dist/shared/index.js.map +1 -1
  669. package/data/build/dist/shared/peer-host-file-location.d.ts +11 -0
  670. package/data/build/dist/shared/peer-host-file-location.d.ts.map +1 -0
  671. package/data/build/dist/shared/peer-host-file-location.js +20 -0
  672. package/data/build/dist/shared/peer-host-file-location.js.map +1 -0
  673. package/data/build/dist/shared/peer-host-http-routes.d.ts +10 -0
  674. package/data/build/dist/shared/peer-host-http-routes.d.ts.map +1 -1
  675. package/data/build/dist/shared/peer-host-http-routes.js +7 -1
  676. package/data/build/dist/shared/peer-host-http-routes.js.map +1 -1
  677. package/data/build/dist/shared/provider-icon-resources.d.ts.map +1 -1
  678. package/data/build/dist/shared/provider-icon-resources.js +1 -0
  679. package/data/build/dist/shared/provider-icon-resources.js.map +1 -1
  680. package/data/build/dist/shared/session-reference.d.ts +11 -0
  681. package/data/build/dist/shared/session-reference.d.ts.map +1 -0
  682. package/data/build/dist/shared/session-reference.js +29 -0
  683. package/data/build/dist/shared/session-reference.js.map +1 -0
  684. package/data/build/dist/shared/session-title.d.ts +12 -0
  685. package/data/build/dist/shared/session-title.d.ts.map +1 -0
  686. package/data/build/dist/shared/session-title.js +65 -0
  687. package/data/build/dist/shared/session-title.js.map +1 -0
  688. package/data/build/dist/shared/voice-initialization.d.ts +1 -1
  689. package/data/build/dist/shared/voice-initialization.d.ts.map +1 -1
  690. package/data/build/dist/shared/voice-initialization.js +1 -1
  691. package/data/build/dist/shared/voice-initialization.js.map +1 -1
  692. package/data/build/dist/shared/voice-models.d.ts +2 -2
  693. package/data/build/dist/shared/voice-models.d.ts.map +1 -1
  694. package/data/build/dist/shared/voice-models.js +9 -9
  695. package/data/build/dist/shared/voice-models.js.map +1 -1
  696. package/data/build/dist/typert.host.d.ts +18 -1
  697. package/data/build/dist/typert.host.d.ts.map +1 -1
  698. package/data/build/dist/typert.host.js +28 -3
  699. package/data/build/dist/typert.host.js.map +1 -1
  700. package/data/build/dist/typert.notifications-client.d.ts +5 -0
  701. package/data/build/dist/typert.notifications-client.d.ts.map +1 -0
  702. package/data/build/dist/typert.notifications-client.js +7 -0
  703. package/data/build/dist/typert.notifications-client.js.map +1 -0
  704. package/data/build/dist/typert.remote-client.js +1 -1
  705. package/data/build/dist/typert.remote-client.js.map +1 -1
  706. package/package.json +41 -33
  707. package/profile/README.md +2 -2
  708. package/profile/package.json +3 -3
  709. package/profile/version.json +3 -3
  710. package/version.json +3 -3
  711. package/data/build/dist/client/client.assistant-prompts.js.map +0 -1
@@ -4,13 +4,16 @@ import { randomBytes, randomUUID } from 'node:crypto';
4
4
  import { mkdir, readFile, writeFile } from 'node:fs/promises';
5
5
  import { CODINGNS_VERSION, DSH_VERSION, isDshVersionCompatible } from '../../shared/contracts/version.js';
6
6
  import { PeerHostHandshakeService } from '../modules/peer-host/peer-host-handshake.js';
7
- import { PeerHostSessionService } from '../modules/peer-host/peer-host-session.js';
7
+ import { isPeerHostTransientStatus, PeerHostSessionService } from '../modules/peer-host/peer-host-session.js';
8
8
  import { PeerHostHttpProxyService } from '../modules/peer-host/host-api-proxy-service.js';
9
9
  import { EncryptedFilePeerHostCredentialStore, FilePeerHostRecordStore, PeerHostStore, } from '../modules/peer-host/peer-host-store.js';
10
+ import { appendAssistantSessionStream, readAssistantSessionMessages } from '../../shared/assistant-session-messages.js';
10
11
  import { assistantWorkspaceMatches } from '../../shared/assistant-lifecycle.js';
11
12
  import { createVirtualSessionId, createVirtualWorkspaceId, normalizePeerHostColor, parseVirtualSessionId, parseVirtualWorkspaceId } from '../../shared/contracts/peer-host.js';
12
13
  import { PeerHostAggregateService } from '../modules/peer-host/peer-host-aggregate-service.js';
14
+ import { PeerHostWorkspaceCache } from '../modules/peer-host/peer-host-workspace-cache.js';
13
15
  import { resolveDshNativeDispatch } from '../modules/peer-host/peer-host-native-dispatch.js';
16
+ import { PeerHostNativeStreams } from '../modules/peer-host/peer-host-native-streams.js';
14
17
  import { FileAggregateWorkspaceOrderStore, VirtualWorkspaceRegistry } from '../modules/peer-host/peer-host-virtual-registry.js';
15
18
  import { CodingNsRpcError } from '../rpc-table.js';
16
19
  import { PeerHostWebSocketGateway, PEER_HOST_WS_PATH } from '../modules/peer-host/peer-host-ws-gateway.js';
@@ -27,8 +30,8 @@ import { callPeerCliRpc, callPeerNativeRpc, openPeerNativeStream, readNativeRpcE
27
30
  import { createAggregateHostSource } from '../modules/peer-host/peer-host-aggregate-service.js';
28
31
  import { encodeNativeResponseBytes, isDshNativeRemoteMethod, rewriteNativeRequestIds, rewriteNativeResponseIds } from '../modules/peer-host/peer-host-native-protocol.js';
29
32
  import { resolveCodingNsDebugLevel } from '../../shared/debug.js';
30
- /** 原生 Remote 流句柄的存活窗口;每次轮询续期,超时仍未再被轮询即回收。 */
31
- const NATIVE_STREAM_TTL_MS = 600_000;
33
+ import { AssistantPeerNotifications, assistantPeerNotificationWorkspaceIds, assistantPeerNotificationCapabilityKey } from './assistant-peer-notifications.js';
34
+ import { readAssistantNotificationFeed } from '../../shared/assistant-notification-feed.js';
32
35
  /** PeerHost Host 模块;配置、握手和目标登录态只在 Host 进程内装配。 */
33
36
  export function createPeerHostFeature(options = {}) {
34
37
  return {
@@ -61,23 +64,25 @@ export function createPeerHostFeature(options = {}) {
61
64
  });
62
65
  const sessions = new PeerHostSessionService(store, credentials, options.fetchImpl === undefined ? {} : { fetchImpl: options.fetchImpl });
63
66
  const httpProxy = new PeerHostHttpProxyService(store, sessions, options.fetchImpl === undefined ? {} : { fetchImpl: options.fetchImpl });
64
- // 旧版 HTTP 代理尚未下传 request.signal;每次读取独立绑定 fetch,避免共享
65
- // 代理上的可变信号污染其他界面请求,同时让取消真正中断网络读取。
66
- const scopedProxy = (signal) => signal === undefined ? httpProxy : new PeerHostHttpProxyService(store, sessions, {
67
- fetchImpl: async (input, init) => {
68
- const closing = new URL(input instanceof Request ? input.url : String(input)).pathname.endsWith('/peerHost/nativeStreamClose');
69
- const requestSignal = closing ? AbortSignal.timeout(5_000) : init?.signal == null ? signal : AbortSignal.any([signal, init.signal]);
70
- requestSignal.throwIfAborted();
71
- return (options.fetchImpl ?? fetch)(input, { ...init, signal: requestSignal });
72
- },
73
- });
74
67
  const aggregate = new PeerHostAggregateService();
68
+ const workspaceCache = new PeerHostWorkspaceCache(join(stateDirectory, 'peer-host-workspace-cache.json'), ownerUserId);
75
69
  const workspaceRegistry = new VirtualWorkspaceRegistry({
76
70
  orderStore: new FileAggregateWorkspaceOrderStore(join(stateDirectory, 'peer-host-workspace-order.json')),
77
71
  });
78
72
  let workspaceOrderHydrated = false;
79
- const nativeStreams = new Map();
80
- const dshNativeDispatch = resolveDshNativeDispatch(context.services.dshContext);
73
+ const nativeStreams = new PeerHostNativeStreams();
74
+ const completionStatuses = new Set();
75
+ const disposeCompletionStatusListener = registerPeerHostCompletionStatusListener(context.services.dshContext, completionStatuses);
76
+ if (disposeCompletionStatusListener !== undefined)
77
+ context.resources.add(disposeCompletionStatusListener);
78
+ const dshNativeDispatch = resolveDshNativeDispatch(context.services.dshContext, {
79
+ replayCompletedSessions: () => {
80
+ const pending = [...completionStatuses];
81
+ completionStatuses.clear();
82
+ return pending;
83
+ },
84
+ onSessionStatusForwarded: (sessionId) => { completionStatuses.delete(sessionId); },
85
+ });
81
86
  const debugLevel = resolveCodingNsDebugLevel();
82
87
  const diagnostics = createPeerHostDiagnosticSink({
83
88
  enabled: debugLevel !== 'off',
@@ -99,13 +104,15 @@ export function createPeerHostFeature(options = {}) {
99
104
  const localHostId = process.env.CODINGNS4DSH_HOST_ID?.trim() || ownerUserId;
100
105
  const localSummarySource = createDshNativeSummarySource(context.services.dshContext, context.services.nativeSessions);
101
106
  /**
102
- * 聚合前确保目标 Host 已完成握手和认证。
107
+ * 聚合前确保目标 Host 已完成握手和认证;握手状态若只是临时断线结果,
108
+ * 则交给真实数据面重新验证,避免已有消息/终端连接被旧状态染灰。
103
109
  *
104
110
  * PeerHost 的记录状态是运行时缓存,不是登录凭据本身:远端返回 401 后
105
111
  * 状态会暂时变成 session_required,下一次聚合必须主动用持久化的 refresh
106
112
  * token/账号密码恢复,否则只要没有手工点“测试”,该目标就会永远被跳过。
107
113
  */
108
- const preparePeerHost = async (input) => {
114
+ const preparePeerHost = async (input, options = {}) => {
115
+ const allowTransientStatus = options.allowTransientStatus === true;
109
116
  if (input.status === 'disabled' || input.status === 'identity_changed')
110
117
  return null;
111
118
  let record = input;
@@ -113,17 +120,17 @@ export function createPeerHostFeature(options = {}) {
113
120
  await sessions.refresh(record.id).catch(() => undefined);
114
121
  record = (await store.get(record.id)) ?? record;
115
122
  }
116
- else if (record.status !== 'ready') {
117
- // configured/unreachable/version_mismatch 等状态都可能只是上一次启动
118
- // 或网络抖动留下的缓存;自动重试等价于管理面板的“测试”。
123
+ else if (record.status !== 'ready' && !(allowTransientStatus && isPeerHostTransientStatus(record.status))) {
124
+ // configured/version_mismatch 等状态仍需先完成握手;checking/unreachable/
125
+ // reconnecting 只是旧连接尝试的结果,摘要数据面应直接重新验证目标。
119
126
  record = await handshake.check(record.id);
120
127
  }
121
- if (record.status !== 'ready')
128
+ if (record.status !== 'ready' && !(allowTransientStatus && isPeerHostTransientStatus(record.status)))
122
129
  return null;
123
130
  // 即使 access token 尚未到期,也检查一次当前认证状态;临近过期时这里
124
131
  // 会 refresh,refresh token 失效时会用保存的账号密码静默重登。
125
132
  try {
126
- await sessions.getAccessToken(record.id);
133
+ await sessions.getAccessToken(record.id, allowTransientStatus);
127
134
  }
128
135
  catch {
129
136
  return null;
@@ -148,14 +155,19 @@ export function createPeerHostFeature(options = {}) {
148
155
  // 助理只访问受管远端,不能为了本地索引唤醒全部 PeerHost 或重复扫描本地列表。
149
156
  const selectedRecords = assistantWorkspaceIds === undefined ? records : records.filter((record) => record.status !== 'disabled' && record.status !== 'identity_changed'
150
157
  && (record.visibleWorkspaceIds ?? []).some((workspaceId) => assistantWorkspaceIds.some((selected) => assistantWorkspaceMatches(selected, record.id, workspaceId))));
151
- const preparedRecords = await Promise.all(selectedRecords.map((record) => preparePeerHost(record).catch(() => null)));
158
+ // 摘要是实际数据面探针:握手状态可能滞后,但消息和终端仍可正常访问时,
159
+ // 不能先用旧的 unreachable 状态把 Host 排除在 source 之外。
160
+ const preparedRecords = await Promise.all(selectedRecords.map((record) => preparePeerHost(record, { allowTransientStatus: true }).catch(() => null)));
152
161
  signal?.throwIfAborted();
153
162
  for (const [index, record] of preparedRecords.entries()) {
154
- if (record === null || record.status !== 'ready') {
163
+ if (record === null) {
155
164
  // 受管远端的握手/认证失败也必须交给助理退避,不能冒充没有远端工作区。
156
165
  const original = selectedRecords[index];
157
- if (assistantWorkspaceIds !== undefined)
158
- sources.push({ hostId: localHostId, targetHostId: original.id, hostLabel: original.displayName, load: async () => { throw new Error('受管远端 Host 暂不可达'); } });
166
+ if (original.status !== 'disabled' && original.status !== 'identity_changed')
167
+ sources.push({
168
+ hostId: localHostId, targetHostId: original.id, hostLabel: original.displayName, hostColor: original.color ?? null,
169
+ load: async () => { throw new Error('远端 Host 暂不可达'); },
170
+ });
159
171
  continue;
160
172
  }
161
173
  const selectedWorkspaceIds = assistantWorkspaceIds === undefined
@@ -171,9 +183,9 @@ export function createPeerHostFeature(options = {}) {
171
183
  source: createPeerHostRemoteSummarySource({
172
184
  scope: { hostId: localHostId, targetHostId: record.id, workspaceId: '__aggregate__', sessionId: null, scopeGeneration: 0 },
173
185
  transport: {
174
- rpc: (request) => callPeerNativeRpc(scopedProxy(signal ?? request.signal), record.id, { ...request, ...(signal === undefined ? {} : { signal }) }),
175
- stream: (request) => openPeerNativeStream(scopedProxy(signal ?? request.signal), record.id, { ...request, ...(signal === undefined ? {} : { signal }) }),
176
- cli: (request) => callPeerCliRpc(scopedProxy(signal ?? request.signal), record.id, { ...request, ...(signal === undefined ? {} : { signal }) }),
186
+ rpc: (request) => callPeerNativeRpc(httpProxy, record.id, { ...request, ...(signal === undefined ? {} : { signal }) }),
187
+ stream: (request) => openPeerNativeStream(httpProxy, record.id, { ...request, ...(signal === undefined ? {} : { signal }) }),
188
+ cli: (request) => callPeerCliRpc(httpProxy, record.id, { ...request, ...(signal === undefined ? {} : { signal }) }),
177
189
  },
178
190
  // 默认只投影用户显式添加的远端工作区;未添加时不展示该 Host 的任何工作区。
179
191
  visibleWorkspaceIds: selectedWorkspaceIds,
@@ -182,6 +194,20 @@ export function createPeerHostFeature(options = {}) {
182
194
  }
183
195
  return sources;
184
196
  };
197
+ /** 数据面摘要成功后清除过期的临时断线状态,让下一轮也从正常路径开始。 */
198
+ const markRecoveredPeerHosts = async (results) => {
199
+ if (options.aggregateSources !== undefined)
200
+ return;
201
+ await Promise.all(results.flatMap((result) => {
202
+ if (result.targetHostId === null || result.availability !== 'ready')
203
+ return [];
204
+ return [store.get(result.targetHostId).then((record) => {
205
+ if (record !== null && isPeerHostTransientStatus(record.status))
206
+ return store.updateStatus(record.id, 'ready', null).then(() => undefined);
207
+ return undefined;
208
+ })];
209
+ }));
210
+ };
185
211
  /** 远端工作区候选的唯一读取入口;不过滤可见性,供"添加工作区"选择器使用。 */
186
212
  const readRemoteWorkspaceCandidates = async (peerHostId) => {
187
213
  const configured = await store.get(peerHostId);
@@ -236,12 +262,83 @@ export function createPeerHostFeature(options = {}) {
236
262
  httpProxy,
237
263
  wsProxy,
238
264
  peer: {
239
- nativeRpc: (peerHostId, request) => callPeerNativeRpc(scopedProxy(request.signal), peerHostId, request),
240
- nativeStream: (peerHostId, request) => openPeerNativeStream(scopedProxy(request.signal), peerHostId, request),
265
+ nativeRpc: (peerHostId, request) => callPeerNativeRpc(httpProxy, peerHostId, request),
266
+ nativeStream: (peerHostId, request) => openPeerNativeStream(httpProxy, peerHostId, request),
241
267
  },
242
268
  });
243
269
  context.resources.add(() => aggregatedTransport.close());
270
+ const readNotificationSource = async (peerHostId, payload, signal) => {
271
+ const response = await httpProxy.request(peerHostId, {
272
+ scope: { hostId: localHostId, targetHostId: peerHostId, workspaceId: '__assistant_notifications__', sessionId: null, scopeGeneration: 0 },
273
+ path: '/api/codingns/assistant/notifications/source', method: 'POST',
274
+ body: JSON.stringify({ rpcId: `assistant-source-${randomUUID()}`, method: 'assistant/notifications/source', payload }), signal,
275
+ });
276
+ if ([404, 405, 501].includes(response.status))
277
+ throw new CodingNsRpcError('UNSUPPORTED_CAPABILITY', '远端不支持会话通知来源协议');
278
+ return readNativeRpcEnvelope(response.body);
279
+ };
244
280
  const assistantGateway = {
281
+ async validateNotificationTarget(target) {
282
+ if (target.hostId === localHostId)
283
+ return false;
284
+ const record = await store.get(target.hostId);
285
+ if (record === null || record.status === 'disabled' || record.status === 'identity_changed')
286
+ return false;
287
+ const workspaceId = assistantPeerNotificationWorkspaceIds(target.hostId, record.visibleWorkspaceIds ?? [], [target.workspaceId])[0];
288
+ if (workspaceId === undefined)
289
+ return false;
290
+ const signal = AbortSignal.timeout(5_000);
291
+ try {
292
+ const results = await aggregate.load(await buildSources([createVirtualWorkspaceId(target.hostId, workspaceId)], signal));
293
+ signal.throwIfAborted();
294
+ const present = results.some(result => result.targetHostId === target.hostId && result.availability === 'ready'
295
+ && result.workspaces.some(item => item.workspaceId === workspaceId
296
+ && item.sessions.some(session => session.scope.sessionId === target.sessionId && !session.blank)));
297
+ if (!present)
298
+ return false;
299
+ if (target.requestId === undefined)
300
+ return true;
301
+ const feed = readAssistantNotificationFeed(await readNotificationSource(target.hostId, { workspaceIds: [workspaceId] }, signal));
302
+ const actualSession = target.actualRequestTarget?.sessionId ?? target.sessionId;
303
+ return feed.pending.some(fact => (fact.actualRequestSessionId ?? fact.sessionId) === actualSession && fact.requestId === target.requestId && fact.kind === target.requestKind);
304
+ }
305
+ catch {
306
+ return false;
307
+ }
308
+ },
309
+ subscribeNotifications(managedWorkspaceIds, observer, signal) {
310
+ const subscription = new AssistantPeerNotifications({
311
+ observer,
312
+ nodes: async (signal) => {
313
+ signal.throwIfAborted();
314
+ const records = await store.list();
315
+ signal.throwIfAborted();
316
+ return records.filter(record => record.status !== 'disabled' && record.status !== 'identity_changed')
317
+ .map(record => ({
318
+ hostId: record.id, hostLabel: record.displayName,
319
+ capabilityKey: assistantPeerNotificationCapabilityKey(record),
320
+ workspaceIds: assistantPeerNotificationWorkspaceIds(record.id, record.visibleWorkspaceIds ?? [], managedWorkspaceIds),
321
+ })).filter(node => node.workspaceIds.length > 0);
322
+ },
323
+ read: async (node, payload, signal) => {
324
+ // 通知不依赖索引触发握手;只在缓存尚未 ready 时准备当前这台受管 Host。
325
+ const configured = await store.get(node.hostId);
326
+ if (configured === null)
327
+ throw new CodingNsRpcError('PEER_HOST_NOT_FOUND', 'PeerHost 不存在');
328
+ if (configured.status !== 'ready' && await preparePeerHost(configured) === null)
329
+ throw new CodingNsRpcError('PEER_HOST_NOT_READY', '远端 Host 暂不可达');
330
+ signal.throwIfAborted();
331
+ return readNotificationSource(node.hostId, payload, signal);
332
+ },
333
+ stream: (node, signal) => aggregatedTransport.openStream({
334
+ scope: { hostId: localHostId, targetHostId: node.hostId, workspaceId: '__assistant_notifications__', sessionId: null, scopeGeneration: 0 },
335
+ method: 'codingnsAssistantNotifications/sourceStream',
336
+ payload: { args: { request: { workspaceIds: node.workspaceIds } } },
337
+ signal,
338
+ }),
339
+ }, signal);
340
+ return subscription.start();
341
+ },
245
342
  async workspaces(signal) {
246
343
  signal?.throwIfAborted();
247
344
  const records = await store.list();
@@ -281,12 +378,12 @@ export function createPeerHostFeature(options = {}) {
281
378
  }
282
379
  }
283
380
  const remoteDetails = new Map();
284
- const readRemoteDetails = (session, readSignal) => {
381
+ const readRemoteDetails = (session, readSignal, toolCallId) => {
285
382
  readSignal?.throwIfAborted();
286
383
  if (session.hostId === localHostId) {
287
- return Promise.resolve({ summary: session.summary ?? null, waiting: session.waiting ?? null });
384
+ return Promise.resolve({ summary: session.summary ?? null, waiting: session.waiting ?? null, messages: [] });
288
385
  }
289
- const key = `${session.hostId}:${session.sessionId}`;
386
+ const key = `${session.hostId}:${session.sessionId}:${toolCallId ?? ''}`;
290
387
  const cached = remoteDetails.get(key);
291
388
  if (cached !== undefined)
292
389
  return cached;
@@ -327,6 +424,7 @@ export function createPeerHostFeature(options = {}) {
327
424
  return {
328
425
  summary: summarizeAssistantRemoteRecords(records),
329
426
  waiting: summarizeAssistantRemoteWaiting(records),
427
+ messages: appendAssistantSessionStream(readAssistantSessionMessages(records, { ...(toolCallId === undefined ? {} : { toolCallId }) }), value.assistantStream),
330
428
  };
331
429
  }
332
430
  }
@@ -334,7 +432,7 @@ export function createPeerHostFeature(options = {}) {
334
432
  readSignal?.throwIfAborted();
335
433
  // 单个远端会话不可读时保留其元数据,不能让整个索引失败。
336
434
  }
337
- return { summary: session.summary ?? null, waiting: session.waiting ?? null };
435
+ return { summary: session.summary ?? null, waiting: session.waiting ?? null, messages: [] };
338
436
  })();
339
437
  remoteDetails.set(key, promise);
340
438
  return promise;
@@ -347,6 +445,7 @@ export function createPeerHostFeature(options = {}) {
347
445
  warnings: failed ? ['部分远端 Host 暂不可达,已延后重试。'] : [],
348
446
  readSummary: async (session, signal) => (await readRemoteDetails(session, signal)).summary,
349
447
  readWaiting: async (session, signal) => (await readRemoteDetails(session, signal)).waiting,
448
+ readMessages: async (session, signal, toolCallId) => (await readRemoteDetails(session, signal, toolCallId)).messages,
350
449
  };
351
450
  },
352
451
  async dispatch(request, signal) {
@@ -485,12 +584,19 @@ export function createPeerHostFeature(options = {}) {
485
584
  : [];
486
585
  return toPeerHostClientRecord(await store.replaceVisibleWorkspaces(peerHostId, ids));
487
586
  }
587
+ case 'dismissDisconnectedWorkspace': {
588
+ await workspaceCache.dismiss(requiredString(input.peerHostId, 'peerHostId'), requiredString(input.workspaceId, 'workspaceId'));
589
+ return { removed: true };
590
+ }
488
591
  case 'wsEndpoint': return wsEndpoint;
489
592
  case 'aggregate': {
490
593
  // 顺序 Registry 必须认识本地工作区,即使本地 session 摘要在启动瞬间
491
594
  // 还没有准备好。否则 order 只会留下远端 ID,客户端拖拽到本地项时
492
595
  // 只能拒绝请求,表现为远端永远被固定在列表顶部。
493
- const results = ensureLocalWorkspaceSummaries(await aggregate.load(await buildSources()), context.services.dshContext);
596
+ const loaded = ensureLocalWorkspaceSummaries(await aggregate.load(await buildSources()), context.services.dshContext);
597
+ await markRecoveredPeerHosts(loaded);
598
+ // 测试注入的独立来源不受配置列表约束;生产摘要按当前添加状态恢复缓存。
599
+ const results = options.aggregateSources === undefined ? await workspaceCache.apply(loaded, await store.list()) : loaded;
494
600
  workspaceRegistry.replace(results);
495
601
  if (!workspaceOrderHydrated) {
496
602
  await workspaceRegistry.hydrateOrder();
@@ -523,6 +629,7 @@ export function createPeerHostFeature(options = {}) {
523
629
  scope,
524
630
  path: requiredString(input.path, 'path'),
525
631
  ...(input.method === undefined ? {} : { method: requiredString(input.method, 'method') }),
632
+ ...(input.headers === undefined ? {} : { headers: parseProxyHeaders(input.headers) }),
526
633
  ...(input.body === undefined ? {} : { body: requiredString(input.body, 'body') }),
527
634
  });
528
635
  }
@@ -546,13 +653,14 @@ export function createPeerHostFeature(options = {}) {
546
653
  const payload = rewriteNativeRequestIds(method, input.payload, createScopedNativeIdResolver(workspaceRegistry, scope));
547
654
  // 句柄由 nativeStreamNext/Close 轮询管理,不绑定本次 HTTP 请求的 signal:
548
655
  // 该 signal 会在 nativeStream 响应返回后立即中止,导致第一次 next 直接结束。
549
- const stream = aggregatedTransport.openStream({ scope, method, payload });
550
- const targetHostId = scope.targetHostId;
551
- const iterator = targetHostId === null
552
- ? stream[Symbol.asyncIterator]()
553
- : mapAsyncIterator(stream[Symbol.asyncIterator](), (value) => rewriteNativeResponseIds(value, (id) => createVirtualWorkspaceId(targetHostId, id), (id) => createVirtualSessionId(targetHostId, id)));
554
- const streamId = randomUUID();
555
- nativeStreams.set(streamId, { iterator, scope, expiresAt: Date.now() + NATIVE_STREAM_TTL_MS });
656
+ const streamId = await nativeStreams.open(scope, (signal) => {
657
+ const stream = aggregatedTransport.openStream({ scope, method, payload, signal });
658
+ const targetHostId = scope.targetHostId;
659
+ if (targetHostId === null)
660
+ return stream;
661
+ const iterator = mapAsyncIterator(stream[Symbol.asyncIterator](), (value) => rewriteNativeResponseIds(value, (id) => createVirtualWorkspaceId(targetHostId, id), (id) => createVirtualSessionId(targetHostId, id), method));
662
+ return { [Symbol.asyncIterator]: () => iterator };
663
+ });
556
664
  return { streamId };
557
665
  }
558
666
  case 'nativeStreamOpen': {
@@ -563,29 +671,18 @@ export function createPeerHostFeature(options = {}) {
563
671
  // 句柄会在后续 nativeStreamNext/Close 中被轮询管理,不能绑定到本次 HTTP 请求的短生命周期 signal。
564
672
  if (dshNativeDispatch === undefined)
565
673
  throw new CodingNsRpcError('CODINGNS_RPC_UNSUPPORTED', '当前 Host 未提供 DSH Typert Gateway');
566
- const stream = await dshNativeDispatch.stream(method, input.payload);
567
- if (!isAsyncIterable(stream))
568
- throw new CodingNsRpcError('CODINGNS_RPC_UNSUPPORTED', `DSH 原生 Remote 方法不是流: ${method}`);
569
- const streamId = randomUUID();
570
- nativeStreams.set(streamId, { iterator: stream[Symbol.asyncIterator](), scope, expiresAt: Date.now() + NATIVE_STREAM_TTL_MS });
674
+ const streamId = await nativeStreams.open(scope, async (signal) => {
675
+ const stream = await dshNativeDispatch.stream(method, input.payload, signal);
676
+ if (!isAsyncIterable(stream))
677
+ throw new CodingNsRpcError('CODINGNS_RPC_UNSUPPORTED', `DSH 原生 Remote 方法不是流: ${method}`);
678
+ return stream;
679
+ });
571
680
  return { streamId };
572
681
  }
573
682
  case 'nativeStreamNext': {
574
683
  const streamId = requiredString(input.streamId, 'streamId');
575
- const stream = nativeStreams.get(streamId);
576
- if (stream === undefined || stream.expiresAt < Date.now()) {
577
- if (stream?.iterator.return !== undefined)
578
- await stream.iterator.return();
579
- nativeStreams.delete(streamId);
580
- throw new CodingNsRpcError('CODINGNS_RPC_NOT_FOUND', 'DSH 原生 Remote 流已失效');
581
- }
582
684
  const scope = parseScope(input.scope);
583
- assertSameScope(stream.scope, scope);
584
- // 每次轮询都算一次心跳:空闲会话的 next 会长时间挂起,不能只在出帧时续期。
585
- nativeStreams.set(streamId, { ...stream, expiresAt: Date.now() + NATIVE_STREAM_TTL_MS });
586
- const next = await stream.iterator.next();
587
- if (next.done === true)
588
- nativeStreams.delete(streamId);
685
+ const next = await nativeStreams.next(streamId, scope, rpcContext?.signal);
589
686
  return {
590
687
  done: next.done === true,
591
688
  ...(next.done === true ? {} : { value: encodeNativeResponseBytes(next.value) }),
@@ -593,10 +690,7 @@ export function createPeerHostFeature(options = {}) {
593
690
  }
594
691
  case 'nativeStreamClose': {
595
692
  const streamId = requiredString(input.streamId, 'streamId');
596
- const stream = nativeStreams.get(streamId);
597
- nativeStreams.delete(streamId);
598
- if (stream?.iterator.return !== undefined)
599
- await stream.iterator.return();
693
+ await nativeStreams.close(streamId, parseScope(input.scope));
600
694
  return { closed: true };
601
695
  }
602
696
  case 'native': {
@@ -605,18 +699,17 @@ export function createPeerHostFeature(options = {}) {
605
699
  throw new CodingNsRpcError('CODINGNS_RPC_NOT_FOUND', `未知 DSH 原生 Remote 方法: ${method}`);
606
700
  const scope = parseScope(input.scope);
607
701
  const rewritten = rewriteNativeRequestIds(method, input.payload, createScopedNativeIdResolver(workspaceRegistry, scope));
608
- const value = await aggregatedTransport.rpc({ scope, method, payload: rewritten });
702
+ const signal = rpcContext?.signal;
703
+ const value = await aggregatedTransport.rpc({ scope, method, payload: rewritten, ...(signal === undefined ? {} : { signal }) });
609
704
  const virtualHostId = scope.targetHostId ?? scope.hostId;
610
- return encodeNativeResponseBytes(rewriteNativeResponseIds(value, (id) => createVirtualWorkspaceId(virtualHostId, id), (id) => createVirtualSessionId(virtualHostId, id)));
705
+ return encodeNativeResponseBytes(rewriteNativeResponseIds(value, (id) => createVirtualWorkspaceId(virtualHostId, id), (id) => createVirtualSessionId(virtualHostId, id), method));
611
706
  }
612
707
  default: throw new CodingNsRpcError('CODINGNS_RPC_NOT_FOUND', `未知 PeerHost RPC: peerHost/${action}`);
613
708
  }
614
709
  });
615
710
  context.resources.add(unregister);
616
711
  context.resources.add(() => {
617
- for (const stream of nativeStreams.values())
618
- void stream.iterator.return?.();
619
- nativeStreams.clear();
712
+ nativeStreams.dispose();
620
713
  });
621
714
  },
622
715
  };
@@ -793,11 +886,6 @@ function finiteNumber(value) {
793
886
  function isAsyncIterable(value) {
794
887
  return typeof value === 'object' && value !== null && typeof value[Symbol.asyncIterator] === 'function';
795
888
  }
796
- function assertSameScope(expected, actual) {
797
- if (expected.hostId !== actual.hostId || expected.targetHostId !== actual.targetHostId || expected.workspaceId !== actual.workspaceId || expected.sessionId !== actual.sessionId || expected.scopeGeneration !== actual.scopeGeneration) {
798
- throw new CodingNsRpcError('CODINGNS_RPC_SCOPE_MISMATCH', 'DSH 原生 Remote 流作用域不匹配');
799
- }
800
- }
801
889
  async function authorizePeerHostUpgrade(loginStore, request) {
802
890
  const origin = request.headers.origin;
803
891
  const host = request.headers.host;
@@ -908,6 +996,18 @@ function record(value) {
908
996
  throw new TypeError('PeerHost RPC 参数必须是对象');
909
997
  return value;
910
998
  }
999
+ /** 解析页面侧转发的有限请求头,拒绝非字符串值与原型对象。 */
1000
+ function parseProxyHeaders(value) {
1001
+ const input = record(value);
1002
+ const headers = {};
1003
+ for (const [name, raw] of Object.entries(input)) {
1004
+ if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(name) || typeof raw !== 'string') {
1005
+ throw new TypeError('headers 必须是合法的字符串键值');
1006
+ }
1007
+ headers[name] = raw;
1008
+ }
1009
+ return headers;
1010
+ }
911
1011
  /**
912
1012
  * 解析工作区标签配色。
913
1013
  *
@@ -936,7 +1036,10 @@ function requiredString(value, field) {
936
1036
  * 当成可路由资源。
937
1037
  */
938
1038
  export function createScopedNativeIdResolver(registry, scope) {
1039
+ const workspacePath = scope.targetHostId === null ? undefined
1040
+ : registry.get(createVirtualWorkspaceId(scope.targetHostId, scope.workspaceId))?.path;
939
1041
  return {
1042
+ ...(workspacePath === undefined ? {} : { workspacePath }),
940
1043
  resolveWorkspace(id) {
941
1044
  const known = registry.resolveWorkspace(id);
942
1045
  if (known !== null)
@@ -1058,6 +1161,21 @@ function isRecordValue(value) {
1058
1161
  function textValue(value) {
1059
1162
  return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
1060
1163
  }
1164
+ /** 记录 Host 进程已观察到的完成会话,供稍后建立的 PeerHost 事件流补发。 */
1165
+ function registerPeerHostCompletionStatusListener(ctx, completed) {
1166
+ if (ctx === undefined || typeof ctx.on !== 'function')
1167
+ return undefined;
1168
+ const listener = (sessionId, running) => {
1169
+ if (typeof sessionId !== 'string' || typeof running !== 'boolean')
1170
+ return;
1171
+ if (running)
1172
+ completed.delete(sessionId);
1173
+ else
1174
+ completed.add(sessionId);
1175
+ };
1176
+ const disposer = ctx.on('api-session/status', listener, { global: true });
1177
+ return typeof disposer === 'function' ? disposer : undefined;
1178
+ }
1061
1179
  /** 将初始化竞态期间原生列表传来的本地裸 ID解析为顺序 Registry 的虚拟 ID。 */
1062
1180
  function resolveWorkspaceOrderId(value, registry, localHostId) {
1063
1181
  if (parseVirtualWorkspaceId(value) !== null)