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

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 (420) hide show
  1. package/README.en.md +27 -16
  2. package/README.md +44 -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 +3361 -227
  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/fileWorkspace.d.ts.map +1 -1
  64. package/data/build/dist/client/locales/fileWorkspace.js +4 -0
  65. package/data/build/dist/client/locales/fileWorkspace.js.map +1 -1
  66. package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -1
  67. package/data/build/dist/client/locales/terminalAuth.js +2 -0
  68. package/data/build/dist/client/locales/terminalAuth.js.map +1 -1
  69. package/data/build/dist/client/locales/usage.d.ts.map +1 -1
  70. package/data/build/dist/client/locales/usage.js +4 -0
  71. package/data/build/dist/client/locales/usage.js.map +1 -1
  72. package/data/build/dist/client/mobile-session-interaction.d.ts +9 -0
  73. package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -1
  74. package/data/build/dist/client/mobile-session-interaction.js +63 -0
  75. package/data/build/dist/client/mobile-session-interaction.js.map +1 -1
  76. package/data/build/dist/client/model-catalog-cache.d.ts +23 -0
  77. package/data/build/dist/client/model-catalog-cache.d.ts.map +1 -1
  78. package/data/build/dist/client/model-catalog-cache.js +81 -9
  79. package/data/build/dist/client/model-catalog-cache.js.map +1 -1
  80. package/data/build/dist/client/service-tier.d.ts +11 -0
  81. package/data/build/dist/client/service-tier.d.ts.map +1 -1
  82. package/data/build/dist/client/service-tier.js +15 -0
  83. package/data/build/dist/client/service-tier.js.map +1 -1
  84. package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -1
  85. package/data/build/dist/client/session-changed-files-view.js +162 -58
  86. package/data/build/dist/client/session-changed-files-view.js.map +1 -1
  87. package/data/build/dist/client/sherpa-voice-adapter.d.ts +46 -0
  88. package/data/build/dist/client/sherpa-voice-adapter.d.ts.map +1 -0
  89. package/data/build/dist/client/sherpa-voice-adapter.js +252 -0
  90. package/data/build/dist/client/sherpa-voice-adapter.js.map +1 -0
  91. package/data/build/dist/client/skill-command.d.ts +10 -0
  92. package/data/build/dist/client/skill-command.d.ts.map +1 -0
  93. package/data/build/dist/client/skill-command.js +258 -0
  94. package/data/build/dist/client/skill-command.js.map +1 -0
  95. package/data/build/dist/client/skill-reference-dom.d.ts +38 -0
  96. package/data/build/dist/client/skill-reference-dom.d.ts.map +1 -0
  97. package/data/build/dist/client/skill-reference-dom.js +187 -0
  98. package/data/build/dist/client/skill-reference-dom.js.map +1 -0
  99. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  100. package/data/build/dist/client/subscription-slot.js +51 -3
  101. package/data/build/dist/client/subscription-slot.js.map +1 -1
  102. package/data/build/dist/client/terminal/model.d.ts +40 -2
  103. package/data/build/dist/client/terminal/model.d.ts.map +1 -1
  104. package/data/build/dist/client/terminal/model.js +151 -24
  105. package/data/build/dist/client/terminal/model.js.map +1 -1
  106. package/data/build/dist/client/terminal/styles.d.ts +8 -0
  107. package/data/build/dist/client/terminal/styles.d.ts.map +1 -1
  108. package/data/build/dist/client/terminal/styles.js +23 -2
  109. package/data/build/dist/client/terminal/styles.js.map +1 -1
  110. package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
  111. package/data/build/dist/client/terminal/ui.js +161 -26
  112. package/data/build/dist/client/terminal/ui.js.map +1 -1
  113. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
  114. package/data/build/dist/client/terminal/xterm-view.js +218 -42
  115. package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
  116. package/data/build/dist/client/voice-capture.d.ts +32 -0
  117. package/data/build/dist/client/voice-capture.d.ts.map +1 -0
  118. package/data/build/dist/client/voice-capture.js +158 -0
  119. package/data/build/dist/client/voice-capture.js.map +1 -0
  120. package/data/build/dist/client/voice-device-manager.d.ts +24 -0
  121. package/data/build/dist/client/voice-device-manager.d.ts.map +1 -0
  122. package/data/build/dist/client/voice-device-manager.js +197 -0
  123. package/data/build/dist/client/voice-device-manager.js.map +1 -0
  124. package/data/build/dist/client/voice-output.d.ts +14 -0
  125. package/data/build/dist/client/voice-output.d.ts.map +1 -0
  126. package/data/build/dist/client/voice-output.js +32 -0
  127. package/data/build/dist/client/voice-output.js.map +1 -0
  128. package/data/build/dist/client/voice-security.d.ts +8 -0
  129. package/data/build/dist/client/voice-security.d.ts.map +1 -0
  130. package/data/build/dist/client/voice-security.js +26 -0
  131. package/data/build/dist/client/voice-security.js.map +1 -0
  132. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +12 -1
  133. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
  134. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +32 -0
  135. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
  136. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +23 -3
  137. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  138. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +137 -14
  139. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  140. package/data/build/dist/host/cli-adapters/acp-elicitation.d.ts +31 -0
  141. package/data/build/dist/host/cli-adapters/acp-elicitation.d.ts.map +1 -0
  142. package/data/build/dist/host/cli-adapters/acp-elicitation.js +144 -0
  143. package/data/build/dist/host/cli-adapters/acp-elicitation.js.map +1 -0
  144. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts +41 -3
  145. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts.map +1 -1
  146. package/data/build/dist/host/cli-adapters/antigravity-driver.js +213 -12
  147. package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -1
  148. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts +121 -0
  149. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts.map +1 -0
  150. package/data/build/dist/host/cli-adapters/antigravity-subscription.js +504 -0
  151. package/data/build/dist/host/cli-adapters/antigravity-subscription.js.map +1 -0
  152. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +31 -1
  153. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  154. package/data/build/dist/host/cli-adapters/claude-driver.js +307 -9
  155. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  156. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts +7 -1
  157. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -1
  158. package/data/build/dist/host/cli-adapters/codebuddy-driver.js +147 -6
  159. package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -1
  160. package/data/build/dist/host/cli-adapters/codex-driver.d.ts +28 -2
  161. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  162. package/data/build/dist/host/cli-adapters/codex-driver.js +234 -5
  163. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  164. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  165. package/data/build/dist/host/cli-adapters/command-code-driver.js +20 -8
  166. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  167. package/data/build/dist/host/cli-adapters/command-code-subscription.js +7 -4
  168. package/data/build/dist/host/cli-adapters/command-code-subscription.js.map +1 -1
  169. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts +10 -1
  170. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts.map +1 -1
  171. package/data/build/dist/host/cli-adapters/cursor-driver.js +74 -4
  172. package/data/build/dist/host/cli-adapters/cursor-driver.js.map +1 -1
  173. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js +1 -1
  174. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js.map +1 -1
  175. package/data/build/dist/host/cli-adapters/driver.d.ts +21 -1
  176. package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -1
  177. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  178. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +15 -3
  179. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  180. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  181. package/data/build/dist/host/cli-adapters/feature.js +22 -3
  182. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  183. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts +2 -1
  184. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
  185. package/data/build/dist/host/cli-adapters/gemini-driver.js +70 -11
  186. package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
  187. package/data/build/dist/host/cli-adapters/grok-driver.d.ts +3 -2
  188. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  189. package/data/build/dist/host/cli-adapters/grok-driver.js +69 -14
  190. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  191. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
  192. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
  193. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
  194. package/data/build/dist/host/cli-adapters/kimi-driver.js +6 -6
  195. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
  196. package/data/build/dist/host/cli-adapters/kiro-driver.js +1 -1
  197. package/data/build/dist/host/cli-adapters/kiro-driver.js.map +1 -1
  198. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts +6 -2
  199. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -1
  200. package/data/build/dist/host/cli-adapters/mcode-driver.js +95 -24
  201. package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -1
  202. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +49 -0
  203. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
  204. package/data/build/dist/host/cli-adapters/model-catalog.js +126 -0
  205. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
  206. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +55 -1
  207. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -1
  208. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +148 -6
  209. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -1
  210. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +7 -0
  211. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -1
  212. package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -1
  213. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +11 -0
  214. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  215. package/data/build/dist/host/cli-adapters/opencode-driver.js +92 -8
  216. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  217. package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
  218. package/data/build/dist/host/cli-adapters/pi-driver.js +4 -0
  219. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  220. package/data/build/dist/host/cli-adapters/process-utils.d.ts +10 -3
  221. package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -1
  222. package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -1
  223. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +4 -1
  224. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
  225. package/data/build/dist/host/cli-adapters/provider-subscription.js +8 -1
  226. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
  227. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts +19 -4
  228. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts.map +1 -1
  229. package/data/build/dist/host/cli-adapters/qoder-driver.js +202 -11
  230. package/data/build/dist/host/cli-adapters/qoder-driver.js.map +1 -1
  231. package/data/build/dist/host/cli-adapters/qoder-subscription.js +3 -1
  232. package/data/build/dist/host/cli-adapters/qoder-subscription.js.map +1 -1
  233. package/data/build/dist/host/cli-adapters/reasoning-content.d.ts +11 -0
  234. package/data/build/dist/host/cli-adapters/reasoning-content.d.ts.map +1 -0
  235. package/data/build/dist/host/cli-adapters/reasoning-content.js +79 -0
  236. package/data/build/dist/host/cli-adapters/reasoning-content.js.map +1 -0
  237. package/data/build/dist/host/cli-adapters/registry.d.ts +24 -1
  238. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  239. package/data/build/dist/host/cli-adapters/registry.js +109 -4
  240. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  241. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts +3 -2
  242. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts.map +1 -1
  243. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js +8 -2
  244. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js.map +1 -1
  245. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +3 -2
  246. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  247. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +16 -2
  248. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  249. package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -1
  250. package/data/build/dist/host/cli-adapters/subagent-tool.js +40 -10
  251. package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -1
  252. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts +4 -1
  253. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts.map +1 -1
  254. package/data/build/dist/host/cli-bridge/bridge-holder.js.map +1 -1
  255. package/data/build/dist/host/cli-bridge/bridge-server.d.ts +11 -3
  256. package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -1
  257. package/data/build/dist/host/cli-bridge/bridge-server.js +8 -4
  258. package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -1
  259. package/data/build/dist/host/cli-bridge/command-code-mod.js +18 -2
  260. package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -1
  261. package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -1
  262. package/data/build/dist/host/cli-bridge/dispatch.js +30 -5
  263. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
  264. package/data/build/dist/host/cli-bridge/injections.d.ts +10 -1
  265. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
  266. package/data/build/dist/host/cli-bridge/injections.js +30 -10
  267. package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
  268. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +49 -7
  269. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -1
  270. package/data/build/dist/host/features/assistant-dispatch.d.ts +45 -0
  271. package/data/build/dist/host/features/assistant-dispatch.d.ts.map +1 -0
  272. package/data/build/dist/host/features/assistant-dispatch.js +49 -0
  273. package/data/build/dist/host/features/assistant-dispatch.js.map +1 -0
  274. package/data/build/dist/host/features/assistant-intent.d.ts +46 -0
  275. package/data/build/dist/host/features/assistant-intent.d.ts.map +1 -0
  276. package/data/build/dist/host/features/assistant-intent.js +149 -0
  277. package/data/build/dist/host/features/assistant-intent.js.map +1 -0
  278. package/data/build/dist/host/features/assistant-scope-settings.d.ts +25 -0
  279. package/data/build/dist/host/features/assistant-scope-settings.d.ts.map +1 -0
  280. package/data/build/dist/host/features/assistant-scope-settings.js +33 -0
  281. package/data/build/dist/host/features/assistant-scope-settings.js.map +1 -0
  282. package/data/build/dist/host/features/assistant-scope.d.ts +79 -0
  283. package/data/build/dist/host/features/assistant-scope.d.ts.map +1 -0
  284. package/data/build/dist/host/features/assistant-scope.js +107 -0
  285. package/data/build/dist/host/features/assistant-scope.js.map +1 -0
  286. package/data/build/dist/host/features/assistant-session-index.d.ts +44 -0
  287. package/data/build/dist/host/features/assistant-session-index.d.ts.map +1 -0
  288. package/data/build/dist/host/features/assistant-session-index.js +109 -0
  289. package/data/build/dist/host/features/assistant-session-index.js.map +1 -0
  290. package/data/build/dist/host/features/assistant-summary.d.ts +28 -0
  291. package/data/build/dist/host/features/assistant-summary.d.ts.map +1 -0
  292. package/data/build/dist/host/features/assistant-summary.js +166 -0
  293. package/data/build/dist/host/features/assistant-summary.js.map +1 -0
  294. package/data/build/dist/host/features/assistant-voice-stream.d.ts +10 -0
  295. package/data/build/dist/host/features/assistant-voice-stream.d.ts.map +1 -0
  296. package/data/build/dist/host/features/assistant-voice-stream.js +106 -0
  297. package/data/build/dist/host/features/assistant-voice-stream.js.map +1 -0
  298. package/data/build/dist/host/features/assistant-voice-turn.d.ts +27 -0
  299. package/data/build/dist/host/features/assistant-voice-turn.d.ts.map +1 -0
  300. package/data/build/dist/host/features/assistant-voice-turn.js +54 -0
  301. package/data/build/dist/host/features/assistant-voice-turn.js.map +1 -0
  302. package/data/build/dist/host/features/assistant-waiting-state.d.ts +14 -0
  303. package/data/build/dist/host/features/assistant-waiting-state.d.ts.map +1 -0
  304. package/data/build/dist/host/features/assistant-waiting-state.js +17 -0
  305. package/data/build/dist/host/features/assistant-waiting-state.js.map +1 -0
  306. package/data/build/dist/host/features/global-voice-coordinator.d.ts +55 -0
  307. package/data/build/dist/host/features/global-voice-coordinator.d.ts.map +1 -0
  308. package/data/build/dist/host/features/global-voice-coordinator.js +221 -0
  309. package/data/build/dist/host/features/global-voice-coordinator.js.map +1 -0
  310. package/data/build/dist/host/features/global-voice-rpc.d.ts +25 -0
  311. package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -0
  312. package/data/build/dist/host/features/global-voice-rpc.js +862 -0
  313. package/data/build/dist/host/features/global-voice-rpc.js.map +1 -0
  314. package/data/build/dist/host/features/index.d.ts +10 -0
  315. package/data/build/dist/host/features/index.d.ts.map +1 -1
  316. package/data/build/dist/host/features/index.js +10 -0
  317. package/data/build/dist/host/features/index.js.map +1 -1
  318. package/data/build/dist/host/features/peer-host.d.ts +5 -0
  319. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  320. package/data/build/dist/host/features/peer-host.js +232 -2
  321. package/data/build/dist/host/features/peer-host.js.map +1 -1
  322. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts +42 -0
  323. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts.map +1 -0
  324. package/data/build/dist/host/features/sherpa-voice-runtime.js +193 -0
  325. package/data/build/dist/host/features/sherpa-voice-runtime.js.map +1 -0
  326. package/data/build/dist/host/features/types.d.ts +26 -0
  327. package/data/build/dist/host/features/types.d.ts.map +1 -1
  328. package/data/build/dist/host/features/voice-agent-actions.d.ts +26 -0
  329. package/data/build/dist/host/features/voice-agent-actions.d.ts.map +1 -0
  330. package/data/build/dist/host/features/voice-agent-actions.js +128 -0
  331. package/data/build/dist/host/features/voice-agent-actions.js.map +1 -0
  332. package/data/build/dist/host/features/voice-agent-service.d.ts +117 -0
  333. package/data/build/dist/host/features/voice-agent-service.d.ts.map +1 -0
  334. package/data/build/dist/host/features/voice-agent-service.js +243 -0
  335. package/data/build/dist/host/features/voice-agent-service.js.map +1 -0
  336. package/data/build/dist/host/features/voice-model-setup.d.ts +20 -0
  337. package/data/build/dist/host/features/voice-model-setup.d.ts.map +1 -0
  338. package/data/build/dist/host/features/voice-model-setup.js +89 -0
  339. package/data/build/dist/host/features/voice-model-setup.js.map +1 -0
  340. package/data/build/dist/host/index.d.ts +3 -3
  341. package/data/build/dist/host/index.d.ts.map +1 -1
  342. package/data/build/dist/host/index.js +8 -2
  343. package/data/build/dist/host/index.js.map +1 -1
  344. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  345. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -1
  346. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +53 -2
  347. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js.map +1 -1
  348. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +15 -1
  349. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
  350. package/data/build/dist/host/native-session-bridge.d.ts +2 -0
  351. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
  352. package/data/build/dist/host/native-session-bridge.js +1 -0
  353. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  354. package/data/build/dist/host/rpc.d.ts.map +1 -1
  355. package/data/build/dist/host/rpc.js +9 -4
  356. package/data/build/dist/host/rpc.js.map +1 -1
  357. package/data/build/dist/host/settings.d.ts.map +1 -1
  358. package/data/build/dist/host/settings.js +19 -1
  359. package/data/build/dist/host/settings.js.map +1 -1
  360. package/data/build/dist/host/terminal/backends/conpty-backend.js.map +1 -1
  361. package/data/build/dist/host/terminal/terminal-controller.d.ts.map +1 -1
  362. package/data/build/dist/host/terminal/terminal-controller.js +4 -0
  363. package/data/build/dist/host/terminal/terminal-controller.js.map +1 -1
  364. package/data/build/dist/host/terminal/terminal-service.d.ts +21 -1
  365. package/data/build/dist/host/terminal/terminal-service.d.ts.map +1 -1
  366. package/data/build/dist/host/terminal/terminal-service.js +118 -7
  367. package/data/build/dist/host/terminal/terminal-service.js.map +1 -1
  368. package/data/build/dist/index.d.ts +2 -2
  369. package/data/build/dist/index.d.ts.map +1 -1
  370. package/data/build/dist/index.js +1 -1
  371. package/data/build/dist/index.js.map +1 -1
  372. package/data/build/dist/shared/contracts/assistant.d.ts +70 -0
  373. package/data/build/dist/shared/contracts/assistant.d.ts.map +1 -0
  374. package/data/build/dist/shared/contracts/assistant.js +2 -0
  375. package/data/build/dist/shared/contracts/assistant.js.map +1 -0
  376. package/data/build/dist/shared/contracts/cli-adapter.d.ts +33 -1
  377. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  378. package/data/build/dist/shared/contracts/config.d.ts +30 -0
  379. package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
  380. package/data/build/dist/shared/contracts/config.js +20 -0
  381. package/data/build/dist/shared/contracts/config.js.map +1 -1
  382. package/data/build/dist/shared/contracts/errors.d.ts +2 -2
  383. package/data/build/dist/shared/contracts/errors.d.ts.map +1 -1
  384. package/data/build/dist/shared/contracts/subscription.d.ts +30 -0
  385. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
  386. package/data/build/dist/shared/contracts/subscription.js.map +1 -1
  387. package/data/build/dist/shared/contracts/terminal.d.ts +2 -0
  388. package/data/build/dist/shared/contracts/terminal.d.ts.map +1 -1
  389. package/data/build/dist/shared/contracts/version.d.ts +12 -5
  390. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  391. package/data/build/dist/shared/contracts/version.js +11 -4
  392. package/data/build/dist/shared/contracts/version.js.map +1 -1
  393. package/data/build/dist/shared/contracts/voice-runtime.d.ts +90 -0
  394. package/data/build/dist/shared/contracts/voice-runtime.d.ts.map +1 -0
  395. package/data/build/dist/shared/contracts/voice-runtime.js +16 -0
  396. package/data/build/dist/shared/contracts/voice-runtime.js.map +1 -0
  397. package/data/build/dist/shared/index.d.ts +8 -2
  398. package/data/build/dist/shared/index.d.ts.map +1 -1
  399. package/data/build/dist/shared/index.js +5 -1
  400. package/data/build/dist/shared/index.js.map +1 -1
  401. package/data/build/dist/shared/voice-models.d.ts +21 -0
  402. package/data/build/dist/shared/voice-models.d.ts.map +1 -0
  403. package/data/build/dist/shared/voice-models.js +27 -0
  404. package/data/build/dist/shared/voice-models.js.map +1 -0
  405. package/data/build/dist/shared/voice-stream.d.ts +42 -0
  406. package/data/build/dist/shared/voice-stream.d.ts.map +1 -0
  407. package/data/build/dist/shared/voice-stream.js +99 -0
  408. package/data/build/dist/shared/voice-stream.js.map +1 -0
  409. package/data/build/dist/shared/voice-text.d.ts +3 -0
  410. package/data/build/dist/shared/voice-text.d.ts.map +1 -0
  411. package/data/build/dist/shared/voice-text.js +14 -0
  412. package/data/build/dist/shared/voice-text.js.map +1 -0
  413. package/data/build/dist/typert.host.d.ts.map +1 -1
  414. package/data/build/dist/typert.host.js +1 -0
  415. package/data/build/dist/typert.host.js.map +1 -1
  416. package/package.json +56 -26
  417. package/profile/README.md +8 -5
  418. package/profile/package.json +5 -3
  419. package/profile/version.json +3 -3
  420. package/version.json +3 -3
@@ -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"}
@@ -0,0 +1,17 @@
1
+ /** 只消费运行时审批/提问事件,不从 running 状态或历史日志猜测等待。 */
2
+ export class AssistantWaitingState {
3
+ pending = new Map();
4
+ request(value) {
5
+ this.pending.set(value.sessionId, value.kind);
6
+ }
7
+ resolve(sessionId) {
8
+ this.pending.delete(sessionId);
9
+ }
10
+ get(sessionId) {
11
+ return this.pending.get(sessionId) ?? null;
12
+ }
13
+ snapshot() {
14
+ return new Map(this.pending);
15
+ }
16
+ }
17
+ //# sourceMappingURL=assistant-waiting-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-waiting-state.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-waiting-state.ts"],"names":[],"mappings":"AAMA,4CAA4C;AAC5C,MAAM,OAAO,qBAAqB;IACf,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAA;IAElE,OAAO,CAAC,KAA8B;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC/C,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAChC,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAA;IAC5C,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ import type { VoicePcmFrame, VoiceRuntimeAdapter, VoiceRuntimeCapabilities, VoiceRuntimeEvent, VoiceRuntimeState } from '../../shared/contracts/voice-runtime.js';
2
+ export interface GlobalVoiceCoordinatorSnapshot {
3
+ readonly active: boolean;
4
+ readonly ownerId: string | null;
5
+ readonly state: VoiceRuntimeState;
6
+ readonly epoch: number;
7
+ readonly capabilities: VoiceRuntimeCapabilities;
8
+ }
9
+ export interface GlobalVoiceCoordinatorOptions {
10
+ readonly adapter: VoiceRuntimeAdapter;
11
+ readonly onFinalText?: (text: string, epoch: number) => Promise<void> | void;
12
+ readonly onAudio?: (bytes: Uint8Array, epoch: number) => void;
13
+ readonly leaseTtlMs?: number;
14
+ }
15
+ /** Host/Profile 级全局语音协调器,不保存任何目标 sessionId。 */
16
+ export declare class GlobalVoiceCoordinator {
17
+ private readonly adapter;
18
+ private readonly onFinalText;
19
+ private readonly onAudio;
20
+ private readonly listeners;
21
+ private readonly eventListeners;
22
+ private readonly runtimeDispose;
23
+ private ownerId;
24
+ private state;
25
+ private epoch;
26
+ private started;
27
+ private clientEpoch;
28
+ private clientSequence;
29
+ /** barge-in 后,旧轮次的 final 事件必须在收到新 listening 前丢弃。 */
30
+ private blockedFinalEpoch;
31
+ private leaseTimer;
32
+ private readonly leaseTtlMs;
33
+ constructor(options: GlobalVoiceCoordinatorOptions);
34
+ snapshot(): GlobalVoiceCoordinatorSnapshot;
35
+ subscribe(listener: (snapshot: GlobalVoiceCoordinatorSnapshot) => void): () => void;
36
+ /** 供二进制语音流把 partial/final/audio 事件回写给持有租约的浏览器。 */
37
+ subscribeRuntimeEvent(listener: (event: VoiceRuntimeEvent) => void): () => void;
38
+ start(ownerId: string): Promise<GlobalVoiceCoordinatorSnapshot>;
39
+ sendPcm(ownerId: string, frame: VoicePcmFrame): Promise<void>;
40
+ interrupt(ownerId: string): Promise<GlobalVoiceCoordinatorSnapshot>;
41
+ stop(ownerId: string): Promise<GlobalVoiceCoordinatorSnapshot>;
42
+ speak(ownerId: string, text: string): Promise<void>;
43
+ /** 供语音动作桥校验来源页面;不能只保护 start/stop。 */
44
+ assertOwner(ownerId: string): void;
45
+ heartbeat(ownerId: string): GlobalVoiceCoordinatorSnapshot;
46
+ /** 接收 Client 的状态事件;原始 PCM 不经过此边界。 */
47
+ acceptClientEvent(ownerId: string, event: VoiceRuntimeEvent, sequence?: number): GlobalVoiceCoordinatorSnapshot;
48
+ dispose(): void;
49
+ private handleRuntimeEvent;
50
+ private ensureOwner;
51
+ private armLeaseTimer;
52
+ private clearLeaseTimer;
53
+ private emit;
54
+ }
55
+ //# sourceMappingURL=global-voice-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-voice-coordinator.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/global-voice-coordinator.ts"],"names":[],"mappings":"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"}