@chatcode/chatcode-cli 3.0.3 → 3.0.4-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/README.i18n.yaml +10 -10
  2. package/README.md +16 -1
  3. package/README.zh.md +16 -1
  4. package/lib/bin.js +62 -11
  5. package/lib/{command-errors-CBJRI2gy.js → command-errors-CScdshCl.js} +12 -12
  6. package/lib/{command-trees-Dvq4C7a4.js → command-trees-Dc17MYfV.js} +2 -2
  7. package/lib/{component-identity-DPdJglJO.js → component-identity-DFJD_d-P.js} +3 -3
  8. package/lib/{dump-config-CauO75nE.js → dump-config-BcH-VYuv.js} +5 -5
  9. package/lib/dump-config-CyopmD85.js +2 -0
  10. package/lib/{dump-config-schema-CObLWWaW.js → dump-config-schema-DM0fb6Ns.js} +2 -2
  11. package/lib/{extension-events-Be9LWvHD.js → extension-events-qXmhzmHo.js} +20 -20
  12. package/lib/{frames-7PAg0Q9b.js → frames-B89znn_0.js} +4 -4
  13. package/lib/headless-compat.js +2 -2
  14. package/lib/{host-access-DeCjoRQP.js → host-access-B0CRAwsX.js} +1 -1
  15. package/lib/{keymap-CRUxM_qn.js → keymap-CIoVICBI.js} +17 -16
  16. package/lib/{plugin-CDFSDE_y.js → plugin-BKQsL2xn.js} +3264 -2301
  17. package/lib/{plugin-Cn-hyYY8.js → plugin-eJjD6r12.js} +1 -1
  18. package/lib/{profile-boot-SJGbpLgN.js → profile-boot-BNQry1NM.js} +97 -14
  19. package/lib/profile-boot.js +2 -2
  20. package/lib/{scenes-D6jV1EEi.js → scenes-BRf-zMpF.js} +3 -3
  21. package/lib/{settings-sections-DJQRNBo9.js → settings-sections-4gMhveN_.js} +7 -3
  22. package/lib/statusBarSettings-CnmdSHkO.js +382 -0
  23. package/lib/{themes-BCly4_y9.js → themes-Ce97Zsri.js} +13 -13
  24. package/lib/tui-compat-command-trees.js +1 -1
  25. package/lib/tui-compat-extensions.js +3 -3
  26. package/lib/tui-compat-plugin-host.js +5 -5
  27. package/lib/tui-compat-scenes.js +1 -1
  28. package/lib/tui-compat-settings-sections.js +1 -1
  29. package/lib/tui-compat-working-activity.js +4 -4
  30. package/lib/tui-compat-workspaces.js +1 -1
  31. package/lib/tui-compat.js +9 -26
  32. package/lib/types/args.d.ts +2 -0
  33. package/lib/types/permission-bypass.d.ts +16 -0
  34. package/lib/types/profile-boot.d.ts +12 -0
  35. package/lib/types/tui-compat.d.ts +4 -0
  36. package/lib/types/web-browser.d.ts +6 -0
  37. package/lib/types/web-instance.d.ts +42 -0
  38. package/lib/web-browser-Vcgfdsv_.js +46 -0
  39. package/lib/web-instance-B0jec7cq.js +2 -0
  40. package/lib/web-instance-DbP7IHPv.js +280 -0
  41. package/lib/{workspaces-Bb3kCAFb.js → workspaces-1xrm-e3V.js} +2 -2
  42. package/package.json +36 -33
  43. package/runtime/manifest.json +4 -2
  44. package/runtime/node_modules/@deepseek-ai/dsh-agent-default-model/lib/index.js +137 -11
  45. package/runtime/node_modules/@deepseek-ai/dsh-agent-default-model/lib/types/index.d.ts +27 -1
  46. package/runtime/node_modules/@deepseek-ai/dsh-agent-preset/skills/cordis-composition-reference/references/packages.md +2 -1
  47. package/runtime/node_modules/@deepseek-ai/dsh-api-gateway/lib/client.js +2 -0
  48. package/runtime/node_modules/@deepseek-ai/dsh-api-gateway/lib/types/client/remote-stream.js +4 -0
  49. package/runtime/node_modules/@deepseek-ai/dsh-api-remotes/lib/client.js +152 -39
  50. package/runtime/node_modules/@deepseek-ai/dsh-api-remotes/lib/index.js +4 -0
  51. package/runtime/node_modules/@deepseek-ai/dsh-api-remotes/lib/types/remote-events.d.ts +3 -0
  52. package/runtime/node_modules/@deepseek-ai/dsh-api-remotes/lib/types/remote-events.js +1 -0
  53. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/index.js +179 -35
  54. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/typert.host.js +57 -30
  55. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/typert.remote-client.js +31 -19
  56. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/agent.d.ts +9 -1
  57. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/agent.js +36 -6
  58. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/archived-session-gate.js +1 -1
  59. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/catalog.js +12 -2
  60. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/client/sessions/service.d.ts +1 -1
  61. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/commands.d.ts +2 -2
  62. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/commands.js +24 -8
  63. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/index.d.ts +4 -3
  64. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/index.js +31 -14
  65. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/list.d.ts +6 -0
  66. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/list.js +89 -4
  67. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/remote-events.d.ts +1 -1
  68. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/types.d.ts +27 -0
  69. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/index.js +28 -1
  70. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/typert.host.js +39 -0
  71. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/typert.remote-client.d.ts +2 -0
  72. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/typert.remote-client.js +32 -0
  73. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/types/index.d.ts +8 -0
  74. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/types/index.js +19 -1
  75. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/client.js +30 -0
  76. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/index.js +111 -2
  77. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/typert.host.js +104 -11
  78. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/typert.remote-client.d.ts +5 -1
  79. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/typert.remote-client.js +78 -11
  80. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/client/model.d.ts +14 -1
  81. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/client/model.js +17 -0
  82. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/client/service.d.ts +15 -0
  83. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/client/service.js +12 -0
  84. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/commands.d.ts +13 -1
  85. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/commands.js +44 -2
  86. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/feed.js +17 -0
  87. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/index.d.ts +13 -1
  88. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/index.js +22 -0
  89. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/types.d.ts +17 -0
  90. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/index.js +67 -19
  91. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/types/index.d.ts +1 -1
  92. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/types/profile-context.d.ts +11 -1
  93. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/worker/profile-resolution-bootstrap.js +22 -3
  94. package/runtime/node_modules/@deepseek-ai/dsh-base/cordis.patch.yml +9 -3
  95. package/runtime/node_modules/@deepseek-ai/dsh-base/package.json +2 -1
  96. package/runtime/node_modules/@deepseek-ai/dsh-client-hmr/lib/client.js +931 -7
  97. package/runtime/node_modules/@deepseek-ai/dsh-client-hmr/lib/index.js +57 -19
  98. package/runtime/node_modules/@deepseek-ai/dsh-client-hmr/lib/types/client/index.d.ts +5 -2
  99. package/runtime/node_modules/@deepseek-ai/dsh-client-hmr/lib/types/config.d.ts +12 -0
  100. package/runtime/node_modules/@deepseek-ai/dsh-client-hmr/lib/types/events.d.ts +4 -4
  101. package/runtime/node_modules/@deepseek-ai/dsh-client-hmr/lib/types/index.d.ts +3 -8
  102. package/runtime/node_modules/@deepseek-ai/dsh-client-hmr/package.json +6 -2
  103. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-chat/lib/client.js +3 -2
  104. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-chat/lib/types/index.d.ts +2 -2
  105. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-commands/lib/client.js +10 -0
  106. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js +1 -1
  107. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/types/client/present-open.d.ts +1 -1
  108. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-goal/lib/client.js +1 -1
  109. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/client.js +68 -16
  110. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/directory.d.ts +3 -1
  111. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/locales.d.ts +6 -0
  112. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-primitives/lib/markdown/CodeBlock.module.css +3 -5
  113. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-primitives/lib/markdown/MarkdownText.module.css +23 -27
  114. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings/lib/types/client/contract/slots.d.ts +3 -1
  115. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-account/lib/client.js +2 -2
  116. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-account/lib/types/index.d.ts +2 -2
  117. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/client.js +8 -7
  118. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/types/client/SettingsDocumentAction.d.ts +1 -1
  119. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/types/client/settings-document-store.d.ts +2 -1
  120. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/client.js +33 -12
  121. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/types/client/locales.d.ts +2 -0
  122. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/lib/client.js +1 -1
  123. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar/lib/client.js +3 -1
  124. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-theme/lib/client.js +1 -1
  125. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/client.js +1925 -207
  126. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/ArchivedSessions.d.ts +13 -0
  127. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/contract/slots.d.ts +4 -0
  128. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/locales.d.ts +42 -0
  129. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/recent.d.ts +11 -0
  130. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/rows/RecentList.d.ts +15 -0
  131. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/rows/Rows.d.ts +6 -1
  132. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/session-actions/DeleteSession.d.ts +24 -0
  133. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/stores.d.ts +2 -2
  134. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/tree.d.ts +15 -13
  135. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/package.json +3 -1
  136. package/runtime/node_modules/@deepseek-ai/dsh-commands/lib/index.js +16 -0
  137. package/runtime/node_modules/@deepseek-ai/dsh-commands/lib/typert.host.js +7 -3
  138. package/runtime/node_modules/@deepseek-ai/dsh-commands/lib/typert.remote-client.js +6 -2
  139. package/runtime/node_modules/@deepseek-ai/dsh-commands/lib/types/index.js +20 -0
  140. package/runtime/node_modules/@deepseek-ai/dsh-commands/lib/types/types.d.ts +5 -0
  141. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/index.js +35 -0
  142. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/brand.d.ts +11 -0
  143. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/brand.js +10 -0
  144. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/index.d.ts +28 -0
  145. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/index.js +36 -0
  146. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/package.json +42 -0
  147. package/runtime/node_modules/@deepseek-ai/dsh-config-editor/lib/index.js +102 -14
  148. package/runtime/node_modules/@deepseek-ai/dsh-config-editor/lib/types/index.d.ts +34 -4
  149. package/runtime/node_modules/@deepseek-ai/dsh-config-editor/package.json +1 -0
  150. package/runtime/node_modules/@deepseek-ai/dsh-cordis-client-runner/lib/client.js +5 -2
  151. package/runtime/node_modules/@deepseek-ai/dsh-host-webserver/lib/index.js +2 -1
  152. package/runtime/node_modules/@deepseek-ai/dsh-native-command/lib/index.js +21 -8
  153. package/runtime/node_modules/@deepseek-ai/dsh-native-command/lib/types/path-opener.d.ts +4 -6
  154. package/runtime/node_modules/@deepseek-ai/dsh-native-command/lib/types/path-opener.js +18 -7
  155. package/runtime/node_modules/@deepseek-ai/dsh-schedule/lib/index.js +4 -0
  156. package/runtime/node_modules/@deepseek-ai/dsh-schedule/lib/typert.host.js +5 -5
  157. package/runtime/node_modules/@deepseek-ai/dsh-schedule/lib/typert.remote-client.js +5 -5
  158. package/runtime/node_modules/@deepseek-ai/dsh-schedule/lib/types/index.js +5 -0
  159. package/runtime/node_modules/@deepseek-ai/dsh-session/lib/types/index.d.ts +21 -0
  160. package/runtime/node_modules/@deepseek-ai/dsh-session-persistence/lib/index.js +12 -0
  161. package/runtime/node_modules/@deepseek-ai/dsh-session-persistence/lib/types/index.d.ts +15 -0
  162. package/runtime/node_modules/@deepseek-ai/dsh-session-persistence-jsonl/lib/index.js +95 -2
  163. package/runtime/node_modules/@deepseek-ai/dsh-session-persistence-jsonl/lib/types/index.d.ts +3 -1
  164. package/runtime/node_modules/@deepseek-ai/dsh-session-projection-cache/lib/index.js +25 -1
  165. package/runtime/node_modules/@deepseek-ai/dsh-session-projection-cache/lib/types/index.d.ts +1 -0
  166. package/runtime/node_modules/@deepseek-ai/dsh-session-projection-cache/package.json +2 -1
  167. package/runtime/node_modules/@deepseek-ai/dsh-session-query/lib/index.js +13 -0
  168. package/runtime/node_modules/@deepseek-ai/dsh-session-query/lib/types/observation.d.ts +5 -0
  169. package/runtime/node_modules/@deepseek-ai/dsh-session-query-sqlite/lib/index.js +26 -0
  170. package/runtime/node_modules/@deepseek-ai/dsh-session-query-sqlite/package.json +2 -1
  171. package/runtime/node_modules/@deepseek-ai/dsh-settings/lib/index.js +5 -4
  172. package/runtime/node_modules/@deepseek-ai/dsh-settings/lib/types/index.d.ts +4 -3
  173. package/runtime/node_modules/@deepseek-ai/dsh-settings/lib/types/index.js +4 -3
  174. package/runtime/node_modules/@deepseek-ai/dsh-storage/lib/types/backend.d.ts +4 -0
  175. package/runtime/node_modules/@deepseek-ai/dsh-storage-domain/lib/index.js +65 -1
  176. package/runtime/node_modules/@deepseek-ai/dsh-storage-domain/lib/types/domain.d.ts +17 -2
  177. package/runtime/node_modules/@deepseek-ai/dsh-storage-json/lib/index.js +25 -0
  178. package/runtime/node_modules/@deepseek-ai/dsh-storage-json/package.json +1 -0
  179. package/runtime/node_modules/@deepseek-ai/dsh-subagent/lib/types/control.d.ts +1 -1
  180. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/index.js +5522 -0
  181. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/command-args.d.ts +17 -0
  182. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/commands/tianti/cicd.d.ts +8 -0
  183. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/commands/tianti/tianti.d.ts +7 -0
  184. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/commands/tianti-deliver/tianti-deliver.d.ts +8 -0
  185. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/config.d.ts +27 -0
  186. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/index.d.ts +13 -0
  187. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/memory-config.d.ts +10 -0
  188. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/runtime.d.ts +105 -0
  189. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/aliases.d.ts +11 -0
  190. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/auth.d.ts +20 -0
  191. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/client.d.ts +206 -0
  192. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/config.d.ts +22 -0
  193. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/index.d.ts +6 -0
  194. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/log.d.ts +16 -0
  195. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/types.d.ts +136 -0
  196. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/codebase.d.ts +19 -0
  197. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/dynamicWorkflow.d.ts +10 -0
  198. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/engine.d.ts +8 -0
  199. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/executor.d.ts +11 -0
  200. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/executors.d.ts +15 -0
  201. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/index.d.ts +23 -0
  202. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/memorySuggestions.d.ts +12 -0
  203. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/openspec.d.ts +31 -0
  204. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/recommend.d.ts +8 -0
  205. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/render.d.ts +8 -0
  206. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/requirementContext.d.ts +12 -0
  207. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/scenarioUpgrade.d.ts +24 -0
  208. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/state.d.ts +16 -0
  209. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/store.d.ts +33 -0
  210. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/templates.d.ts +8 -0
  211. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/types.d.ts +385 -0
  212. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/writeReviewSync.d.ts +6 -0
  213. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/writeReview/index.d.ts +29 -0
  214. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/writeReview/store.d.ts +20 -0
  215. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/writeReview/types.d.ts +49 -0
  216. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/tools.d.ts +12 -0
  217. package/runtime/node_modules/@deepseek-ai/dsh-tianti/package.json +57 -0
  218. package/runtime/node_modules/@deepseek-ai/dsh-tool-cordis/lib/types/api-catalog.js +157 -22
  219. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-D5kpKf--.css +1 -0
  220. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Dz_cDcce.js +133 -0
  221. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Dz_cDcce.js.map +1 -0
  222. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/chatcode-apple-touch-icon.png +0 -0
  223. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/chatcode-icon-32.png +0 -0
  224. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/chatcode-mask-icon.svg +1 -0
  225. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/favicon-dark.svg +1 -3
  226. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/favicon.ico +0 -0
  227. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/favicon.svg +1 -3
  228. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/index.html +8 -4
  229. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/preview.html +8 -4
  230. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/package.json +2 -1
  231. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/index.js +325 -37
  232. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/invariant.js +6 -1
  233. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/entity.d.ts +6 -0
  234. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/entity.js +23 -17
  235. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/index.d.ts +41 -0
  236. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/index.js +314 -23
  237. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/spec.d.ts +4 -0
  238. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/spec.js +4 -0
  239. package/lib/dump-config-CijLv_kn.js +0 -2
  240. package/lib/tuiDisplayPrefs-Dm_fULiR.js +0 -204
  241. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-DUvMhLle.css +0 -1
  242. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Q6zc2uHV.js +0 -127
  243. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Q6zc2uHV.js.map +0 -1
@@ -1,16 +1,26 @@
1
1
  import { statSync } from "node:fs";
2
+ import WebSocket, { WebSocketServer } from "ws";
2
3
  import z from "@deepseek-ai/schemastery";
3
4
  //#region lib/types/events.js
4
- /** System SSE endpoint pushing graph/rebuilt frames (wire protocol constant). */
5
+ /** System endpoint pushing graph/rebuilt frames (wire protocol constant). */
5
6
  const EVENTS_ENDPOINT = "/plugins/events";
6
7
  EVENTS_ENDPOINT.slice(1);
7
8
  //#endregion
9
+ //#region lib/types/config.js
10
+ /** Shared Host polling and browser reconnection configuration. */
11
+ /** Validate both halves against the same defaults. */
12
+ const Config = z.object({
13
+ pollIntervalMs: z.number().step(1).min(1).default(500),
14
+ reconnectDelayMs: z.number().step(1).min(1).default(1e3)
15
+ });
16
+ //#endregion
8
17
  //#region lib/types/index.js
9
18
  /**
10
19
  * Host transport for Web client graph changes and rebuilt bundles. One interval
11
20
  * stat-polls every graph row's client bundle (polling by design: network mounts
12
21
  * deliver no inotify events), reports changes through
13
- * `clientModules.rebuilt(id)`, and serves the `/plugins/events` SSE channel
22
+ * `clientModules.rebuilt(id)`, and serves `/plugins/events` over WebSocket
23
+ * (with the legacy SSE route retained)
14
24
  * broadcasting graph/rebuilt frames to the browser half (src/client/).
15
25
  * The Web composition mounts this transport for live graph updates;
16
26
  * a development rebuild watcher also supplies bundle changes.
@@ -19,7 +29,6 @@ EVENTS_ENDPOINT.slice(1);
19
29
  const name = "client-hmr";
20
30
  /** Required services: the client graph and Web route registry. */
21
31
  const inject = ["clientModules", "webServer"];
22
- const Config = z.object({ pollIntervalMs: z.number().step(1).min(1).default(500) });
23
32
  /** Serialize one frame as an SSE data line. */
24
33
  function sseData(frame) {
25
34
  return `data: ${JSON.stringify(frame)}\n\n`;
@@ -38,7 +47,7 @@ function sameBundleStat(left, right) {
38
47
  return left.mtimeMs === right.mtimeMs && left.ctimeMs === right.ctimeMs && left.size === right.size;
39
48
  }
40
49
  /**
41
- * Mount bundle watches and graph/rebuilt SSE delivery.
50
+ * Mount bundle watches and authenticated graph/rebuilt WebSocket delivery, retaining legacy SSE clients.
42
51
  * @param ctx - host plugin context carrying clientModules and webServer.
43
52
  * @param config - validated {@link Config}.
44
53
  */
@@ -114,12 +123,17 @@ function apply(ctx, config) {
114
123
  };
115
124
  }, "client-hmr: bundle watches");
116
125
  const connections = /* @__PURE__ */ new Set();
126
+ let sockets;
127
+ const broadcast = (frame) => {
128
+ const json = JSON.stringify(frame);
129
+ for (const res of connections) res.write(`data: ${json}\n\n`);
130
+ for (const socket of sockets.clients) if (socket.readyState === WebSocket.OPEN) socket.send(json);
131
+ };
117
132
  const publishGraph = () => {
118
- const line = sseData({
133
+ broadcast({
119
134
  type: "graph",
120
135
  graph: ctx.clientModules.graph()
121
136
  });
122
- for (const res of connections) res.write(line);
123
137
  };
124
138
  const connect = (res) => {
125
139
  res.writeHead(200, {
@@ -137,8 +151,40 @@ function apply(ctx, config) {
137
151
  connections.delete(res);
138
152
  });
139
153
  };
140
- ctx.effect(() => {
141
- const disposeRoute = ctx.webServer.register({
154
+ ctx.effect(function* () {
155
+ sockets = new WebSocketServer({ noServer: true });
156
+ yield async () => {
157
+ for (const res of connections) res.destroy();
158
+ connections.clear();
159
+ for (const socket of sockets.clients) socket.terminate();
160
+ await new Promise((resolve, reject) => {
161
+ sockets.close((error) => {
162
+ if (error === void 0) resolve();
163
+ else reject(error);
164
+ });
165
+ });
166
+ };
167
+ yield ctx.webServer.registerUpgrade({
168
+ path: EVENTS_ENDPOINT,
169
+ handler(req, socket, head) {
170
+ const connection = ctx.get("connection");
171
+ const rejection = connection === void 0 ? 403 : connection.requestRejection(req);
172
+ if (rejection !== void 0) {
173
+ socket.end(`HTTP/1.1 ${String(rejection)} Rejected\r\nConnection: close\r\nContent-Length: 0\r\n\r\n`);
174
+ return;
175
+ }
176
+ sockets.handleUpgrade(req, socket, head, (client) => {
177
+ client.on("error", () => {
178
+ client.terminate();
179
+ });
180
+ client.send(JSON.stringify({
181
+ type: "graph",
182
+ graph: ctx.clientModules.graph()
183
+ }));
184
+ });
185
+ }
186
+ });
187
+ yield ctx.webServer.register({
142
188
  kind: "exact",
143
189
  path: EVENTS_ENDPOINT,
144
190
  handler: (req, res) => {
@@ -150,22 +196,14 @@ function apply(ctx, config) {
150
196
  connect(res);
151
197
  }
152
198
  });
153
- const unsubscribeGraph = ctx.clientModules.onGraphChanged(publishGraph);
154
- const unsubscribe = ctx.clientModules.onRebuilt((id, rev) => {
155
- const line = sseData({
199
+ yield ctx.clientModules.onGraphChanged(publishGraph);
200
+ yield ctx.clientModules.onRebuilt((id, rev) => {
201
+ broadcast({
156
202
  type: "rebuilt",
157
203
  id,
158
204
  rev
159
205
  });
160
- for (const res of connections) res.write(line);
161
206
  });
162
- return () => {
163
- unsubscribeGraph();
164
- unsubscribe();
165
- disposeRoute();
166
- for (const res of connections) res.destroy();
167
- connections.clear();
168
- };
169
207
  }, "client-hmr: /plugins/events channel");
170
208
  }
171
209
  //#endregion
@@ -1,6 +1,8 @@
1
- /** Web SSE transport for page-owned client entry reconciliation and rebuilt code replacement. */
1
+ /** WebSocket transport for page-owned client entry reconciliation and rebuilt code replacement. */
2
2
  import type { Context } from '@deepseek-ai/cordis';
3
+ import { Config } from '../config.ts';
3
4
  export type { PluginsEventFrame } from '../events.ts';
5
+ export { Config } from '../config.ts';
4
6
  /** Cordis plugin name. */
5
7
  export declare const name = "client-hmr";
6
8
  /** Required service: the client module system whose entry controller handles received frames. */
@@ -8,6 +10,7 @@ export declare const inject: string[];
8
10
  /**
9
11
  * Forward graph snapshots and rebuilds to the page's shared serial controller.
10
12
  * @param ctx - Plugin context with the client module system.
13
+ * @param config - validated browser reconnection timing.
11
14
  */
12
- export declare function apply(ctx: Context): void;
15
+ export declare function apply(ctx: Context, config: Config): void;
13
16
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,12 @@
1
+ /** Shared Host polling and browser reconnection configuration. */
2
+ import z from '@deepseek-ai/schemastery';
3
+ /** Timing controls for the plugin reload transport. */
4
+ export interface Config {
5
+ /** Bundle stat-poll interval in milliseconds. Default: 500. */
6
+ pollIntervalMs?: number;
7
+ /** Browser WebSocket reconnection delay in milliseconds. Default: 1000. */
8
+ reconnectDelayMs?: number;
9
+ }
10
+ /** Validate both halves against the same defaults. */
11
+ export declare const Config: z<Config, Required<Config>>;
12
+ //# sourceMappingURL=config.d.ts.map
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Wire protocol of the `/plugins/events` SSE channel — single source for
2
+ * Wire protocol of the `/plugins/events` WebSocket and legacy SSE channel — single source for
3
3
  * both halves of this package. Frames still cross a wire boundary: the
4
4
  * browser half validates them at its JSON parse point; sharing the type keeps
5
5
  * the two ends from drifting, not from parsing.
6
6
  */
7
7
  import type { WebBootGraph } from '@deepseek-ai/dsh-client-modules';
8
- /** One SSE frame: the settled graph on connection or change, or one rebuilt bundle notice. */
8
+ /** One JSON frame: the settled graph on connection or change, or one rebuilt bundle notice. */
9
9
  export type PluginsEventFrame = {
10
10
  type: 'graph';
11
11
  graph: WebBootGraph;
@@ -30,11 +30,11 @@ export type PluginsEventParseResult = {
30
30
  };
31
31
  /**
32
32
  * Validate the frame envelope; the module controller parses the complete graph before updating its index.
33
- * @param value - Parsed JSON value from the EventSource message.
33
+ * @param value - Parsed JSON value from the transport message.
34
34
  * @returns the known frame, an unknown-type marker, or an invalid marker.
35
35
  */
36
36
  export declare function parsePluginsEventFrame(value: unknown): PluginsEventParseResult;
37
- /** System SSE endpoint pushing graph/rebuilt frames (wire protocol constant). */
37
+ /** System endpoint pushing graph/rebuilt frames (wire protocol constant). */
38
38
  export declare const EVENTS_ENDPOINT = "/plugins/events";
39
39
  /**
40
40
  * Document-relative form of {@link EVENTS_ENDPOINT} used by the browser half.
@@ -1,19 +1,14 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
- import z from '@deepseek-ai/schemastery';
2
+ import { Config } from './config.ts';
3
3
  export type { PluginsEventFrame } from './events.ts';
4
4
  export { EVENTS_ENDPOINT } from './events.ts';
5
+ export { Config } from './config.ts';
5
6
  /** Cordis plugin name. */
6
7
  export declare const name = "client-hmr";
7
8
  /** Required services: the client graph and Web route registry. */
8
9
  export declare const inject: string[];
9
- /** Plugin config, validated by the same-named schemastery schema. */
10
- export interface Config {
11
- /** Bundle stat-poll interval in milliseconds (default 500, the build-side watcher's polling default). */
12
- pollIntervalMs?: number;
13
- }
14
- export declare const Config: z<Config>;
15
10
  /**
16
- * Mount bundle watches and graph/rebuilt SSE delivery.
11
+ * Mount bundle watches and authenticated graph/rebuilt WebSocket delivery, retaining legacy SSE clients.
17
12
  * @param ctx - host plugin context carrying clientModules and webServer.
18
13
  * @param config - validated {@link Config}.
19
14
  */
@@ -40,12 +40,16 @@
40
40
  },
41
41
  "license": "MIT",
42
42
  "dependencies": {
43
- "@deepseek-ai/schemastery": "workspace:~"
43
+ "@deepseek-ai/schemastery": "workspace:~",
44
+ "ws": "^8.21.0"
44
45
  },
45
46
  "peerDependencies": {
46
- "@deepseek-ai/cordis": "workspace:~"
47
+ "@deepseek-ai/cordis": "workspace:~",
48
+ "@deepseek-ai/dsh-client-connection": "workspace:*"
47
49
  },
48
50
  "devDependencies": {
51
+ "@deepseek-ai/dsh-client-connection": "workspace:*",
52
+ "@types/ws": "^8.18.1",
49
53
  "@deepseek-ai/cordis-plugin-loader": "workspace:~",
50
54
  "@deepseek-ai/dsh-client-modules": "workspace:*",
51
55
  "@deepseek-ai/dsh-host-webserver": "workspace:*",
@@ -211,7 +211,7 @@ window.__ModuleLoader__.load({
211
211
  }
212
212
  //#endregion
213
213
  //#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/deepseek-harness/packages/client/ui-chat/src/client/chat/MessageItem.module.css.mjs
214
- const css$17 = ".b0VkcW_userRow{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.b0VkcW_userStack{min-width:0;max-width:min(calc(var(--dsh-chat-content-width,748px) * .702), 82%);flex-direction:column;align-items:flex-end;gap:8px;display:flex}.b0VkcW_bubble{background:var(--dsw-specific-bubble);border-radius:var(--dsw-radius-xl);max-width:100%;font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;padding:10px 16px}.b0VkcW_referenceSummary{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px))}.b0VkcW_contextRow{padding:2px 0}.b0VkcW_compactionRow{--dsh-compaction-header-height:calc(24px + var(--dsh-content-font-delta,0px));padding:2px 0}.b0VkcW_compactionButton{width:100%;height:var(--dsh-compaction-header-height);border-radius:var(--dsw-radius-sm);min-width:0;color:inherit;font:inherit;text-align:left;background:0 0;border:none;align-items:center;padding:0;display:flex}.b0VkcW_compactionRow:has(.b0VkcW_compactionBody) .b0VkcW_compactionButton{z-index:7;background:var(--dsw-alias-bg-base);border-radius:0;position:sticky;top:0}.b0VkcW_compactionBody :has(>[data-code-block-banner]){top:var(--dsh-compaction-header-height)}.b0VkcW_compactionRow:has(.b0VkcW_compactionBody) .b0VkcW_compactionButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.b0VkcW_compactionButton:not(:disabled){cursor:pointer}.b0VkcW_compactionButton:not(:disabled):hover{background:var(--dsw-alias-interactive-bg-hover)}.b0VkcW_compactionLeading{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-secondary);flex:none;place-items:center;margin-right:6px;display:inline-grid}.b0VkcW_compactionLeading svg{width:calc(14px + var(--dsh-content-font-delta,0px));height:calc(14px + var(--dsh-content-font-delta,0px))}.b0VkcW_compactionContextIcon,.b0VkcW_compactionDisclosureIcon{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.b0VkcW_compactionDisclosureIcon,.b0VkcW_compactionButton:not(:disabled):hover .b0VkcW_compactionContextIcon,.b0VkcW_compactionButton:not(:disabled):focus-visible .b0VkcW_compactionContextIcon{opacity:0}.b0VkcW_compactionButton:not(:disabled):hover .b0VkcW_compactionDisclosureIcon,.b0VkcW_compactionButton:not(:disabled):focus-visible .b0VkcW_compactionDisclosureIcon{opacity:1}.b0VkcW_compactionTitle{font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-primary-dimmed);flex:none}.b0VkcW_compactionSep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.b0VkcW_compactionSummary{min-width:0;color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.b0VkcW_compactionBody{padding:4px 0 4px calc(22px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px))}.b0VkcW_retryRow{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px))}.b0VkcW_retrySummary{border-radius:var(--dsw-radius-sm);width:fit-content;color:inherit;cursor:pointer;user-select:none;align-items:center;gap:7px;padding:2px 0;list-style:none;display:inline-flex}.b0VkcW_retrySummary::-webkit-details-marker{display:none}.b0VkcW_retrySummary:after{content:\"\";opacity:.8;border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;transition:transform .12s;transform:rotate(-45deg)}.b0VkcW_retrySummary:hover{color:var(--dsw-alias-label-secondary)}.b0VkcW_retrySummary:focus-visible{outline:1.5px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.b0VkcW_retryText{color:inherit}.b0VkcW_retryRow[data-active] .b0VkcW_retryText{background:linear-gradient(90deg, var(--dsw-alias-label-tertiary) 0%, var(--dsw-alias-label-tertiary) 40%, var(--dsw-alias-label-secondary) 50%, var(--dsw-alias-label-tertiary) 60%, var(--dsw-alias-label-tertiary) 100%);color:#0000;background-position:100%;background-size:200% 100%;background-clip:text;animation:1.6s ease-in-out infinite b0VkcW_retry-shimmer}.b0VkcW_retryRow[open] .b0VkcW_retrySummary:after{transform:rotate(45deg)}.b0VkcW_retryDetails{overflow-wrap:anywhere;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px));gap:2px;margin-top:3px;padding-left:14px;display:grid}.b0VkcW_retryDetailLabel{color:var(--dsw-alias-label-secondary)}.b0VkcW_turnErrorRow{font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));grid-template-columns:10px minmax(0,1fr) auto;align-items:start;gap:8px;padding:2px 0;display:grid}.b0VkcW_turnErrorDot{margin-top:5px}.b0VkcW_turnErrorCopy{overflow-wrap:anywhere;min-width:0}.b0VkcW_turnErrorTitle{color:var(--dsw-alias-state-error-primary);margin-right:6px;font-weight:600}.b0VkcW_turnErrorMessage{color:var(--dsw-alias-label-secondary)}.b0VkcW_turnErrorCode{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-markdown-code-block-small)}.b0VkcW_maxTokensTitle{color:var(--dsw-alias-state-warn-primary);margin-right:6px;font-weight:600}@keyframes b0VkcW_retry-shimmer{0%{background-position:100%}to{background-position:0}}@media (prefers-reduced-motion:reduce){.b0VkcW_retryRow[data-active] .b0VkcW_retryText{color:inherit;background:0 0;animation:none}}.b0VkcW_attachmentRow{flex-wrap:wrap;justify-content:flex-end;gap:8px;max-width:100%;display:flex}.b0VkcW_fileCard{border:.5px solid var(--dsw-alias-border-l2,#0000001f);border-radius:var(--dsw-radius-xl);background:var(--dsw-specific-input-major,transparent);box-sizing:border-box;flex:0 0 240px;align-items:center;gap:10px;width:240px;min-height:64px;padding:8px 12px;display:inline-flex}.b0VkcW_fileIcon{flex:none;width:28px;height:28px}.b0VkcW_fileContent{flex-direction:column;flex:1;min-width:0;display:flex}.b0VkcW_fileName{white-space:nowrap;text-overflow:ellipsis;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:22px;overflow:hidden}.b0VkcW_fileMeta{white-space:nowrap;text-overflow:ellipsis;color:var(--dsw-alias-label-tertiary,#00000073);font-size:12px;line-height:15px;overflow:hidden}";
214
+ const css$17 = ".b0VkcW_userRow{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.b0VkcW_userStack{min-width:0;max-width:min(calc(var(--dsh-chat-content-width,748px) * .702), 82%);flex-direction:column;align-items:flex-end;gap:8px;display:flex}.b0VkcW_bubble{background:var(--dsw-specific-bubble);border-radius:var(--dsw-radius-xl);max-width:100%;font:var(--dsw-font-markdown-base);color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;padding:10px 16px}.b0VkcW_referenceSummary{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px))}.b0VkcW_contextRow{padding:2px 0}.b0VkcW_compactionRow{--dsh-compaction-header-height:calc(24px + var(--dsh-content-font-delta,0px));padding:2px 0}.b0VkcW_compactionButton{width:100%;height:var(--dsh-compaction-header-height);border-radius:var(--dsw-radius-sm);min-width:0;color:inherit;font:inherit;text-align:left;background:0 0;border:none;align-items:center;padding:0;display:flex}.b0VkcW_compactionRow:has(.b0VkcW_compactionBody) .b0VkcW_compactionButton{z-index:7;background:var(--dsw-alias-bg-base);border-radius:0;position:sticky;top:0}.b0VkcW_compactionBody :has(>[data-code-block-banner]){top:var(--dsh-compaction-header-height)}.b0VkcW_compactionRow:has(.b0VkcW_compactionBody) .b0VkcW_compactionButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.b0VkcW_compactionButton:not(:disabled){cursor:pointer}.b0VkcW_compactionButton:not(:disabled):hover{background:var(--dsw-alias-interactive-bg-hover)}.b0VkcW_compactionLeading{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-secondary);flex:none;place-items:center;margin-right:6px;display:inline-grid}.b0VkcW_compactionLeading svg{width:calc(14px + var(--dsh-content-font-delta,0px));height:calc(14px + var(--dsh-content-font-delta,0px))}.b0VkcW_compactionContextIcon,.b0VkcW_compactionDisclosureIcon{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.b0VkcW_compactionDisclosureIcon,.b0VkcW_compactionButton:not(:disabled):hover .b0VkcW_compactionContextIcon,.b0VkcW_compactionButton:not(:disabled):focus-visible .b0VkcW_compactionContextIcon{opacity:0}.b0VkcW_compactionButton:not(:disabled):hover .b0VkcW_compactionDisclosureIcon,.b0VkcW_compactionButton:not(:disabled):focus-visible .b0VkcW_compactionDisclosureIcon{opacity:1}.b0VkcW_compactionTitle{font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-primary-dimmed);flex:none}.b0VkcW_compactionSep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.b0VkcW_compactionSummary{min-width:0;color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.b0VkcW_compactionBody{padding:4px 0 4px calc(22px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px))}.b0VkcW_retryRow{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px))}.b0VkcW_retrySummary{border-radius:var(--dsw-radius-sm);width:fit-content;color:inherit;cursor:pointer;user-select:none;align-items:center;gap:7px;padding:2px 0;list-style:none;display:inline-flex}.b0VkcW_retrySummary::-webkit-details-marker{display:none}.b0VkcW_retrySummary:after{content:\"\";opacity:.8;border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;transition:transform .12s;transform:rotate(-45deg)}.b0VkcW_retrySummary:hover{color:var(--dsw-alias-label-secondary)}.b0VkcW_retrySummary:focus-visible{outline:1.5px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.b0VkcW_retryText{color:inherit}.b0VkcW_retryRow[data-active] .b0VkcW_retryText{background:linear-gradient(90deg, var(--dsw-alias-label-tertiary) 0%, var(--dsw-alias-label-tertiary) 40%, var(--dsw-alias-label-secondary) 50%, var(--dsw-alias-label-tertiary) 60%, var(--dsw-alias-label-tertiary) 100%);color:#0000;background-position:100%;background-size:200% 100%;background-clip:text;animation:1.6s ease-in-out infinite b0VkcW_retry-shimmer}.b0VkcW_retryRow[open] .b0VkcW_retrySummary:after{transform:rotate(45deg)}.b0VkcW_retryDetails{overflow-wrap:anywhere;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px));gap:2px;margin-top:3px;padding-left:14px;display:grid}.b0VkcW_retryDetailLabel{color:var(--dsw-alias-label-secondary)}.b0VkcW_turnErrorRow{font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));grid-template-columns:10px minmax(0,1fr) auto;align-items:start;gap:8px;padding:2px 0;display:grid}.b0VkcW_turnErrorDot{margin-top:5px}.b0VkcW_turnErrorCopy{overflow-wrap:anywhere;min-width:0}.b0VkcW_turnErrorTitle{color:var(--dsw-alias-state-error-primary);margin-right:6px;font-weight:600}.b0VkcW_turnErrorMessage{color:var(--dsw-alias-label-secondary)}.b0VkcW_turnErrorCode{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-markdown-code-block-small)}.b0VkcW_maxTokensTitle{color:var(--dsw-alias-state-warn-primary);margin-right:6px;font-weight:600}@keyframes b0VkcW_retry-shimmer{0%{background-position:100%}to{background-position:0}}@media (prefers-reduced-motion:reduce){.b0VkcW_retryRow[data-active] .b0VkcW_retryText{color:inherit;background:0 0;animation:none}}.b0VkcW_attachmentRow{flex-wrap:wrap;justify-content:flex-end;gap:8px;max-width:100%;display:flex}.b0VkcW_fileCard{border:.5px solid var(--dsw-alias-border-l2,#0000001f);border-radius:var(--dsw-radius-xl);background:var(--dsw-specific-input-major,transparent);box-sizing:border-box;flex:0 0 240px;align-items:center;gap:10px;width:240px;min-height:64px;padding:8px 12px;display:inline-flex}.b0VkcW_fileIcon{flex:none;width:28px;height:28px}.b0VkcW_fileContent{flex-direction:column;flex:1;min-width:0;display:flex}.b0VkcW_fileName{white-space:nowrap;text-overflow:ellipsis;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:22px;overflow:hidden}.b0VkcW_fileMeta{white-space:nowrap;text-overflow:ellipsis;color:var(--dsw-alias-label-tertiary,#00000073);font-size:12px;line-height:15px;overflow:hidden}";
215
215
  const tagId$17 = "@deepseek-ai/dsh-client-ui-chat/MessageItem.module.css";
216
216
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$17) + "]") === null) {
217
217
  const tag = document.createElement("style");
@@ -5773,7 +5773,7 @@ window.__ModuleLoader__.load({
5773
5773
  });
5774
5774
  //#endregion
5775
5775
  //#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/deepseek-harness/packages/client/ui-chat/src/client/chat/AssistantMarkdown.module.css.mjs
5776
- const css$8 = ".LSXNsa_root{font-size:var(--dsh-content-font-size,14px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-primary);flex-direction:column;display:flex}.LSXNsa_body{flex-direction:column;gap:16px;display:flex}.LSXNsa_body .md-table-wide{--dsh-table-spare:max(0px, calc((100cqw - var(--dsh-chat-content-width)) / 2));--dsh-table-lead:calc(var(--dsh-table-spare) + min(var(--dsh-chat-content-width), 100cqw) - 100%);box-sizing:border-box;width:calc(100% + var(--dsh-table-lead) + var(--dsh-table-spare));max-width:none;margin-left:calc(-1 * var(--dsh-table-lead));padding-left:var(--dsh-table-lead)}.LSXNsa_body .md-table-wide>table{z-index:1;position:relative}.LSXNsa_body>[data-turn-process-inline][hidden]{margin-bottom:-16px}.LSXNsa_stopped{border-radius:var(--dsw-radius-sm);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-tertiary);align-self:flex-start;padding:0 6px;font-size:11px;line-height:18px}.LSXNsa_actions{margin-top:16px;margin-left:-6px}";
5776
+ const css$8 = ".LSXNsa_root{font:var(--dsw-font-markdown-base);color:var(--dsw-alias-label-primary);flex-direction:column;display:flex}.LSXNsa_body{--dsh-assistant-block-gap:16px;gap:var(--dsh-assistant-block-gap);flex-direction:column;display:flex}.LSXNsa_body .md-table-wide{--dsh-table-spare:max(0px, calc((100cqw - var(--dsh-chat-content-width)) / 2));--dsh-table-lead:calc(var(--dsh-table-spare) + min(var(--dsh-chat-content-width), 100cqw) - 100%);box-sizing:border-box;width:calc(100% + var(--dsh-table-lead) + var(--dsh-table-spare));max-width:none;margin-left:calc(-1 * var(--dsh-table-lead));padding-left:var(--dsh-table-lead)}.LSXNsa_body .md-table-wide>table{z-index:1;position:relative}.LSXNsa_body>[data-turn-process-inline][hidden]{margin-bottom:calc(-1 * var(--dsh-assistant-block-gap))}.LSXNsa_stopped{border-radius:var(--dsw-radius-sm);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-tertiary);align-self:flex-start;padding:0 6px;font-size:11px;line-height:18px}.LSXNsa_actions{margin-top:16px;margin-left:-6px}";
5777
5777
  const tagId$8 = "@deepseek-ai/dsh-client-ui-chat/AssistantMarkdown.module.css";
5778
5778
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
5779
5779
  const tag = document.createElement("style");
@@ -5874,6 +5874,7 @@ window.__ModuleLoader__.load({
5874
5874
  "data-streaming": streaming || void 0,
5875
5875
  children: (0, react_jsx_runtime.jsxs)("div", {
5876
5876
  className: AssistantMarkdown_module_css_default.body,
5877
+ "data-assistant-body": true,
5877
5878
  children: [rendered, interrupted && (groupPart === void 0 || groupPart === "response" || !blocks.some((block) => block.kind !== "reasoning" && block.kind !== "tool-call")) && (0, react_jsx_runtime.jsx)("span", {
5878
5879
  className: AssistantMarkdown_module_css_default.stopped,
5879
5880
  children: t("message.stopped")
@@ -13,11 +13,11 @@ export interface Config {
13
13
  }
14
14
  /** Live preferences projected to the browser. */
15
15
  export declare const Config: z<Schemastery.ObjectS<NoInfer<{
16
- transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "volatile-defined">;
16
+ transcriptView: z<"compact" | "detailed" | "standard" | "verbose" | "normal" | "expanded", "compact" | "detailed" | "standard" | "verbose" | "normal" | "expanded", "volatile-defined">;
17
17
  performanceUsage: z<"compact" | "detailed", "compact" | "detailed", "volatile-defined">;
18
18
  linkOpening: z<"sidebar" | "new-tab", "sidebar" | "new-tab", "volatile-defined">;
19
19
  }>>, Schemastery.ObjectT<NoInfer<{
20
- transcriptView: z<"compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "compact" | "standard" | "detailed" | "verbose" | "normal" | "expanded", "volatile-defined">;
20
+ transcriptView: z<"compact" | "detailed" | "standard" | "verbose" | "normal" | "expanded", "compact" | "detailed" | "standard" | "verbose" | "normal" | "expanded", "volatile-defined">;
21
21
  performanceUsage: z<"compact" | "detailed", "compact" | "detailed", "volatile-defined">;
22
22
  linkOpening: z<"sidebar" | "new-tab", "sidebar" | "new-tab", "volatile-defined">;
23
23
  }>>, "plain">;
@@ -883,11 +883,21 @@ window.__ModuleLoader__.load({
883
883
  });
884
884
  }
885
885
  const visible = rows.filter((c) => req.position === "leading" || c.hint === void 0);
886
+ const exact = req.position === "leading" ? this.directory.resolve(session.sessionId, req.query) : void 0;
887
+ if (exact?.input?.suggestions?.length) return exact.input.suggestions.map((suggestion) => ({
888
+ name: `${exact.name} ${suggestion.value}`,
889
+ description: suggestion.description,
890
+ value: exact.name
891
+ }));
886
892
  return req.query === "" ? sectionRows(visible, this.t) : (0, _deepseek_ai_dsh_client_ui_primitives.rankByName)(visible, req.query);
887
893
  }
888
894
  /** Decision table, menu column: contribution/decorated-host → popup or action; host input → claim; host bare → detached execute. */
889
895
  dispatch(pick) {
890
896
  const name = pick.candidate.name;
897
+ if (pick.position === "leading" && pick.candidate.value !== void 0) {
898
+ const command = this.directory.resolve(pick.session.sessionId, pick.candidate.value);
899
+ if (command?.input?.suggestions?.find((item) => `${command.name} ${item.value}` === name) !== void 0) return { text: `/${name} ` };
900
+ }
891
901
  const contribution = this.live.contributions.get(name);
892
902
  if (contribution !== void 0 && contribution.available(pick.session)) {
893
903
  this.invoke(name, contribution.ui, pick.session, {
@@ -17092,7 +17092,7 @@ window.__ModuleLoader__.load({
17092
17092
  }
17093
17093
  //#endregion
17094
17094
  //#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/InputBar.module.css.mjs
17095
- const css$1 = ".k_Uu_G_root{padding:0 var(--dsh-composer-side-clearance) 4px;flex-direction:column;align-items:center;display:flex}.k_Uu_G_dock{justify-content:center;align-items:center;gap:12px;max-width:100%;padding-top:4px;display:flex}.k_Uu_G_hero .k_Uu_G_dock:empty{display:none}.k_Uu_G_hero{padding:0 var(--dsh-composer-side-clearance)}.k_Uu_G_notice{width:100%;max-width:var(--dsh-composer-card-max-width);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);margin-bottom:6px;padding:4px 8px;font-size:12px;line-height:18px}.k_Uu_G_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width);--dsw-elevation-stroke-color:var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-panel);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-elevation-soft);font-size:var(--dsh-content-font-size,14px);line-height:calc(24px + var(--dsh-content-font-delta,0px));--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;flex-direction:column;gap:12px;padding-top:8px;display:flex;position:relative}.k_Uu_G_cardWorkspaceTrigger{--dsw-elevation-stroke-color:transparent;cursor:pointer}.k_Uu_G_cardWorkspaceTrigger:after{content:\"\";box-sizing:border-box;border-radius:var(--dsw-radius-panel);color:var(--dsw-alias-border-l4);pointer-events:none;border:1px dashed;transition:color .1s;position:absolute;inset:0}.k_Uu_G_cardWorkspaceTrigger :disabled{pointer-events:none}.k_Uu_G_cardWorkspaceTrigger:hover:after{color:var(--dsw-alias-state-business-primary)}.k_Uu_G_accessory{align-items:center;gap:8px;padding:10px 12px 0;display:flex}.k_Uu_G_overlayAnchor{height:0;position:absolute;inset:0 0 auto}.k_Uu_G_scroll{max-height:var(--dsh-composer-text-max-height);margin-right:4px;overflow-y:auto}.k_Uu_G_scroll::-webkit-scrollbar-track{margin-top:8px}.k_Uu_G_grow{position:relative}.k_Uu_G_pending{corner-shape:round;background:var(--dsw-alias-state-business-primary);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite alternate k_Uu_G_input-pending}@keyframes k_Uu_G_input-pending{0%{opacity:.35}to{opacity:1}}.k_Uu_G_input{box-sizing:border-box;min-height:36px;font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);caret-color:var(--dsw-alias-state-business-primary);outline:none;padding:4px 8px 0 14px}.k_Uu_G_input p{margin:0}.k_Uu_G_input p:last-child:after{content:var(--dsh-composer-hint);color:var(--dsw-alias-label-caption)}.k_Uu_G_input[data-composer-composing] p:last-child:after{content:none}.k_Uu_G_input[data-composer-composing]+.k_Uu_G_placeholder{visibility:hidden}.k_Uu_G_placeholder{color:var(--dsw-alias-label-caption);white-space:nowrap;text-overflow:ellipsis;pointer-events:none;user-select:none;position:absolute;inset:4px 8px auto 14px;overflow:hidden}.k_Uu_G_inputDisabled{color:var(--dsw-alias-label-tertiary);cursor:not-allowed}.k_Uu_G_input[aria-haspopup=menu]{cursor:pointer}.k_Uu_G_hero .k_Uu_G_input{min-height:52px}.k_Uu_G_hero .k_Uu_G_placeholder{white-space:normal;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box}.k_Uu_G_row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:2px 8px 6px;display:flex;container-type:inline-size}.k_Uu_G_row[data-model-compact]{--dsh-composer-model-text-display:none;--dsh-composer-model-icon-display:block}.k_Uu_G_tools,.k_Uu_G_modes,.k_Uu_G_trailing{align-items:center;min-width:0;display:flex}.k_Uu_G_tools,.k_Uu_G_modes{gap:12px}.k_Uu_G_trailing{flex:none;gap:12px;margin-left:auto}@container (width<=560px){.k_Uu_G_tools,.k_Uu_G_modes,.k_Uu_G_trailing{gap:8px}}.k_Uu_G_add{corner-shape:round;background:var(--dsw-specific-selector);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;display:grid}.k_Uu_G_add:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.k_Uu_G_add:disabled{opacity:.5;cursor:default}.k_Uu_G_select{border-radius:var(--dsw-radius-sm);max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;appearance:none;background-color:#0000;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");background-position:right 4px center;background-repeat:no-repeat;background-size:12px 12px;border:none;outline:none;padding:0 20px 0 8px;font-size:13px;font-weight:500;line-height:20px}.k_Uu_G_select:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover)}.k_Uu_G_select:disabled{opacity:.5;cursor:default}.k_Uu_G_primary{corner-shape:round;background:var(--dsw-alias-button-info-fill);color:#fff;cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;width:34px;height:34px;transition:background-color .1s;display:grid;transform:translateY(-2px)}.k_Uu_G_primary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.k_Uu_G_primary:disabled{opacity:.4;cursor:default}.k_Uu_G_retry{border-radius:var(--dsw-radius-sm);color:inherit;cursor:pointer;background:0 0;border:1px solid;margin-left:8px;padding:1px 8px;font-size:12px}.k_Uu_G_standardControls{align-items:center;gap:12px;min-width:0;display:flex}.k_Uu_G_tools[hidden],.k_Uu_G_standardControls[hidden]{display:none}.k_Uu_G_trailingActive{flex:1;margin-left:0}.k_Uu_G_activity{flex:none;align-items:center;display:flex}.k_Uu_G_activity:empty{display:none}.k_Uu_G_activityExpanded{flex:1;min-width:0}";
17095
+ const css$1 = ".k_Uu_G_root{padding:0 var(--dsh-composer-side-clearance) 4px;flex-direction:column;align-items:center;display:flex}.k_Uu_G_dock{justify-content:center;align-items:center;gap:12px;max-width:100%;padding-top:4px;display:flex}.k_Uu_G_hero .k_Uu_G_dock:empty{display:none}.k_Uu_G_hero{padding:0 var(--dsh-composer-side-clearance)}.k_Uu_G_notice{width:100%;max-width:var(--dsh-composer-card-max-width);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);margin-bottom:6px;padding:4px 8px;font-size:12px;line-height:18px}.k_Uu_G_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width);--dsw-elevation-stroke-color:var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-panel);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-elevation-soft);font:var(--dsw-font-markdown-base);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;flex-direction:column;gap:12px;padding-top:8px;display:flex;position:relative}.k_Uu_G_cardWorkspaceTrigger{--dsw-elevation-stroke-color:transparent;cursor:pointer}.k_Uu_G_cardWorkspaceTrigger:after{content:\"\";box-sizing:border-box;border-radius:var(--dsw-radius-panel);color:var(--dsw-alias-border-l4);pointer-events:none;border:1px dashed;transition:color .1s;position:absolute;inset:0}.k_Uu_G_cardWorkspaceTrigger :disabled{pointer-events:none}.k_Uu_G_cardWorkspaceTrigger:hover:after{color:var(--dsw-alias-state-business-primary)}.k_Uu_G_accessory{align-items:center;gap:8px;padding:10px 12px 0;display:flex}.k_Uu_G_overlayAnchor{height:0;position:absolute;inset:0 0 auto}.k_Uu_G_scroll{max-height:var(--dsh-composer-text-max-height);margin-right:4px;overflow-y:auto}.k_Uu_G_scroll::-webkit-scrollbar-track{margin-top:8px}.k_Uu_G_grow{position:relative}.k_Uu_G_pending{corner-shape:round;background:var(--dsw-alias-state-business-primary);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite alternate k_Uu_G_input-pending}@keyframes k_Uu_G_input-pending{0%{opacity:.35}to{opacity:1}}.k_Uu_G_input{box-sizing:border-box;min-height:36px;font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);caret-color:var(--dsw-alias-state-business-primary);outline:none;padding:4px 8px 0 14px}.k_Uu_G_input p{margin:0}.k_Uu_G_input p:last-child:after{content:var(--dsh-composer-hint);color:var(--dsw-alias-label-caption)}.k_Uu_G_input[data-composer-composing] p:last-child:after{content:none}.k_Uu_G_input[data-composer-composing]+.k_Uu_G_placeholder{visibility:hidden}.k_Uu_G_placeholder{color:var(--dsw-alias-label-caption);white-space:nowrap;text-overflow:ellipsis;pointer-events:none;user-select:none;position:absolute;inset:4px 8px auto 14px;overflow:hidden}.k_Uu_G_inputDisabled{color:var(--dsw-alias-label-tertiary);cursor:not-allowed}.k_Uu_G_input[aria-haspopup=menu]{cursor:pointer}.k_Uu_G_hero .k_Uu_G_input{min-height:52px}.k_Uu_G_hero .k_Uu_G_placeholder{white-space:normal;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box}.k_Uu_G_row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:2px 8px 6px;display:flex;container-type:inline-size}.k_Uu_G_row[data-model-compact]{--dsh-composer-model-text-display:none;--dsh-composer-model-icon-display:block}.k_Uu_G_tools,.k_Uu_G_modes,.k_Uu_G_trailing{align-items:center;min-width:0;display:flex}.k_Uu_G_tools,.k_Uu_G_modes{gap:12px}.k_Uu_G_trailing{flex:none;gap:12px;margin-left:auto}@container (width<=560px){.k_Uu_G_tools,.k_Uu_G_modes,.k_Uu_G_trailing{gap:8px}}.k_Uu_G_add{corner-shape:round;background:var(--dsw-specific-selector);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;display:grid}.k_Uu_G_add:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.k_Uu_G_add:disabled{opacity:.5;cursor:default}.k_Uu_G_select{border-radius:var(--dsw-radius-sm);max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;appearance:none;background-color:#0000;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");background-position:right 4px center;background-repeat:no-repeat;background-size:12px 12px;border:none;outline:none;padding:0 20px 0 8px;font-size:13px;font-weight:500;line-height:20px}.k_Uu_G_select:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover)}.k_Uu_G_select:disabled{opacity:.5;cursor:default}.k_Uu_G_primary{corner-shape:round;background:var(--dsw-alias-button-info-fill);color:#fff;cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;width:34px;height:34px;transition:background-color .1s;display:grid;transform:translateY(-2px)}.k_Uu_G_primary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.k_Uu_G_primary:disabled{opacity:.4;cursor:default}.k_Uu_G_retry{border-radius:var(--dsw-radius-sm);color:inherit;cursor:pointer;background:0 0;border:1px solid;margin-left:8px;padding:1px 8px;font-size:12px}.k_Uu_G_standardControls{align-items:center;gap:12px;min-width:0;display:flex}.k_Uu_G_tools[hidden],.k_Uu_G_standardControls[hidden]{display:none}.k_Uu_G_trailingActive{flex:1;margin-left:0}.k_Uu_G_activity{flex:none;align-items:center;display:flex}.k_Uu_G_activity:empty{display:none}.k_Uu_G_activityExpanded{flex:1;min-width:0}";
17096
17096
  const tagId$1 = "@deepseek-ai/dsh-client-ui-conversation/InputBar.module.css";
17097
17097
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
17098
17098
  const tag = document.createElement("style");
@@ -13,7 +13,7 @@ export declare class PresentedOpenController {
13
13
  /** File action URLs key the state across Sessions, turns, and both clickable surfaces. */
14
14
  readonly state: import("@deepseek-ai/dsh-client-store").SnapshotStore<Record<string, PresentedOpenPhase | undefined>>;
15
15
  /** Native destination metadata, or a retryable read failure. */
16
- readonly host: import("@deepseek-ai/dsh-client-store").SnapshotStore<"error" | PresentedHost | null>;
16
+ readonly host: import("@deepseek-ai/dsh-client-store").SnapshotStore<PresentedHost | "error" | null>;
17
17
  private readonly expiry;
18
18
  private loading;
19
19
  private metadata;
@@ -435,7 +435,7 @@ window.__ModuleLoader__.load({
435
435
  };
436
436
  //#endregion
437
437
  //#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/deepseek-harness/packages/client/ui-goal/src/client/GoalCommandInputView.module.css.mjs
438
- const css = ".qGV2Nq_row{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.qGV2Nq_stack{min-width:0;max-width:min(calc(var(--dsh-chat-content-width,748px) * .702), 82%);flex-direction:column;align-items:flex-end;display:flex}.qGV2Nq_bubble{overflow-wrap:anywhere;border-radius:var(--dsw-radius-xl);background:var(--dsw-specific-bubble);max-width:100%;color:var(--dsw-alias-label-primary);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));white-space:pre-wrap;padding:10px 16px}";
438
+ const css = ".qGV2Nq_row{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.qGV2Nq_stack{min-width:0;max-width:min(calc(var(--dsh-chat-content-width,748px) * .702), 82%);flex-direction:column;align-items:flex-end;display:flex}.qGV2Nq_bubble{overflow-wrap:anywhere;border-radius:var(--dsw-radius-xl);background:var(--dsw-specific-bubble);max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-markdown-base);white-space:pre-wrap;padding:10px 16px}";
439
439
  const tagId = "@deepseek-ai/dsh-client-ui-goal/GoalCommandInputView.module.css";
440
440
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
441
441
  const tag = document.createElement("style");
@@ -252,6 +252,7 @@ window.__ModuleLoader__.load({
252
252
  });
253
253
  return result;
254
254
  }
255
+ if (this.catalog.store.getSnapshot().value?.selectionScope === "process") this.catalog.refresh();
255
256
  this.store.update((s) => {
256
257
  s.status = "ready";
257
258
  s.pending = null;
@@ -289,13 +290,14 @@ window.__ModuleLoader__.load({
289
290
  if (this.disposed) return;
290
291
  const catalog = this.catalog.store.getSnapshot();
291
292
  const projected = modelSelectionProjection(this.projected.getSnapshot());
292
- const intended = projected?.next ?? catalog.value?.default;
293
+ const intended = catalog.value?.selectionScope === "process" ? catalog.value.default : projected?.next ?? catalog.value?.default;
293
294
  const reasoning = intended === void 0 ? void 0 : this.catalog.reasoningFor(intended);
294
295
  const effort = intended?.reasoningEffort ?? reasoning?.defaultEffort;
295
296
  const retainedEffort = effort === void 0 ? void 0 : reasoning?.efforts.find((level) => level.id === effort)?.name ?? effort;
296
297
  if (catalog.status !== "ready" || catalog.value === null || projected === void 0) {
297
298
  this.store.set({
298
299
  current: catalog.value === null ? null : this.store.getSnapshot().current,
300
+ ...catalog.value?.savedDisplayName === void 0 ? {} : { savedDisplayName: catalog.value.savedDisplayName },
299
301
  ...retainedEffort === void 0 ? {} : { retainedEffort },
300
302
  routable: null,
301
303
  groups: catalog.value?.groups ?? [],
@@ -306,10 +308,11 @@ window.__ModuleLoader__.load({
306
308
  });
307
309
  return;
308
310
  }
309
- const selection = projected.next ?? catalog.value.default;
311
+ const selection = intended ?? catalog.value.default;
310
312
  const routable = catalog.value.groups.some((group) => group.id === selection.provider && group.models.some((model) => model.id === selection.model));
311
313
  this.store.set({
312
- current: selection,
314
+ current: selection.provider === "" || selection.model === "" ? null : selection,
315
+ ...catalog.value.savedDisplayName === void 0 ? {} : { savedDisplayName: catalog.value.savedDisplayName },
313
316
  ...retainedEffort === void 0 ? {} : { retainedEffort },
314
317
  routable,
315
318
  groups: catalog.value.groups,
@@ -362,6 +365,9 @@ window.__ModuleLoader__.load({
362
365
  ctx.remote.$on("llm/adapters-updated", () => {
363
366
  this.catalog.refresh();
364
367
  });
368
+ ctx.remote.$on("api-session/model-updated", () => {
369
+ this.catalog.refresh();
370
+ });
365
371
  ctx.remote.$on("settings/document-updated", () => {
366
372
  this.catalog.refresh();
367
373
  });
@@ -413,7 +419,7 @@ window.__ModuleLoader__.load({
413
419
  }
414
420
  //#endregion
415
421
  //#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/deepseek-harness/packages/client/ui-model-selection/src/client/ModelSelect.module.css.mjs
416
- const css = ".mVaOWa_root{min-width:0;position:relative}.mVaOWa_trigger{border-radius:var(--dsw-radius-sm);min-width:0;max-width:min(360px,45cqw);height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;font-size:13px;font-weight:400;line-height:20px;display:flex}.mVaOWa_trigger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.mVaOWa_trigger:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary))}.mVaOWa_trigger:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}.mVaOWa_triggerLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.mVaOWa_triggerEffort{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-caption);flex-shrink:1000;overflow:hidden}.mVaOWa_triggerIcon{display:var(--dsh-composer-model-icon-display,none);flex:none}.mVaOWa_triggerLabel,.mVaOWa_triggerEffort{display:var(--dsh-composer-model-text-display,block)}.mVaOWa_chevron{color:var(--dsw-alias-label-caption);flex:none;transition:transform .12s}.mVaOWa_chevronOpen{transform:rotate(180deg)}.mVaOWa_menu{z-index:1100;--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);width:max-content;min-width:min(240px,100vw - 32px);max-width:min(420px,100vw - 32px);max-height:min(360px,100vh - 96px);box-shadow:var(--dsw-elevation-prominent);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;flex-direction:column;padding:4px;display:flex;position:fixed;overflow:hidden}.mVaOWa_status,.mVaOWa_empty{color:var(--dsw-alias-label-tertiary);padding:8px;font-size:12px;line-height:18px}.mVaOWa_error,.mVaOWa_warning{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:flex-start;gap:6px;margin-bottom:3px;padding:6px 7px;font-size:11px;line-height:16px;display:flex}.mVaOWa_warning{background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-state-warn-label)}.mVaOWa_retry{color:inherit;font:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-weight:600}.mVaOWa_groups{min-height:0;overflow-y:auto}.mVaOWa_group+.mVaOWa_group{margin-top:3px}.mVaOWa_groupTitle{z-index:1;background:var(--dsw-specific-menu);color:var(--dsw-alias-label-tertiary);padding:4px 7px 2px;font-size:11px;font-weight:500;line-height:16px;position:sticky;top:0}.mVaOWa_option{box-sizing:border-box;border-radius:var(--dsw-radius-md);width:auto;min-width:100%;min-height:34px;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;outline:none;align-items:center;gap:6px;padding:5px 7px;display:flex}.mVaOWa_option:hover:not(:disabled),.mVaOWa_option:focus-visible{background:var(--dsw-alias-interactive-bg-hover)}.mVaOWa_selected{background:0 0}.mVaOWa_option:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}.mVaOWa_optionCopy{flex-direction:column;flex:1;min-width:0;display:flex}.mVaOWa_modelName{color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:18px;overflow:hidden}.mVaOWa_check{color:var(--dsw-alias-label-primary);flex:0 0 14px;place-items:center;display:grid}.mVaOWa_check svg{width:14px;height:14px}.mVaOWa_cell{box-sizing:border-box;border-radius:var(--dsw-radius-md);width:auto;min-width:100%;height:34px;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:0 8px;font-size:13px;line-height:20px;display:flex}.mVaOWa_cell:hover{background:var(--dsw-alias-interactive-bg-hover)}.mVaOWa_cellLabel{white-space:nowrap;flex:none}.mVaOWa_cellValue{text-overflow:ellipsis;white-space:nowrap;text-align:right;min-width:0;color:var(--dsw-alias-label-tertiary);flex:auto;overflow:hidden}.mVaOWa_cellChevron{width:12px;height:12px;color:var(--dsw-alias-menu-icon);flex:none}";
422
+ const css = ".mVaOWa_root{min-width:0;position:relative}.mVaOWa_trigger{border-radius:var(--dsw-radius-sm);min-width:0;max-width:min(360px,45cqw);height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;font-size:13px;font-weight:400;line-height:20px;display:flex}.mVaOWa_trigger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.mVaOWa_trigger:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary))}.mVaOWa_trigger:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}.mVaOWa_triggerLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.mVaOWa_triggerEffort{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-caption);flex-shrink:1000;overflow:hidden}.mVaOWa_triggerIcon{display:var(--dsh-composer-model-icon-display,none);flex:none}.mVaOWa_triggerLabel,.mVaOWa_triggerEffort{display:var(--dsh-composer-model-text-display,block)}.mVaOWa_chevron{color:var(--dsw-alias-label-caption);flex:none;transition:transform .12s}.mVaOWa_chevronOpen{transform:rotate(180deg)}.mVaOWa_menu{z-index:1100;--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);width:max-content;min-width:min(240px,100vw - 32px);max-width:min(420px,100vw - 32px);max-height:min(360px,100vh - 96px);box-shadow:var(--dsw-elevation-prominent);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;flex-direction:column;padding:4px;display:flex;position:fixed;overflow:hidden}.mVaOWa_status,.mVaOWa_empty{color:var(--dsw-alias-label-tertiary);padding:8px;font-size:12px;line-height:18px}.mVaOWa_error,.mVaOWa_warning{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:flex-start;gap:6px;margin-bottom:3px;padding:6px 7px;font-size:11px;line-height:16px;display:flex}.mVaOWa_warning{background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-state-warn-label)}.mVaOWa_retry{color:inherit;font:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-weight:600}.mVaOWa_groups{min-height:0;overflow-y:auto}.mVaOWa_group+.mVaOWa_group{margin-top:3px}.mVaOWa_groupTitle{z-index:1;background:linear-gradient(var(--dsw-specific-menu), var(--dsw-specific-menu)), var(--dsw-alias-bg-base);color:var(--dsw-alias-label-tertiary);padding:4px 7px 2px;font-size:11px;font-weight:500;line-height:16px;position:sticky;top:0}.mVaOWa_option{box-sizing:border-box;border-radius:var(--dsw-radius-md);width:auto;min-width:100%;min-height:34px;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;outline:none;align-items:center;gap:6px;padding:5px 7px;display:flex}.mVaOWa_option:hover:not(:disabled),.mVaOWa_option:focus-visible{background:var(--dsw-alias-interactive-bg-hover)}.mVaOWa_selected{background:0 0}.mVaOWa_option:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}.mVaOWa_optionCopy{flex-direction:column;flex:1;min-width:0;display:flex}.mVaOWa_modelHeading{align-items:center;gap:6px;min-width:0;display:flex}.mVaOWa_modelHeading>.mVaOWa_capabilityTag{border-radius:0;flex:none}.mVaOWa_modelName{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:18px;overflow:hidden}.mVaOWa_check{color:var(--dsw-alias-label-primary);flex:0 0 14px;place-items:center;display:grid}.mVaOWa_check svg{width:14px;height:14px}.mVaOWa_cell{box-sizing:border-box;border-radius:var(--dsw-radius-md);width:auto;min-width:100%;height:34px;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:0 8px;font-size:13px;line-height:20px;display:flex}.mVaOWa_cell:hover{background:var(--dsw-alias-interactive-bg-hover)}.mVaOWa_cellLabel{white-space:nowrap;flex:none}.mVaOWa_cellValue{text-overflow:ellipsis;white-space:nowrap;text-align:right;min-width:0;color:var(--dsw-alias-label-tertiary);flex:auto;overflow:hidden}.mVaOWa_cellChevron{width:12px;height:12px;color:var(--dsw-alias-menu-icon);flex:none}";
417
423
  const tagId = "@deepseek-ai/dsh-client-ui-model-selection/ModelSelect.module.css";
418
424
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
419
425
  const tag = document.createElement("style");
@@ -423,6 +429,7 @@ window.__ModuleLoader__.load({
423
429
  document.head.appendChild(tag);
424
430
  }
425
431
  var ModelSelect_module_css_default = {
432
+ "capabilityTag": "mVaOWa_capabilityTag",
426
433
  "cell": "mVaOWa_cell",
427
434
  "cellChevron": "mVaOWa_cellChevron",
428
435
  "cellLabel": "mVaOWa_cellLabel",
@@ -436,6 +443,7 @@ window.__ModuleLoader__.load({
436
443
  "groupTitle": "mVaOWa_groupTitle",
437
444
  "groups": "mVaOWa_groups",
438
445
  "menu": "mVaOWa_menu",
446
+ "modelHeading": "mVaOWa_modelHeading",
439
447
  "modelName": "mVaOWa_modelName",
440
448
  "option": "mVaOWa_option",
441
449
  "optionCopy": "mVaOWa_optionCopy",
@@ -519,6 +527,27 @@ window.__ModuleLoader__.load({
519
527
  ...model.reasoning?.defaultEffort === void 0 ? {} : { reasoningEffort: model.reasoning.defaultEffort }
520
528
  }
521
529
  }))), [groups]);
530
+ const sections = (0, react.useMemo)(() => {
531
+ const result = [];
532
+ for (const group of groups) {
533
+ const sectionId = group.custom === true ? "custom-models" : group.id;
534
+ let section = result.find((candidate) => candidate.id === sectionId);
535
+ if (section === void 0) {
536
+ section = {
537
+ id: sectionId,
538
+ name: group.custom === true ? t("provider.custom") : group.id === "deepseek-account" ? t("provider.account") : group.name,
539
+ choices: []
540
+ };
541
+ result.push(section);
542
+ }
543
+ section.choices.push(...choices.filter((choice) => choice.group.id === group.id));
544
+ }
545
+ return result;
546
+ }, [
547
+ groups,
548
+ choices,
549
+ t
550
+ ]);
522
551
  const currentChoice = choices[state.current === null ? -1 : choices.findIndex((c) => c.selection.provider === state.current?.provider && c.selection.model === state.current.model)];
523
552
  const reasoning = currentChoice?.model.reasoning;
524
553
  const effectiveEffort = state.current?.reasoningEffort ?? reasoning?.defaultEffort;
@@ -681,7 +710,7 @@ window.__ModuleLoader__.load({
681
710
  };
682
711
  const choose = (selection) => {
683
712
  if (state.current?.provider === selection.provider && state.current.model === selection.model) {
684
- close(true);
713
+ submit({ ...state.current });
685
714
  return;
686
715
  }
687
716
  submit(selection);
@@ -699,7 +728,9 @@ window.__ModuleLoader__.load({
699
728
  });
700
729
  };
701
730
  const waiting = state.current === null && state.status === "loading";
702
- const modelLabel = waiting ? t("trigger.loading") : currentChoice === void 0 ? state.current === null ? t("trigger.fallback") : state.current.model : displayModelName(currentChoice.model);
731
+ const savedName = state.savedDisplayName?.provider === state.current?.provider && state.savedDisplayName?.model === state.current?.model ? state.savedDisplayName?.name : void 0;
732
+ const catalogName = currentChoice === void 0 ? void 0 : displayModelName(currentChoice.model).trim();
733
+ const modelLabel = waiting ? t("trigger.loading") : catalogName !== void 0 && catalogName !== "" && catalogName !== state.current?.model ? catalogName : savedName ?? (catalogName || (state.current === null ? t("trigger.fallback") : state.current.model));
703
734
  const triggerLabel = effortLabel === void 0 ? modelLabel : `${modelLabel} · ${effortLabel}`;
704
735
  const triggerAria = waiting ? t("trigger.loading") : state.current === null ? t("trigger.selectAria") : effortLabel === void 0 ? t("trigger.aria", { model: modelLabel }) : t("trigger.ariaEffort", {
705
736
  model: modelLabel,
@@ -829,8 +860,8 @@ window.__ModuleLoader__.load({
829
860
  }, failure.id)),
830
861
  (0, react_jsx_runtime.jsx)("div", {
831
862
  className: clsx(ModelSelect_module_css_default.groups, "scrollable"),
832
- children: groups.map((group) => {
833
- const headingId = `${id}-${group.id}`;
863
+ children: sections.map((section) => {
864
+ const headingId = `${id}-${section.id}`;
834
865
  return (0, react_jsx_runtime.jsxs)("section", {
835
866
  role: "group",
836
867
  "aria-labelledby": headingId,
@@ -838,8 +869,8 @@ window.__ModuleLoader__.load({
838
869
  children: [(0, react_jsx_runtime.jsx)("div", {
839
870
  className: ModelSelect_module_css_default.groupTitle,
840
871
  id: headingId,
841
- children: group.id === "deepseek-account" ? t("provider.account") : group.name
842
- }), group.models.map((model) => {
872
+ children: section.name
873
+ }), section.choices.map(({ group, model }) => {
843
874
  const selected = state.current?.provider === group.id && state.current.model === model.id;
844
875
  return (0, react_jsx_runtime.jsxs)("button", {
845
876
  ref: itemRef(),
@@ -857,17 +888,32 @@ window.__ModuleLoader__.load({
857
888
  },
858
889
  children: [(0, react_jsx_runtime.jsx)("span", {
859
890
  className: ModelSelect_module_css_default.optionCopy,
860
- children: (0, react_jsx_runtime.jsx)("span", {
861
- className: ModelSelect_module_css_default.modelName,
862
- children: displayModelName(model)
891
+ children: (0, react_jsx_runtime.jsxs)("span", {
892
+ className: ModelSelect_module_css_default.modelHeading,
893
+ children: [
894
+ (0, react_jsx_runtime.jsx)("span", {
895
+ className: ModelSelect_module_css_default.modelName,
896
+ children: displayModelName(model)
897
+ }),
898
+ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
899
+ tone: "neutral",
900
+ className: ModelSelect_module_css_default.capabilityTag,
901
+ children: t("option.text")
902
+ }),
903
+ model.inputModalities?.includes("image") === true && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
904
+ tone: "info",
905
+ className: ModelSelect_module_css_default.capabilityTag,
906
+ children: t("option.image")
907
+ })
908
+ ]
863
909
  })
864
910
  }), (0, react_jsx_runtime.jsx)("span", {
865
911
  className: ModelSelect_module_css_default.check,
866
912
  children: pending?.provider === group.id && pending.model === model.id ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" }) : selected ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, {}) : null
867
913
  })]
868
- }, model.id);
914
+ }, `${group.id}/${model.id}`);
869
915
  })]
870
- }, group.id);
916
+ }, section.id);
871
917
  })
872
918
  }),
873
919
  state.status === "ready" && choices.length === 0 && (0, react_jsx_runtime.jsx)("div", {
@@ -933,10 +979,13 @@ window.__ModuleLoader__.load({
933
979
  */
934
980
  /** Simplified Chinese dictionary (the key-set source of truth). */
935
981
  const zh = {
982
+ "provider.custom": "自定义模型",
936
983
  "provider.account": "DeepSeek 账号",
937
984
  "command.label": "模型",
938
985
  "command.description": "选择本会话使用的模型",
939
986
  "option.loadError": "目录加载失败:{message}",
987
+ "option.text": "文本",
988
+ "option.image": "识图",
940
989
  "option.deepseekV4Flash.description": "快速、高效且经济;适合目标明确、常规或并行任务。",
941
990
  "option.deepseekV4Pro.description": "更强的自主编码、知识与复杂推理能力;适合复杂或质量优先的任务,但成本更高。",
942
991
  "trigger.fallback": "请选择模型",
@@ -958,10 +1007,13 @@ window.__ModuleLoader__.load({
958
1007
  };
959
1008
  /** English dictionary, checked complete against the zh key set. */
960
1009
  const en = {
1010
+ "provider.custom": "Custom models",
961
1011
  "provider.account": "DeepSeek Account",
962
1012
  "command.label": "Model",
963
1013
  "command.description": "Select the model for this conversation",
964
1014
  "option.loadError": "Catalog failed to load: {message}",
1015
+ "option.text": "Text",
1016
+ "option.image": "Vision",
965
1017
  "option.deepseekV4Flash.description": "Fast, efficient, and economical; suited to focused, routine, or parallel tasks.",
966
1018
  "option.deepseekV4Pro.description": "Stronger agentic coding, knowledge, and difficult reasoning; suited to complex or quality-critical tasks at higher cost.",
967
1019
  "trigger.fallback": "Select model",
@@ -1001,7 +1053,7 @@ window.__ModuleLoader__.load({
1001
1053
  function optionsOf(directory, t) {
1002
1054
  const rows = [];
1003
1055
  for (const group of directory.groups) {
1004
- const name = group.id === "deepseek-account" ? t("provider.account") : group.name;
1056
+ const name = group.custom === true ? t("provider.custom") : group.id === "deepseek-account" ? t("provider.account") : group.name;
1005
1057
  for (const model of group.models) {
1006
1058
  const description = descriptionOf(group.id, model, t);
1007
1059
  rows.push({