@jingyi0605/codingns4dsh 0.2.1-beta.2 → 0.2.1-beta.4

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 (888) hide show
  1. package/README.en.md +8 -8
  2. package/README.md +103 -14
  3. package/THIRD_PARTY_NOTICES +141 -0
  4. package/assets/assistant-basics/female-v1.png +0 -0
  5. package/assets/assistant-basics/male-v1.png +0 -0
  6. package/assets/desktop-assistant/20261008-WebView2/345/210/206/345/217/221/350/257/264/346/230/216.md +14 -0
  7. package/assets/desktop-assistant/webview2/LICENSE.txt +27 -0
  8. package/assets/desktop-assistant/webview2/Microsoft.Web.WebView2.Core.dll +0 -0
  9. package/assets/desktop-assistant/webview2/Microsoft.Web.WebView2.Wpf.dll +0 -0
  10. package/assets/desktop-assistant/webview2/NOTICE.txt +85 -0
  11. package/assets/desktop-assistant/webview2/arm64/WebView2Loader.dll +0 -0
  12. package/assets/desktop-assistant/webview2/x64/WebView2Loader.dll +0 -0
  13. package/assets/desktop-assistant/webview2/x86/WebView2Loader.dll +0 -0
  14. package/assets/moss/LICENSE +201 -0
  15. package/assets/moss/ort_cpu_runtime.py +839 -0
  16. package/assets/moss/worker.py +278 -0
  17. package/assets/voice/bilingual-zh-en-bpe.vocab +500 -0
  18. package/avatar-packages/catalog.json +259 -0
  19. package/avatar-packages/manifests/bubu-codebrew-bear.avatar.json +13 -0
  20. package/avatar-packages/manifests/ds-whale-live2d.avatar.json +27 -0
  21. package/avatar-packages/manifests/ds-whale-sprite.avatar.json +13 -0
  22. package/avatar-packages/manifests/live2d-haru.avatar.json +13 -0
  23. package/avatar-packages/manifests/live2d-hiyori.avatar.json +13 -0
  24. package/avatar-packages/manifests/live2d-mao.avatar.json +13 -0
  25. package/avatar-packages/manifests/live2d-mark.avatar.json +13 -0
  26. package/avatar-packages/manifests/live2d-rice.avatar.json +13 -0
  27. package/avatar-packages/manifests/live2d-wanko.avatar.json +13 -0
  28. package/avatar-packages/manifests/nastya.avatar.json +13 -0
  29. package/avatar-packages/manifests/scout-corgi.avatar.json +13 -0
  30. package/avatar-packages/manifests/xiaoman.avatar.json +13 -0
  31. package/data/build/dist/client/assistant-settings-styles.d.ts +7 -0
  32. package/data/build/dist/client/assistant-settings-styles.d.ts.map +1 -0
  33. package/data/build/dist/client/assistant-settings-styles.js +6 -0
  34. package/data/build/dist/client/assistant-settings-styles.js.map +1 -0
  35. package/data/build/dist/client/avatar/builtin.d.ts +5 -0
  36. package/data/build/dist/client/avatar/builtin.d.ts.map +1 -0
  37. package/data/build/dist/client/avatar/builtin.js +9 -0
  38. package/data/build/dist/client/avatar/builtin.js.map +1 -0
  39. package/data/build/dist/client/avatar/cache-status.d.ts +4 -0
  40. package/data/build/dist/client/avatar/cache-status.d.ts.map +1 -0
  41. package/data/build/dist/client/avatar/cache-status.js +40 -0
  42. package/data/build/dist/client/avatar/cache-status.js.map +1 -0
  43. package/data/build/dist/client/avatar/catalog-panel.d.ts +49 -0
  44. package/data/build/dist/client/avatar/catalog-panel.d.ts.map +1 -0
  45. package/data/build/dist/client/avatar/catalog-panel.js +245 -0
  46. package/data/build/dist/client/avatar/catalog-panel.js.map +1 -0
  47. package/data/build/dist/client/avatar/catalog-picker.d.ts +38 -0
  48. package/data/build/dist/client/avatar/catalog-picker.d.ts.map +1 -0
  49. package/data/build/dist/client/avatar/catalog-picker.js +65 -0
  50. package/data/build/dist/client/avatar/catalog-picker.js.map +1 -0
  51. package/data/build/dist/client/avatar/desktop-bridge.d.ts +21 -0
  52. package/data/build/dist/client/avatar/desktop-bridge.d.ts.map +1 -0
  53. package/data/build/dist/client/avatar/desktop-bridge.js +109 -0
  54. package/data/build/dist/client/avatar/desktop-bridge.js.map +1 -0
  55. package/data/build/dist/client/avatar/desktop-entry.d.ts +2 -0
  56. package/data/build/dist/client/avatar/desktop-entry.d.ts.map +1 -0
  57. package/data/build/dist/client/avatar/desktop-entry.js +34 -0
  58. package/data/build/dist/client/avatar/desktop-entry.js.map +1 -0
  59. package/data/build/dist/client/avatar/desktop-view.d.ts +23 -0
  60. package/data/build/dist/client/avatar/desktop-view.d.ts.map +1 -0
  61. package/data/build/dist/client/avatar/desktop-view.js +72 -0
  62. package/data/build/dist/client/avatar/desktop-view.js.map +1 -0
  63. package/data/build/dist/client/avatar/engine.d.ts +45 -0
  64. package/data/build/dist/client/avatar/engine.d.ts.map +1 -0
  65. package/data/build/dist/client/avatar/engine.js +165 -0
  66. package/data/build/dist/client/avatar/engine.js.map +1 -0
  67. package/data/build/dist/client/avatar/floating.d.ts +20 -0
  68. package/data/build/dist/client/avatar/floating.d.ts.map +1 -0
  69. package/data/build/dist/client/avatar/floating.js +99 -0
  70. package/data/build/dist/client/avatar/floating.js.map +1 -0
  71. package/data/build/dist/client/avatar/image.d.ts +5 -0
  72. package/data/build/dist/client/avatar/image.d.ts.map +1 -0
  73. package/data/build/dist/client/avatar/image.js +22 -0
  74. package/data/build/dist/client/avatar/image.js.map +1 -0
  75. package/data/build/dist/client/avatar/live2d.d.ts +65 -0
  76. package/data/build/dist/client/avatar/live2d.d.ts.map +1 -0
  77. package/data/build/dist/client/avatar/live2d.js +278 -0
  78. package/data/build/dist/client/avatar/live2d.js.map +1 -0
  79. package/data/build/dist/client/avatar/loading.d.ts +27 -0
  80. package/data/build/dist/client/avatar/loading.d.ts.map +1 -0
  81. package/data/build/dist/client/avatar/loading.js +74 -0
  82. package/data/build/dist/client/avatar/loading.js.map +1 -0
  83. package/data/build/dist/client/avatar/manager.d.ts +71 -0
  84. package/data/build/dist/client/avatar/manager.d.ts.map +1 -0
  85. package/data/build/dist/client/avatar/manager.js +321 -0
  86. package/data/build/dist/client/avatar/manager.js.map +1 -0
  87. package/data/build/dist/client/avatar/portrait-capture.d.ts +30 -0
  88. package/data/build/dist/client/avatar/portrait-capture.d.ts.map +1 -0
  89. package/data/build/dist/client/avatar/portrait-capture.js +233 -0
  90. package/data/build/dist/client/avatar/portrait-capture.js.map +1 -0
  91. package/data/build/dist/client/avatar/portrait-editor.d.ts +14 -0
  92. package/data/build/dist/client/avatar/portrait-editor.d.ts.map +1 -0
  93. package/data/build/dist/client/avatar/portrait-editor.js +105 -0
  94. package/data/build/dist/client/avatar/portrait-editor.js.map +1 -0
  95. package/data/build/dist/client/avatar/portrait-service.d.ts +51 -0
  96. package/data/build/dist/client/avatar/portrait-service.d.ts.map +1 -0
  97. package/data/build/dist/client/avatar/portrait-service.js +244 -0
  98. package/data/build/dist/client/avatar/portrait-service.js.map +1 -0
  99. package/data/build/dist/client/avatar/portrait.d.ts +28 -0
  100. package/data/build/dist/client/avatar/portrait.d.ts.map +1 -0
  101. package/data/build/dist/client/avatar/portrait.js +56 -0
  102. package/data/build/dist/client/avatar/portrait.js.map +1 -0
  103. package/data/build/dist/client/avatar/preview-capture.d.ts +4 -0
  104. package/data/build/dist/client/avatar/preview-capture.d.ts.map +1 -0
  105. package/data/build/dist/client/avatar/preview-capture.js +100 -0
  106. package/data/build/dist/client/avatar/preview-capture.js.map +1 -0
  107. package/data/build/dist/client/avatar/preview-store.d.ts +41 -0
  108. package/data/build/dist/client/avatar/preview-store.d.ts.map +1 -0
  109. package/data/build/dist/client/avatar/preview-store.js +171 -0
  110. package/data/build/dist/client/avatar/preview-store.js.map +1 -0
  111. package/data/build/dist/client/avatar/preview.d.ts +14 -0
  112. package/data/build/dist/client/avatar/preview.d.ts.map +1 -0
  113. package/data/build/dist/client/avatar/preview.js +56 -0
  114. package/data/build/dist/client/avatar/preview.js.map +1 -0
  115. package/data/build/dist/client/avatar/registration.d.ts +2 -0
  116. package/data/build/dist/client/avatar/registration.d.ts.map +1 -0
  117. package/data/build/dist/client/avatar/registration.js +2 -0
  118. package/data/build/dist/client/avatar/registration.js.map +1 -0
  119. package/data/build/dist/client/avatar/registry.d.ts +45 -0
  120. package/data/build/dist/client/avatar/registry.d.ts.map +1 -0
  121. package/data/build/dist/client/avatar/registry.js +34 -0
  122. package/data/build/dist/client/avatar/registry.js.map +1 -0
  123. package/data/build/dist/client/avatar/settings-panel.d.ts +21 -0
  124. package/data/build/dist/client/avatar/settings-panel.d.ts.map +1 -0
  125. package/data/build/dist/client/avatar/settings-panel.js +169 -0
  126. package/data/build/dist/client/avatar/settings-panel.js.map +1 -0
  127. package/data/build/dist/client/avatar/slot.d.ts +17 -0
  128. package/data/build/dist/client/avatar/slot.d.ts.map +1 -0
  129. package/data/build/dist/client/avatar/slot.js +70 -0
  130. package/data/build/dist/client/avatar/slot.js.map +1 -0
  131. package/data/build/dist/client/avatar/spritesheet.d.ts +19 -0
  132. package/data/build/dist/client/avatar/spritesheet.d.ts.map +1 -0
  133. package/data/build/dist/client/avatar/spritesheet.js +91 -0
  134. package/data/build/dist/client/avatar/spritesheet.js.map +1 -0
  135. package/data/build/dist/client/avatar/temporary-preview.d.ts +25 -0
  136. package/data/build/dist/client/avatar/temporary-preview.d.ts.map +1 -0
  137. package/data/build/dist/client/avatar/temporary-preview.js +61 -0
  138. package/data/build/dist/client/avatar/temporary-preview.js.map +1 -0
  139. package/data/build/dist/client/bundle.js +25066 -2837
  140. package/data/build/dist/client/bundle.js.map +1 -1
  141. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  142. package/data/build/dist/client/cli-slots.js +9 -9
  143. package/data/build/dist/client/cli-slots.js.map +1 -1
  144. package/data/build/dist/client/desktop-assistant.js +8585 -0
  145. package/data/build/dist/client/features/assistant-composer-input.d.ts +10 -0
  146. package/data/build/dist/client/features/assistant-composer-input.d.ts.map +1 -0
  147. package/data/build/dist/client/features/assistant-composer-input.js +40 -0
  148. package/data/build/dist/client/features/assistant-composer-input.js.map +1 -0
  149. package/data/build/dist/client/features/assistant-configuration-session.d.ts +45 -0
  150. package/data/build/dist/client/features/assistant-configuration-session.d.ts.map +1 -0
  151. package/data/build/dist/client/features/assistant-configuration-session.js +252 -0
  152. package/data/build/dist/client/features/assistant-configuration-session.js.map +1 -0
  153. package/data/build/dist/client/features/assistant-configuration-tabs.d.ts +34 -0
  154. package/data/build/dist/client/features/assistant-configuration-tabs.d.ts.map +1 -0
  155. package/data/build/dist/client/features/assistant-configuration-tabs.js +48 -0
  156. package/data/build/dist/client/features/assistant-configuration-tabs.js.map +1 -0
  157. package/data/build/dist/client/features/assistant-conversation-message.d.ts +27 -0
  158. package/data/build/dist/client/features/assistant-conversation-message.d.ts.map +1 -0
  159. package/data/build/dist/client/features/assistant-conversation-message.js +55 -0
  160. package/data/build/dist/client/features/assistant-conversation-message.js.map +1 -0
  161. package/data/build/dist/client/features/assistant-debug-dialog.d.ts +3 -0
  162. package/data/build/dist/client/features/assistant-debug-dialog.d.ts.map +1 -0
  163. package/data/build/dist/client/features/assistant-debug-dialog.js +3 -0
  164. package/data/build/dist/client/features/assistant-debug-dialog.js.map +1 -0
  165. package/data/build/dist/client/features/assistant-debug-workbench.d.ts +48 -0
  166. package/data/build/dist/client/features/assistant-debug-workbench.d.ts.map +1 -0
  167. package/data/build/dist/client/features/assistant-debug-workbench.js +376 -0
  168. package/data/build/dist/client/features/assistant-debug-workbench.js.map +1 -0
  169. package/data/build/dist/client/features/assistant-floating-call.d.ts +33 -0
  170. package/data/build/dist/client/features/assistant-floating-call.d.ts.map +1 -0
  171. package/data/build/dist/client/features/assistant-floating-call.js +67 -0
  172. package/data/build/dist/client/features/assistant-floating-call.js.map +1 -0
  173. package/data/build/dist/client/features/assistant-panel.d.ts +2 -2
  174. package/data/build/dist/client/features/assistant-panel.d.ts.map +1 -1
  175. package/data/build/dist/client/features/assistant-panel.js +10 -123
  176. package/data/build/dist/client/features/assistant-panel.js.map +1 -1
  177. package/data/build/dist/client/features/assistant-realtime-call.d.ts +57 -0
  178. package/data/build/dist/client/features/assistant-realtime-call.d.ts.map +1 -0
  179. package/data/build/dist/client/features/assistant-realtime-call.js +131 -0
  180. package/data/build/dist/client/features/assistant-realtime-call.js.map +1 -0
  181. package/data/build/dist/client/features/assistant-record-style.d.ts +5 -0
  182. package/data/build/dist/client/features/assistant-record-style.d.ts.map +1 -0
  183. package/data/build/dist/client/features/assistant-record-style.js +25 -0
  184. package/data/build/dist/client/features/assistant-record-style.js.map +1 -0
  185. package/data/build/dist/client/features/assistant-voice-initialization.d.ts +26 -0
  186. package/data/build/dist/client/features/assistant-voice-initialization.d.ts.map +1 -0
  187. package/data/build/dist/client/features/assistant-voice-initialization.js +138 -0
  188. package/data/build/dist/client/features/assistant-voice-initialization.js.map +1 -0
  189. package/data/build/dist/client/features/assistant-voice-settings-group.d.ts +19 -0
  190. package/data/build/dist/client/features/assistant-voice-settings-group.d.ts.map +1 -0
  191. package/data/build/dist/client/features/assistant-voice-settings-group.js +34 -0
  192. package/data/build/dist/client/features/assistant-voice-settings-group.js.map +1 -0
  193. package/data/build/dist/client/features/assistant-voice-settings.d.ts +13 -0
  194. package/data/build/dist/client/features/assistant-voice-settings.d.ts.map +1 -0
  195. package/data/build/dist/client/features/assistant-voice-settings.js +184 -0
  196. package/data/build/dist/client/features/assistant-voice-settings.js.map +1 -0
  197. package/data/build/dist/client/features/assistant-workbench-controls.d.ts +72 -0
  198. package/data/build/dist/client/features/assistant-workbench-controls.d.ts.map +1 -0
  199. package/data/build/dist/client/features/assistant-workbench-controls.js +145 -0
  200. package/data/build/dist/client/features/assistant-workbench-controls.js.map +1 -0
  201. package/data/build/dist/client/features/assistant-workbench-entry.d.ts +4 -0
  202. package/data/build/dist/client/features/assistant-workbench-entry.d.ts.map +1 -0
  203. package/data/build/dist/client/features/assistant-workbench-entry.js +7 -0
  204. package/data/build/dist/client/features/assistant-workbench-entry.js.map +1 -0
  205. package/data/build/dist/client/features/assistant-workbench.d.ts +109 -0
  206. package/data/build/dist/client/features/assistant-workbench.d.ts.map +1 -0
  207. package/data/build/dist/client/features/assistant-workbench.js +568 -0
  208. package/data/build/dist/client/features/assistant-workbench.js.map +1 -0
  209. package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -1
  210. package/data/build/dist/client/features/global-voice-assistant.js +88 -32
  211. package/data/build/dist/client/features/global-voice-assistant.js.map +1 -1
  212. package/data/build/dist/client/features/lan-access.js +2 -2
  213. package/data/build/dist/client/features/lan-access.js.map +1 -1
  214. package/data/build/dist/client/features/mobile-access.d.ts.map +1 -1
  215. package/data/build/dist/client/features/mobile-access.js +9 -0
  216. package/data/build/dist/client/features/mobile-access.js.map +1 -1
  217. package/data/build/dist/client/features/peer-host.d.ts +2 -0
  218. package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
  219. package/data/build/dist/client/features/peer-host.js +66 -73
  220. package/data/build/dist/client/features/peer-host.js.map +1 -1
  221. package/data/build/dist/client/features/types.d.ts +4 -0
  222. package/data/build/dist/client/features/types.d.ts.map +1 -1
  223. package/data/build/dist/client/features/voice-conversation-dialog.d.ts +9 -2
  224. package/data/build/dist/client/features/voice-conversation-dialog.d.ts.map +1 -1
  225. package/data/build/dist/client/features/voice-conversation-dialog.js +29 -7
  226. package/data/build/dist/client/features/voice-conversation-dialog.js.map +1 -1
  227. package/data/build/dist/client/features/voice-initialization-dialog.d.ts +42 -2
  228. package/data/build/dist/client/features/voice-initialization-dialog.d.ts.map +1 -1
  229. package/data/build/dist/client/features/voice-initialization-dialog.js +181 -67
  230. package/data/build/dist/client/features/voice-initialization-dialog.js.map +1 -1
  231. package/data/build/dist/client/global-voice-runtime-registry.d.ts +4 -0
  232. package/data/build/dist/client/global-voice-runtime-registry.d.ts.map +1 -1
  233. package/data/build/dist/client/global-voice-runtime-registry.js.map +1 -1
  234. package/data/build/dist/client/index.d.ts +11 -0
  235. package/data/build/dist/client/index.d.ts.map +1 -1
  236. package/data/build/dist/client/index.js +10 -0
  237. package/data/build/dist/client/index.js.map +1 -1
  238. package/data/build/dist/client/locale.d.ts.map +1 -1
  239. package/data/build/dist/client/locale.js +51 -14
  240. package/data/build/dist/client/locale.js.map +1 -1
  241. package/data/build/dist/client/locales/assistantAvatar.d.ts +138 -0
  242. package/data/build/dist/client/locales/assistantAvatar.d.ts.map +1 -0
  243. package/data/build/dist/client/locales/assistantAvatar.js +273 -0
  244. package/data/build/dist/client/locales/assistantAvatar.js.map +1 -0
  245. package/data/build/dist/client/locales/assistantDebug.d.ts +4 -0
  246. package/data/build/dist/client/locales/assistantDebug.d.ts.map +1 -0
  247. package/data/build/dist/client/locales/assistantDebug.js +362 -0
  248. package/data/build/dist/client/locales/assistantDebug.js.map +1 -0
  249. package/data/build/dist/client/locales/assistantTts.d.ts +80 -0
  250. package/data/build/dist/client/locales/assistantTts.d.ts.map +1 -0
  251. package/data/build/dist/client/locales/assistantTts.js +76 -0
  252. package/data/build/dist/client/locales/assistantTts.js.map +1 -0
  253. package/data/build/dist/client/locales/assistantWorkbench.d.ts +126 -0
  254. package/data/build/dist/client/locales/assistantWorkbench.d.ts.map +1 -0
  255. package/data/build/dist/client/locales/assistantWorkbench.js +96 -0
  256. package/data/build/dist/client/locales/assistantWorkbench.js.map +1 -0
  257. package/data/build/dist/client/locales/peerHostWorkspace.d.ts.map +1 -1
  258. package/data/build/dist/client/locales/peerHostWorkspace.js +16 -2
  259. package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -1
  260. package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -1
  261. package/data/build/dist/client/locales/terminalAuth.js +80 -0
  262. package/data/build/dist/client/locales/terminalAuth.js.map +1 -1
  263. package/data/build/dist/client/locales/voiceModels.d.ts +45 -0
  264. package/data/build/dist/client/locales/voiceModels.d.ts.map +1 -0
  265. package/data/build/dist/client/locales/voiceModels.js +85 -0
  266. package/data/build/dist/client/locales/voiceModels.js.map +1 -0
  267. package/data/build/dist/client/mobile-rightbar-tabs-dom.d.ts +29 -0
  268. package/data/build/dist/client/mobile-rightbar-tabs-dom.d.ts.map +1 -0
  269. package/data/build/dist/client/mobile-rightbar-tabs-dom.js +93 -0
  270. package/data/build/dist/client/mobile-rightbar-tabs-dom.js.map +1 -0
  271. package/data/build/dist/client/mobile-rightbar-visibility.d.ts +32 -0
  272. package/data/build/dist/client/mobile-rightbar-visibility.d.ts.map +1 -0
  273. package/data/build/dist/client/mobile-rightbar-visibility.js +188 -0
  274. package/data/build/dist/client/mobile-rightbar-visibility.js.map +1 -0
  275. package/data/build/dist/client/mobile-session-interaction.d.ts +9 -19
  276. package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -1
  277. package/data/build/dist/client/mobile-session-interaction.js +25 -169
  278. package/data/build/dist/client/mobile-session-interaction.js.map +1 -1
  279. package/data/build/dist/client/mobile-sidebar-gestures.d.ts +4 -0
  280. package/data/build/dist/client/mobile-sidebar-gestures.d.ts.map +1 -1
  281. package/data/build/dist/client/mobile-sidebar-gestures.js +17 -9
  282. package/data/build/dist/client/mobile-sidebar-gestures.js.map +1 -1
  283. package/data/build/dist/client/model-catalog-cache.d.ts +4 -4
  284. package/data/build/dist/client/model-catalog-cache.d.ts.map +1 -1
  285. package/data/build/dist/client/model-catalog-cache.js +57 -32
  286. package/data/build/dist/client/model-catalog-cache.js.map +1 -1
  287. package/data/build/dist/client/moss-voice-output.d.ts +39 -0
  288. package/data/build/dist/client/moss-voice-output.d.ts.map +1 -0
  289. package/data/build/dist/client/moss-voice-output.js +241 -0
  290. package/data/build/dist/client/moss-voice-output.js.map +1 -0
  291. package/data/build/dist/client/peer-host-native-projection.d.ts +4 -3
  292. package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
  293. package/data/build/dist/client/peer-host-native-projection.js +7 -6
  294. package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
  295. package/data/build/dist/client/peer-host-native-store-projection.js +9 -21
  296. package/data/build/dist/client/peer-host-native-store-projection.js.map +1 -1
  297. package/data/build/dist/client/peer-host-workspace-tab.d.ts.map +1 -1
  298. package/data/build/dist/client/peer-host-workspace-tab.js +139 -10
  299. package/data/build/dist/client/peer-host-workspace-tab.js.map +1 -1
  300. package/data/build/dist/client/settings-bridge.d.ts +1 -0
  301. package/data/build/dist/client/settings-bridge.d.ts.map +1 -1
  302. package/data/build/dist/client/settings-bridge.js +9 -1
  303. package/data/build/dist/client/settings-bridge.js.map +1 -1
  304. package/data/build/dist/client/sherpa-voice-adapter.d.ts +23 -2
  305. package/data/build/dist/client/sherpa-voice-adapter.d.ts.map +1 -1
  306. package/data/build/dist/client/sherpa-voice-adapter.js +384 -91
  307. package/data/build/dist/client/sherpa-voice-adapter.js.map +1 -1
  308. package/data/build/dist/client/skill-command.d.ts +1 -1
  309. package/data/build/dist/client/skill-command.d.ts.map +1 -1
  310. package/data/build/dist/client/skill-command.js +25 -2
  311. package/data/build/dist/client/skill-command.js.map +1 -1
  312. package/data/build/dist/client/skill-reference-dom.js +1 -1
  313. package/data/build/dist/client/skill-reference-dom.js.map +1 -1
  314. package/data/build/dist/client/streaming-sentence-queue.d.ts +20 -0
  315. package/data/build/dist/client/streaming-sentence-queue.d.ts.map +1 -0
  316. package/data/build/dist/client/streaming-sentence-queue.js +130 -0
  317. package/data/build/dist/client/streaming-sentence-queue.js.map +1 -0
  318. package/data/build/dist/client/terminal/log-preview.d.ts +14 -0
  319. package/data/build/dist/client/terminal/log-preview.d.ts.map +1 -0
  320. package/data/build/dist/client/terminal/log-preview.js +23 -0
  321. package/data/build/dist/client/terminal/log-preview.js.map +1 -0
  322. package/data/build/dist/client/terminal/model.d.ts +38 -7
  323. package/data/build/dist/client/terminal/model.d.ts.map +1 -1
  324. package/data/build/dist/client/terminal/model.js +188 -32
  325. package/data/build/dist/client/terminal/model.js.map +1 -1
  326. package/data/build/dist/client/terminal/recovery.d.ts +7 -3
  327. package/data/build/dist/client/terminal/recovery.d.ts.map +1 -1
  328. package/data/build/dist/client/terminal/recovery.js +45 -41
  329. package/data/build/dist/client/terminal/recovery.js.map +1 -1
  330. package/data/build/dist/client/terminal/selection-actions.d.ts +63 -0
  331. package/data/build/dist/client/terminal/selection-actions.d.ts.map +1 -0
  332. package/data/build/dist/client/terminal/selection-actions.js +132 -0
  333. package/data/build/dist/client/terminal/selection-actions.js.map +1 -0
  334. package/data/build/dist/client/terminal/share-menu.d.ts +17 -0
  335. package/data/build/dist/client/terminal/share-menu.d.ts.map +1 -0
  336. package/data/build/dist/client/terminal/share-menu.js +131 -0
  337. package/data/build/dist/client/terminal/share-menu.js.map +1 -0
  338. package/data/build/dist/client/terminal/sharing.d.ts +42 -0
  339. package/data/build/dist/client/terminal/sharing.d.ts.map +1 -0
  340. package/data/build/dist/client/terminal/sharing.js +144 -0
  341. package/data/build/dist/client/terminal/sharing.js.map +1 -0
  342. package/data/build/dist/client/terminal/snapshot.d.ts +32 -0
  343. package/data/build/dist/client/terminal/snapshot.d.ts.map +1 -0
  344. package/data/build/dist/client/terminal/snapshot.js +108 -0
  345. package/data/build/dist/client/terminal/snapshot.js.map +1 -0
  346. package/data/build/dist/client/terminal/styles.d.ts +14 -0
  347. package/data/build/dist/client/terminal/styles.d.ts.map +1 -1
  348. package/data/build/dist/client/terminal/styles.js +41 -3
  349. package/data/build/dist/client/terminal/styles.js.map +1 -1
  350. package/data/build/dist/client/terminal/surface-cache.d.ts +10 -0
  351. package/data/build/dist/client/terminal/surface-cache.d.ts.map +1 -0
  352. package/data/build/dist/client/terminal/surface-cache.js +19 -0
  353. package/data/build/dist/client/terminal/surface-cache.js.map +1 -0
  354. package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
  355. package/data/build/dist/client/terminal/ui.js +78 -21
  356. package/data/build/dist/client/terminal/ui.js.map +1 -1
  357. package/data/build/dist/client/terminal/xterm-view.d.ts +5 -2
  358. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
  359. package/data/build/dist/client/terminal/xterm-view.js +429 -397
  360. package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
  361. package/data/build/dist/client/touch-input-focus.d.ts +30 -0
  362. package/data/build/dist/client/touch-input-focus.d.ts.map +1 -0
  363. package/data/build/dist/client/touch-input-focus.js +190 -0
  364. package/data/build/dist/client/touch-input-focus.js.map +1 -0
  365. package/data/build/dist/client/voice-capture.d.ts +9 -0
  366. package/data/build/dist/client/voice-capture.d.ts.map +1 -1
  367. package/data/build/dist/client/voice-capture.js +35 -1
  368. package/data/build/dist/client/voice-capture.js.map +1 -1
  369. package/data/build/dist/client/voice-chat-updates.d.ts +12 -0
  370. package/data/build/dist/client/voice-chat-updates.d.ts.map +1 -0
  371. package/data/build/dist/client/voice-chat-updates.js +39 -0
  372. package/data/build/dist/client/voice-chat-updates.js.map +1 -0
  373. package/data/build/dist/client/voice-diagnostics.d.ts +19 -0
  374. package/data/build/dist/client/voice-diagnostics.d.ts.map +1 -0
  375. package/data/build/dist/client/voice-diagnostics.js +73 -0
  376. package/data/build/dist/client/voice-diagnostics.js.map +1 -0
  377. package/data/build/dist/client/voice-model-setup-progress.d.ts +8 -0
  378. package/data/build/dist/client/voice-model-setup-progress.d.ts.map +1 -0
  379. package/data/build/dist/client/voice-model-setup-progress.js +27 -0
  380. package/data/build/dist/client/voice-model-setup-progress.js.map +1 -0
  381. package/data/build/dist/client/voice-stream-uploader.d.ts +41 -0
  382. package/data/build/dist/client/voice-stream-uploader.d.ts.map +1 -0
  383. package/data/build/dist/client/voice-stream-uploader.js +154 -0
  384. package/data/build/dist/client/voice-stream-uploader.js.map +1 -0
  385. package/data/build/dist/dsh-capabilities/client/config-forms-adapter.d.ts +4 -0
  386. package/data/build/dist/dsh-capabilities/client/config-forms-adapter.d.ts.map +1 -1
  387. package/data/build/dist/dsh-capabilities/client/config-forms-adapter.js +9 -0
  388. package/data/build/dist/dsh-capabilities/client/config-forms-adapter.js.map +1 -1
  389. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +5 -1
  390. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
  391. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +25 -0
  392. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
  393. package/data/build/dist/dsh-capabilities/client/terminal-sharing-adapter.d.ts +33 -0
  394. package/data/build/dist/dsh-capabilities/client/terminal-sharing-adapter.d.ts.map +1 -0
  395. package/data/build/dist/dsh-capabilities/client/terminal-sharing-adapter.js +187 -0
  396. package/data/build/dist/dsh-capabilities/client/terminal-sharing-adapter.js.map +1 -0
  397. package/data/build/dist/dsh-capabilities/host/assistant-agent-adapter.d.ts +55 -0
  398. package/data/build/dist/dsh-capabilities/host/assistant-agent-adapter.d.ts.map +1 -0
  399. package/data/build/dist/dsh-capabilities/host/assistant-agent-adapter.js +264 -0
  400. package/data/build/dist/dsh-capabilities/host/assistant-agent-adapter.js.map +1 -0
  401. package/data/build/dist/dsh-capabilities/host/assistant-attachment-adapter.d.ts +16 -0
  402. package/data/build/dist/dsh-capabilities/host/assistant-attachment-adapter.d.ts.map +1 -0
  403. package/data/build/dist/dsh-capabilities/host/assistant-attachment-adapter.js +69 -0
  404. package/data/build/dist/dsh-capabilities/host/assistant-attachment-adapter.js.map +1 -0
  405. package/data/build/dist/dsh-capabilities/host/assistant-llm-adapter.d.ts +36 -0
  406. package/data/build/dist/dsh-capabilities/host/assistant-llm-adapter.d.ts.map +1 -0
  407. package/data/build/dist/dsh-capabilities/host/assistant-llm-adapter.js +112 -0
  408. package/data/build/dist/dsh-capabilities/host/assistant-llm-adapter.js.map +1 -0
  409. package/data/build/dist/dsh-capabilities/host/assistant-web-search-adapter.d.ts +4 -0
  410. package/data/build/dist/dsh-capabilities/host/assistant-web-search-adapter.d.ts.map +1 -0
  411. package/data/build/dist/dsh-capabilities/host/assistant-web-search-adapter.js +41 -0
  412. package/data/build/dist/dsh-capabilities/host/assistant-web-search-adapter.js.map +1 -0
  413. package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.d.ts +28 -0
  414. package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.d.ts.map +1 -0
  415. package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.js +109 -0
  416. package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.js.map +1 -0
  417. package/data/build/dist/dsh-capabilities/matrix.d.ts.map +1 -1
  418. package/data/build/dist/dsh-capabilities/matrix.js +3 -0
  419. package/data/build/dist/dsh-capabilities/matrix.js.map +1 -1
  420. package/data/build/dist/dsh-capabilities/routes.d.ts.map +1 -1
  421. package/data/build/dist/dsh-capabilities/routes.js +18 -0
  422. package/data/build/dist/dsh-capabilities/routes.js.map +1 -1
  423. package/data/build/dist/dsh-capabilities/settings-store.d.ts +2 -0
  424. package/data/build/dist/dsh-capabilities/settings-store.d.ts.map +1 -1
  425. package/data/build/dist/dsh-capabilities/settings-store.js.map +1 -1
  426. package/data/build/dist/dsh-capabilities/types.d.ts +1 -1
  427. package/data/build/dist/dsh-capabilities/types.d.ts.map +1 -1
  428. package/data/build/dist/dsh-capabilities/types.js.map +1 -1
  429. package/data/build/dist/host/avatar/catalog.d.ts +21 -0
  430. package/data/build/dist/host/avatar/catalog.d.ts.map +1 -0
  431. package/data/build/dist/host/avatar/catalog.js +123 -0
  432. package/data/build/dist/host/avatar/catalog.js.map +1 -0
  433. package/data/build/dist/host/avatar/engine.d.ts +42 -0
  434. package/data/build/dist/host/avatar/engine.d.ts.map +1 -0
  435. package/data/build/dist/host/avatar/engine.js +167 -0
  436. package/data/build/dist/host/avatar/engine.js.map +1 -0
  437. package/data/build/dist/host/avatar/materials.d.ts +28 -0
  438. package/data/build/dist/host/avatar/materials.d.ts.map +1 -0
  439. package/data/build/dist/host/avatar/materials.js +183 -0
  440. package/data/build/dist/host/avatar/materials.js.map +1 -0
  441. package/data/build/dist/host/avatar/packages.d.ts +34 -0
  442. package/data/build/dist/host/avatar/packages.d.ts.map +1 -0
  443. package/data/build/dist/host/avatar/packages.js +200 -0
  444. package/data/build/dist/host/avatar/packages.js.map +1 -0
  445. package/data/build/dist/host/avatar/registry.d.ts +12 -0
  446. package/data/build/dist/host/avatar/registry.d.ts.map +1 -0
  447. package/data/build/dist/host/avatar/registry.js +22 -0
  448. package/data/build/dist/host/avatar/registry.js.map +1 -0
  449. package/data/build/dist/host/avatar/remote.d.ts +18 -0
  450. package/data/build/dist/host/avatar/remote.d.ts.map +1 -0
  451. package/data/build/dist/host/avatar/remote.js +103 -0
  452. package/data/build/dist/host/avatar/remote.js.map +1 -0
  453. package/data/build/dist/host/avatar/sources.d.ts +11 -0
  454. package/data/build/dist/host/avatar/sources.d.ts.map +1 -0
  455. package/data/build/dist/host/avatar/sources.js +78 -0
  456. package/data/build/dist/host/avatar/sources.js.map +1 -0
  457. package/data/build/dist/host/avatar/temporary-previews.d.ts +26 -0
  458. package/data/build/dist/host/avatar/temporary-previews.d.ts.map +1 -0
  459. package/data/build/dist/host/avatar/temporary-previews.js +139 -0
  460. package/data/build/dist/host/avatar/temporary-previews.js.map +1 -0
  461. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +18 -1
  462. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  463. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +26 -8
  464. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  465. package/data/build/dist/host/cli-adapters/attachment-utils.d.ts +16 -5
  466. package/data/build/dist/host/cli-adapters/attachment-utils.d.ts.map +1 -1
  467. package/data/build/dist/host/cli-adapters/attachment-utils.js +152 -42
  468. package/data/build/dist/host/cli-adapters/attachment-utils.js.map +1 -1
  469. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +14 -8
  470. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  471. package/data/build/dist/host/cli-adapters/claude-driver.js +101 -76
  472. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  473. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  474. package/data/build/dist/host/cli-adapters/codex-driver.js +84 -9
  475. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  476. package/data/build/dist/host/cli-adapters/command-code-acp-loader.d.ts +23 -0
  477. package/data/build/dist/host/cli-adapters/command-code-acp-loader.d.ts.map +1 -0
  478. package/data/build/dist/host/cli-adapters/command-code-acp-loader.js +39 -0
  479. package/data/build/dist/host/cli-adapters/command-code-acp-loader.js.map +1 -0
  480. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts +17 -6
  481. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  482. package/data/build/dist/host/cli-adapters/command-code-driver.js +430 -20
  483. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  484. package/data/build/dist/host/cli-adapters/command-code-subscription.d.ts +1 -1
  485. package/data/build/dist/host/cli-adapters/command-code-subscription.d.ts.map +1 -1
  486. package/data/build/dist/host/cli-adapters/command-code-subscription.js +7 -4
  487. package/data/build/dist/host/cli-adapters/command-code-subscription.js.map +1 -1
  488. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  489. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +28 -0
  490. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  491. package/data/build/dist/host/cli-adapters/dsh-tool-history.d.ts.map +1 -1
  492. package/data/build/dist/host/cli-adapters/dsh-tool-history.js +23 -1
  493. package/data/build/dist/host/cli-adapters/dsh-tool-history.js.map +1 -1
  494. package/data/build/dist/host/cli-adapters/feature.js +1 -1
  495. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  496. package/data/build/dist/host/cli-adapters/grok-driver.d.ts +4 -2
  497. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  498. package/data/build/dist/host/cli-adapters/grok-driver.js +208 -9
  499. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  500. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts +2 -0
  501. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
  502. package/data/build/dist/host/cli-adapters/json-rpc-process.js +8 -3
  503. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
  504. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts +4 -0
  505. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
  506. package/data/build/dist/host/cli-adapters/kimi-driver.js +11 -4
  507. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
  508. package/data/build/dist/host/cli-adapters/mcode-driver.js +2 -2
  509. package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -1
  510. package/data/build/dist/host/cli-adapters/new-api-subscription.d.ts.map +1 -1
  511. package/data/build/dist/host/cli-adapters/new-api-subscription.js +11 -58
  512. package/data/build/dist/host/cli-adapters/new-api-subscription.js.map +1 -1
  513. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +5 -2
  514. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  515. package/data/build/dist/host/cli-adapters/opencode-driver.js +136 -18
  516. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  517. package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
  518. package/data/build/dist/host/cli-adapters/pi-driver.js +2 -1
  519. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  520. package/data/build/dist/host/cli-adapters/process-utils.d.ts +10 -0
  521. package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -1
  522. package/data/build/dist/host/cli-adapters/process-utils.js +20 -0
  523. package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -1
  524. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +3 -0
  525. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
  526. package/data/build/dist/host/cli-adapters/provider-subscription.js +42 -8
  527. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
  528. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  529. package/data/build/dist/host/cli-adapters/registry.js +5 -3
  530. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  531. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts.map +1 -1
  532. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js +2 -9
  533. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js.map +1 -1
  534. package/data/build/dist/host/cli-adapters/skill-filesystem.d.ts +25 -0
  535. package/data/build/dist/host/cli-adapters/skill-filesystem.d.ts.map +1 -0
  536. package/data/build/dist/host/cli-adapters/skill-filesystem.js +161 -0
  537. package/data/build/dist/host/cli-adapters/skill-filesystem.js.map +1 -0
  538. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +1 -0
  539. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  540. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +4 -0
  541. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  542. package/data/build/dist/host/cli-adapters/zcode-driver.d.ts +8 -2
  543. package/data/build/dist/host/cli-adapters/zcode-driver.d.ts.map +1 -1
  544. package/data/build/dist/host/cli-adapters/zcode-driver.js +166 -55
  545. package/data/build/dist/host/cli-adapters/zcode-driver.js.map +1 -1
  546. package/data/build/dist/host/cli-adapters/zcode-interactions.d.ts +18 -0
  547. package/data/build/dist/host/cli-adapters/zcode-interactions.d.ts.map +1 -0
  548. package/data/build/dist/host/cli-adapters/zcode-interactions.js +90 -0
  549. package/data/build/dist/host/cli-adapters/zcode-interactions.js.map +1 -0
  550. package/data/build/dist/host/cli-adapters/zcode-provider-config.d.ts +26 -0
  551. package/data/build/dist/host/cli-adapters/zcode-provider-config.d.ts.map +1 -0
  552. package/data/build/dist/host/cli-adapters/zcode-provider-config.js +102 -0
  553. package/data/build/dist/host/cli-adapters/zcode-provider-config.js.map +1 -0
  554. package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts +2 -7
  555. package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts.map +1 -1
  556. package/data/build/dist/host/cli-adapters/zcode-subscription.js.map +1 -1
  557. package/data/build/dist/host/cli-adapters/zcode-telemetry.d.ts +17 -0
  558. package/data/build/dist/host/cli-adapters/zcode-telemetry.d.ts.map +1 -0
  559. package/data/build/dist/host/cli-adapters/zcode-telemetry.js +124 -0
  560. package/data/build/dist/host/cli-adapters/zcode-telemetry.js.map +1 -0
  561. package/data/build/dist/host/cli-bridge/injections.d.ts +2 -9
  562. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
  563. package/data/build/dist/host/cli-bridge/injections.js +7 -17
  564. package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
  565. package/data/build/dist/host/desktop-assistant/controller.d.ts +44 -0
  566. package/data/build/dist/host/desktop-assistant/controller.d.ts.map +1 -0
  567. package/data/build/dist/host/desktop-assistant/controller.js +150 -0
  568. package/data/build/dist/host/desktop-assistant/controller.js.map +1 -0
  569. package/data/build/dist/host/desktop-assistant/feature.d.ts +9 -0
  570. package/data/build/dist/host/desktop-assistant/feature.d.ts.map +1 -0
  571. package/data/build/dist/host/desktop-assistant/feature.js +102 -0
  572. package/data/build/dist/host/desktop-assistant/feature.js.map +1 -0
  573. package/data/build/dist/host/desktop-assistant/launcher.d.ts +5 -0
  574. package/data/build/dist/host/desktop-assistant/launcher.d.ts.map +1 -0
  575. package/data/build/dist/host/desktop-assistant/launcher.js +84 -0
  576. package/data/build/dist/host/desktop-assistant/launcher.js.map +1 -0
  577. package/data/build/dist/host/desktop-assistant/mac-agent.d.ts +5 -0
  578. package/data/build/dist/host/desktop-assistant/mac-agent.d.ts.map +1 -0
  579. package/data/build/dist/host/desktop-assistant/mac-agent.js +122 -0
  580. package/data/build/dist/host/desktop-assistant/mac-agent.js.map +1 -0
  581. package/data/build/dist/host/desktop-assistant/process.d.ts +4 -0
  582. package/data/build/dist/host/desktop-assistant/process.d.ts.map +1 -0
  583. package/data/build/dist/host/desktop-assistant/process.js +25 -0
  584. package/data/build/dist/host/desktop-assistant/process.js.map +1 -0
  585. package/data/build/dist/host/desktop-assistant/server.d.ts +12 -0
  586. package/data/build/dist/host/desktop-assistant/server.d.ts.map +1 -0
  587. package/data/build/dist/host/desktop-assistant/server.js +74 -0
  588. package/data/build/dist/host/desktop-assistant/server.js.map +1 -0
  589. package/data/build/dist/host/desktop-assistant/win-agent.d.ts +2 -0
  590. package/data/build/dist/host/desktop-assistant/win-agent.d.ts.map +1 -0
  591. package/data/build/dist/host/desktop-assistant/win-agent.js +197 -0
  592. package/data/build/dist/host/desktop-assistant/win-agent.js.map +1 -0
  593. package/data/build/dist/host/features/assistant-avatar-assets.d.ts +3 -0
  594. package/data/build/dist/host/features/assistant-avatar-assets.d.ts.map +1 -0
  595. package/data/build/dist/host/features/assistant-avatar-assets.js +3 -0
  596. package/data/build/dist/host/features/assistant-avatar-assets.js.map +1 -0
  597. package/data/build/dist/host/features/assistant-avatar-basics.d.ts +3 -0
  598. package/data/build/dist/host/features/assistant-avatar-basics.d.ts.map +1 -0
  599. package/data/build/dist/host/features/assistant-avatar-basics.js +34 -0
  600. package/data/build/dist/host/features/assistant-avatar-basics.js.map +1 -0
  601. package/data/build/dist/host/features/assistant-avatar-legacy-assets.d.ts +6 -0
  602. package/data/build/dist/host/features/assistant-avatar-legacy-assets.d.ts.map +1 -0
  603. package/data/build/dist/host/features/assistant-avatar-legacy-assets.js +146 -0
  604. package/data/build/dist/host/features/assistant-avatar-legacy-assets.js.map +1 -0
  605. package/data/build/dist/host/features/assistant-avatar-runtime.d.ts +20 -0
  606. package/data/build/dist/host/features/assistant-avatar-runtime.d.ts.map +1 -0
  607. package/data/build/dist/host/features/assistant-avatar-runtime.js +235 -0
  608. package/data/build/dist/host/features/assistant-avatar-runtime.js.map +1 -0
  609. package/data/build/dist/host/features/assistant-conversation-storage.d.ts +8 -0
  610. package/data/build/dist/host/features/assistant-conversation-storage.d.ts.map +1 -0
  611. package/data/build/dist/host/features/assistant-conversation-storage.js +38 -0
  612. package/data/build/dist/host/features/assistant-conversation-storage.js.map +1 -0
  613. package/data/build/dist/host/features/assistant-conversation.d.ts +57 -0
  614. package/data/build/dist/host/features/assistant-conversation.d.ts.map +1 -0
  615. package/data/build/dist/host/features/assistant-conversation.js +364 -0
  616. package/data/build/dist/host/features/assistant-conversation.js.map +1 -0
  617. package/data/build/dist/host/features/assistant-dispatch.d.ts +2 -2
  618. package/data/build/dist/host/features/assistant-dispatch.d.ts.map +1 -1
  619. package/data/build/dist/host/features/assistant-dispatch.js +4 -3
  620. package/data/build/dist/host/features/assistant-dispatch.js.map +1 -1
  621. package/data/build/dist/host/features/assistant-index-analysis.d.ts +49 -0
  622. package/data/build/dist/host/features/assistant-index-analysis.d.ts.map +1 -0
  623. package/data/build/dist/host/features/assistant-index-analysis.js +255 -0
  624. package/data/build/dist/host/features/assistant-index-analysis.js.map +1 -0
  625. package/data/build/dist/host/features/assistant-index-journal.d.ts +20 -0
  626. package/data/build/dist/host/features/assistant-index-journal.d.ts.map +1 -0
  627. package/data/build/dist/host/features/assistant-index-journal.js +40 -0
  628. package/data/build/dist/host/features/assistant-index-journal.js.map +1 -0
  629. package/data/build/dist/host/features/assistant-index-retry.d.ts +12 -0
  630. package/data/build/dist/host/features/assistant-index-retry.d.ts.map +1 -0
  631. package/data/build/dist/host/features/assistant-index-retry.js +54 -0
  632. package/data/build/dist/host/features/assistant-index-retry.js.map +1 -0
  633. package/data/build/dist/host/features/assistant-index-updates.d.ts +40 -0
  634. package/data/build/dist/host/features/assistant-index-updates.d.ts.map +1 -0
  635. package/data/build/dist/host/features/assistant-index-updates.js +183 -0
  636. package/data/build/dist/host/features/assistant-index-updates.js.map +1 -0
  637. package/data/build/dist/host/features/assistant-lifecycle-settings.d.ts +5 -0
  638. package/data/build/dist/host/features/assistant-lifecycle-settings.d.ts.map +1 -0
  639. package/data/build/dist/host/features/assistant-lifecycle-settings.js +72 -0
  640. package/data/build/dist/host/features/assistant-lifecycle-settings.js.map +1 -0
  641. package/data/build/dist/host/features/assistant-management-tools.d.ts +34 -0
  642. package/data/build/dist/host/features/assistant-management-tools.d.ts.map +1 -0
  643. package/data/build/dist/host/features/assistant-management-tools.js +69 -0
  644. package/data/build/dist/host/features/assistant-management-tools.js.map +1 -0
  645. package/data/build/dist/host/features/assistant-prompts.d.ts +6 -0
  646. package/data/build/dist/host/features/assistant-prompts.d.ts.map +1 -0
  647. package/data/build/dist/host/features/assistant-prompts.js +62 -0
  648. package/data/build/dist/host/features/assistant-prompts.js.map +1 -0
  649. package/data/build/dist/host/features/assistant-session-index.d.ts +6 -1
  650. package/data/build/dist/host/features/assistant-session-index.d.ts.map +1 -1
  651. package/data/build/dist/host/features/assistant-session-index.js +11 -12
  652. package/data/build/dist/host/features/assistant-session-index.js.map +1 -1
  653. package/data/build/dist/host/features/assistant-structured-index.d.ts +21 -0
  654. package/data/build/dist/host/features/assistant-structured-index.d.ts.map +1 -0
  655. package/data/build/dist/host/features/assistant-structured-index.js +138 -0
  656. package/data/build/dist/host/features/assistant-structured-index.js.map +1 -0
  657. package/data/build/dist/host/features/assistant-summary.d.ts.map +1 -1
  658. package/data/build/dist/host/features/assistant-summary.js +7 -1
  659. package/data/build/dist/host/features/assistant-summary.js.map +1 -1
  660. package/data/build/dist/host/features/assistant-text-chat.d.ts +29 -0
  661. package/data/build/dist/host/features/assistant-text-chat.d.ts.map +1 -0
  662. package/data/build/dist/host/features/assistant-text-chat.js +195 -0
  663. package/data/build/dist/host/features/assistant-text-chat.js.map +1 -0
  664. package/data/build/dist/host/features/assistant-tts-service.d.ts +47 -0
  665. package/data/build/dist/host/features/assistant-tts-service.d.ts.map +1 -0
  666. package/data/build/dist/host/features/assistant-tts-service.js +507 -0
  667. package/data/build/dist/host/features/assistant-tts-service.js.map +1 -0
  668. package/data/build/dist/host/features/assistant-voice-chat.d.ts +35 -0
  669. package/data/build/dist/host/features/assistant-voice-chat.d.ts.map +1 -0
  670. package/data/build/dist/host/features/assistant-voice-chat.js +133 -0
  671. package/data/build/dist/host/features/assistant-voice-chat.js.map +1 -0
  672. package/data/build/dist/host/features/assistant-voice-hotwords.d.ts +33 -0
  673. package/data/build/dist/host/features/assistant-voice-hotwords.d.ts.map +1 -0
  674. package/data/build/dist/host/features/assistant-voice-hotwords.js +114 -0
  675. package/data/build/dist/host/features/assistant-voice-hotwords.js.map +1 -0
  676. package/data/build/dist/host/features/assistant-voice-initialization.d.ts +26 -0
  677. package/data/build/dist/host/features/assistant-voice-initialization.d.ts.map +1 -0
  678. package/data/build/dist/host/features/assistant-voice-initialization.js +68 -0
  679. package/data/build/dist/host/features/assistant-voice-initialization.js.map +1 -0
  680. package/data/build/dist/host/features/assistant-voice-sources.d.ts +13 -0
  681. package/data/build/dist/host/features/assistant-voice-sources.d.ts.map +1 -0
  682. package/data/build/dist/host/features/assistant-voice-sources.js +72 -0
  683. package/data/build/dist/host/features/assistant-voice-sources.js.map +1 -0
  684. package/data/build/dist/host/features/assistant-voice-stream.d.ts +10 -0
  685. package/data/build/dist/host/features/assistant-voice-stream.d.ts.map +1 -1
  686. package/data/build/dist/host/features/assistant-voice-stream.js +208 -5
  687. package/data/build/dist/host/features/assistant-voice-stream.js.map +1 -1
  688. package/data/build/dist/host/features/global-voice-rpc.d.ts +8 -1
  689. package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -1
  690. package/data/build/dist/host/features/global-voice-rpc.js +1055 -153
  691. package/data/build/dist/host/features/global-voice-rpc.js.map +1 -1
  692. package/data/build/dist/host/features/index.d.ts.map +1 -1
  693. package/data/build/dist/host/features/index.js +4 -0
  694. package/data/build/dist/host/features/index.js.map +1 -1
  695. package/data/build/dist/host/features/moss-tts-worker.d.ts +32 -0
  696. package/data/build/dist/host/features/moss-tts-worker.d.ts.map +1 -0
  697. package/data/build/dist/host/features/moss-tts-worker.js +216 -0
  698. package/data/build/dist/host/features/moss-tts-worker.js.map +1 -0
  699. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  700. package/data/build/dist/host/features/peer-host.js +38 -7
  701. package/data/build/dist/host/features/peer-host.js.map +1 -1
  702. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts +11 -0
  703. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts.map +1 -1
  704. package/data/build/dist/host/features/sherpa-voice-runtime.js +72 -17
  705. package/data/build/dist/host/features/sherpa-voice-runtime.js.map +1 -1
  706. package/data/build/dist/host/features/types.d.ts +9 -1
  707. package/data/build/dist/host/features/types.d.ts.map +1 -1
  708. package/data/build/dist/host/features/voice-model-management.d.ts +22 -0
  709. package/data/build/dist/host/features/voice-model-management.d.ts.map +1 -0
  710. package/data/build/dist/host/features/voice-model-management.js +178 -0
  711. package/data/build/dist/host/features/voice-model-management.js.map +1 -0
  712. package/data/build/dist/host/features/voice-model-probe.d.ts +8 -0
  713. package/data/build/dist/host/features/voice-model-probe.d.ts.map +1 -0
  714. package/data/build/dist/host/features/voice-model-probe.js +76 -0
  715. package/data/build/dist/host/features/voice-model-probe.js.map +1 -0
  716. package/data/build/dist/host/features/voice-model-setup.d.ts +5 -2
  717. package/data/build/dist/host/features/voice-model-setup.d.ts.map +1 -1
  718. package/data/build/dist/host/features/voice-model-setup.js +40 -13
  719. package/data/build/dist/host/features/voice-model-setup.js.map +1 -1
  720. package/data/build/dist/host/features/voice-process-environment.d.ts +3 -0
  721. package/data/build/dist/host/features/voice-process-environment.d.ts.map +1 -0
  722. package/data/build/dist/host/features/voice-process-environment.js +16 -0
  723. package/data/build/dist/host/features/voice-process-environment.js.map +1 -0
  724. package/data/build/dist/host/features/voice-python-runtime.d.ts +21 -0
  725. package/data/build/dist/host/features/voice-python-runtime.d.ts.map +1 -0
  726. package/data/build/dist/host/features/voice-python-runtime.js +189 -0
  727. package/data/build/dist/host/features/voice-python-runtime.js.map +1 -0
  728. package/data/build/dist/host/index-injection.d.ts.map +1 -1
  729. package/data/build/dist/host/index-injection.js +5 -1
  730. package/data/build/dist/host/index-injection.js.map +1 -1
  731. package/data/build/dist/host/index.d.ts +5 -0
  732. package/data/build/dist/host/index.d.ts.map +1 -1
  733. package/data/build/dist/host/index.js +33 -12
  734. package/data/build/dist/host/index.js.map +1 -1
  735. package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -1
  736. package/data/build/dist/host/lan-access-dsh.js +2 -1
  737. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  738. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts +1 -0
  739. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts.map +1 -1
  740. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js +1 -0
  741. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js.map +1 -1
  742. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +2 -0
  743. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -1
  744. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +5 -0
  745. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
  746. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts.map +1 -1
  747. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +15 -1
  748. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
  749. package/data/build/dist/host/rpc.d.ts.map +1 -1
  750. package/data/build/dist/host/rpc.js +50 -4
  751. package/data/build/dist/host/rpc.js.map +1 -1
  752. package/data/build/dist/host/settings.d.ts +2 -1
  753. package/data/build/dist/host/settings.d.ts.map +1 -1
  754. package/data/build/dist/host/settings.js +77 -13
  755. package/data/build/dist/host/settings.js.map +1 -1
  756. package/data/build/dist/host/stage0-dev-hmr.d.ts +6 -0
  757. package/data/build/dist/host/stage0-dev-hmr.d.ts.map +1 -0
  758. package/data/build/dist/host/stage0-dev-hmr.js +20 -0
  759. package/data/build/dist/host/stage0-dev-hmr.js.map +1 -0
  760. package/data/build/dist/host/tar-archive.d.ts +8 -0
  761. package/data/build/dist/host/tar-archive.d.ts.map +1 -0
  762. package/data/build/dist/host/tar-archive.js +17 -0
  763. package/data/build/dist/host/tar-archive.js.map +1 -0
  764. package/data/build/dist/host/voice-diagnostics.d.ts +34 -0
  765. package/data/build/dist/host/voice-diagnostics.d.ts.map +1 -0
  766. package/data/build/dist/host/voice-diagnostics.js +124 -0
  767. package/data/build/dist/host/voice-diagnostics.js.map +1 -0
  768. package/data/build/dist/shared/assistant-attachments.d.ts +27 -0
  769. package/data/build/dist/shared/assistant-attachments.d.ts.map +1 -0
  770. package/data/build/dist/shared/assistant-attachments.js +45 -0
  771. package/data/build/dist/shared/assistant-attachments.js.map +1 -0
  772. package/data/build/dist/shared/assistant-avatar-adapters.d.ts +18 -0
  773. package/data/build/dist/shared/assistant-avatar-adapters.d.ts.map +1 -0
  774. package/data/build/dist/shared/assistant-avatar-adapters.js +119 -0
  775. package/data/build/dist/shared/assistant-avatar-adapters.js.map +1 -0
  776. package/data/build/dist/shared/assistant-avatar-catalog.d.ts +37 -0
  777. package/data/build/dist/shared/assistant-avatar-catalog.d.ts.map +1 -0
  778. package/data/build/dist/shared/assistant-avatar-catalog.js +21 -0
  779. package/data/build/dist/shared/assistant-avatar-catalog.js.map +1 -0
  780. package/data/build/dist/shared/assistant-avatar-engine.d.ts +31 -0
  781. package/data/build/dist/shared/assistant-avatar-engine.d.ts.map +1 -0
  782. package/data/build/dist/shared/assistant-avatar-engine.js +28 -0
  783. package/data/build/dist/shared/assistant-avatar-engine.js.map +1 -0
  784. package/data/build/dist/shared/assistant-avatar-installation.d.ts +17 -0
  785. package/data/build/dist/shared/assistant-avatar-installation.d.ts.map +1 -0
  786. package/data/build/dist/shared/assistant-avatar-installation.js +7 -0
  787. package/data/build/dist/shared/assistant-avatar-installation.js.map +1 -0
  788. package/data/build/dist/shared/assistant-avatar-legacy-resources.d.ts +6 -0
  789. package/data/build/dist/shared/assistant-avatar-legacy-resources.d.ts.map +1 -0
  790. package/data/build/dist/shared/assistant-avatar-legacy-resources.js +20 -0
  791. package/data/build/dist/shared/assistant-avatar-legacy-resources.js.map +1 -0
  792. package/data/build/dist/shared/assistant-avatar-legacy.d.ts +15 -0
  793. package/data/build/dist/shared/assistant-avatar-legacy.d.ts.map +1 -0
  794. package/data/build/dist/shared/assistant-avatar-legacy.js +34 -0
  795. package/data/build/dist/shared/assistant-avatar-legacy.js.map +1 -0
  796. package/data/build/dist/shared/assistant-avatar-presets.d.ts +3 -0
  797. package/data/build/dist/shared/assistant-avatar-presets.d.ts.map +1 -0
  798. package/data/build/dist/shared/assistant-avatar-presets.js +3 -0
  799. package/data/build/dist/shared/assistant-avatar-presets.js.map +1 -0
  800. package/data/build/dist/shared/assistant-avatar-registration.d.ts +16 -0
  801. package/data/build/dist/shared/assistant-avatar-registration.d.ts.map +1 -0
  802. package/data/build/dist/shared/assistant-avatar-registration.js +33 -0
  803. package/data/build/dist/shared/assistant-avatar-registration.js.map +1 -0
  804. package/data/build/dist/shared/assistant-avatar-resources.d.ts +26 -0
  805. package/data/build/dist/shared/assistant-avatar-resources.d.ts.map +1 -0
  806. package/data/build/dist/shared/assistant-avatar-resources.js +4 -0
  807. package/data/build/dist/shared/assistant-avatar-resources.js.map +1 -0
  808. package/data/build/dist/shared/assistant-avatar.d.ts +103 -0
  809. package/data/build/dist/shared/assistant-avatar.d.ts.map +1 -0
  810. package/data/build/dist/shared/assistant-avatar.js +240 -0
  811. package/data/build/dist/shared/assistant-avatar.js.map +1 -0
  812. package/data/build/dist/shared/assistant-commands.d.ts +3 -0
  813. package/data/build/dist/shared/assistant-commands.d.ts.map +1 -0
  814. package/data/build/dist/shared/assistant-commands.js +3 -0
  815. package/data/build/dist/shared/assistant-commands.js.map +1 -0
  816. package/data/build/dist/shared/assistant-lifecycle.d.ts +17 -0
  817. package/data/build/dist/shared/assistant-lifecycle.d.ts.map +1 -0
  818. package/data/build/dist/shared/assistant-lifecycle.js +45 -0
  819. package/data/build/dist/shared/assistant-lifecycle.js.map +1 -0
  820. package/data/build/dist/shared/assistant-message-timeline.d.ts +13 -0
  821. package/data/build/dist/shared/assistant-message-timeline.d.ts.map +1 -0
  822. package/data/build/dist/shared/assistant-message-timeline.js +22 -0
  823. package/data/build/dist/shared/assistant-message-timeline.js.map +1 -0
  824. package/data/build/dist/shared/assistant-prompts.d.ts +12 -0
  825. package/data/build/dist/shared/assistant-prompts.d.ts.map +1 -0
  826. package/data/build/dist/shared/assistant-prompts.js +32 -0
  827. package/data/build/dist/shared/assistant-prompts.js.map +1 -0
  828. package/data/build/dist/shared/assistant-tts.d.ts +93 -0
  829. package/data/build/dist/shared/assistant-tts.d.ts.map +1 -0
  830. package/data/build/dist/shared/assistant-tts.js +80 -0
  831. package/data/build/dist/shared/assistant-tts.js.map +1 -0
  832. package/data/build/dist/shared/assistant-voice-sessions.d.ts +13 -0
  833. package/data/build/dist/shared/assistant-voice-sessions.d.ts.map +1 -0
  834. package/data/build/dist/shared/assistant-voice-sessions.js +16 -0
  835. package/data/build/dist/shared/assistant-voice-sessions.js.map +1 -0
  836. package/data/build/dist/shared/contracts/assistant.d.ts +206 -0
  837. package/data/build/dist/shared/contracts/assistant.d.ts.map +1 -1
  838. package/data/build/dist/shared/contracts/cli-adapter.d.ts +4 -0
  839. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  840. package/data/build/dist/shared/contracts/config.d.ts +23 -0
  841. package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
  842. package/data/build/dist/shared/contracts/config.js +2 -0
  843. package/data/build/dist/shared/contracts/config.js.map +1 -1
  844. package/data/build/dist/shared/contracts/peer-host.d.ts +2 -0
  845. package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -1
  846. package/data/build/dist/shared/contracts/peer-host.js.map +1 -1
  847. package/data/build/dist/shared/contracts/terminal-share.d.ts +27 -0
  848. package/data/build/dist/shared/contracts/terminal-share.d.ts.map +1 -0
  849. package/data/build/dist/shared/contracts/terminal-share.js +2 -0
  850. package/data/build/dist/shared/contracts/terminal-share.js.map +1 -0
  851. package/data/build/dist/shared/contracts/version.d.ts +1 -1
  852. package/data/build/dist/shared/contracts/version.js +1 -1
  853. package/data/build/dist/shared/contracts/voice-runtime.d.ts +15 -1
  854. package/data/build/dist/shared/contracts/voice-runtime.d.ts.map +1 -1
  855. package/data/build/dist/shared/contracts/voice-runtime.js.map +1 -1
  856. package/data/build/dist/shared/desktop-assistant.d.ts +35 -0
  857. package/data/build/dist/shared/desktop-assistant.d.ts.map +1 -0
  858. package/data/build/dist/shared/desktop-assistant.js +27 -0
  859. package/data/build/dist/shared/desktop-assistant.js.map +1 -0
  860. package/data/build/dist/shared/index.d.ts +16 -2
  861. package/data/build/dist/shared/index.d.ts.map +1 -1
  862. package/data/build/dist/shared/index.js +10 -0
  863. package/data/build/dist/shared/index.js.map +1 -1
  864. package/data/build/dist/shared/runtime-environment.d.ts +5 -0
  865. package/data/build/dist/shared/runtime-environment.d.ts.map +1 -0
  866. package/data/build/dist/shared/runtime-environment.js +7 -0
  867. package/data/build/dist/shared/runtime-environment.js.map +1 -0
  868. package/data/build/dist/shared/voice-diagnostics.d.ts +18 -0
  869. package/data/build/dist/shared/voice-diagnostics.d.ts.map +1 -0
  870. package/data/build/dist/shared/voice-diagnostics.js +57 -0
  871. package/data/build/dist/shared/voice-diagnostics.js.map +1 -0
  872. package/data/build/dist/shared/voice-initialization.d.ts +22 -0
  873. package/data/build/dist/shared/voice-initialization.d.ts.map +1 -0
  874. package/data/build/dist/shared/voice-initialization.js +4 -0
  875. package/data/build/dist/shared/voice-initialization.js.map +1 -0
  876. package/data/build/dist/shared/voice-models.d.ts +43 -0
  877. package/data/build/dist/shared/voice-models.d.ts.map +1 -1
  878. package/data/build/dist/shared/voice-models.js +23 -8
  879. package/data/build/dist/shared/voice-models.js.map +1 -1
  880. package/data/build/dist/shared/voice-stream.d.ts +12 -1
  881. package/data/build/dist/shared/voice-stream.d.ts.map +1 -1
  882. package/data/build/dist/shared/voice-stream.js +8 -1
  883. package/data/build/dist/shared/voice-stream.js.map +1 -1
  884. package/package.json +21 -3
  885. package/profile/README.md +2 -2
  886. package/profile/package.json +2 -2
  887. package/profile/version.json +1 -1
  888. package/version.json +1 -1
@@ -1,7 +1,14 @@
1
1
  import { CODINGNS_RPC_CHANNEL } from '../shared/contracts/transport.js';
2
- import { encodeVoiceStreamMessage, encodeVoiceStreamOpen } from '../shared/voice-stream.js';
2
+ import { ASSISTANT_VOICE_EVENTS_PATH, ASSISTANT_VOICE_STREAM_PATH } from '../shared/voice-stream.js';
3
3
  import { BrowserVoiceDeviceManager } from './voice-device-manager.js';
4
4
  import { ClientVoiceCapture } from './voice-capture.js';
5
+ import { createVoiceHttpError, VoiceStreamUploader } from './voice-stream-uploader.js';
6
+ import { MossVoiceOutput } from './moss-voice-output.js';
7
+ import { StreamingSentenceQueue } from './streaming-sentence-queue.js';
8
+ import { readAssistantTtsParameters, readAssistantTtsSettings } from '../shared/assistant-tts.js';
9
+ import { ClientVoiceDiagnostics } from './voice-diagnostics.js';
10
+ import { voiceDiagnosticError } from '../shared/voice-diagnostics.js';
11
+ import { VoiceChatUpdates } from './voice-chat-updates.js';
5
12
  /** 浏览器侧 Sherpa 数据面:设备和权限在 Client,识别在 Host。 */
6
13
  export class ClientSherpaVoiceAdapter {
7
14
  listeners = new Set();
@@ -11,12 +18,24 @@ export class ClientSherpaVoiceAdapter {
11
18
  capture;
12
19
  uploader;
13
20
  responseAbort;
21
+ leaseRequest;
22
+ stopOperation;
14
23
  active = false;
15
24
  hostLeaseActive = false;
16
25
  epoch = 0;
17
26
  configuredOwner;
18
27
  selectedInputDeviceId;
19
28
  selectedOutputDeviceId;
29
+ diagnostics;
30
+ trace = (event, fields) => this.diagnostics?.record(event, fields);
31
+ output = new MossVoiceOutput({ trace: this.trace, traceContext: () => ({ ownerId: this.configuredOwner, epoch: this.epoch, requestId: this.reply?.requestId }) });
32
+ reply;
33
+ chatStreaming = false;
34
+ clearOperation;
35
+ settleSpeech;
36
+ replySequence = 0;
37
+ microphoneMuted = false;
38
+ speakerMuted = false;
20
39
  constructor(options) {
21
40
  this.options = options;
22
41
  this.services = options.services;
@@ -33,13 +52,32 @@ export class ClientSherpaVoiceAdapter {
33
52
  get capabilities() {
34
53
  const secure = this.devices.snapshot().secureContext;
35
54
  const supported = secure && typeof globalThis.fetch === 'function' && typeof globalThis.ReadableStream === 'function';
36
- return { realtime: supported, wakeWord: false, streamingInput: supported, streamingOutput: false, bargeIn: supported, speechToText: supported, textToSpeech: typeof globalThis.speechSynthesis !== 'undefined' };
55
+ const moss = readAssistantTtsSettings(this.services.settings?.getSnapshot().value?.assistant.tts).backend === 'moss-onnx';
56
+ const output = moss ? typeof globalThis.AudioContext === 'function' : typeof globalThis.speechSynthesis !== 'undefined';
57
+ return { realtime: supported, wakeWord: false, streamingInput: supported, streamingOutput: moss && output, bargeIn: supported, speechToText: supported, textToSpeech: output };
37
58
  }
38
59
  get ownerId() { return this.active ? this.configuredOwner : undefined; }
39
60
  get configuredOwnerId() { return this.configuredOwner; }
40
61
  get inputDeviceId() { return this.selectedInputDeviceId; }
41
62
  get outputDeviceId() { return this.selectedOutputDeviceId; }
42
- get outputDeviceSupported() { return typeof globalThis.HTMLMediaElement?.prototype?.setSinkId === 'function'; }
63
+ get outputDeviceSupported() { return readAssistantTtsSettings(this.services.settings?.getSnapshot().value?.assistant.tts).backend === 'moss-onnx' && this.output.outputDeviceSupported; }
64
+ get isMicrophoneMuted() { return this.microphoneMuted; }
65
+ get isSpeakerMuted() { return this.speakerMuted; }
66
+ setMicrophoneMuted(muted) {
67
+ this.microphoneMuted = muted;
68
+ this.capture?.setMuted(muted);
69
+ if (muted)
70
+ this.emit({ type: 'partial', text: '', epoch: this.epoch });
71
+ }
72
+ setSpeakerMuted(muted) {
73
+ this.speakerMuted = muted;
74
+ this.output.setMuted(muted);
75
+ if (muted && readAssistantTtsSettings(this.services.settings?.getSnapshot().value?.assistant.tts).backend === 'browser') {
76
+ this.settleSpeech?.();
77
+ this.settleSpeech = undefined;
78
+ globalThis.speechSynthesis?.cancel();
79
+ }
80
+ }
43
81
  subscribe(listener) { this.listeners.add(listener); return () => this.listeners.delete(listener); }
44
82
  async enumerateInputDevices() { return (await this.devices.refresh()).inputs; }
45
83
  async enumerateOutputDevices() { return (await this.devices.refresh()).outputs; }
@@ -54,60 +92,117 @@ export class ClientSherpaVoiceAdapter {
54
92
  async selectOutputDevice(deviceId) {
55
93
  if (!this.outputDeviceSupported)
56
94
  throw new Error('当前浏览器不支持输出设备选择');
95
+ await this.output.setOutputDevice(deviceId);
57
96
  await this.devices.selectOutput(deviceId);
58
97
  this.selectedOutputDeviceId = this.devices.snapshot().selectedOutputId ?? undefined;
59
- await this.applyOutputDevice();
60
98
  }
61
99
  async start(ownerId) {
100
+ if (this.stopOperation !== undefined)
101
+ await this.stopOperation;
62
102
  if (this.active)
63
103
  return;
64
104
  this.configuredOwner = ownerId?.trim() || this.configuredOwner;
65
105
  if (this.configuredOwner === '')
66
106
  throw new Error('全局语音租约缺少 ownerId');
67
- const lease = await this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/start', { ownerId: this.configuredOwner });
68
- if (!lease.ok)
69
- throw new Error(lease.error.message);
70
- if (isRecord(lease.value) && lease.value.unavailable === true)
71
- throw new Error(typeof lease.value.message === 'string' ? lease.value.message : '本地 Sherpa 语音运行时不可用');
72
- this.hostLeaseActive = true;
73
- const snapshot = await this.devices.refresh();
74
- if (!snapshot.secureContext)
75
- throw new Error('当前页面不是安全上下文,请改用 HTTPS 或 localhost 后访问麦克风');
76
- this.epoch += 1;
77
- const epoch = this.epoch;
78
- const uploader = new VoiceStreamUploader();
79
107
  const abort = new AbortController();
80
- this.uploader = uploader;
108
+ const started = performance.now();
109
+ const callId = createClientId();
81
110
  this.responseAbort = abort;
82
111
  this.active = true;
83
- this.emit({ type: 'state', state: 'loading', epoch });
112
+ this.setMicrophoneMuted(false);
113
+ this.setSpeakerMuted(false);
84
114
  try {
85
- uploader.enqueue(encodeVoiceStreamOpen({ ownerId: this.configuredOwner, clientId: createClientId(), sampleRate: 16_000, channels: 1, encoding: 'pcm16le' }));
86
- const response = await globalThis.fetch(resolveVoiceStreamUrl(), {
87
- method: 'POST',
88
- body: uploader.stream,
115
+ if (readAssistantTtsSettings(this.services.settings?.getSnapshot().value?.assistant.tts).backend === 'moss-onnx') {
116
+ await this.output.prepare();
117
+ if (this.output.outputDeviceSupported && this.selectedOutputDeviceId !== undefined)
118
+ await this.output.setOutputDevice(this.selectedOutputDeviceId);
119
+ }
120
+ const leaseStarted = performance.now();
121
+ const leaseRequest = this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/start', { ownerId: this.configuredOwner, voiceSessionId: callId }, abort.signal);
122
+ this.leaseRequest = leaseRequest;
123
+ const lease = await leaseRequest.finally(() => { if (this.leaseRequest === leaseRequest)
124
+ this.leaseRequest = undefined; });
125
+ if (!lease.ok)
126
+ throw new Error(lease.error.message);
127
+ if (isRecord(lease.value) && lease.value.unavailable === true)
128
+ throw new Error(typeof lease.value.message === 'string' ? lease.value.message : '本地 Sherpa 语音运行时不可用');
129
+ if (abort.signal.aborted)
130
+ throw new Error('语音启动已取消');
131
+ this.hostLeaseActive = true;
132
+ // epoch 以 Host 租约为准,不能让刷新后的页面从 1 重新计数。
133
+ this.epoch = readEpoch(isRecord(lease.value) ? lease.value : {}, this.epoch + 1);
134
+ if (isRecord(lease.value) && lease.value.diagnosticsEnabled === true) {
135
+ this.diagnostics = new ClientVoiceDiagnostics(this.services, { ownerId: this.configuredOwner, callId });
136
+ this.trace('client.call.lease', { epoch: this.epoch, durationMs: performance.now() - leaseStarted });
137
+ }
138
+ this.emit({ type: 'state', state: 'loading', epoch: this.epoch });
139
+ const snapshot = await this.devices.refresh();
140
+ if (!snapshot.secureContext)
141
+ throw new Error('当前页面不是安全上下文,请改用 HTTPS 或 localhost 后访问麦克风');
142
+ if (abort.signal.aborted)
143
+ throw new Error('语音启动已取消');
144
+ const clientId = createClientId();
145
+ this.uploader = new VoiceStreamUploader({ url: resolveVoiceStreamUrl(ASSISTANT_VOICE_STREAM_PATH, { mode: 'frames' }), ownerId: this.configuredOwner, clientId, trace: this.trace, onError: (error) => this.failTransport(error, abort) });
146
+ const eventsStarted = performance.now();
147
+ const response = await globalThis.fetch(resolveVoiceStreamUrl(ASSISTANT_VOICE_EVENTS_PATH, { ownerId: this.configuredOwner, clientId }), {
148
+ method: 'GET',
89
149
  signal: abort.signal,
90
150
  credentials: 'same-origin',
91
- headers: { 'content-type': 'application/octet-stream', accept: 'application/x-ndjson' },
92
- ...{ duplex: 'half' },
151
+ headers: { accept: 'application/x-ndjson' },
93
152
  });
94
- if (!response.ok || response.body === null)
95
- throw new Error(`语音流连接失败(HTTP ${response.status})`);
96
- void this.readEvents(response.body, epoch);
97
- const capture = new ClientVoiceCapture({ devices: this.devices, targetSampleRate: 16_000, onFrame: (frame) => this.sendPcmFrame(frame, epoch), onEnded: (error) => this.emit({ type: 'error', code: 'voice_capture_ended', message: error.message, recoverable: true, epoch }) });
153
+ if (!response.ok)
154
+ throw await createVoiceHttpError(response, '语音流连接失败');
155
+ if (response.body === null)
156
+ throw new Error('语音事件连接缺少响应正文');
157
+ this.chatStreaming = response.headers.get('x-codingns-voice-chat-stream') === '1';
158
+ this.trace('client.events.connected', { durationMs: performance.now() - eventsStarted, status: response.status, streaming: this.chatStreaming });
159
+ void this.readEvents(response.body, abort);
160
+ const capture = new ClientVoiceCapture({ devices: this.devices, targetSampleRate: 16_000, trace: this.trace, onFrame: (frame) => { if (this.responseAbort === abort)
161
+ this.sendPcmFrame(frame, this.epoch); }, onEnded: (error) => this.failTransport(error, abort) });
98
162
  this.capture = capture;
99
163
  await capture.start();
100
- this.emit({ type: 'state', state: 'listening', epoch });
164
+ if (abort.signal.aborted) {
165
+ await capture.stop();
166
+ throw new Error('语音启动已取消');
167
+ }
168
+ this.emit({ type: 'state', state: 'listening', epoch: this.epoch });
169
+ this.trace('client.call.started', { epoch: this.epoch, durationMs: performance.now() - started });
101
170
  }
102
171
  catch (error) {
103
- await this.stop().catch(() => undefined);
172
+ this.trace('client.call.error', { durationMs: performance.now() - started, errorName: voiceDiagnosticError(error) });
173
+ if (this.responseAbort === abort)
174
+ await this.stop().catch(() => undefined);
104
175
  throw error;
105
176
  }
106
177
  }
107
178
  async stop() {
179
+ if (this.stopOperation !== undefined)
180
+ return this.stopOperation;
181
+ const operation = this.stopSession();
182
+ this.stopOperation = operation;
183
+ try {
184
+ await operation;
185
+ }
186
+ finally {
187
+ if (this.stopOperation === operation)
188
+ this.stopOperation = undefined;
189
+ }
190
+ }
191
+ async stopSession() {
108
192
  if (!this.active && this.capture === undefined && !this.hostLeaseActive)
109
193
  return;
194
+ const leaseRequest = this.leaseRequest;
195
+ const diagnostics = this.diagnostics;
196
+ const stopped = performance.now();
110
197
  this.active = false;
198
+ this.chatStreaming = false;
199
+ this.cancelReply();
200
+ this.uploader?.close();
201
+ this.uploader = undefined;
202
+ this.responseAbort?.abort();
203
+ this.responseAbort = undefined;
204
+ globalThis.speechSynthesis?.cancel();
205
+ this.output.dispose();
111
206
  let captureError;
112
207
  try {
113
208
  await this.capture?.stop();
@@ -117,102 +212,302 @@ export class ClientSherpaVoiceAdapter {
117
212
  captureError = error;
118
213
  }
119
214
  this.capture = undefined;
120
- this.uploader?.enqueue(encodeVoiceStreamMessage({ type: 'close', epoch: this.epoch }));
121
- this.uploader?.close();
122
- this.uploader = undefined;
123
- this.responseAbort?.abort();
124
- this.responseAbort = undefined;
215
+ // 用户在模型启动期间关闭窗口时,RPC 取消不一定能撤销 Host 已创建的租约。
216
+ // 等待该请求结算后再释放,避免迟到的 start 留下无人持有的实时识别器。
217
+ const pendingLease = await leaseRequest?.catch(() => undefined);
218
+ if (pendingLease?.ok && !(isRecord(pendingLease.value) && pendingLease.value.unavailable === true))
219
+ this.hostLeaseActive = true;
125
220
  if (this.hostLeaseActive) {
126
221
  this.hostLeaseActive = false;
127
222
  await this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/stop', { ownerId: this.configuredOwner }).catch(() => undefined);
128
223
  }
129
224
  this.epoch += 1;
130
225
  this.emit({ type: 'state', state: 'disabled', epoch: this.epoch });
226
+ diagnostics?.record('client.call.stopped', { epoch: this.epoch, durationMs: performance.now() - stopped });
227
+ diagnostics?.dispose();
228
+ if (this.diagnostics === diagnostics)
229
+ this.diagnostics = undefined;
131
230
  if (captureError !== undefined)
132
231
  throw captureError;
133
232
  }
134
233
  async interrupt() {
135
- this.epoch += 1;
136
- globalThis.speechSynthesis?.cancel();
137
- this.uploader?.enqueue(encodeVoiceStreamMessage({ type: 'interrupt', epoch: this.epoch }));
138
- await this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/interrupt', { ownerId: this.configuredOwner }).catch(() => undefined);
234
+ if (!this.active)
235
+ return;
236
+ this.cancelReply();
237
+ this.uploader?.clearPending();
238
+ // 只走一次控制 RPC,避免数据面与 RPC 各打断一次,导致双方 epoch 错位。
239
+ const result = await this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/interrupt', { ownerId: this.configuredOwner });
240
+ if (!result.ok)
241
+ throw new Error(result.error.message);
242
+ if (!this.active)
243
+ return;
244
+ this.epoch = readEpoch(isRecord(result.value) ? result.value : {}, this.epoch + 1);
139
245
  this.emit({ type: 'barge-in', epoch: this.epoch });
140
246
  }
141
247
  sendPcm(frame, epoch) { this.sendPcmFrame(frame, epoch); }
142
- async speak(text, epoch) {
143
- if (epoch !== this.epoch || text.trim() === '')
248
+ async speak(text, epoch, isCurrent = () => true, settleState = true) {
249
+ if (epoch !== this.epoch || text.trim() === '' || !isCurrent())
250
+ return;
251
+ const tts = readAssistantTtsSettings(this.services.settings?.getSnapshot().value?.assistant.tts);
252
+ const parameters = readAssistantTtsParameters(tts.parameters);
253
+ const reply = this.reply;
254
+ const onStart = () => {
255
+ if (epoch !== this.epoch || !isCurrent())
256
+ return;
257
+ if (reply !== undefined && !reply.playbackStarted) {
258
+ reply.playbackStarted = true;
259
+ this.trace('client.turn.first_playback_scheduled', { requestId: reply.requestId, epoch, firstPlaybackMs: performance.now() - reply.startedAt });
260
+ }
261
+ this.emit({ type: 'state', state: 'speaking', epoch });
262
+ };
263
+ if (tts.backend === 'moss-onnx') {
264
+ globalThis.speechSynthesis?.cancel();
265
+ // 完整试听等待播放结束;对话分段只等待合成结束,下一段可在播放期间准备。
266
+ const completed = await this.output[settleState ? 'speak' : 'append'](text.trim(), tts.selectedId, onStart, parameters);
267
+ if (settleState && completed && this.active && epoch === this.epoch && isCurrent())
268
+ this.emit({ type: 'state', state: 'listening', epoch });
269
+ return;
270
+ }
271
+ this.output.cancel();
272
+ if (this.speakerMuted)
144
273
  return;
145
274
  const synthesis = globalThis.speechSynthesis;
146
275
  if (synthesis === undefined || typeof globalThis.SpeechSynthesisUtterance !== 'function')
147
276
  throw new Error('当前浏览器不支持语音播报');
148
- synthesis.cancel();
149
- await new Promise((resolve) => {
277
+ this.cancelOutput();
278
+ await new Promise((resolve, reject) => {
279
+ this.settleSpeech = resolve;
150
280
  const utterance = new SpeechSynthesisUtterance(text.trim());
151
281
  utterance.lang = 'zh-CN';
282
+ utterance.rate = parameters.rate;
283
+ utterance.volume = parameters.volume;
284
+ utterance.onstart = onStart;
152
285
  utterance.onend = () => resolve();
153
- utterance.onerror = () => resolve();
286
+ utterance.onerror = (event) => { if (isCurrent())
287
+ reject(new Error(`浏览器语音播报失败:${event.error}`));
288
+ else
289
+ resolve(); };
154
290
  synthesis.speak(utterance);
155
291
  });
292
+ if (isCurrent())
293
+ this.settleSpeech = undefined;
294
+ if (settleState && this.active && epoch === this.epoch && isCurrent())
295
+ this.emit({ type: 'state', state: 'listening', epoch });
296
+ }
297
+ async clearConversation() {
298
+ this.cancelReply();
299
+ if (!this.active)
300
+ return;
301
+ const epoch = this.epoch;
302
+ const operation = this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/chat/clear', { ownerId: this.configuredOwner, epoch }).then((result) => {
303
+ if (!result.ok)
304
+ throw new Error(result.error.message);
305
+ if (this.active && this.epoch === epoch && this.reply === undefined)
306
+ this.emit({ type: 'state', state: 'listening', epoch });
307
+ });
308
+ this.clearOperation = operation;
309
+ try {
310
+ await operation;
311
+ }
312
+ finally {
313
+ if (this.clearOperation === operation)
314
+ this.clearOperation = undefined;
315
+ }
156
316
  }
157
317
  dispose() { void this.stop(); this.devices.dispose(); this.listeners.clear(); }
158
318
  sendPcmFrame(frame, epoch) {
159
319
  if (!this.active || this.uploader === undefined || epoch !== this.epoch)
160
320
  return;
161
- this.uploader.enqueue(encodeVoiceStreamMessage({ type: 'pcm', sequence: frame.sequence, sampleRate: frame.sampleRate, channels: 1, epoch, byteLength: frame.bytes.byteLength }));
162
- this.uploader.enqueue(frame.bytes);
321
+ this.uploader.enqueue(frame, epoch);
163
322
  }
164
- async readEvents(body, streamEpoch) {
323
+ async readEvents(body, abort) {
165
324
  const reader = body.getReader();
166
325
  const decoder = new TextDecoder();
167
326
  let text = '';
168
327
  try {
169
328
  while (true) {
170
329
  const next = await reader.read();
171
- if (next.done)
330
+ if (next.done) {
331
+ if (!abort.signal.aborted)
332
+ throw new Error('语音事件连接已断开,请重新开始实时对话');
172
333
  break;
334
+ }
173
335
  text += decoder.decode(next.value, { stream: true });
174
336
  let newline = text.indexOf('\n');
175
337
  while (newline >= 0) {
176
338
  const line = text.slice(0, newline).trim();
177
339
  text = text.slice(newline + 1);
178
- if (line !== '')
179
- await this.handleEvent(JSON.parse(line), streamEpoch);
340
+ if (line !== '' && this.responseAbort === abort)
341
+ this.handleEvent(JSON.parse(line));
180
342
  newline = text.indexOf('\n');
181
343
  }
182
344
  }
183
345
  }
184
346
  catch (error) {
185
- if (this.active)
186
- this.emit({ type: 'error', code: 'voice_stream_response_failed', message: error instanceof Error ? error.message : String(error), recoverable: true, epoch: streamEpoch });
347
+ if (!abort.signal.aborted)
348
+ this.failTransport(error instanceof Error ? error : new Error(String(error)), abort);
349
+ }
350
+ finally {
351
+ reader.releaseLock();
187
352
  }
188
353
  }
189
- async handleEvent(value, streamEpoch) {
190
- if (streamEpoch !== this.epoch || typeof value.type !== 'string')
354
+ handleEvent(value) {
355
+ const eventEpoch = readEpoch(value, this.epoch);
356
+ if (eventEpoch < this.epoch || typeof value.type !== 'string')
191
357
  return;
192
- if (value.type === 'state' && typeof value.state === 'string')
193
- this.emit({ type: 'state', state: value.state, epoch: readEpoch(value, streamEpoch) });
194
- else if (value.type === 'partial' && typeof value.text === 'string')
195
- this.emit({ type: 'partial', text: value.text, epoch: readEpoch(value, streamEpoch) });
358
+ if (value.type === 'chat') {
359
+ const reply = this.reply;
360
+ if (reply !== undefined && eventEpoch === reply.epoch && isVoiceChatRun(value.run) && value.run.requestId === reply.requestId) {
361
+ reply.updates.push(value.run);
362
+ this.trace('client.turn.stream_update', { requestId: reply.requestId, epoch: eventEpoch, state: value.run.state, textLength: value.run.text.length });
363
+ }
364
+ return;
365
+ }
366
+ if (eventEpoch > this.epoch || value.type === 'barge-in')
367
+ this.cancelReply();
368
+ this.epoch = eventEpoch;
369
+ this.trace('client.voice.event', { epoch: eventEpoch, state: value.type, textLength: typeof value.text === 'string' ? value.text.length : undefined });
370
+ if (value.type === 'state' && typeof value.state === 'string') {
371
+ // 识别器继续收音,等待回复时保留思考/播报状态。
372
+ if (this.reply === undefined || value.state !== 'listening')
373
+ this.emit({ type: 'state', state: value.state, epoch: eventEpoch });
374
+ }
375
+ else if (value.type === 'partial' && typeof value.text === 'string' && !this.microphoneMuted)
376
+ this.emit({ type: 'partial', text: value.text, epoch: eventEpoch });
196
377
  else if (value.type === 'final' && typeof value.text === 'string') {
197
- const eventEpoch = readEpoch(value, streamEpoch);
198
- this.emit({ type: 'final', text: value.text, epoch: eventEpoch });
199
- const result = await this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/text', { ownerId: this.configuredOwner, text: value.text, requestId: createClientId() });
200
- if (result.ok && isRecord(result.value) && typeof result.value.speechText === 'string')
201
- await this.speak(result.value.speechText, eventEpoch);
378
+ if (this.microphoneMuted)
379
+ return;
380
+ if (value.text.trim() === '')
381
+ return;
382
+ const requestId = createClientId();
383
+ this.emit({ type: 'final', text: value.text, epoch: eventEpoch, requestId });
384
+ // LLM 和播报在后台运行,下一句的 partial 继续实时显示。
385
+ void this.handleFinalText(value.text, eventEpoch, requestId);
202
386
  }
203
387
  else if (value.type === 'barge-in')
204
- this.emit({ type: 'barge-in', epoch: readEpoch(value, streamEpoch) });
388
+ this.emit({ type: 'barge-in', epoch: eventEpoch });
205
389
  else if (value.type === 'error')
206
- this.emit({ type: 'error', code: String(value.code ?? 'voice_stream_error'), message: String(value.message ?? value.code ?? ''), recoverable: value.recoverable !== false, epoch: readEpoch(value, streamEpoch) });
390
+ this.emit({ type: 'error', code: String(value.code ?? 'voice_stream_error'), message: String(value.message ?? value.code ?? ''), recoverable: value.recoverable !== false, epoch: eventEpoch });
207
391
  }
208
- async applyOutputDevice() {
209
- if (!this.outputDeviceSupported)
210
- return;
211
- for (const media of [...document.querySelectorAll('audio,video')]) {
212
- const sink = media.setSinkId;
213
- if (typeof sink === 'function')
214
- await sink.call(media, this.selectedOutputDeviceId ?? '');
392
+ async handleFinalText(text, epoch, requestId) {
393
+ this.cancelReply();
394
+ const reply = { requestId, epoch, abort: new AbortController(), startedAt: performance.now(), updates: new VoiceChatUpdates(), playbackStarted: false };
395
+ this.reply = reply;
396
+ const started = performance.now();
397
+ const fields = { requestId, epoch, textLength: text.length };
398
+ const diagnostics = this.diagnostics;
399
+ const trace = (event, metrics) => diagnostics?.record(event, { ...fields, ...metrics });
400
+ let polls = 0;
401
+ let firstText = false;
402
+ let firstSentence = false;
403
+ let outcome = 'cancelled';
404
+ trace('client.turn.start');
405
+ const isCurrent = () => this.active && this.epoch === epoch && this.reply === reply && !reply.abort.signal.aborted;
406
+ const sentences = new StreamingSentenceQueue(async (sentence) => {
407
+ if (!firstSentence) {
408
+ firstSentence = true;
409
+ trace('client.turn.first_sentence', { firstSentenceMs: performance.now() - started });
410
+ }
411
+ await this.speak(sentence, epoch, isCurrent, false);
412
+ }, isCurrent, Date.now, (event, metrics) => trace(`client.${event}`, metrics));
413
+ const payload = { ownerId: this.configuredOwner, epoch, requestId, sequence: ++this.replySequence };
414
+ try {
415
+ await this.clearOperation;
416
+ if (!isCurrent())
417
+ return;
418
+ this.emit({ type: 'state', state: 'thinking', epoch });
419
+ let result = await this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/chat/start', { ...payload, text }, reply.abort.signal);
420
+ let previousText = '';
421
+ while (isCurrent()) {
422
+ if (!result.ok)
423
+ throw new Error(result.error.message);
424
+ // 首次推送可能早于 start RPC 返回;累计快照优先,不能被旧响应覆盖。
425
+ const pushed = reply.updates.take();
426
+ if (pushed !== undefined && (!isRecord(result.value) || result.value.state === 'running' || pushed.state !== 'running'))
427
+ result = { ok: true, value: pushed };
428
+ const run = result.value;
429
+ if (!isRecord(run) || typeof run.text !== 'string' || !['running', 'completed', 'failed', 'cancelled'].includes(String(run.state)))
430
+ throw new Error('语音 LLM 返回了无效的对话状态');
431
+ if (run.text !== previousText || run.state === 'completed') {
432
+ if (!firstText && run.text.trim() !== '') {
433
+ firstText = true;
434
+ trace('client.turn.first_text', { firstTextMs: performance.now() - started });
435
+ }
436
+ previousText = run.text;
437
+ this.emit({ type: 'reply', requestId, text: run.text, final: run.state === 'completed', epoch });
438
+ }
439
+ if (run.state === 'running' || run.state === 'completed')
440
+ sentences.push(run.text, run.state === 'completed');
441
+ if (run.state === 'completed') {
442
+ trace('client.turn.llm_completed', { durationMs: performance.now() - started, count: polls, textLength: run.text.length });
443
+ await sentences.drain();
444
+ if (isCurrent())
445
+ await this.output.finish();
446
+ if (isCurrent())
447
+ this.emit({ type: 'state', state: 'listening', epoch });
448
+ outcome = isCurrent() ? 'completed' : 'cancelled';
449
+ return;
450
+ }
451
+ if (run.state !== 'running')
452
+ throw new Error(typeof run.error === 'string' ? run.error : '语音 LLM 对话已停止');
453
+ if (this.chatStreaming) {
454
+ const pushed = await reply.updates.next(reply.abort.signal);
455
+ if (pushed !== undefined) {
456
+ result = { ok: true, value: pushed };
457
+ continue;
458
+ }
459
+ if (isCurrent())
460
+ trace('client.turn.poll_fallback');
461
+ }
462
+ else
463
+ await waitForReplyPoll(reply.abort.signal);
464
+ if (!isCurrent())
465
+ return;
466
+ const pollStarted = performance.now();
467
+ polls++;
468
+ result = await this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/chat/read', payload, reply.abort.signal);
469
+ if (performance.now() - pollStarted >= 250)
470
+ trace('client.turn.slow_poll', { durationMs: performance.now() - pollStarted });
471
+ }
215
472
  }
473
+ catch (error) {
474
+ if (isCurrent()) {
475
+ outcome = 'failed';
476
+ trace('client.turn.error', { errorName: voiceDiagnosticError(error), durationMs: performance.now() - started });
477
+ this.emit({ type: 'error', code: 'voice_chat_failed', message: error instanceof Error ? error.message : String(error), recoverable: true, epoch });
478
+ this.cancelReply();
479
+ }
480
+ }
481
+ finally {
482
+ trace('client.turn.finished', { state: outcome, count: polls, durationMs: performance.now() - started });
483
+ if (this.reply === reply)
484
+ this.reply = undefined;
485
+ }
486
+ }
487
+ cancelReply() {
488
+ const reply = this.reply;
489
+ this.reply = undefined;
490
+ if (reply !== undefined)
491
+ this.trace('client.turn.cancel', { requestId: reply.requestId, epoch: reply.epoch });
492
+ reply?.abort.abort();
493
+ this.cancelOutput();
494
+ if (reply !== undefined)
495
+ void this.services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/chat/cancel', { ownerId: this.configuredOwner, epoch: reply.epoch, requestId: reply.requestId }).catch(() => undefined);
496
+ }
497
+ cancelOutput() {
498
+ this.settleSpeech?.();
499
+ this.settleSpeech = undefined;
500
+ globalThis.speechSynthesis?.cancel();
501
+ this.output.cancel();
502
+ }
503
+ failTransport(error, abort) {
504
+ if (this.responseAbort !== abort || abort.signal.aborted)
505
+ return;
506
+ this.trace('client.transport.error', { epoch: this.epoch, errorName: voiceDiagnosticError(error) });
507
+ void this.stop().catch(() => undefined).then(() => {
508
+ if (!this.active)
509
+ this.emit({ type: 'error', code: 'voice_stream_failed', message: error.message, recoverable: false, epoch: this.epoch });
510
+ });
216
511
  }
217
512
  emit(event) { for (const listener of [...this.listeners]) {
218
513
  try {
@@ -221,26 +516,12 @@ export class ClientSherpaVoiceAdapter {
221
516
  catch { /* UI 订阅者异常不能破坏语音数据面 */ }
222
517
  } }
223
518
  }
224
- class VoiceStreamUploader {
225
- stream;
226
- controller;
227
- closed = false;
228
- constructor() { this.stream = new ReadableStream({ start: (controller) => { this.controller = controller; } }); }
229
- enqueue(bytes) { if (!this.closed) {
230
- try {
231
- this.controller?.enqueue(bytes.slice());
232
- }
233
- catch {
234
- this.closed = true;
235
- }
236
- } }
237
- close() { if (this.closed)
238
- return; this.closed = true; try {
239
- this.controller?.close();
240
- }
241
- catch { /* fetch 已断开 */ } }
519
+ function resolveVoiceStreamUrl(path, parameters) {
520
+ const url = new URL(path, globalThis.location?.origin ?? 'http://localhost');
521
+ for (const [key, value] of Object.entries(parameters))
522
+ url.searchParams.set(key, value);
523
+ return url.toString();
242
524
  }
243
- function resolveVoiceStreamUrl() { return new URL('/api/codingns/assistant/voice/stream', globalThis.location?.origin ?? 'http://localhost').toString(); }
244
525
  function createClientId() { try {
245
526
  return globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;
246
527
  }
@@ -249,4 +530,16 @@ catch {
249
530
  } }
250
531
  function readEpoch(value, fallback) { return typeof value.epoch === 'number' && Number.isInteger(value.epoch) ? value.epoch : fallback; }
251
532
  function isRecord(value) { return typeof value === 'object' && value !== null && !Array.isArray(value); }
533
+ function isVoiceChatRun(value) {
534
+ return isRecord(value) && typeof value.requestId === 'string' && typeof value.text === 'string' && value.text.length <= 16000 && ['running', 'completed', 'failed', 'cancelled'].includes(String(value.state));
535
+ }
536
+ function waitForReplyPoll(signal) {
537
+ return new Promise((resolve) => {
538
+ const finish = () => { clearTimeout(timer); signal.removeEventListener('abort', finish); resolve(); };
539
+ const timer = setTimeout(finish, 250);
540
+ signal.addEventListener('abort', finish, { once: true });
541
+ if (signal.aborted)
542
+ finish();
543
+ });
544
+ }
252
545
  //# sourceMappingURL=sherpa-voice-adapter.js.map