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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/README.en.md +6 -6
  2. package/README.md +42 -29
  3. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts +1 -1
  4. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts.map +1 -1
  5. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js +2 -2
  6. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js.map +1 -1
  7. package/data/build/dist/bootstrap/index.d.ts +1 -1
  8. package/data/build/dist/bootstrap/index.d.ts.map +1 -1
  9. package/data/build/dist/client/bundle.js +3164 -181
  10. package/data/build/dist/client/bundle.js.map +1 -1
  11. package/data/build/dist/client/cli-catalog.d.ts +1 -1
  12. package/data/build/dist/client/cli-catalog.d.ts.map +1 -1
  13. package/data/build/dist/client/cli-catalog.js +3 -3
  14. package/data/build/dist/client/cli-catalog.js.map +1 -1
  15. package/data/build/dist/client/cli-slots.d.ts +4 -0
  16. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  17. package/data/build/dist/client/cli-slots.js +70 -9
  18. package/data/build/dist/client/cli-slots.js.map +1 -1
  19. package/data/build/dist/client/context-breakdown-dom.d.ts +1 -1
  20. package/data/build/dist/client/context-breakdown-dom.d.ts.map +1 -1
  21. package/data/build/dist/client/context-breakdown-dom.js +1 -1
  22. package/data/build/dist/client/context-breakdown-dom.js.map +1 -1
  23. package/data/build/dist/client/features/assistant-panel.d.ts +5 -0
  24. package/data/build/dist/client/features/assistant-panel.d.ts.map +1 -0
  25. package/data/build/dist/client/features/assistant-panel.js +127 -0
  26. package/data/build/dist/client/features/assistant-panel.js.map +1 -0
  27. package/data/build/dist/client/features/global-voice-assistant.d.ts +10 -0
  28. package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -0
  29. package/data/build/dist/client/features/global-voice-assistant.js +330 -0
  30. package/data/build/dist/client/features/global-voice-assistant.js.map +1 -0
  31. package/data/build/dist/client/features/index.d.ts +2 -0
  32. package/data/build/dist/client/features/index.d.ts.map +1 -1
  33. package/data/build/dist/client/features/index.js +4 -0
  34. package/data/build/dist/client/features/index.js.map +1 -1
  35. package/data/build/dist/client/features/lan-access.d.ts.map +1 -1
  36. package/data/build/dist/client/features/lan-access.js +3 -1
  37. package/data/build/dist/client/features/lan-access.js.map +1 -1
  38. package/data/build/dist/client/features/types.d.ts +4 -1
  39. package/data/build/dist/client/features/types.d.ts.map +1 -1
  40. package/data/build/dist/client/features/voice-conversation-dialog.d.ts +20 -0
  41. package/data/build/dist/client/features/voice-conversation-dialog.d.ts.map +1 -0
  42. package/data/build/dist/client/features/voice-conversation-dialog.js +59 -0
  43. package/data/build/dist/client/features/voice-conversation-dialog.js.map +1 -0
  44. package/data/build/dist/client/features/voice-initialization-dialog.d.ts +10 -0
  45. package/data/build/dist/client/features/voice-initialization-dialog.d.ts.map +1 -0
  46. package/data/build/dist/client/features/voice-initialization-dialog.js +90 -0
  47. package/data/build/dist/client/features/voice-initialization-dialog.js.map +1 -0
  48. package/data/build/dist/client/features/workspace-session-enhancement-panel.d.ts.map +1 -1
  49. package/data/build/dist/client/features/workspace-session-enhancement-panel.js +57 -2
  50. package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -1
  51. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
  52. package/data/build/dist/client/features/workspace-session-enhancement.js +27 -0
  53. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
  54. package/data/build/dist/client/global-voice-runtime-registry.d.ts +27 -0
  55. package/data/build/dist/client/global-voice-runtime-registry.d.ts.map +1 -0
  56. package/data/build/dist/client/global-voice-runtime-registry.js +12 -0
  57. package/data/build/dist/client/global-voice-runtime-registry.js.map +1 -0
  58. package/data/build/dist/client/index.d.ts +1 -1
  59. package/data/build/dist/client/index.d.ts.map +1 -1
  60. package/data/build/dist/client/locale.d.ts.map +1 -1
  61. package/data/build/dist/client/locale.js +185 -1
  62. package/data/build/dist/client/locale.js.map +1 -1
  63. package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -1
  64. package/data/build/dist/client/locales/terminalAuth.js +2 -0
  65. package/data/build/dist/client/locales/terminalAuth.js.map +1 -1
  66. package/data/build/dist/client/locales/usage.d.ts.map +1 -1
  67. package/data/build/dist/client/locales/usage.js +4 -0
  68. package/data/build/dist/client/locales/usage.js.map +1 -1
  69. package/data/build/dist/client/mobile-session-interaction.d.ts +9 -0
  70. package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -1
  71. package/data/build/dist/client/mobile-session-interaction.js +63 -0
  72. package/data/build/dist/client/mobile-session-interaction.js.map +1 -1
  73. package/data/build/dist/client/model-catalog-cache.d.ts +23 -0
  74. package/data/build/dist/client/model-catalog-cache.d.ts.map +1 -1
  75. package/data/build/dist/client/model-catalog-cache.js +81 -9
  76. package/data/build/dist/client/model-catalog-cache.js.map +1 -1
  77. package/data/build/dist/client/service-tier.d.ts +11 -0
  78. package/data/build/dist/client/service-tier.d.ts.map +1 -1
  79. package/data/build/dist/client/service-tier.js +15 -0
  80. package/data/build/dist/client/service-tier.js.map +1 -1
  81. package/data/build/dist/client/sherpa-voice-adapter.d.ts +46 -0
  82. package/data/build/dist/client/sherpa-voice-adapter.d.ts.map +1 -0
  83. package/data/build/dist/client/sherpa-voice-adapter.js +252 -0
  84. package/data/build/dist/client/sherpa-voice-adapter.js.map +1 -0
  85. package/data/build/dist/client/skill-command.d.ts +10 -0
  86. package/data/build/dist/client/skill-command.d.ts.map +1 -0
  87. package/data/build/dist/client/skill-command.js +258 -0
  88. package/data/build/dist/client/skill-command.js.map +1 -0
  89. package/data/build/dist/client/skill-reference-dom.d.ts +38 -0
  90. package/data/build/dist/client/skill-reference-dom.d.ts.map +1 -0
  91. package/data/build/dist/client/skill-reference-dom.js +187 -0
  92. package/data/build/dist/client/skill-reference-dom.js.map +1 -0
  93. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  94. package/data/build/dist/client/subscription-slot.js +51 -3
  95. package/data/build/dist/client/subscription-slot.js.map +1 -1
  96. package/data/build/dist/client/terminal/model.d.ts +40 -2
  97. package/data/build/dist/client/terminal/model.d.ts.map +1 -1
  98. package/data/build/dist/client/terminal/model.js +151 -24
  99. package/data/build/dist/client/terminal/model.js.map +1 -1
  100. package/data/build/dist/client/terminal/styles.d.ts +8 -0
  101. package/data/build/dist/client/terminal/styles.d.ts.map +1 -1
  102. package/data/build/dist/client/terminal/styles.js +23 -2
  103. package/data/build/dist/client/terminal/styles.js.map +1 -1
  104. package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
  105. package/data/build/dist/client/terminal/ui.js +161 -26
  106. package/data/build/dist/client/terminal/ui.js.map +1 -1
  107. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
  108. package/data/build/dist/client/terminal/xterm-view.js +218 -42
  109. package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
  110. package/data/build/dist/client/voice-capture.d.ts +32 -0
  111. package/data/build/dist/client/voice-capture.d.ts.map +1 -0
  112. package/data/build/dist/client/voice-capture.js +158 -0
  113. package/data/build/dist/client/voice-capture.js.map +1 -0
  114. package/data/build/dist/client/voice-device-manager.d.ts +24 -0
  115. package/data/build/dist/client/voice-device-manager.d.ts.map +1 -0
  116. package/data/build/dist/client/voice-device-manager.js +197 -0
  117. package/data/build/dist/client/voice-device-manager.js.map +1 -0
  118. package/data/build/dist/client/voice-output.d.ts +14 -0
  119. package/data/build/dist/client/voice-output.d.ts.map +1 -0
  120. package/data/build/dist/client/voice-output.js +32 -0
  121. package/data/build/dist/client/voice-output.js.map +1 -0
  122. package/data/build/dist/client/voice-security.d.ts +8 -0
  123. package/data/build/dist/client/voice-security.d.ts.map +1 -0
  124. package/data/build/dist/client/voice-security.js +26 -0
  125. package/data/build/dist/client/voice-security.js.map +1 -0
  126. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +12 -1
  127. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
  128. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +32 -0
  129. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
  130. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +15 -0
  131. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  132. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +39 -9
  133. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  134. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts +39 -2
  135. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts.map +1 -1
  136. package/data/build/dist/host/cli-adapters/antigravity-driver.js +198 -10
  137. package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -1
  138. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts +121 -0
  139. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts.map +1 -0
  140. package/data/build/dist/host/cli-adapters/antigravity-subscription.js +504 -0
  141. package/data/build/dist/host/cli-adapters/antigravity-subscription.js.map +1 -0
  142. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +21 -0
  143. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  144. package/data/build/dist/host/cli-adapters/claude-driver.js +173 -7
  145. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  146. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -1
  147. package/data/build/dist/host/cli-adapters/codebuddy-driver.js +4 -0
  148. package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -1
  149. package/data/build/dist/host/cli-adapters/codex-driver.d.ts +28 -2
  150. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  151. package/data/build/dist/host/cli-adapters/codex-driver.js +234 -5
  152. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  153. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  154. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  155. package/data/build/dist/host/cli-adapters/command-code-subscription.js +7 -4
  156. package/data/build/dist/host/cli-adapters/command-code-subscription.js.map +1 -1
  157. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts +9 -0
  158. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts.map +1 -1
  159. package/data/build/dist/host/cli-adapters/cursor-driver.js +72 -2
  160. package/data/build/dist/host/cli-adapters/cursor-driver.js.map +1 -1
  161. package/data/build/dist/host/cli-adapters/driver.d.ts +21 -1
  162. package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -1
  163. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  164. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +15 -3
  165. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  166. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  167. package/data/build/dist/host/cli-adapters/feature.js +18 -1
  168. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  169. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
  170. package/data/build/dist/host/cli-adapters/gemini-driver.js +4 -0
  171. package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
  172. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  173. package/data/build/dist/host/cli-adapters/grok-driver.js +4 -0
  174. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  175. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
  176. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
  177. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
  178. package/data/build/dist/host/cli-adapters/kimi-driver.js +6 -6
  179. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
  180. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -1
  181. package/data/build/dist/host/cli-adapters/mcode-driver.js +2 -0
  182. package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -1
  183. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +49 -0
  184. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
  185. package/data/build/dist/host/cli-adapters/model-catalog.js +126 -0
  186. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
  187. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +11 -0
  188. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  189. package/data/build/dist/host/cli-adapters/opencode-driver.js +92 -8
  190. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  191. package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
  192. package/data/build/dist/host/cli-adapters/pi-driver.js +4 -0
  193. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  194. package/data/build/dist/host/cli-adapters/process-utils.d.ts +10 -3
  195. package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -1
  196. package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -1
  197. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +4 -1
  198. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
  199. package/data/build/dist/host/cli-adapters/provider-subscription.js +8 -1
  200. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
  201. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts +15 -0
  202. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts.map +1 -1
  203. package/data/build/dist/host/cli-adapters/qoder-driver.js +171 -3
  204. package/data/build/dist/host/cli-adapters/qoder-driver.js.map +1 -1
  205. package/data/build/dist/host/cli-adapters/qoder-subscription.js +3 -1
  206. package/data/build/dist/host/cli-adapters/qoder-subscription.js.map +1 -1
  207. package/data/build/dist/host/cli-adapters/reasoning-content.d.ts +11 -0
  208. package/data/build/dist/host/cli-adapters/reasoning-content.d.ts.map +1 -0
  209. package/data/build/dist/host/cli-adapters/reasoning-content.js +79 -0
  210. package/data/build/dist/host/cli-adapters/reasoning-content.js.map +1 -0
  211. package/data/build/dist/host/cli-adapters/registry.d.ts +24 -1
  212. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  213. package/data/build/dist/host/cli-adapters/registry.js +109 -4
  214. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  215. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts +3 -2
  216. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts.map +1 -1
  217. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js +8 -2
  218. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js.map +1 -1
  219. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +3 -2
  220. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  221. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +14 -2
  222. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  223. package/data/build/dist/host/cli-bridge/injections.d.ts +10 -1
  224. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
  225. package/data/build/dist/host/cli-bridge/injections.js +28 -8
  226. package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
  227. package/data/build/dist/host/features/assistant-dispatch.d.ts +45 -0
  228. package/data/build/dist/host/features/assistant-dispatch.d.ts.map +1 -0
  229. package/data/build/dist/host/features/assistant-dispatch.js +49 -0
  230. package/data/build/dist/host/features/assistant-dispatch.js.map +1 -0
  231. package/data/build/dist/host/features/assistant-intent.d.ts +46 -0
  232. package/data/build/dist/host/features/assistant-intent.d.ts.map +1 -0
  233. package/data/build/dist/host/features/assistant-intent.js +149 -0
  234. package/data/build/dist/host/features/assistant-intent.js.map +1 -0
  235. package/data/build/dist/host/features/assistant-scope-settings.d.ts +25 -0
  236. package/data/build/dist/host/features/assistant-scope-settings.d.ts.map +1 -0
  237. package/data/build/dist/host/features/assistant-scope-settings.js +33 -0
  238. package/data/build/dist/host/features/assistant-scope-settings.js.map +1 -0
  239. package/data/build/dist/host/features/assistant-scope.d.ts +79 -0
  240. package/data/build/dist/host/features/assistant-scope.d.ts.map +1 -0
  241. package/data/build/dist/host/features/assistant-scope.js +107 -0
  242. package/data/build/dist/host/features/assistant-scope.js.map +1 -0
  243. package/data/build/dist/host/features/assistant-session-index.d.ts +44 -0
  244. package/data/build/dist/host/features/assistant-session-index.d.ts.map +1 -0
  245. package/data/build/dist/host/features/assistant-session-index.js +109 -0
  246. package/data/build/dist/host/features/assistant-session-index.js.map +1 -0
  247. package/data/build/dist/host/features/assistant-summary.d.ts +28 -0
  248. package/data/build/dist/host/features/assistant-summary.d.ts.map +1 -0
  249. package/data/build/dist/host/features/assistant-summary.js +166 -0
  250. package/data/build/dist/host/features/assistant-summary.js.map +1 -0
  251. package/data/build/dist/host/features/assistant-voice-stream.d.ts +10 -0
  252. package/data/build/dist/host/features/assistant-voice-stream.d.ts.map +1 -0
  253. package/data/build/dist/host/features/assistant-voice-stream.js +106 -0
  254. package/data/build/dist/host/features/assistant-voice-stream.js.map +1 -0
  255. package/data/build/dist/host/features/assistant-voice-turn.d.ts +27 -0
  256. package/data/build/dist/host/features/assistant-voice-turn.d.ts.map +1 -0
  257. package/data/build/dist/host/features/assistant-voice-turn.js +54 -0
  258. package/data/build/dist/host/features/assistant-voice-turn.js.map +1 -0
  259. package/data/build/dist/host/features/assistant-waiting-state.d.ts +14 -0
  260. package/data/build/dist/host/features/assistant-waiting-state.d.ts.map +1 -0
  261. package/data/build/dist/host/features/assistant-waiting-state.js +17 -0
  262. package/data/build/dist/host/features/assistant-waiting-state.js.map +1 -0
  263. package/data/build/dist/host/features/global-voice-coordinator.d.ts +55 -0
  264. package/data/build/dist/host/features/global-voice-coordinator.d.ts.map +1 -0
  265. package/data/build/dist/host/features/global-voice-coordinator.js +221 -0
  266. package/data/build/dist/host/features/global-voice-coordinator.js.map +1 -0
  267. package/data/build/dist/host/features/global-voice-rpc.d.ts +25 -0
  268. package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -0
  269. package/data/build/dist/host/features/global-voice-rpc.js +862 -0
  270. package/data/build/dist/host/features/global-voice-rpc.js.map +1 -0
  271. package/data/build/dist/host/features/index.d.ts +10 -0
  272. package/data/build/dist/host/features/index.d.ts.map +1 -1
  273. package/data/build/dist/host/features/index.js +10 -0
  274. package/data/build/dist/host/features/index.js.map +1 -1
  275. package/data/build/dist/host/features/peer-host.d.ts +5 -0
  276. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  277. package/data/build/dist/host/features/peer-host.js +232 -2
  278. package/data/build/dist/host/features/peer-host.js.map +1 -1
  279. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts +42 -0
  280. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts.map +1 -0
  281. package/data/build/dist/host/features/sherpa-voice-runtime.js +193 -0
  282. package/data/build/dist/host/features/sherpa-voice-runtime.js.map +1 -0
  283. package/data/build/dist/host/features/types.d.ts +26 -0
  284. package/data/build/dist/host/features/types.d.ts.map +1 -1
  285. package/data/build/dist/host/features/voice-agent-actions.d.ts +26 -0
  286. package/data/build/dist/host/features/voice-agent-actions.d.ts.map +1 -0
  287. package/data/build/dist/host/features/voice-agent-actions.js +128 -0
  288. package/data/build/dist/host/features/voice-agent-actions.js.map +1 -0
  289. package/data/build/dist/host/features/voice-agent-service.d.ts +117 -0
  290. package/data/build/dist/host/features/voice-agent-service.d.ts.map +1 -0
  291. package/data/build/dist/host/features/voice-agent-service.js +243 -0
  292. package/data/build/dist/host/features/voice-agent-service.js.map +1 -0
  293. package/data/build/dist/host/features/voice-model-setup.d.ts +20 -0
  294. package/data/build/dist/host/features/voice-model-setup.d.ts.map +1 -0
  295. package/data/build/dist/host/features/voice-model-setup.js +89 -0
  296. package/data/build/dist/host/features/voice-model-setup.js.map +1 -0
  297. package/data/build/dist/host/index.d.ts +2 -2
  298. package/data/build/dist/host/index.d.ts.map +1 -1
  299. package/data/build/dist/host/index.js +7 -1
  300. package/data/build/dist/host/index.js.map +1 -1
  301. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  302. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -1
  303. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +53 -2
  304. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js.map +1 -1
  305. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +15 -1
  306. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
  307. package/data/build/dist/host/native-session-bridge.d.ts +2 -0
  308. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
  309. package/data/build/dist/host/native-session-bridge.js +1 -0
  310. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  311. package/data/build/dist/host/rpc.d.ts.map +1 -1
  312. package/data/build/dist/host/rpc.js +9 -4
  313. package/data/build/dist/host/rpc.js.map +1 -1
  314. package/data/build/dist/host/settings.d.ts.map +1 -1
  315. package/data/build/dist/host/settings.js +19 -1
  316. package/data/build/dist/host/settings.js.map +1 -1
  317. package/data/build/dist/host/terminal/backends/conpty-backend.js.map +1 -1
  318. package/data/build/dist/host/terminal/terminal-controller.d.ts.map +1 -1
  319. package/data/build/dist/host/terminal/terminal-controller.js +4 -0
  320. package/data/build/dist/host/terminal/terminal-controller.js.map +1 -1
  321. package/data/build/dist/host/terminal/terminal-service.d.ts +21 -1
  322. package/data/build/dist/host/terminal/terminal-service.d.ts.map +1 -1
  323. package/data/build/dist/host/terminal/terminal-service.js +118 -7
  324. package/data/build/dist/host/terminal/terminal-service.js.map +1 -1
  325. package/data/build/dist/index.d.ts +2 -2
  326. package/data/build/dist/index.d.ts.map +1 -1
  327. package/data/build/dist/index.js +1 -1
  328. package/data/build/dist/index.js.map +1 -1
  329. package/data/build/dist/shared/contracts/assistant.d.ts +70 -0
  330. package/data/build/dist/shared/contracts/assistant.d.ts.map +1 -0
  331. package/data/build/dist/shared/contracts/assistant.js +2 -0
  332. package/data/build/dist/shared/contracts/assistant.js.map +1 -0
  333. package/data/build/dist/shared/contracts/cli-adapter.d.ts +33 -1
  334. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  335. package/data/build/dist/shared/contracts/config.d.ts +30 -0
  336. package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
  337. package/data/build/dist/shared/contracts/config.js +20 -0
  338. package/data/build/dist/shared/contracts/config.js.map +1 -1
  339. package/data/build/dist/shared/contracts/errors.d.ts +2 -2
  340. package/data/build/dist/shared/contracts/errors.d.ts.map +1 -1
  341. package/data/build/dist/shared/contracts/subscription.d.ts +30 -0
  342. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
  343. package/data/build/dist/shared/contracts/subscription.js.map +1 -1
  344. package/data/build/dist/shared/contracts/terminal.d.ts +2 -0
  345. package/data/build/dist/shared/contracts/terminal.d.ts.map +1 -1
  346. package/data/build/dist/shared/contracts/version.d.ts +12 -5
  347. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  348. package/data/build/dist/shared/contracts/version.js +11 -4
  349. package/data/build/dist/shared/contracts/version.js.map +1 -1
  350. package/data/build/dist/shared/contracts/voice-runtime.d.ts +90 -0
  351. package/data/build/dist/shared/contracts/voice-runtime.d.ts.map +1 -0
  352. package/data/build/dist/shared/contracts/voice-runtime.js +16 -0
  353. package/data/build/dist/shared/contracts/voice-runtime.js.map +1 -0
  354. package/data/build/dist/shared/index.d.ts +8 -2
  355. package/data/build/dist/shared/index.d.ts.map +1 -1
  356. package/data/build/dist/shared/index.js +5 -1
  357. package/data/build/dist/shared/index.js.map +1 -1
  358. package/data/build/dist/shared/voice-models.d.ts +21 -0
  359. package/data/build/dist/shared/voice-models.d.ts.map +1 -0
  360. package/data/build/dist/shared/voice-models.js +27 -0
  361. package/data/build/dist/shared/voice-models.js.map +1 -0
  362. package/data/build/dist/shared/voice-stream.d.ts +42 -0
  363. package/data/build/dist/shared/voice-stream.d.ts.map +1 -0
  364. package/data/build/dist/shared/voice-stream.js +99 -0
  365. package/data/build/dist/shared/voice-stream.js.map +1 -0
  366. package/data/build/dist/shared/voice-text.d.ts +3 -0
  367. package/data/build/dist/shared/voice-text.d.ts.map +1 -0
  368. package/data/build/dist/shared/voice-text.js +14 -0
  369. package/data/build/dist/shared/voice-text.js.map +1 -0
  370. package/data/build/dist/typert.host.d.ts.map +1 -1
  371. package/data/build/dist/typert.host.js +1 -0
  372. package/data/build/dist/typert.host.js.map +1 -1
  373. package/package.json +56 -26
  374. package/profile/README.md +8 -5
  375. package/profile/package.json +5 -3
  376. package/profile/version.json +3 -3
  377. package/version.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"injections.js","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/injections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"injections.js","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/injections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { type AssistantScope, type AssistantScopeRejection } from './assistant-scope.js';
2
+ import type { AssistantDispatchMode, AssistantTargetRef } from './assistant-intent.js';
3
+ import type { SessionIndexEntry } from '../../shared/contracts/assistant.js';
4
+ export interface AssistantPromptRequest {
5
+ readonly requestId: string;
6
+ readonly sessionId: string;
7
+ readonly mode: AssistantDispatchMode;
8
+ readonly content: readonly [{
9
+ readonly type: 'text';
10
+ readonly text: string;
11
+ }];
12
+ readonly hostId?: string;
13
+ }
14
+ export interface AssistantDispatchContext {
15
+ readonly scope: AssistantScope;
16
+ readonly archivedSessionIds: ReadonlySet<string> | readonly string[];
17
+ readonly indexGeneration: number;
18
+ readonly entries: readonly SessionIndexEntry[];
19
+ }
20
+ export type AssistantDispatchResult = {
21
+ readonly ok: true;
22
+ readonly requestId: string;
23
+ readonly target: AssistantTargetRef;
24
+ readonly mode: AssistantDispatchMode;
25
+ } | {
26
+ readonly ok: false;
27
+ readonly code: 'invalid-request' | 'stale-target' | 'target-not-found' | 'scope-rejected';
28
+ readonly message: string;
29
+ readonly rejection?: AssistantScopeRejection;
30
+ };
31
+ export type AssistantPrompt = (request: AssistantPromptRequest) => unknown | Promise<unknown>;
32
+ /** 派发前再次校验当前索引代次、范围和归档状态;不自动取消归档。 */
33
+ export declare class AssistantDispatcher {
34
+ private readonly prompt;
35
+ private readonly sentRequestIds;
36
+ private readonly pendingRequestIds;
37
+ constructor(prompt: AssistantPrompt);
38
+ dispatch(request: {
39
+ readonly requestId: string;
40
+ readonly target: AssistantTargetRef;
41
+ readonly mode: AssistantDispatchMode;
42
+ readonly task: string;
43
+ }, context: AssistantDispatchContext): Promise<AssistantDispatchResult>;
44
+ }
45
+ //# sourceMappingURL=assistant-dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-dispatch.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AACpH,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAE5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAA;IACpE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAC/C;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC5H;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAA;CAAE,CAAA;AAE7L,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAE7F,qCAAqC;AACrC,qBAAa,mBAAmB;IAIlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsD;gBAE3D,MAAM,EAAE,eAAe;IAE9C,QAAQ,CACZ,OAAO,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EACzI,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC;CA8BpC"}
@@ -0,0 +1,49 @@
1
+ import { getAssistantScopeRejection } from './assistant-scope.js';
2
+ /** 派发前再次校验当前索引代次、范围和归档状态;不自动取消归档。 */
3
+ export class AssistantDispatcher {
4
+ prompt;
5
+ sentRequestIds = new Map();
6
+ pendingRequestIds = new Map();
7
+ constructor(prompt) {
8
+ this.prompt = prompt;
9
+ }
10
+ async dispatch(request, context) {
11
+ const requestId = request.requestId.trim();
12
+ const task = request.task.trim();
13
+ if (requestId === '' || task === '')
14
+ return { ok: false, code: 'invalid-request', message: '请求标识和任务内容不能为空' };
15
+ if (request.target.indexGeneration !== context.indexGeneration)
16
+ return { ok: false, code: 'stale-target', message: '索引已更新,请重新确认目标会话' };
17
+ const entry = context.entries.find((candidate) => candidate.sessionId === request.target.sessionId);
18
+ if (entry === undefined)
19
+ return { ok: false, code: 'target-not-found', message: '目标会话不存在或已退出索引' };
20
+ if (entry.workspaceId !== request.target.workspaceId || entry.hostId !== request.target.hostId) {
21
+ const mismatch = getAssistantScopeRejection(context.scope, { workspaceId: request.target.workspaceId, sessionId: request.target.sessionId }, context.archivedSessionIds);
22
+ return { ok: false, code: 'scope-rejected', message: mismatch?.message ?? '目标会话来源已变化', ...(mismatch === null ? {} : { rejection: mismatch }) };
23
+ }
24
+ const rejection = getAssistantScopeRejection(context.scope, { workspaceId: entry.workspaceId, sessionId: entry.sessionId }, context.archivedSessionIds);
25
+ if (rejection !== null)
26
+ return { ok: false, code: 'scope-rejected', message: rejection.message, rejection };
27
+ const sent = this.sentRequestIds.get(requestId);
28
+ if (sent !== undefined)
29
+ return sent;
30
+ const pending = this.pendingRequestIds.get(requestId);
31
+ if (pending !== undefined)
32
+ return await pending;
33
+ const operation = (async () => {
34
+ await this.prompt({ requestId, sessionId: request.target.sessionId, mode: request.mode, content: [{ type: 'text', text: task }], hostId: request.target.hostId });
35
+ const result = { ok: true, requestId, target: request.target, mode: request.mode };
36
+ this.sentRequestIds.set(requestId, result);
37
+ return result;
38
+ })();
39
+ this.pendingRequestIds.set(requestId, operation);
40
+ try {
41
+ return await operation;
42
+ }
43
+ finally {
44
+ if (this.pendingRequestIds.get(requestId) === operation)
45
+ this.pendingRequestIds.delete(requestId);
46
+ }
47
+ }
48
+ }
49
+ //# sourceMappingURL=assistant-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-dispatch.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type AssistantScope, type AssistantScopeRejection } from './assistant-scope.js';
2
+ import type { SessionIndexEntry } from '../../shared/contracts/assistant.js';
3
+ import type { AssistantExcludedTarget } from '../../shared/contracts/assistant.js';
4
+ export type AssistantIntentKind = 'summary' | 'dispatch' | 'clarify' | 'chat';
5
+ export type AssistantDispatchMode = 'queue' | 'steer';
6
+ export interface AssistantTargetRef {
7
+ readonly sessionId: string;
8
+ readonly workspaceId: string;
9
+ readonly hostId: string;
10
+ readonly indexGeneration: number;
11
+ }
12
+ export interface AssistantIntentOptions {
13
+ readonly scope?: AssistantScope;
14
+ readonly archivedSessionIds?: ReadonlySet<string> | readonly string[];
15
+ readonly indexGeneration?: number;
16
+ readonly excludedTargets?: readonly AssistantExcludedTarget[];
17
+ }
18
+ export interface AssistantIntent {
19
+ readonly kind: AssistantIntentKind;
20
+ readonly text: string;
21
+ readonly targetDescription?: string;
22
+ readonly task?: string;
23
+ readonly mode?: AssistantDispatchMode;
24
+ readonly target?: AssistantTargetRef;
25
+ readonly candidates?: readonly SessionIndexEntry[];
26
+ readonly reason?: string;
27
+ readonly rejection?: AssistantScopeRejection;
28
+ }
29
+ export type AssistantTargetResolution = {
30
+ readonly status: 'matched';
31
+ readonly target: AssistantTargetRef;
32
+ } | {
33
+ readonly status: 'clarify';
34
+ readonly reason: string;
35
+ readonly candidates: readonly SessionIndexEntry[];
36
+ } | {
37
+ readonly status: 'not-found';
38
+ readonly reason: string;
39
+ } | {
40
+ readonly status: 'rejected';
41
+ readonly rejection: AssistantScopeRejection;
42
+ };
43
+ /** 规则解析只做路由,不调用模型,也不产生派发副作用。 */
44
+ export declare function parseAssistantIntent(text: string, entries: readonly SessionIndexEntry[], options?: AssistantIntentOptions): AssistantIntent;
45
+ export declare function resolveAssistantTarget(description: string, entries: readonly SessionIndexEntry[], options?: AssistantIntentOptions): AssistantTargetResolution;
46
+ //# sourceMappingURL=assistant-intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-intent.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAElF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAA;AAC7E,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,CAAA;AAErD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAA;IACrE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAA;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAA;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAA;CAC7C;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAAE,GAC1G;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAA;CAAE,CAAA;AAEhF,gCAAgC;AAChC,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,OAAO,GAAE,sBAA2B,GACnC,eAAe,CAqCjB;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,OAAO,GAAE,sBAA2B,GACnC,yBAAyB,CAyC3B"}
@@ -0,0 +1,149 @@
1
+ import { getAssistantScopeRejection, } from './assistant-scope.js';
2
+ /** 规则解析只做路由,不调用模型,也不产生派发副作用。 */
3
+ export function parseAssistantIntent(text, entries, options = {}) {
4
+ const normalized = text.trim();
5
+ if (isSummaryIntent(normalized))
6
+ return { kind: 'summary', text: normalized };
7
+ const dispatch = parseDispatch(normalized);
8
+ if (dispatch === null)
9
+ return { kind: 'chat', text: normalized };
10
+ const resolution = resolveAssistantTarget(dispatch.targetDescription, entries, options);
11
+ if (resolution.status === 'matched') {
12
+ return {
13
+ kind: 'dispatch',
14
+ text: normalized,
15
+ targetDescription: dispatch.targetDescription,
16
+ task: dispatch.task,
17
+ mode: dispatch.mode,
18
+ target: resolution.target,
19
+ };
20
+ }
21
+ if (resolution.status === 'rejected') {
22
+ return {
23
+ kind: 'clarify',
24
+ text: normalized,
25
+ targetDescription: dispatch.targetDescription,
26
+ task: dispatch.task,
27
+ mode: dispatch.mode,
28
+ reason: resolution.rejection.message,
29
+ rejection: resolution.rejection,
30
+ };
31
+ }
32
+ return {
33
+ kind: 'clarify',
34
+ text: normalized,
35
+ targetDescription: dispatch.targetDescription,
36
+ task: dispatch.task,
37
+ mode: dispatch.mode,
38
+ reason: resolution.reason,
39
+ ...(resolution.status === 'clarify' ? { candidates: resolution.candidates } : {}),
40
+ };
41
+ }
42
+ export function resolveAssistantTarget(description, entries, options = {}) {
43
+ const candidates = entries.filter((entry) => entry.archived !== true);
44
+ const query = normalize(description);
45
+ if (query === '')
46
+ return { status: 'not-found', reason: '未提供目标会话描述' };
47
+ const exact = candidates.filter((entry) => normalize(entry.title ?? '') === query);
48
+ const exactResult = resolveCandidates(exact, options);
49
+ if (exactResult !== null)
50
+ return exactResult;
51
+ const contained = candidates.filter((entry) => normalize(entry.title ?? '').includes(query) || query.includes(normalize(entry.title ?? '')));
52
+ const containedResult = resolveCandidates(contained, options);
53
+ if (containedResult !== null)
54
+ return containedResult;
55
+ const ordinal = resolveOrdinalTarget(description, candidates);
56
+ if (ordinal !== null) {
57
+ const ordinalResult = resolveCandidates(ordinal, options);
58
+ if (ordinalResult !== null)
59
+ return ordinalResult;
60
+ }
61
+ if (/最近|刚刚|刚才|最新/u.test(description)) {
62
+ const sorted = [...candidates].sort((left, right) => (right.updatedAt ?? -Infinity) - (left.updatedAt ?? -Infinity));
63
+ const newestTime = sorted[0]?.updatedAt;
64
+ if (newestTime !== undefined && newestTime !== null) {
65
+ const newest = sorted.filter((entry) => entry.updatedAt === newestTime);
66
+ const recentResult = resolveCandidates(newest, options);
67
+ if (recentResult !== null)
68
+ return recentResult;
69
+ }
70
+ }
71
+ const excluded = (options.excludedTargets ?? []).filter((entry) => {
72
+ const title = normalize(entry.title ?? '');
73
+ const sessionId = normalize(entry.sessionId);
74
+ return (title !== '' && (title === query || title.includes(query) || query.includes(title))) || sessionId === query || sessionId.includes(query);
75
+ });
76
+ if (excluded.length === 1) {
77
+ const entry = excluded[0];
78
+ if (entry.archived)
79
+ return { status: 'rejected', rejection: { code: 'session-archived', sessionId: entry.sessionId, message: `会话「${entry.title ?? entry.sessionId}」已归档,不在助理索引范围内` } };
80
+ return { status: 'rejected', rejection: { code: 'workspace-outside-scope', workspaceId: entry.workspaceId, message: `工作区「${entry.workspaceName || entry.workspaceId}」不在助理受管范围内` } };
81
+ }
82
+ return { status: 'not-found', reason: `找不到受管范围内的会话「${description}」` };
83
+ }
84
+ function resolveCandidates(candidates, options) {
85
+ if (candidates.length === 0)
86
+ return null;
87
+ if (candidates.length > 1) {
88
+ return { status: 'clarify', reason: '目标会话不唯一,请说明工作区或完整标题', candidates };
89
+ }
90
+ const entry = candidates[0];
91
+ if (!entry)
92
+ return null;
93
+ if (options.scope !== undefined) {
94
+ const rejection = getAssistantScopeRejection(options.scope, {
95
+ workspaceId: entry.workspaceId,
96
+ sessionId: entry.sessionId,
97
+ }, options.archivedSessionIds ?? []);
98
+ if (rejection !== null)
99
+ return { status: 'rejected', rejection };
100
+ }
101
+ return {
102
+ status: 'matched',
103
+ target: {
104
+ sessionId: entry.sessionId,
105
+ workspaceId: entry.workspaceId,
106
+ hostId: entry.hostId,
107
+ indexGeneration: options.indexGeneration ?? 0,
108
+ },
109
+ };
110
+ }
111
+ function parseDispatch(text) {
112
+ const match = /^(?:请|请让|让|叫|通知)\s*(.+?)\s*(?:去|来)?\s*(?:做|执行|处理|完成|运行|跑|修复|检查|改)\s*(.+)$/u.exec(text)
113
+ ?? /^(?:帮我|麻烦你|麻烦)\s*(?:把)?\s*(.+?)\s*(?:处理|完成|运行|跑|修复|检查|改)\s*(.+?)(?:一下)?$/u.exec(text)
114
+ ?? /^(?:请在|在)\s*(.+?)\s*(?:里|中)?\s*(?:做|执行|处理|运行|跑|修复|检查|改)\s*(.+)$/u.exec(text);
115
+ if (!match?.[1] || !match[2])
116
+ return null;
117
+ const targetDescription = match[1].trim();
118
+ const task = match[2].trim();
119
+ if (targetDescription === '' || task === '')
120
+ return null;
121
+ return { targetDescription, task, mode: /立即|马上|立刻|打断|改方向|停止当前/u.test(text) ? 'steer' : 'queue' };
122
+ }
123
+ function isSummaryIntent(text) {
124
+ return /进展|状态|在跑|运行中|完成了什么|有什么任务|汇总|总结|待处理|等我处理/u.test(text) && !/让|叫|通知/u.test(text);
125
+ }
126
+ function resolveOrdinalTarget(description, entries) {
127
+ const match = /(?:工作区\s*)?(.+?)?\s*(?:第\s*([一二三四五六七八九十\d]+)\s*个|第\s*([一二三四五六七八九十\d]+)\s*个会话)/u.exec(description);
128
+ if (!match)
129
+ return null;
130
+ const workspace = match[1]?.trim();
131
+ const ordinalText = match[2] ?? match[3];
132
+ const ordinal = parseChineseNumber(ordinalText);
133
+ if (ordinal === null || ordinal < 1)
134
+ return [];
135
+ const scoped = workspace === undefined || workspace === '' ? entries : entries.filter((entry) => normalize(entry.workspaceName).includes(normalize(workspace)));
136
+ return scoped.slice(ordinal - 1, ordinal);
137
+ }
138
+ function parseChineseNumber(value) {
139
+ if (value === undefined)
140
+ return null;
141
+ if (/^\d+$/u.test(value))
142
+ return Number(value);
143
+ const values = { 一: 1, 二: 2, 三: 3, 四: 4, 五: 5, 六: 6, 七: 7, 八: 8, 九: 9, 十: 10 };
144
+ return values[value] ?? null;
145
+ }
146
+ function normalize(value) {
147
+ return value.toLocaleLowerCase('zh-CN').replace(/[\s,。!?、,.!?]/gu, '');
148
+ }
149
+ //# sourceMappingURL=assistant-intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-intent.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-intent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { getAssistantScopeState, type AssistantScope } from './assistant-scope.js';
2
+ export interface AssistantScopeSettingsStore {
3
+ read(): readonly string[] | Promise<readonly string[]>;
4
+ write(workspaceIds: readonly string[]): void | Promise<void>;
5
+ }
6
+ export interface AssistantScopeSettingsSnapshot {
7
+ readonly scope: AssistantScope;
8
+ readonly state: ReturnType<typeof getAssistantScopeState>;
9
+ }
10
+ export type AssistantScopeChangedListener = (snapshot: AssistantScopeSettingsSnapshot) => void;
11
+ /**
12
+ * 受管范围的注入式设置边界。默认空范围,只有用户显式调用 setManagedWorkspaceIds
13
+ * 才会改变选择;真实设置服务在外围注入,不让纯逻辑依赖 DSH。
14
+ */
15
+ export declare class AssistantScopeSettings {
16
+ private readonly store;
17
+ private scope;
18
+ private readonly listeners;
19
+ constructor(store: AssistantScopeSettingsStore);
20
+ load(): Promise<AssistantScopeSettingsSnapshot>;
21
+ snapshot(): AssistantScopeSettingsSnapshot;
22
+ setManagedWorkspaceIds(workspaceIds: readonly string[]): Promise<AssistantScopeSettingsSnapshot>;
23
+ subscribe(listener: AssistantScopeChangedListener): () => void;
24
+ }
25
+ //# sourceMappingURL=assistant-scope-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-scope-settings.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-scope-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAExG,MAAM,WAAW,2BAA2B;IAC1C,IAAI,IAAI,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAA;IACtD,KAAK,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D;AACD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAA;CAC1D;AAED,MAAM,MAAM,6BAA6B,GAAG,CAAC,QAAQ,EAAE,8BAA8B,KAAK,IAAI,CAAA;AAE9F;;;GAGG;AACH,qBAAa,sBAAsB;IAIrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;gBAExC,KAAK,EAAE,2BAA2B;IAEzD,IAAI,IAAI,OAAO,CAAC,8BAA8B,CAAC;IAKrD,QAAQ,IAAI,8BAA8B;IAIpC,sBAAsB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAQtG,SAAS,CAAC,QAAQ,EAAE,6BAA6B,GAAG,MAAM,IAAI;CAI/D"}
@@ -0,0 +1,33 @@
1
+ import { createAssistantScope, getAssistantScopeState } from './assistant-scope.js';
2
+ /**
3
+ * 受管范围的注入式设置边界。默认空范围,只有用户显式调用 setManagedWorkspaceIds
4
+ * 才会改变选择;真实设置服务在外围注入,不让纯逻辑依赖 DSH。
5
+ */
6
+ export class AssistantScopeSettings {
7
+ store;
8
+ scope = createAssistantScope([]);
9
+ listeners = new Set();
10
+ constructor(store) {
11
+ this.store = store;
12
+ }
13
+ async load() {
14
+ this.scope = createAssistantScope(await this.store.read());
15
+ return this.snapshot();
16
+ }
17
+ snapshot() {
18
+ return { scope: this.scope, state: getAssistantScopeState(this.scope) };
19
+ }
20
+ async setManagedWorkspaceIds(workspaceIds) {
21
+ this.scope = createAssistantScope(workspaceIds);
22
+ await this.store.write(this.scope.managedWorkspaceIds);
23
+ const snapshot = this.snapshot();
24
+ for (const listener of [...this.listeners])
25
+ listener(snapshot);
26
+ return snapshot;
27
+ }
28
+ subscribe(listener) {
29
+ this.listeners.add(listener);
30
+ return () => this.listeners.delete(listener);
31
+ }
32
+ }
33
+ //# sourceMappingURL=assistant-scope-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-scope-settings.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-scope-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAA;AAaxG;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IAIJ;IAHrB,KAAK,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAA;IACvB,SAAS,GAAG,IAAI,GAAG,EAAiC,CAAA;IAErE,YAA6B,KAAkC;QAAlC,UAAK,GAAL,KAAK,CAA6B;IAAG,CAAC;IAEnE,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,YAA+B;QAC1D,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAA;QAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAChC,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC9D,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,SAAS,CAAC,QAAuC;QAC/C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC9C,CAAC;CACF"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * 编程助理的受管范围契约。
3
+ *
4
+ * 这个模块只处理值和集合,不读取 DSH 服务,也不保存状态。索引层、意图层和
5
+ * 派发层都必须先经过这里,才能保证「受管工作区 ∩ 未归档会话」只有一种实现。
6
+ */
7
+ /** 用户显式勾选的工作区范围;归档会话永远不会被纳入。 */
8
+ export interface AssistantScope {
9
+ readonly managedWorkspaceIds: readonly string[];
10
+ readonly includeArchived: false;
11
+ }
12
+ /** 参与范围计算的最小会话形状。 */
13
+ export interface AssistantScopeSession {
14
+ readonly sessionId: string;
15
+ readonly workspaceId: string;
16
+ }
17
+ /** 受管范围为空时必须向上层暴露的明确状态。 */
18
+ export type AssistantScopeState = {
19
+ readonly status: 'empty';
20
+ readonly reason: 'no-managed-workspaces';
21
+ readonly message: '尚未选择任何工作区';
22
+ } | {
23
+ readonly status: 'ready';
24
+ readonly managedWorkspaceIds: readonly string[];
25
+ };
26
+ /** 范围过滤的结果,同时保留空范围状态,避免把空范围误报成「没有进展」。 */
27
+ export interface AssistantScopeFilterResult<T> {
28
+ readonly state: AssistantScopeState;
29
+ readonly sessions: readonly T[];
30
+ }
31
+ /** 派发或查询目标被范围边界拒绝时的结构化原因。 */
32
+ export type AssistantScopeRejection = {
33
+ readonly code: 'scope-empty';
34
+ readonly message: string;
35
+ } | {
36
+ readonly code: 'workspace-outside-scope';
37
+ readonly workspaceId: string;
38
+ readonly message: string;
39
+ } | {
40
+ readonly code: 'session-archived';
41
+ readonly sessionId: string;
42
+ readonly message: string;
43
+ };
44
+ /** 可以用于目标校验的最小目标形状。 */
45
+ export interface AssistantScopeTarget {
46
+ readonly workspaceId: string;
47
+ readonly sessionId?: string;
48
+ }
49
+ /**
50
+ * 创建规范化的受管范围。
51
+ *
52
+ * 工作区 ID 会去除首尾空白、删除空值并去重,顺序按用户输入保留。每次调用
53
+ * 都返回新数组,不会修改调用方传入的数组。
54
+ */
55
+ export declare function createAssistantScope(managedWorkspaceIds: readonly string[]): AssistantScope;
56
+ /** 判断用户是否还没有显式勾选任何工作区。 */
57
+ export declare function isAssistantScopeEmpty(scope: AssistantScope): boolean;
58
+ /** 返回可直接供 UI 或语音层使用的范围状态。 */
59
+ export declare function getAssistantScopeState(scope: AssistantScope): AssistantScopeState;
60
+ /**
61
+ * 返回受管范围内且未归档的会话。
62
+ *
63
+ * 归档集合接受 Set 或数组,便于直接接入 workspaceRegistry 的快照;函数只读
64
+ * 输入集合,不会为了过滤而修改任何对象。空范围返回空数组,但调用方若需要
65
+ * 展示原因,应同时读取 getAssistantScopeState 或使用 filterAssistantSessions。
66
+ */
67
+ export declare function filterSessionsByAssistantScope<T extends AssistantScopeSession>(sessions: readonly T[], scope: AssistantScope, archivedSessionIds: ReadonlySet<string> | readonly string[]): readonly T[];
68
+ /** 过滤并返回范围状态,避免空范围被误解为「没有符合条件的会话」。 */
69
+ export declare function filterAssistantSessions<T extends AssistantScopeSession>(sessions: readonly T[], scope: AssistantScope, archivedSessionIds: ReadonlySet<string> | readonly string[]): AssistantScopeFilterResult<T>;
70
+ /**
71
+ * 校验目标是否仍在助理可访问范围内。
72
+ *
73
+ * 返回 null 表示允许;返回结构化原因表示必须拒绝,调用方不得继续读取或派发。
74
+ * 归档判断放在工作区判断之后,保证空范围和范围外目标不会泄露归档状态。
75
+ */
76
+ export declare function getAssistantScopeRejection(scope: AssistantScope, target: AssistantScopeTarget, archivedSessionIds: ReadonlySet<string> | readonly string[]): AssistantScopeRejection | null;
77
+ /** 返回目标是否可以被助理读取或派发。 */
78
+ export declare function isAssistantScopeTargetAllowed(scope: AssistantScope, target: AssistantScopeTarget, archivedSessionIds: ReadonlySet<string> | readonly string[]): boolean;
79
+ //# sourceMappingURL=assistant-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-scope.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * 编程助理的受管范围契约。
3
+ *
4
+ * 这个模块只处理值和集合,不读取 DSH 服务,也不保存状态。索引层、意图层和
5
+ * 派发层都必须先经过这里,才能保证「受管工作区 ∩ 未归档会话」只有一种实现。
6
+ */
7
+ const EMPTY_SCOPE_MESSAGE = '尚未选择任何工作区';
8
+ /**
9
+ * 创建规范化的受管范围。
10
+ *
11
+ * 工作区 ID 会去除首尾空白、删除空值并去重,顺序按用户输入保留。每次调用
12
+ * 都返回新数组,不会修改调用方传入的数组。
13
+ */
14
+ export function createAssistantScope(managedWorkspaceIds) {
15
+ return {
16
+ managedWorkspaceIds: normalizeWorkspaceIds(managedWorkspaceIds),
17
+ includeArchived: false,
18
+ };
19
+ }
20
+ /** 判断用户是否还没有显式勾选任何工作区。 */
21
+ export function isAssistantScopeEmpty(scope) {
22
+ return normalizeWorkspaceIds(scope.managedWorkspaceIds).length === 0;
23
+ }
24
+ /** 返回可直接供 UI 或语音层使用的范围状态。 */
25
+ export function getAssistantScopeState(scope) {
26
+ const managedWorkspaceIds = normalizeWorkspaceIds(scope.managedWorkspaceIds);
27
+ if (managedWorkspaceIds.length === 0) {
28
+ return {
29
+ status: 'empty',
30
+ reason: 'no-managed-workspaces',
31
+ message: EMPTY_SCOPE_MESSAGE,
32
+ };
33
+ }
34
+ return { status: 'ready', managedWorkspaceIds };
35
+ }
36
+ /**
37
+ * 返回受管范围内且未归档的会话。
38
+ *
39
+ * 归档集合接受 Set 或数组,便于直接接入 workspaceRegistry 的快照;函数只读
40
+ * 输入集合,不会为了过滤而修改任何对象。空范围返回空数组,但调用方若需要
41
+ * 展示原因,应同时读取 getAssistantScopeState 或使用 filterAssistantSessions。
42
+ */
43
+ export function filterSessionsByAssistantScope(sessions, scope, archivedSessionIds) {
44
+ const managedWorkspaceIds = normalizeWorkspaceIds(scope.managedWorkspaceIds);
45
+ if (managedWorkspaceIds.length === 0)
46
+ return [];
47
+ const managed = new Set(managedWorkspaceIds);
48
+ const archived = toReadonlySet(archivedSessionIds);
49
+ return sessions.filter((session) => managed.has(session.workspaceId) && !archived.has(session.sessionId));
50
+ }
51
+ /** 过滤并返回范围状态,避免空范围被误解为「没有符合条件的会话」。 */
52
+ export function filterAssistantSessions(sessions, scope, archivedSessionIds) {
53
+ return {
54
+ state: getAssistantScopeState(scope),
55
+ sessions: filterSessionsByAssistantScope(sessions, scope, archivedSessionIds),
56
+ };
57
+ }
58
+ /**
59
+ * 校验目标是否仍在助理可访问范围内。
60
+ *
61
+ * 返回 null 表示允许;返回结构化原因表示必须拒绝,调用方不得继续读取或派发。
62
+ * 归档判断放在工作区判断之后,保证空范围和范围外目标不会泄露归档状态。
63
+ */
64
+ export function getAssistantScopeRejection(scope, target, archivedSessionIds) {
65
+ const managedWorkspaceIds = normalizeWorkspaceIds(scope.managedWorkspaceIds);
66
+ if (managedWorkspaceIds.length === 0) {
67
+ return {
68
+ code: 'scope-empty',
69
+ message: '尚未选择任何工作区,无法访问会话;请打开全局智能助理设置并勾选工作区后重试',
70
+ };
71
+ }
72
+ if (!managedWorkspaceIds.includes(target.workspaceId)) {
73
+ return {
74
+ code: 'workspace-outside-scope',
75
+ workspaceId: target.workspaceId,
76
+ message: `工作区「${target.workspaceId}」不在助理受管范围内;请打开全局智能助理设置并勾选该工作区后重试`,
77
+ };
78
+ }
79
+ if (target.sessionId !== undefined && toReadonlySet(archivedSessionIds).has(target.sessionId)) {
80
+ return {
81
+ code: 'session-archived',
82
+ sessionId: target.sessionId,
83
+ message: `会话「${target.sessionId}」已归档,不在助理索引范围内`,
84
+ };
85
+ }
86
+ return null;
87
+ }
88
+ /** 返回目标是否可以被助理读取或派发。 */
89
+ export function isAssistantScopeTargetAllowed(scope, target, archivedSessionIds) {
90
+ return getAssistantScopeRejection(scope, target, archivedSessionIds) === null;
91
+ }
92
+ function toReadonlySet(values) {
93
+ return values instanceof Set ? values : new Set(values);
94
+ }
95
+ function normalizeWorkspaceIds(workspaceIds) {
96
+ const result = [];
97
+ const seen = new Set();
98
+ for (const rawId of workspaceIds) {
99
+ const id = rawId.trim();
100
+ if (id === '' || seen.has(id))
101
+ continue;
102
+ seen.add(id);
103
+ result.push(id);
104
+ }
105
+ return result;
106
+ }
107
+ //# sourceMappingURL=assistant-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-scope.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-scope.ts"],"names":[],"mappings":"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"}