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

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 (459) hide show
  1. package/README.en.md +134 -159
  2. package/README.md +128 -261
  3. package/assets/provider-icons/doubao.png +0 -0
  4. package/data/build/dist/client/account-bar.d.ts +1 -1
  5. package/data/build/dist/client/account-bar.d.ts.map +1 -1
  6. package/data/build/dist/client/account-bar.js +22 -14
  7. package/data/build/dist/client/account-bar.js.map +1 -1
  8. package/data/build/dist/client/adapter-catalog-watch.d.ts +8 -0
  9. package/data/build/dist/client/adapter-catalog-watch.d.ts.map +1 -0
  10. package/data/build/dist/client/adapter-catalog-watch.js +79 -0
  11. package/data/build/dist/client/adapter-catalog-watch.js.map +1 -0
  12. package/data/build/dist/client/avatar/catalog-panel.d.ts +1 -1
  13. package/data/build/dist/client/avatar/catalog-panel.d.ts.map +1 -1
  14. package/data/build/dist/client/avatar/catalog-panel.js +13 -11
  15. package/data/build/dist/client/avatar/catalog-panel.js.map +1 -1
  16. package/data/build/dist/client/avatar/engine.d.ts.map +1 -1
  17. package/data/build/dist/client/avatar/engine.js +26 -7
  18. package/data/build/dist/client/avatar/engine.js.map +1 -1
  19. package/data/build/dist/client/avatar/live2d.d.ts +2 -0
  20. package/data/build/dist/client/avatar/live2d.d.ts.map +1 -1
  21. package/data/build/dist/client/avatar/live2d.js +16 -6
  22. package/data/build/dist/client/avatar/live2d.js.map +1 -1
  23. package/data/build/dist/client/avatar/manager.d.ts.map +1 -1
  24. package/data/build/dist/client/avatar/manager.js +8 -2
  25. package/data/build/dist/client/avatar/manager.js.map +1 -1
  26. package/data/build/dist/client/avatar/slot.d.ts.map +1 -1
  27. package/data/build/dist/client/avatar/slot.js +4 -1
  28. package/data/build/dist/client/avatar/slot.js.map +1 -1
  29. package/data/build/dist/client/bundle.js +48459 -98385
  30. package/data/build/dist/client/bundle.js.map +1 -1
  31. package/data/build/dist/client/cli-catalog.d.ts +5 -0
  32. package/data/build/dist/client/cli-catalog.d.ts.map +1 -1
  33. package/data/build/dist/client/cli-catalog.js +15 -0
  34. package/data/build/dist/client/cli-catalog.js.map +1 -1
  35. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  36. package/data/build/dist/client/cli-slots.js +7 -45
  37. package/data/build/dist/client/cli-slots.js.map +1 -1
  38. package/data/build/dist/client/client.assistant-configuration-view.js +4526 -0
  39. package/data/build/dist/client/client.assistant-configuration-view.js.map +1 -0
  40. package/data/build/dist/client/client.assistant-debug-workbench.js +764 -0
  41. package/data/build/dist/client/client.assistant-debug-workbench.js.map +1 -0
  42. package/data/build/dist/client/client.assistant-prompt-editor.js +76 -0
  43. package/data/build/dist/client/client.assistant-prompt-editor.js.map +1 -0
  44. package/data/build/dist/client/client.assistant-prompts.js +44 -0
  45. package/data/build/dist/client/client.assistant-prompts.js.map +1 -0
  46. package/data/build/dist/client/client.assistant-voice-sessions.js +144 -0
  47. package/data/build/dist/client/client.assistant-voice-sessions.js.map +1 -0
  48. package/data/build/dist/client/client.assistant-workbench.js +2929 -0
  49. package/data/build/dist/client/client.assistant-workbench.js.map +1 -0
  50. package/data/build/dist/client/client.delegate-command.js +1315 -0
  51. package/data/build/dist/client/client.delegate-command.js.map +1 -0
  52. package/data/build/dist/client/client.editor-engine.js +32486 -0
  53. package/data/build/dist/client/client.editor-engine.js.map +1 -0
  54. package/data/build/dist/client/client.manager.js +3454 -0
  55. package/data/build/dist/client/client.manager.js.map +1 -0
  56. package/data/build/dist/client/client.model-catalog-cache.js +543 -0
  57. package/data/build/dist/client/client.model-catalog-cache.js.map +1 -0
  58. package/data/build/dist/client/client.native-workspace-store.js +689 -0
  59. package/data/build/dist/client/client.native-workspace-store.js.map +1 -0
  60. package/data/build/dist/client/client.primitives-adapter.js +333 -0
  61. package/data/build/dist/client/client.primitives-adapter.js.map +1 -0
  62. package/data/build/dist/client/client.react-dom.js +7286 -0
  63. package/data/build/dist/client/client.react-dom.js.map +1 -0
  64. package/data/build/dist/client/client.rolldown-runtime.js +59 -0
  65. package/data/build/dist/client/client.theme.js +386 -0
  66. package/data/build/dist/client/client.theme.js.map +1 -0
  67. package/data/build/dist/client/client.transport.js +3323 -0
  68. package/data/build/dist/client/client.transport.js.map +1 -0
  69. package/data/build/dist/client/client.xterm-engine.js +13064 -0
  70. package/data/build/dist/client/client.xterm-engine.js.map +1 -0
  71. package/data/build/dist/client/debug/ui.d.ts.map +1 -1
  72. package/data/build/dist/client/debug/ui.js +14 -5
  73. package/data/build/dist/client/debug/ui.js.map +1 -1
  74. package/data/build/dist/client/desktop-assistant.js +19 -5
  75. package/data/build/dist/client/editor-engine.d.ts +4 -0
  76. package/data/build/dist/client/editor-engine.d.ts.map +1 -0
  77. package/data/build/dist/client/editor-engine.js +50 -0
  78. package/data/build/dist/client/editor-engine.js.map +1 -0
  79. package/data/build/dist/client/engine-loader.d.ts +5 -0
  80. package/data/build/dist/client/engine-loader.d.ts.map +1 -0
  81. package/data/build/dist/client/engine-loader.js +35 -0
  82. package/data/build/dist/client/engine-loader.js.map +1 -0
  83. package/data/build/dist/client/features/assistant-configuration-loader.d.ts +14 -0
  84. package/data/build/dist/client/features/assistant-configuration-loader.d.ts.map +1 -0
  85. package/data/build/dist/client/features/assistant-configuration-loader.js +13 -0
  86. package/data/build/dist/client/features/assistant-configuration-loader.js.map +1 -0
  87. package/data/build/dist/client/features/assistant-configuration-session.d.ts.map +1 -1
  88. package/data/build/dist/client/features/assistant-configuration-session.js +13 -4
  89. package/data/build/dist/client/features/assistant-configuration-session.js.map +1 -1
  90. package/data/build/dist/client/features/assistant-configuration-view.d.ts +66 -0
  91. package/data/build/dist/client/features/assistant-configuration-view.d.ts.map +1 -0
  92. package/data/build/dist/client/features/assistant-configuration-view.js +133 -0
  93. package/data/build/dist/client/features/assistant-configuration-view.js.map +1 -0
  94. package/data/build/dist/client/features/assistant-debug-workbench.d.ts +4 -11
  95. package/data/build/dist/client/features/assistant-debug-workbench.d.ts.map +1 -1
  96. package/data/build/dist/client/features/assistant-debug-workbench.js +41 -68
  97. package/data/build/dist/client/features/assistant-debug-workbench.js.map +1 -1
  98. package/data/build/dist/client/features/assistant-display-store.d.ts +57 -0
  99. package/data/build/dist/client/features/assistant-display-store.d.ts.map +1 -0
  100. package/data/build/dist/client/features/assistant-display-store.js +189 -0
  101. package/data/build/dist/client/features/assistant-display-store.js.map +1 -0
  102. package/data/build/dist/client/features/assistant-prompt-editor.d.ts +12 -0
  103. package/data/build/dist/client/features/assistant-prompt-editor.d.ts.map +1 -0
  104. package/data/build/dist/client/features/assistant-prompt-editor.js +14 -0
  105. package/data/build/dist/client/features/assistant-prompt-editor.js.map +1 -0
  106. package/data/build/dist/client/features/assistant-view-loader.d.ts +17 -0
  107. package/data/build/dist/client/features/assistant-view-loader.d.ts.map +1 -0
  108. package/data/build/dist/client/features/assistant-view-loader.js +49 -0
  109. package/data/build/dist/client/features/assistant-view-loader.js.map +1 -0
  110. package/data/build/dist/client/features/assistant-workbench.d.ts +1 -60
  111. package/data/build/dist/client/features/assistant-workbench.d.ts.map +1 -1
  112. package/data/build/dist/client/features/assistant-workbench.js +41 -169
  113. package/data/build/dist/client/features/assistant-workbench.js.map +1 -1
  114. package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
  115. package/data/build/dist/client/features/cli-adapters.js +44 -13
  116. package/data/build/dist/client/features/cli-adapters.js.map +1 -1
  117. package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -1
  118. package/data/build/dist/client/features/global-voice-assistant.js +33 -27
  119. package/data/build/dist/client/features/global-voice-assistant.js.map +1 -1
  120. package/data/build/dist/client/features/peer-host.d.ts +2 -1
  121. package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
  122. package/data/build/dist/client/features/peer-host.js +124 -58
  123. package/data/build/dist/client/features/peer-host.js.map +1 -1
  124. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
  125. package/data/build/dist/client/features/workspace-session-enhancement.js +37 -10
  126. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
  127. package/data/build/dist/client/file-management-dom.d.ts +3 -1
  128. package/data/build/dist/client/file-management-dom.d.ts.map +1 -1
  129. package/data/build/dist/client/file-management-dom.js +85 -79
  130. package/data/build/dist/client/file-management-dom.js.map +1 -1
  131. package/data/build/dist/client/git-management.d.ts +1 -1
  132. package/data/build/dist/client/git-management.d.ts.map +1 -1
  133. package/data/build/dist/client/git-management.js +46 -27
  134. package/data/build/dist/client/git-management.js.map +1 -1
  135. package/data/build/dist/client/locale.d.ts.map +1 -1
  136. package/data/build/dist/client/locale.js +10 -0
  137. package/data/build/dist/client/locale.js.map +1 -1
  138. package/data/build/dist/client/locales/assistantAvatar.d.ts +1 -1
  139. package/data/build/dist/client/locales/assistantAvatar.js +2 -2
  140. package/data/build/dist/client/locales/assistantAvatar.js.map +1 -1
  141. package/data/build/dist/client/locales/fileWorkspace.d.ts.map +1 -1
  142. package/data/build/dist/client/locales/fileWorkspace.js +2 -0
  143. package/data/build/dist/client/locales/fileWorkspace.js.map +1 -1
  144. package/data/build/dist/client/locales/peerHost.d.ts.map +1 -1
  145. package/data/build/dist/client/locales/peerHost.js +4 -0
  146. package/data/build/dist/client/locales/peerHost.js.map +1 -1
  147. package/data/build/dist/client/locales/peerHostWorkspace.js +2 -2
  148. package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -1
  149. package/data/build/dist/client/locales/usage.d.ts.map +1 -1
  150. package/data/build/dist/client/locales/usage.js +4 -0
  151. package/data/build/dist/client/locales/usage.js.map +1 -1
  152. package/data/build/dist/client/model-catalog-cache.d.ts.map +1 -1
  153. package/data/build/dist/client/model-catalog-cache.js +9 -2
  154. package/data/build/dist/client/model-catalog-cache.js.map +1 -1
  155. package/data/build/dist/client/peer-host-management-api.d.ts +2 -2
  156. package/data/build/dist/client/peer-host-management-api.d.ts.map +1 -1
  157. package/data/build/dist/client/peer-host-management-api.js +8 -5
  158. package/data/build/dist/client/peer-host-management-api.js.map +1 -1
  159. package/data/build/dist/client/provider-icon-assets.js +5 -39
  160. package/data/build/dist/client/provider-icon-assets.js.map +1 -1
  161. package/data/build/dist/client/provider-icon-bridge.d.ts +6 -0
  162. package/data/build/dist/client/provider-icon-bridge.d.ts.map +1 -0
  163. package/data/build/dist/client/provider-icon-bridge.js +65 -0
  164. package/data/build/dist/client/provider-icon-bridge.js.map +1 -0
  165. package/data/build/dist/client/provider-icons.d.ts +1 -0
  166. package/data/build/dist/client/provider-icons.d.ts.map +1 -1
  167. package/data/build/dist/client/provider-icons.js +2 -1
  168. package/data/build/dist/client/provider-icons.js.map +1 -1
  169. package/data/build/dist/client/remote-web-context.d.ts +2 -0
  170. package/data/build/dist/client/remote-web-context.d.ts.map +1 -1
  171. package/data/build/dist/client/remote-web-context.js +50 -2
  172. package/data/build/dist/client/remote-web-context.js.map +1 -1
  173. package/data/build/dist/client/rpc-call.d.ts +4 -0
  174. package/data/build/dist/client/rpc-call.d.ts.map +1 -0
  175. package/data/build/dist/client/rpc-call.js +23 -0
  176. package/data/build/dist/client/rpc-call.js.map +1 -0
  177. package/data/build/dist/client/serial-polling.d.ts +15 -0
  178. package/data/build/dist/client/serial-polling.d.ts.map +1 -0
  179. package/data/build/dist/client/serial-polling.js +48 -0
  180. package/data/build/dist/client/serial-polling.js.map +1 -0
  181. package/data/build/dist/client/session-adapter-cache.d.ts.map +1 -1
  182. package/data/build/dist/client/session-adapter-cache.js +11 -1
  183. package/data/build/dist/client/session-adapter-cache.js.map +1 -1
  184. package/data/build/dist/client/settings-section.js +8 -2
  185. package/data/build/dist/client/settings-section.js.map +1 -1
  186. package/data/build/dist/client/sherpa-voice-adapter.d.ts.map +1 -1
  187. package/data/build/dist/client/sherpa-voice-adapter.js +8 -8
  188. package/data/build/dist/client/sherpa-voice-adapter.js.map +1 -1
  189. package/data/build/dist/client/subscription-slot.d.ts +11 -0
  190. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  191. package/data/build/dist/client/subscription-slot.js +42 -15
  192. package/data/build/dist/client/subscription-slot.js.map +1 -1
  193. package/data/build/dist/client/terminal/xterm-engine.d.ts +4 -0
  194. package/data/build/dist/client/terminal/xterm-engine.d.ts.map +1 -0
  195. package/data/build/dist/client/terminal/xterm-engine.js +5 -0
  196. package/data/build/dist/client/terminal/xterm-engine.js.map +1 -0
  197. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
  198. package/data/build/dist/client/terminal/xterm-view.js +33 -25
  199. package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
  200. package/data/build/dist/host/avatar/temporary-previews.d.ts +3 -1
  201. package/data/build/dist/host/avatar/temporary-previews.d.ts.map +1 -1
  202. package/data/build/dist/host/avatar/temporary-previews.js +7 -2
  203. package/data/build/dist/host/avatar/temporary-previews.js.map +1 -1
  204. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +1 -1
  205. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  206. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +3 -10
  207. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  208. package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts.map +1 -1
  209. package/data/build/dist/host/cli-adapters/antigravity-driver.js +2 -2
  210. package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -1
  211. package/data/build/dist/host/cli-adapters/antigravity-subscription.d.ts.map +1 -1
  212. package/data/build/dist/host/cli-adapters/antigravity-subscription.js +10 -10
  213. package/data/build/dist/host/cli-adapters/antigravity-subscription.js.map +1 -1
  214. package/data/build/dist/host/cli-adapters/binary-detection.d.ts +19 -0
  215. package/data/build/dist/host/cli-adapters/binary-detection.d.ts.map +1 -0
  216. package/data/build/dist/host/cli-adapters/binary-detection.js +71 -0
  217. package/data/build/dist/host/cli-adapters/binary-detection.js.map +1 -0
  218. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +2 -0
  219. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  220. package/data/build/dist/host/cli-adapters/claude-driver.js +11 -5
  221. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  222. package/data/build/dist/host/cli-adapters/claude-model-options.d.ts.map +1 -1
  223. package/data/build/dist/host/cli-adapters/claude-model-options.js +2 -1
  224. package/data/build/dist/host/cli-adapters/claude-model-options.js.map +1 -1
  225. package/data/build/dist/host/cli-adapters/claude-process.d.ts +7 -0
  226. package/data/build/dist/host/cli-adapters/claude-process.d.ts.map +1 -0
  227. package/data/build/dist/host/cli-adapters/claude-process.js +59 -0
  228. package/data/build/dist/host/cli-adapters/claude-process.js.map +1 -0
  229. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts +3 -0
  230. package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -1
  231. package/data/build/dist/host/cli-adapters/codebuddy-driver.js +26 -12
  232. package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -1
  233. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts +0 -1
  234. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  235. package/data/build/dist/host/cli-adapters/command-code-driver.js +10 -32
  236. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  237. package/data/build/dist/host/cli-adapters/cursor-driver.d.ts.map +1 -1
  238. package/data/build/dist/host/cli-adapters/cursor-driver.js +4 -3
  239. package/data/build/dist/host/cli-adapters/cursor-driver.js.map +1 -1
  240. package/data/build/dist/host/cli-adapters/delegate-dispatch.js +1 -1
  241. package/data/build/dist/host/cli-adapters/delegate-dispatch.js.map +1 -1
  242. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.d.ts +2 -0
  243. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.d.ts.map +1 -1
  244. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js +5 -0
  245. package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js.map +1 -1
  246. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts.map +1 -1
  247. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js +2 -4
  248. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js.map +1 -1
  249. package/data/build/dist/host/cli-adapters/doubao-app.d.ts +27 -0
  250. package/data/build/dist/host/cli-adapters/doubao-app.d.ts.map +1 -0
  251. package/data/build/dist/host/cli-adapters/doubao-app.js +110 -0
  252. package/data/build/dist/host/cli-adapters/doubao-app.js.map +1 -0
  253. package/data/build/dist/host/cli-adapters/doubao-artifact-store.d.ts +16 -0
  254. package/data/build/dist/host/cli-adapters/doubao-artifact-store.d.ts.map +1 -0
  255. package/data/build/dist/host/cli-adapters/doubao-artifact-store.js +142 -0
  256. package/data/build/dist/host/cli-adapters/doubao-artifact-store.js.map +1 -0
  257. package/data/build/dist/host/cli-adapters/doubao-artifacts.d.ts +16 -0
  258. package/data/build/dist/host/cli-adapters/doubao-artifacts.d.ts.map +1 -0
  259. package/data/build/dist/host/cli-adapters/doubao-artifacts.js +34 -0
  260. package/data/build/dist/host/cli-adapters/doubao-artifacts.js.map +1 -0
  261. package/data/build/dist/host/cli-adapters/doubao-cdp.d.ts +49 -0
  262. package/data/build/dist/host/cli-adapters/doubao-cdp.d.ts.map +1 -0
  263. package/data/build/dist/host/cli-adapters/doubao-cdp.js +177 -0
  264. package/data/build/dist/host/cli-adapters/doubao-cdp.js.map +1 -0
  265. package/data/build/dist/host/cli-adapters/doubao-driver.d.ts +33 -0
  266. package/data/build/dist/host/cli-adapters/doubao-driver.d.ts.map +1 -0
  267. package/data/build/dist/host/cli-adapters/doubao-driver.js +291 -0
  268. package/data/build/dist/host/cli-adapters/doubao-driver.js.map +1 -0
  269. package/data/build/dist/host/cli-adapters/doubao-events.d.ts +21 -0
  270. package/data/build/dist/host/cli-adapters/doubao-events.d.ts.map +1 -0
  271. package/data/build/dist/host/cli-adapters/doubao-events.js +126 -0
  272. package/data/build/dist/host/cli-adapters/doubao-events.js.map +1 -0
  273. package/data/build/dist/host/cli-adapters/doubao-runtime.d.ts +6 -0
  274. package/data/build/dist/host/cli-adapters/doubao-runtime.d.ts.map +1 -0
  275. package/data/build/dist/host/cli-adapters/doubao-runtime.js +176 -0
  276. package/data/build/dist/host/cli-adapters/doubao-runtime.js.map +1 -0
  277. package/data/build/dist/host/cli-adapters/doubao-tools.d.ts +8 -0
  278. package/data/build/dist/host/cli-adapters/doubao-tools.d.ts.map +1 -0
  279. package/data/build/dist/host/cli-adapters/doubao-tools.js +139 -0
  280. package/data/build/dist/host/cli-adapters/doubao-tools.js.map +1 -0
  281. package/data/build/dist/host/cli-adapters/driver.d.ts +4 -3
  282. package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -1
  283. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  284. package/data/build/dist/host/cli-adapters/feature.js +30 -36
  285. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  286. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  287. package/data/build/dist/host/cli-adapters/grok-driver.js +2 -1
  288. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  289. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
  290. package/data/build/dist/host/cli-adapters/json-rpc-process.js +3 -1
  291. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
  292. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
  293. package/data/build/dist/host/cli-adapters/kimi-driver.js +4 -3
  294. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
  295. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts +2 -0
  296. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts.map +1 -1
  297. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js +11 -0
  298. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js.map +1 -1
  299. package/data/build/dist/host/cli-adapters/log-files.d.ts +3 -0
  300. package/data/build/dist/host/cli-adapters/log-files.d.ts.map +1 -0
  301. package/data/build/dist/host/cli-adapters/log-files.js +32 -0
  302. package/data/build/dist/host/cli-adapters/log-files.js.map +1 -0
  303. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +2 -0
  304. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
  305. package/data/build/dist/host/cli-adapters/model-catalog.js +10 -0
  306. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
  307. package/data/build/dist/host/cli-adapters/native-team-subagent.js +1 -1
  308. package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -1
  309. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +11 -0
  310. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
  311. package/data/build/dist/host/cli-adapters/opencode-driver.js +132 -49
  312. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  313. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts +29 -0
  314. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts.map +1 -0
  315. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js +471 -0
  316. package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js.map +1 -0
  317. package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
  318. package/data/build/dist/host/cli-adapters/pi-driver.js +2 -1
  319. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  320. package/data/build/dist/host/cli-adapters/process-utils.d.ts +12 -4
  321. package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -1
  322. package/data/build/dist/host/cli-adapters/process-utils.js +151 -17
  323. package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -1
  324. package/data/build/dist/host/cli-adapters/qoder-driver.d.ts.map +1 -1
  325. package/data/build/dist/host/cli-adapters/qoder-driver.js +63 -100
  326. package/data/build/dist/host/cli-adapters/qoder-driver.js.map +1 -1
  327. package/data/build/dist/host/cli-adapters/qoder-subscription.d.ts +6 -1
  328. package/data/build/dist/host/cli-adapters/qoder-subscription.d.ts.map +1 -1
  329. package/data/build/dist/host/cli-adapters/qoder-subscription.js +37 -10
  330. package/data/build/dist/host/cli-adapters/qoder-subscription.js.map +1 -1
  331. package/data/build/dist/host/cli-adapters/registry.d.ts +13 -21
  332. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  333. package/data/build/dist/host/cli-adapters/registry.js +102 -131
  334. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  335. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts +2 -10
  336. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts.map +1 -1
  337. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js +1 -28
  338. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js.map +1 -1
  339. package/data/build/dist/host/cli-adapters/session-store.d.ts +5 -1
  340. package/data/build/dist/host/cli-adapters/session-store.d.ts.map +1 -1
  341. package/data/build/dist/host/cli-adapters/session-store.js +68 -11
  342. package/data/build/dist/host/cli-adapters/session-store.js.map +1 -1
  343. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +3 -3
  344. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  345. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +14 -38
  346. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  347. package/data/build/dist/host/cli-adapters/windows-command-environment.d.ts +12 -0
  348. package/data/build/dist/host/cli-adapters/windows-command-environment.d.ts.map +1 -0
  349. package/data/build/dist/host/cli-adapters/windows-command-environment.js +53 -0
  350. package/data/build/dist/host/cli-adapters/windows-command-environment.js.map +1 -0
  351. package/data/build/dist/host/cli-bridge/dispatch.js +1 -1
  352. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
  353. package/data/build/dist/host/debug.d.ts.map +1 -1
  354. package/data/build/dist/host/debug.js +5 -4
  355. package/data/build/dist/host/debug.js.map +1 -1
  356. package/data/build/dist/host/dsh-runtime-version.d.ts +1 -1
  357. package/data/build/dist/host/dsh-runtime-version.d.ts.map +1 -1
  358. package/data/build/dist/host/dsh-runtime-version.js +22 -17
  359. package/data/build/dist/host/dsh-runtime-version.js.map +1 -1
  360. package/data/build/dist/host/features/assistant-avatar-runtime.d.ts.map +1 -1
  361. package/data/build/dist/host/features/assistant-avatar-runtime.js +43 -19
  362. package/data/build/dist/host/features/assistant-avatar-runtime.js.map +1 -1
  363. package/data/build/dist/host/features/assistant-background.d.ts +44 -0
  364. package/data/build/dist/host/features/assistant-background.d.ts.map +1 -0
  365. package/data/build/dist/host/features/assistant-background.js +116 -0
  366. package/data/build/dist/host/features/assistant-background.js.map +1 -0
  367. package/data/build/dist/host/features/assistant-index-updates.d.ts +5 -0
  368. package/data/build/dist/host/features/assistant-index-updates.d.ts.map +1 -1
  369. package/data/build/dist/host/features/assistant-index-updates.js +29 -6
  370. package/data/build/dist/host/features/assistant-index-updates.js.map +1 -1
  371. package/data/build/dist/host/features/assistant-source-cache.d.ts +12 -0
  372. package/data/build/dist/host/features/assistant-source-cache.d.ts.map +1 -0
  373. package/data/build/dist/host/features/assistant-source-cache.js +58 -0
  374. package/data/build/dist/host/features/assistant-source-cache.js.map +1 -0
  375. package/data/build/dist/host/features/global-voice-coordinator.d.ts.map +1 -1
  376. package/data/build/dist/host/features/global-voice-coordinator.js +15 -10
  377. package/data/build/dist/host/features/global-voice-coordinator.js.map +1 -1
  378. package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -1
  379. package/data/build/dist/host/features/global-voice-rpc.js +288 -114
  380. package/data/build/dist/host/features/global-voice-rpc.js.map +1 -1
  381. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  382. package/data/build/dist/host/features/peer-host.js +61 -21
  383. package/data/build/dist/host/features/peer-host.js.map +1 -1
  384. package/data/build/dist/host/features/sherpa-voice-worker.d.ts +18 -0
  385. package/data/build/dist/host/features/sherpa-voice-worker.d.ts.map +1 -0
  386. package/data/build/dist/host/features/sherpa-voice-worker.js +40 -0
  387. package/data/build/dist/host/features/sherpa-voice-worker.js.map +1 -0
  388. package/data/build/dist/host/features/sherpa-worker-runtime.d.ts +41 -0
  389. package/data/build/dist/host/features/sherpa-worker-runtime.d.ts.map +1 -0
  390. package/data/build/dist/host/features/sherpa-worker-runtime.js +200 -0
  391. package/data/build/dist/host/features/sherpa-worker-runtime.js.map +1 -0
  392. package/data/build/dist/host/features/types.d.ts +6 -4
  393. package/data/build/dist/host/features/types.d.ts.map +1 -1
  394. package/data/build/dist/host/index.d.ts +1 -1
  395. package/data/build/dist/host/index.d.ts.map +1 -1
  396. package/data/build/dist/host/index.js +31 -21
  397. package/data/build/dist/host/index.js.map +1 -1
  398. package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -1
  399. package/data/build/dist/host/lan-access-dsh.js +5 -22
  400. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  401. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts +6 -46
  402. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts.map +1 -1
  403. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js +48 -28
  404. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js.map +1 -1
  405. package/data/build/dist/host/modules/peer-host/peer-host-diagnostics.d.ts.map +1 -1
  406. package/data/build/dist/host/modules/peer-host/peer-host-diagnostics.js +1 -0
  407. package/data/build/dist/host/modules/peer-host/peer-host-diagnostics.js.map +1 -1
  408. package/data/build/dist/host/modules/peer-host/peer-host-handshake.d.ts.map +1 -1
  409. package/data/build/dist/host/modules/peer-host/peer-host-handshake.js +4 -1
  410. package/data/build/dist/host/modules/peer-host/peer-host-handshake.js.map +1 -1
  411. package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts +7 -1
  412. package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts.map +1 -1
  413. package/data/build/dist/host/modules/peer-host/peer-host-session.js +40 -13
  414. package/data/build/dist/host/modules/peer-host/peer-host-session.js.map +1 -1
  415. package/data/build/dist/host/provider-icon-assets.d.ts +5 -0
  416. package/data/build/dist/host/provider-icon-assets.d.ts.map +1 -0
  417. package/data/build/dist/host/provider-icon-assets.js +61 -0
  418. package/data/build/dist/host/provider-icon-assets.js.map +1 -0
  419. package/data/build/dist/host/rpc.js +2 -2
  420. package/data/build/dist/host/rpc.js.map +1 -1
  421. package/data/build/dist/host/session-migration-repair.d.ts +4 -0
  422. package/data/build/dist/host/session-migration-repair.d.ts.map +1 -1
  423. package/data/build/dist/host/session-migration-repair.js +75 -2
  424. package/data/build/dist/host/session-migration-repair.js.map +1 -1
  425. package/data/build/dist/host/terminal/backends/tmux-backend.d.ts +1 -1
  426. package/data/build/dist/host/terminal/backends/tmux-backend.d.ts.map +1 -1
  427. package/data/build/dist/host/terminal/backends/tmux-backend.js +15 -14
  428. package/data/build/dist/host/terminal/backends/tmux-backend.js.map +1 -1
  429. package/data/build/dist/shared/assistant-avatar-engine.d.ts +5 -0
  430. package/data/build/dist/shared/assistant-avatar-engine.d.ts.map +1 -1
  431. package/data/build/dist/shared/assistant-avatar-engine.js +14 -0
  432. package/data/build/dist/shared/assistant-avatar-engine.js.map +1 -1
  433. package/data/build/dist/shared/contracts/cli-adapter.d.ts +6 -0
  434. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  435. package/data/build/dist/shared/contracts/errors.d.ts +1 -0
  436. package/data/build/dist/shared/contracts/errors.d.ts.map +1 -1
  437. package/data/build/dist/shared/contracts/errors.js +1 -0
  438. package/data/build/dist/shared/contracts/errors.js.map +1 -1
  439. package/data/build/dist/shared/contracts/peer-host.d.ts +1 -0
  440. package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -1
  441. package/data/build/dist/shared/contracts/peer-host.js +1 -0
  442. package/data/build/dist/shared/contracts/peer-host.js.map +1 -1
  443. package/data/build/dist/shared/contracts/version.d.ts +3 -1
  444. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  445. package/data/build/dist/shared/contracts/version.js +20 -7
  446. package/data/build/dist/shared/contracts/version.js.map +1 -1
  447. package/data/build/dist/shared/peer-host-http-routes.d.ts +62 -0
  448. package/data/build/dist/shared/peer-host-http-routes.d.ts.map +1 -0
  449. package/data/build/dist/shared/peer-host-http-routes.js +31 -0
  450. package/data/build/dist/shared/peer-host-http-routes.js.map +1 -0
  451. package/data/build/dist/shared/provider-icon-resources.d.ts +4 -0
  452. package/data/build/dist/shared/provider-icon-resources.d.ts.map +1 -0
  453. package/data/build/dist/shared/provider-icon-resources.js +24 -0
  454. package/data/build/dist/shared/provider-icon-resources.js.map +1 -0
  455. package/package.json +2 -2
  456. package/profile/README.md +2 -2
  457. package/profile/package.json +2 -2
  458. package/profile/version.json +1 -1
  459. package/version.json +1 -1
@@ -0,0 +1,66 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { AssistantChatCatalog } from '../../shared/contracts/assistant.js';
3
+ import { normalizeAssistantAppearance } from '../../shared/assistant-avatar.js';
4
+ import type { AssistantTtsSnapshot } from '../../shared/assistant-tts.js';
5
+ import type { CodingNsTranslator } from '../locale.js';
6
+ import type { AssistantAvatarPreviewTargetProps } from '../avatar/catalog-panel.js';
7
+ import type { AssistantConfigurationTab } from './assistant-configuration-tabs.js';
8
+ import type { CodingNsClientServices } from './types.js';
9
+ import type { AssistantDraft } from './assistant-workbench.js';
10
+ import type { AssistantSettings } from '../../shared/contracts/config.js';
11
+ import type { NativeWorkspaceRecord } from '../native-workspace-store.js';
12
+ export declare function AssistantConfigurationFields({ draft, catalog, appearance, initializing, includeAvatar, services, t, disabled, onChange }: {
13
+ readonly draft: AssistantDraft;
14
+ readonly catalog: AssistantChatCatalog | undefined;
15
+ readonly appearance: ReturnType<typeof normalizeAssistantAppearance>;
16
+ readonly t: CodingNsTranslator;
17
+ readonly initializing?: boolean;
18
+ readonly includeAvatar?: boolean;
19
+ readonly services?: CodingNsClientServices;
20
+ readonly disabled: boolean;
21
+ readonly onChange: (patch: Partial<AssistantDraft>) => void;
22
+ }): ReactElement;
23
+ /** 创建后的各页只装配自己的字段;页面切换不持有或重置父级草稿。 */
24
+ export declare function AssistantConfigurationPage({ tab, active, services, value, draft, catalog, appearance, tts, workspaces, t, disabled, onChange, onDebug, onError, onReset, ...previewProps }: {
25
+ readonly tab: AssistantConfigurationTab;
26
+ readonly services: CodingNsClientServices;
27
+ readonly value: AssistantSettings;
28
+ readonly active?: boolean;
29
+ readonly draft: AssistantDraft;
30
+ readonly catalog: AssistantChatCatalog | undefined;
31
+ readonly appearance: ReturnType<typeof normalizeAssistantAppearance>;
32
+ readonly tts: AssistantTtsSnapshot | undefined;
33
+ readonly workspaces: readonly NativeWorkspaceRecord[];
34
+ readonly t: CodingNsTranslator;
35
+ readonly disabled: boolean;
36
+ readonly onChange: (patch: Partial<AssistantDraft>) => void;
37
+ readonly onDebug: () => void;
38
+ readonly onError: (error: string) => void;
39
+ readonly onReset?: () => void;
40
+ } & Omit<AssistantAvatarPreviewTargetProps, 'active'>): ReactElement;
41
+ /** 兼容原能力表单入口;实际配置页分别装配项目字段与声音字段。 */
42
+ export declare function AssistantCapabilityFields({ draft, tts, workspaces, t, disabled, onChange }: {
43
+ readonly draft: AssistantDraft;
44
+ readonly tts: AssistantTtsSnapshot | undefined;
45
+ readonly workspaces: readonly NativeWorkspaceRecord[];
46
+ readonly t: CodingNsTranslator;
47
+ readonly disabled: boolean;
48
+ readonly onChange: (patch: Partial<AssistantDraft>) => void;
49
+ }): ReactElement;
50
+ /** 项目范围放到更多设置,保留暂不可用项目以避免编辑时丢失原有选择。 */
51
+ export declare function AssistantWorkspaceFields({ draft, workspaces, t, disabled, onChange }: {
52
+ readonly draft: AssistantDraft;
53
+ readonly workspaces: readonly NativeWorkspaceRecord[];
54
+ readonly t: CodingNsTranslator;
55
+ readonly disabled: boolean;
56
+ readonly onChange: (patch: Partial<AssistantDraft>) => void;
57
+ }): ReactElement;
58
+ /** 没有安装 MOSS 时只有浏览器声音可选,不因标签拆分而放宽可用性校验。 */
59
+ export declare function AssistantVoiceFields({ draft, tts, t, disabled, onChange }: {
60
+ readonly draft: AssistantDraft;
61
+ readonly tts: AssistantTtsSnapshot | undefined;
62
+ readonly t: CodingNsTranslator;
63
+ readonly disabled: boolean;
64
+ readonly onChange: (patch: Partial<AssistantDraft>) => void;
65
+ }): ReactElement;
66
+ //# sourceMappingURL=assistant-configuration-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-configuration-view.d.ts","sourceRoot":"","sources":["../../../../../src/client/features/assistant-configuration-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { createElement, useEffect, useState } from 'react';
2
+ import { ASSISTANT_PERSONALITY_MAX_CHARS } from '../../shared/assistant-lifecycle.js';
3
+ import { listAssistantAvatars, normalizeAssistantAppearance } from '../../shared/assistant-avatar.js';
4
+ import { readAssistantPrompts } from '../../shared/assistant-prompts.js';
5
+ import { dshSettingsButtonStyle, dshSettingsFieldStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js';
6
+ import { AssistantAvatarPortraitEditor } from '../avatar/portrait-editor.js';
7
+ import { AssistantAppearanceEditor } from '../avatar/settings-panel.js';
8
+ import { AssistantAvatarPicker, assistantAvatarChoices } from '../avatar/catalog-picker.js';
9
+ import { getAssistantAvatarManager } from '../avatar/manager.js';
10
+ import { AssistantAvatarEngineDialog, AssistantAvatarEngineProgress, useAssistantAvatarEngine } from '../avatar/engine.js';
11
+ import { AssistantVoiceSettings } from './assistant-voice-settings.js';
12
+ import { AssistantVoiceInitializationPanel } from './assistant-voice-initialization.js';
13
+ import { VoiceModelManagerPanel } from './voice-initialization-dialog.js';
14
+ import { AssistantPromptEditor } from './assistant-prompt-editor.js';
15
+ import { getGlobalVoiceAdapter } from '../global-voice-runtime-registry.js';
16
+ import { assistantSettingCheckboxStyle, assistantSettingFieldStyle } from '../assistant-settings-styles.js';
17
+ /** 创建与配置共用形象选择:选中 Live2D 时先确认引擎许可并自动安装,成功后才改草稿。 */
18
+ function AssistantAvatarSelectionField({ services, appearance, avatarId, avatars, includeLegacy, disabled, t, onChange }) {
19
+ const manager = getAssistantAvatarManager(services);
20
+ const engine = useAssistantAvatarEngine({ services, manager, appearance, disabled });
21
+ const choices = assistantAvatarChoices(appearance, [], t, includeLegacy);
22
+ const avatar = avatars.find((model) => model.id === avatarId);
23
+ const list = choices.some((choice) => choice.id === avatarId) ? choices
24
+ : [{ id: avatarId, label: t('awb.unavailableSelection', { id: avatarId }), thirdParty: false, disabled: true }, ...choices];
25
+ const choose = (choice) => {
26
+ if (disabled || !avatars.some((model) => model.id === choice.id))
27
+ return;
28
+ const model = avatars.find((item) => item.id === choice.id);
29
+ if (model?.renderer === 'live2d') {
30
+ void engine.ensure(() => onChange({ avatarId: choice.id }));
31
+ return;
32
+ }
33
+ onChange({ avatarId: choice.id });
34
+ };
35
+ return createElement('div', { style: { display: 'grid', gap: 8 } }, createElement(AssistantAvatarPicker, { label: t('awb.avatar'), value: avatarId, disabled: disabled || engine.installing, t, choices: list, onChoose: choose }), createElement(AssistantAvatarEngineProgress, { controller: engine, t }), createElement('p', { style: help }, t('avatar.externalHint')), avatar?.renderer !== 'live2d' ? null : createElement('p', { style: help }, t('avatar.live2dDependencyHint')), createElement(AssistantAvatarEngineDialog, { controller: engine, t }));
36
+ }
37
+ export function AssistantConfigurationFields({ draft, catalog, appearance, initializing = false, includeAvatar = true, services, t, disabled, onChange }) {
38
+ const models = catalog?.models ?? [];
39
+ const avatars = listAssistantAvatars(appearance, !initializing);
40
+ const avatar = avatars.find((model) => model.id === draft.avatarId);
41
+ const avatarChoices = assistantAvatarChoices(appearance, [], t, !initializing);
42
+ const input = (label, node) => createElement('label', { style: field }, createElement('span', null, label), node);
43
+ const select = (label, value, change, options) => input(label, createElement('select', { value, disabled, style: identityFieldStyle, onChange: (event) => change(event.currentTarget.value) }, ...options));
44
+ const missing = (id) => createElement('option', { key: id, value: id }, t('awb.unavailableSelection', { id }));
45
+ return createElement('div', { 'data-codingns-assistant-identity': true, style: { display: 'grid', gap: 11 } },
46
+ // 名称与头像始终左右排列,裁剪面板和本地保存说明跨两列展开。
47
+ createElement('div', { 'data-codingns-assistant-identity-row': true, style: { display: 'grid', alignItems: 'start',
48
+ gridTemplateColumns: services === undefined || avatar === undefined ? 'minmax(0, 1fr)' : 'minmax(0, 1fr) minmax(0, 176px)', columnGap: 16, rowGap: 8, minWidth: 0 } }, input(t('awb.name'), createElement('input', { value: draft.name, maxLength: 80, disabled, placeholder: t('awb.namePlaceholder'), style: identityFieldStyle, onChange: (event) => onChange({ name: event.currentTarget.value }) })), services === undefined || avatar === undefined ? null : createElement(AssistantAvatarPortraitEditor, { services, model: avatar, disabled, t })), select(t('awb.model'), draft.modelKey, (modelKey) => onChange({ modelKey }), [createElement('option', { key: '', value: '' }, t('awb.defaultModel')),
49
+ ...(draft.modelKey && !models.some((model) => JSON.stringify([model.provider, model.model]) === draft.modelKey) ? [missing(draft.modelKey)] : []),
50
+ ...models.map((model) => createElement('option', { key: JSON.stringify([model.provider, model.model]), value: JSON.stringify([model.provider, model.model]) }, `${model.label} · ${model.provider}`))]), catalog?.models.length === 0 ? createElement('p', { style: help }, t('awb.noModel'), ...catalog.errors.map((error) => createElement('span', { key: error, style: { display: 'block' } }, error))) : null, input(t('awb.personality'), createElement('textarea', { value: draft.personality, maxLength: ASSISTANT_PERSONALITY_MAX_CHARS, rows: 4, disabled, placeholder: t('awb.personalityPlaceholder'),
51
+ style: { ...identityFieldStyle, minHeight: 96, maxHeight: 200, resize: 'vertical', lineHeight: 1.65 }, onChange: (event) => onChange({ personality: event.currentTarget.value }) })), !includeAvatar ? null : services === undefined ? createElement('div', { style: { display: 'grid', gap: 8 } }, createElement(AssistantAvatarPicker, { label: t('awb.avatar'), value: draft.avatarId, disabled, t,
52
+ choices: avatarChoices.some((choice) => choice.id === draft.avatarId) ? avatarChoices
53
+ : [{ id: draft.avatarId, label: t('awb.unavailableSelection', { id: draft.avatarId }), thirdParty: false, disabled: true }, ...avatarChoices],
54
+ onChoose: (choice) => { if (avatars.some((avatar) => avatar.id === choice.id))
55
+ onChange({ avatarId: choice.id }); } }), createElement('p', { style: help }, t('avatar.externalHint')), avatar?.renderer !== 'live2d' ? null : createElement('p', { style: help }, t('avatar.live2dDependencyHint')))
56
+ : createElement(AssistantAvatarSelectionField, { services, appearance, avatarId: draft.avatarId, avatars, includeLegacy: !initializing, disabled, t, onChange }));
57
+ }
58
+ /** 创建后的各页只装配自己的字段;页面切换不持有或重置父级草稿。 */
59
+ export function AssistantConfigurationPage({ tab, active = true, services, value, draft, catalog, appearance, tts, workspaces, t, disabled, onChange, onDebug, onError, onReset, ...previewProps }) {
60
+ switch (tab) {
61
+ case 'basic': return createElement(AssistantConfigurationFields, { draft, catalog, appearance, includeAvatar: false, services, t, disabled, onChange });
62
+ case 'appearance': return createElement('div', { style: { display: 'grid', gap: 11 } }, createElement(AssistantAppearanceEditor, { services, enabled: !disabled, active, ...previewProps }));
63
+ case 'voice': return createElement('div', { style: { display: 'grid', gap: 11 } }, createElement(AssistantVoiceInitializationPanel, { services, enabled: !disabled, active,
64
+ inputSettings: (groupActive) => createElement('div', { style: { display: 'grid', gap: 11 } }, createElement(AssistantAudioDevice, { services, direction: 'input', active: groupActive, disabled, t, onError }), createElement(VoiceModelManagerPanel, { services, value: value.voice, enabled: !disabled, active: groupActive })),
65
+ outputSettings: (groupActive) => createElement('div', { style: { display: 'grid', gap: 11 } }, createElement(AssistantAudioDevice, { services, direction: 'output', active: groupActive, disabled, t, onError }), createElement(AssistantVoiceSettings, { services, enabled: !disabled, active: groupActive, embedded: true })) }));
66
+ case 'more': return createElement('div', { style: { display: 'grid', gap: 11 } }, createElement(AssistantWorkspaceFields, { draft, workspaces, t, disabled, onChange }), createElement(AssistantAdvancedSettings, { services, value, disabled, t, onDebug, onError }), createElement('div', { style: { paddingTop: 16, borderTop: `1px solid ${dshThemeColor.border}` } }, createElement('button', { type: 'button', 'data-codingns-assistant-reset': true, disabled: disabled || onReset === undefined,
67
+ style: { ...dshSettingsButtonStyle, color: dshThemeColor.error }, onClick: onReset }, t('awb.reset'))));
68
+ }
69
+ }
70
+ /** 兼容原能力表单入口;实际配置页分别装配项目字段与声音字段。 */
71
+ export function AssistantCapabilityFields({ draft, tts, workspaces, t, disabled, onChange }) {
72
+ return createElement('div', { style: { display: 'grid', gap: 18 } }, AssistantWorkspaceFields({ draft, workspaces, t, disabled, onChange }), AssistantVoiceFields({ draft, tts, t, disabled, onChange }));
73
+ }
74
+ /** 项目范围放到更多设置,保留暂不可用项目以避免编辑时丢失原有选择。 */
75
+ export function AssistantWorkspaceFields({ draft, workspaces, t, disabled, onChange }) {
76
+ const knownWorkspaces = new Set(workspaces.map((workspace) => workspace.workspaceId));
77
+ return createElement('fieldset', { 'data-codingns-assistant-projects': true, style: { border: 0, padding: 0, margin: 0, minWidth: 0 }, disabled }, createElement('legend', { style: { fontSize: 14, fontWeight: 600, padding: 0, marginBottom: 8 } }, t('awb.workspaces')), createElement('p', { style: help }, t('awb.scopeHint')), createElement('div', { style: { display: 'grid', gap: 8, maxHeight: 180, overflowY: 'auto', marginTop: 8 } }, ...[...workspaces, ...draft.managedWorkspaceIds.filter((id) => !knownWorkspaces.has(id)).map((workspaceId) => ({ workspaceId, title: t('awb.offlineWorkspace', { id: workspaceId }) }))].map((workspace) => createElement('label', { key: workspace.workspaceId, style: assistantSettingCheckboxStyle }, createElement('input', { type: 'checkbox', checked: draft.managedWorkspaceIds.includes(workspace.workspaceId), onChange: (event) => onChange({ managedWorkspaceIds: event.currentTarget.checked ? [...draft.managedWorkspaceIds, workspace.workspaceId] : draft.managedWorkspaceIds.filter((id) => id !== workspace.workspaceId) }) }), workspace.title))));
78
+ }
79
+ /** 没有安装 MOSS 时只有浏览器声音可选,不因标签拆分而放宽可用性校验。 */
80
+ export function AssistantVoiceFields({ draft, tts, t, disabled, onChange }) {
81
+ const mossReady = tts?.status.ready === true;
82
+ const voices = mossReady ? tts.voices : [];
83
+ return createElement('div', { 'data-codingns-assistant-voice-selection': true, style: { display: 'grid', gap: 10 } }, createElement('label', { style: field }, createElement('span', null, t('awb.voice')), createElement('select', { value: draft.ttsBackend === 'browser' || !mossReady ? 'browser' : draft.voiceId, disabled, style: identityFieldStyle,
84
+ onChange: (event) => { const voice = event.currentTarget.value; if (voice === 'browser')
85
+ onChange({ ttsBackend: 'browser' });
86
+ else if (mossReady && voices.some((item) => item.id === voice))
87
+ onChange({ ttsBackend: 'moss-onnx', voiceId: voice }); } }, createElement('option', { value: 'browser' }, t('awb.browserVoice')), ...voices.map((voice) => createElement('option', { key: voice.id, value: voice.id }, voice.name)))), mossReady ? null : createElement('p', { style: help }, t('awb.mossSetupHint')));
88
+ }
89
+ function AssistantAdvancedSettings({ services, value, disabled, t, onDebug, onError }) {
90
+ const defaults = readAssistantPrompts(value.prompts);
91
+ const prompts = services.configurationDraft ? { ...defaults, ...value.prompts } : defaults;
92
+ const savePrompt = async (kind, text) => {
93
+ // 提示词是单字段绝对值,不依赖旧快照计算;后台索引变化不应阻止保存。
94
+ try {
95
+ if (!await services.settings.mutate([{ op: 'set', path: ['assistant', 'prompts', kind], value: text }]))
96
+ throw new Error(t('settings.moduleWriteRejected'));
97
+ }
98
+ catch (cause) {
99
+ onError(message(cause));
100
+ throw cause;
101
+ }
102
+ };
103
+ return createElement('div', { style: { display: 'grid', gap: 14, marginTop: 14 } }, createElement('p', { style: help }, t('awb.moreHint')), ...['index', 'chat'].map((kind) => createElement(AssistantPromptEditor, { key: kind, kind, value: prompts[kind], disabled, onSave: savePrompt,
104
+ ...(services.configurationDraft ? { onChange: savePrompt } : {}), t })), createElement('button', { type: 'button', disabled, style: dshSettingsButtonStyle, onClick: onDebug }, t('assistant.debug.open')));
105
+ }
106
+ /** 设备按输入、输出分组枚举,折叠时保留选择但停止设备查询。 */
107
+ function AssistantAudioDevice({ services, direction, active, disabled, t, onError }) {
108
+ const adapter = getGlobalVoiceAdapter(services);
109
+ const output = direction === 'output';
110
+ const [devices, setDevices] = useState([]);
111
+ const [selectedId, setSelectedId] = useState((output ? adapter?.outputDeviceId : adapter?.inputDeviceId) ?? '');
112
+ useEffect(() => {
113
+ if (!active || (output && !adapter?.outputDeviceSupported))
114
+ return undefined;
115
+ let stopped = false;
116
+ const refresh = () => { void (output ? adapter?.enumerateOutputDevices() : adapter?.enumerateInputDevices())?.then((devices) => { if (!stopped)
117
+ setDevices(devices); }).catch(() => undefined); };
118
+ refresh();
119
+ globalThis.navigator?.mediaDevices?.addEventListener?.('devicechange', refresh);
120
+ return () => { stopped = true; globalThis.navigator?.mediaDevices?.removeEventListener?.('devicechange', refresh); };
121
+ }, [active, adapter, output]);
122
+ if (output && !adapter?.outputDeviceSupported)
123
+ return null;
124
+ return createElement('label', { style: field }, t(output ? 'voice.outputDevice' : 'voice.inputDevice'), createElement('select', { disabled, value: selectedId, style: dshSettingsFieldStyle, onChange: (event) => {
125
+ const id = event.currentTarget.value;
126
+ void (output ? adapter?.selectOutputDevice(id) : adapter?.selectInputDevice(id))?.then(() => setSelectedId(id)).catch((cause) => onError(message(cause)));
127
+ } }, createElement('option', { value: '' }, t(output ? 'voice.defaultOutput' : 'voice.defaultMicrophone')), ...devices.map((device) => createElement('option', { key: device.deviceId, value: device.deviceId }, device.label || t(output ? 'voice.unnamedOutput' : 'voice.unnamedMicrophone')))));
128
+ }
129
+ function message(error) { return error instanceof Error ? error.message : String(error); }
130
+ const help = { ...dshSettingsHelpStyle, margin: 0 };
131
+ const field = assistantSettingFieldStyle;
132
+ const identityFieldStyle = { ...dshSettingsFieldStyle, borderRadius: 8 };
133
+ //# sourceMappingURL=assistant-configuration-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant-configuration-view.js","sourceRoot":"","sources":["../../../../../src/client/features/assistant-configuration-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAG1D,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAA;AACrF,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAA;AAErG,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAExE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAA;AAE5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAE1H,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAA;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAE3E,OAAO,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAO3G,mDAAmD;AACnD,SAAS,6BAA6B,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EASrH;IACC,MAAM,OAAO,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IACnD,MAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;IACpF,MAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;IACxE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO;QACrE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,CAAA;IAC7H,MAAM,MAAM,GAAG,CAAC,MAA+B,EAAQ,EAAE;QACvD,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;YAAE,OAAM;QACxE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAA;QAC3D,IAAI,KAAK,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAAC,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QACzG,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;IACnC,CAAC,CAAA;IACD,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAChE,aAAa,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAC9J,aAAa,CAAC,6BAA6B,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EACvE,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,EAC7D,MAAM,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,6BAA6B,CAAC,CAAC,EAC5G,aAAa,CAAC,2BAA2B,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,GAAG,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAOrJ;IACC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;IAAC,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAA;IACrG,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAA;IACnE,MAAM,aAAa,GAAG,sBAAsB,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAA;IAC9E,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,IAAkB,EAAgB,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;IACrJ,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,MAA+B,EAAE,OAAuB,EAAgB,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,KAA2C,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAA;IACxT,MAAM,OAAO,GAAG,CAAC,EAAU,EAAgB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IACpI,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,kCAAkC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;IAC3G,gCAAgC;IAChC,aAAa,CAAC,KAAK,EAAE,EAAE,sCAAsC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;YAChH,mBAAmB,EAAE,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iCAAiC,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EACrK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,KAA2C,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EACxQ,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EACjJ,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAClJ,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjJ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EACzM,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EACxM,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,+BAA+B,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,4BAA4B,CAAC;QAC3L,KAAK,EAAE,EAAE,GAAG,kBAAkB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAA2C,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5N,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAC1G,aAAa,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC/F,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa;YACnF,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,aAAa,CAAC;QAC/I,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;YAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA,CAAC,CAAC,EAAE,CAAC,EACvH,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,EAC7D,MAAM,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAC7G,CAAC,CAAC,aAAa,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACvK,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,0BAA0B,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,EAS3I;IACnD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC,CAAC,OAAO,aAAa,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QACvJ,KAAK,YAAY,CAAC,CAAC,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EACpF,aAAa,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,CAAA;QACtG,KAAK,OAAO,CAAC,CAAC,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAC/E,aAAa,CAAC,iCAAiC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM;YACrF,aAAa,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAC1F,aAAa,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAChH,aAAa,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACnH,cAAc,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAC3F,aAAa,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EACjH,aAAa,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACvH,KAAK,MAAM,CAAC,CAAC,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAC9E,aAAa,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EACrF,aAAa,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAC5F,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,EAChG,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,+BAA+B,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO,KAAK,SAAS;YAC1H,KAAK,EAAE,EAAE,GAAG,sBAAsB,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/G,CAAC;AACH,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,yBAAyB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAGxF;IACC,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EACjE,wBAAwB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,oBAAoB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACxI,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,wBAAwB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAGlF;IACC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAA;IACrF,OAAO,aAAa,CAAC,UAAU,EAAE,EAAE,kCAAkC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAC/I,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,EACvH,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,EACvD,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAC1G,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,sBAAsB,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE,6BAA6B,EAAE,EACrS,aAAa,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,KAA8C,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,mBAAmB,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5Y,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,oBAAoB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAGvE;IACC,MAAM,SAAS,GAAG,GAAG,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1C,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,yCAAyC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAClH,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAClF,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB;QAC5I,QAAQ,EAAE,CAAC,KAA2C,EAAE,EAAE,GAAG,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,SAAS;YAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;aAAM,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC;YAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA,CAAC,CAAC,EAAE,EAC7R,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC7K,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAA;AACnF,CAAC;AACD,SAAS,yBAAyB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAyN;IAC1S,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC1F,MAAM,UAAU,GAAG,KAAK,EAAE,IAAsB,EAAE,IAAY,EAAiB,EAAE;QAC/E,oCAAoC;QACpC,IAAI,CAAC;YAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAA;QAAC,CAAC;QACnK,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAAC,MAAM,KAAK,CAAA;QAAC,CAAC;IACxD,CAAC,CAAA;IACD,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAChF,aAAa,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,EACtD,GAAI,CAAC,OAAO,EAAE,MAAM,CAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;QACtJ,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACzE,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;AACtI,CAAC;AAED,mCAAmC;AACnC,SAAS,oBAAoB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAGhF;IACC,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,SAAS,KAAK,QAAQ,CAAA;IACrC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAiD,EAAE,CAAC,CAAA;IAC1F,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;IAC/G,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;YAAE,OAAO,SAAS,CAAA;QAC5E,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,MAAM,OAAO,GAAG,GAAS,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO;YAAE,UAAU,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,CAAA;QACrM,OAAO,EAAE,CAAC;QAAC,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QAC1F,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC,CAAA;IACrH,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;IAC7B,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,qBAAqB;QAAE,OAAO,IAAI,CAAA;IAC1D,OAAO,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC,EACpG,aAAa,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,KAA2C,EAAE,EAAE;YAC7I,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAA;YACpC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC3J,CAAC,EAAE,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtS,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,IAAY,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;AAC1G,MAAM,IAAI,GAAkB,EAAE,GAAG,oBAAoB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;AAClE,MAAM,KAAK,GAAkB,0BAA0B,CAAA;AACvD,MAAM,kBAAkB,GAAkB,EAAE,GAAG,qBAAqB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAA"}
@@ -2,21 +2,14 @@ import type { ReactElement } from 'react';
2
2
  import type { AssistantChatMessage, AssistantChatRun, AssistantDebugSnapshot } from '../../shared/contracts/assistant.js';
3
3
  import { type NativeWorkspaceRecord } from '../native-workspace-store.js';
4
4
  import { type CodingNsTranslator } from '../locale.js';
5
- import type { CodingNsClientServices } from './types.js';
5
+ import type { CodingNsClientServices, CodingNsRpcClient } from './types.js';
6
+ export { AssistantPromptEditor } from './assistant-prompt-editor.js';
6
7
  /** 五个步骤各自处理范围、成员、结果、运行记录和 LLM 问答,不依赖语音。 */
7
- export declare function AssistantDebugDialog({ services, onClose }: {
8
+ export declare function AssistantDebugDialog({ services, displayRpc, onClose }: {
8
9
  readonly services: CodingNsClientServices;
10
+ readonly displayRpc?: CodingNsRpcClient;
9
11
  readonly onClose: () => void;
10
12
  }): ReactElement;
11
- /** 草稿只在明确保存时写入;保存单个字段,不覆盖另一阶段的提示词。 */
12
- export declare function AssistantPromptEditor({ kind, value, disabled, onSave, onChange, t }: {
13
- readonly kind: 'index' | 'chat';
14
- readonly value: string;
15
- readonly disabled: boolean;
16
- readonly onSave: (kind: 'index' | 'chat', value: string) => Promise<void>;
17
- readonly onChange?: (kind: 'index' | 'chat', value: string) => Promise<void>;
18
- readonly t: CodingNsTranslator;
19
- }): ReactElement;
20
13
  /** 范围成员与正文索引分开显示,空项目也必须出现在范围内。 */
21
14
  export declare function AssistantScopeSessionsView({ snapshot, managedIds, t }: {
22
15
  readonly snapshot: AssistantDebugSnapshot;
@@ -1 +1 @@
1
- {"version":3,"file":"assistant-debug-workbench.d.ts","sourceRoot":"","sources":["../../../../../src/client/features/assistant-debug-workbench.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,KAAK,EAAwB,oBAAoB,EAAsB,gBAAgB,EAAE,sBAAsB,EAAsH,MAAM,qCAAqC,CAAA;AAIvR,OAAO,EAA6D,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpI,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAE7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAMxD,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG,YAAY,CAmOrJ;AAED,sCAAsC;AACtC,wBAAgB,qBAAqB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,YAAY,CAapX;AAED,kCAAkC;AAClC,wBAAgB,0BAA0B,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,YAAY,CAQ3M;AAED,0CAA0C;AAC1C,wBAAgB,0BAA0B,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,YAAY,CA4BvJ;AAqDD,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,YAAY,CAatJ;AAED,wBAAgB,yBAAyB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,YAAY,CAKrP;AAUD,qCAAqC;AACrC,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,EAAE,MAAM,EAAE,SAAS,qBAAqB,EAAE,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAAE,CAOhP"}
1
+ {"version":3,"file":"assistant-debug-workbench.d.ts","sourceRoot":"","sources":["../../../../../src/client/features/assistant-debug-workbench.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,KAAK,EAAwB,oBAAoB,EAAsB,gBAAgB,EAAE,sBAAsB,EAAsH,MAAM,qCAAqC,CAAA;AAIvR,OAAO,EAA6D,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpI,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAE7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAKpE,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,UAAyB,EAAE,OAAO,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG,YAAY,CAqNzN;AAED,kCAAkC;AAClC,wBAAgB,0BAA0B,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,YAAY,CAQ3M;AAED,0CAA0C;AAC1C,wBAAgB,0BAA0B,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,YAAY,CA4BvJ;AAqDD,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,YAAY,CAatJ;AAED,wBAAgB,yBAAyB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,YAAY,CAKrP;AAUD,qCAAqC;AACrC,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,EAAE,MAAM,EAAE,SAAS,qBAAqB,EAAE,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAAE,CAOhP"}
@@ -1,14 +1,16 @@
1
- import { createElement, useCallback, useEffect, useRef, useState } from 'react';
2
- import { ASSISTANT_PROMPT_MAX_CHARS, DEFAULT_ASSISTANT_PROMPTS, readAssistantPrompts } from '../../shared/assistant-prompts.js';
1
+ import { createElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { readAssistantPrompts } from '../../shared/assistant-prompts.js';
3
3
  import { CODINGNS_ASSISTANT_FIELD } from '../../shared/contracts/config.js';
4
4
  import { CODINGNS_RPC_CHANNEL } from '../../shared/contracts/transport.js';
5
5
  import { readNativeWorkspaceListStore, readNativeWorkspaceSnapshot } from '../native-workspace-store.js';
6
6
  import { useCodingNsTranslator } from '../locale.js';
7
7
  import { dshFieldStyle, dshSettingsButtonStyle, dshSettingsHelpStyle, dshSettingsPrimaryButtonStyle, dshThemeColor } from '../theme.js';
8
- import { assistantSettingTextStyle } from '../assistant-settings-styles.js';
8
+ import { assistantDisplayScope, getAssistantDisplayStore } from './assistant-display-store.js';
9
+ import { AssistantPromptEditor } from './assistant-prompt-editor.js';
10
+ export { AssistantPromptEditor } from './assistant-prompt-editor.js';
9
11
  const TABS = ['scope', 'sessions', 'result', 'records', 'chat'];
10
12
  /** 五个步骤各自处理范围、成员、结果、运行记录和 LLM 问答,不依赖语音。 */
11
- export function AssistantDebugDialog({ services, onClose }) {
13
+ export function AssistantDebugDialog({ services, displayRpc = services.rpc, onClose }) {
12
14
  const t = useCodingNsTranslator(services.locale);
13
15
  const [tab, setTab] = useState('scope');
14
16
  const [snapshot, setSnapshot] = useState();
@@ -33,7 +35,8 @@ export function AssistantDebugDialog({ services, onClose }) {
33
35
  const summarizing = snapshot?.index.analysis?.state === 'running';
34
36
  const busy = loading || saving || indexing || chatting || summarizing;
35
37
  const managedIds = settings.value?.assistant.managedWorkspaceIds ?? [];
36
- const scopeKey = JSON.stringify([...managedIds].sort());
38
+ const scopeKey = assistantDisplayScope(managedIds);
39
+ const display = useMemo(() => getAssistantDisplayStore(displayRpc, scopeKey), [displayRpc, scopeKey]);
37
40
  const workspaces = mergeDebugWorkspaces(snapshot, nativeWorkspaces, managedIds);
38
41
  const prompts = readAssistantPrompts(settings.value?.assistant.prompts);
39
42
  const call = useCallback(async (action, payload = {}, signal) => {
@@ -52,8 +55,9 @@ export function AssistantDebugDialog({ services, onClose }) {
52
55
  try {
53
56
  if (rebuild)
54
57
  await call('assistant/index/rebuild', model ?? {}, abort.signal);
55
- const next = await call('assistant/debug', {}, abort.signal);
56
- if (!abort.signal.aborted && mounted.current)
58
+ abort.signal.throwIfAborted();
59
+ const next = await display.debug.refresh({ force: true, afterPending: true });
60
+ if (!abort.signal.aborted && mounted.current && next)
57
61
  setSnapshot(next);
58
62
  }
59
63
  catch (cause) {
@@ -66,7 +70,7 @@ export function AssistantDebugDialog({ services, onClose }) {
66
70
  setIndexing(false);
67
71
  }
68
72
  }
69
- }, [call]);
73
+ }, [call, display]);
70
74
  const loadModels = useCallback(async () => {
71
75
  setModelsLoading(true);
72
76
  try {
@@ -87,7 +91,6 @@ export function AssistantDebugDialog({ services, onClose }) {
87
91
  }, [call]);
88
92
  useEffect(() => {
89
93
  mounted.current = true;
90
- void refresh();
91
94
  void loadModels();
92
95
  return () => {
93
96
  mounted.current = false;
@@ -95,7 +98,7 @@ export function AssistantDebugDialog({ services, onClose }) {
95
98
  if (activeChatId.current !== undefined)
96
99
  void call('assistant/chat/cancel', { requestId: activeChatId.current }).catch(() => undefined);
97
100
  };
98
- }, [refresh, loadModels, call]);
101
+ }, [loadModels, call]);
99
102
  useEffect(() => {
100
103
  const model = catalog?.models.find((item) => selectionKey(item) === modelKey);
101
104
  if (model === undefined)
@@ -122,27 +125,16 @@ export function AssistantDebugDialog({ services, onClose }) {
122
125
  setSubmitted('');
123
126
  }, [scopeKey, snapshot?.index.generation, modelKey, prompts.chat, call]);
124
127
  useEffect(() => {
125
- let stopped = false;
126
- let timer;
127
- const poll = async () => {
128
- try {
129
- const next = await call('assistant/debug');
130
- if (stopped || !mounted.current)
131
- return;
132
- setSnapshot(next);
133
- timer = setTimeout(() => { void poll(); }, next.index.analysis?.state === 'running' ? 600 : 1500);
134
- }
135
- catch (cause) {
136
- if (!stopped && mounted.current) {
137
- setError(errorMessage(cause));
138
- timer = setTimeout(() => { void poll(); }, 1500);
139
- }
140
- }
128
+ const changed = () => {
129
+ const next = display.debug.getSnapshot();
130
+ if (next.value)
131
+ setSnapshot(next.value);
132
+ if (next.error)
133
+ setError(errorMessage(next.error));
141
134
  };
142
- void poll();
143
- return () => { stopped = true; if (timer !== undefined)
144
- clearTimeout(timer); };
145
- }, [summarizing, snapshot?.index.analysis?.requestId, call]);
135
+ changed();
136
+ return display.debug.subscribe(changed);
137
+ }, [display]);
146
138
  useEffect(() => {
147
139
  const onEscape = (event) => { if (event.key === 'Escape') {
148
140
  event.stopImmediatePropagation();
@@ -155,39 +147,27 @@ export function AssistantDebugDialog({ services, onClose }) {
155
147
  if (run?.state !== 'running')
156
148
  return;
157
149
  const id = run.requestId;
158
- let stopped = false;
159
- let timer;
160
- const poll = async () => {
161
- try {
162
- const next = await call('assistant/chat/read', { requestId: id });
163
- if (stopped || !mounted.current)
164
- return;
165
- setRun(next);
166
- if (next.state === 'completed') {
167
- activeChatId.current = undefined;
168
- setHistory((previous) => [...previous, { role: 'user', text: submitted }, { role: 'assistant', text: next.text }]);
169
- setSubmitted('');
170
- return;
171
- }
172
- if (next.state !== 'running') {
173
- activeChatId.current = undefined;
174
- return;
175
- }
176
- timer = setTimeout(() => { void poll(); }, 600);
150
+ const resource = display.chat(id);
151
+ const changed = () => {
152
+ const snapshot = resource.getSnapshot();
153
+ if (snapshot.error) {
154
+ setError(errorMessage(snapshot.error));
155
+ return;
177
156
  }
178
- catch (cause) {
179
- if (stopped || !mounted.current)
180
- return;
181
- setError(errorMessage(cause));
182
- setRun((previous) => previous === undefined ? undefined : { ...previous, state: 'failed', error: errorMessage(cause) });
183
- void call('assistant/chat/cancel', { requestId: id }).catch(() => undefined);
184
- activeChatId.current = undefined;
157
+ const next = snapshot.value;
158
+ if (!next || activeChatId.current !== id)
159
+ return;
160
+ setRun(next);
161
+ if (next.state === 'completed') {
162
+ setHistory((previous) => [...previous, { role: 'user', text: submitted }, { role: 'assistant', text: next.text }]);
163
+ setSubmitted('');
185
164
  }
165
+ if (next.state !== 'running')
166
+ activeChatId.current = undefined;
186
167
  };
187
- void poll();
188
- return () => { stopped = true; if (timer !== undefined)
189
- clearTimeout(timer); };
190
- }, [run?.requestId, run?.state, submitted, call]);
168
+ changed();
169
+ return resource.subscribe(changed);
170
+ }, [run?.requestId, run?.state, submitted, display]);
191
171
  const updateScope = async (workspaceId, checked) => {
192
172
  const next = new Set(services.settings.getSnapshot().value?.assistant.managedWorkspaceIds ?? []);
193
173
  if (checked)
@@ -296,14 +276,7 @@ export function AssistantDebugDialog({ services, onClose }) {
296
276
  };
297
277
  const button = (label, action, disabled = busy, primary = false) => createElement('button', { type: 'button', disabled, onClick: action, style: primary ? dshSettingsPrimaryButtonStyle : dshSettingsButtonStyle }, t(label));
298
278
  return createElement('div', { role: 'presentation', onPointerDown: onClose, style: { position: 'fixed', inset: 0, zIndex: 10010, padding: 12, display: 'flex', justifyContent: 'center', alignItems: 'center', background: dshThemeColor.overlay, boxSizing: 'border-box' } }, createElement('div', { role: 'dialog', 'aria-modal': true, 'aria-label': t('assistant.debug.title'), onPointerDown: (event) => event.stopPropagation(), style: { display: 'flex', flexDirection: 'column', gap: 16, width: 'min(960px, 100%)', maxHeight: 'calc(100dvh - 24px)', overflowY: 'auto', padding: 11, borderRadius: 12, border: `1px solid ${dshThemeColor.border}`, color: dshThemeColor.labelPrimary, background: dshThemeColor.menuBackground, boxSizing: 'border-box' } }, createElement('strong', { style: { fontSize: 18 } }, t('assistant.debug.title')), createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('assistant.debug.stepsDescription')), createElement('div', { style: actionsStyle }, button('assistant.debug.viewRefresh', () => { void refresh(); }), button('assistant.debug.modelsRefresh', () => { void loadModels(); }, busy || modelsLoading), button(summarizing ? 'assistant.debug.summarizing' : indexing ? 'assistant.debug.indexing' : 'assistant.debug.build', () => { setTab('result'); void refresh(true, catalog?.models.find((model) => selectionKey(model) === modelKey)); }, busy || managedIds.length === 0 || modelKey === '', true), !summarizing ? null : button('assistant.debug.analysisStop', () => { void stopIndex(); }, false), button('assistant.debug.export', () => { if (snapshot !== undefined)
299
- downloadSnapshot(snapshot); }, busy || snapshot === undefined), button('assistant.debug.close', onClose, false)), createElement('label', { style: { display: 'grid', gap: 8 } }, t('assistant.debug.sharedModel'), createElement('select', { 'aria-label': t('assistant.debug.sharedModel'), value: modelKey, disabled: busy || catalog === undefined, onChange: (event) => setModelKey(event.currentTarget.value), style: { ...dshFieldStyle, width: '100%', padding: 8 } }, createElement('option', { value: '', disabled: true }, t(catalog === undefined ? 'assistant.debug.modelsLoading' : 'assistant.debug.chooseModel')), ...(catalog?.models.map((model) => createElement('option', { key: selectionKey(model), value: selectionKey(model) }, model.label)) ?? []))), ...(catalog?.errors.map((message, index) => createElement('span', { key: index, role: 'alert' }, message)) ?? []), catalog?.models.length === 0 ? createElement('span', { role: 'status' }, t('assistant.debug.modelsEmpty')) : null, createElement('div', { role: 'tablist', 'aria-label': t('assistant.debug.steps'), style: actionsStyle }, ...TABS.map((item) => createElement('button', { key: item, id: `assistant-debug-tab-${item}`, type: 'button', role: 'tab', 'aria-selected': tab === item, 'aria-controls': `assistant-debug-panel-${item}`, onClick: () => setTab(item), style: tab === item ? dshSettingsPrimaryButtonStyle : dshSettingsButtonStyle }, t(`assistant.debug.tab.${item}`)))), loading || saving ? createElement('div', { role: 'status', style: dshSettingsHelpStyle }, t(indexing ? 'assistant.debug.indexing' : 'assistant.debug.loading')) : null, error === undefined ? null : createElement('div', { role: 'alert', style: { color: dshThemeColor.error, overflowWrap: 'anywhere' } }, error), createElement('div', { role: 'tabpanel', id: `assistant-debug-panel-${tab}`, 'aria-labelledby': `assistant-debug-tab-${tab}`, style: { display: 'grid', gap: 14, minWidth: 0 } }, tab !== 'scope' ? null : createElement('section', { style: sectionStyle }, createElement('strong', null, t('assistant.debug.tab.scope')), createElement('span', { style: dshSettingsHelpStyle }, t('assistant.debug.rangeHelp')), createElement('span', null, t('assistant.debug.selectedCount', { count: managedIds.length })), ...workspaces.map((workspace) => createElement('label', { key: workspace.workspaceId, style: { display: 'flex', alignItems: 'center', gap: 12 } }, createElement('input', { type: 'checkbox', 'aria-label': workspace.title, checked: managedIds.includes(workspace.workspaceId), disabled: busy || !settings.writable || settings.status === 'loading', onChange: (event) => { void updateScope(workspace.workspaceId, event.currentTarget.checked); } }), createElement('span', { style: { display: 'grid', gap: 3, minWidth: 0, overflowWrap: 'anywhere' } }, createElement('strong', null, workspace.title), createElement('span', { style: dshSettingsHelpStyle }, workspace.path ?? workspace.workspaceId), workspace.available ? null : createElement('span', null, t('assistant.debug.missingWorkspace'))))), workspaces.length === 0 ? createElement('span', null, t('assistant.noWorkspaces')) : null), tab !== 'sessions' || snapshot === undefined ? null : createElement(AssistantScopeSessionsView, { snapshot, managedIds, t }), tab !== 'result' ? null : createElement(AssistantPromptEditor, { kind: 'index', value: prompts.index, disabled: busy || !settings.writable || settings.status !== 'ready', onSave: savePrompt, t }), tab !== 'result' || snapshot === undefined ? null : createElement(AssistantDebugSnapshotView, { snapshot, t }), tab !== 'records' || snapshot === undefined ? null : createElement(AssistantIndexRecordsView, { snapshot, t }), tab !== 'chat' ? null : createElement('section', { style: sectionStyle }, createElement(AssistantPromptEditor, { kind: 'chat', value: prompts.chat, disabled: busy || !settings.writable || settings.status !== 'ready', onSave: savePrompt, t }), createElement('strong', null, t('assistant.debug.tab.chat')), createElement('span', { style: dshSettingsHelpStyle }, t('assistant.debug.chatHelp')), snapshot?.indexState !== 'ready' ? createElement('span', { role: 'status' }, t('assistant.debug.chatNeedsIndex')) : createElement('span', null, t('assistant.debug.chatGeneration', { generation: snapshot.index.generation })), createElement('div', { style: actionsStyle }, button('assistant.debug.chatClear', () => { setHistory([]); setRun(undefined); setSubmitted(''); }, chatting)), createElement(AssistantChatMessagesView, { history, submitted, run, t }), createElement('textarea', { 'aria-label': t('assistant.debug.chatInput'), placeholder: t('assistant.debug.chatPlaceholder'), maxLength: 8000, value: text, disabled: busy, onChange: (event) => setText(event.currentTarget.value), rows: 3, style: { ...dshFieldStyle, width: '100%', padding: 10, boxSizing: 'border-box', resize: 'vertical' } }), createElement('div', { style: actionsStyle }, button(chatting ? 'assistant.debug.chatGenerating' : 'assistant.debug.chatSend', () => { void send(); }, busy || modelsLoading || text.trim() === '' || modelKey === '' || snapshot?.indexState !== 'ready', true), !chatting ? null : button('assistant.debug.chatStop', () => { void stop(); }, starting))))));
300
- }
301
- /** 草稿只在明确保存时写入;保存单个字段,不覆盖另一阶段的提示词。 */
302
- export function AssistantPromptEditor({ kind, value, disabled, onSave, onChange, t }) {
303
- const [draft, setDraft] = useState(value);
304
- useEffect(() => setDraft(value), [value]);
305
- const change = (text) => { setDraft(text); void onChange?.(kind, text).catch(() => undefined); };
306
- return createElement('details', { style: sectionStyle }, createElement('summary', { style: { ...assistantSettingTextStyle, cursor: 'pointer' } }, t(`assistant.debug.prompt.${kind}`)), createElement('span', { style: dshSettingsHelpStyle }, t('assistant.debug.promptHelp')), createElement('textarea', { 'aria-label': t(`assistant.debug.prompt.${kind}`), value: draft, disabled, maxLength: ASSISTANT_PROMPT_MAX_CHARS, rows: 5, onChange: (event) => change(event.currentTarget.value), style: { ...dshFieldStyle, ...assistantSettingTextStyle, width: '100%', padding: 10, boxSizing: 'border-box', resize: 'vertical' } }), createElement('div', { style: actionsStyle }, onChange === undefined ? createElement('button', { type: 'button', disabled: disabled || draft === value, style: dshSettingsPrimaryButtonStyle, onClick: () => { void onSave(kind, draft.trim() || DEFAULT_ASSISTANT_PROMPTS[kind]).catch(() => undefined); } }, t('assistant.debug.promptSave')) : null, createElement('button', { type: 'button', disabled, style: dshSettingsButtonStyle, onClick: () => change(DEFAULT_ASSISTANT_PROMPTS[kind]) }, t('assistant.debug.promptDefault'))));
279
+ downloadSnapshot(snapshot); }, busy || snapshot === undefined), button('assistant.debug.close', onClose, false)), createElement('label', { style: { display: 'grid', gap: 8 } }, t('assistant.debug.sharedModel'), createElement('select', { 'aria-label': t('assistant.debug.sharedModel'), value: modelKey, disabled: busy || catalog === undefined, onChange: (event) => setModelKey(event.currentTarget.value), style: { ...dshFieldStyle, width: '100%', padding: 8 } }, createElement('option', { value: '', disabled: true }, t(catalog === undefined ? 'assistant.debug.modelsLoading' : 'assistant.debug.chooseModel')), ...(catalog?.models.map((model) => createElement('option', { key: selectionKey(model), value: selectionKey(model) }, model.label)) ?? []))), ...(catalog?.errors.map((message, index) => createElement('span', { key: index, role: 'alert' }, message)) ?? []), catalog?.models.length === 0 ? createElement('span', { role: 'status' }, t('assistant.debug.modelsEmpty')) : null, createElement('div', { role: 'tablist', 'aria-label': t('assistant.debug.steps'), style: actionsStyle }, ...TABS.map((item) => createElement('button', { key: item, id: `assistant-debug-tab-${item}`, type: 'button', role: 'tab', 'aria-selected': tab === item, 'aria-controls': `assistant-debug-panel-${item}`, onClick: () => setTab(item), style: tab === item ? dshSettingsPrimaryButtonStyle : dshSettingsButtonStyle }, t(`assistant.debug.tab.${item}`)))), loading || saving || snapshot === undefined && error === undefined ? createElement('div', { role: 'status', style: dshSettingsHelpStyle }, t(indexing ? 'assistant.debug.indexing' : 'assistant.debug.loading')) : null, error === undefined ? null : createElement('div', { role: 'alert', style: { color: dshThemeColor.error, overflowWrap: 'anywhere' } }, error), createElement('div', { role: 'tabpanel', id: `assistant-debug-panel-${tab}`, 'aria-labelledby': `assistant-debug-tab-${tab}`, style: { display: 'grid', gap: 14, minWidth: 0 } }, tab !== 'scope' ? null : createElement('section', { style: sectionStyle }, createElement('strong', null, t('assistant.debug.tab.scope')), createElement('span', { style: dshSettingsHelpStyle }, t('assistant.debug.rangeHelp')), createElement('span', null, t('assistant.debug.selectedCount', { count: managedIds.length })), ...workspaces.map((workspace) => createElement('label', { key: workspace.workspaceId, style: { display: 'flex', alignItems: 'center', gap: 12 } }, createElement('input', { type: 'checkbox', 'aria-label': workspace.title, checked: managedIds.includes(workspace.workspaceId), disabled: busy || !settings.writable || settings.status === 'loading', onChange: (event) => { void updateScope(workspace.workspaceId, event.currentTarget.checked); } }), createElement('span', { style: { display: 'grid', gap: 3, minWidth: 0, overflowWrap: 'anywhere' } }, createElement('strong', null, workspace.title), createElement('span', { style: dshSettingsHelpStyle }, workspace.path ?? workspace.workspaceId), workspace.available ? null : createElement('span', null, t('assistant.debug.missingWorkspace'))))), workspaces.length === 0 ? createElement('span', null, t('assistant.noWorkspaces')) : null), tab !== 'sessions' || snapshot === undefined ? null : createElement(AssistantScopeSessionsView, { snapshot, managedIds, t }), tab !== 'result' ? null : createElement(AssistantPromptEditor, { kind: 'index', value: prompts.index, disabled: busy || !settings.writable || settings.status !== 'ready', onSave: savePrompt, t }), tab !== 'result' || snapshot === undefined ? null : createElement(AssistantDebugSnapshotView, { snapshot, t }), tab !== 'records' || snapshot === undefined ? null : createElement(AssistantIndexRecordsView, { snapshot, t }), tab !== 'chat' ? null : createElement('section', { style: sectionStyle }, createElement(AssistantPromptEditor, { kind: 'chat', value: prompts.chat, disabled: busy || !settings.writable || settings.status !== 'ready', onSave: savePrompt, t }), createElement('strong', null, t('assistant.debug.tab.chat')), createElement('span', { style: dshSettingsHelpStyle }, t('assistant.debug.chatHelp')), snapshot?.indexState !== 'ready' ? createElement('span', { role: 'status' }, t('assistant.debug.chatNeedsIndex')) : createElement('span', null, t('assistant.debug.chatGeneration', { generation: snapshot.index.generation })), createElement('div', { style: actionsStyle }, button('assistant.debug.chatClear', () => { setHistory([]); setRun(undefined); setSubmitted(''); }, chatting)), createElement(AssistantChatMessagesView, { history, submitted, run, t }), createElement('textarea', { 'aria-label': t('assistant.debug.chatInput'), placeholder: t('assistant.debug.chatPlaceholder'), maxLength: 8000, value: text, disabled: busy, onChange: (event) => setText(event.currentTarget.value), rows: 3, style: { ...dshFieldStyle, width: '100%', padding: 10, boxSizing: 'border-box', resize: 'vertical' } }), createElement('div', { style: actionsStyle }, button(chatting ? 'assistant.debug.chatGenerating' : 'assistant.debug.chatSend', () => { void send(); }, busy || modelsLoading || text.trim() === '' || modelKey === '' || snapshot?.indexState !== 'ready', true), !chatting ? null : button('assistant.debug.chatStop', () => { void stop(); }, starting))))));
307
280
  }
308
281
  /** 范围成员与正文索引分开显示,空项目也必须出现在范围内。 */
309
282
  export function AssistantScopeSessionsView({ snapshot, managedIds, t }) {