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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/README.en.md +27 -16
  2. package/README.md +44 -29
  3. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts +1 -1
  4. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts.map +1 -1
  5. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js +2 -2
  6. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js.map +1 -1
  7. package/data/build/dist/bootstrap/index.d.ts +1 -1
  8. package/data/build/dist/bootstrap/index.d.ts.map +1 -1
  9. package/data/build/dist/client/bundle.js +3361 -227
  10. package/data/build/dist/client/bundle.js.map +1 -1
  11. package/data/build/dist/client/cli-catalog.d.ts +1 -1
  12. package/data/build/dist/client/cli-catalog.d.ts.map +1 -1
  13. package/data/build/dist/client/cli-catalog.js +3 -3
  14. package/data/build/dist/client/cli-catalog.js.map +1 -1
  15. package/data/build/dist/client/cli-slots.d.ts +4 -0
  16. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  17. package/data/build/dist/client/cli-slots.js +70 -9
  18. package/data/build/dist/client/cli-slots.js.map +1 -1
  19. package/data/build/dist/client/context-breakdown-dom.d.ts +1 -1
  20. package/data/build/dist/client/context-breakdown-dom.d.ts.map +1 -1
  21. package/data/build/dist/client/context-breakdown-dom.js +1 -1
  22. package/data/build/dist/client/context-breakdown-dom.js.map +1 -1
  23. package/data/build/dist/client/features/assistant-panel.d.ts +5 -0
  24. package/data/build/dist/client/features/assistant-panel.d.ts.map +1 -0
  25. package/data/build/dist/client/features/assistant-panel.js +127 -0
  26. package/data/build/dist/client/features/assistant-panel.js.map +1 -0
  27. package/data/build/dist/client/features/global-voice-assistant.d.ts +10 -0
  28. package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -0
  29. package/data/build/dist/client/features/global-voice-assistant.js +330 -0
  30. package/data/build/dist/client/features/global-voice-assistant.js.map +1 -0
  31. package/data/build/dist/client/features/index.d.ts +2 -0
  32. package/data/build/dist/client/features/index.d.ts.map +1 -1
  33. package/data/build/dist/client/features/index.js +4 -0
  34. package/data/build/dist/client/features/index.js.map +1 -1
  35. package/data/build/dist/client/features/lan-access.d.ts.map +1 -1
  36. package/data/build/dist/client/features/lan-access.js +3 -1
  37. package/data/build/dist/client/features/lan-access.js.map +1 -1
  38. package/data/build/dist/client/features/types.d.ts +4 -1
  39. package/data/build/dist/client/features/types.d.ts.map +1 -1
  40. package/data/build/dist/client/features/voice-conversation-dialog.d.ts +20 -0
  41. package/data/build/dist/client/features/voice-conversation-dialog.d.ts.map +1 -0
  42. package/data/build/dist/client/features/voice-conversation-dialog.js +59 -0
  43. package/data/build/dist/client/features/voice-conversation-dialog.js.map +1 -0
  44. package/data/build/dist/client/features/voice-initialization-dialog.d.ts +10 -0
  45. package/data/build/dist/client/features/voice-initialization-dialog.d.ts.map +1 -0
  46. package/data/build/dist/client/features/voice-initialization-dialog.js +90 -0
  47. package/data/build/dist/client/features/voice-initialization-dialog.js.map +1 -0
  48. package/data/build/dist/client/features/workspace-session-enhancement-panel.d.ts.map +1 -1
  49. package/data/build/dist/client/features/workspace-session-enhancement-panel.js +57 -2
  50. package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -1
  51. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
  52. package/data/build/dist/client/features/workspace-session-enhancement.js +27 -0
  53. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
  54. package/data/build/dist/client/global-voice-runtime-registry.d.ts +27 -0
  55. package/data/build/dist/client/global-voice-runtime-registry.d.ts.map +1 -0
  56. package/data/build/dist/client/global-voice-runtime-registry.js +12 -0
  57. package/data/build/dist/client/global-voice-runtime-registry.js.map +1 -0
  58. package/data/build/dist/client/index.d.ts +1 -1
  59. package/data/build/dist/client/index.d.ts.map +1 -1
  60. package/data/build/dist/client/locale.d.ts.map +1 -1
  61. package/data/build/dist/client/locale.js +185 -1
  62. package/data/build/dist/client/locale.js.map +1 -1
  63. package/data/build/dist/client/locales/fileWorkspace.d.ts.map +1 -1
  64. package/data/build/dist/client/locales/fileWorkspace.js +4 -0
  65. package/data/build/dist/client/locales/fileWorkspace.js.map +1 -1
  66. package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -1
  67. package/data/build/dist/client/locales/terminalAuth.js +2 -0
  68. package/data/build/dist/client/locales/terminalAuth.js.map +1 -1
  69. package/data/build/dist/client/locales/usage.d.ts.map +1 -1
  70. package/data/build/dist/client/locales/usage.js +4 -0
  71. package/data/build/dist/client/locales/usage.js.map +1 -1
  72. package/data/build/dist/client/mobile-session-interaction.d.ts +9 -0
  73. package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -1
  74. package/data/build/dist/client/mobile-session-interaction.js +63 -0
  75. package/data/build/dist/client/mobile-session-interaction.js.map +1 -1
  76. package/data/build/dist/client/model-catalog-cache.d.ts +23 -0
  77. package/data/build/dist/client/model-catalog-cache.d.ts.map +1 -1
  78. package/data/build/dist/client/model-catalog-cache.js +81 -9
  79. package/data/build/dist/client/model-catalog-cache.js.map +1 -1
  80. package/data/build/dist/client/service-tier.d.ts +11 -0
  81. package/data/build/dist/client/service-tier.d.ts.map +1 -1
  82. package/data/build/dist/client/service-tier.js +15 -0
  83. package/data/build/dist/client/service-tier.js.map +1 -1
  84. package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -1
  85. package/data/build/dist/client/session-changed-files-view.js +162 -58
  86. package/data/build/dist/client/session-changed-files-view.js.map +1 -1
  87. package/data/build/dist/client/sherpa-voice-adapter.d.ts +46 -0
  88. package/data/build/dist/client/sherpa-voice-adapter.d.ts.map +1 -0
  89. package/data/build/dist/client/sherpa-voice-adapter.js +252 -0
  90. package/data/build/dist/client/sherpa-voice-adapter.js.map +1 -0
  91. package/data/build/dist/client/skill-command.d.ts +10 -0
  92. package/data/build/dist/client/skill-command.d.ts.map +1 -0
  93. package/data/build/dist/client/skill-command.js +258 -0
  94. package/data/build/dist/client/skill-command.js.map +1 -0
  95. package/data/build/dist/client/skill-reference-dom.d.ts +38 -0
  96. package/data/build/dist/client/skill-reference-dom.d.ts.map +1 -0
  97. package/data/build/dist/client/skill-reference-dom.js +187 -0
  98. package/data/build/dist/client/skill-reference-dom.js.map +1 -0
  99. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  100. package/data/build/dist/client/subscription-slot.js +51 -3
  101. package/data/build/dist/client/subscription-slot.js.map +1 -1
  102. package/data/build/dist/client/terminal/model.d.ts +40 -2
  103. package/data/build/dist/client/terminal/model.d.ts.map +1 -1
  104. package/data/build/dist/client/terminal/model.js +151 -24
  105. package/data/build/dist/client/terminal/model.js.map +1 -1
  106. package/data/build/dist/client/terminal/styles.d.ts +8 -0
  107. package/data/build/dist/client/terminal/styles.d.ts.map +1 -1
  108. package/data/build/dist/client/terminal/styles.js +23 -2
  109. package/data/build/dist/client/terminal/styles.js.map +1 -1
  110. package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
  111. package/data/build/dist/client/terminal/ui.js +161 -26
  112. package/data/build/dist/client/terminal/ui.js.map +1 -1
  113. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
  114. package/data/build/dist/client/terminal/xterm-view.js +218 -42
  115. package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
  116. package/data/build/dist/client/voice-capture.d.ts +32 -0
  117. package/data/build/dist/client/voice-capture.d.ts.map +1 -0
  118. package/data/build/dist/client/voice-capture.js +158 -0
  119. package/data/build/dist/client/voice-capture.js.map +1 -0
  120. package/data/build/dist/client/voice-device-manager.d.ts +24 -0
  121. package/data/build/dist/client/voice-device-manager.d.ts.map +1 -0
  122. package/data/build/dist/client/voice-device-manager.js +197 -0
  123. package/data/build/dist/client/voice-device-manager.js.map +1 -0
  124. package/data/build/dist/client/voice-output.d.ts +14 -0
  125. package/data/build/dist/client/voice-output.d.ts.map +1 -0
  126. package/data/build/dist/client/voice-output.js +32 -0
  127. package/data/build/dist/client/voice-output.js.map +1 -0
  128. package/data/build/dist/client/voice-security.d.ts +8 -0
  129. package/data/build/dist/client/voice-security.d.ts.map +1 -0
  130. package/data/build/dist/client/voice-security.js +26 -0
  131. package/data/build/dist/client/voice-security.js.map +1 -0
  132. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +12 -1
  133. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
  134. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +32 -0
  135. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
  136. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +23 -3
  137. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  138. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +137 -14
  139. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  140. package/data/build/dist/host/cli-adapters/acp-elicitation.d.ts +31 -0
  141. package/data/build/dist/host/cli-adapters/acp-elicitation.d.ts.map +1 -0
  142. package/data/build/dist/host/cli-adapters/acp-elicitation.js +144 -0
  143. package/data/build/dist/host/cli-adapters/acp-elicitation.js.map +1 -0
  144. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts +41 -3
  145. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts.map +1 -1
  146. package/data/build/dist/host/cli-adapters/antigravity-driver.js +213 -12
  147. package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -1
  148. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts +121 -0
  149. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts.map +1 -0
  150. package/data/build/dist/host/cli-adapters/antigravity-subscription.js +504 -0
  151. package/data/build/dist/host/cli-adapters/antigravity-subscription.js.map +1 -0
  152. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +31 -1
  153. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  154. package/data/build/dist/host/cli-adapters/claude-driver.js +307 -9
  155. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  156. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts +7 -1
  157. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -1
  158. package/data/build/dist/host/cli-adapters/codebuddy-driver.js +147 -6
  159. package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -1
  160. package/data/build/dist/host/cli-adapters/codex-driver.d.ts +28 -2
  161. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  162. package/data/build/dist/host/cli-adapters/codex-driver.js +234 -5
  163. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  164. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  165. package/data/build/dist/host/cli-adapters/command-code-driver.js +20 -8
  166. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  167. package/data/build/dist/host/cli-adapters/command-code-subscription.js +7 -4
  168. package/data/build/dist/host/cli-adapters/command-code-subscription.js.map +1 -1
  169. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts +10 -1
  170. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts.map +1 -1
  171. package/data/build/dist/host/cli-adapters/cursor-driver.js +74 -4
  172. package/data/build/dist/host/cli-adapters/cursor-driver.js.map +1 -1
  173. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js +1 -1
  174. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js.map +1 -1
  175. package/data/build/dist/host/cli-adapters/driver.d.ts +21 -1
  176. package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -1
  177. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  178. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +15 -3
  179. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  180. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  181. package/data/build/dist/host/cli-adapters/feature.js +22 -3
  182. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  183. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts +2 -1
  184. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
  185. package/data/build/dist/host/cli-adapters/gemini-driver.js +70 -11
  186. package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
  187. package/data/build/dist/host/cli-adapters/grok-driver.d.ts +3 -2
  188. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  189. package/data/build/dist/host/cli-adapters/grok-driver.js +69 -14
  190. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  191. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
  192. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
  193. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
  194. package/data/build/dist/host/cli-adapters/kimi-driver.js +6 -6
  195. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
  196. package/data/build/dist/host/cli-adapters/kiro-driver.js +1 -1
  197. package/data/build/dist/host/cli-adapters/kiro-driver.js.map +1 -1
  198. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts +6 -2
  199. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -1
  200. package/data/build/dist/host/cli-adapters/mcode-driver.js +95 -24
  201. package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -1
  202. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +49 -0
  203. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
  204. package/data/build/dist/host/cli-adapters/model-catalog.js +126 -0
  205. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
  206. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +55 -1
  207. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -1
  208. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +148 -6
  209. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -1
  210. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +7 -0
  211. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -1
  212. package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -1
  213. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +11 -0
  214. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  215. package/data/build/dist/host/cli-adapters/opencode-driver.js +92 -8
  216. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  217. package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
  218. package/data/build/dist/host/cli-adapters/pi-driver.js +4 -0
  219. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  220. package/data/build/dist/host/cli-adapters/process-utils.d.ts +10 -3
  221. package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -1
  222. package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -1
  223. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +4 -1
  224. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
  225. package/data/build/dist/host/cli-adapters/provider-subscription.js +8 -1
  226. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
  227. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts +19 -4
  228. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts.map +1 -1
  229. package/data/build/dist/host/cli-adapters/qoder-driver.js +202 -11
  230. package/data/build/dist/host/cli-adapters/qoder-driver.js.map +1 -1
  231. package/data/build/dist/host/cli-adapters/qoder-subscription.js +3 -1
  232. package/data/build/dist/host/cli-adapters/qoder-subscription.js.map +1 -1
  233. package/data/build/dist/host/cli-adapters/reasoning-content.d.ts +11 -0
  234. package/data/build/dist/host/cli-adapters/reasoning-content.d.ts.map +1 -0
  235. package/data/build/dist/host/cli-adapters/reasoning-content.js +79 -0
  236. package/data/build/dist/host/cli-adapters/reasoning-content.js.map +1 -0
  237. package/data/build/dist/host/cli-adapters/registry.d.ts +24 -1
  238. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  239. package/data/build/dist/host/cli-adapters/registry.js +109 -4
  240. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  241. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts +3 -2
  242. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts.map +1 -1
  243. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js +8 -2
  244. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js.map +1 -1
  245. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +3 -2
  246. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  247. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +16 -2
  248. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  249. package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -1
  250. package/data/build/dist/host/cli-adapters/subagent-tool.js +40 -10
  251. package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -1
  252. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts +4 -1
  253. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts.map +1 -1
  254. package/data/build/dist/host/cli-bridge/bridge-holder.js.map +1 -1
  255. package/data/build/dist/host/cli-bridge/bridge-server.d.ts +11 -3
  256. package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -1
  257. package/data/build/dist/host/cli-bridge/bridge-server.js +8 -4
  258. package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -1
  259. package/data/build/dist/host/cli-bridge/command-code-mod.js +18 -2
  260. package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -1
  261. package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -1
  262. package/data/build/dist/host/cli-bridge/dispatch.js +30 -5
  263. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
  264. package/data/build/dist/host/cli-bridge/injections.d.ts +10 -1
  265. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
  266. package/data/build/dist/host/cli-bridge/injections.js +30 -10
  267. package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
  268. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +49 -7
  269. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -1
  270. package/data/build/dist/host/features/assistant-dispatch.d.ts +45 -0
  271. package/data/build/dist/host/features/assistant-dispatch.d.ts.map +1 -0
  272. package/data/build/dist/host/features/assistant-dispatch.js +49 -0
  273. package/data/build/dist/host/features/assistant-dispatch.js.map +1 -0
  274. package/data/build/dist/host/features/assistant-intent.d.ts +46 -0
  275. package/data/build/dist/host/features/assistant-intent.d.ts.map +1 -0
  276. package/data/build/dist/host/features/assistant-intent.js +149 -0
  277. package/data/build/dist/host/features/assistant-intent.js.map +1 -0
  278. package/data/build/dist/host/features/assistant-scope-settings.d.ts +25 -0
  279. package/data/build/dist/host/features/assistant-scope-settings.d.ts.map +1 -0
  280. package/data/build/dist/host/features/assistant-scope-settings.js +33 -0
  281. package/data/build/dist/host/features/assistant-scope-settings.js.map +1 -0
  282. package/data/build/dist/host/features/assistant-scope.d.ts +79 -0
  283. package/data/build/dist/host/features/assistant-scope.d.ts.map +1 -0
  284. package/data/build/dist/host/features/assistant-scope.js +107 -0
  285. package/data/build/dist/host/features/assistant-scope.js.map +1 -0
  286. package/data/build/dist/host/features/assistant-session-index.d.ts +44 -0
  287. package/data/build/dist/host/features/assistant-session-index.d.ts.map +1 -0
  288. package/data/build/dist/host/features/assistant-session-index.js +109 -0
  289. package/data/build/dist/host/features/assistant-session-index.js.map +1 -0
  290. package/data/build/dist/host/features/assistant-summary.d.ts +28 -0
  291. package/data/build/dist/host/features/assistant-summary.d.ts.map +1 -0
  292. package/data/build/dist/host/features/assistant-summary.js +166 -0
  293. package/data/build/dist/host/features/assistant-summary.js.map +1 -0
  294. package/data/build/dist/host/features/assistant-voice-stream.d.ts +10 -0
  295. package/data/build/dist/host/features/assistant-voice-stream.d.ts.map +1 -0
  296. package/data/build/dist/host/features/assistant-voice-stream.js +106 -0
  297. package/data/build/dist/host/features/assistant-voice-stream.js.map +1 -0
  298. package/data/build/dist/host/features/assistant-voice-turn.d.ts +27 -0
  299. package/data/build/dist/host/features/assistant-voice-turn.d.ts.map +1 -0
  300. package/data/build/dist/host/features/assistant-voice-turn.js +54 -0
  301. package/data/build/dist/host/features/assistant-voice-turn.js.map +1 -0
  302. package/data/build/dist/host/features/assistant-waiting-state.d.ts +14 -0
  303. package/data/build/dist/host/features/assistant-waiting-state.d.ts.map +1 -0
  304. package/data/build/dist/host/features/assistant-waiting-state.js +17 -0
  305. package/data/build/dist/host/features/assistant-waiting-state.js.map +1 -0
  306. package/data/build/dist/host/features/global-voice-coordinator.d.ts +55 -0
  307. package/data/build/dist/host/features/global-voice-coordinator.d.ts.map +1 -0
  308. package/data/build/dist/host/features/global-voice-coordinator.js +221 -0
  309. package/data/build/dist/host/features/global-voice-coordinator.js.map +1 -0
  310. package/data/build/dist/host/features/global-voice-rpc.d.ts +25 -0
  311. package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -0
  312. package/data/build/dist/host/features/global-voice-rpc.js +862 -0
  313. package/data/build/dist/host/features/global-voice-rpc.js.map +1 -0
  314. package/data/build/dist/host/features/index.d.ts +10 -0
  315. package/data/build/dist/host/features/index.d.ts.map +1 -1
  316. package/data/build/dist/host/features/index.js +10 -0
  317. package/data/build/dist/host/features/index.js.map +1 -1
  318. package/data/build/dist/host/features/peer-host.d.ts +5 -0
  319. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  320. package/data/build/dist/host/features/peer-host.js +232 -2
  321. package/data/build/dist/host/features/peer-host.js.map +1 -1
  322. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts +42 -0
  323. package/data/build/dist/host/features/sherpa-voice-runtime.d.ts.map +1 -0
  324. package/data/build/dist/host/features/sherpa-voice-runtime.js +193 -0
  325. package/data/build/dist/host/features/sherpa-voice-runtime.js.map +1 -0
  326. package/data/build/dist/host/features/types.d.ts +26 -0
  327. package/data/build/dist/host/features/types.d.ts.map +1 -1
  328. package/data/build/dist/host/features/voice-agent-actions.d.ts +26 -0
  329. package/data/build/dist/host/features/voice-agent-actions.d.ts.map +1 -0
  330. package/data/build/dist/host/features/voice-agent-actions.js +128 -0
  331. package/data/build/dist/host/features/voice-agent-actions.js.map +1 -0
  332. package/data/build/dist/host/features/voice-agent-service.d.ts +117 -0
  333. package/data/build/dist/host/features/voice-agent-service.d.ts.map +1 -0
  334. package/data/build/dist/host/features/voice-agent-service.js +243 -0
  335. package/data/build/dist/host/features/voice-agent-service.js.map +1 -0
  336. package/data/build/dist/host/features/voice-model-setup.d.ts +20 -0
  337. package/data/build/dist/host/features/voice-model-setup.d.ts.map +1 -0
  338. package/data/build/dist/host/features/voice-model-setup.js +89 -0
  339. package/data/build/dist/host/features/voice-model-setup.js.map +1 -0
  340. package/data/build/dist/host/index.d.ts +3 -3
  341. package/data/build/dist/host/index.d.ts.map +1 -1
  342. package/data/build/dist/host/index.js +8 -2
  343. package/data/build/dist/host/index.js.map +1 -1
  344. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  345. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -1
  346. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +53 -2
  347. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js.map +1 -1
  348. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +15 -1
  349. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
  350. package/data/build/dist/host/native-session-bridge.d.ts +2 -0
  351. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
  352. package/data/build/dist/host/native-session-bridge.js +1 -0
  353. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  354. package/data/build/dist/host/rpc.d.ts.map +1 -1
  355. package/data/build/dist/host/rpc.js +9 -4
  356. package/data/build/dist/host/rpc.js.map +1 -1
  357. package/data/build/dist/host/settings.d.ts.map +1 -1
  358. package/data/build/dist/host/settings.js +19 -1
  359. package/data/build/dist/host/settings.js.map +1 -1
  360. package/data/build/dist/host/terminal/backends/conpty-backend.js.map +1 -1
  361. package/data/build/dist/host/terminal/terminal-controller.d.ts.map +1 -1
  362. package/data/build/dist/host/terminal/terminal-controller.js +4 -0
  363. package/data/build/dist/host/terminal/terminal-controller.js.map +1 -1
  364. package/data/build/dist/host/terminal/terminal-service.d.ts +21 -1
  365. package/data/build/dist/host/terminal/terminal-service.d.ts.map +1 -1
  366. package/data/build/dist/host/terminal/terminal-service.js +118 -7
  367. package/data/build/dist/host/terminal/terminal-service.js.map +1 -1
  368. package/data/build/dist/index.d.ts +2 -2
  369. package/data/build/dist/index.d.ts.map +1 -1
  370. package/data/build/dist/index.js +1 -1
  371. package/data/build/dist/index.js.map +1 -1
  372. package/data/build/dist/shared/contracts/assistant.d.ts +70 -0
  373. package/data/build/dist/shared/contracts/assistant.d.ts.map +1 -0
  374. package/data/build/dist/shared/contracts/assistant.js +2 -0
  375. package/data/build/dist/shared/contracts/assistant.js.map +1 -0
  376. package/data/build/dist/shared/contracts/cli-adapter.d.ts +33 -1
  377. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  378. package/data/build/dist/shared/contracts/config.d.ts +30 -0
  379. package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
  380. package/data/build/dist/shared/contracts/config.js +20 -0
  381. package/data/build/dist/shared/contracts/config.js.map +1 -1
  382. package/data/build/dist/shared/contracts/errors.d.ts +2 -2
  383. package/data/build/dist/shared/contracts/errors.d.ts.map +1 -1
  384. package/data/build/dist/shared/contracts/subscription.d.ts +30 -0
  385. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
  386. package/data/build/dist/shared/contracts/subscription.js.map +1 -1
  387. package/data/build/dist/shared/contracts/terminal.d.ts +2 -0
  388. package/data/build/dist/shared/contracts/terminal.d.ts.map +1 -1
  389. package/data/build/dist/shared/contracts/version.d.ts +12 -5
  390. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  391. package/data/build/dist/shared/contracts/version.js +11 -4
  392. package/data/build/dist/shared/contracts/version.js.map +1 -1
  393. package/data/build/dist/shared/contracts/voice-runtime.d.ts +90 -0
  394. package/data/build/dist/shared/contracts/voice-runtime.d.ts.map +1 -0
  395. package/data/build/dist/shared/contracts/voice-runtime.js +16 -0
  396. package/data/build/dist/shared/contracts/voice-runtime.js.map +1 -0
  397. package/data/build/dist/shared/index.d.ts +8 -2
  398. package/data/build/dist/shared/index.d.ts.map +1 -1
  399. package/data/build/dist/shared/index.js +5 -1
  400. package/data/build/dist/shared/index.js.map +1 -1
  401. package/data/build/dist/shared/voice-models.d.ts +21 -0
  402. package/data/build/dist/shared/voice-models.d.ts.map +1 -0
  403. package/data/build/dist/shared/voice-models.js +27 -0
  404. package/data/build/dist/shared/voice-models.js.map +1 -0
  405. package/data/build/dist/shared/voice-stream.d.ts +42 -0
  406. package/data/build/dist/shared/voice-stream.d.ts.map +1 -0
  407. package/data/build/dist/shared/voice-stream.js +99 -0
  408. package/data/build/dist/shared/voice-stream.js.map +1 -0
  409. package/data/build/dist/shared/voice-text.d.ts +3 -0
  410. package/data/build/dist/shared/voice-text.d.ts.map +1 -0
  411. package/data/build/dist/shared/voice-text.js +14 -0
  412. package/data/build/dist/shared/voice-text.js.map +1 -0
  413. package/data/build/dist/typert.host.d.ts.map +1 -1
  414. package/data/build/dist/typert.host.js +1 -0
  415. package/data/build/dist/typert.host.js.map +1 -1
  416. package/package.json +56 -26
  417. package/profile/README.md +8 -5
  418. package/profile/package.json +5 -3
  419. package/profile/version.json +3 -3
  420. package/version.json +3 -3
@@ -0,0 +1,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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"}
@@ -0,0 +1,44 @@
1
+ import { type AssistantScope, type AssistantScopeSession } from './assistant-scope.js';
2
+ import type { AssistantIndexSnapshot, AssistantWaitingKind } from '../../shared/contracts/assistant.js';
3
+ export interface AssistantSessionSourceRecord extends AssistantScopeSession {
4
+ readonly workspaceName: string;
5
+ readonly hostId: string;
6
+ readonly running: boolean;
7
+ readonly completed: boolean;
8
+ readonly error?: boolean;
9
+ readonly updatedAt: number | null;
10
+ readonly waiting: AssistantWaitingKind | null;
11
+ readonly title?: string | null;
12
+ /** 可选的语义标题事件,必须取最后一条。 */
13
+ readonly titleEvents?: readonly (string | null | undefined)[];
14
+ readonly summary?: string | null;
15
+ }
16
+ export interface AssistantSessionIndexBuildOptions {
17
+ readonly sessions: readonly AssistantSessionSourceRecord[];
18
+ readonly scope: AssistantScope;
19
+ readonly archivedSessionIds: ReadonlySet<string> | readonly string[];
20
+ readonly generation?: number;
21
+ /** 只对过滤后的会话调用;实现方应使用 readSurface 等语义读取。 */
22
+ readonly readSummary?: (session: AssistantSessionSourceRecord) => string | null | Promise<string | null>;
23
+ /** 只对过滤后的会话调用;用于补充 SessionSummary 未提供的审批/提问状态。 */
24
+ readonly readWaiting?: (session: AssistantSessionSourceRecord) => AssistantWaitingKind | null | Promise<AssistantWaitingKind | null>;
25
+ }
26
+ export interface AssistantSessionIndexSnapshot extends AssistantIndexSnapshot {
27
+ }
28
+ /** 负责范围/归档快照变化时立即重建索引;不修改历史记录。 */
29
+ export declare class AssistantSessionIndexController {
30
+ private readonly sessions;
31
+ private scope;
32
+ private archivedSessionIds;
33
+ private generation;
34
+ private snapshotValue;
35
+ constructor(sessions: readonly AssistantSessionSourceRecord[], scope: AssistantScope, archivedSessionIds?: readonly string[]);
36
+ refresh(): Promise<AssistantSessionIndexSnapshot>;
37
+ setScope(scope: AssistantScope): Promise<AssistantSessionIndexSnapshot>;
38
+ setArchivedSessionIds(ids: readonly string[]): Promise<AssistantSessionIndexSnapshot>;
39
+ snapshot(): AssistantSessionIndexSnapshot | null;
40
+ }
41
+ export declare function buildAssistantSessionIndex(options: AssistantSessionIndexBuildOptions): Promise<AssistantSessionIndexSnapshot>;
42
+ /** 最后一条有效 session/title 事件胜出;暂态空值不覆盖已有标题。 */
43
+ export declare function lastSessionTitle(events: readonly (string | null | undefined)[] | undefined): string | null;
44
+ //# sourceMappingURL=assistant-session-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-session-index.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-session-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAA2B,sBAAsB,EAAE,oBAAoB,EAAqB,MAAM,qCAAqC,CAAA;AAEnJ,MAAM,WAAW,4BAA6B,SAAQ,qBAAqB;IACzE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAA;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,yBAAyB;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAA;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,QAAQ,EAAE,SAAS,4BAA4B,EAAE,CAAA;IAC1D,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAA;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,4BAA4B,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACxG,kDAAkD;IAClD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,4BAA4B,KAAK,oBAAoB,GAAG,IAAI,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAA;CACrI;AAED,MAAM,WAAW,6BAA8B,SAAQ,sBAAsB;CAC5E;AAED,kCAAkC;AAClC,qBAAa,+BAA+B;IAMxC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,KAAK;IANf,OAAO,CAAC,kBAAkB,CAAmB;IAC7C,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,aAAa,CAA6C;gBAG/C,QAAQ,EAAE,SAAS,4BAA4B,EAAE,EAC1D,KAAK,EAAE,cAAc,EAC7B,kBAAkB,GAAE,SAAS,MAAM,EAAO;IAKtC,OAAO,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAUjD,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAKvE,qBAAqB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAK3F,QAAQ,IAAI,6BAA6B,GAAG,IAAI;CAGjD;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,6BAA6B,CAAC,CA4DxC;AAED,6CAA6C;AAC7C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO1G"}
@@ -0,0 +1,109 @@
1
+ import { filterAssistantSessions, } from './assistant-scope.js';
2
+ /** 负责范围/归档快照变化时立即重建索引;不修改历史记录。 */
3
+ export class AssistantSessionIndexController {
4
+ sessions;
5
+ scope;
6
+ archivedSessionIds;
7
+ generation = 0;
8
+ snapshotValue = null;
9
+ constructor(sessions, scope, archivedSessionIds = []) {
10
+ this.sessions = sessions;
11
+ this.scope = scope;
12
+ this.archivedSessionIds = [...archivedSessionIds];
13
+ }
14
+ async refresh() {
15
+ this.snapshotValue = await buildAssistantSessionIndex({
16
+ sessions: this.sessions,
17
+ scope: this.scope,
18
+ archivedSessionIds: this.archivedSessionIds,
19
+ generation: ++this.generation,
20
+ });
21
+ return this.snapshotValue;
22
+ }
23
+ async setScope(scope) {
24
+ this.scope = scope;
25
+ return this.refresh();
26
+ }
27
+ async setArchivedSessionIds(ids) {
28
+ this.archivedSessionIds = [...ids];
29
+ return this.refresh();
30
+ }
31
+ snapshot() {
32
+ return this.snapshotValue;
33
+ }
34
+ }
35
+ export async function buildAssistantSessionIndex(options) {
36
+ const filtered = filterAssistantSessions(options.sessions, options.scope, options.archivedSessionIds);
37
+ const includedIds = new Set(filtered.sessions.map((session) => session.sessionId));
38
+ const archivedIds = options.archivedSessionIds instanceof Set ? options.archivedSessionIds : new Set(options.archivedSessionIds);
39
+ const excludedTargets = options.sessions
40
+ .filter((session) => !includedIds.has(session.sessionId))
41
+ .map((session) => ({
42
+ sessionId: session.sessionId,
43
+ title: lastSessionTitle(session.titleEvents) ?? session.title ?? null,
44
+ workspaceId: session.workspaceId,
45
+ workspaceName: session.workspaceName,
46
+ hostId: session.hostId,
47
+ archived: archivedIds.has(session.sessionId),
48
+ }));
49
+ let unreadableCount = 0;
50
+ const entries = [];
51
+ for (const session of filtered.sessions) {
52
+ let summary = session.summary ?? null;
53
+ let waiting = session.waiting;
54
+ if (options.readSummary !== undefined) {
55
+ try {
56
+ summary = await options.readSummary(session);
57
+ }
58
+ catch {
59
+ unreadableCount += 1;
60
+ summary = null;
61
+ }
62
+ }
63
+ if (options.readWaiting !== undefined) {
64
+ try {
65
+ // 读取器返回 null 就是权威的“当前没有等待”,用于清除旧快照状态。
66
+ waiting = await options.readWaiting(session);
67
+ }
68
+ catch {
69
+ // 单个会话的等待状态读取失败不应阻断其他会话索引。
70
+ }
71
+ }
72
+ const status = waiting !== null
73
+ ? 'waiting'
74
+ : session.error === true
75
+ ? 'error'
76
+ : session.running
77
+ ? 'running'
78
+ : session.completed
79
+ ? 'completed'
80
+ : 'unknown';
81
+ entries.push({
82
+ sessionId: session.sessionId,
83
+ title: lastSessionTitle(session.titleEvents) ?? session.title ?? null,
84
+ workspaceId: session.workspaceId,
85
+ workspaceName: session.workspaceName,
86
+ hostId: session.hostId,
87
+ running: session.running,
88
+ completed: session.completed,
89
+ status,
90
+ ...(session.error === undefined ? {} : { error: session.error }),
91
+ updatedAt: session.updatedAt,
92
+ waiting,
93
+ summary,
94
+ });
95
+ }
96
+ return { generation: options.generation ?? 0, entries, excludedTargets, scope: filtered.state, unreadableCount };
97
+ }
98
+ /** 最后一条有效 session/title 事件胜出;暂态空值不覆盖已有标题。 */
99
+ export function lastSessionTitle(events) {
100
+ if (events === undefined)
101
+ return null;
102
+ let title = null;
103
+ for (const value of events) {
104
+ if (typeof value === 'string' && value.trim() !== '')
105
+ title = value;
106
+ }
107
+ return title;
108
+ }
109
+ //# sourceMappingURL=assistant-session-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-session-index.js","sourceRoot":"","sources":["../../../../../src/host/features/assistant-session-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AssistantIndexSnapshot, AssistantProgressSummary, AssistantSummaryCategory, AssistantSummaryOptions, SessionIndexEntry } from '../../shared/contracts/assistant.js';
2
+ export interface AssistantSummaryGroups {
3
+ readonly waiting: readonly SessionIndexEntry[];
4
+ readonly error: readonly SessionIndexEntry[];
5
+ readonly running: readonly SessionIndexEntry[];
6
+ readonly completed: readonly SessionIndexEntry[];
7
+ }
8
+ export interface AssistantSummary {
9
+ readonly groups: AssistantSummaryGroups;
10
+ readonly unreadableCount: number;
11
+ readonly speechText: string;
12
+ }
13
+ export type { AssistantSummaryCategory };
14
+ /**
15
+ * 把索引快照转换成可播报文本。函数只读输入,不读取 DSH 服务,也不修改索引。
16
+ * 组别顺序固定为待处理、出错、运行中、已完成,避免重要事项被截断。
17
+ */
18
+ export declare function summarizeAssistantIndex(snapshot: AssistantIndexSnapshot): AssistantSummary;
19
+ /** 便于动作层直接传入索引条目。 */
20
+ export declare function summarizeAssistantEntries(entries: readonly SessionIndexEntry[], scope: AssistantIndexSnapshot['scope'], generation?: number, unreadableCount?: number, maxChars?: number): AssistantSummary;
21
+ /** 兼容动作层使用的命名:输入索引条目,输出完整进展摘要。 */
22
+ export declare function summarizeAssistantSessions(entries: readonly SessionIndexEntry[], options?: AssistantSummaryOptions): AssistantProgressSummary;
23
+ export declare const buildAssistantSummary: typeof summarizeAssistantSessions;
24
+ export declare const normalizeSpeechText: typeof sanitizeSpeechText;
25
+ export declare function redactSensitiveValues(value: string): string;
26
+ /** 清理 Markdown、URL、代码和常见凭据形态,结果可直接交给 TTS。 */
27
+ export declare function sanitizeSpeechText(value: string): string;
28
+ //# sourceMappingURL=assistant-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-summary.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/assistant-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EAEvB,iBAAiB,EAClB,MAAM,qCAAqC,CAAA;AAE5C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,YAAY,EAAE,wBAAwB,EAAE,CAAA;AAExC;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,gBAAgB,CA0B1F;AAED,qBAAqB;AACrB,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACtC,UAAU,SAAI,EACd,eAAe,SAAI,EACnB,QAAQ,SAAQ,GACf,gBAAgB,CAQlB;AAED,kCAAkC;AAClC,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,OAAO,GAAE,uBAA4B,GACpC,wBAAwB,CAiB1B;AAED,eAAO,MAAM,qBAAqB,mCAA6B,CAAA;AAE/D,eAAO,MAAM,mBAAmB,2BAAqB,CAAA;AAErD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI3D;AAwCD,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASxD"}