@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,4 +1,4 @@
1
- import { createElement, useEffect, useRef, useSyncExternalStore } from 'react';
1
+ import { createElement, useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';
2
2
  import { Button } from '@deepseek-ai/dsh-client-ui-primitives';
3
3
  import { FitAddon } from '@xterm/addon-fit';
4
4
  import { Terminal } from '@xterm/xterm';
@@ -9,6 +9,10 @@ import { resolveCodingNsTranslator } from '../locale.js';
9
9
  import { stripTerminalDeviceAttributeResponses } from '../../shared/terminal-input.js';
10
10
  import { debugInfo } from '../../shared/debug.js';
11
11
  import { terminalClass } from './styles.js';
12
+ import { installTerminalSelectionActions, TerminalSelectionActions } from './selection-actions.js';
13
+ import { TerminalSurfaceCache } from './surface-cache.js';
14
+ /** 每个工作区终端只有一块屏幕,切换会话时移动 DOM,保留缓冲区、光标与滚动位置。 */
15
+ const surfaces = new TerminalSurfaceCache();
12
16
  const TERMINAL_TOUCH_MOMENTUM_GAIN = 2;
13
17
  const TERMINAL_TOUCH_MOMENTUM_MIN_LINES_PER_MS = 0.06;
14
18
  const TERMINAL_TOUCH_MOMENTUM_MAX_LINES_PER_MS = 0.9;
@@ -23,361 +27,52 @@ const TERMINAL_CONTENT_EDGE_GAP = 5;
23
27
  /** 终端滚动条停止滚动后的自动隐藏延迟。 */
24
28
  const TERMINAL_SCROLLBAR_HIDE_DELAY_MS = 3000;
25
29
  /** 使用与 DSH 内置终端相同的布局、状态条和 xterm 默认参数。 */
26
- export function CodingNsXtermView({ view, settings, themeRevision, onNewTerminal, active = true, visible = true, t: injectedTranslator, }) {
30
+ export function CodingNsXtermView({ view, settings, themeRevision, onNewTerminal, sharing, sessionId = view.sessionId, active = true, visible = true, t: injectedTranslator, }) {
27
31
  const t = injectedTranslator ?? resolveCodingNsTranslator();
28
32
  const hostRef = useRef(null);
29
- const terminalRef = useRef(null);
30
- const fitRef = useRef(null);
31
- const scheduleReflowRef = useRef(null);
32
- const lastRevision = useRef(0);
33
+ const surfaceRef = useRef(null);
33
34
  const sizeClaimAtRef = useRef(0);
34
- const previousActiveRef = useRef(active);
35
+ const previousActiveRef = useRef(false);
36
+ const [selectionActions, setSelectionActions] = useState();
37
+ const dismissSelection = useCallback(() => setSelectionActions(undefined), []);
35
38
  const state = useSyncExternalStore(view.state.subscribe.bind(view.state), view.state.getSnapshot.bind(view.state));
36
39
  const settingsSnapshot = useSyncExternalStore(settings.subscribe.bind(settings), settings.getSnapshot.bind(settings));
37
40
  const appearance = settingsSnapshot.value?.terminalEnhancement.appearance
38
41
  ?? DEFAULT_TERMINAL_ENHANCEMENT_SETTINGS.appearance;
39
42
  const hasTerminal = state.info !== undefined;
40
- // 聚合页切换标签时不卸载 CodingNsXtermView,保持 view.mount() 计数和 Host
41
- // follow attach。只有整个 Sidebar 页签不可见时才释放连接。
42
- useEffect(() => visible ? view.mount() : undefined, [view, visible]);
43
+ // 兼容尚未取得库存的首次打开;屏幕建好后由屏幕接管唯一的常驻挂载引用。
44
+ useEffect(() => visible && !hasTerminal ? view.mount() : undefined, [hasTerminal, view, visible]);
43
45
  useEffect(() => {
44
- const host = hostRef.current;
45
- if (host === null || !hasTerminal)
46
+ const target = hostRef.current;
47
+ if (target === null || !hasTerminal || !visible || view.signal.aborted)
46
48
  return;
47
- const root = host.shadowRoot ?? host.attachShadow({ mode: 'open' });
48
- const style = document.createElement('style');
49
- style.textContent = shadowCss;
50
- const container = document.createElement('div');
51
- container.className = 'codingns-xterm';
52
- root.replaceChildren(style, container);
53
- const terminal = new Terminal(terminalOptions(appearance, host, state.environment?.scrollback ?? 1000, !state.writable));
54
- const fit = new FitAddon();
55
- terminal.loadAddon(fit);
56
- terminal.open(container);
57
- terminal.textarea?.setAttribute('aria-label', t('terminal.title'));
58
- terminalRef.current = terminal;
59
- fitRef.current = fit;
60
- lastRevision.current = 0;
61
- // xterm 自己拥有自绘 scrollable viewport。滚轮回调只能决定是否交给 xterm 继续处理:
62
- // 有历史时返回 true,交给 xterm 的滚动容器;没有历史时返回 false,避免被解释为
63
- // shell 的上下方向键(例如切换历史命令)。
64
- const wheel = (event) => {
65
- if (!Number.isFinite(event.deltaY) || event.deltaY === 0)
66
- return false;
67
- const hasScrollback = terminal.buffer.active.baseY > 0;
68
- if (!hasScrollback) {
69
- // 保持 xterm 在无回滚区时的默认行为(应用鼠标模式仍可接收滚轮)。
70
- return false;
71
- }
72
- return true;
73
- };
74
- terminal.attachCustomWheelEventHandler(wheel);
75
- const input = terminal.onData((data) => {
76
- // xterm 在重放 Host resident 的历史输出时会再次回答设备识别查询。
77
- // 这些 ESC[?...c/ESC[>...c 响应不应被重复送入 shell,否则 zsh 会把响应内容回显为
78
- // “1;2c0;276;0c”这类异常字符。其它键盘输入和光标查询保持原样。
79
- const inputData = stripTerminalDeviceAttributeResponses(data);
80
- if (inputData !== '')
81
- view.write(inputData);
82
- });
83
- let touchPoint;
84
- let pendingTouchLines = 0;
85
- let touchVelocityLinesPerMs = 0;
86
- let touchMomentumRemainder = 0;
87
- let touchMomentumFrame;
88
- let touchMomentumEligible = false;
89
- let lastTouchMoveAt = 0;
90
- const stopTouchMomentum = () => {
91
- if (touchMomentumFrame !== undefined) {
92
- window.cancelAnimationFrame(touchMomentumFrame);
93
- touchMomentumFrame = undefined;
94
- }
95
- touchMomentumRemainder = 0;
96
- };
97
- const hasTerminalScrollback = () => {
98
- return terminal.buffer.active.baseY > 0 || terminal.buffer.active.viewportY > 0;
99
- };
100
- const scrollTouchLines = (lines) => {
101
- if (lines === 0 || !hasTerminalScrollback())
102
- return false;
103
- const previousViewportY = terminal.buffer.active.viewportY;
104
- terminal.scrollLines(lines);
105
- return terminal.buffer.active.viewportY !== previousViewportY;
106
- };
107
- const startTouchMomentum = () => {
108
- stopTouchMomentum();
109
- if (!touchMomentumEligible ||
110
- !hasTerminalScrollback() ||
111
- Math.abs(touchVelocityLinesPerMs) < TERMINAL_TOUCH_MOMENTUM_MIN_LINES_PER_MS) {
112
- touchVelocityLinesPerMs = 0;
113
- return;
114
- }
115
- let lastFrameAt = performance.now();
116
- let elapsedTotalMs = 0;
117
- let idleFrameCount = 0;
118
- const step = (frameAt) => {
119
- const elapsedMs = Math.max(1, frameAt - lastFrameAt);
120
- lastFrameAt = frameAt;
121
- elapsedTotalMs += elapsedMs;
122
- touchMomentumRemainder += touchVelocityLinesPerMs * elapsedMs;
123
- const lines = truncateTowardZero(touchMomentumRemainder);
124
- if (lines !== 0) {
125
- idleFrameCount = 0;
126
- touchMomentumRemainder -= lines;
127
- if (!scrollTouchLines(lines)) {
128
- touchVelocityLinesPerMs = 0;
129
- stopTouchMomentum();
130
- return;
131
- }
132
- }
133
- else {
134
- idleFrameCount += 1;
135
- }
136
- touchVelocityLinesPerMs *= Math.pow(TERMINAL_TOUCH_MOMENTUM_FRICTION, elapsedMs / 16);
137
- if (idleFrameCount >= TERMINAL_TOUCH_MOMENTUM_MAX_IDLE_FRAMES ||
138
- elapsedTotalMs >= TERMINAL_TOUCH_MOMENTUM_MAX_DURATION_MS ||
139
- Math.abs(touchVelocityLinesPerMs) < TERMINAL_TOUCH_MOMENTUM_MIN_LINES_PER_MS) {
140
- touchVelocityLinesPerMs = 0;
141
- stopTouchMomentum();
142
- return;
143
- }
144
- touchMomentumFrame = window.requestAnimationFrame(step);
145
- };
146
- touchMomentumFrame = window.requestAnimationFrame(step);
147
- };
148
- const touchStart = (event) => {
149
- stopTouchMomentum();
150
- touchVelocityLinesPerMs = 0;
151
- touchMomentumEligible = false;
152
- pendingTouchLines = 0;
153
- lastTouchMoveAt = performance.now();
154
- const touch = event.touches[0];
155
- touchPoint = touch === undefined ? undefined : { x: touch.clientX, y: touch.clientY };
156
- };
157
- const touchMove = (event) => {
158
- if (touchPoint === undefined || event.touches.length !== 1)
159
- return;
160
- const touch = event.touches[0];
161
- if (touch === undefined)
162
- return;
163
- const deltaX = touch.clientX - touchPoint.x;
164
- const deltaY = touch.clientY - touchPoint.y;
165
- touchPoint = { x: touch.clientX, y: touch.clientY };
166
- // 斜向手势优先交给外层页面,避免终端抢走横向切换动作。
167
- if (Math.abs(deltaY) <= Math.abs(deltaX))
168
- return;
169
- event.preventDefault();
170
- const now = performance.now();
171
- const elapsedMs = Math.max(1, now - lastTouchMoveAt);
172
- lastTouchMoveAt = now;
173
- const lineHeight = Math.max(1, host.clientHeight / Math.max(1, terminal.rows));
174
- const deltaLines = -deltaY / lineHeight;
175
- pendingTouchLines += deltaLines;
176
- const lines = truncateTowardZero(pendingTouchLines);
177
- if (lines === 0) {
178
- // 位移还不足一整行时也更新速度;手指停住则立即清除旧速度,避免
179
- // 松手时沿上一次手势方向继续滚动。
180
- if (Math.abs(deltaY) < 0.5) {
181
- touchVelocityLinesPerMs = 0;
182
- touchMomentumEligible = false;
183
- }
184
- else {
185
- touchVelocityLinesPerMs = clampNumber((deltaLines / elapsedMs) * TERMINAL_TOUCH_MOMENTUM_GAIN, -TERMINAL_TOUCH_MOMENTUM_MAX_LINES_PER_MS, TERMINAL_TOUCH_MOMENTUM_MAX_LINES_PER_MS);
186
- touchMomentumEligible = hasTerminalScrollback();
187
- }
188
- return;
189
- }
190
- pendingTouchLines -= lines;
191
- const didScroll = scrollTouchLines(lines);
192
- if (didScroll) {
193
- const nextVelocity = clampNumber((deltaLines / elapsedMs) * TERMINAL_TOUCH_MOMENTUM_GAIN, -TERMINAL_TOUCH_MOMENTUM_MAX_LINES_PER_MS, TERMINAL_TOUCH_MOMENTUM_MAX_LINES_PER_MS);
194
- touchVelocityLinesPerMs = touchVelocityLinesPerMs === 0
195
- ? nextVelocity
196
- : touchVelocityLinesPerMs * 0.35 + nextVelocity * 0.65;
197
- touchMomentumEligible = true;
198
- }
199
- else {
200
- touchVelocityLinesPerMs = 0;
201
- touchMomentumEligible = false;
202
- }
203
- };
204
- const touchEnd = () => {
205
- touchPoint = undefined;
206
- pendingTouchLines = 0;
207
- // 释放前已经静止一段时间,说明用户是在按住后松手,不应复用旧速度。
208
- if (performance.now() - lastTouchMoveAt >= TERMINAL_TOUCH_MOMENTUM_RELEASE_IDLE_MS) {
209
- touchVelocityLinesPerMs = 0;
210
- touchMomentumEligible = false;
211
- }
212
- startTouchMomentum();
213
- };
214
- const touchCancel = () => {
215
- touchPoint = undefined;
216
- pendingTouchLines = 0;
217
- touchVelocityLinesPerMs = 0;
218
- touchMomentumEligible = false;
219
- stopTouchMomentum();
220
- };
221
- const xtermRoot = terminal.element;
222
- if (xtermRoot === undefined)
223
- return;
224
- // xterm 6 使用 .xterm-scrollable-element 的自绘滚动条;.xterm-viewport
225
- // 只是兼容节点,不能再把触摸事件和可用宽度交给它。
226
- const scrollTarget = xtermRoot?.querySelector('.xterm-scrollable-element') ?? xtermRoot ?? container;
227
- const interactionTarget = xtermRoot ?? container;
228
- let scrollbarHideTimer;
229
- let lastViewportY = terminal.buffer.active.viewportY;
230
- const hideScrollbar = () => {
231
- if (scrollbarHideTimer !== undefined) {
232
- window.clearTimeout(scrollbarHideTimer);
233
- scrollbarHideTimer = undefined;
234
- }
235
- xtermRoot.dataset.codingnsScrollbar = 'hidden';
236
- };
237
- const revealScrollbar = () => {
238
- if (terminal.buffer.active.baseY <= 0) {
239
- hideScrollbar();
240
- return;
241
- }
242
- xtermRoot.dataset.codingnsScrollbar = 'visible';
243
- if (scrollbarHideTimer !== undefined)
244
- window.clearTimeout(scrollbarHideTimer);
245
- scrollbarHideTimer = window.setTimeout(() => {
246
- scrollbarHideTimer = undefined;
247
- xtermRoot.dataset.codingnsScrollbar = 'hidden';
248
- }, TERMINAL_SCROLLBAR_HIDE_DELAY_MS);
249
- };
250
- const syncScrollbarState = () => {
251
- const hasScrollback = terminal.buffer.active.baseY > 0;
252
- xtermRoot.dataset.codingnsScrollback = hasScrollback ? 'true' : 'false';
253
- if (!hasScrollback)
254
- hideScrollbar();
255
- else if (xtermRoot.dataset.codingnsScrollbar === undefined)
256
- xtermRoot.dataset.codingnsScrollbar = 'hidden';
257
- debugInfo('codingns4dsh: client terminal scrollbar state', {
258
- terminalId: view.id,
259
- hasScrollback,
260
- baseY: terminal.buffer.active.baseY,
261
- viewportY: terminal.buffer.active.viewportY,
262
- });
263
- };
264
- syncScrollbarState();
265
- scrollTarget.style.touchAction = 'pan-y';
266
- scrollTarget.style.overscrollBehavior = 'contain';
267
- if ('webkitOverflowScrolling' in scrollTarget.style) {
268
- scrollTarget.style.webkitOverflowScrolling = 'touch';
269
- }
270
- interactionTarget.addEventListener('touchstart', touchStart, { passive: true });
271
- interactionTarget.addEventListener('touchmove', touchMove, { passive: false });
272
- interactionTarget.addEventListener('touchend', touchEnd, { passive: true });
273
- interactionTarget.addEventListener('touchcancel', touchCancel, { passive: true });
274
- const scroll = terminal.onScroll((viewportY) => {
275
- const didScroll = viewportY !== lastViewportY;
276
- lastViewportY = viewportY;
277
- syncScrollbarState();
278
- if (didScroll)
279
- revealScrollbar();
280
- debugInfo('codingns4dsh: client terminal viewport scroll', {
281
- terminalId: view.id,
282
- viewportY,
283
- baseY: terminal.buffer.active.baseY,
284
- });
285
- });
286
- // 调试终端由 Host 预设“配置名(终端类型)”标题;Shell 启动时通常会发一个 zsh 等默认标题,不能覆盖它。
287
- const preserveHostTitle = state.info !== undefined && state.info.title !== state.info.shell.name;
288
- const title = terminal.onTitleChange((value) => {
289
- if (!preserveHostTitle)
290
- void view.rename(value);
291
- });
292
- const measure = () => {
293
- // 手机虚拟键盘通常只收缩 visualViewport,不会改变 DSH 外层布局视口。
294
- // 先把 xterm 宿主裁到可视视口底边,再计算行列,避免最后几行和光标落到键盘下面。
295
- syncTerminalViewport(host);
296
- // 显示层即使在 connecting/read-only 阶段也必须跟随容器尺寸;否则
297
- // ResizeObserver 会捕获首次 render 的 writable=false,后续移动端布局
298
- // 变化永远不会触发历史行重排。view.resize 内部仍会按权限决定是否下发 PTY。
299
- if (host.clientWidth === 0 || host.clientHeight === 0)
300
- return;
301
- fitTerminal(terminal, fit, view);
302
- syncScrollbarState();
303
- };
304
- let measureFrame;
305
- const scheduleMeasure = () => {
306
- if (measureFrame !== undefined)
307
- return;
308
- measureFrame = window.requestAnimationFrame(() => {
309
- measureFrame = undefined;
310
- measure();
311
- });
312
- };
313
- let reflowTimer;
314
- let reflowFrame;
315
- const schedulePostAttachReflow = () => {
316
- // xterm 的字符尺寸、移动端字体和 Sidebar 宽度可能在首帧之后才稳定。
317
- // 只在 snapshot 写入回调里 fit 一次会留下旧 scrollback 的宽度,随后每行
318
- // 看起来都向右漂移。连续安排两帧和一个短延迟,覆盖字体与容器的最终布局。
319
- scheduleMeasure();
320
- if (reflowFrame !== undefined)
321
- window.cancelAnimationFrame(reflowFrame);
322
- reflowFrame = window.requestAnimationFrame(() => {
323
- reflowFrame = undefined;
324
- scheduleMeasure();
325
- });
326
- if (reflowTimer !== undefined)
327
- window.clearTimeout(reflowTimer);
328
- reflowTimer = window.setTimeout(() => {
329
- reflowTimer = undefined;
330
- scheduleMeasure();
331
- }, 240);
332
- };
333
- scheduleReflowRef.current = schedulePostAttachReflow;
334
- const resize = new ResizeObserver(scheduleMeasure);
335
- resize.observe(host);
336
- resize.observe(container);
337
- const visualViewport = window.visualViewport;
338
- const handleViewportChange = () => schedulePostAttachReflow();
339
- visualViewport?.addEventListener('resize', handleViewportChange);
340
- // iOS 在弹出键盘时可能先滚动 visual viewport,再触发 resize;两个事件都要处理,
341
- // 否则页面被浏览器上移后,光标仍可能被键盘边缘遮住。
342
- visualViewport?.addEventListener('scroll', handleViewportChange);
343
- window.addEventListener('resize', handleViewportChange);
344
- schedulePostAttachReflow();
49
+ // 仅可见卡片更新调用上下文;后台卡片不能把共享模型切回旧会话。
50
+ view.sessionId = sessionId;
51
+ const surface = surfaces.get(view, () => createTerminalSurface(target, view, appearance, sharing, t));
52
+ surfaceRef.current = surface;
53
+ surface.owner = target;
54
+ surface.onSelection = setSelectionActions;
55
+ target.replaceChildren(surface.host);
56
+ surface.scheduleReflow();
345
57
  return () => {
346
- resize.disconnect();
347
- visualViewport?.removeEventListener('resize', handleViewportChange);
348
- visualViewport?.removeEventListener('scroll', handleViewportChange);
349
- window.removeEventListener('resize', handleViewportChange);
350
- if (measureFrame !== undefined)
351
- window.cancelAnimationFrame(measureFrame);
352
- if (reflowFrame !== undefined)
353
- window.cancelAnimationFrame(reflowFrame);
354
- if (reflowTimer !== undefined)
355
- window.clearTimeout(reflowTimer);
356
- if (scrollbarHideTimer !== undefined)
357
- window.clearTimeout(scrollbarHideTimer);
358
- scheduleReflowRef.current = null;
359
- input.dispose();
360
- scroll.dispose();
361
- interactionTarget.removeEventListener('touchstart', touchStart);
362
- interactionTarget.removeEventListener('touchmove', touchMove);
363
- interactionTarget.removeEventListener('touchend', touchEnd);
364
- interactionTarget.removeEventListener('touchcancel', touchCancel);
365
- stopTouchMomentum();
366
- title.dispose();
367
- terminal.dispose();
368
- terminalRef.current = null;
369
- fitRef.current = null;
370
- host.style.height = '100%';
371
- root.replaceChildren();
58
+ surfaceRef.current = null;
59
+ // 会话切换可能先挂载新卡片再清理旧卡片,旧卡片不得拆走新卡片的屏幕。
60
+ if (surface.owner !== target)
61
+ return;
62
+ surface.host.remove();
63
+ delete surface.owner;
64
+ delete surface.onSelection;
372
65
  };
373
- }, [hasTerminal, view]);
66
+ }, [hasTerminal, sessionId, sharing, view, visible]);
67
+ useEffect(() => { if (!active || !visible)
68
+ dismissSelection(); }, [active, visible, dismissSelection]);
374
69
  useEffect(() => {
375
- const becameActive = active && !previousActiveRef.current;
376
- previousActiveRef.current = active;
377
- const terminal = terminalRef.current;
378
- const host = hostRef.current;
379
- if (terminal === null || host === null)
70
+ const becameActive = active && visible && !previousActiveRef.current;
71
+ previousActiveRef.current = active && visible;
72
+ const surface = surfaceRef.current;
73
+ if (surface === null || !active || !visible)
380
74
  return;
75
+ const { terminal, host, fit } = surface;
381
76
  applyAppearance(terminal, appearance, host, state.environment?.scrollback ?? 1000);
382
77
  terminal.options.disableStdin = !state.writable;
383
78
  // 聚合页切换到一个原本隐藏的终端时,虚拟键盘可能已经打开且不会再次派发
@@ -393,12 +88,9 @@ export function CodingNsXtermView({ view, settings, themeRevision, onNewTerminal
393
88
  const claim = becameActive && now - sizeClaimAtRef.current >= TERMINAL_SIZE_CLAIM_INTERVAL_MS;
394
89
  if (claim)
395
90
  sizeClaimAtRef.current = now;
396
- fitTerminal(terminal, fitRef.current, view, claim ? { force: true } : undefined);
91
+ fitTerminal(terminal, fit, view, claim ? { force: true } : undefined);
397
92
  terminal.focus();
398
93
  }
399
- else if (state.info !== undefined) {
400
- terminal.resize(state.info.cols, state.info.rows);
401
- }
402
94
  }, [
403
95
  active,
404
96
  appearance,
@@ -408,84 +100,424 @@ export function CodingNsXtermView({ view, settings, themeRevision, onNewTerminal
408
100
  state.writable,
409
101
  themeRevision,
410
102
  view,
103
+ visible,
411
104
  ]);
412
105
  useEffect(() => {
413
- if (!active || !hasTerminal)
106
+ if (!active || !visible || !hasTerminal)
414
107
  return;
415
108
  // 页面从后台回到前台(移动端切回、窗口重新聚焦)时,Host 尺寸可能已被其它
416
109
  // 客户端改写;回到前台的视图重发一次自己的 fit 尺寸,把 tmux 抢回本视图。
417
110
  const onVisibilityChange = () => {
418
111
  if (document.visibilityState !== 'visible')
419
112
  return;
420
- const terminal = terminalRef.current;
421
- const host = hostRef.current;
422
- if (terminal === null || host === null)
113
+ const surface = surfaceRef.current;
114
+ if (surface === null)
423
115
  return;
116
+ const { terminal, host, fit } = surface;
424
117
  if (host.clientWidth === 0 || host.clientHeight === 0)
425
118
  return;
426
119
  const now = Date.now();
427
120
  if (now - sizeClaimAtRef.current < TERMINAL_SIZE_CLAIM_INTERVAL_MS)
428
121
  return;
429
122
  sizeClaimAtRef.current = now;
430
- fitTerminal(terminal, fitRef.current, view, { force: true });
123
+ fitTerminal(terminal, fit, view, { force: true });
431
124
  };
432
125
  document.addEventListener('visibilitychange', onVisibilityChange);
433
126
  return () => document.removeEventListener('visibilitychange', onVisibilityChange);
434
- }, [active, hasTerminal, view]);
435
- useEffect(() => {
436
- const terminal = terminalRef.current;
437
- const host = hostRef.current;
438
- const render = state.render;
439
- if (terminal === null || render === undefined || render.revision <= lastRevision.current)
440
- return;
441
- lastRevision.current = render.revision;
442
- const isSnapshot = render.frame.type === 'snapshot';
443
- if (isSnapshot) {
444
- terminal.reset();
445
- terminal.resize(render.frame.info.cols, render.frame.info.rows);
446
- }
447
- const data = render.frame.type === 'snapshot'
448
- ? normalizeTerminalSnapshot(render.frame.screen)
449
- : render.frame.data;
450
- terminal.write(data, () => {
451
- // 快照中的尺寸来自 Host 上次记录,可能仍是桌面端列数。等完整历史写入
452
- // 后再按当前 DOM 宽度 fit 一次,xterm 才会对整个 scrollback 执行重排;
453
- // 否则只有后续新增的当前行会按移动端宽度换行。
454
- if (isSnapshot && host !== null && host.clientWidth > 0 && host.clientHeight > 0) {
455
- fitTerminal(terminal, fitRef.current, view);
456
- scheduleReflowRef.current?.();
457
- }
458
- if (terminal.element !== undefined) {
459
- const hasScrollback = terminal.buffer.active.baseY > 0;
460
- terminal.element.dataset.codingnsScrollback = hasScrollback ? 'true' : 'false';
461
- if (!hasScrollback)
462
- terminal.element.dataset.codingnsScrollbar = 'hidden';
463
- }
464
- const viewport = terminal.element?.querySelector('.xterm-scrollable-element');
465
- debugInfo('codingns4dsh: client terminal frame rendered', {
466
- terminalId: view.id,
467
- frameType: render.frame.type,
468
- characters: data.length,
469
- rows: terminal.rows,
470
- bufferLength: terminal.buffer.active.length,
471
- baseY: terminal.buffer.active.baseY,
472
- viewportY: terminal.buffer.active.viewportY,
473
- viewportScrollHeight: viewport?.scrollHeight ?? null,
474
- viewportClientHeight: viewport?.clientHeight ?? null,
475
- });
476
- view.acknowledge(render.revision);
477
- });
478
- }, [state.render, view]);
127
+ }, [active, hasTerminal, view, visible]);
479
128
  return createElement('section', {
480
129
  className: terminalClass.root,
481
130
  'data-sidebar-terminal': true,
482
131
  'data-terminal-active': active ? 'true' : 'false',
483
132
  'aria-hidden': active ? undefined : true,
484
133
  style: active ? undefined : { display: 'none' },
485
- }, createElement(TerminalStatus, { state, view, onNewTerminal, t }), hasTerminal ? createElement('div', { className: terminalClass.screen }, createElement('div', { ref: hostRef, style: terminalHostStyle })) : null, state.error === undefined || state.phase === 'disconnected' || state.info?.state === 'lost'
134
+ }, createElement(TerminalStatus, { state, view, onNewTerminal, t }), active && visible && sharing !== undefined ? createElement(TerminalSelectionActions, { selection: selectionActions, view, sessionId, sharing, t, onDismiss: dismissSelection }) : null, hasTerminal ? createElement('div', { className: terminalClass.screen }, createElement('div', { ref: hostRef, style: { width: '100%', height: '100%' } })) : null, state.error === undefined || state.phase === 'disconnected' || state.info?.state === 'lost'
486
135
  ? null
487
136
  : createElement('p', { className: terminalClass.error, role: 'alert' }, t('terminalView.errorDetail', { message: state.error })));
488
137
  }
138
+ /** 创建一次常驻屏幕;事件、输出消费和连接只在终端模型销毁时释放。 */
139
+ function createTerminalSurface(target, view, appearance, sharing, t) {
140
+ const state = view.state.getSnapshot();
141
+ const host = document.createElement('div');
142
+ // DOM 样式赋值不会像 React 一样自动给数字补 px。
143
+ Object.assign(host.style, terminalHostStyle, {
144
+ paddingLeft: `${terminalHostStyle.paddingLeft}px`,
145
+ paddingRight: `${terminalHostStyle.paddingRight}px`,
146
+ });
147
+ target.replaceChildren(host);
148
+ const root = host.shadowRoot ?? host.attachShadow({ mode: 'open' });
149
+ const style = document.createElement('style');
150
+ style.textContent = shadowCss;
151
+ const container = document.createElement('div');
152
+ container.className = 'codingns-xterm';
153
+ root.replaceChildren(style, container);
154
+ const terminal = new Terminal(terminalOptions(appearance, host, state.environment?.scrollback ?? 1000, !state.writable));
155
+ const fit = new FitAddon();
156
+ terminal.loadAddon(fit);
157
+ terminal.open(container);
158
+ terminal.textarea?.setAttribute('aria-label', t('terminal.title'));
159
+ const releaseSharing = sharing?.bind(view, terminal);
160
+ const releaseSelection = installTerminalSelectionActions(terminal, container, (selection) => retained.onSelection?.(selection));
161
+ // xterm 自己拥有自绘 scrollable viewport。滚轮回调只能决定是否交给 xterm 继续处理:
162
+ // 有历史时返回 true,交给 xterm 的滚动容器;没有历史时返回 false,避免被解释为
163
+ // shell 的上下方向键(例如切换历史命令)。
164
+ const wheel = (event) => {
165
+ if (!Number.isFinite(event.deltaY) || event.deltaY === 0)
166
+ return false;
167
+ const hasScrollback = terminal.buffer.active.baseY > 0;
168
+ if (!hasScrollback) {
169
+ // 保持 xterm 在无回滚区时的默认行为(应用鼠标模式仍可接收滚轮)。
170
+ return false;
171
+ }
172
+ return true;
173
+ };
174
+ terminal.attachCustomWheelEventHandler(wheel);
175
+ const input = terminal.onData((data) => {
176
+ // xterm 在重放 Host resident 的历史输出时会再次回答设备识别查询。
177
+ // 这些 ESC[?...c/ESC[>...c 响应不应被重复送入 shell,否则 zsh 会把响应内容回显为
178
+ // “1;2c0;276;0c”这类异常字符。其它键盘输入和光标查询保持原样。
179
+ const inputData = stripTerminalDeviceAttributeResponses(data);
180
+ if (inputData !== '')
181
+ view.write(inputData);
182
+ });
183
+ let touchPoint;
184
+ let pendingTouchLines = 0;
185
+ let touchVelocityLinesPerMs = 0;
186
+ let touchMomentumRemainder = 0;
187
+ let touchMomentumFrame;
188
+ let touchMomentumEligible = false;
189
+ let lastTouchMoveAt = 0;
190
+ const stopTouchMomentum = () => {
191
+ if (touchMomentumFrame !== undefined) {
192
+ window.cancelAnimationFrame(touchMomentumFrame);
193
+ touchMomentumFrame = undefined;
194
+ }
195
+ touchMomentumRemainder = 0;
196
+ };
197
+ const hasTerminalScrollback = () => {
198
+ return terminal.buffer.active.baseY > 0 || terminal.buffer.active.viewportY > 0;
199
+ };
200
+ const scrollTouchLines = (lines) => {
201
+ if (lines === 0 || !hasTerminalScrollback())
202
+ return false;
203
+ const previousViewportY = terminal.buffer.active.viewportY;
204
+ terminal.scrollLines(lines);
205
+ return terminal.buffer.active.viewportY !== previousViewportY;
206
+ };
207
+ const startTouchMomentum = () => {
208
+ stopTouchMomentum();
209
+ if (!touchMomentumEligible ||
210
+ !hasTerminalScrollback() ||
211
+ Math.abs(touchVelocityLinesPerMs) < TERMINAL_TOUCH_MOMENTUM_MIN_LINES_PER_MS) {
212
+ touchVelocityLinesPerMs = 0;
213
+ return;
214
+ }
215
+ let lastFrameAt = performance.now();
216
+ let elapsedTotalMs = 0;
217
+ let idleFrameCount = 0;
218
+ const step = (frameAt) => {
219
+ const elapsedMs = Math.max(1, frameAt - lastFrameAt);
220
+ lastFrameAt = frameAt;
221
+ elapsedTotalMs += elapsedMs;
222
+ touchMomentumRemainder += touchVelocityLinesPerMs * elapsedMs;
223
+ const lines = truncateTowardZero(touchMomentumRemainder);
224
+ if (lines !== 0) {
225
+ idleFrameCount = 0;
226
+ touchMomentumRemainder -= lines;
227
+ if (!scrollTouchLines(lines)) {
228
+ touchVelocityLinesPerMs = 0;
229
+ stopTouchMomentum();
230
+ return;
231
+ }
232
+ }
233
+ else {
234
+ idleFrameCount += 1;
235
+ }
236
+ touchVelocityLinesPerMs *= Math.pow(TERMINAL_TOUCH_MOMENTUM_FRICTION, elapsedMs / 16);
237
+ if (idleFrameCount >= TERMINAL_TOUCH_MOMENTUM_MAX_IDLE_FRAMES ||
238
+ elapsedTotalMs >= TERMINAL_TOUCH_MOMENTUM_MAX_DURATION_MS ||
239
+ Math.abs(touchVelocityLinesPerMs) < TERMINAL_TOUCH_MOMENTUM_MIN_LINES_PER_MS) {
240
+ touchVelocityLinesPerMs = 0;
241
+ stopTouchMomentum();
242
+ return;
243
+ }
244
+ touchMomentumFrame = window.requestAnimationFrame(step);
245
+ };
246
+ touchMomentumFrame = window.requestAnimationFrame(step);
247
+ };
248
+ const touchStart = (event) => {
249
+ stopTouchMomentum();
250
+ touchVelocityLinesPerMs = 0;
251
+ touchMomentumEligible = false;
252
+ pendingTouchLines = 0;
253
+ lastTouchMoveAt = performance.now();
254
+ const touch = event.touches[0];
255
+ touchPoint = touch === undefined ? undefined : { x: touch.clientX, y: touch.clientY };
256
+ };
257
+ const touchMove = (event) => {
258
+ if (touchPoint === undefined || event.touches.length !== 1)
259
+ return;
260
+ const touch = event.touches[0];
261
+ if (touch === undefined)
262
+ return;
263
+ const deltaX = touch.clientX - touchPoint.x;
264
+ const deltaY = touch.clientY - touchPoint.y;
265
+ touchPoint = { x: touch.clientX, y: touch.clientY };
266
+ // 斜向手势优先交给外层页面,避免终端抢走横向切换动作。
267
+ if (Math.abs(deltaY) <= Math.abs(deltaX))
268
+ return;
269
+ event.preventDefault();
270
+ const now = performance.now();
271
+ const elapsedMs = Math.max(1, now - lastTouchMoveAt);
272
+ lastTouchMoveAt = now;
273
+ const lineHeight = Math.max(1, host.clientHeight / Math.max(1, terminal.rows));
274
+ const deltaLines = -deltaY / lineHeight;
275
+ pendingTouchLines += deltaLines;
276
+ const lines = truncateTowardZero(pendingTouchLines);
277
+ if (lines === 0) {
278
+ // 位移还不足一整行时也更新速度;手指停住则立即清除旧速度,避免
279
+ // 松手时沿上一次手势方向继续滚动。
280
+ if (Math.abs(deltaY) < 0.5) {
281
+ touchVelocityLinesPerMs = 0;
282
+ touchMomentumEligible = false;
283
+ }
284
+ else {
285
+ touchVelocityLinesPerMs = clampNumber((deltaLines / elapsedMs) * TERMINAL_TOUCH_MOMENTUM_GAIN, -TERMINAL_TOUCH_MOMENTUM_MAX_LINES_PER_MS, TERMINAL_TOUCH_MOMENTUM_MAX_LINES_PER_MS);
286
+ touchMomentumEligible = hasTerminalScrollback();
287
+ }
288
+ return;
289
+ }
290
+ pendingTouchLines -= lines;
291
+ const didScroll = scrollTouchLines(lines);
292
+ if (didScroll) {
293
+ const nextVelocity = clampNumber((deltaLines / elapsedMs) * TERMINAL_TOUCH_MOMENTUM_GAIN, -TERMINAL_TOUCH_MOMENTUM_MAX_LINES_PER_MS, TERMINAL_TOUCH_MOMENTUM_MAX_LINES_PER_MS);
294
+ touchVelocityLinesPerMs = touchVelocityLinesPerMs === 0
295
+ ? nextVelocity
296
+ : touchVelocityLinesPerMs * 0.35 + nextVelocity * 0.65;
297
+ touchMomentumEligible = true;
298
+ }
299
+ else {
300
+ touchVelocityLinesPerMs = 0;
301
+ touchMomentumEligible = false;
302
+ }
303
+ };
304
+ const touchEnd = () => {
305
+ touchPoint = undefined;
306
+ pendingTouchLines = 0;
307
+ // 释放前已经静止一段时间,说明用户是在按住后松手,不应复用旧速度。
308
+ if (performance.now() - lastTouchMoveAt >= TERMINAL_TOUCH_MOMENTUM_RELEASE_IDLE_MS) {
309
+ touchVelocityLinesPerMs = 0;
310
+ touchMomentumEligible = false;
311
+ }
312
+ startTouchMomentum();
313
+ };
314
+ const touchCancel = () => {
315
+ touchPoint = undefined;
316
+ pendingTouchLines = 0;
317
+ touchVelocityLinesPerMs = 0;
318
+ touchMomentumEligible = false;
319
+ stopTouchMomentum();
320
+ };
321
+ const xtermRoot = terminal.element;
322
+ // xterm 6 使用 .xterm-scrollable-element 的自绘滚动条;.xterm-viewport
323
+ // 只是兼容节点,不能再把触摸事件和可用宽度交给它。
324
+ const scrollTarget = xtermRoot?.querySelector('.xterm-scrollable-element') ?? xtermRoot ?? container;
325
+ const interactionTarget = xtermRoot ?? container;
326
+ let scrollbarHideTimer;
327
+ let lastViewportY = terminal.buffer.active.viewportY;
328
+ const hideScrollbar = () => {
329
+ if (scrollbarHideTimer !== undefined) {
330
+ window.clearTimeout(scrollbarHideTimer);
331
+ scrollbarHideTimer = undefined;
332
+ }
333
+ xtermRoot.dataset.codingnsScrollbar = 'hidden';
334
+ };
335
+ const revealScrollbar = () => {
336
+ if (terminal.buffer.active.baseY <= 0) {
337
+ hideScrollbar();
338
+ return;
339
+ }
340
+ xtermRoot.dataset.codingnsScrollbar = 'visible';
341
+ if (scrollbarHideTimer !== undefined)
342
+ window.clearTimeout(scrollbarHideTimer);
343
+ scrollbarHideTimer = window.setTimeout(() => {
344
+ scrollbarHideTimer = undefined;
345
+ xtermRoot.dataset.codingnsScrollbar = 'hidden';
346
+ }, TERMINAL_SCROLLBAR_HIDE_DELAY_MS);
347
+ };
348
+ const syncScrollbarState = () => {
349
+ const hasScrollback = terminal.buffer.active.baseY > 0;
350
+ xtermRoot.dataset.codingnsScrollback = hasScrollback ? 'true' : 'false';
351
+ if (!hasScrollback)
352
+ hideScrollbar();
353
+ else if (xtermRoot.dataset.codingnsScrollbar === undefined)
354
+ xtermRoot.dataset.codingnsScrollbar = 'hidden';
355
+ debugInfo('codingns4dsh: client terminal scrollbar state', {
356
+ terminalId: view.id,
357
+ hasScrollback,
358
+ baseY: terminal.buffer.active.baseY,
359
+ viewportY: terminal.buffer.active.viewportY,
360
+ });
361
+ };
362
+ syncScrollbarState();
363
+ scrollTarget.style.touchAction = 'pan-y';
364
+ scrollTarget.style.overscrollBehavior = 'contain';
365
+ if ('webkitOverflowScrolling' in scrollTarget.style) {
366
+ scrollTarget.style.webkitOverflowScrolling = 'touch';
367
+ }
368
+ interactionTarget.addEventListener('touchstart', touchStart, { passive: true });
369
+ interactionTarget.addEventListener('touchmove', touchMove, { passive: false });
370
+ interactionTarget.addEventListener('touchend', touchEnd, { passive: true });
371
+ interactionTarget.addEventListener('touchcancel', touchCancel, { passive: true });
372
+ const scroll = terminal.onScroll((viewportY) => {
373
+ const didScroll = viewportY !== lastViewportY;
374
+ lastViewportY = viewportY;
375
+ syncScrollbarState();
376
+ if (didScroll)
377
+ revealScrollbar();
378
+ debugInfo('codingns4dsh: client terminal viewport scroll', {
379
+ terminalId: view.id,
380
+ viewportY,
381
+ baseY: terminal.buffer.active.baseY,
382
+ });
383
+ });
384
+ // 调试终端由 Host 预设“配置名(终端类型)”标题;Shell 启动时通常会发一个 zsh 等默认标题,不能覆盖它。
385
+ const preserveHostTitle = state.info !== undefined && state.info.title !== state.info.shell.name;
386
+ const title = terminal.onTitleChange((value) => {
387
+ if (!preserveHostTitle)
388
+ void view.rename(value);
389
+ });
390
+ const measure = () => {
391
+ // 手机虚拟键盘通常只收缩 visualViewport,不会改变 DSH 外层布局视口。
392
+ // 先把 xterm 宿主裁到可视视口底边,再计算行列,避免最后几行和光标落到键盘下面。
393
+ syncTerminalViewport(host);
394
+ // 显示层即使在 connecting/read-only 阶段也必须跟随容器尺寸;否则
395
+ // ResizeObserver 会捕获首次 render 的 writable=false,后续移动端布局
396
+ // 变化永远不会触发历史行重排。view.resize 内部仍会按权限决定是否下发 PTY。
397
+ if (host.clientWidth === 0 || host.clientHeight === 0)
398
+ return;
399
+ fitTerminal(terminal, fit, view);
400
+ syncScrollbarState();
401
+ };
402
+ let measureFrame;
403
+ const scheduleMeasure = () => {
404
+ if (measureFrame !== undefined)
405
+ return;
406
+ measureFrame = window.requestAnimationFrame(() => {
407
+ measureFrame = undefined;
408
+ measure();
409
+ });
410
+ };
411
+ let reflowTimer;
412
+ let reflowFrame;
413
+ const schedulePostAttachReflow = () => {
414
+ // xterm 的字符尺寸、移动端字体和 Sidebar 宽度可能在首帧之后才稳定。
415
+ // 只在 snapshot 写入回调里 fit 一次会留下旧 scrollback 的宽度,随后每行
416
+ // 看起来都向右漂移。连续安排两帧和一个短延迟,覆盖字体与容器的最终布局。
417
+ scheduleMeasure();
418
+ if (reflowFrame !== undefined)
419
+ window.cancelAnimationFrame(reflowFrame);
420
+ reflowFrame = window.requestAnimationFrame(() => {
421
+ reflowFrame = undefined;
422
+ scheduleMeasure();
423
+ });
424
+ if (reflowTimer !== undefined)
425
+ window.clearTimeout(reflowTimer);
426
+ reflowTimer = window.setTimeout(() => {
427
+ reflowTimer = undefined;
428
+ scheduleMeasure();
429
+ }, 240);
430
+ };
431
+ const resize = new ResizeObserver(scheduleMeasure);
432
+ resize.observe(host);
433
+ resize.observe(container);
434
+ const visualViewport = window.visualViewport;
435
+ const handleViewportChange = () => schedulePostAttachReflow();
436
+ visualViewport?.addEventListener('resize', handleViewportChange);
437
+ // iOS 在弹出键盘时可能先滚动 visual viewport,再触发 resize;两个事件都要处理,
438
+ // 否则页面被浏览器上移后,光标仍可能被键盘边缘遮住。
439
+ visualViewport?.addEventListener('scroll', handleViewportChange);
440
+ window.addEventListener('resize', handleViewportChange);
441
+ schedulePostAttachReflow();
442
+ const retained = { host, terminal, fit, scheduleReflow: schedulePostAttachReflow, lastRevision: 0, dispose: () => {
443
+ releaseState();
444
+ releaseMount();
445
+ releaseSharing?.();
446
+ releaseSelection();
447
+ resize.disconnect();
448
+ visualViewport?.removeEventListener('resize', handleViewportChange);
449
+ visualViewport?.removeEventListener('scroll', handleViewportChange);
450
+ window.removeEventListener('resize', handleViewportChange);
451
+ if (measureFrame !== undefined)
452
+ window.cancelAnimationFrame(measureFrame);
453
+ if (reflowFrame !== undefined)
454
+ window.cancelAnimationFrame(reflowFrame);
455
+ if (reflowTimer !== undefined)
456
+ window.clearTimeout(reflowTimer);
457
+ if (scrollbarHideTimer !== undefined)
458
+ window.clearTimeout(scrollbarHideTimer);
459
+ input.dispose();
460
+ scroll.dispose();
461
+ interactionTarget.removeEventListener('touchstart', touchStart);
462
+ interactionTarget.removeEventListener('touchmove', touchMove);
463
+ interactionTarget.removeEventListener('touchend', touchEnd);
464
+ interactionTarget.removeEventListener('touchcancel', touchCancel);
465
+ stopTouchMomentum();
466
+ title.dispose();
467
+ terminal.dispose();
468
+ host.remove();
469
+ root.replaceChildren();
470
+ } };
471
+ // 输出消费跟随屏幕生命周期,隐藏或跨会话移动时继续写入同一缓冲区。
472
+ const releaseState = view.state.subscribe(() => renderTerminalSurface(retained, view));
473
+ const releaseMount = view.mount();
474
+ renderTerminalSurface(retained, view);
475
+ return retained;
476
+ }
477
+ /** 每帧只写入工作区共享屏幕一次,不依赖任何会话卡片的 React 渲染或可见性。 */
478
+ function renderTerminalSurface(surface, view) {
479
+ const { terminal, host, fit } = surface;
480
+ const state = view.state.getSnapshot();
481
+ terminal.options.disableStdin = !state.writable;
482
+ const render = state.render;
483
+ if (render === undefined || render.revision <= surface.lastRevision)
484
+ return;
485
+ surface.lastRevision = render.revision;
486
+ const isSnapshot = render.frame.type === 'snapshot';
487
+ if (isSnapshot) {
488
+ terminal.reset();
489
+ terminal.resize(render.frame.info.cols, render.frame.info.rows);
490
+ }
491
+ const data = render.frame.type === 'snapshot'
492
+ ? normalizeTerminalSnapshot(render.frame.screen)
493
+ : render.frame.data;
494
+ terminal.write(data, () => {
495
+ // 首次快照和真实尺寸变化仍需重排历史;移动已存在的屏幕不产生新快照。
496
+ if (isSnapshot && host.clientWidth > 0 && host.clientHeight > 0) {
497
+ fitTerminal(terminal, fit, view);
498
+ surface.scheduleReflow();
499
+ }
500
+ if (terminal.element !== undefined) {
501
+ const hasScrollback = terminal.buffer.active.baseY > 0;
502
+ terminal.element.dataset.codingnsScrollback = hasScrollback ? 'true' : 'false';
503
+ if (!hasScrollback)
504
+ terminal.element.dataset.codingnsScrollbar = 'hidden';
505
+ }
506
+ const viewport = terminal.element?.querySelector('.xterm-scrollable-element');
507
+ debugInfo('codingns4dsh: client terminal frame rendered', {
508
+ terminalId: view.id,
509
+ frameType: render.frame.type,
510
+ characters: data.length,
511
+ rows: terminal.rows,
512
+ bufferLength: terminal.buffer.active.length,
513
+ baseY: terminal.buffer.active.baseY,
514
+ viewportY: terminal.buffer.active.viewportY,
515
+ viewportScrollHeight: viewport?.scrollHeight ?? null,
516
+ viewportClientHeight: viewport?.clientHeight ?? null,
517
+ });
518
+ view.acknowledge(render.revision);
519
+ });
520
+ }
489
521
  function TerminalStatus({ state, view, onNewTerminal, t, }) {
490
522
  const status = statusText(state, t);
491
523
  const ended = state.info?.state === 'exited' || state.phase === 'closed';