@jingyi0605/codingns4dsh 0.2.1-beta.7 → 0.2.1-beta.9

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 (301) hide show
  1. package/README.en.md +3 -3
  2. package/README.md +9 -3
  3. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.d.ts.map +1 -1
  4. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js +26 -1
  5. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js.map +1 -1
  6. package/data/build/dist/client/account-bar.d.ts.map +1 -1
  7. package/data/build/dist/client/account-bar.js +33 -21
  8. package/data/build/dist/client/account-bar.js.map +1 -1
  9. package/data/build/dist/client/avatar/desktop-bridge.js +1 -1
  10. package/data/build/dist/client/avatar/desktop-bridge.js.map +1 -1
  11. package/data/build/dist/client/avatar/desktop-view.d.ts +6 -2
  12. package/data/build/dist/client/avatar/desktop-view.d.ts.map +1 -1
  13. package/data/build/dist/client/avatar/desktop-view.js +48 -13
  14. package/data/build/dist/client/avatar/desktop-view.js.map +1 -1
  15. package/data/build/dist/client/avatar/floating.d.ts +5 -2
  16. package/data/build/dist/client/avatar/floating.d.ts.map +1 -1
  17. package/data/build/dist/client/avatar/floating.js +16 -5
  18. package/data/build/dist/client/avatar/floating.js.map +1 -1
  19. package/data/build/dist/client/avatar/notification-bubble.d.ts +24 -5
  20. package/data/build/dist/client/avatar/notification-bubble.d.ts.map +1 -1
  21. package/data/build/dist/client/avatar/notification-bubble.js +253 -66
  22. package/data/build/dist/client/avatar/notification-bubble.js.map +1 -1
  23. package/data/build/dist/client/avatar/notification-surface.d.ts +16 -0
  24. package/data/build/dist/client/avatar/notification-surface.d.ts.map +1 -0
  25. package/data/build/dist/client/avatar/notification-surface.js +54 -0
  26. package/data/build/dist/client/avatar/notification-surface.js.map +1 -0
  27. package/data/build/dist/client/avatar/reaction-badge.d.ts.map +1 -1
  28. package/data/build/dist/client/avatar/reaction-badge.js +11 -2
  29. package/data/build/dist/client/avatar/reaction-badge.js.map +1 -1
  30. package/data/build/dist/client/bundle.js +2628 -566
  31. package/data/build/dist/client/bundle.js.map +1 -1
  32. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  33. package/data/build/dist/client/cli-slots.js +26 -2
  34. package/data/build/dist/client/cli-slots.js.map +1 -1
  35. package/data/build/dist/client/client.assistant-notifications.js.map +1 -1
  36. package/data/build/dist/client/client.assistant-workbench.js +235 -109
  37. package/data/build/dist/client/client.assistant-workbench.js.map +1 -1
  38. package/data/build/dist/client/client.delegate-command.js +6 -6
  39. package/data/build/dist/client/client.delegate-command.js.map +1 -1
  40. package/data/build/dist/client/client.manager.js +46 -9
  41. package/data/build/dist/client/client.manager.js.map +1 -1
  42. package/data/build/dist/client/client.native-workspace-store.js +39 -3
  43. package/data/build/dist/client/client.native-workspace-store.js.map +1 -1
  44. package/data/build/dist/client/client.session-translation.js +54 -0
  45. package/data/build/dist/client/client.session-translation.js.map +1 -0
  46. package/data/build/dist/client/client.theme.js +2 -0
  47. package/data/build/dist/client/client.theme.js.map +1 -1
  48. package/data/build/dist/client/client.transport.js +123 -11
  49. package/data/build/dist/client/client.transport.js.map +1 -1
  50. package/data/build/dist/client/desktop-assistant.js +57927 -387
  51. package/data/build/dist/client/features/assistant-conversation-message.d.ts +2 -1
  52. package/data/build/dist/client/features/assistant-conversation-message.d.ts.map +1 -1
  53. package/data/build/dist/client/features/assistant-conversation-message.js +59 -24
  54. package/data/build/dist/client/features/assistant-conversation-message.js.map +1 -1
  55. package/data/build/dist/client/features/assistant-notification-store.d.ts +8 -2
  56. package/data/build/dist/client/features/assistant-notification-store.d.ts.map +1 -1
  57. package/data/build/dist/client/features/assistant-notification-store.js +45 -1
  58. package/data/build/dist/client/features/assistant-notification-store.js.map +1 -1
  59. package/data/build/dist/client/features/assistant-record-style.js +11 -4
  60. package/data/build/dist/client/features/assistant-record-style.js.map +1 -1
  61. package/data/build/dist/client/features/assistant-workbench.d.ts +4 -0
  62. package/data/build/dist/client/features/assistant-workbench.d.ts.map +1 -1
  63. package/data/build/dist/client/features/assistant-workbench.js +27 -1
  64. package/data/build/dist/client/features/assistant-workbench.js.map +1 -1
  65. package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -1
  66. package/data/build/dist/client/features/global-voice-assistant.js +46 -8
  67. package/data/build/dist/client/features/global-voice-assistant.js.map +1 -1
  68. package/data/build/dist/client/features/index.d.ts +1 -0
  69. package/data/build/dist/client/features/index.d.ts.map +1 -1
  70. package/data/build/dist/client/features/index.js +3 -0
  71. package/data/build/dist/client/features/index.js.map +1 -1
  72. package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
  73. package/data/build/dist/client/features/peer-host.js +130 -17
  74. package/data/build/dist/client/features/peer-host.js.map +1 -1
  75. package/data/build/dist/client/features/session-translation.d.ts +3 -0
  76. package/data/build/dist/client/features/session-translation.d.ts.map +1 -0
  77. package/data/build/dist/client/features/session-translation.js +116 -0
  78. package/data/build/dist/client/features/session-translation.js.map +1 -0
  79. package/data/build/dist/client/index.d.ts.map +1 -1
  80. package/data/build/dist/client/index.js +6 -1
  81. package/data/build/dist/client/index.js.map +1 -1
  82. package/data/build/dist/client/locales/assistantWorkbench.d.ts +17 -3
  83. package/data/build/dist/client/locales/assistantWorkbench.d.ts.map +1 -1
  84. package/data/build/dist/client/locales/assistantWorkbench.js +15 -11
  85. package/data/build/dist/client/locales/assistantWorkbench.js.map +1 -1
  86. package/data/build/dist/client/locales/panels.d.ts.map +1 -1
  87. package/data/build/dist/client/locales/panels.js +62 -0
  88. package/data/build/dist/client/locales/panels.js.map +1 -1
  89. package/data/build/dist/client/peer-host-native-projection.d.ts +4 -0
  90. package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
  91. package/data/build/dist/client/peer-host-native-projection.js +40 -1
  92. package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
  93. package/data/build/dist/client/peer-host-remote-events.d.ts +14 -0
  94. package/data/build/dist/client/peer-host-remote-events.d.ts.map +1 -1
  95. package/data/build/dist/client/peer-host-remote-events.js +92 -3
  96. package/data/build/dist/client/peer-host-remote-events.js.map +1 -1
  97. package/data/build/dist/client/session-file-links.d.ts +11 -0
  98. package/data/build/dist/client/session-file-links.d.ts.map +1 -0
  99. package/data/build/dist/client/{peer-host-file-links.js → session-file-links.js} +13 -3
  100. package/data/build/dist/client/session-file-links.js.map +1 -0
  101. package/data/build/dist/client/session-translation-chat.d.ts +6 -0
  102. package/data/build/dist/client/session-translation-chat.d.ts.map +1 -0
  103. package/data/build/dist/client/session-translation-chat.js +686 -0
  104. package/data/build/dist/client/session-translation-chat.js.map +1 -0
  105. package/data/build/dist/client/style.css +2561 -0
  106. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  107. package/data/build/dist/client/subscription-slot.js +5 -1
  108. package/data/build/dist/client/subscription-slot.js.map +1 -1
  109. package/data/build/dist/client/theme.d.ts +2 -0
  110. package/data/build/dist/client/theme.d.ts.map +1 -1
  111. package/data/build/dist/client/theme.js +3 -0
  112. package/data/build/dist/client/theme.js.map +1 -1
  113. package/data/build/dist/client/workspace-session-visibility-dom.d.ts.map +1 -1
  114. package/data/build/dist/client/workspace-session-visibility-dom.js +43 -15
  115. package/data/build/dist/client/workspace-session-visibility-dom.js.map +1 -1
  116. package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.d.ts +9 -1
  117. package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.d.ts.map +1 -1
  118. package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.js +65 -0
  119. package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.js.map +1 -1
  120. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +21 -0
  121. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  122. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +100 -3
  123. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  124. package/data/build/dist/host/cli-adapters/codex-driver.d.ts +11 -1
  125. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  126. package/data/build/dist/host/cli-adapters/codex-driver.js +80 -14
  127. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  128. package/data/build/dist/host/cli-adapters/codex-file-citations.d.ts +13 -0
  129. package/data/build/dist/host/cli-adapters/codex-file-citations.d.ts.map +1 -0
  130. package/data/build/dist/host/cli-adapters/codex-file-citations.js +271 -0
  131. package/data/build/dist/host/cli-adapters/codex-file-citations.js.map +1 -0
  132. package/data/build/dist/host/cli-adapters/command-code-acp-loader.d.ts +8 -1
  133. package/data/build/dist/host/cli-adapters/command-code-acp-loader.d.ts.map +1 -1
  134. package/data/build/dist/host/cli-adapters/command-code-acp-loader.js +45 -2
  135. package/data/build/dist/host/cli-adapters/command-code-acp-loader.js.map +1 -1
  136. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts +8 -2
  137. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  138. package/data/build/dist/host/cli-adapters/command-code-driver.js +32 -3
  139. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  140. package/data/build/dist/host/cli-adapters/command-code-history.d.ts +27 -0
  141. package/data/build/dist/host/cli-adapters/command-code-history.d.ts.map +1 -1
  142. package/data/build/dist/host/cli-adapters/command-code-history.js +131 -1
  143. package/data/build/dist/host/cli-adapters/command-code-history.js.map +1 -1
  144. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js +9 -9
  145. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js.map +1 -1
  146. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts +13 -1
  147. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  148. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +95 -12
  149. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  150. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  151. package/data/build/dist/host/cli-adapters/feature.js +287 -19
  152. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  153. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  154. package/data/build/dist/host/cli-adapters/grok-driver.js +108 -47
  155. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  156. package/data/build/dist/host/cli-adapters/legacy-session-settings.d.ts.map +1 -1
  157. package/data/build/dist/host/cli-adapters/legacy-session-settings.js +7 -2
  158. package/data/build/dist/host/cli-adapters/legacy-session-settings.js.map +1 -1
  159. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +4 -2
  160. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  161. package/data/build/dist/host/cli-adapters/opencode-driver.js +78 -31
  162. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  163. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts +1 -1
  164. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts.map +1 -1
  165. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js +83 -9
  166. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js.map +1 -1
  167. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +5 -1
  168. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
  169. package/data/build/dist/host/cli-adapters/provider-subscription.js +90 -25
  170. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
  171. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  172. package/data/build/dist/host/cli-adapters/registry.js +22 -5
  173. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  174. package/data/build/dist/host/cli-adapters/session-store.d.ts +1 -0
  175. package/data/build/dist/host/cli-adapters/session-store.d.ts.map +1 -1
  176. package/data/build/dist/host/cli-adapters/session-store.js +3 -0
  177. package/data/build/dist/host/cli-adapters/session-store.js.map +1 -1
  178. package/data/build/dist/host/cli-bridge/bridge-server.js +2 -2
  179. package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -1
  180. package/data/build/dist/host/cli-bridge/command-code-mod.js +21 -21
  181. package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -1
  182. package/data/build/dist/host/cli-bridge/dispatch.js +19 -19
  183. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
  184. package/data/build/dist/host/cli-bridge/injections.d.ts +32 -0
  185. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
  186. package/data/build/dist/host/cli-bridge/injections.js +137 -1
  187. package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
  188. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +20 -20
  189. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -1
  190. package/data/build/dist/host/desktop-assistant/controller.d.ts +3 -0
  191. package/data/build/dist/host/desktop-assistant/controller.d.ts.map +1 -1
  192. package/data/build/dist/host/desktop-assistant/controller.js +49 -4
  193. package/data/build/dist/host/desktop-assistant/controller.js.map +1 -1
  194. package/data/build/dist/host/desktop-assistant/mac-agent.d.ts.map +1 -1
  195. package/data/build/dist/host/desktop-assistant/mac-agent.js +15 -3
  196. package/data/build/dist/host/desktop-assistant/mac-agent.js.map +1 -1
  197. package/data/build/dist/host/desktop-assistant/win-agent.d.ts.map +1 -1
  198. package/data/build/dist/host/desktop-assistant/win-agent.js +21 -3
  199. package/data/build/dist/host/desktop-assistant/win-agent.js.map +1 -1
  200. package/data/build/dist/host/features/assistant-management-tools.d.ts +2 -1
  201. package/data/build/dist/host/features/assistant-management-tools.d.ts.map +1 -1
  202. package/data/build/dist/host/features/assistant-management-tools.js +10 -3
  203. package/data/build/dist/host/features/assistant-management-tools.js.map +1 -1
  204. package/data/build/dist/host/features/assistant-notification-events.js +1 -1
  205. package/data/build/dist/host/features/assistant-notification-events.js.map +1 -1
  206. package/data/build/dist/host/features/assistant-notifications.d.ts +8 -1
  207. package/data/build/dist/host/features/assistant-notifications.d.ts.map +1 -1
  208. package/data/build/dist/host/features/assistant-notifications.js +114 -12
  209. package/data/build/dist/host/features/assistant-notifications.js.map +1 -1
  210. package/data/build/dist/host/features/global-voice-rpc.d.ts +2 -2
  211. package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -1
  212. package/data/build/dist/host/features/global-voice-rpc.js +89 -2
  213. package/data/build/dist/host/features/global-voice-rpc.js.map +1 -1
  214. package/data/build/dist/host/features/index.d.ts +1 -0
  215. package/data/build/dist/host/features/index.d.ts.map +1 -1
  216. package/data/build/dist/host/features/index.js +3 -0
  217. package/data/build/dist/host/features/index.js.map +1 -1
  218. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  219. package/data/build/dist/host/features/peer-host.js +41 -5
  220. package/data/build/dist/host/features/peer-host.js.map +1 -1
  221. package/data/build/dist/host/features/session-translation-service.d.ts +31 -0
  222. package/data/build/dist/host/features/session-translation-service.d.ts.map +1 -0
  223. package/data/build/dist/host/features/session-translation-service.js +451 -0
  224. package/data/build/dist/host/features/session-translation-service.js.map +1 -0
  225. package/data/build/dist/host/features/session-translation.d.ts +5 -0
  226. package/data/build/dist/host/features/session-translation.d.ts.map +1 -0
  227. package/data/build/dist/host/features/session-translation.js +37 -0
  228. package/data/build/dist/host/features/session-translation.js.map +1 -0
  229. package/data/build/dist/host/features/types.d.ts +6 -1
  230. package/data/build/dist/host/features/types.d.ts.map +1 -1
  231. package/data/build/dist/host/image-artifact-store.d.ts +21 -0
  232. package/data/build/dist/host/image-artifact-store.d.ts.map +1 -0
  233. package/data/build/dist/host/image-artifact-store.js +136 -0
  234. package/data/build/dist/host/image-artifact-store.js.map +1 -0
  235. package/data/build/dist/host/index.d.ts.map +1 -1
  236. package/data/build/dist/host/index.js +3 -0
  237. package/data/build/dist/host/index.js.map +1 -1
  238. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts +7 -1
  239. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -1
  240. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +23 -4
  241. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js.map +1 -1
  242. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +1 -1
  243. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -1
  244. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +2 -0
  245. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
  246. package/data/build/dist/host/native-session-bridge.d.ts +16 -1
  247. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
  248. package/data/build/dist/host/native-session-bridge.js +69 -9
  249. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  250. package/data/build/dist/host/rpc.js +4 -4
  251. package/data/build/dist/host/rpc.js.map +1 -1
  252. package/data/build/dist/host/session-changes.d.ts.map +1 -1
  253. package/data/build/dist/host/session-changes.js +196 -13
  254. package/data/build/dist/host/session-changes.js.map +1 -1
  255. package/data/build/dist/host/settings.d.ts.map +1 -1
  256. package/data/build/dist/host/settings.js +8 -0
  257. package/data/build/dist/host/settings.js.map +1 -1
  258. package/data/build/dist/shared/assistant-message-timeline.d.ts +11 -0
  259. package/data/build/dist/shared/assistant-message-timeline.d.ts.map +1 -1
  260. package/data/build/dist/shared/assistant-message-timeline.js +19 -0
  261. package/data/build/dist/shared/assistant-message-timeline.js.map +1 -1
  262. package/data/build/dist/shared/assistant-notifications.d.ts +35 -1
  263. package/data/build/dist/shared/assistant-notifications.d.ts.map +1 -1
  264. package/data/build/dist/shared/assistant-notifications.js +8 -0
  265. package/data/build/dist/shared/assistant-notifications.js.map +1 -1
  266. package/data/build/dist/shared/assistant-session-messages.d.ts +13 -0
  267. package/data/build/dist/shared/assistant-session-messages.d.ts.map +1 -0
  268. package/data/build/dist/shared/assistant-session-messages.js +155 -0
  269. package/data/build/dist/shared/assistant-session-messages.js.map +1 -0
  270. package/data/build/dist/shared/contracts/assistant.d.ts +13 -0
  271. package/data/build/dist/shared/contracts/assistant.d.ts.map +1 -1
  272. package/data/build/dist/shared/contracts/cli-adapter.d.ts +25 -2
  273. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  274. package/data/build/dist/shared/contracts/config.d.ts +6 -0
  275. package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
  276. package/data/build/dist/shared/contracts/config.js +3 -0
  277. package/data/build/dist/shared/contracts/config.js.map +1 -1
  278. package/data/build/dist/shared/contracts/session-translation.d.ts +58 -0
  279. package/data/build/dist/shared/contracts/session-translation.d.ts.map +1 -0
  280. package/data/build/dist/shared/contracts/session-translation.js +23 -0
  281. package/data/build/dist/shared/contracts/session-translation.js.map +1 -0
  282. package/data/build/dist/shared/contracts/version.d.ts +1 -1
  283. package/data/build/dist/shared/contracts/version.js +1 -1
  284. package/data/build/dist/shared/delegation-carrier.js +6 -6
  285. package/data/build/dist/shared/delegation-carrier.js.map +1 -1
  286. package/data/build/dist/shared/desktop-assistant.d.ts +10 -3
  287. package/data/build/dist/shared/desktop-assistant.d.ts.map +1 -1
  288. package/data/build/dist/shared/desktop-assistant.js +46 -14
  289. package/data/build/dist/shared/desktop-assistant.js.map +1 -1
  290. package/data/build/dist/shared/index.d.ts +2 -1
  291. package/data/build/dist/shared/index.d.ts.map +1 -1
  292. package/data/build/dist/shared/index.js +2 -1
  293. package/data/build/dist/shared/index.js.map +1 -1
  294. package/package.json +17 -15
  295. package/profile/README.md +2 -2
  296. package/profile/package.json +2 -2
  297. package/profile/version.json +1 -1
  298. package/version.json +1 -1
  299. package/data/build/dist/client/peer-host-file-links.d.ts +0 -8
  300. package/data/build/dist/client/peer-host-file-links.d.ts.map +0 -1
  301. package/data/build/dist/client/peer-host-file-links.js.map +0 -1
@@ -0,0 +1,271 @@
1
+ import { fromMarkdown } from 'mdast-util-from-markdown';
2
+ const CITATION_PREFIX = ':codex-file-citation{';
3
+ const FILE_LINK_URI_SCHEMES = new Set(['about', 'blob', 'data', 'file', 'ftp', 'http', 'https', 'mailto', 'ssh', 'tel', 'urn', 'vscode', 'ws', 'wss']);
4
+ /** Codex 引用按正文 item 暂存,不能将半条指令提前追加到 DSH 的增量日志。 */
5
+ export class CodexFileCitationNormalizer {
6
+ markdown = new MarkdownFileLinkNormalizer();
7
+ pending = '';
8
+ message;
9
+ *push(chunk) {
10
+ for (const citation of this.pushCitation(chunk))
11
+ yield* this.markdown.push(citation);
12
+ }
13
+ *flush() {
14
+ for (const citation of this.flushCitations())
15
+ yield* this.markdown.push(citation);
16
+ yield* this.markdown.flush();
17
+ }
18
+ *pushCitation(chunk) {
19
+ if (chunk.type !== 'text-delta') {
20
+ // 用量和推理可以穿插在正文 delta 之间,不代表正文 item 已经结束。
21
+ if (chunk.type !== 'usage' && chunk.type !== 'reasoning-delta' && chunk.type !== 'reasoning-snapshot')
22
+ yield* this.flushCitations();
23
+ yield chunk;
24
+ return;
25
+ }
26
+ if (this.message?.messageId !== chunk.messageId)
27
+ yield* this.flushCitations();
28
+ this.message = chunk;
29
+ this.pending += chunk.text;
30
+ let text = '';
31
+ while (this.pending !== '') {
32
+ const start = this.pending.indexOf(CITATION_PREFIX);
33
+ if (start < 0) {
34
+ // 只保留可能是下一条指令开头的后缀;普通正文立即输出。
35
+ let retained = Math.min(this.pending.length, CITATION_PREFIX.length - 1);
36
+ while (retained > 0 && !CITATION_PREFIX.startsWith(this.pending.slice(-retained)))
37
+ retained -= 1;
38
+ text += this.pending.slice(0, this.pending.length - retained);
39
+ this.pending = retained === 0 ? '' : this.pending.slice(-retained);
40
+ break;
41
+ }
42
+ text += this.pending.slice(0, start);
43
+ this.pending = this.pending.slice(start);
44
+ const end = citationEnd(this.pending);
45
+ if (end < 0)
46
+ break;
47
+ const citation = this.pending.slice(0, end + 1);
48
+ text += citationLink(citation);
49
+ this.pending = this.pending.slice(end + 1);
50
+ }
51
+ if (text !== '')
52
+ yield { ...chunk, text };
53
+ }
54
+ /** 消息、工具、step 和终态边界原样结算未闭合指令,保留所属 messageId。 */
55
+ *flushCitations() {
56
+ const text = this.pending;
57
+ this.pending = '';
58
+ if (text !== '' && this.message !== undefined)
59
+ yield { ...this.message, text };
60
+ this.message = undefined;
61
+ }
62
+ }
63
+ /** 保留整条消息的 Markdown 上下文,只追加已确定的前缀,不能回写已发出的 delta。 */
64
+ class MarkdownFileLinkNormalizer {
65
+ source = '';
66
+ emitted = 0;
67
+ message;
68
+ *push(chunk) {
69
+ if (chunk.type !== 'text-delta') {
70
+ if (chunk.type !== 'usage' && chunk.type !== 'reasoning-delta' && chunk.type !== 'reasoning-snapshot')
71
+ yield* this.flush();
72
+ yield chunk;
73
+ return;
74
+ }
75
+ if (this.message?.messageId !== chunk.messageId)
76
+ yield* this.flush();
77
+ this.message = chunk;
78
+ const settled = this.emitted === this.source.length;
79
+ this.source += chunk.text;
80
+ // 已确定的上下文中,普通文字不改变链接/代码语法,无需重新解析整条消息。
81
+ if (settled && !/[\[\]()`~\r\n]/u.test(chunk.text)) {
82
+ this.emitted = this.source.length;
83
+ yield chunk;
84
+ return;
85
+ }
86
+ yield* this.drain(false);
87
+ }
88
+ *flush() {
89
+ yield* this.drain(true);
90
+ this.source = '';
91
+ this.emitted = 0;
92
+ this.message = undefined;
93
+ }
94
+ *drain(final) {
95
+ if (this.message === undefined || this.emitted === this.source.length)
96
+ return;
97
+ const replacements = [];
98
+ let safeEnd = this.source.length;
99
+ const visit = (node) => {
100
+ const start = node.position?.start.offset;
101
+ const end = node.position?.end.offset;
102
+ if (start === undefined || end === undefined || end <= this.emitted)
103
+ return;
104
+ if (node.type === 'link') {
105
+ const labelEnd = node.children.at(-1)?.position?.end.offset ?? start + 1;
106
+ const separator = this.source.indexOf('](', labelEnd);
107
+ // 自动链接没有 ](;仅处理显式 Markdown 文件链接,保留标签、标题和括号。
108
+ if (this.source[start] === '[' && separator >= start && separator < end) {
109
+ let targetStart = separator + 2;
110
+ while (/\s/u.test(this.source[targetStart] ?? ''))
111
+ targetStart += 1;
112
+ const angle = this.source[targetStart] === '<';
113
+ const pathStart = targetStart + (angle ? 1 : 0);
114
+ let pathEnd = pathStart;
115
+ let depth = 0;
116
+ for (; pathEnd < end; pathEnd += 1) {
117
+ const character = this.source[pathEnd];
118
+ if (character === '\\') {
119
+ pathEnd += 1;
120
+ continue;
121
+ }
122
+ if (angle) {
123
+ if (character === '>')
124
+ break;
125
+ }
126
+ else {
127
+ if (/\s/u.test(character) || (character === ')' && depth === 0))
128
+ break;
129
+ if (character === '(')
130
+ depth += 1;
131
+ else if (character === ')')
132
+ depth -= 1;
133
+ }
134
+ }
135
+ const target = this.source.slice(pathStart, pathEnd);
136
+ const normalized = fileLineTarget(target);
137
+ if (normalized !== target)
138
+ replacements.push({ start: pathStart, end: pathEnd, text: normalized });
139
+ }
140
+ return;
141
+ }
142
+ if (node.type === 'code') {
143
+ // 未收到换行前,``` 仍可能变成普通行内文本(例如随后出现另一组反引号)。
144
+ if (!final && !this.source.slice(start, end).includes('\n'))
145
+ safeEnd = Math.min(safeEnd, start);
146
+ return;
147
+ }
148
+ if (node.type === 'inlineCode' || node.type === 'html' || node.type === 'image')
149
+ return;
150
+ if (node.type === 'text' && !final) {
151
+ // 未闭合的标签或代码跨度可能在后续分片中包住链接,必须等语法确定后再输出。
152
+ for (let index = Math.max(start, this.emitted); index < end; index += 1) {
153
+ const character = this.source[index];
154
+ if (character === '\\') {
155
+ index += 1;
156
+ continue;
157
+ }
158
+ if (character === '[') {
159
+ const close = this.source.indexOf(']', index + 1);
160
+ if (close >= 0 && close + 1 < this.source.length && this.source[close + 1] !== '(')
161
+ continue;
162
+ }
163
+ const pendingFence = character === '~'
164
+ && /^ {0,3}~*$/u.test(this.source.slice(this.source.lastIndexOf('\n', index - 1) + 1, index))
165
+ && /^~*$/u.test(this.source.slice(index));
166
+ if (character === '`' || character === '[' || pendingFence) {
167
+ safeEnd = Math.min(safeEnd, index);
168
+ break;
169
+ }
170
+ }
171
+ }
172
+ if ('children' in node)
173
+ for (const child of node.children)
174
+ visit(child);
175
+ };
176
+ visit(fromMarkdown(this.source));
177
+ safeEnd = Math.max(safeEnd, this.emitted);
178
+ let cursor = this.emitted;
179
+ let text = '';
180
+ for (const replacement of replacements) {
181
+ if (replacement.start < cursor || replacement.end > safeEnd)
182
+ continue;
183
+ text += this.source.slice(cursor, replacement.start) + replacement.text;
184
+ cursor = replacement.end;
185
+ }
186
+ text += this.source.slice(cursor, safeEnd);
187
+ this.emitted = safeEnd;
188
+ if (text !== '')
189
+ yield { ...this.message, text };
190
+ }
191
+ }
192
+ function fileLineTarget(target) {
193
+ const match = /:([1-9]\d*)(?:-([1-9]\d*))?$/u.exec(target);
194
+ if (match === null || !Number.isSafeInteger(Number(match[1])))
195
+ return target;
196
+ const path = target.slice(0, match.index);
197
+ const start = Number(match[1]);
198
+ const end = match[2] === undefined ? undefined : Number(match[2]);
199
+ if (end !== undefined && (!Number.isSafeInteger(end) || end < start))
200
+ return target;
201
+ // 裸盘符加数字仍是 Windows 路径片段,不把它误当成无扩展名文件。
202
+ if (/^[a-z]:[1-9]\d*(?:-[1-9]\d*)?$/iu.test(target))
203
+ return target;
204
+ // Windows 盘符不属于 URI scheme;常见 URI 即使没有 // 也必须原样保留。
205
+ const scheme = /^([a-z][\w+.-]*):/iu.exec(target)?.[1]?.toLowerCase();
206
+ if (scheme !== undefined && !/^[a-z]:[/\\]/iu.test(target) && FILE_LINK_URI_SCHEMES.has(scheme))
207
+ return target;
208
+ if (/^[/\\]{2}/u.test(path) || /:\d+$/u.test(path))
209
+ return target;
210
+ if (/[?#\u0000-\u001f\u007f]/u.test(path))
211
+ return target;
212
+ return `${path}#L${match[1]}${end === undefined ? '' : `-L${match[2]}`}`;
213
+ }
214
+ /** 引号里的花括号属于路径或属性,不能提前截断指令。 */
215
+ function citationEnd(text) {
216
+ let quote = '';
217
+ for (let index = CITATION_PREFIX.length; index < text.length; index += 1) {
218
+ const character = text[index];
219
+ if (quote !== '') {
220
+ if (character === '\\' && (text[index + 1] === quote || text[index + 1] === '\\'))
221
+ index += 1;
222
+ else if (character === quote)
223
+ quote = '';
224
+ }
225
+ else if (character === '"' || character === "'")
226
+ quote = character;
227
+ else if (character === '}')
228
+ return index;
229
+ }
230
+ return -1;
231
+ }
232
+ function citationLink(citation) {
233
+ const attributes = citation.slice(CITATION_PREFIX.length, -1);
234
+ const values = new Map();
235
+ // 保留 Windows 路径的字面反斜杠,不按 JSON 转义解释 \n、\t 等路径片段。
236
+ const pattern = /\s*([\w-]+)\s*=\s*(?:"((?:\\.|[^"\\])*)"|'((?:\\.|[^'\\])*)'|([^\s"']+))/gu;
237
+ let consumed = 0;
238
+ for (const match of attributes.matchAll(pattern)) {
239
+ if (match.index !== consumed || values.has(match[1]))
240
+ return citation;
241
+ consumed = match.index + match[0].length;
242
+ values.set(match[1], match[2] ?? match[3] ?? match[4]);
243
+ }
244
+ if (attributes.slice(consumed).trim() !== '')
245
+ return citation;
246
+ const path = values.get('path');
247
+ const purpose = values.get('purpose');
248
+ if (values.get('mode') === 'live' || (purpose !== 'output' && purpose !== 'source') || path === undefined || path.trim() === '')
249
+ return citation;
250
+ // 盘符不是 URI scheme;live 标识及真正的 URI 都不能作为本地文件打开。
251
+ if (/^[a-z][\w+.-]*:/iu.test(path) && !/^[a-z]:[/\\]/iu.test(path))
252
+ return citation;
253
+ if (/[\u0000-\u001f\u007f]/u.test(path) || /^[/\\]{2}/u.test(path))
254
+ return citation;
255
+ // DSH Markdown 的 openFile delegate 接收本地路径,并沿当前会话路由到 Host。
256
+ // 对路径逐段编码,避免空格、#、? 和 % 被误作 Markdown 或 URI 分隔符。
257
+ const normalized = path.replace(/\\/gu, '/').replace(/^\/(?=[a-z]:\/)/iu, '');
258
+ let target = normalized.split('/').map((segment) => encodeURIComponent(segment).replace(/%3A/giu, ':')).join('/');
259
+ const start = values.get('line_start');
260
+ const end = values.get('line_end');
261
+ if (start !== undefined && /^[1-9]\d*$/u.test(start) && Number.isSafeInteger(Number(start))) {
262
+ target += `#L${start}`;
263
+ if (end !== undefined && /^[1-9]\d*$/u.test(end) && Number.isSafeInteger(Number(end)) && Number(end) >= Number(start))
264
+ target += `-L${end}`;
265
+ }
266
+ const label = path.replace(/[\\`*_[\]<>&]/gu, '\\$&');
267
+ // 完整属性作为 Markdown title 保留下来,包括 purpose、行号和额外引用信息。
268
+ const title = attributes.replace(/[\\"&]/gu, '\\$&');
269
+ return `[${label}](<${target}> "${title}")`;
270
+ }
271
+ //# sourceMappingURL=codex-file-citations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-file-citations.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/codex-file-citations.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,15 @@
1
1
  /**
2
- * Command Code ACP 自由文本兼容桥。
2
+ * Command Code ACP 兼容桥。
3
3
  *
4
4
  * Command Code 1.74.3 的 ACP 服务把 ask_user_question 映射成
5
5
  * session/request_permission,并且只从 outcome.optionId 还原固定选项文本。
6
+ *
7
+ * 同一份 bundle 还只把内置模型目录当作可选模型白名单:ACP 的 availableModels()
8
+ * 与 Agent 的 selectableModels() 都来自 catalogModels(),因此 providers.json 里
9
+ * 声明的 BYOK 模型(例如 mcgrox/deepseek-v4.1-flash)会在 session/set_model 时被
10
+ * 拒绝成 `Unknown model: ...`,而 CLI 自己的默认模型走另一条路径不受影响。这里
11
+ * 把 BYOK 模型补进内存中的目录,使 ACP 会话能切换并真正路由到对应提供者。
12
+ *
6
13
  * 这个 loader 只改写内存中的 cli.mjs,不修改用户安装的 npm 包或 Desktop
7
14
  * 目录;当上游实现已经变化时保持原模块不变。
8
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"command-code-acp-loader.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-acp-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU,aAAa;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACnD;AAED,UAAU,YAAY;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAED,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAI9E,0DAA0D;AAC1D,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAMzG"}
1
+ {"version":3,"file":"command-code-acp-loader.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-acp-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,UAAU,aAAa;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACnD;AAED,UAAU,YAAY;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAED,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAI9E,0DAA0D;AAC1D,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAMzG"}
@@ -1,8 +1,15 @@
1
1
  /**
2
- * Command Code ACP 自由文本兼容桥。
2
+ * Command Code ACP 兼容桥。
3
3
  *
4
4
  * Command Code 1.74.3 的 ACP 服务把 ask_user_question 映射成
5
5
  * session/request_permission,并且只从 outcome.optionId 还原固定选项文本。
6
+ *
7
+ * 同一份 bundle 还只把内置模型目录当作可选模型白名单:ACP 的 availableModels()
8
+ * 与 Agent 的 selectableModels() 都来自 catalogModels(),因此 providers.json 里
9
+ * 声明的 BYOK 模型(例如 mcgrox/deepseek-v4.1-flash)会在 session/set_model 时被
10
+ * 拒绝成 `Unknown model: ...`,而 CLI 自己的默认模型走另一条路径不受影响。这里
11
+ * 把 BYOK 模型补进内存中的目录,使 ACP 会话能切换并真正路由到对应提供者。
12
+ *
6
13
  * 这个 loader 只改写内存中的 cli.mjs,不修改用户安装的 npm 包或 Desktop
7
14
  * 目录;当上游实现已经变化时保持原模块不变。
8
15
  */
@@ -13,7 +20,7 @@ export async function load(url, context, nextLoad) {
13
20
  if (!url.endsWith(COMMAND_CODE_CLI_SUFFIX) || loaded.format !== 'module' || loaded.source === undefined)
14
21
  return loaded;
15
22
  const source = typeof loaded.source === 'string' ? loaded.source : new TextDecoder().decode(loaded.source);
16
- const patched = patchCommandCodeAcpQuestion(source);
23
+ const patched = patchCommandCodeAcpByokModels(patchCommandCodeAcpQuestion(source));
17
24
  return patched === source ? loaded : { ...loaded, source: patched, shortCircuit: true };
18
25
  }
19
26
  /**
@@ -36,4 +43,40 @@ function patchCommandCodeAcpQuestion(source) {
36
43
  patched = patched.replace(questionDeclaration, `${helper}${questionDeclaration}`);
37
44
  return patched;
38
45
  }
46
+ /** 上游 `catalogModels()` 的原始声明;命中不到说明实现已变化,保持模块不变。 */
47
+ const CATALOG_MODELS_DECLARATION = 'function catalogModels(){return Object.values(RL).filter(e=>!e.hidden).map(e=>({id:e.id,name:e.name,description:e.description||null}))}';
48
+ /**
49
+ * 注入到 bundle 的 BYOK 目录补充函数。
50
+ *
51
+ * 用 `process.getBuiltinModule` 取 fs/os,避免依赖 cli.mjs 压缩后的导入别名。
52
+ * 每次调用重读 providers.json,用户改完 BYOK 配置无需重启 ACP 进程;文件不存在
53
+ * 或解析失败时返回空数组,目录行为与上游完全一致。
54
+ */
55
+ const BYOK_MODELS_HELPER = 'function codingNsByokModels(){try{' +
56
+ 'const fs=process.getBuiltinModule("node:fs"),os=process.getBuiltinModule("node:os");' +
57
+ 'const p=os.homedir()+"/.commandcode/providers.json";' +
58
+ 'if(!fs.existsSync(p))return[];' +
59
+ 'const c=JSON.parse(fs.readFileSync(p,"utf8"));' +
60
+ 'const m=c&&"object"==typeof c.provider?c.provider:c&&"object"==typeof c.providers?c.providers:null;' +
61
+ 'if(!m)return[];' +
62
+ 'const out=[];' +
63
+ 'for(const id of Object.keys(m)){const v=m[id];if(!v||"object"!=typeof v.models)continue;' +
64
+ 'for(const name of Object.keys(v.models))out.push({id:id+"/"+name,name:id+"/"+name,description:"string"==typeof v.name?v.name:"byok"})}' +
65
+ 'return out}catch{return[]}}';
66
+ /** 打补丁后的 `catalogModels()`:内置目录在前,BYOK 模型去重后追加。 */
67
+ const BYOK_MODELS_DECLARATION = BYOK_MODELS_HELPER +
68
+ 'function catalogModels(){const a=Object.values(RL).filter(e=>!e.hidden).map(e=>({id:e.id,name:e.name,description:e.description||null}));' +
69
+ 'for(const e of codingNsByokModels())if(!a.some(n=>n.id===e.id))a.push(e);return a}';
70
+ /**
71
+ * 把 providers.json 声明的 BYOK 模型并入模型目录。
72
+ *
73
+ * `catalogModels()` 同时喂给 ACP 的 availableModels() 与 Agent 的 selectableModels(),
74
+ * 是唯一的校验收口;只补这一处即可让 session/set_model 与后续请求路由同时生效。
75
+ * 重复 id(BYOK 提供者与内置目录同名)保留内置条目,避免同一模型出现两次。
76
+ */
77
+ function patchCommandCodeAcpByokModels(source) {
78
+ if (!source.includes(CATALOG_MODELS_DECLARATION))
79
+ return source;
80
+ return source.replace(CATALOG_MODELS_DECLARATION, BYOK_MODELS_DECLARATION);
81
+ }
39
82
  //# sourceMappingURL=command-code-acp-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-code-acp-loader.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-acp-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,MAAM,uBAAuB,GAAG,eAAe,CAAA;AAE/C,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,OAAsB,EAAE,QAAkB;IAChF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC3C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACtH,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1G,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAA;IACnD,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAA;AACzF,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,MAAc;IACjD,MAAM,mBAAmB,GAAG,sCAAsC,CAAA;IAClE,MAAM,eAAe,GAAG,qEAAqE,CAAA;IAC7F,MAAM,cAAc,GAAG,yHAAyH,CAAA;IAChJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,MAAM,CAAA;IAEjI,MAAM,MAAM,GAAG,6eAA6e,CAAA;IAC5f,MAAM,mBAAmB,GAAG,qHAAqH,CAAA;IACjJ,MAAM,kBAAkB,GAAG,gLAAgL,CAAA;IAC3M,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAA;IAClE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;IAC7D,mDAAmD;IACnD,qDAAqD;IACrD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,MAAM,GAAG,mBAAmB,EAAE,CAAC,CAAA;IACjF,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"command-code-acp-loader.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-acp-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,MAAM,uBAAuB,GAAG,eAAe,CAAA;AAE/C,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,OAAsB,EAAE,QAAkB;IAChF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC3C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACtH,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1G,MAAM,OAAO,GAAG,6BAA6B,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAA;IAClF,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAA;AACzF,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,MAAc;IACjD,MAAM,mBAAmB,GAAG,sCAAsC,CAAA;IAClE,MAAM,eAAe,GAAG,qEAAqE,CAAA;IAC7F,MAAM,cAAc,GAAG,yHAAyH,CAAA;IAChJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,MAAM,CAAA;IAEjI,MAAM,MAAM,GAAG,6eAA6e,CAAA;IAC5f,MAAM,mBAAmB,GAAG,qHAAqH,CAAA;IACjJ,MAAM,kBAAkB,GAAG,gLAAgL,CAAA;IAC3M,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAA;IAClE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;IAC7D,mDAAmD;IACnD,qDAAqD;IACrD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,MAAM,GAAG,mBAAmB,EAAE,CAAC,CAAA;IACjF,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,qDAAqD;AACrD,MAAM,0BAA0B,GAC9B,yIAAyI,CAAA;AAE3I;;;;;;GAMG;AACH,MAAM,kBAAkB,GACtB,oCAAoC;IACpC,sFAAsF;IACtF,sDAAsD;IACtD,gCAAgC;IAChC,gDAAgD;IAChD,qGAAqG;IACrG,iBAAiB;IACjB,eAAe;IACf,0FAA0F;IAC1F,wIAAwI;IACxI,6BAA6B,CAAA;AAE/B,mDAAmD;AACnD,MAAM,uBAAuB,GAC3B,kBAAkB;IAClB,0IAA0I;IAC1I,oFAAoF,CAAA;AAEtF;;;;;;GAMG;AACH,SAAS,6BAA6B,CAAC,MAAc;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAAE,OAAO,MAAM,CAAA;IAC/D,OAAO,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,uBAAuB,CAAC,CAAA;AAC5E,CAAC"}
@@ -35,8 +35,14 @@ export declare class CommandCodeDriver implements CodingNsCliDriver {
35
35
  readonly protocol: 'command' | 'acp';
36
36
  readonly capabilities: readonly CodingNsCliCapability[];
37
37
  };
38
- /** 驱动自己维护 Provider turn 边界,Host 可以把工具边界映射为 DSH step。 */
39
- readonly supportsSegmentedTurns = true;
38
+ /**
39
+ * print 回合由驱动自己维护 Provider turn 边界;ACP 回合的整个 agent 循环跑在
40
+ * 一个 `session/prompt` 里,驱动无法在中间结束 llm/stream,只能交给 Registry
41
+ * 在工具完成后挂起同一个迭代器分步。
42
+ */
43
+ get supportsSegmentedTurns(): boolean;
44
+ /** ACP 回合由 Registry 按工具边界挂起并续读同一个迭代器。 */
45
+ get supportsToolStepSplitting(): boolean;
40
46
  private readonly homeDirectory;
41
47
  private readonly binaries;
42
48
  private readonly runSpawnSync;
@@ -1 +1 @@
1
- {"version":3,"file":"command-code-driver.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-code-driver.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-driver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAKrD,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAElB,+BAA+B,EAC/B,6BAA6B,EAC7B,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAWjH,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC/B,MAAM,2BAA2B,CAAA;AAqNlC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,SAAS,CAAA;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;IACzC,yBAAyB;IACzB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,CAAC,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAA;IAC7D,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAiCD;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,iBAAiB;IACzD,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;QAC3B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;QAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAA;QACpC,QAAQ,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,CAAA;KACxD,CAAA;IACD;;;;OAIG;IACH,IAAI,sBAAsB,IAAI,OAAO,CAAwC;IAC7E,yCAAyC;IACzC,IAAI,yBAAyB,IAAI,OAAO,CAAwC;IAChF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,+BAA+B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClH,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,6BAA6B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9G,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsD;IACpF,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,iBAAiB,CAAgD;IACzE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;gBAE/C,OAAO,GAAE,wBAA6B;IAwElD,qDAAqD;IACrD,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,yBAAyB,EAAE,CAAC;IAIpF,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAInF,2DAA2D;IACrD,UAAU,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,SAAS,0BAA0B,EAAE,CAAC;IASlG,yDAAyD;YAC3C,iBAAiB;IAe/B,OAAO,CAAC,gBAAgB;IAQxB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAI9H,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAItG,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAInH,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,2BAAuC,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI7L,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,2BAAuC,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAInM,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,8BAA8B;IAI7Q,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjF,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlG,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAIvK,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5E,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAIzG,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAIzG,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIxN,MAAM,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAOzF,UAAU,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA+CpD,kDAAkD;YACpC,qBAAqB;IAkB7B,YAAY,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAwDxF,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa,CAAC,kBAAkB,CAAC;IAqClF,OAAO,IAAI,IAAI;IAUf,iDAAiD;IACjD,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAK7C,2CAA2C;IAC3C,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,SAAS;IAuDjB;;;;;;;;OAQG;YACW,eAAe;IAqD7B,8CAA8C;IAC9C,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,aAAa;IA6BrB,uCAAuC;IACjC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjD,mCAAmC;IACnC,OAAO,CAAC,mBAAmB;IAc3B,4CAA4C;YAC9B,WAAW;YA2FV,WAAW;IA4D1B,OAAO,CAAC,WAAW;CAapB"}
@@ -14,7 +14,7 @@ import { commandCodeNativeAgentArgs, commandCodeNativeAgentEnvironment, subagent
14
14
  import { getSubagentBridge } from '../cli-bridge/bridge-holder.js';
15
15
  import { AcpCliDriver } from './acp-cli-driver.js';
16
16
  import { knownCommandCodeContextWindow } from './model-catalog.js';
17
- import { CommandCodeHistory, } from './command-code-history.js';
17
+ import { CommandCodeHistory, CommandCodeUsageTail, } from './command-code-history.js';
18
18
  const WINDOWS = process.platform === 'win32';
19
19
  const COMMAND_CODE_BINARIES = WINDOWS
20
20
  ? ['command-code', 'commandcode', 'cmdc']
@@ -196,8 +196,14 @@ function commandCodePermissionArgs(permission) {
196
196
  */
197
197
  export class CommandCodeDriver {
198
198
  descriptor;
199
- /** 驱动自己维护 Provider turn 边界,Host 可以把工具边界映射为 DSH step。 */
200
- supportsSegmentedTurns = true;
199
+ /**
200
+ * print 回合由驱动自己维护 Provider turn 边界;ACP 回合的整个 agent 循环跑在
201
+ * 一个 `session/prompt` 里,驱动无法在中间结束 llm/stream,只能交给 Registry
202
+ * 在工具完成后挂起同一个迭代器分步。
203
+ */
204
+ get supportsSegmentedTurns() { return this.acpDriver === undefined; }
205
+ /** ACP 回合由 Registry 按工具边界挂起并续读同一个迭代器。 */
206
+ get supportsToolStepSplitting() { return this.acpDriver !== undefined; }
201
207
  homeDirectory;
202
208
  binaries;
203
209
  runSpawnSync;
@@ -229,6 +235,10 @@ export class CommandCodeDriver {
229
235
  const acpCapabilities = [...legacyCapabilities, 'permission', 'questions'];
230
236
  this.descriptor = { id: 'command-code', name: 'Command Code', protocol: options.enableAcp === true ? 'acp' : 'command', capabilities: options.enableAcp === true ? acpCapabilities : legacyCapabilities };
231
237
  if (options.enableAcp === true) {
238
+ // ACP 只在 prompt 结束时给出整轮累计用量。这里按 canonical transcript 的增量
239
+ // 把每次模型请求的用量单独交给驱动,ContextMeter 才不会把整轮累计(实测
240
+ // 17.6M)当成当前上下文占用。
241
+ const usageTail = new CommandCodeUsageTail(this.homeDirectory);
232
242
  this.acpDriver = new AcpCliDriver({
233
243
  binaries: this.binaries,
234
244
  spawnSync: this.runSpawnSync,
@@ -245,6 +255,25 @@ export class CommandCodeDriver {
245
255
  readQuestionRequest: readCommandCodeQuestionRequest,
246
256
  decidePermission: commandCodeAcpPermissionDecision,
247
257
  enrichUsage: enrichCommandCodeUsage,
258
+ stepUsage: {
259
+ begin: (input, providerSessionId) => {
260
+ usageTail.begin(providerSessionId, input.cwd ?? process.cwd());
261
+ },
262
+ take: (input, providerSessionId) => {
263
+ const delta = usageTail.take(providerSessionId, input.cwd ?? process.cwd());
264
+ if (delta === null)
265
+ return null;
266
+ // 只给原始四桶:上下文窗口与占用由 ACP 驱动合并 Provider 的 usage_update
267
+ // 之后再补齐,避免这里先把 contextTokens 写成请求规模、盖掉真实占用。
268
+ const usage = usageChunk({
269
+ inputTokens: delta.inputTokens,
270
+ outputTokens: delta.outputTokens,
271
+ cacheReadTokens: delta.cacheReadTokens,
272
+ cacheWriteTokens: delta.cacheWriteTokens,
273
+ });
274
+ return usage?.type === 'usage' ? usage : null;
275
+ },
276
+ },
248
277
  probeReason: 'Command Code ACP 不公开可安全读取的会话索引',
249
278
  });
250
279
  this.respondPermission = (sessionId, response) => this.acpDriver.respondPermission(sessionId, response);