@jingyi0605/codingns4dsh 0.2.0-beta.2 → 0.2.0-rc3

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 (604) hide show
  1. package/README.en.md +4 -4
  2. package/README.md +18 -7
  3. package/assets/provider-icons/antigravity.svg +39 -0
  4. package/assets/provider-icons/codebuddy.svg +37 -0
  5. package/assets/provider-icons/cursor-cli.svg +1 -0
  6. package/assets/provider-icons/kiro-cli.svg +11 -0
  7. package/assets/provider-icons/minimax-code.svg +4 -0
  8. package/assets/provider-icons/qoder-cn.svg +5 -0
  9. package/assets/provider-icons/qoder.svg +5 -0
  10. package/assets/provider-icons/workbuddy.svg +29 -0
  11. package/assets/provider-icons/zcode.svg +14 -0
  12. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.d.ts.map +1 -1
  13. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js +78 -1
  14. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js.map +1 -1
  15. package/data/build/dist/client/account-bar.d.ts +2 -1
  16. package/data/build/dist/client/account-bar.d.ts.map +1 -1
  17. package/data/build/dist/client/account-bar.js +21 -16
  18. package/data/build/dist/client/account-bar.js.map +1 -1
  19. package/data/build/dist/client/bundle.js +8147 -2158
  20. package/data/build/dist/client/bundle.js.map +1 -1
  21. package/data/build/dist/client/cli-catalog.d.ts +1 -1
  22. package/data/build/dist/client/cli-catalog.d.ts.map +1 -1
  23. package/data/build/dist/client/cli-catalog.js +11 -5
  24. package/data/build/dist/client/cli-catalog.js.map +1 -1
  25. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  26. package/data/build/dist/client/cli-slots.js +127 -21
  27. package/data/build/dist/client/cli-slots.js.map +1 -1
  28. package/data/build/dist/client/debug/ui.d.ts +2 -1
  29. package/data/build/dist/client/debug/ui.d.ts.map +1 -1
  30. package/data/build/dist/client/debug/ui.js +41 -34
  31. package/data/build/dist/client/debug/ui.js.map +1 -1
  32. package/data/build/dist/client/delegate-command.d.ts +17 -0
  33. package/data/build/dist/client/delegate-command.d.ts.map +1 -0
  34. package/data/build/dist/client/delegate-command.js +597 -0
  35. package/data/build/dist/client/delegate-command.js.map +1 -0
  36. package/data/build/dist/client/delegate-plan.d.ts +40 -0
  37. package/data/build/dist/client/delegate-plan.d.ts.map +1 -0
  38. package/data/build/dist/client/delegate-plan.js +63 -0
  39. package/data/build/dist/client/delegate-plan.js.map +1 -0
  40. package/data/build/dist/client/delegate-ui-dom.d.ts +86 -0
  41. package/data/build/dist/client/delegate-ui-dom.d.ts.map +1 -0
  42. package/data/build/dist/client/delegate-ui-dom.js +647 -0
  43. package/data/build/dist/client/delegate-ui-dom.js.map +1 -0
  44. package/data/build/dist/client/external-tool-stream.d.ts.map +1 -1
  45. package/data/build/dist/client/external-tool-stream.js +44 -36
  46. package/data/build/dist/client/external-tool-stream.js.map +1 -1
  47. package/data/build/dist/client/features/cli-adapters.d.ts +7 -2
  48. package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
  49. package/data/build/dist/client/features/cli-adapters.js +153 -95
  50. package/data/build/dist/client/features/cli-adapters.js.map +1 -1
  51. package/data/build/dist/client/features/debug.d.ts.map +1 -1
  52. package/data/build/dist/client/features/debug.js +5 -3
  53. package/data/build/dist/client/features/debug.js.map +1 -1
  54. package/data/build/dist/client/features/file-management.d.ts.map +1 -1
  55. package/data/build/dist/client/features/file-management.js +7 -4
  56. package/data/build/dist/client/features/file-management.js.map +1 -1
  57. package/data/build/dist/client/features/lan-access-panel.js +10 -10
  58. package/data/build/dist/client/features/lan-access-panel.js.map +1 -1
  59. package/data/build/dist/client/features/lan-access.d.ts.map +1 -1
  60. package/data/build/dist/client/features/lan-access.js +8 -3
  61. package/data/build/dist/client/features/lan-access.js.map +1 -1
  62. package/data/build/dist/client/features/login-protection-panel.d.ts.map +1 -1
  63. package/data/build/dist/client/features/login-protection-panel.js +9 -7
  64. package/data/build/dist/client/features/login-protection-panel.js.map +1 -1
  65. package/data/build/dist/client/features/login-protection.js +2 -2
  66. package/data/build/dist/client/features/login-protection.js.map +1 -1
  67. package/data/build/dist/client/features/mobile-access-panel.d.ts.map +1 -1
  68. package/data/build/dist/client/features/mobile-access-panel.js +8 -7
  69. package/data/build/dist/client/features/mobile-access-panel.js.map +1 -1
  70. package/data/build/dist/client/features/mobile-access.d.ts.map +1 -1
  71. package/data/build/dist/client/features/mobile-access.js +6 -2
  72. package/data/build/dist/client/features/mobile-access.js.map +1 -1
  73. package/data/build/dist/client/features/peer-host.d.ts +6 -4
  74. package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
  75. package/data/build/dist/client/features/peer-host.js +459 -27
  76. package/data/build/dist/client/features/peer-host.js.map +1 -1
  77. package/data/build/dist/client/features/reverse-proxy.js +2 -2
  78. package/data/build/dist/client/features/reverse-proxy.js.map +1 -1
  79. package/data/build/dist/client/features/terminal-enhancement.js +2 -2
  80. package/data/build/dist/client/features/terminal-enhancement.js.map +1 -1
  81. package/data/build/dist/client/features/workspace-session-enhancement-panel.js +1 -1
  82. package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -1
  83. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
  84. package/data/build/dist/client/features/workspace-session-enhancement.js +8 -3
  85. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
  86. package/data/build/dist/client/file-management-dom.d.ts +3 -0
  87. package/data/build/dist/client/file-management-dom.d.ts.map +1 -1
  88. package/data/build/dist/client/file-management-dom.js +41 -30
  89. package/data/build/dist/client/file-management-dom.js.map +1 -1
  90. package/data/build/dist/client/git-history-graph.d.ts +2 -2
  91. package/data/build/dist/client/git-history-graph.d.ts.map +1 -1
  92. package/data/build/dist/client/git-history-graph.js +2 -2
  93. package/data/build/dist/client/git-history-graph.js.map +1 -1
  94. package/data/build/dist/client/git-management.d.ts +2 -0
  95. package/data/build/dist/client/git-management.d.ts.map +1 -1
  96. package/data/build/dist/client/git-management.js +103 -75
  97. package/data/build/dist/client/git-management.js.map +1 -1
  98. package/data/build/dist/client/git-workspace-events.d.ts +7 -0
  99. package/data/build/dist/client/git-workspace-events.d.ts.map +1 -0
  100. package/data/build/dist/client/git-workspace-events.js +32 -0
  101. package/data/build/dist/client/git-workspace-events.js.map +1 -0
  102. package/data/build/dist/client/index.d.ts +2 -0
  103. package/data/build/dist/client/index.d.ts.map +1 -1
  104. package/data/build/dist/client/index.js +6 -5
  105. package/data/build/dist/client/index.js.map +1 -1
  106. package/data/build/dist/client/locale.d.ts +7 -0
  107. package/data/build/dist/client/locale.d.ts.map +1 -1
  108. package/data/build/dist/client/locale.js +140 -42
  109. package/data/build/dist/client/locale.js.map +1 -1
  110. package/data/build/dist/client/locales/debug.d.ts +9 -0
  111. package/data/build/dist/client/locales/debug.d.ts.map +1 -0
  112. package/data/build/dist/client/locales/debug.js +163 -0
  113. package/data/build/dist/client/locales/debug.js.map +1 -0
  114. package/data/build/dist/client/locales/fileWorkspace.d.ts +9 -0
  115. package/data/build/dist/client/locales/fileWorkspace.d.ts.map +1 -0
  116. package/data/build/dist/client/locales/fileWorkspace.js +139 -0
  117. package/data/build/dist/client/locales/fileWorkspace.js.map +1 -0
  118. package/data/build/dist/client/locales/git.d.ts +9 -0
  119. package/data/build/dist/client/locales/git.d.ts.map +1 -0
  120. package/data/build/dist/client/locales/git.js +223 -0
  121. package/data/build/dist/client/locales/git.js.map +1 -0
  122. package/data/build/dist/client/locales/panels.d.ts +9 -0
  123. package/data/build/dist/client/locales/panels.d.ts.map +1 -0
  124. package/data/build/dist/client/locales/panels.js +33 -0
  125. package/data/build/dist/client/locales/panels.js.map +1 -0
  126. package/data/build/dist/client/locales/peerHost.d.ts +9 -0
  127. package/data/build/dist/client/locales/peerHost.d.ts.map +1 -0
  128. package/data/build/dist/client/locales/peerHost.js +153 -0
  129. package/data/build/dist/client/locales/peerHost.js.map +1 -0
  130. package/data/build/dist/client/locales/peerHostWorkspace.d.ts +9 -0
  131. package/data/build/dist/client/locales/peerHostWorkspace.d.ts.map +1 -0
  132. package/data/build/dist/client/locales/peerHostWorkspace.js +69 -0
  133. package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -0
  134. package/data/build/dist/client/locales/terminalAuth.d.ts +9 -0
  135. package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -0
  136. package/data/build/dist/client/locales/terminalAuth.js +71 -0
  137. package/data/build/dist/client/locales/terminalAuth.js.map +1 -0
  138. package/data/build/dist/client/locales/usage.d.ts +9 -0
  139. package/data/build/dist/client/locales/usage.d.ts.map +1 -0
  140. package/data/build/dist/client/locales/usage.js +215 -0
  141. package/data/build/dist/client/locales/usage.js.map +1 -0
  142. package/data/build/dist/client/mobile-session-interaction.d.ts +44 -0
  143. package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -0
  144. package/data/build/dist/client/mobile-session-interaction.js +308 -0
  145. package/data/build/dist/client/mobile-session-interaction.js.map +1 -0
  146. package/data/build/dist/client/mobile-sidebar-gestures.d.ts +55 -7
  147. package/data/build/dist/client/mobile-sidebar-gestures.d.ts.map +1 -1
  148. package/data/build/dist/client/mobile-sidebar-gestures.js +339 -40
  149. package/data/build/dist/client/mobile-sidebar-gestures.js.map +1 -1
  150. package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts +10 -2
  151. package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts.map +1 -1
  152. package/data/build/dist/client/mobile-sidebar-rail-dom.js +14 -6
  153. package/data/build/dist/client/mobile-sidebar-rail-dom.js.map +1 -1
  154. package/data/build/dist/client/model-catalog-cache.d.ts +5 -0
  155. package/data/build/dist/client/model-catalog-cache.d.ts.map +1 -0
  156. package/data/build/dist/client/model-catalog-cache.js +58 -0
  157. package/data/build/dist/client/model-catalog-cache.js.map +1 -0
  158. package/data/build/dist/client/peer-host-aggregate-refresh.d.ts +7 -0
  159. package/data/build/dist/client/peer-host-aggregate-refresh.d.ts.map +1 -1
  160. package/data/build/dist/client/peer-host-aggregate-refresh.js +13 -1
  161. package/data/build/dist/client/peer-host-aggregate-refresh.js.map +1 -1
  162. package/data/build/dist/client/peer-host-connection-button.d.ts +14 -1
  163. package/data/build/dist/client/peer-host-connection-button.d.ts.map +1 -1
  164. package/data/build/dist/client/peer-host-connection-button.js +12 -4
  165. package/data/build/dist/client/peer-host-connection-button.js.map +1 -1
  166. package/data/build/dist/client/peer-host-management-panel.d.ts +3 -0
  167. package/data/build/dist/client/peer-host-management-panel.d.ts.map +1 -1
  168. package/data/build/dist/client/peer-host-management-panel.js +83 -79
  169. package/data/build/dist/client/peer-host-management-panel.js.map +1 -1
  170. package/data/build/dist/client/peer-host-native-projection.d.ts +17 -1
  171. package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
  172. package/data/build/dist/client/peer-host-native-projection.js +54 -8
  173. package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
  174. package/data/build/dist/client/peer-host-native-store-projection.d.ts +6 -2
  175. package/data/build/dist/client/peer-host-native-store-projection.d.ts.map +1 -1
  176. package/data/build/dist/client/peer-host-native-store-projection.js +308 -10
  177. package/data/build/dist/client/peer-host-native-store-projection.js.map +1 -1
  178. package/data/build/dist/client/peer-host-scoped-client.js +5 -5
  179. package/data/build/dist/client/peer-host-scoped-client.js.map +1 -1
  180. package/data/build/dist/client/peer-host-workspace-tab.d.ts +8 -0
  181. package/data/build/dist/client/peer-host-workspace-tab.d.ts.map +1 -1
  182. package/data/build/dist/client/peer-host-workspace-tab.js +48 -28
  183. package/data/build/dist/client/peer-host-workspace-tab.js.map +1 -1
  184. package/data/build/dist/client/provider-icon-assets.js +18 -0
  185. package/data/build/dist/client/provider-icon-assets.js.map +1 -1
  186. package/data/build/dist/client/provider-icons.d.ts +8 -2
  187. package/data/build/dist/client/provider-icons.d.ts.map +1 -1
  188. package/data/build/dist/client/provider-icons.js +28 -7
  189. package/data/build/dist/client/provider-icons.js.map +1 -1
  190. package/data/build/dist/client/pwa-install-prompt.d.ts +4 -1
  191. package/data/build/dist/client/pwa-install-prompt.d.ts.map +1 -1
  192. package/data/build/dist/client/pwa-install-prompt.js +8 -7
  193. package/data/build/dist/client/pwa-install-prompt.js.map +1 -1
  194. package/data/build/dist/client/quick-phrase-layout.d.ts +11 -0
  195. package/data/build/dist/client/quick-phrase-layout.d.ts.map +1 -1
  196. package/data/build/dist/client/quick-phrase-layout.js +20 -0
  197. package/data/build/dist/client/quick-phrase-layout.js.map +1 -1
  198. package/data/build/dist/client/quick-phrase-slot.d.ts.map +1 -1
  199. package/data/build/dist/client/quick-phrase-slot.js +20 -8
  200. package/data/build/dist/client/quick-phrase-slot.js.map +1 -1
  201. package/data/build/dist/client/remote-web-context.js +10 -6
  202. package/data/build/dist/client/remote-web-context.js.map +1 -1
  203. package/data/build/dist/client/service-tier.d.ts +54 -0
  204. package/data/build/dist/client/service-tier.d.ts.map +1 -0
  205. package/data/build/dist/client/service-tier.js +78 -0
  206. package/data/build/dist/client/service-tier.js.map +1 -0
  207. package/data/build/dist/client/session-changed-files-view.d.ts +8 -1
  208. package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -1
  209. package/data/build/dist/client/session-changed-files-view.js +71 -28
  210. package/data/build/dist/client/session-changed-files-view.js.map +1 -1
  211. package/data/build/dist/client/settings-anchor.d.ts +9 -3
  212. package/data/build/dist/client/settings-anchor.d.ts.map +1 -1
  213. package/data/build/dist/client/settings-anchor.js +8 -2
  214. package/data/build/dist/client/settings-anchor.js.map +1 -1
  215. package/data/build/dist/client/settings-promo-styles.d.ts +28 -0
  216. package/data/build/dist/client/settings-promo-styles.d.ts.map +1 -0
  217. package/data/build/dist/client/settings-promo-styles.js +58 -0
  218. package/data/build/dist/client/settings-promo-styles.js.map +1 -0
  219. package/data/build/dist/client/settings-promo.d.ts +14 -0
  220. package/data/build/dist/client/settings-promo.d.ts.map +1 -0
  221. package/data/build/dist/client/settings-promo.js +68 -0
  222. package/data/build/dist/client/settings-promo.js.map +1 -0
  223. package/data/build/dist/client/settings-section.d.ts +2 -1
  224. package/data/build/dist/client/settings-section.d.ts.map +1 -1
  225. package/data/build/dist/client/settings-section.js +10 -7
  226. package/data/build/dist/client/settings-section.js.map +1 -1
  227. package/data/build/dist/client/subscription-slot.d.ts +4 -1
  228. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  229. package/data/build/dist/client/subscription-slot.js +497 -56
  230. package/data/build/dist/client/subscription-slot.js.map +1 -1
  231. package/data/build/dist/client/terminal/model.d.ts +94 -4
  232. package/data/build/dist/client/terminal/model.d.ts.map +1 -1
  233. package/data/build/dist/client/terminal/model.js +392 -33
  234. package/data/build/dist/client/terminal/model.js.map +1 -1
  235. package/data/build/dist/client/terminal/recovery.d.ts +16 -1
  236. package/data/build/dist/client/terminal/recovery.d.ts.map +1 -1
  237. package/data/build/dist/client/terminal/recovery.js +101 -39
  238. package/data/build/dist/client/terminal/recovery.js.map +1 -1
  239. package/data/build/dist/client/terminal/styles.d.ts +10 -0
  240. package/data/build/dist/client/terminal/styles.d.ts.map +1 -1
  241. package/data/build/dist/client/terminal/styles.js +27 -3
  242. package/data/build/dist/client/terminal/styles.js.map +1 -1
  243. package/data/build/dist/client/terminal/ui.d.ts +3 -2
  244. package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
  245. package/data/build/dist/client/terminal/ui.js +216 -103
  246. package/data/build/dist/client/terminal/ui.js.map +1 -1
  247. package/data/build/dist/client/terminal/xterm-view.d.ts +8 -1
  248. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
  249. package/data/build/dist/client/terminal/xterm-view.js +394 -34
  250. package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
  251. package/data/build/dist/client/workspace-session-archive-dom.d.ts +3 -0
  252. package/data/build/dist/client/workspace-session-archive-dom.d.ts.map +1 -1
  253. package/data/build/dist/client/workspace-session-archive-dom.js +131 -45
  254. package/data/build/dist/client/workspace-session-archive-dom.js.map +1 -1
  255. package/data/build/dist/client/workspace-session-logo-dom.d.ts +3 -0
  256. package/data/build/dist/client/workspace-session-logo-dom.d.ts.map +1 -1
  257. package/data/build/dist/client/workspace-session-logo-dom.js +3 -1
  258. package/data/build/dist/client/workspace-session-logo-dom.js.map +1 -1
  259. package/data/build/dist/client/workspace-session-visibility-dom.d.ts +3 -0
  260. package/data/build/dist/client/workspace-session-visibility-dom.d.ts.map +1 -1
  261. package/data/build/dist/client/workspace-session-visibility-dom.js +46 -17
  262. package/data/build/dist/client/workspace-session-visibility-dom.js.map +1 -1
  263. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +10 -0
  264. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
  265. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +20 -0
  266. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
  267. package/data/build/dist/host/browser-text.d.ts +30 -0
  268. package/data/build/dist/host/browser-text.d.ts.map +1 -0
  269. package/data/build/dist/host/browser-text.js +105 -0
  270. package/data/build/dist/host/browser-text.js.map +1 -0
  271. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +58 -0
  272. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -0
  273. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +271 -0
  274. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -0
  275. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts +30 -0
  276. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts.map +1 -0
  277. package/data/build/dist/host/cli-adapters/antigravity-driver.js +210 -0
  278. package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -0
  279. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +28 -2
  280. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  281. package/data/build/dist/host/cli-adapters/claude-driver.js +74 -4
  282. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  283. package/data/build/dist/host/cli-adapters/claude-model-options.d.ts.map +1 -1
  284. package/data/build/dist/host/cli-adapters/claude-model-options.js +22 -9
  285. package/data/build/dist/host/cli-adapters/claude-model-options.js.map +1 -1
  286. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts +139 -0
  287. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -0
  288. package/data/build/dist/host/cli-adapters/codebuddy-driver.js +1721 -0
  289. package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -0
  290. package/data/build/dist/host/cli-adapters/codebuddy-subscription.d.ts +53 -0
  291. package/data/build/dist/host/cli-adapters/codebuddy-subscription.d.ts.map +1 -0
  292. package/data/build/dist/host/cli-adapters/codebuddy-subscription.js +778 -0
  293. package/data/build/dist/host/cli-adapters/codebuddy-subscription.js.map +1 -0
  294. package/data/build/dist/host/cli-adapters/codex-driver.d.ts +22 -0
  295. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  296. package/data/build/dist/host/cli-adapters/codex-driver.js +254 -7
  297. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  298. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts +43 -3
  299. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  300. package/data/build/dist/host/cli-adapters/command-code-driver.js +681 -74
  301. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  302. package/data/build/dist/host/cli-adapters/command-code-history.d.ts +147 -0
  303. package/data/build/dist/host/cli-adapters/command-code-history.d.ts.map +1 -0
  304. package/data/build/dist/host/cli-adapters/command-code-history.js +659 -0
  305. package/data/build/dist/host/cli-adapters/command-code-history.js.map +1 -0
  306. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts +12 -0
  307. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts.map +1 -0
  308. package/data/build/dist/host/cli-adapters/cursor-driver.js +20 -0
  309. package/data/build/dist/host/cli-adapters/cursor-driver.js.map +1 -0
  310. package/data/build/dist/host/cli-adapters/custom-upstream-classifier.d.ts +67 -0
  311. package/data/build/dist/host/cli-adapters/custom-upstream-classifier.d.ts.map +1 -0
  312. package/data/build/dist/host/cli-adapters/custom-upstream-classifier.js +169 -0
  313. package/data/build/dist/host/cli-adapters/custom-upstream-classifier.js.map +1 -0
  314. package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts +48 -0
  315. package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts.map +1 -0
  316. package/data/build/dist/host/cli-adapters/delegate-dispatch.js +111 -0
  317. package/data/build/dist/host/cli-adapters/delegate-dispatch.js.map +1 -0
  318. package/data/build/dist/host/cli-adapters/delegation-authorization.d.ts +19 -0
  319. package/data/build/dist/host/cli-adapters/delegation-authorization.d.ts.map +1 -0
  320. package/data/build/dist/host/cli-adapters/delegation-authorization.js +49 -0
  321. package/data/build/dist/host/cli-adapters/delegation-authorization.js.map +1 -0
  322. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.d.ts +34 -0
  323. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.d.ts.map +1 -0
  324. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js +121 -0
  325. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js.map +1 -0
  326. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts +32 -0
  327. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts.map +1 -0
  328. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js +121 -0
  329. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js.map +1 -0
  330. package/data/build/dist/host/cli-adapters/driver.d.ts +6 -0
  331. package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -1
  332. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  333. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +5 -4
  334. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  335. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts +16 -0
  336. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts.map +1 -0
  337. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js +73 -0
  338. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js.map +1 -0
  339. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  340. package/data/build/dist/host/cli-adapters/feature.js +459 -26
  341. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  342. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
  343. package/data/build/dist/host/cli-adapters/gemini-driver.js +21 -5
  344. package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
  345. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  346. package/data/build/dist/host/cli-adapters/grok-driver.js +24 -7
  347. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  348. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts +22 -6
  349. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
  350. package/data/build/dist/host/cli-adapters/json-rpc-process.js +118 -21
  351. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
  352. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
  353. package/data/build/dist/host/cli-adapters/kimi-driver.js +25 -4
  354. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
  355. package/data/build/dist/host/cli-adapters/kiro-driver.d.ts +12 -0
  356. package/data/build/dist/host/cli-adapters/kiro-driver.d.ts.map +1 -0
  357. package/data/build/dist/host/cli-adapters/kiro-driver.js +18 -0
  358. package/data/build/dist/host/cli-adapters/kiro-driver.js.map +1 -0
  359. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts +11 -2
  360. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts.map +1 -1
  361. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js +26 -6
  362. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js.map +1 -1
  363. package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts +23 -0
  364. package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts.map +1 -0
  365. package/data/build/dist/host/cli-adapters/mcode-catalog.js +120 -0
  366. package/data/build/dist/host/cli-adapters/mcode-catalog.js.map +1 -0
  367. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts +56 -0
  368. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -0
  369. package/data/build/dist/host/cli-adapters/mcode-driver.js +544 -0
  370. package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -0
  371. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +35 -5
  372. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
  373. package/data/build/dist/host/cli-adapters/model-catalog.js +213 -8
  374. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
  375. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +81 -0
  376. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -0
  377. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +299 -0
  378. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -0
  379. package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts +4 -0
  380. package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts.map +1 -0
  381. package/data/build/dist/host/cli-adapters/native-subagent-holder.js +4 -0
  382. package/data/build/dist/host/cli-adapters/native-subagent-holder.js.map +1 -0
  383. package/data/build/dist/host/cli-adapters/native-team-proxy.js +18 -15
  384. package/data/build/dist/host/cli-adapters/native-team-proxy.js.map +1 -1
  385. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +57 -0
  386. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -0
  387. package/data/build/dist/host/cli-adapters/native-team-subagent.js +126 -0
  388. package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -0
  389. package/data/build/dist/host/cli-adapters/new-api-subscription.d.ts +75 -0
  390. package/data/build/dist/host/cli-adapters/new-api-subscription.d.ts.map +1 -0
  391. package/data/build/dist/host/cli-adapters/new-api-subscription.js +959 -0
  392. package/data/build/dist/host/cli-adapters/new-api-subscription.js.map +1 -0
  393. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  394. package/data/build/dist/host/cli-adapters/opencode-driver.js +22 -10
  395. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  396. package/data/build/dist/host/cli-adapters/pi-driver.js +24 -7
  397. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  398. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +41 -4
  399. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
  400. package/data/build/dist/host/cli-adapters/provider-subscription.js +254 -40
  401. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
  402. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts +71 -0
  403. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts.map +1 -0
  404. package/data/build/dist/host/cli-adapters/qoder-driver.js +553 -0
  405. package/data/build/dist/host/cli-adapters/qoder-driver.js.map +1 -0
  406. package/data/build/dist/host/cli-adapters/qoder-subscription.d.ts +31 -0
  407. package/data/build/dist/host/cli-adapters/qoder-subscription.d.ts.map +1 -0
  408. package/data/build/dist/host/cli-adapters/qoder-subscription.js +178 -0
  409. package/data/build/dist/host/cli-adapters/qoder-subscription.js.map +1 -0
  410. package/data/build/dist/host/cli-adapters/registry-holder.d.ts +4 -0
  411. package/data/build/dist/host/cli-adapters/registry-holder.d.ts.map +1 -0
  412. package/data/build/dist/host/cli-adapters/registry-holder.js +9 -0
  413. package/data/build/dist/host/cli-adapters/registry-holder.js.map +1 -0
  414. package/data/build/dist/host/cli-adapters/registry.d.ts +54 -2
  415. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  416. package/data/build/dist/host/cli-adapters/registry.js +224 -18
  417. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  418. package/data/build/dist/host/cli-adapters/session-store.d.ts +10 -1
  419. package/data/build/dist/host/cli-adapters/session-store.d.ts.map +1 -1
  420. package/data/build/dist/host/cli-adapters/session-store.js +60 -6
  421. package/data/build/dist/host/cli-adapters/session-store.js.map +1 -1
  422. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +16 -1
  423. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  424. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +150 -26
  425. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  426. package/data/build/dist/host/cli-adapters/stream-normalizer.d.ts +10 -1
  427. package/data/build/dist/host/cli-adapters/stream-normalizer.d.ts.map +1 -1
  428. package/data/build/dist/host/cli-adapters/stream-normalizer.js +23 -0
  429. package/data/build/dist/host/cli-adapters/stream-normalizer.js.map +1 -1
  430. package/data/build/dist/host/cli-adapters/subagent-tool.d.ts +5 -0
  431. package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -0
  432. package/data/build/dist/host/cli-adapters/subagent-tool.js +112 -0
  433. package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -0
  434. package/data/build/dist/host/cli-adapters/zcode-driver.d.ts +57 -0
  435. package/data/build/dist/host/cli-adapters/zcode-driver.d.ts.map +1 -0
  436. package/data/build/dist/host/cli-adapters/zcode-driver.js +843 -0
  437. package/data/build/dist/host/cli-adapters/zcode-driver.js.map +1 -0
  438. package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts +28 -0
  439. package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts.map +1 -0
  440. package/data/build/dist/host/cli-adapters/zcode-subscription.js +212 -0
  441. package/data/build/dist/host/cli-adapters/zcode-subscription.js.map +1 -0
  442. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts +27 -0
  443. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts.map +1 -0
  444. package/data/build/dist/host/cli-bridge/bridge-holder.js +51 -0
  445. package/data/build/dist/host/cli-bridge/bridge-holder.js.map +1 -0
  446. package/data/build/dist/host/cli-bridge/bridge-server.d.ts +39 -0
  447. package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -0
  448. package/data/build/dist/host/cli-bridge/bridge-server.js +140 -0
  449. package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -0
  450. package/data/build/dist/host/cli-bridge/command-code-mod.d.ts +29 -0
  451. package/data/build/dist/host/cli-bridge/command-code-mod.d.ts.map +1 -0
  452. package/data/build/dist/host/cli-bridge/command-code-mod.js +91 -0
  453. package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -0
  454. package/data/build/dist/host/cli-bridge/dispatch.d.ts +19 -0
  455. package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -0
  456. package/data/build/dist/host/cli-bridge/dispatch.js +128 -0
  457. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -0
  458. package/data/build/dist/host/cli-bridge/injections.d.ts +28 -0
  459. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -0
  460. package/data/build/dist/host/cli-bridge/injections.js +131 -0
  461. package/data/build/dist/host/cli-bridge/injections.js.map +1 -0
  462. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts +8 -0
  463. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts.map +1 -0
  464. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +170 -0
  465. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -0
  466. package/data/build/dist/host/features/lan-access-dsh.d.ts.map +1 -1
  467. package/data/build/dist/host/features/lan-access-dsh.js +6 -2
  468. package/data/build/dist/host/features/lan-access-dsh.js.map +1 -1
  469. package/data/build/dist/host/features/peer-host.d.ts +21 -1
  470. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  471. package/data/build/dist/host/features/peer-host.js +176 -31
  472. package/data/build/dist/host/features/peer-host.js.map +1 -1
  473. package/data/build/dist/host/features/types.d.ts +2 -0
  474. package/data/build/dist/host/features/types.d.ts.map +1 -1
  475. package/data/build/dist/host/index.d.ts +15 -1
  476. package/data/build/dist/host/index.d.ts.map +1 -1
  477. package/data/build/dist/host/index.js +48 -2
  478. package/data/build/dist/host/index.js.map +1 -1
  479. package/data/build/dist/host/lan-access-dsh.d.ts +7 -1
  480. package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -1
  481. package/data/build/dist/host/lan-access-dsh.js +95 -19
  482. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  483. package/data/build/dist/host/login-attempt-guard.d.ts +55 -0
  484. package/data/build/dist/host/login-attempt-guard.d.ts.map +1 -0
  485. package/data/build/dist/host/login-attempt-guard.js +201 -0
  486. package/data/build/dist/host/login-attempt-guard.js.map +1 -0
  487. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts +3 -0
  488. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts.map +1 -1
  489. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js +2 -0
  490. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js.map +1 -1
  491. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts +1 -0
  492. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts.map +1 -1
  493. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js +1 -0
  494. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js.map +1 -1
  495. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +1 -1
  496. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -1
  497. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +9 -1
  498. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
  499. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts +8 -0
  500. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts.map +1 -1
  501. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js +9 -0
  502. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js.map +1 -1
  503. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts +7 -0
  504. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts.map +1 -1
  505. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +31 -3
  506. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
  507. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts +2 -0
  508. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts.map +1 -1
  509. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js +26 -7
  510. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js.map +1 -1
  511. package/data/build/dist/host/modules/pwa/pwa-assets.d.ts +6 -4
  512. package/data/build/dist/host/modules/pwa/pwa-assets.d.ts.map +1 -1
  513. package/data/build/dist/host/modules/pwa/pwa-assets.js +11 -9
  514. package/data/build/dist/host/modules/pwa/pwa-assets.js.map +1 -1
  515. package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts +3 -0
  516. package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts.map +1 -1
  517. package/data/build/dist/host/modules/pwa/pwa-session-notifications.js +6 -4
  518. package/data/build/dist/host/modules/pwa/pwa-session-notifications.js.map +1 -1
  519. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
  520. package/data/build/dist/host/native-session-bridge.js +106 -59
  521. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  522. package/data/build/dist/host/rpc.js +8 -2
  523. package/data/build/dist/host/rpc.js.map +1 -1
  524. package/data/build/dist/host/settings.d.ts.map +1 -1
  525. package/data/build/dist/host/settings.js +14 -4
  526. package/data/build/dist/host/settings.js.map +1 -1
  527. package/data/build/dist/host/terminal/backends/local-pty-backend.d.ts.map +1 -1
  528. package/data/build/dist/host/terminal/backends/local-pty-backend.js +14 -0
  529. package/data/build/dist/host/terminal/backends/local-pty-backend.js.map +1 -1
  530. package/data/build/dist/host/terminal/backends/tmux-backend.d.ts +40 -1
  531. package/data/build/dist/host/terminal/backends/tmux-backend.d.ts.map +1 -1
  532. package/data/build/dist/host/terminal/backends/tmux-backend.js +291 -18
  533. package/data/build/dist/host/terminal/backends/tmux-backend.js.map +1 -1
  534. package/data/build/dist/host/terminal/runtime-adapter.d.ts +32 -0
  535. package/data/build/dist/host/terminal/runtime-adapter.d.ts.map +1 -1
  536. package/data/build/dist/host/terminal/runtime-adapter.js +8 -0
  537. package/data/build/dist/host/terminal/runtime-adapter.js.map +1 -1
  538. package/data/build/dist/host/terminal/runtime-manager.d.ts +3 -0
  539. package/data/build/dist/host/terminal/runtime-manager.d.ts.map +1 -1
  540. package/data/build/dist/host/terminal/runtime-manager.js +92 -4
  541. package/data/build/dist/host/terminal/runtime-manager.js.map +1 -1
  542. package/data/build/dist/host/terminal/terminal-controller.d.ts.map +1 -1
  543. package/data/build/dist/host/terminal/terminal-controller.js +58 -6
  544. package/data/build/dist/host/terminal/terminal-controller.js.map +1 -1
  545. package/data/build/dist/host/terminal/terminal-process-service.d.ts.map +1 -1
  546. package/data/build/dist/host/terminal/terminal-process-service.js +12 -2
  547. package/data/build/dist/host/terminal/terminal-process-service.js.map +1 -1
  548. package/data/build/dist/host/terminal/terminal-service.d.ts +41 -4
  549. package/data/build/dist/host/terminal/terminal-service.d.ts.map +1 -1
  550. package/data/build/dist/host/terminal/terminal-service.js +551 -61
  551. package/data/build/dist/host/terminal/terminal-service.js.map +1 -1
  552. package/data/build/dist/index.d.ts +2 -2
  553. package/data/build/dist/index.d.ts.map +1 -1
  554. package/data/build/dist/index.js +2 -2
  555. package/data/build/dist/index.js.map +1 -1
  556. package/data/build/dist/shared/contracts/cli-adapter.d.ts +69 -2
  557. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  558. package/data/build/dist/shared/contracts/config.d.ts +63 -10
  559. package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
  560. package/data/build/dist/shared/contracts/config.js +57 -5
  561. package/data/build/dist/shared/contracts/config.js.map +1 -1
  562. package/data/build/dist/shared/contracts/peer-host.d.ts +2 -0
  563. package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -1
  564. package/data/build/dist/shared/contracts/peer-host.js.map +1 -1
  565. package/data/build/dist/shared/contracts/subscription.d.ts +20 -1
  566. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
  567. package/data/build/dist/shared/contracts/subscription.js.map +1 -1
  568. package/data/build/dist/shared/contracts/terminal.d.ts +8 -1
  569. package/data/build/dist/shared/contracts/terminal.d.ts.map +1 -1
  570. package/data/build/dist/shared/contracts/version.d.ts +1 -1
  571. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  572. package/data/build/dist/shared/contracts/version.js +1 -1
  573. package/data/build/dist/shared/contracts/version.js.map +1 -1
  574. package/data/build/dist/shared/debug.d.ts +8 -0
  575. package/data/build/dist/shared/debug.d.ts.map +1 -1
  576. package/data/build/dist/shared/debug.js +43 -7
  577. package/data/build/dist/shared/debug.js.map +1 -1
  578. package/data/build/dist/shared/delegation-carrier.d.ts +24 -0
  579. package/data/build/dist/shared/delegation-carrier.d.ts.map +1 -0
  580. package/data/build/dist/shared/delegation-carrier.js +111 -0
  581. package/data/build/dist/shared/delegation-carrier.js.map +1 -0
  582. package/data/build/dist/shared/index.d.ts +3 -3
  583. package/data/build/dist/shared/index.d.ts.map +1 -1
  584. package/data/build/dist/shared/index.js +2 -2
  585. package/data/build/dist/shared/index.js.map +1 -1
  586. package/data/build/dist/shared/terminal-input.d.ts +8 -0
  587. package/data/build/dist/shared/terminal-input.d.ts.map +1 -0
  588. package/data/build/dist/shared/terminal-input.js +10 -0
  589. package/data/build/dist/shared/terminal-input.js.map +1 -0
  590. package/data/build/dist/transport/debug.d.ts +7 -0
  591. package/data/build/dist/transport/debug.d.ts.map +1 -1
  592. package/data/build/dist/transport/debug.js +33 -5
  593. package/data/build/dist/transport/debug.js.map +1 -1
  594. package/data/build/dist/transport/index.d.ts +1 -1
  595. package/data/build/dist/transport/index.d.ts.map +1 -1
  596. package/data/build/dist/transport/index.js +1 -1
  597. package/data/build/dist/transport/index.js.map +1 -1
  598. package/data/build/dist/typert.host.js +1 -1
  599. package/data/build/dist/typert.host.js.map +1 -1
  600. package/package.json +3 -1
  601. package/profile/README.md +2 -2
  602. package/profile/package.json +2 -2
  603. package/profile/version.json +1 -1
  604. package/version.json +1 -1
@@ -0,0 +1,170 @@
1
+ /**
2
+ * 最小 MCP stdio server:把外部 CLI 的子代理调用转发到 Host 桥接端点。
3
+ *
4
+ * 只依赖 Node 内置能力,由外部 CLI 以 `node <entry.js>` 直接启动;桥接地址、
5
+ * 令牌和 DSH 会话身份全部来自进程环境,不读取磁盘上的任何配置。
6
+ */
7
+ const BRIDGE_URL = (process.env.CODINGNS_BRIDGE_URL ?? '').replace(/\/+$/u, '');
8
+ const BRIDGE_TOKEN = process.env.CODINGNS_BRIDGE_TOKEN ?? '';
9
+ const SESSION_ID = process.env.CODINGNS_DSH_SESSION_ID ?? '';
10
+ const ADAPTER_ID = process.env.CODINGNS_ADAPTER_ID ?? '';
11
+ const DISPATCH_TIMEOUT_MS = 16 * 60_000;
12
+ const TOOL_DEFINITION = {
13
+ name: 'agent_subagent',
14
+ description: 'Plan and execute external Agent subtasks in independent DSH sessions. Use action=start to create, action=wait to await a child session, and action=read to inspect it. Respect depends_on before starting dependent work.',
15
+ inputSchema: {
16
+ type: 'object',
17
+ properties: {
18
+ prompt: { type: 'string', description: '完整、自包含的子任务说明。' },
19
+ agent: { type: 'string', description: '外部编码 Agent id;缺省沿用当前会话的 Agent。' },
20
+ model: { type: 'string', description: '可选模型覆盖。' },
21
+ description: { type: 'string', description: '给子代理的简短标题。' },
22
+ subagent_type: { type: 'string', description: '子代理类型提示(explore/plan/general)。' },
23
+ action: { type: 'string', enum: ['start', 'wait', 'read'] },
24
+ child_session_id: { type: 'string' },
25
+ timeout_ms: { type: 'number' },
26
+ depends_on: { type: 'array', items: { type: 'string' } },
27
+ },
28
+ required: [],
29
+ additionalProperties: false,
30
+ },
31
+ };
32
+ let buffer = '';
33
+ process.stdin.setEncoding('utf8');
34
+ process.stdin.on('data', (chunk) => {
35
+ buffer += chunk;
36
+ let index = buffer.indexOf('\n');
37
+ while (index >= 0) {
38
+ const line = buffer.slice(0, index).trim();
39
+ buffer = buffer.slice(index + 1);
40
+ if (line !== '')
41
+ void handleLine(line);
42
+ index = buffer.indexOf('\n');
43
+ }
44
+ });
45
+ process.stdin.on('end', () => process.exit(0));
46
+ async function handleLine(line) {
47
+ let message;
48
+ try {
49
+ message = JSON.parse(line);
50
+ }
51
+ catch {
52
+ return;
53
+ }
54
+ if (typeof message !== 'object' || message === null)
55
+ return;
56
+ const request = message;
57
+ const id = request.id;
58
+ // 通知没有 id,不需要响应。
59
+ if (id === undefined || id === null)
60
+ return;
61
+ const method = typeof request.method === 'string' ? request.method : '';
62
+ try {
63
+ if (method === 'initialize') {
64
+ respond(id, {
65
+ protocolVersion: readProtocolVersion(request.params),
66
+ capabilities: { tools: {} },
67
+ serverInfo: { name: 'codingns-subagent-bridge', version: '0.2.0' },
68
+ });
69
+ return;
70
+ }
71
+ if (method === 'ping') {
72
+ respond(id, {});
73
+ return;
74
+ }
75
+ if (method === 'tools/list') {
76
+ respond(id, { tools: [TOOL_DEFINITION] });
77
+ return;
78
+ }
79
+ if (method === 'tools/call') {
80
+ respond(id, await callTool(request.params));
81
+ return;
82
+ }
83
+ respondError(id, -32601, `Method not found: ${method}`);
84
+ }
85
+ catch (error) {
86
+ respondError(id, -32603, error instanceof Error ? error.message : String(error));
87
+ }
88
+ }
89
+ async function callTool(params) {
90
+ const record = asRecord(params);
91
+ const name = typeof record?.name === 'string' ? record.name : '';
92
+ if (name !== TOOL_DEFINITION.name)
93
+ return textResult(`未知工具: ${name}`, true);
94
+ const args = asRecord(record?.arguments) ?? {};
95
+ const action = args.action === 'wait' || args.action === 'read' ? args.action : 'start';
96
+ const prompt = typeof args.prompt === 'string' ? args.prompt : '';
97
+ if (action === 'start' && prompt.trim() === '')
98
+ return textResult('start 操作的 prompt 不能为空', true);
99
+ if (BRIDGE_URL === '' || BRIDGE_TOKEN === '' || SESSION_ID === '')
100
+ return textResult('Codingns4DSH 子代理桥接未配置', true);
101
+ try {
102
+ const response = await fetch(`${BRIDGE_URL}/v1/dispatch`, {
103
+ method: 'POST',
104
+ headers: { authorization: `Bearer ${BRIDGE_TOKEN}`, 'content-type': 'application/json' },
105
+ body: JSON.stringify({
106
+ sessionId: SESSION_ID,
107
+ prompt,
108
+ action,
109
+ ...(typeof args.child_session_id === 'string' && args.child_session_id.trim() !== '' ? { childSessionId: args.child_session_id.trim() } : {}),
110
+ ...(Array.isArray(args.depends_on) ? { dependsOn: args.depends_on.filter((item) => typeof item === 'string' && item.trim() !== '').map((item) => item.trim()) } : {}),
111
+ ...(typeof args.timeout_ms === 'number' && Number.isFinite(args.timeout_ms) ? { timeoutMs: args.timeout_ms } : {}),
112
+ ...(typeof args.agent === 'string' && args.agent.trim() !== '' ? { agent: args.agent.trim() } : { agent: ADAPTER_ID }),
113
+ ...(typeof args.model === 'string' && args.model.trim() !== '' ? { model: args.model.trim() } : {}),
114
+ ...(typeof args.description === 'string' && args.description.trim() !== '' ? { description: args.description.trim() } : {}),
115
+ ...(typeof args.subagent_type === 'string' && args.subagent_type.trim() !== '' ? { subagentType: args.subagent_type.trim() } : {}),
116
+ }),
117
+ signal: AbortSignal.timeout(DISPATCH_TIMEOUT_MS),
118
+ });
119
+ const payload = await readJsonRecord(response);
120
+ if (!response.ok) {
121
+ const detail = typeof payload?.error === 'string' && payload.error.trim() !== '' ? payload.error.trim() : `HTTP ${String(response.status)}`;
122
+ return textResult(`子代理桥接请求失败:${detail}`, true);
123
+ }
124
+ if (payload?.ok !== true) {
125
+ const safePayload = payload ?? {};
126
+ const status = safePayload.status;
127
+ if (status === 'creating' || status === 'running') {
128
+ return textResult(JSON.stringify({
129
+ status,
130
+ completed: safePayload.completed === true,
131
+ ...(typeof safePayload.childSessionId === 'string' ? { childSessionId: safePayload.childSessionId } : {}),
132
+ text: typeof safePayload.text === 'string' ? safePayload.text : '子代理仍在运行。',
133
+ }), false);
134
+ }
135
+ const detail = typeof safePayload.error === 'string' && safePayload.error.trim() !== '' ? safePayload.error.trim() : '桥接端未返回具体错误。';
136
+ return textResult(`子代理执行失败:${detail}`, true);
137
+ }
138
+ const text = typeof payload.text === 'string' && payload.text.trim() !== '' ? payload.text : '子代理已完成,但没有文本输出。';
139
+ return textResult(text, false);
140
+ }
141
+ catch (error) {
142
+ return textResult(`子代理桥接不可达:${error instanceof Error ? error.message : String(error)}`, true);
143
+ }
144
+ }
145
+ function textResult(text, isError) {
146
+ return { content: [{ type: 'text', text }], ...(isError ? { isError: true } : {}) };
147
+ }
148
+ async function readJsonRecord(response) {
149
+ try {
150
+ return asRecord(await response.json());
151
+ }
152
+ catch {
153
+ return undefined;
154
+ }
155
+ }
156
+ function readProtocolVersion(params) {
157
+ const record = asRecord(params);
158
+ return typeof record?.protocolVersion === 'string' && record.protocolVersion !== '' ? record.protocolVersion : '2024-11-05';
159
+ }
160
+ function respond(id, result) {
161
+ process.stdout.write(`${JSON.stringify({ jsonrpc: '2.0', id, result })}\n`);
162
+ }
163
+ function respondError(id, code, message) {
164
+ process.stdout.write(`${JSON.stringify({ jsonrpc: '2.0', id, error: { code, message } })}\n`);
165
+ }
166
+ function asRecord(value) {
167
+ return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : undefined;
168
+ }
169
+ export {};
170
+ //# sourceMappingURL=mcp-stdio-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-stdio-entry.js","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/mcp-stdio-entry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lan-access-dsh.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/lan-access-dsh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AAEtE,OAAO,EAA8G,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAG3K,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD,8CAA8C;AAC9C,wBAAgB,yBAAyB,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAO,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAwD9H"}
1
+ {"version":3,"file":"lan-access-dsh.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/lan-access-dsh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AAEtE,OAAO,EAA8G,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAI3K,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD,8CAA8C;AAC9C,wBAAgB,yBAAyB,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAO,GAAG,aAAa,CAAC,oBAAoB,CAAC,CA2D9H"}
@@ -2,6 +2,7 @@ import { DEFAULT_LAN_ACCESS_DSH_PWA_SETTINGS } from '../../shared/contracts/conf
2
2
  import { createLanAccessDshRpcHandler, createNodeLanAccessDshRuntime, FileLanAccessDshLoginStore, LanAccessDshProxy } from '../lan-access-dsh.js';
3
3
  import { createLanAccessDshPwaProvider, PwaPushService } from '../modules/pwa/index.js';
4
4
  import { createPwaSessionNotification } from '../modules/pwa/pwa-session-notifications.js';
5
+ import { resolveHostPushLocale } from '../browser-text.js';
5
6
  /** Host 侧“局域网访问 DSH”模块,只管理一条 DSH Web 监听映射。 */
6
7
  export function createLanAccessDshFeature(options = {}) {
7
8
  return {
@@ -25,7 +26,10 @@ export function createLanAccessDshFeature(options = {}) {
25
26
  proxy.setLoginConfig(loginConfig);
26
27
  // 推送只保存订阅与 VAPID 私钥;是否真的订阅由浏览器侧在用户开启时决定。
27
28
  const push = new PwaPushService();
28
- context.resources.add(context.services.rpc.register('lanAccessDsh', createLanAccessDshRpcHandler(proxy, settings, loginStore, { push })));
29
+ context.resources.add(context.services.rpc.register('lanAccessDsh', createLanAccessDshRpcHandler(proxy, settings, loginStore, {
30
+ push,
31
+ resolveLocale: () => resolveHostPushLocale(context.services.settingsProvider),
32
+ })));
29
33
  // 推送订阅由浏览器显式开启;开启后把原生会话完成/等待输入事件转成通知。
30
34
  // 事件监听属于局域网功能生命周期,停用模块时随资源一起释放。
31
35
  const nativeSessions = context.services.nativeSessions;
@@ -35,7 +39,7 @@ export function createLanAccessDshFeature(options = {}) {
35
39
  const pwa = settings?.get().lanAccessDsh.pwa;
36
40
  if (pwa?.enabled !== true || pwa.notifications !== 'push')
37
41
  return;
38
- const payload = createPwaSessionNotification({ session, event });
42
+ const payload = createPwaSessionNotification({ session, event, locale: resolveHostPushLocale(context.services.settingsProvider) });
39
43
  if (payload === null)
40
44
  return;
41
45
  void push.sendToAll(payload).catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"lan-access-dsh.js","sourceRoot":"","sources":["../../../../../src/host/features/lan-access-dsh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lan-access-dsh.js","sourceRoot":"","sources":["../../../../../src/host/features/lan-access-dsh.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,12 @@
1
1
  import type { FeatureModule } from '../../shared/contracts/feature.js';
2
2
  import type { CodingNsHostServices } from './types.js';
3
- import type { PeerHostRecord, PeerHostClientRecord } from '../../shared/contracts/peer-host.js';
3
+ import type { AggregateHostResult, PeerHostRecord, PeerHostClientRecord } from '../../shared/contracts/peer-host.js';
4
+ import { type HostScope } from '../../shared/contracts/peer-host.js';
4
5
  import type { AggregateHostSource } from '../modules/peer-host/peer-host-aggregate-service.js';
6
+ import { VirtualWorkspaceRegistry } from '../modules/peer-host/peer-host-virtual-registry.js';
5
7
  import { type PeerHostRemoteConnector } from '../modules/peer-host/host-ws-proxy-service.js';
6
8
  import { type PeerHostRelayTransportFactory } from '../modules/peer-host/peer-host-relay.js';
9
+ import { type VirtualIdResolver } from '../modules/peer-host/peer-host-native-protocol.js';
7
10
  export interface PeerHostFeatureOptions {
8
11
  readonly stateDirectory?: string;
9
12
  readonly ownerUserId?: string;
@@ -18,5 +21,22 @@ export interface PeerHostFeatureOptions {
18
21
  }
19
22
  /** PeerHost Host 模块;配置、握手和目标登录态只在 Host 进程内装配。 */
20
23
  export declare function createPeerHostFeature(options?: PeerHostFeatureOptions): FeatureModule<CodingNsHostServices>;
24
+ /**
25
+ * 为原生 Remote 请求补充“聚合尚未确认”的临时 ID 解析。
26
+ *
27
+ * session/create 返回后,客户端会马上打开 session/follow;此时 Host 侧聚合
28
+ * Registry 可能还没有新会话,但请求 scope 已经携带了真实 sessionId。只允许
29
+ * 解析与当前目标 Host、工作区和会话 scope 完全匹配的虚拟 ID,避免把任意旧 ID
30
+ * 当成可路由资源。
31
+ */
32
+ export declare function createScopedNativeIdResolver(registry: VirtualWorkspaceRegistry, scope: HostScope): VirtualIdResolver;
33
+ /**
34
+ * 用 DSH 原生注册表补齐本地工作区。
35
+ *
36
+ * 本地摘要还在启动、会话服务暂时不可读时,聚合 source 可能只返回远端结果。
37
+ * 顺序 Registry 仍必须知道本地 ID,否则客户端无法把本地项转换成混合顺序中的
38
+ * 虚拟 ID。这里仅补齐排序所需的最小记录,真实会话仍由本机 DSH Store 提供。
39
+ */
40
+ export declare function ensureLocalWorkspaceSummaries(results: readonly AggregateHostResult[], ctx: CodingNsHostServices['dshContext']): readonly AggregateHostResult[];
21
41
  export declare function toPeerHostClientRecord(record: PeerHostRecord): PeerHostClientRecord;
22
42
  //# sourceMappingURL=peer-host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"peer-host.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/peer-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAetD,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAA;AAM9F,OAAO,EAAgD,KAAK,uBAAuB,EAAE,MAAM,+CAA+C,CAAA;AAE1I,OAAO,EAA0D,KAAK,6BAA6B,EAAE,MAAM,yCAAyC,CAAA;AAcpJ,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAA;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,CAAC,EAAE,uBAAuB,CAAA;IAChD,mDAAmD;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,6BAA6B,CAAA;IACvD,8CAA8C;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAA;CAC1E;AAED,iDAAiD;AACjD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAAC,oBAAoB,CAAC,CA+X/G;AAyLD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,oBAAoB,CAOnF"}
1
+ {"version":3,"file":"peer-host.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/peer-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAetD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAEpH,OAAO,EAA4H,KAAK,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC9L,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAA;AAG9F,OAAO,EAAoC,wBAAwB,EAAE,MAAM,oDAAoD,CAAA;AAG/H,OAAO,EAAgD,KAAK,uBAAuB,EAAE,MAAM,+CAA+C,CAAA;AAE1I,OAAO,EAA0D,KAAK,6BAA6B,EAAE,MAAM,yCAAyC,CAAA;AASpJ,OAAO,EAAyG,KAAK,iBAAiB,EAAE,MAAM,mDAAmD,CAAA;AAMjM,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAA;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,CAAC,EAAE,uBAAuB,CAAA;IAChD,mDAAmD;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,6BAA6B,CAAA;IACvD,8CAA8C;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAA;CAC1E;AAED,iDAAiD;AACjD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAoa/G;AA8KD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,GAAG,iBAAiB,CAmBpH;AAaD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,mBAAmB,EAAE,EACvC,GAAG,EAAE,oBAAoB,CAAC,YAAY,CAAC,GACtC,SAAS,mBAAmB,EAAE,CAoChC;AAoBD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,oBAAoB,CAOnF"}
@@ -7,7 +7,7 @@ import { PeerHostHandshakeService } from '../modules/peer-host/peer-host-handsha
7
7
  import { 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 { createVirtualSessionId, createVirtualWorkspaceId, normalizePeerHostColor } from '../../shared/contracts/peer-host.js';
10
+ import { createVirtualSessionId, createVirtualWorkspaceId, normalizePeerHostColor, parseVirtualSessionId, parseVirtualWorkspaceId } from '../../shared/contracts/peer-host.js';
11
11
  import { PeerHostAggregateService } from '../modules/peer-host/peer-host-aggregate-service.js';
12
12
  import { resolveDshNativeDispatch } from '../modules/peer-host/peer-host-native-dispatch.js';
13
13
  import { FileAggregateWorkspaceOrderStore, VirtualWorkspaceRegistry } from '../modules/peer-host/peer-host-virtual-registry.js';
@@ -22,9 +22,10 @@ import { createPeerHostDiagnosticSink, toPeerHostDiagnosticSnapshot } from '../m
22
22
  import { AggregatedHostTransportService } from '../modules/peer-host/aggregated-host-transport.js';
23
23
  import { createDshNativeSummarySource } from '../modules/peer-host/dsh-native-summary-source.js';
24
24
  import { createPeerHostRemoteSummarySource, readPeerHostRemoteWorkspaceCandidates } from '../modules/peer-host/peer-host-remote-summary-source.js';
25
- import { callPeerNativeRpc, openPeerNativeStream, readNativeRpcEnvelope } from '../modules/peer-host/peer-host-native-transport.js';
25
+ import { callPeerCliRpc, callPeerNativeRpc, openPeerNativeStream, readNativeRpcEnvelope } from '../modules/peer-host/peer-host-native-transport.js';
26
26
  import { createAggregateHostSource } from '../modules/peer-host/peer-host-aggregate-service.js';
27
27
  import { encodeNativeResponseBytes, isDshNativeRemoteMethod, rewriteNativeRequestIds, rewriteNativeResponseIds } from '../modules/peer-host/peer-host-native-protocol.js';
28
+ import { resolveCodingNsDebugLevel } from '../../shared/debug.js';
28
29
  /** 原生 Remote 流句柄的存活窗口;每次轮询续期,超时仍未再被轮询即回收。 */
29
30
  const NATIVE_STREAM_TTL_MS = 600_000;
30
31
  /** PeerHost Host 模块;配置、握手和目标登录态只在 Host 进程内装配。 */
@@ -36,17 +37,12 @@ export function createPeerHostFeature(options = {}) {
36
37
  enabledByDefault: false,
37
38
  dependencies: [],
38
39
  runtime: 'host',
39
- requires: [
40
- { capability: 'peer-host.store', required: false, fallback: 'degrade' },
41
- { capability: 'peer-host.handshake', required: false, fallback: 'degrade' },
42
- { capability: 'peer-host.http-proxy', required: false, fallback: 'degrade' },
43
- { capability: 'peer-host.ws-proxy', required: false, fallback: 'degrade' },
44
- { capability: 'peer-host.aggregate', required: false, fallback: 'degrade' },
45
- { capability: 'peer-host.aggregated-transport', required: false, fallback: 'degrade' },
46
- { capability: 'peer-host.target-capabilities', required: false, fallback: 'degrade' },
47
- { capability: 'peer-host.local-plugin-baseline', required: false, fallback: 'degrade' },
48
- { capability: 'peer-host.relay-route', required: false, fallback: 'degrade' },
49
- ],
40
+ // PeerHost 的 Host 服务由本 Feature 在 start() 中按当前状态目录创建,
41
+ // 不属于 DSH Context 的启动前注入能力。把它们写进 requires 会在
42
+ // capabilityProfile 已经冻结之后才去查找尚未创建的局部实例,导致每次
43
+ // 启动都产生 CAPABILITY_UNAVAILABLE,但对实际启动没有任何帮助。
44
+ // 真正由 DSH 提供的能力仍由 capability registry 在入口处统一探测;
45
+ // Relay 也继续在连接器内部按显式 transport 注入情况降级。
50
46
  },
51
47
  async start(context) {
52
48
  const stateDirectory = options.stateDirectory ?? process.env.CODINGNS4DSH_STATE_DIR?.trim() ?? join(homedir(), '.config', 'codingns4dsh');
@@ -71,9 +67,18 @@ export function createPeerHostFeature(options = {}) {
71
67
  let workspaceOrderHydrated = false;
72
68
  const nativeStreams = new Map();
73
69
  const dshNativeDispatch = resolveDshNativeDispatch(context.services.dshContext);
70
+ const debugLevel = resolveCodingNsDebugLevel();
74
71
  const diagnostics = createPeerHostDiagnosticSink({
75
- enabled: process.env.CODINGNS4DSH_DEBUG === '1',
76
- sink: (event, snapshot) => console.info('[codingns4dsh:peer-host]', { event, ...snapshot }),
72
+ enabled: debugLevel !== 'off',
73
+ sink: (event, snapshot) => {
74
+ const failed = snapshot.status !== 'ready' || snapshot.lastErrorCode !== null;
75
+ if (debugLevel === 'warn' && !failed)
76
+ return;
77
+ if (failed)
78
+ console.warn('[codingns4dsh:peer-host]', { event, ...snapshot });
79
+ else
80
+ console.info('[codingns4dsh:peer-host]', { event, ...snapshot });
81
+ },
77
82
  });
78
83
  const lanConnector = options.connectRemote ?? createPeerHostRemoteConnector();
79
84
  const relayConnector = createPeerHostRelayConnector({ ...(options.relayTransport === undefined ? {} : { transport: options.relayTransport }) });
@@ -82,6 +87,38 @@ export function createPeerHostFeature(options = {}) {
82
87
  : lanConnector(record, accessToken, scope);
83
88
  const localHostId = process.env.CODINGNS4DSH_HOST_ID?.trim() || ownerUserId;
84
89
  const localSummarySource = createDshNativeSummarySource(context.services.dshContext, context.services.nativeSessions);
90
+ /**
91
+ * 聚合前确保目标 Host 已完成握手和认证。
92
+ *
93
+ * PeerHost 的记录状态是运行时缓存,不是登录凭据本身:远端返回 401 后
94
+ * 状态会暂时变成 session_required,下一次聚合必须主动用持久化的 refresh
95
+ * token/账号密码恢复,否则只要没有手工点“测试”,该目标就会永远被跳过。
96
+ */
97
+ const preparePeerHost = async (input) => {
98
+ if (input.status === 'disabled' || input.status === 'identity_changed')
99
+ return null;
100
+ let record = input;
101
+ if (record.status === 'session_required') {
102
+ await sessions.refresh(record.id).catch(() => undefined);
103
+ record = (await store.get(record.id)) ?? record;
104
+ }
105
+ else if (record.status !== 'ready') {
106
+ // configured/unreachable/version_mismatch 等状态都可能只是上一次启动
107
+ // 或网络抖动留下的缓存;自动重试等价于管理面板的“测试”。
108
+ record = await handshake.check(record.id);
109
+ }
110
+ if (record.status !== 'ready')
111
+ return null;
112
+ // 即使 access token 尚未到期,也检查一次当前认证状态;临近过期时这里
113
+ // 会 refresh,refresh token 失效时会用保存的账号密码静默重登。
114
+ try {
115
+ await sessions.getAccessToken(record.id);
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ return (await store.get(record.id)) ?? record;
121
+ };
85
122
  const buildSources = async () => {
86
123
  if (options.aggregateSources !== undefined)
87
124
  return options.aggregateSources();
@@ -91,8 +128,9 @@ export function createPeerHostFeature(options = {}) {
91
128
  hostLabel: '当前 Host',
92
129
  source: localSummarySource,
93
130
  })];
94
- for (const record of await store.list()) {
95
- if (record.status !== 'ready')
131
+ const preparedRecords = await Promise.all((await store.list()).map((record) => preparePeerHost(record).catch(() => null)));
132
+ for (const record of preparedRecords) {
133
+ if (record === null || record.status !== 'ready')
96
134
  continue;
97
135
  sources.push(createAggregateHostSource({
98
136
  hostId: localHostId,
@@ -104,6 +142,7 @@ export function createPeerHostFeature(options = {}) {
104
142
  transport: {
105
143
  rpc: (request) => callPeerNativeRpc(httpProxy, record.id, request),
106
144
  stream: (request) => openPeerNativeStream(httpProxy, record.id, request),
145
+ cli: (request) => callPeerCliRpc(httpProxy, record.id, request),
107
146
  },
108
147
  // 默认只投影用户显式添加的远端工作区;未添加时不展示该 Host 的任何工作区。
109
148
  visibleWorkspaceIds: record.visibleWorkspaceIds ?? [],
@@ -114,15 +153,10 @@ export function createPeerHostFeature(options = {}) {
114
153
  };
115
154
  /** 远端工作区候选的唯一读取入口;不过滤可见性,供"添加工作区"选择器使用。 */
116
155
  const readRemoteWorkspaceCandidates = async (peerHostId) => {
117
- let record = await store.get(peerHostId);
118
- if (record === null)
156
+ const configured = await store.get(peerHostId);
157
+ if (configured === null)
119
158
  throw new CodingNsRpcError('PEER_HOST_NOT_FOUND', 'PeerHost 不存在');
120
- // 票据过期但保存过账号时先静默重登:用户不该为了看一眼工作区列表
121
- // 再回管理面板手工登录一次。
122
- if (record.status === 'session_required') {
123
- await sessions.refresh(peerHostId).catch(() => undefined);
124
- record = await store.get(peerHostId);
125
- }
159
+ const record = await preparePeerHost(configured);
126
160
  if (record === null || record.status !== 'ready') {
127
161
  throw new CodingNsRpcError('PEER_HOST_NOT_READY', 'PeerHost 尚未通过握手检查');
128
162
  }
@@ -297,7 +331,10 @@ export function createPeerHostFeature(options = {}) {
297
331
  }
298
332
  case 'wsEndpoint': return wsEndpoint;
299
333
  case 'aggregate': {
300
- const results = await aggregate.load(await buildSources());
334
+ // 顺序 Registry 必须认识本地工作区,即使本地 session 摘要在启动瞬间
335
+ // 还没有准备好。否则 order 只会留下远端 ID,客户端拖拽到本地项时
336
+ // 只能拒绝请求,表现为远端永远被固定在列表顶部。
337
+ const results = ensureLocalWorkspaceSummaries(await aggregate.load(await buildSources()), context.services.dshContext);
301
338
  workspaceRegistry.replace(results);
302
339
  if (!workspaceOrderHydrated) {
303
340
  await workspaceRegistry.hydrateOrder();
@@ -309,15 +346,16 @@ export function createPeerHostFeature(options = {}) {
309
346
  const action = input.action === undefined ? 'get' : requiredString(input.action, 'action');
310
347
  if (action === 'get') {
311
348
  return {
312
- orderedWorkspaceIds: workspaceRegistry.listWorkspaceIds(),
349
+ // 返回完整墓碑顺序;远端摘要短暂缺失时,客户端仍需知道其拖拽位置。
350
+ orderedWorkspaceIds: workspaceRegistry.listPersistedWorkspaceIds(),
313
351
  persistedWorkspaceIds: workspaceRegistry.listPersistedWorkspaceIds(),
314
352
  };
315
353
  }
316
354
  if (action === 'move') {
317
- const workspaceId = requiredString(input.virtualWorkspaceId, 'virtualWorkspaceId');
355
+ const workspaceId = resolveWorkspaceOrderId(requiredString(input.virtualWorkspaceId, 'virtualWorkspaceId'), workspaceRegistry, localHostId);
318
356
  const before = input.beforeVirtualWorkspaceId === null || input.beforeVirtualWorkspaceId === undefined
319
357
  ? null
320
- : requiredString(input.beforeVirtualWorkspaceId, 'beforeVirtualWorkspaceId');
358
+ : resolveWorkspaceOrderId(requiredString(input.beforeVirtualWorkspaceId, 'beforeVirtualWorkspaceId'), workspaceRegistry, localHostId);
321
359
  return { orderedWorkspaceIds: await workspaceRegistry.move(workspaceId, before) };
322
360
  }
323
361
  throw new CodingNsRpcError('CODINGNS_RPC_NOT_FOUND', `未知 PeerHost workspaceOrder 操作: ${action}`);
@@ -349,7 +387,7 @@ export function createPeerHostFeature(options = {}) {
349
387
  const scope = parseScope(input.scope);
350
388
  // 远端流与 unary 一样需要双向 ID 改写:请求要换回目标 Host 的真实 ID,
351
389
  // 帧里的 ID 要重新编码成虚拟 ID,否则原生会话流认不出目标 Host 的会话。
352
- const payload = rewriteNativeRequestIds(method, input.payload, workspaceRegistry);
390
+ const payload = rewriteNativeRequestIds(method, input.payload, createScopedNativeIdResolver(workspaceRegistry, scope));
353
391
  // 句柄由 nativeStreamNext/Close 轮询管理,不绑定本次 HTTP 请求的 signal:
354
392
  // 该 signal 会在 nativeStream 响应返回后立即中止,导致第一次 next 直接结束。
355
393
  const stream = aggregatedTransport.openStream({ scope, method, payload });
@@ -410,7 +448,7 @@ export function createPeerHostFeature(options = {}) {
410
448
  if (!isDshNativeRemoteMethod(method))
411
449
  throw new CodingNsRpcError('CODINGNS_RPC_NOT_FOUND', `未知 DSH 原生 Remote 方法: ${method}`);
412
450
  const scope = parseScope(input.scope);
413
- const rewritten = rewriteNativeRequestIds(method, input.payload, workspaceRegistry);
451
+ const rewritten = rewriteNativeRequestIds(method, input.payload, createScopedNativeIdResolver(workspaceRegistry, scope));
414
452
  const value = await aggregatedTransport.rpc({ scope, method, payload: rewritten });
415
453
  const virtualHostId = scope.targetHostId ?? scope.hostId;
416
454
  return encodeNativeResponseBytes(rewriteNativeResponseIds(value, (id) => createVirtualWorkspaceId(virtualHostId, id), (id) => createVirtualSessionId(virtualHostId, id)));
@@ -611,6 +649,40 @@ function requiredString(value, field) {
611
649
  throw new TypeError(`${field} 不能为空`);
612
650
  return value.trim();
613
651
  }
652
+ /**
653
+ * 为原生 Remote 请求补充“聚合尚未确认”的临时 ID 解析。
654
+ *
655
+ * session/create 返回后,客户端会马上打开 session/follow;此时 Host 侧聚合
656
+ * Registry 可能还没有新会话,但请求 scope 已经携带了真实 sessionId。只允许
657
+ * 解析与当前目标 Host、工作区和会话 scope 完全匹配的虚拟 ID,避免把任意旧 ID
658
+ * 当成可路由资源。
659
+ */
660
+ export function createScopedNativeIdResolver(registry, scope) {
661
+ return {
662
+ resolveWorkspace(id) {
663
+ const known = registry.resolveWorkspace(id);
664
+ if (known !== null)
665
+ return known;
666
+ if (scope.targetHostId === null)
667
+ return null;
668
+ const parsed = parseVirtualWorkspaceId(id);
669
+ if (parsed === null || parsed.hostId !== scope.targetHostId || parsed.workspaceId !== scope.workspaceId)
670
+ return null;
671
+ return { workspaceId: parsed.workspaceId, targetHostId: scope.targetHostId };
672
+ },
673
+ resolveSession(id) {
674
+ const known = registry.resolveSession(id);
675
+ if (known !== null)
676
+ return known;
677
+ if (scope.targetHostId === null || scope.sessionId === null)
678
+ return null;
679
+ const parsed = parseVirtualSessionId(id);
680
+ if (parsed === null || parsed.hostId !== scope.targetHostId || parsed.sessionId !== scope.sessionId)
681
+ return null;
682
+ return { sessionId: parsed.sessionId, targetHostId: scope.targetHostId };
683
+ },
684
+ };
685
+ }
614
686
  function parseScope(value) {
615
687
  if (typeof value !== 'object' || value === null || Array.isArray(value))
616
688
  throw new TypeError('scope 必须是对象');
@@ -623,6 +695,79 @@ function parseScope(value) {
623
695
  throw new TypeError('scope.scopeGeneration 无效');
624
696
  return { hostId, targetHostId, workspaceId, sessionId, scopeGeneration: scope.scopeGeneration };
625
697
  }
698
+ /**
699
+ * 用 DSH 原生注册表补齐本地工作区。
700
+ *
701
+ * 本地摘要还在启动、会话服务暂时不可读时,聚合 source 可能只返回远端结果。
702
+ * 顺序 Registry 仍必须知道本地 ID,否则客户端无法把本地项转换成混合顺序中的
703
+ * 虚拟 ID。这里仅补齐排序所需的最小记录,真实会话仍由本机 DSH Store 提供。
704
+ */
705
+ export function ensureLocalWorkspaceSummaries(results, ctx) {
706
+ if (ctx === undefined)
707
+ return results;
708
+ const local = results.find((host) => host.targetHostId === null);
709
+ if (local === undefined)
710
+ return results;
711
+ let registry;
712
+ try {
713
+ registry = ctx.get('workspaceRegistry');
714
+ }
715
+ catch {
716
+ return results;
717
+ }
718
+ if (!isRecordValue(registry) || typeof registry.list !== 'function')
719
+ return results;
720
+ let raw;
721
+ try {
722
+ const listed = registry.list();
723
+ raw = Array.isArray(listed) ? listed : [];
724
+ }
725
+ catch {
726
+ return results;
727
+ }
728
+ const known = new Set(local.workspaces.map((workspace) => workspace.workspaceId));
729
+ const missing = raw.flatMap((item) => {
730
+ if (!isRecordValue(item))
731
+ return [];
732
+ const workspaceId = textValue(item.id) ?? textValue(item.workspaceId) ?? textValue(item.key);
733
+ if (workspaceId === undefined || known.has(workspaceId))
734
+ return [];
735
+ const path = textValue(item.path) ?? textValue(item.cwd) ?? workspaceId;
736
+ return [{
737
+ key: `${local.hostId}:${workspaceId}`,
738
+ hostId: local.hostId,
739
+ targetHostId: null,
740
+ workspaceId,
741
+ displayName: textValue(item.displayName) ?? textValue(item.title) ?? textValue(item.name) ?? workspaceId,
742
+ path,
743
+ hostLabel: local.hostLabel,
744
+ availability: 'ready',
745
+ sessions: [],
746
+ }];
747
+ });
748
+ if (missing.length === 0)
749
+ return results;
750
+ return results.map((host) => host.targetHostId === null
751
+ ? { ...host, workspaces: [...host.workspaces, ...missing] }
752
+ : host);
753
+ }
754
+ function isRecordValue(value) {
755
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
756
+ }
757
+ function textValue(value) {
758
+ return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
759
+ }
760
+ /** 将初始化竞态期间原生列表传来的本地裸 ID解析为顺序 Registry 的虚拟 ID。 */
761
+ function resolveWorkspaceOrderId(value, registry, localHostId) {
762
+ if (parseVirtualWorkspaceId(value) !== null)
763
+ return value;
764
+ const local = registry.list().find((workspace) => workspace.targetHostId === null && workspace.workspaceId === value);
765
+ if (local !== undefined)
766
+ return local.virtualWorkspaceId;
767
+ // 启动竞态下 Registry 可能还没有完成首轮 aggregate;本地 Host ID 是稳定的,
768
+ // 先生成同一格式的虚拟 ID并写入墓碑顺序,后续 aggregate 会补齐记录。
769
+ return createVirtualWorkspaceId(localHostId, value);
770
+ }
626
771
  export function toPeerHostClientRecord(record) {
627
772
  return {
628
773
  ...record,