@jingyi0605/codingns4dsh 0.2.0-rc3 → 0.2.1-beta.1

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 (377) hide show
  1. package/README.en.md +6 -6
  2. package/README.md +42 -29
  3. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts +1 -1
  4. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts.map +1 -1
  5. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js +2 -2
  6. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js.map +1 -1
  7. package/data/build/dist/bootstrap/index.d.ts +1 -1
  8. package/data/build/dist/bootstrap/index.d.ts.map +1 -1
  9. package/data/build/dist/client/bundle.js +3164 -181
  10. package/data/build/dist/client/bundle.js.map +1 -1
  11. package/data/build/dist/client/cli-catalog.d.ts +1 -1
  12. package/data/build/dist/client/cli-catalog.d.ts.map +1 -1
  13. package/data/build/dist/client/cli-catalog.js +3 -3
  14. package/data/build/dist/client/cli-catalog.js.map +1 -1
  15. package/data/build/dist/client/cli-slots.d.ts +4 -0
  16. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  17. package/data/build/dist/client/cli-slots.js +70 -9
  18. package/data/build/dist/client/cli-slots.js.map +1 -1
  19. package/data/build/dist/client/context-breakdown-dom.d.ts +1 -1
  20. package/data/build/dist/client/context-breakdown-dom.d.ts.map +1 -1
  21. package/data/build/dist/client/context-breakdown-dom.js +1 -1
  22. package/data/build/dist/client/context-breakdown-dom.js.map +1 -1
  23. package/data/build/dist/client/features/assistant-panel.d.ts +5 -0
  24. package/data/build/dist/client/features/assistant-panel.d.ts.map +1 -0
  25. package/data/build/dist/client/features/assistant-panel.js +127 -0
  26. package/data/build/dist/client/features/assistant-panel.js.map +1 -0
  27. package/data/build/dist/client/features/global-voice-assistant.d.ts +10 -0
  28. package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -0
  29. package/data/build/dist/client/features/global-voice-assistant.js +330 -0
  30. package/data/build/dist/client/features/global-voice-assistant.js.map +1 -0
  31. package/data/build/dist/client/features/index.d.ts +2 -0
  32. package/data/build/dist/client/features/index.d.ts.map +1 -1
  33. package/data/build/dist/client/features/index.js +4 -0
  34. package/data/build/dist/client/features/index.js.map +1 -1
  35. package/data/build/dist/client/features/lan-access.d.ts.map +1 -1
  36. package/data/build/dist/client/features/lan-access.js +3 -1
  37. package/data/build/dist/client/features/lan-access.js.map +1 -1
  38. package/data/build/dist/client/features/types.d.ts +4 -1
  39. package/data/build/dist/client/features/types.d.ts.map +1 -1
  40. package/data/build/dist/client/features/voice-conversation-dialog.d.ts +20 -0
  41. package/data/build/dist/client/features/voice-conversation-dialog.d.ts.map +1 -0
  42. package/data/build/dist/client/features/voice-conversation-dialog.js +59 -0
  43. package/data/build/dist/client/features/voice-conversation-dialog.js.map +1 -0
  44. package/data/build/dist/client/features/voice-initialization-dialog.d.ts +10 -0
  45. package/data/build/dist/client/features/voice-initialization-dialog.d.ts.map +1 -0
  46. package/data/build/dist/client/features/voice-initialization-dialog.js +90 -0
  47. package/data/build/dist/client/features/voice-initialization-dialog.js.map +1 -0
  48. package/data/build/dist/client/features/workspace-session-enhancement-panel.d.ts.map +1 -1
  49. package/data/build/dist/client/features/workspace-session-enhancement-panel.js +57 -2
  50. package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -1
  51. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
  52. package/data/build/dist/client/features/workspace-session-enhancement.js +27 -0
  53. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
  54. package/data/build/dist/client/global-voice-runtime-registry.d.ts +27 -0
  55. package/data/build/dist/client/global-voice-runtime-registry.d.ts.map +1 -0
  56. package/data/build/dist/client/global-voice-runtime-registry.js +12 -0
  57. package/data/build/dist/client/global-voice-runtime-registry.js.map +1 -0
  58. package/data/build/dist/client/index.d.ts +1 -1
  59. package/data/build/dist/client/index.d.ts.map +1 -1
  60. package/data/build/dist/client/locale.d.ts.map +1 -1
  61. package/data/build/dist/client/locale.js +185 -1
  62. package/data/build/dist/client/locale.js.map +1 -1
  63. package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -1
  64. package/data/build/dist/client/locales/terminalAuth.js +2 -0
  65. package/data/build/dist/client/locales/terminalAuth.js.map +1 -1
  66. package/data/build/dist/client/locales/usage.d.ts.map +1 -1
  67. package/data/build/dist/client/locales/usage.js +4 -0
  68. package/data/build/dist/client/locales/usage.js.map +1 -1
  69. package/data/build/dist/client/mobile-session-interaction.d.ts +9 -0
  70. package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -1
  71. package/data/build/dist/client/mobile-session-interaction.js +63 -0
  72. package/data/build/dist/client/mobile-session-interaction.js.map +1 -1
  73. package/data/build/dist/client/model-catalog-cache.d.ts +23 -0
  74. package/data/build/dist/client/model-catalog-cache.d.ts.map +1 -1
  75. package/data/build/dist/client/model-catalog-cache.js +81 -9
  76. package/data/build/dist/client/model-catalog-cache.js.map +1 -1
  77. package/data/build/dist/client/service-tier.d.ts +11 -0
  78. package/data/build/dist/client/service-tier.d.ts.map +1 -1
  79. package/data/build/dist/client/service-tier.js +15 -0
  80. package/data/build/dist/client/service-tier.js.map +1 -1
  81. package/data/build/dist/client/sherpa-voice-adapter.d.ts +46 -0
  82. package/data/build/dist/client/sherpa-voice-adapter.d.ts.map +1 -0
  83. package/data/build/dist/client/sherpa-voice-adapter.js +252 -0
  84. package/data/build/dist/client/sherpa-voice-adapter.js.map +1 -0
  85. package/data/build/dist/client/skill-command.d.ts +10 -0
  86. package/data/build/dist/client/skill-command.d.ts.map +1 -0
  87. package/data/build/dist/client/skill-command.js +258 -0
  88. package/data/build/dist/client/skill-command.js.map +1 -0
  89. package/data/build/dist/client/skill-reference-dom.d.ts +38 -0
  90. package/data/build/dist/client/skill-reference-dom.d.ts.map +1 -0
  91. package/data/build/dist/client/skill-reference-dom.js +187 -0
  92. package/data/build/dist/client/skill-reference-dom.js.map +1 -0
  93. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  94. package/data/build/dist/client/subscription-slot.js +51 -3
  95. package/data/build/dist/client/subscription-slot.js.map +1 -1
  96. package/data/build/dist/client/terminal/model.d.ts +40 -2
  97. package/data/build/dist/client/terminal/model.d.ts.map +1 -1
  98. package/data/build/dist/client/terminal/model.js +151 -24
  99. package/data/build/dist/client/terminal/model.js.map +1 -1
  100. package/data/build/dist/client/terminal/styles.d.ts +8 -0
  101. package/data/build/dist/client/terminal/styles.d.ts.map +1 -1
  102. package/data/build/dist/client/terminal/styles.js +23 -2
  103. package/data/build/dist/client/terminal/styles.js.map +1 -1
  104. package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
  105. package/data/build/dist/client/terminal/ui.js +161 -26
  106. package/data/build/dist/client/terminal/ui.js.map +1 -1
  107. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
  108. package/data/build/dist/client/terminal/xterm-view.js +218 -42
  109. package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
  110. package/data/build/dist/client/voice-capture.d.ts +32 -0
  111. package/data/build/dist/client/voice-capture.d.ts.map +1 -0
  112. package/data/build/dist/client/voice-capture.js +158 -0
  113. package/data/build/dist/client/voice-capture.js.map +1 -0
  114. package/data/build/dist/client/voice-device-manager.d.ts +24 -0
  115. package/data/build/dist/client/voice-device-manager.d.ts.map +1 -0
  116. package/data/build/dist/client/voice-device-manager.js +197 -0
  117. package/data/build/dist/client/voice-device-manager.js.map +1 -0
  118. package/data/build/dist/client/voice-output.d.ts +14 -0
  119. package/data/build/dist/client/voice-output.d.ts.map +1 -0
  120. package/data/build/dist/client/voice-output.js +32 -0
  121. package/data/build/dist/client/voice-output.js.map +1 -0
  122. package/data/build/dist/client/voice-security.d.ts +8 -0
  123. package/data/build/dist/client/voice-security.d.ts.map +1 -0
  124. package/data/build/dist/client/voice-security.js +26 -0
  125. package/data/build/dist/client/voice-security.js.map +1 -0
  126. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +12 -1
  127. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
  128. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +32 -0
  129. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
  130. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +15 -0
  131. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  132. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +39 -9
  133. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  134. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts +39 -2
  135. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts.map +1 -1
  136. package/data/build/dist/host/cli-adapters/antigravity-driver.js +198 -10
  137. package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -1
  138. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts +121 -0
  139. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts.map +1 -0
  140. package/data/build/dist/host/cli-adapters/antigravity-subscription.js +504 -0
  141. package/data/build/dist/host/cli-adapters/antigravity-subscription.js.map +1 -0
  142. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +21 -0
  143. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  144. package/data/build/dist/host/cli-adapters/claude-driver.js +173 -7
  145. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  146. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -1
  147. package/data/build/dist/host/cli-adapters/codebuddy-driver.js +4 -0
  148. package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -1
  149. package/data/build/dist/host/cli-adapters/codex-driver.d.ts +28 -2
  150. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  151. package/data/build/dist/host/cli-adapters/codex-driver.js +234 -5
  152. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  153. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  154. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  155. package/data/build/dist/host/cli-adapters/command-code-subscription.js +7 -4
  156. package/data/build/dist/host/cli-adapters/command-code-subscription.js.map +1 -1
  157. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts +9 -0
  158. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts.map +1 -1
  159. package/data/build/dist/host/cli-adapters/cursor-driver.js +72 -2
  160. package/data/build/dist/host/cli-adapters/cursor-driver.js.map +1 -1
  161. package/data/build/dist/host/cli-adapters/driver.d.ts +21 -1
  162. package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -1
  163. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  164. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +15 -3
  165. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  166. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  167. package/data/build/dist/host/cli-adapters/feature.js +18 -1
  168. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  169. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
  170. package/data/build/dist/host/cli-adapters/gemini-driver.js +4 -0
  171. package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
  172. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  173. package/data/build/dist/host/cli-adapters/grok-driver.js +4 -0
  174. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  175. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
  176. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
  177. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
  178. package/data/build/dist/host/cli-adapters/kimi-driver.js +6 -6
  179. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
  180. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -1
  181. package/data/build/dist/host/cli-adapters/mcode-driver.js +2 -0
  182. package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -1
  183. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +49 -0
  184. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
  185. package/data/build/dist/host/cli-adapters/model-catalog.js +126 -0
  186. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
  187. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +11 -0
  188. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  189. package/data/build/dist/host/cli-adapters/opencode-driver.js +92 -8
  190. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  191. package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
  192. package/data/build/dist/host/cli-adapters/pi-driver.js +4 -0
  193. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  194. package/data/build/dist/host/cli-adapters/process-utils.d.ts +10 -3
  195. package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -1
  196. package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -1
  197. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +4 -1
  198. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
  199. package/data/build/dist/host/cli-adapters/provider-subscription.js +8 -1
  200. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
  201. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts +15 -0
  202. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts.map +1 -1
  203. package/data/build/dist/host/cli-adapters/qoder-driver.js +171 -3
  204. package/data/build/dist/host/cli-adapters/qoder-driver.js.map +1 -1
  205. package/data/build/dist/host/cli-adapters/qoder-subscription.js +3 -1
  206. package/data/build/dist/host/cli-adapters/qoder-subscription.js.map +1 -1
  207. package/data/build/dist/host/cli-adapters/reasoning-content.d.ts +11 -0
  208. package/data/build/dist/host/cli-adapters/reasoning-content.d.ts.map +1 -0
  209. package/data/build/dist/host/cli-adapters/reasoning-content.js +79 -0
  210. package/data/build/dist/host/cli-adapters/reasoning-content.js.map +1 -0
  211. package/data/build/dist/host/cli-adapters/registry.d.ts +24 -1
  212. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  213. package/data/build/dist/host/cli-adapters/registry.js +109 -4
  214. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  215. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts +3 -2
  216. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts.map +1 -1
  217. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js +8 -2
  218. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js.map +1 -1
  219. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +3 -2
  220. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  221. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +14 -2
  222. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  223. package/data/build/dist/host/cli-bridge/injections.d.ts +10 -1
  224. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
  225. package/data/build/dist/host/cli-bridge/injections.js +28 -8
  226. package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
  227. package/data/build/dist/host/features/assistant-dispatch.d.ts +45 -0
  228. package/data/build/dist/host/features/assistant-dispatch.d.ts.map +1 -0
  229. package/data/build/dist/host/features/assistant-dispatch.js +49 -0
  230. package/data/build/dist/host/features/assistant-dispatch.js.map +1 -0
  231. package/data/build/dist/host/features/assistant-intent.d.ts +46 -0
  232. package/data/build/dist/host/features/assistant-intent.d.ts.map +1 -0
  233. package/data/build/dist/host/features/assistant-intent.js +149 -0
  234. package/data/build/dist/host/features/assistant-intent.js.map +1 -0
  235. package/data/build/dist/host/features/assistant-scope-settings.d.ts +25 -0
  236. package/data/build/dist/host/features/assistant-scope-settings.d.ts.map +1 -0
  237. package/data/build/dist/host/features/assistant-scope-settings.js +33 -0
  238. package/data/build/dist/host/features/assistant-scope-settings.js.map +1 -0
  239. package/data/build/dist/host/features/assistant-scope.d.ts +79 -0
  240. package/data/build/dist/host/features/assistant-scope.d.ts.map +1 -0
  241. package/data/build/dist/host/features/assistant-scope.js +107 -0
  242. package/data/build/dist/host/features/assistant-scope.js.map +1 -0
  243. package/data/build/dist/host/features/assistant-session-index.d.ts +44 -0
  244. package/data/build/dist/host/features/assistant-session-index.d.ts.map +1 -0
  245. package/data/build/dist/host/features/assistant-session-index.js +109 -0
  246. package/data/build/dist/host/features/assistant-session-index.js.map +1 -0
  247. package/data/build/dist/host/features/assistant-summary.d.ts +28 -0
  248. package/data/build/dist/host/features/assistant-summary.d.ts.map +1 -0
  249. package/data/build/dist/host/features/assistant-summary.js +166 -0
  250. package/data/build/dist/host/features/assistant-summary.js.map +1 -0
  251. package/data/build/dist/host/features/assistant-voice-stream.d.ts +10 -0
  252. package/data/build/dist/host/features/assistant-voice-stream.d.ts.map +1 -0
  253. package/data/build/dist/host/features/assistant-voice-stream.js +106 -0
  254. package/data/build/dist/host/features/assistant-voice-stream.js.map +1 -0
  255. package/data/build/dist/host/features/assistant-voice-turn.d.ts +27 -0
  256. package/data/build/dist/host/features/assistant-voice-turn.d.ts.map +1 -0
  257. package/data/build/dist/host/features/assistant-voice-turn.js +54 -0
  258. package/data/build/dist/host/features/assistant-voice-turn.js.map +1 -0
  259. package/data/build/dist/host/features/assistant-waiting-state.d.ts +14 -0
  260. package/data/build/dist/host/features/assistant-waiting-state.d.ts.map +1 -0
  261. package/data/build/dist/host/features/assistant-waiting-state.js +17 -0
  262. package/data/build/dist/host/features/assistant-waiting-state.js.map +1 -0
  263. package/data/build/dist/host/features/global-voice-coordinator.d.ts +55 -0
  264. package/data/build/dist/host/features/global-voice-coordinator.d.ts.map +1 -0
  265. package/data/build/dist/host/features/global-voice-coordinator.js +221 -0
  266. package/data/build/dist/host/features/global-voice-coordinator.js.map +1 -0
  267. package/data/build/dist/host/features/global-voice-rpc.d.ts +25 -0
  268. package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -0
  269. package/data/build/dist/host/features/global-voice-rpc.js +862 -0
  270. package/data/build/dist/host/features/global-voice-rpc.js.map +1 -0
  271. package/data/build/dist/host/features/index.d.ts +10 -0
  272. package/data/build/dist/host/features/index.d.ts.map +1 -1
  273. package/data/build/dist/host/features/index.js +10 -0
  274. package/data/build/dist/host/features/index.js.map +1 -1
  275. package/data/build/dist/host/features/peer-host.d.ts +5 -0
  276. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  277. package/data/build/dist/host/features/peer-host.js +232 -2
  278. package/data/build/dist/host/features/peer-host.js.map +1 -1
  279. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts +42 -0
  280. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts.map +1 -0
  281. package/data/build/dist/host/features/sherpa-voice-runtime.js +193 -0
  282. package/data/build/dist/host/features/sherpa-voice-runtime.js.map +1 -0
  283. package/data/build/dist/host/features/types.d.ts +26 -0
  284. package/data/build/dist/host/features/types.d.ts.map +1 -1
  285. package/data/build/dist/host/features/voice-agent-actions.d.ts +26 -0
  286. package/data/build/dist/host/features/voice-agent-actions.d.ts.map +1 -0
  287. package/data/build/dist/host/features/voice-agent-actions.js +128 -0
  288. package/data/build/dist/host/features/voice-agent-actions.js.map +1 -0
  289. package/data/build/dist/host/features/voice-agent-service.d.ts +117 -0
  290. package/data/build/dist/host/features/voice-agent-service.d.ts.map +1 -0
  291. package/data/build/dist/host/features/voice-agent-service.js +243 -0
  292. package/data/build/dist/host/features/voice-agent-service.js.map +1 -0
  293. package/data/build/dist/host/features/voice-model-setup.d.ts +20 -0
  294. package/data/build/dist/host/features/voice-model-setup.d.ts.map +1 -0
  295. package/data/build/dist/host/features/voice-model-setup.js +89 -0
  296. package/data/build/dist/host/features/voice-model-setup.js.map +1 -0
  297. package/data/build/dist/host/index.d.ts +2 -2
  298. package/data/build/dist/host/index.d.ts.map +1 -1
  299. package/data/build/dist/host/index.js +7 -1
  300. package/data/build/dist/host/index.js.map +1 -1
  301. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  302. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -1
  303. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +53 -2
  304. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js.map +1 -1
  305. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +15 -1
  306. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
  307. package/data/build/dist/host/native-session-bridge.d.ts +2 -0
  308. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
  309. package/data/build/dist/host/native-session-bridge.js +1 -0
  310. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  311. package/data/build/dist/host/rpc.d.ts.map +1 -1
  312. package/data/build/dist/host/rpc.js +9 -4
  313. package/data/build/dist/host/rpc.js.map +1 -1
  314. package/data/build/dist/host/settings.d.ts.map +1 -1
  315. package/data/build/dist/host/settings.js +19 -1
  316. package/data/build/dist/host/settings.js.map +1 -1
  317. package/data/build/dist/host/terminal/backends/conpty-backend.js.map +1 -1
  318. package/data/build/dist/host/terminal/terminal-controller.d.ts.map +1 -1
  319. package/data/build/dist/host/terminal/terminal-controller.js +4 -0
  320. package/data/build/dist/host/terminal/terminal-controller.js.map +1 -1
  321. package/data/build/dist/host/terminal/terminal-service.d.ts +21 -1
  322. package/data/build/dist/host/terminal/terminal-service.d.ts.map +1 -1
  323. package/data/build/dist/host/terminal/terminal-service.js +118 -7
  324. package/data/build/dist/host/terminal/terminal-service.js.map +1 -1
  325. package/data/build/dist/index.d.ts +2 -2
  326. package/data/build/dist/index.d.ts.map +1 -1
  327. package/data/build/dist/index.js +1 -1
  328. package/data/build/dist/index.js.map +1 -1
  329. package/data/build/dist/shared/contracts/assistant.d.ts +70 -0
  330. package/data/build/dist/shared/contracts/assistant.d.ts.map +1 -0
  331. package/data/build/dist/shared/contracts/assistant.js +2 -0
  332. package/data/build/dist/shared/contracts/assistant.js.map +1 -0
  333. package/data/build/dist/shared/contracts/cli-adapter.d.ts +33 -1
  334. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  335. package/data/build/dist/shared/contracts/config.d.ts +30 -0
  336. package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
  337. package/data/build/dist/shared/contracts/config.js +20 -0
  338. package/data/build/dist/shared/contracts/config.js.map +1 -1
  339. package/data/build/dist/shared/contracts/errors.d.ts +2 -2
  340. package/data/build/dist/shared/contracts/errors.d.ts.map +1 -1
  341. package/data/build/dist/shared/contracts/subscription.d.ts +30 -0
  342. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
  343. package/data/build/dist/shared/contracts/subscription.js.map +1 -1
  344. package/data/build/dist/shared/contracts/terminal.d.ts +2 -0
  345. package/data/build/dist/shared/contracts/terminal.d.ts.map +1 -1
  346. package/data/build/dist/shared/contracts/version.d.ts +12 -5
  347. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  348. package/data/build/dist/shared/contracts/version.js +11 -4
  349. package/data/build/dist/shared/contracts/version.js.map +1 -1
  350. package/data/build/dist/shared/contracts/voice-runtime.d.ts +90 -0
  351. package/data/build/dist/shared/contracts/voice-runtime.d.ts.map +1 -0
  352. package/data/build/dist/shared/contracts/voice-runtime.js +16 -0
  353. package/data/build/dist/shared/contracts/voice-runtime.js.map +1 -0
  354. package/data/build/dist/shared/index.d.ts +8 -2
  355. package/data/build/dist/shared/index.d.ts.map +1 -1
  356. package/data/build/dist/shared/index.js +5 -1
  357. package/data/build/dist/shared/index.js.map +1 -1
  358. package/data/build/dist/shared/voice-models.d.ts +21 -0
  359. package/data/build/dist/shared/voice-models.d.ts.map +1 -0
  360. package/data/build/dist/shared/voice-models.js +27 -0
  361. package/data/build/dist/shared/voice-models.js.map +1 -0
  362. package/data/build/dist/shared/voice-stream.d.ts +42 -0
  363. package/data/build/dist/shared/voice-stream.d.ts.map +1 -0
  364. package/data/build/dist/shared/voice-stream.js +99 -0
  365. package/data/build/dist/shared/voice-stream.js.map +1 -0
  366. package/data/build/dist/shared/voice-text.d.ts +3 -0
  367. package/data/build/dist/shared/voice-text.d.ts.map +1 -0
  368. package/data/build/dist/shared/voice-text.js +14 -0
  369. package/data/build/dist/shared/voice-text.js.map +1 -0
  370. package/data/build/dist/typert.host.d.ts.map +1 -1
  371. package/data/build/dist/typert.host.js +1 -0
  372. package/data/build/dist/typert.host.js.map +1 -1
  373. package/package.json +56 -26
  374. package/profile/README.md +8 -5
  375. package/profile/package.json +5 -3
  376. package/profile/version.json +3 -3
  377. package/version.json +3 -3
@@ -0,0 +1,44 @@
1
+ import { type AssistantScope, type AssistantScopeSession } from './assistant-scope.js';
2
+ import type { AssistantIndexSnapshot, AssistantWaitingKind } from '../../shared/contracts/assistant.js';
3
+ export interface AssistantSessionSourceRecord extends AssistantScopeSession {
4
+ readonly workspaceName: string;
5
+ readonly hostId: string;
6
+ readonly running: boolean;
7
+ readonly completed: boolean;
8
+ readonly error?: boolean;
9
+ readonly updatedAt: number | null;
10
+ readonly waiting: AssistantWaitingKind | null;
11
+ readonly title?: string | null;
12
+ /** 可选的语义标题事件,必须取最后一条。 */
13
+ readonly titleEvents?: readonly (string | null | undefined)[];
14
+ readonly summary?: string | null;
15
+ }
16
+ export interface AssistantSessionIndexBuildOptions {
17
+ readonly sessions: readonly AssistantSessionSourceRecord[];
18
+ readonly scope: AssistantScope;
19
+ readonly archivedSessionIds: ReadonlySet<string> | readonly string[];
20
+ readonly generation?: number;
21
+ /** 只对过滤后的会话调用;实现方应使用 readSurface 等语义读取。 */
22
+ readonly readSummary?: (session: AssistantSessionSourceRecord) => string | null | Promise<string | null>;
23
+ /** 只对过滤后的会话调用;用于补充 SessionSummary 未提供的审批/提问状态。 */
24
+ readonly readWaiting?: (session: AssistantSessionSourceRecord) => AssistantWaitingKind | null | Promise<AssistantWaitingKind | null>;
25
+ }
26
+ export interface AssistantSessionIndexSnapshot extends AssistantIndexSnapshot {
27
+ }
28
+ /** 负责范围/归档快照变化时立即重建索引;不修改历史记录。 */
29
+ export declare class AssistantSessionIndexController {
30
+ private readonly sessions;
31
+ private scope;
32
+ private archivedSessionIds;
33
+ private generation;
34
+ private snapshotValue;
35
+ constructor(sessions: readonly AssistantSessionSourceRecord[], scope: AssistantScope, archivedSessionIds?: readonly string[]);
36
+ refresh(): Promise<AssistantSessionIndexSnapshot>;
37
+ setScope(scope: AssistantScope): Promise<AssistantSessionIndexSnapshot>;
38
+ setArchivedSessionIds(ids: readonly string[]): Promise<AssistantSessionIndexSnapshot>;
39
+ snapshot(): AssistantSessionIndexSnapshot | null;
40
+ }
41
+ export declare function buildAssistantSessionIndex(options: AssistantSessionIndexBuildOptions): Promise<AssistantSessionIndexSnapshot>;
42
+ /** 最后一条有效 session/title 事件胜出;暂态空值不覆盖已有标题。 */
43
+ export declare function lastSessionTitle(events: readonly (string | null | undefined)[] | undefined): string | null;
44
+ //# sourceMappingURL=assistant-session-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-session-index.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-session-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAA2B,sBAAsB,EAAE,oBAAoB,EAAqB,MAAM,qCAAqC,CAAA;AAEnJ,MAAM,WAAW,4BAA6B,SAAQ,qBAAqB;IACzE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAA;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,yBAAyB;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAA;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,QAAQ,EAAE,SAAS,4BAA4B,EAAE,CAAA;IAC1D,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAA;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,4BAA4B,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACxG,kDAAkD;IAClD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,4BAA4B,KAAK,oBAAoB,GAAG,IAAI,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAA;CACrI;AAED,MAAM,WAAW,6BAA8B,SAAQ,sBAAsB;CAC5E;AAED,kCAAkC;AAClC,qBAAa,+BAA+B;IAMxC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,KAAK;IANf,OAAO,CAAC,kBAAkB,CAAmB;IAC7C,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,aAAa,CAA6C;gBAG/C,QAAQ,EAAE,SAAS,4BAA4B,EAAE,EAC1D,KAAK,EAAE,cAAc,EAC7B,kBAAkB,GAAE,SAAS,MAAM,EAAO;IAKtC,OAAO,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAUjD,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAKvE,qBAAqB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAK3F,QAAQ,IAAI,6BAA6B,GAAG,IAAI;CAGjD;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,6BAA6B,CAAC,CA4DxC;AAED,6CAA6C;AAC7C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO1G"}
@@ -0,0 +1,109 @@
1
+ import { filterAssistantSessions, } from './assistant-scope.js';
2
+ /** 负责范围/归档快照变化时立即重建索引;不修改历史记录。 */
3
+ export class AssistantSessionIndexController {
4
+ sessions;
5
+ scope;
6
+ archivedSessionIds;
7
+ generation = 0;
8
+ snapshotValue = null;
9
+ constructor(sessions, scope, archivedSessionIds = []) {
10
+ this.sessions = sessions;
11
+ this.scope = scope;
12
+ this.archivedSessionIds = [...archivedSessionIds];
13
+ }
14
+ async refresh() {
15
+ this.snapshotValue = await buildAssistantSessionIndex({
16
+ sessions: this.sessions,
17
+ scope: this.scope,
18
+ archivedSessionIds: this.archivedSessionIds,
19
+ generation: ++this.generation,
20
+ });
21
+ return this.snapshotValue;
22
+ }
23
+ async setScope(scope) {
24
+ this.scope = scope;
25
+ return this.refresh();
26
+ }
27
+ async setArchivedSessionIds(ids) {
28
+ this.archivedSessionIds = [...ids];
29
+ return this.refresh();
30
+ }
31
+ snapshot() {
32
+ return this.snapshotValue;
33
+ }
34
+ }
35
+ export async function buildAssistantSessionIndex(options) {
36
+ const filtered = filterAssistantSessions(options.sessions, options.scope, options.archivedSessionIds);
37
+ const includedIds = new Set(filtered.sessions.map((session) => session.sessionId));
38
+ const archivedIds = options.archivedSessionIds instanceof Set ? options.archivedSessionIds : new Set(options.archivedSessionIds);
39
+ const excludedTargets = options.sessions
40
+ .filter((session) => !includedIds.has(session.sessionId))
41
+ .map((session) => ({
42
+ sessionId: session.sessionId,
43
+ title: lastSessionTitle(session.titleEvents) ?? session.title ?? null,
44
+ workspaceId: session.workspaceId,
45
+ workspaceName: session.workspaceName,
46
+ hostId: session.hostId,
47
+ archived: archivedIds.has(session.sessionId),
48
+ }));
49
+ let unreadableCount = 0;
50
+ const entries = [];
51
+ for (const session of filtered.sessions) {
52
+ let summary = session.summary ?? null;
53
+ let waiting = session.waiting;
54
+ if (options.readSummary !== undefined) {
55
+ try {
56
+ summary = await options.readSummary(session);
57
+ }
58
+ catch {
59
+ unreadableCount += 1;
60
+ summary = null;
61
+ }
62
+ }
63
+ if (options.readWaiting !== undefined) {
64
+ try {
65
+ // 读取器返回 null 就是权威的“当前没有等待”,用于清除旧快照状态。
66
+ waiting = await options.readWaiting(session);
67
+ }
68
+ catch {
69
+ // 单个会话的等待状态读取失败不应阻断其他会话索引。
70
+ }
71
+ }
72
+ const status = waiting !== null
73
+ ? 'waiting'
74
+ : session.error === true
75
+ ? 'error'
76
+ : session.running
77
+ ? 'running'
78
+ : session.completed
79
+ ? 'completed'
80
+ : 'unknown';
81
+ entries.push({
82
+ sessionId: session.sessionId,
83
+ title: lastSessionTitle(session.titleEvents) ?? session.title ?? null,
84
+ workspaceId: session.workspaceId,
85
+ workspaceName: session.workspaceName,
86
+ hostId: session.hostId,
87
+ running: session.running,
88
+ completed: session.completed,
89
+ status,
90
+ ...(session.error === undefined ? {} : { error: session.error }),
91
+ updatedAt: session.updatedAt,
92
+ waiting,
93
+ summary,
94
+ });
95
+ }
96
+ return { generation: options.generation ?? 0, entries, excludedTargets, scope: filtered.state, unreadableCount };
97
+ }
98
+ /** 最后一条有效 session/title 事件胜出;暂态空值不覆盖已有标题。 */
99
+ export function lastSessionTitle(events) {
100
+ if (events === undefined)
101
+ return null;
102
+ let title = null;
103
+ for (const value of events) {
104
+ if (typeof value === 'string' && value.trim() !== '')
105
+ title = value;
106
+ }
107
+ return title;
108
+ }
109
+ //# sourceMappingURL=assistant-session-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-session-index.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-session-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AssistantIndexSnapshot, AssistantProgressSummary, AssistantSummaryCategory, AssistantSummaryOptions, SessionIndexEntry } from '../../shared/contracts/assistant.js';
2
+ export interface AssistantSummaryGroups {
3
+ readonly waiting: readonly SessionIndexEntry[];
4
+ readonly error: readonly SessionIndexEntry[];
5
+ readonly running: readonly SessionIndexEntry[];
6
+ readonly completed: readonly SessionIndexEntry[];
7
+ }
8
+ export interface AssistantSummary {
9
+ readonly groups: AssistantSummaryGroups;
10
+ readonly unreadableCount: number;
11
+ readonly speechText: string;
12
+ }
13
+ export type { AssistantSummaryCategory };
14
+ /**
15
+ * 把索引快照转换成可播报文本。函数只读输入,不读取 DSH 服务,也不修改索引。
16
+ * 组别顺序固定为待处理、出错、运行中、已完成,避免重要事项被截断。
17
+ */
18
+ export declare function summarizeAssistantIndex(snapshot: AssistantIndexSnapshot): AssistantSummary;
19
+ /** 便于动作层直接传入索引条目。 */
20
+ export declare function summarizeAssistantEntries(entries: readonly SessionIndexEntry[], scope: AssistantIndexSnapshot['scope'], generation?: number, unreadableCount?: number, maxChars?: number): AssistantSummary;
21
+ /** 兼容动作层使用的命名:输入索引条目,输出完整进展摘要。 */
22
+ export declare function summarizeAssistantSessions(entries: readonly SessionIndexEntry[], options?: AssistantSummaryOptions): AssistantProgressSummary;
23
+ export declare const buildAssistantSummary: typeof summarizeAssistantSessions;
24
+ export declare const normalizeSpeechText: typeof sanitizeSpeechText;
25
+ export declare function redactSensitiveValues(value: string): string;
26
+ /** 清理 Markdown、URL、代码和常见凭据形态,结果可直接交给 TTS。 */
27
+ export declare function sanitizeSpeechText(value: string): string;
28
+ //# sourceMappingURL=assistant-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-summary.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EAEvB,iBAAiB,EAClB,MAAM,qCAAqC,CAAA;AAE5C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,YAAY,EAAE,wBAAwB,EAAE,CAAA;AAExC;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,gBAAgB,CA0B1F;AAED,qBAAqB;AACrB,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACtC,UAAU,SAAI,EACd,eAAe,SAAI,EACnB,QAAQ,SAAQ,GACf,gBAAgB,CAQlB;AAED,kCAAkC;AAClC,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,OAAO,GAAE,uBAA4B,GACpC,wBAAwB,CAiB1B;AAED,eAAO,MAAM,qBAAqB,mCAA6B,CAAA;AAE/D,eAAO,MAAM,mBAAmB,2BAAqB,CAAA;AAErD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI3D;AAwCD,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASxD"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * 把索引快照转换成可播报文本。函数只读输入,不读取 DSH 服务,也不修改索引。
3
+ * 组别顺序固定为待处理、出错、运行中、已完成,避免重要事项被截断。
4
+ */
5
+ export function summarizeAssistantIndex(snapshot) {
6
+ if (snapshot.scope.status === 'empty') {
7
+ const unreadableNotice = renderUnreadableNotice(snapshot.unreadableCount);
8
+ return {
9
+ groups: emptyGroups(),
10
+ unreadableCount: snapshot.unreadableCount,
11
+ speechText: [
12
+ `${snapshot.scope.message},无法报告进展。`,
13
+ unreadableNotice,
14
+ ].filter((text) => text !== '').join(' '),
15
+ };
16
+ }
17
+ const groups = groupEntries(snapshot.entries);
18
+ const unreadableNotice = renderUnreadableNotice(snapshot.unreadableCount);
19
+ return {
20
+ groups,
21
+ unreadableCount: snapshot.unreadableCount,
22
+ speechText: [
23
+ renderGroup('待处理', groups.waiting, '当前没有待处理项。'),
24
+ renderGroup('出错', groups.error, '当前没有出错会话。'),
25
+ renderGroup('运行中', groups.running, '当前没有运行中的会话。'),
26
+ renderGroup('已完成', groups.completed, '当前没有刚完成的会话。'),
27
+ unreadableNotice,
28
+ ].filter((text) => text !== '').join(' '),
29
+ };
30
+ }
31
+ /** 便于动作层直接传入索引条目。 */
32
+ export function summarizeAssistantEntries(entries, scope, generation = 0, unreadableCount = 0, maxChars = 12000) {
33
+ const summary = summarizeAssistantIndex({ generation, entries, scope, unreadableCount });
34
+ if (maxChars <= 0 || summary.speechText.length <= maxChars)
35
+ return summary;
36
+ const notice = renderUnreadableNotice(unreadableCount);
37
+ const body = notice !== '' && summary.speechText.endsWith(notice)
38
+ ? summary.speechText.slice(0, -notice.length).trim()
39
+ : summary.speechText;
40
+ return { ...summary, speechText: limitSpeechText(body, maxChars, notice) };
41
+ }
42
+ /** 兼容动作层使用的命名:输入索引条目,输出完整进展摘要。 */
43
+ export function summarizeAssistantSessions(entries, options = {}) {
44
+ const scope = options.scope ?? { status: 'ready', managedWorkspaceIds: [] };
45
+ const unreadableCount = Math.max(0, options.unreadableCount ?? 0);
46
+ const base = summarizeAssistantEntries(entries, scope, options.generation ?? 0, unreadableCount);
47
+ const labels = ['waiting', 'error', 'running', 'completed'];
48
+ const sections = labels.map((category) => ({
49
+ category,
50
+ entries: base.groups[category].slice(0, options.maxItemsPerCategory),
51
+ text: renderGroup(categoryLabel(category), base.groups[category].slice(0, options.maxItemsPerCategory), emptyText(category)),
52
+ }));
53
+ const unreadableNotice = renderUnreadableNotice(unreadableCount);
54
+ const speechText = limitSpeechText(sections.map((section) => section.text).join(' '), options.maxChars, unreadableNotice);
55
+ return { generation: options.generation ?? 0, total: entries.length, unreadableCount, sections, speechText };
56
+ }
57
+ export const buildAssistantSummary = summarizeAssistantSessions;
58
+ export const normalizeSpeechText = sanitizeSpeechText;
59
+ export function redactSensitiveValues(value) {
60
+ return value
61
+ .replace(/\b(?:Bearer\s+)?(?:sk-[A-Za-z0-9_-]+|ghp_[A-Za-z0-9_]+)\b/gu, '已隐藏凭据')
62
+ .replace(/\b(?:api[_ -]?key|token|secret|password|密码|密钥)\s*[:=:]\s*[^\s,,;;]+/giu, '已隐藏敏感字段');
63
+ }
64
+ function groupEntries(entries) {
65
+ const waiting = [];
66
+ const error = [];
67
+ const running = [];
68
+ const completed = [];
69
+ for (const entry of entries) {
70
+ if (entry.waiting !== null) {
71
+ waiting.push(entry);
72
+ }
73
+ else if (entry.error === true) {
74
+ error.push(entry);
75
+ }
76
+ else if (entry.running) {
77
+ running.push(entry);
78
+ }
79
+ else if (entry.completed) {
80
+ completed.push(entry);
81
+ }
82
+ }
83
+ return { waiting, error, running, completed };
84
+ }
85
+ function renderGroup(label, entries, emptyText) {
86
+ if (entries.length === 0)
87
+ return `${label}:${emptyText}`;
88
+ const details = entries.map(renderEntry).join(';');
89
+ return `${label}:${details}。`;
90
+ }
91
+ function renderEntry(entry) {
92
+ const title = sanitizeSpeechText(entry.title ?? '未命名会话') || '未命名会话';
93
+ const workspace = sanitizeSpeechText(entry.workspaceName || entry.workspaceId) || '未命名工作区';
94
+ const detail = sanitizeSpeechText(entry.summary ?? '');
95
+ const waiting = entry.waiting === 'approval' ? '等待审批' : entry.waiting === 'question' ? '等待回答' : '';
96
+ const suffix = waiting || detail;
97
+ return suffix ? `工作区${workspace}的${title}(${suffix})` : `工作区${workspace}的${title}`;
98
+ }
99
+ function renderUnreadableNotice(count) {
100
+ return count > 0 ? `有${count}个会话暂时无法读取,以上摘要可能不完整。` : '';
101
+ }
102
+ /** 清理 Markdown、URL、代码和常见凭据形态,结果可直接交给 TTS。 */
103
+ export function sanitizeSpeechText(value) {
104
+ return redactSensitiveValues(value)
105
+ .replace(/```[\s\S]*?```/gu, ' ')
106
+ .replace(/`([^`]*)`/gu, ' ')
107
+ .replace(/\[([^\]]+)\]\([^)]*\)/gu, '$1')
108
+ .replace(/https?:\/\/\S+/gu, '链接')
109
+ .replace(/[>#*_~]/gu, ' ')
110
+ .replace(/\s+/gu, ' ')
111
+ .trim();
112
+ }
113
+ function emptyGroups() {
114
+ return { waiting: [], error: [], running: [], completed: [] };
115
+ }
116
+ function categoryLabel(category) {
117
+ return { waiting: '待处理', error: '出错', running: '运行中', completed: '已完成' }[category];
118
+ }
119
+ function emptyText(category) {
120
+ return {
121
+ waiting: '当前没有待处理项。',
122
+ error: '当前没有出错会话。',
123
+ running: '当前没有运行中的会话。',
124
+ completed: '当前没有刚完成的会话。',
125
+ }[category];
126
+ }
127
+ function limitSpeechText(value, maxChars, suffix = '') {
128
+ const normalizedSuffix = suffix.trim();
129
+ if (normalizedSuffix === '')
130
+ return limitSpeechTextWithoutSuffix(value, maxChars);
131
+ if (maxChars === undefined || maxChars <= 0)
132
+ return `${value} ${normalizedSuffix}`.trim();
133
+ const separatorLength = value.trim() === '' ? 0 : 1;
134
+ const prefixBudget = maxChars - normalizedSuffix.length - separatorLength;
135
+ if (prefixBudget <= 0)
136
+ return normalizedSuffix;
137
+ const prefix = limitSpeechTextWithoutSuffix(value, prefixBudget);
138
+ return `${prefix} ${normalizedSuffix}`.trim();
139
+ }
140
+ function limitSpeechTextWithoutSuffix(value, maxChars) {
141
+ if (maxChars === undefined || maxChars <= 0 || value.length <= maxChars)
142
+ return value;
143
+ const budget = Math.max(1, maxChars - 1);
144
+ const sections = value.split(/(?<=。)\s+/u);
145
+ const kept = [];
146
+ let used = 0;
147
+ for (const section of sections) {
148
+ const candidate = section.trim();
149
+ if (candidate === '')
150
+ continue;
151
+ if (used + candidate.length <= budget) {
152
+ kept.push(candidate);
153
+ used += candidate.length + (kept.length > 1 ? 1 : 0);
154
+ continue;
155
+ }
156
+ // 保留当前段落中完整的会话条目,避免从任意字符处截断标题或状态。
157
+ const prefix = candidate.split(':', 1)[0] ?? candidate;
158
+ const label = `${prefix}:`;
159
+ if (used + label.length <= budget && kept.length === 0)
160
+ kept.push(label.trim());
161
+ break;
162
+ }
163
+ const result = kept.join(' ').trim();
164
+ return `${result || value.slice(0, budget).trim()}。`;
165
+ }
166
+ //# sourceMappingURL=assistant-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-summary.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { GlobalVoiceCoordinator } from './global-voice-coordinator.js';
2
+ export interface AssistantVoiceStreamOptions {
3
+ readonly coordinator: GlobalVoiceCoordinator;
4
+ }
5
+ /**
6
+ * Host 的流式入口只转发 PCM 和运行时事件,不把音频字节塞进 JSON RPC。
7
+ * 浏览器通过同源 HTTPS 访问此路由,因而麦克风权限属于真正打开页面的客户端。
8
+ */
9
+ export declare function createAssistantVoiceStreamHandler(options: AssistantVoiceStreamOptions): (request: Request) => Promise<Response>;
10
+ //# sourceMappingURL=assistant-voice-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-voice-stream.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-voice-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAI3E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAA;CAC7C;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,2BAA2B,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA+E/H"}
@@ -0,0 +1,106 @@
1
+ import { encodeVoiceStreamEvent, pcmFrameFromStream, VoiceStreamDecoder } from '../../shared/voice-stream.js';
2
+ /**
3
+ * Host 的流式入口只转发 PCM 和运行时事件,不把音频字节塞进 JSON RPC。
4
+ * 浏览器通过同源 HTTPS 访问此路由,因而麦克风权限属于真正打开页面的客户端。
5
+ */
6
+ export function createAssistantVoiceStreamHandler(options) {
7
+ return async (request) => {
8
+ if (request.method.toUpperCase() !== 'POST' || request.body === null)
9
+ return Response.json({ error: '语音流必须使用 POST 流式正文' }, { status: 400 });
10
+ const decoder = new VoiceStreamDecoder();
11
+ const encoder = new TextEncoder();
12
+ let opened;
13
+ let closed = false;
14
+ let disposeEvents;
15
+ let controller;
16
+ const send = (event) => {
17
+ if (closed || controller === undefined)
18
+ return;
19
+ try {
20
+ controller.enqueue(encoder.encode(encodeVoiceStreamEvent(event)));
21
+ }
22
+ catch {
23
+ closed = true;
24
+ }
25
+ };
26
+ const stream = new ReadableStream({
27
+ start(nextController) {
28
+ controller = nextController;
29
+ void consume();
30
+ },
31
+ cancel() {
32
+ closed = true;
33
+ disposeEvents?.();
34
+ disposeEvents = undefined;
35
+ },
36
+ });
37
+ async function consume() {
38
+ const reader = request.body?.getReader();
39
+ if (reader === undefined)
40
+ return finish();
41
+ try {
42
+ while (!closed) {
43
+ const next = await reader.read();
44
+ if (next.done)
45
+ break;
46
+ for (const item of decoder.push(next.value)) {
47
+ if (item.message.type === 'open') {
48
+ if (opened !== undefined)
49
+ throw new Error('语音流重复打开');
50
+ opened = item.message;
51
+ options.coordinator.assertOwner(opened.ownerId);
52
+ disposeEvents = options.coordinator.subscribeRuntimeEvent((event) => send(event));
53
+ continue;
54
+ }
55
+ if (opened === undefined)
56
+ throw new Error('语音流缺少首部');
57
+ if (item.message.type === 'pcm') {
58
+ if (item.pcm === undefined)
59
+ throw new Error('语音流 PCM 缺少正文');
60
+ // 控制面 interrupt 会递增 Host epoch;旧页面/旧设备已经在途的帧必须直接丢弃。
61
+ if (item.message.epoch !== options.coordinator.snapshot().epoch)
62
+ continue;
63
+ await options.coordinator.sendPcm(opened.ownerId, pcmFrameFromStream(item.message, item.pcm));
64
+ }
65
+ else if (item.message.type === 'interrupt') {
66
+ await options.coordinator.interrupt(opened.ownerId);
67
+ }
68
+ else if (item.message.type === 'close') {
69
+ closed = true;
70
+ break;
71
+ }
72
+ }
73
+ }
74
+ }
75
+ catch (error) {
76
+ send({ type: 'error', code: 'voice_stream_failed', message: error instanceof Error ? error.message : String(error), recoverable: false, epoch: options.coordinator.snapshot().epoch });
77
+ }
78
+ finally {
79
+ finish();
80
+ }
81
+ }
82
+ function finish() {
83
+ if (closed) {
84
+ disposeEvents?.();
85
+ disposeEvents = undefined;
86
+ }
87
+ closed = true;
88
+ try {
89
+ controller?.close();
90
+ }
91
+ catch { /* 客户端已经取消响应 */ }
92
+ }
93
+ request.signal.addEventListener('abort', () => finish(), { once: true });
94
+ return new Response(stream, {
95
+ status: 200,
96
+ headers: {
97
+ 'content-type': 'application/x-ndjson; charset=utf-8',
98
+ 'cache-control': 'no-store',
99
+ 'x-content-type-options': 'nosniff',
100
+ // 反向代理默认可能缓冲响应;关闭后,partial/final 才能及时到达手机端。
101
+ 'x-accel-buffering': 'no',
102
+ },
103
+ });
104
+ };
105
+ }
106
+ //# sourceMappingURL=assistant-voice-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-voice-stream.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-voice-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type AssistantIntentOptions } from './assistant-intent.js';
2
+ import { AssistantDispatcher, type AssistantDispatchContext } from './assistant-dispatch.js';
3
+ import type { AssistantIndexSnapshot } from '../../shared/contracts/assistant.js';
4
+ export interface AssistantVoiceTurnResult {
5
+ readonly kind: 'summary' | 'dispatch' | 'clarify' | 'chat';
6
+ readonly speechText: string;
7
+ readonly target?: {
8
+ readonly sessionId: string;
9
+ readonly workspaceId: string;
10
+ readonly hostId: string;
11
+ };
12
+ readonly mode?: 'queue' | 'steer';
13
+ readonly task?: string;
14
+ readonly candidates?: readonly string[];
15
+ }
16
+ export interface AssistantVoiceTurnOptions {
17
+ readonly requestId?: string;
18
+ readonly intent?: AssistantIntentOptions;
19
+ readonly dispatchContext: AssistantDispatchContext;
20
+ }
21
+ /** 把全局语音最终文本串起「意图→摘要/派发→可播报结果」,不保存当前页面会话。 */
22
+ export declare class AssistantVoiceTurnRouter {
23
+ private readonly dispatcher;
24
+ constructor(dispatcher: AssistantDispatcher);
25
+ handleText(text: string, snapshot: AssistantIndexSnapshot, options: AssistantVoiceTurnOptions): Promise<AssistantVoiceTurnResult>;
26
+ }
27
+ //# sourceMappingURL=assistant-voice-turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-voice-turn.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-voice-turn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAEzF,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAC5F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAEjF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAA;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACvG,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACxC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;IACxC,QAAQ,CAAC,eAAe,EAAE,wBAAwB,CAAA;CACnD;AAED,6CAA6C;AAC7C,qBAAa,wBAAwB;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,mBAAmB;IAEtD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CA0CxI"}
@@ -0,0 +1,54 @@
1
+ import { parseAssistantIntent } from './assistant-intent.js';
2
+ import { summarizeAssistantEntries } from './assistant-summary.js';
3
+ import { AssistantDispatcher } from './assistant-dispatch.js';
4
+ /** 把全局语音最终文本串起「意图→摘要/派发→可播报结果」,不保存当前页面会话。 */
5
+ export class AssistantVoiceTurnRouter {
6
+ dispatcher;
7
+ constructor(dispatcher) {
8
+ this.dispatcher = dispatcher;
9
+ }
10
+ async handleText(text, snapshot, options) {
11
+ const intent = parseAssistantIntent(text, snapshot.entries, {
12
+ ...options.intent,
13
+ indexGeneration: snapshot.generation,
14
+ ...(snapshot.excludedTargets === undefined ? {} : { excludedTargets: snapshot.excludedTargets }),
15
+ });
16
+ if (snapshot.scope.status === 'empty' && intent.targetDescription !== undefined) {
17
+ return {
18
+ kind: 'clarify',
19
+ speechText: '尚未选择任何工作区,无法访问会话;请打开全局智能助理设置并勾选工作区后重试',
20
+ ...(intent.task === undefined ? {} : { task: intent.task }),
21
+ ...(intent.mode === undefined ? {} : { mode: intent.mode }),
22
+ };
23
+ }
24
+ if (intent.kind === 'summary') {
25
+ return {
26
+ kind: 'summary',
27
+ speechText: summarizeAssistantEntries(snapshot.entries, snapshot.scope, snapshot.generation, snapshot.unreadableCount).speechText,
28
+ };
29
+ }
30
+ if (intent.kind !== 'dispatch' || intent.target === undefined || intent.task === undefined || intent.mode === undefined) {
31
+ return {
32
+ kind: intent.kind,
33
+ speechText: intent.reason ?? '请说明要查询进展,或指出要处理任务的工作区和会话。',
34
+ ...(intent.candidates === undefined ? {} : { candidates: intent.candidates.map((entry) => entry.title ?? entry.sessionId) }),
35
+ };
36
+ }
37
+ const requestId = options.requestId?.trim() || `voice-${snapshot.generation}-${intent.target.sessionId}`;
38
+ const result = await this.dispatcher.dispatch({ requestId, target: intent.target, mode: intent.mode, task: intent.task }, options.dispatchContext);
39
+ if (!result.ok)
40
+ return { kind: 'clarify', speechText: result.message, task: intent.task, mode: intent.mode };
41
+ const targetEntry = snapshot.entries.find((entry) => entry.sessionId === intent.target?.sessionId);
42
+ const targetName = targetEntry === undefined
43
+ ? '目标会话'
44
+ : `工作区${targetEntry.workspaceName}的${targetEntry.title ?? targetEntry.sessionId}`;
45
+ return {
46
+ kind: 'dispatch',
47
+ speechText: `已将任务发送到${targetName},模式为${intent.mode === 'steer' ? '立即注入' : '排队'}。`,
48
+ target: intent.target,
49
+ mode: intent.mode,
50
+ task: intent.task,
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=assistant-voice-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-voice-turn.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-voice-turn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { AssistantWaitingKind } from '../../shared/contracts/assistant.js';
2
+ export interface AssistantWaitingRequest {
3
+ readonly sessionId: string;
4
+ readonly kind: AssistantWaitingKind;
5
+ }
6
+ /** 只消费运行时审批/提问事件,不从 running 状态或历史日志猜测等待。 */
7
+ export declare class AssistantWaitingState {
8
+ private readonly pending;
9
+ request(value: AssistantWaitingRequest): void;
10
+ resolve(sessionId: string): void;
11
+ get(sessionId: string): AssistantWaitingKind | null;
12
+ snapshot(): ReadonlyMap<string, AssistantWaitingKind>;
13
+ }
14
+ //# sourceMappingURL=assistant-waiting-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-waiting-state.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-waiting-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;CACpC;AACD,4CAA4C;AAC5C,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAElE,OAAO,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAI7C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIhC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAInD,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC;CAGtD"}