@chatcode/chatcode-cli 3.0.2 → 3.0.4-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/README.i18n.yaml +10 -10
  2. package/README.md +26 -1
  3. package/README.zh.md +26 -1
  4. package/lib/bin.js +70 -75
  5. package/lib/{command-errors-CIYn1nnW.js → command-errors-BkCHTQHj.js} +12 -12
  6. package/lib/{command-trees-8o99Bws7.js → command-trees-5HFyC5sI.js} +2 -2
  7. package/lib/{component-identity-CnmIKHEF.js → component-identity-De91VHwW.js} +3 -3
  8. package/lib/{dist-DxjlHHph.js → dist-CsDWUvQ4.js} +238 -232
  9. package/lib/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -0
  10. package/lib/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -0
  11. package/lib/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -0
  12. package/lib/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -0
  13. package/lib/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -0
  14. package/lib/dsh-ecosystem-spec/protocols/tui-channel.js +166 -0
  15. package/lib/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -0
  16. package/lib/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -0
  17. package/lib/dsh-ecosystem-spec/registry/README.md +14 -0
  18. package/lib/dsh-ecosystem-spec/registry/contracts/decision-events-v1alpha1.json +13 -0
  19. package/lib/dsh-ecosystem-spec/registry/contracts/scene-v1alpha1.json +13 -0
  20. package/lib/dsh-ecosystem-spec/registry/contracts/settings-section-v1alpha1.json +13 -0
  21. package/lib/dsh-ecosystem-spec/registry/contracts/tui-channel-v1alpha1.json +30 -0
  22. package/lib/dsh-ecosystem-spec/registry/contracts/workspace-provider-v1alpha1.json +6 -0
  23. package/lib/dsh-ecosystem-spec/registry/host-descriptor.tui.example.json +56 -0
  24. package/lib/dsh-ecosystem-spec/registry/permissions-0.1.json +13 -0
  25. package/lib/dsh-ecosystem-spec/registry/registry-0.15.json +149 -0
  26. package/lib/dsh-ecosystem-spec/schemas/conformance-claim.schema.json +15 -0
  27. package/lib/dsh-ecosystem-spec/schemas/effect-ledger-record.schema.json +16 -0
  28. package/lib/dsh-ecosystem-spec/schemas/host-descriptor.schema.json +26 -0
  29. package/lib/{dump-config-BSTrhTT_.js → dump-config-BcH-VYuv.js} +5 -5
  30. package/lib/dump-config-CyopmD85.js +2 -0
  31. package/lib/{dump-config-schema-Cz4A13GB.js → dump-config-schema-DM0fb6Ns.js} +2 -2
  32. package/lib/{extension-events-DciGPKJa.js → extension-events-CdYCRP0o.js} +26 -26
  33. package/lib/{frames-7PAg0Q9b.js → frames-DOX-Jgk8.js} +4 -4
  34. package/lib/headless-compat.js +2 -2
  35. package/lib/{home-migration-DLaSvmfn.js → home-migration-BjDmRwBB.js} +23 -4
  36. package/lib/{host-access-CmD27uhQ.js → host-access-Bk4xps5E.js} +1 -1
  37. package/lib/{keymap-CFChEJ2W.js → keymap-CJ1kvLR2.js} +17 -16
  38. package/lib/{plugin-jvd9PCVt.js → plugin-XR7ncbnW.js} +3767 -2331
  39. package/lib/{plugin-DYHtreEd.js → plugin-eJjD6r12.js} +1 -1
  40. package/lib/{profile-boot-Blq7uqhx.js → profile-boot-BNQry1NM.js} +109 -14
  41. package/lib/profile-boot.js +2 -2
  42. package/lib/{scenes-ai_8sHDs.js → scenes-CAmWncZD.js} +3 -3
  43. package/lib/{settings-sections-QQ1-2lhL.js → settings-sections-CakcvBv9.js} +7 -3
  44. package/lib/startup-diagnostics-C_hRCp-q.js +91 -0
  45. package/lib/statusBarSettings-BPPS_Usm.js +382 -0
  46. package/lib/{supports-color-CcW-FGjr.js → supports-color-DyChQwlI.js} +2 -2
  47. package/lib/{themes-DTzG_9I_.js → themes-OjcUpZzw.js} +13 -13
  48. package/lib/tui-compat-command-trees.js +1 -1
  49. package/lib/tui-compat-extensions.js +4 -4
  50. package/lib/tui-compat-plugin-host.js +5 -5
  51. package/lib/tui-compat-scenes.js +1 -1
  52. package/lib/tui-compat-settings-sections.js +1 -1
  53. package/lib/tui-compat-working-activity.js +4 -4
  54. package/lib/tui-compat-workspaces.js +1 -1
  55. package/lib/tui-compat.js +44 -29
  56. package/lib/types/args.d.ts +2 -0
  57. package/lib/types/home-migration.d.ts +8 -0
  58. package/lib/types/permission-bypass.d.ts +16 -0
  59. package/lib/types/profile-boot.d.ts +12 -0
  60. package/lib/types/startup-diagnostics.d.ts +13 -0
  61. package/lib/types/tui-compat.d.ts +6 -0
  62. package/lib/types/web-browser.d.ts +6 -0
  63. package/lib/types/web-instance.d.ts +42 -0
  64. package/lib/web-browser-Vcgfdsv_.js +46 -0
  65. package/lib/web-instance-B0jec7cq.js +2 -0
  66. package/lib/web-instance-DbP7IHPv.js +280 -0
  67. package/lib/{workspaces-CznCgVHv.js → workspaces-XY7UdfXp.js} +2 -2
  68. package/package.json +40 -32
  69. package/runtime/manifest.json +4 -6
  70. package/runtime/node_modules/@deepseek-ai/dsh-agent-default-model/lib/index.js +34 -4
  71. package/runtime/node_modules/@deepseek-ai/dsh-agent-default-model/lib/types/index.d.ts +9 -0
  72. package/runtime/node_modules/@deepseek-ai/dsh-agent-preset/skills/cordis-composition-reference/references/packages.md +2 -1
  73. package/runtime/node_modules/@deepseek-ai/dsh-api-gateway/lib/client.js +2 -0
  74. package/runtime/node_modules/@deepseek-ai/dsh-api-gateway/lib/types/client/remote-stream.js +4 -0
  75. package/runtime/node_modules/@deepseek-ai/dsh-api-remotes/lib/client.js +39 -0
  76. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/index.js +6 -1
  77. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/typert.host.js +10 -3
  78. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/typert.remote-client.js +7 -0
  79. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/catalog.js +8 -1
  80. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/types.d.ts +10 -0
  81. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/index.js +28 -1
  82. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/typert.host.js +39 -0
  83. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/typert.remote-client.d.ts +2 -0
  84. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/typert.remote-client.js +32 -0
  85. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/types/index.d.ts +8 -0
  86. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/types/index.js +19 -1
  87. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/index.js +28 -0
  88. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/feed.js +17 -0
  89. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/index.js +67 -19
  90. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/types/index.d.ts +1 -1
  91. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/types/profile-context.d.ts +11 -1
  92. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/worker/profile-resolution-bootstrap.js +22 -3
  93. package/runtime/node_modules/@deepseek-ai/dsh-base/cordis.patch.yml +9 -3
  94. package/runtime/node_modules/@deepseek-ai/dsh-base/package.json +2 -1
  95. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-chat/lib/client.js +3 -2
  96. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-chat/lib/types/index.d.ts +2 -2
  97. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js +1 -1
  98. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-goal/lib/client.js +1 -1
  99. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/client.js +60 -12
  100. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/directory.d.ts +3 -1
  101. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/locales.d.ts +6 -0
  102. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-primitives/lib/markdown/CodeBlock.module.css +3 -5
  103. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-primitives/lib/markdown/MarkdownText.module.css +23 -27
  104. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings/lib/types/client/contract/slots.d.ts +3 -1
  105. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-account/lib/client.js +2 -2
  106. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-account/lib/types/index.d.ts +2 -2
  107. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/client.js +8 -7
  108. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/types/client/SettingsDocumentAction.d.ts +1 -1
  109. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/types/client/settings-document-store.d.ts +2 -1
  110. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/client.js +33 -12
  111. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/types/client/locales.d.ts +2 -0
  112. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/lib/client.js +1 -1
  113. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar/lib/client.js +1 -1
  114. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-theme/lib/client.js +1 -1
  115. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/client.js +8 -1
  116. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/locales.d.ts +2 -0
  117. package/runtime/node_modules/@deepseek-ai/dsh-compaction-basic/lib/index.js +84 -8
  118. package/runtime/node_modules/@deepseek-ai/dsh-compaction-basic/lib/types/region.d.ts +9 -0
  119. package/runtime/node_modules/@deepseek-ai/dsh-compaction-basic/lib/types/summarizer.d.ts +7 -0
  120. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/index.js +35 -0
  121. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/brand.d.ts +11 -0
  122. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/brand.js +10 -0
  123. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/index.d.ts +28 -0
  124. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/index.js +36 -0
  125. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/package.json +42 -0
  126. package/runtime/node_modules/@deepseek-ai/dsh-config-editor/lib/index.js +102 -14
  127. package/runtime/node_modules/@deepseek-ai/dsh-config-editor/lib/types/index.d.ts +34 -4
  128. package/runtime/node_modules/@deepseek-ai/dsh-config-editor/package.json +1 -0
  129. package/runtime/node_modules/@deepseek-ai/dsh-host-webserver/lib/index.js +2 -1
  130. package/runtime/node_modules/@deepseek-ai/dsh-native-command/lib/index.js +21 -8
  131. package/runtime/node_modules/@deepseek-ai/dsh-native-command/lib/types/path-opener.d.ts +4 -6
  132. package/runtime/node_modules/@deepseek-ai/dsh-native-command/lib/types/path-opener.js +18 -7
  133. package/runtime/node_modules/@deepseek-ai/dsh-session-log-export/lib/client.js +3 -8
  134. package/runtime/node_modules/@deepseek-ai/dsh-session-log-export/lib/types/client/HeaderAction.d.ts +1 -1
  135. package/runtime/node_modules/@deepseek-ai/dsh-settings/lib/index.js +5 -4
  136. package/runtime/node_modules/@deepseek-ai/dsh-settings/lib/types/index.d.ts +4 -3
  137. package/runtime/node_modules/@deepseek-ai/dsh-settings/lib/types/index.js +4 -3
  138. package/runtime/node_modules/@deepseek-ai/dsh-skill/lib/types/index.d.ts +1 -1
  139. package/runtime/node_modules/@deepseek-ai/dsh-skill-filesystem/lib/index.js +7 -1
  140. package/runtime/node_modules/@deepseek-ai/dsh-storage/lib/types/backend.d.ts +4 -0
  141. package/runtime/node_modules/@deepseek-ai/dsh-storage-domain/lib/index.js +60 -0
  142. package/runtime/node_modules/@deepseek-ai/dsh-storage-domain/lib/types/domain.d.ts +15 -0
  143. package/runtime/node_modules/@deepseek-ai/dsh-storage-json/lib/index.js +25 -0
  144. package/runtime/node_modules/@deepseek-ai/dsh-storage-json/package.json +1 -0
  145. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/index.js +5472 -0
  146. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/command-args.d.ts +17 -0
  147. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/commands/tianti/cicd.d.ts +8 -0
  148. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/commands/tianti/tianti.d.ts +7 -0
  149. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/commands/tianti-deliver/tianti-deliver.d.ts +8 -0
  150. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/config.d.ts +27 -0
  151. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/index.d.ts +12 -0
  152. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/memory-config.d.ts +10 -0
  153. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/runtime.d.ts +105 -0
  154. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/aliases.d.ts +11 -0
  155. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/auth.d.ts +20 -0
  156. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/client.d.ts +206 -0
  157. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/config.d.ts +20 -0
  158. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/index.d.ts +6 -0
  159. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/log.d.ts +16 -0
  160. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/types.d.ts +136 -0
  161. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/codebase.d.ts +19 -0
  162. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/dynamicWorkflow.d.ts +10 -0
  163. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/engine.d.ts +8 -0
  164. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/executor.d.ts +11 -0
  165. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/executors.d.ts +15 -0
  166. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/index.d.ts +23 -0
  167. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/memorySuggestions.d.ts +12 -0
  168. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/openspec.d.ts +31 -0
  169. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/recommend.d.ts +8 -0
  170. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/render.d.ts +8 -0
  171. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/requirementContext.d.ts +12 -0
  172. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/scenarioUpgrade.d.ts +24 -0
  173. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/state.d.ts +16 -0
  174. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/store.d.ts +33 -0
  175. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/templates.d.ts +8 -0
  176. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/types.d.ts +385 -0
  177. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/writeReviewSync.d.ts +6 -0
  178. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/writeReview/index.d.ts +29 -0
  179. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/writeReview/store.d.ts +20 -0
  180. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/writeReview/types.d.ts +49 -0
  181. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/tools.d.ts +12 -0
  182. package/runtime/node_modules/@deepseek-ai/dsh-tianti/package.json +55 -0
  183. package/runtime/node_modules/@deepseek-ai/dsh-tool-cordis/lib/types/api-catalog.js +57 -13
  184. package/runtime/node_modules/@deepseek-ai/dsh-web-app/presets/cordis.patch.yml +2 -1
  185. package/runtime/node_modules/@deepseek-ai/dsh-web-app/presets/ptc.patch.yml +2 -1
  186. package/runtime/node_modules/@deepseek-ai/dsh-web-app/presets/standard.patch.yml +2 -1
  187. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-D5kpKf--.css +1 -0
  188. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Dz_cDcce.js +133 -0
  189. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Dz_cDcce.js.map +1 -0
  190. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/chatcode-apple-touch-icon.png +0 -0
  191. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/chatcode-icon-32.png +0 -0
  192. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/chatcode-mask-icon.svg +1 -0
  193. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/favicon-dark.svg +1 -3
  194. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/favicon.ico +0 -0
  195. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/favicon.svg +1 -3
  196. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/index.html +8 -4
  197. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/preview.html +8 -4
  198. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/package.json +2 -1
  199. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/index.js +110 -33
  200. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/entity.d.ts +6 -0
  201. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/entity.js +23 -17
  202. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/index.d.ts +10 -0
  203. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/index.js +95 -21
  204. package/lib/dump-config-DBW7YLx-.js +0 -2
  205. package/lib/tuiDisplayPrefs-BCHRRcfe.js +0 -162
  206. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-DUvMhLle.css +0 -1
  207. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Q6zc2uHV.js +0 -127
  208. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Q6zc2uHV.js.map +0 -1
  209. package/runtime/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.md +0 -9
  210. package/runtime/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/bin/system.node +0 -0
  211. package/runtime/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/package.json +0 -31
  212. package/runtime/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/prebuilds.json +0 -6
  213. package/runtime/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.md +0 -9
  214. package/runtime/node_modules/@deepseek-ai/node-addon-system-darwin-x64/package.json +0 -31
  215. package/runtime/node_modules/@deepseek-ai/node-addon-system-darwin-x64/prebuilds.json +0 -6
  216. package/runtime/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.md +0 -11
  217. package/runtime/node_modules/@deepseek-ai/node-addon-system-linux-arm64/package.json +0 -31
  218. package/runtime/node_modules/@deepseek-ai/node-addon-system-linux-arm64/prebuilds.json +0 -24
  219. package/runtime/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.md +0 -11
  220. package/runtime/node_modules/@deepseek-ai/node-addon-system-linux-x64/package.json +0 -31
  221. package/runtime/node_modules/@deepseek-ai/node-addon-system-linux-x64/prebuilds.json +0 -24
@@ -80,6 +80,12 @@ const _deepseek_ai_dsh_api_settings_controller_settings_mutate_result$schema = (
80
80
  })),
81
81
  'revision': z.number(),
82
82
  }))
83
+ let _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_parameter_0$schema$value
84
+ const _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_parameter_0$schema = () => (_deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_parameter_0$schema$value ??= z.string())
85
+ let _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_result$schema$value
86
+ const _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_result$schema = () => (_deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_result$schema$value ??= z.object({
87
+ 'opened': z.literal(true).readonly(),
88
+ }))
83
89
  let _deepseek_ai_dsh_api_settings_controller_settings_openSettingsDocument_result$schema$value
84
90
  const _deepseek_ai_dsh_api_settings_controller_settings_openSettingsDocument_result$schema = () => (_deepseek_ai_dsh_api_settings_controller_settings_openSettingsDocument_result$schema$value ??= z.object({
85
91
  'opened': z.literal(true).readonly(),
@@ -279,6 +285,32 @@ export const TYPERT = {
279
285
  },
280
286
  sourceLocation: {"file":"packages/api/settings-controller/src/index.ts","line":152,"column":9},
281
287
  },
288
+ {
289
+ id: '@deepseek-ai/dsh-api-settings-controller#settings/openNamespaceDocument',
290
+ service: 'settingsController',
291
+ namespace: 'settings',
292
+ method: 'openNamespaceDocument',
293
+ invocation: { kind: 'direct' },
294
+ parameters: [
295
+ {
296
+ name: 'ns',
297
+ wire: 'ns',
298
+ source: 'json',
299
+ codec: {
300
+ mode: 'strict',
301
+ typeSymbol: '@deepseek-ai/dsh-api-settings-controller#settings/openNamespaceDocument:ns',
302
+ create: _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_parameter_0$schema,
303
+ },
304
+ },
305
+ ],
306
+ cancellation: { parameter: 'signal' },
307
+ result: {
308
+ mode: 'strict',
309
+ typeSymbol: '@deepseek-ai/dsh-api-settings-controller/types#SettingsDocumentOpenValue',
310
+ create: _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_result$schema,
311
+ },
312
+ sourceLocation: {"file":"packages/api/settings-controller/src/index.ts","line":178,"column":9},
313
+ },
282
314
  {
283
315
  id: '@deepseek-ai/dsh-api-settings-controller#settings/openSettingsDocument',
284
316
  service: 'settingsController',
@@ -469,6 +501,13 @@ export const TYPERT = {
469
501
  "signature": "@Remote async openSettingsDocument(signal: AbortSignal): Promise<SettingsDocumentOpenValue>",
470
502
  "summary": "Materialize the provider-owned settings document and open it in a native text editor.",
471
503
  "jsDoc": "/**\n * Materialize the provider-owned settings document and open it in a native text editor.\n * @param signal - caller lifetime; abort terminates preparation or the native command.\n * @returns confirmation after the native opener accepts the document.\n * @throws RemoteError when no document exists, preparation fails, or opening fails.\n */"
504
+ },
505
+ {
506
+ "kind": "method",
507
+ "name": "openNamespaceDocument",
508
+ "signature": "@Remote async openNamespaceDocument(ns: string, signal: AbortSignal): Promise<SettingsDocumentOpenValue>",
509
+ "summary": "Open the document owning a registered namespace, including shared home-level model configuration.",
510
+ "jsDoc": "/** Open the document owning a registered namespace, including shared home-level model configuration.\n * @param ns Registered settings namespace; the Host resolves its owning path.\n * @param signal Caller lifetime before native handoff.\n * @returns Confirmation once the native editor accepts the document.\n * @throws RemoteError for invalid namespaces, preparation failure or rejected native handoff.\n */"
472
511
  }
473
512
  ],
474
513
  "types": [
@@ -17,6 +17,7 @@ declare module '@deepseek-ai/dsh-typert-protocol' {
17
17
  interface TypertRemoteNamespace$73657474696e6773 {
18
18
  describe: () => Promise<RemoteResult<SettingsDescribeValue>>
19
19
  mutate: (ns: string, ops: SettingsPathOpView[], expectedRevision: number | undefined) => Promise<RemoteResult<SettingsNamespaceView>>
20
+ openNamespaceDocument: (ns: string, signal?: AbortSignal) => Promise<RemoteResult<SettingsDocumentOpenValue>>
20
21
  openSettingsDocument: (signal?: AbortSignal) => Promise<RemoteResult<SettingsDocumentOpenValue>>
21
22
  replace: (ns: string, section: Record<string, JsonValue>, expectedRevision: number | undefined) => Promise<RemoteResult<SettingsNamespaceView>>
22
23
  update: (ns: string, patch: Record<string, JsonValue>, expectedRevision: number | undefined) => Promise<RemoteResult<SettingsNamespaceView>>
@@ -27,6 +28,7 @@ declare module '@deepseek-ai/dsh-typert-protocol' {
27
28
  'credentials/unset': (ref: string) => Promise<RemoteResult<void>>
28
29
  'settings/describe': () => Promise<RemoteResult<SettingsDescribeValue>>
29
30
  'settings/mutate': (ns: string, ops: SettingsPathOpView[], expectedRevision: number | undefined) => Promise<RemoteResult<SettingsNamespaceView>>
31
+ 'settings/openNamespaceDocument': (ns: string, signal?: AbortSignal) => Promise<RemoteResult<SettingsDocumentOpenValue>>
30
32
  'settings/openSettingsDocument': (signal?: AbortSignal) => Promise<RemoteResult<SettingsDocumentOpenValue>>
31
33
  'settings/replace': (ns: string, section: Record<string, JsonValue>, expectedRevision: number | undefined) => Promise<RemoteResult<SettingsNamespaceView>>
32
34
  'settings/update': (ns: string, patch: Record<string, JsonValue>, expectedRevision: number | undefined) => Promise<RemoteResult<SettingsNamespaceView>>
@@ -80,6 +80,12 @@ const _deepseek_ai_dsh_api_settings_controller_settings_mutate_result$schema = (
80
80
  })),
81
81
  'revision': z.number(),
82
82
  }))
83
+ let _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_parameter_0$schema$value
84
+ const _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_parameter_0$schema = () => (_deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_parameter_0$schema$value ??= z.string())
85
+ let _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_result$schema$value
86
+ const _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_result$schema = () => (_deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_result$schema$value ??= z.object({
87
+ 'opened': z.literal(true).readonly(),
88
+ }))
83
89
  let _deepseek_ai_dsh_api_settings_controller_settings_openSettingsDocument_result$schema$value
84
90
  const _deepseek_ai_dsh_api_settings_controller_settings_openSettingsDocument_result$schema = () => (_deepseek_ai_dsh_api_settings_controller_settings_openSettingsDocument_result$schema$value ??= z.object({
85
91
  'opened': z.literal(true).readonly(),
@@ -276,6 +282,32 @@ export const TYPERT_REMOTE = {
276
282
  },
277
283
  sourceLocation: {"file":"packages/api/settings-controller/src/index.ts","line":152,"column":9},
278
284
  },
285
+ {
286
+ id: '@deepseek-ai/dsh-api-settings-controller#settings/openNamespaceDocument',
287
+ service: 'settingsController',
288
+ namespace: 'settings',
289
+ method: 'openNamespaceDocument',
290
+ invocation: { kind: 'direct' },
291
+ parameters: [
292
+ {
293
+ name: 'ns',
294
+ wire: 'ns',
295
+ source: 'json',
296
+ codec: {
297
+ mode: 'strict',
298
+ typeSymbol: '@deepseek-ai/dsh-api-settings-controller#settings/openNamespaceDocument:ns',
299
+ create: _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_parameter_0$schema,
300
+ },
301
+ },
302
+ ],
303
+ cancellation: { parameter: 'signal' },
304
+ result: {
305
+ mode: 'strict',
306
+ typeSymbol: '@deepseek-ai/dsh-api-settings-controller/types#SettingsDocumentOpenValue',
307
+ create: _deepseek_ai_dsh_api_settings_controller_settings_openNamespaceDocument_result$schema,
308
+ },
309
+ sourceLocation: {"file":"packages/api/settings-controller/src/index.ts","line":178,"column":9},
310
+ },
279
311
  {
280
312
  id: '@deepseek-ai/dsh-api-settings-controller#settings/openSettingsDocument',
281
313
  service: 'settingsController',
@@ -83,6 +83,14 @@ export declare class SettingsController extends TypertRemoteService {
83
83
  * @throws RemoteError when no document exists, preparation fails, or opening fails.
84
84
  */
85
85
  openSettingsDocument(signal: AbortSignal): Promise<SettingsDocumentOpenValue>;
86
+ /** Open the document owning a registered namespace, including shared home-level model configuration.
87
+ * @param ns Registered settings namespace; the Host resolves its owning path.
88
+ * @param signal Caller lifetime before native handoff.
89
+ * @returns Confirmation once the native editor accepts the document.
90
+ * @throws RemoteError for invalid namespaces, preparation failure or rejected native handoff.
91
+ */
92
+ openNamespaceDocument(ns: string, signal: AbortSignal): Promise<SettingsDocumentOpenValue>;
93
+ private openDocument;
86
94
  private write;
87
95
  /** Resolve the optional provider or report how to supply it. */
88
96
  private provider;
@@ -86,6 +86,7 @@ let SettingsController = (() => {
86
86
  let _replace_decorators;
87
87
  let _mutate_decorators;
88
88
  let _openSettingsDocument_decorators;
89
+ let _openNamespaceDocument_decorators;
89
90
  return class SettingsController extends _classSuper {
90
91
  static {
91
92
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
@@ -94,11 +95,13 @@ let SettingsController = (() => {
94
95
  _replace_decorators = [Remote];
95
96
  _mutate_decorators = [Remote];
96
97
  _openSettingsDocument_decorators = [Remote];
98
+ _openNamespaceDocument_decorators = [Remote];
97
99
  __esDecorate(this, null, _describe_decorators, { kind: "method", name: "describe", static: false, private: false, access: { has: obj => "describe" in obj, get: obj => obj.describe }, metadata: _metadata }, null, _instanceExtraInitializers);
98
100
  __esDecorate(this, null, _update_decorators, { kind: "method", name: "update", static: false, private: false, access: { has: obj => "update" in obj, get: obj => obj.update }, metadata: _metadata }, null, _instanceExtraInitializers);
99
101
  __esDecorate(this, null, _replace_decorators, { kind: "method", name: "replace", static: false, private: false, access: { has: obj => "replace" in obj, get: obj => obj.replace }, metadata: _metadata }, null, _instanceExtraInitializers);
100
102
  __esDecorate(this, null, _mutate_decorators, { kind: "method", name: "mutate", static: false, private: false, access: { has: obj => "mutate" in obj, get: obj => obj.mutate }, metadata: _metadata }, null, _instanceExtraInitializers);
101
103
  __esDecorate(this, null, _openSettingsDocument_decorators, { kind: "method", name: "openSettingsDocument", static: false, private: false, access: { has: obj => "openSettingsDocument" in obj, get: obj => obj.openSettingsDocument }, metadata: _metadata }, null, _instanceExtraInitializers);
104
+ __esDecorate(this, null, _openNamespaceDocument_decorators, { kind: "method", name: "openNamespaceDocument", static: false, private: false, access: { has: obj => "openNamespaceDocument" in obj, get: obj => obj.openNamespaceDocument }, metadata: _metadata }, null, _instanceExtraInitializers);
102
105
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
103
106
  }
104
107
  openTextFile = __runInitializers(this, _instanceExtraInitializers);
@@ -169,12 +172,27 @@ let SettingsController = (() => {
169
172
  * @throws RemoteError when no document exists, preparation fails, or opening fails.
170
173
  */
171
174
  async openSettingsDocument(signal) {
175
+ return this.openDocument(undefined, signal);
176
+ }
177
+ /** Open the document owning a registered namespace, including shared home-level model configuration.
178
+ * @param ns Registered settings namespace; the Host resolves its owning path.
179
+ * @param signal Caller lifetime before native handoff.
180
+ * @returns Confirmation once the native editor accepts the document.
181
+ * @throws RemoteError for invalid namespaces, preparation failure or rejected native handoff.
182
+ */
183
+ async openNamespaceDocument(ns, signal) {
184
+ const parsed = settingsNamespaceRequestSchema.safeParse({ ns });
185
+ if (!parsed.success)
186
+ throw new RemoteError('gateway/bad-request', 'invalid settings namespace', {});
187
+ return this.openDocument(parsed.data.ns, signal);
188
+ }
189
+ async openDocument(namespace, signal) {
172
190
  const settings = this.provider();
173
191
  if (isAborted(signal))
174
192
  throw new RemoteError('gateway/cancelled', 'settings document open was aborted', {});
175
193
  let path;
176
194
  try {
177
- path = await settings.prepareDocument();
195
+ path = await settings.prepareDocument(namespace);
178
196
  }
179
197
  catch (error) {
180
198
  if (isAborted(signal))
@@ -54,6 +54,34 @@ var WorkspaceFeed = class {
54
54
  ctx.on("domain/changed", (change) => {
55
55
  this.changed(change);
56
56
  });
57
+ ctx.on("workspace/refreshed", () => {
58
+ const baseline = this.baseline();
59
+ const ids = new Set(baseline.items.map((item) => String(item.workspaceId)));
60
+ for (const id of this.knownIds) if (!ids.has(id)) this.publish({
61
+ type: "remove",
62
+ workspaceId: WorkspaceId(id)
63
+ });
64
+ this.knownIds = ids;
65
+ for (const workspace of baseline.items) this.publish({
66
+ type: "upsert",
67
+ workspace
68
+ });
69
+ this.order = baseline.items.map((item) => String(item.workspaceId));
70
+ this.archived = baseline.archivedSessionIds.map(String);
71
+ this.pinned = baseline.pinnedSessionIds.map(String);
72
+ this.publish({
73
+ type: "order",
74
+ workspaceIds: baseline.items.map((item) => item.workspaceId)
75
+ });
76
+ this.publish({
77
+ type: "archived",
78
+ archivedSessionIds: baseline.archivedSessionIds
79
+ });
80
+ this.publish({
81
+ type: "pinned",
82
+ pinnedSessionIds: baseline.pinnedSessionIds
83
+ });
84
+ });
57
85
  ctx.effect(() => () => {
58
86
  for (const follower of this.followers) follower.close();
59
87
  this.followers.clear();
@@ -44,6 +44,23 @@ export class WorkspaceFeed {
44
44
  this.archived = ctx.workspaceRegistry.archivedSessionIds.map(String);
45
45
  this.pinned = ctx.workspaceRegistry.pinnedSessionIds.map(String);
46
46
  ctx.on('domain/changed', (change) => { this.changed(change); });
47
+ ctx.on('workspace/refreshed', () => {
48
+ const baseline = this.baseline();
49
+ const ids = new Set(baseline.items.map(item => String(item.workspaceId)));
50
+ for (const id of this.knownIds) {
51
+ if (!ids.has(id))
52
+ this.publish({ type: 'remove', workspaceId: WorkspaceId(id) });
53
+ }
54
+ this.knownIds = ids;
55
+ for (const workspace of baseline.items)
56
+ this.publish({ type: 'upsert', workspace });
57
+ this.order = baseline.items.map(item => String(item.workspaceId));
58
+ this.archived = baseline.archivedSessionIds.map(String);
59
+ this.pinned = baseline.pinnedSessionIds.map(String);
60
+ this.publish({ type: 'order', workspaceIds: baseline.items.map(item => item.workspaceId) });
61
+ this.publish({ type: 'archived', archivedSessionIds: baseline.archivedSessionIds });
62
+ this.publish({ type: 'pinned', pinnedSessionIds: baseline.pinnedSessionIds });
63
+ });
47
64
  ctx.effect(() => () => {
48
65
  for (const follower of this.followers)
49
66
  follower.close();
@@ -540,13 +540,15 @@ const PROFILE_TEMPLATES = {
540
540
  web: { bundles: [
541
541
  "@deepseek-ai/dsh-base",
542
542
  "@deepseek-ai/dsh-web-app",
543
- "dshmarket"
543
+ "dshmarket",
544
+ "dsh-computer-use"
544
545
  ] },
545
546
  cli: { bundles: [
546
547
  "@deepseek-ai/dsh-base",
547
548
  "@deepseek-harness-tui/dsh-tui",
548
549
  "dsh-llm-chatcode-config",
549
- "dshmarket"
550
+ "dshmarket",
551
+ "dsh-computer-use"
550
552
  ] },
551
553
  headless: { bundles: ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-headless"] },
552
554
  sdk: { bundles: ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-sdk-app"] },
@@ -554,16 +556,26 @@ const PROFILE_TEMPLATES = {
554
556
  };
555
557
  /** Installation-owned bundle tuples normalized to the shipped template. */
556
558
  const INSTALLATION_OWNED_PROFILE_TUPLES = {
557
- cli: [
559
+ web: [[
560
+ "@deepseek-ai/dsh-base",
561
+ "@deepseek-ai/dsh-web-app",
562
+ "dshmarket"
563
+ ]],
564
+ cli: [[
558
565
  "@deepseek-ai/dsh-base",
559
566
  "@deepseek-harness-tui/dsh-tui",
560
567
  "dsh-llm-chatcode-config"
561
- ],
562
- headless: [
568
+ ], [
569
+ "@deepseek-ai/dsh-base",
570
+ "@deepseek-harness-tui/dsh-tui",
571
+ "dsh-llm-chatcode-config",
572
+ "dshmarket"
573
+ ]],
574
+ headless: [[
563
575
  "@deepseek-ai/dsh-base",
564
576
  "@deepseek-ai/dsh-web-app",
565
577
  "@deepseek-ai/dsh-headless"
566
- ]
578
+ ]]
567
579
  };
568
580
  /** The bundle list a `dsh plugin` init uses for a name with no shipped template. */
569
581
  const DEFAULT_PROFILE_BUNDLES = ["@deepseek-ai/dsh-base"];
@@ -882,7 +894,7 @@ function normalizeShippedProfile(name, dir, manifest) {
882
894
  const template = PROFILE_TEMPLATES[name];
883
895
  const bundles = manifest.dsh?.profile?.bundles;
884
896
  if (template === void 0 || bundles === void 0) return manifest;
885
- if (!(installationOwned !== void 0 && sameBundles(bundles, installationOwned))) return manifest;
897
+ if (!(installationOwned?.some((tuple) => sameBundles(bundles, tuple)) ?? false)) return manifest;
886
898
  const normalized = {
887
899
  ...manifest,
888
900
  dsh: {
@@ -1024,6 +1036,43 @@ function composeEntries(layers, warn = () => {}) {
1024
1036
  //#region lib/types/profile-context.js
1025
1037
  /** Launcher-owned profile locations and composition inputs. */
1026
1038
  const TELEMETRY_ROW_ID = "session-telemetry-otel";
1039
+ function findEntry(rows, id) {
1040
+ for (const row of rows) {
1041
+ if (row.id === id) return row;
1042
+ if (row.group && Array.isArray(row.config)) {
1043
+ const nested = findEntry(row.config, id);
1044
+ if (nested !== void 0) return nested;
1045
+ }
1046
+ }
1047
+ }
1048
+ function configObject(value) {
1049
+ return value !== null && typeof value === "object" && !Array.isArray(value);
1050
+ }
1051
+ /** Resolve shared home field overrides without replacing inherited deployment fields.
1052
+ * @param binName Diagnostic prefix for malformed configuration.
1053
+ * @param inherited Bundle and profile patches beneath the home layer.
1054
+ * @param homePatches Parsed home layer, including optional mergeConfig markers.
1055
+ * @returns Detached home patches ready for Loader composition or configuration dumps.
1056
+ */
1057
+ function resolveHomePatchConfigs(binName, inherited, homePatches) {
1058
+ const patches = structuredClone([...inherited]);
1059
+ for (const patch of structuredClone(homePatches)) {
1060
+ if (patch.mergeConfig === true) {
1061
+ if (typeof patch.id !== "string" || patch.insert !== void 0 || !configObject(patch.config)) throw new TypeError(`${binName}: mergeConfig requires an id-targeted object config in the home patch`);
1062
+ const target = findEntry(composeEntries([patches]), patch.id);
1063
+ if (target !== void 0 && (!patch.name || patch.name === target.name)) {
1064
+ if (target.config !== void 0 && !configObject(target.config)) throw new TypeError(`${binName}: cannot merge non-object config for ${patch.id}`);
1065
+ patch.config = {
1066
+ ...target.config,
1067
+ ...patch.config
1068
+ };
1069
+ }
1070
+ Reflect.deleteProperty(patch, "mergeConfig");
1071
+ }
1072
+ patches.push(patch);
1073
+ }
1074
+ return patches.slice(inherited.length);
1075
+ }
1027
1076
  /**
1028
1077
  * Resolve the telemetry opt-out switch into its boot patch. ANY non-empty
1029
1078
  * value (including `'0'`/`'false'`) disables: a privacy switch prefers
@@ -1046,22 +1095,20 @@ function resolveTelemetryPatch(disabledEnv, hasRow) {
1046
1095
  * @param binName Diagnostic prefix for malformed or missing configuration.
1047
1096
  * @param context Data supplied by the profile launcher.
1048
1097
  * @param initialProfile Already loaded startup profile; omitted reads the current files.
1098
+ * @param homePatches Candidate home layer for an edit; omitted reads the home patch.
1049
1099
  * @returns Detached ordered patches; this function does not update the Loader.
1050
1100
  */
1051
- function readProfilePatches(binName, context, initialProfile) {
1101
+ function readProfilePatches(binName, context, initialProfile, homePatches) {
1052
1102
  const profile = initialProfile ?? loadProfileDirectory(binName, context.dir, context.installAnchor, {
1053
1103
  ...context.trustedVersionExemptions === void 0 ? {} : { trustedVersionExemptions: context.trustedVersionExemptions },
1054
1104
  userLayer: false
1055
1105
  });
1056
- const patches = structuredClone([
1057
- ...profile.layers.flatMap((layer) => layer.patches),
1058
- ...initialProfile?.patches ?? loadOptionalPatches(binName, context.patchPath) ?? [],
1059
- ...loadOptionalPatches(binName, join(context.home, "cordis.patch.yml")) ?? [],
1060
- ...context.overlays
1061
- ]);
1106
+ const patches = structuredClone([...profile.layers.flatMap((layer) => layer.patches), ...initialProfile?.patches ?? loadOptionalPatches(binName, context.patchPath) ?? []]);
1107
+ patches.push(...resolveHomePatchConfigs(binName, patches, homePatches ?? loadOptionalPatches(binName, join(context.home, "cordis.patch.yml")) ?? []));
1108
+ patches.push(...structuredClone(context.overlays));
1062
1109
  const telemetryPatch = resolveTelemetryPatch(context.telemetryDisabledEnv, composeEntries([patches]).some((row) => row.id === TELEMETRY_ROW_ID));
1063
1110
  if (telemetryPatch !== void 0) patches.push(telemetryPatch);
1064
- return patches;
1111
+ return context.transformPatches?.(patches) ?? patches;
1065
1112
  }
1066
1113
  //#endregion
1067
1114
  //#region lib/types/profile-plugins.js
@@ -1203,7 +1250,7 @@ function barePackageName(request) {
1203
1250
  }
1204
1251
  function canonicalPath(path) {
1205
1252
  try {
1206
- return realpathSync(path);
1253
+ return realModuleDirectory(path);
1207
1254
  } catch {
1208
1255
  return resolve(path);
1209
1256
  }
@@ -1214,14 +1261,15 @@ function prefixes(path) {
1214
1261
  return canonical === configured ? [configured] : [configured, canonical];
1215
1262
  }
1216
1263
  function compileResolution(resolution) {
1264
+ const linkedPaths = resolution.linkedRoots.flatMap((root) => prefixes(root.realPath));
1217
1265
  return {
1218
1266
  entries: new Map(resolution.entries.map((entry) => [entry.name, entry])),
1219
1267
  profilesDir: resolution.profilesDir,
1220
1268
  profileDir: resolution.profileDir,
1221
1269
  profilePaths: prefixes(resolution.profilesDir),
1222
1270
  profile: resolution.profileDir === void 0 ? [] : prefixes(resolution.profileDir),
1223
- installationPaths: [...new Set(resolution.entries.filter((entry) => entry.scope === "installation").flatMap((entry) => prefixes(entry.packageDir)))],
1224
- linkedPaths: resolution.linkedRoots.flatMap((root) => prefixes(root.realPath)),
1271
+ installationPaths: linkedPaths.length === 0 ? [] : [...new Set(resolution.entries.filter((entry) => entry.scope === "installation").flatMap((entry) => prefixes(entry.packageDir)))],
1272
+ linkedPaths,
1225
1273
  localPackageNames: new Set(resolution.localPackageNames),
1226
1274
  esmRoutes: /* @__PURE__ */ new Map(),
1227
1275
  cjsRoutes: /* @__PURE__ */ new Map()
@@ -4168,4 +4216,4 @@ function addHarnessSourceSection(ctx, sourceRoot) {
4168
4216
  });
4169
4217
  }
4170
4218
  //#endregion
4171
- export { DEFAULT_PROFILE_BUNDLES, FAIL_LOUD_RELEASE_TIMEOUT_MS, HARNESS_SOURCE_SECTION, LOADER_EXPRESSION_SCHEMA, OPTIONAL_BUNDLES, PROFILES_DIR, PROFILE_COMPATIBILITY_FILENAME, PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PluginPackages, StartupError, addHarnessSourceSection, auditStartupEntries, boot, bundlePatchFiles, bundlePatchPaths, composeEntries, createConfigProjector, createRuntimeResolution, evaluatePluginCompatibility, generateConfigSchema, getDshRuntimeVersion, initProfile, installFailLoud, isNativeConfigSchema, loadEnv, loadLayeredEnv, loadOptionalPatches, loadOverlayPatches, loadProfile, loadProfileDirectory, mergeVersionExemptions, mountRootInclude, pluginCompatibilityWarning, prepareProfileEntries, prepareProfilePatches, readPluginMeta, readProfileCompatibility, readProfileManifest, readProfilePatches, readProfilePlugins, readProfileVersionExemptions, reconcileProfilePatches, reconcileProfilePlugins, removeLinkProjections, renderConfigDump, reportSkippedBundles, resolveBundleDir, resolveConfigPath, resolveProfileDir, resolveTelemetryPatch, sanitizeProfile, setProfileVersionExemption, writeProfileBundles, writeProfileManifest };
4219
+ export { DEFAULT_PROFILE_BUNDLES, FAIL_LOUD_RELEASE_TIMEOUT_MS, HARNESS_SOURCE_SECTION, LOADER_EXPRESSION_SCHEMA, OPTIONAL_BUNDLES, PROFILES_DIR, PROFILE_COMPATIBILITY_FILENAME, PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PluginPackages, StartupError, addHarnessSourceSection, auditStartupEntries, boot, bundlePatchFiles, bundlePatchPaths, composeEntries, createConfigProjector, createRuntimeResolution, evaluatePluginCompatibility, generateConfigSchema, getDshRuntimeVersion, initProfile, installFailLoud, isNativeConfigSchema, loadEnv, loadLayeredEnv, loadOptionalPatches, loadOverlayPatches, loadProfile, loadProfileDirectory, mergeVersionExemptions, mountRootInclude, pluginCompatibilityWarning, prepareProfileEntries, prepareProfilePatches, readPluginMeta, readProfileCompatibility, readProfileManifest, readProfilePatches, readProfilePlugins, readProfileVersionExemptions, reconcileProfilePatches, reconcileProfilePlugins, removeLinkProjections, renderConfigDump, reportSkippedBundles, resolveBundleDir, resolveConfigPath, resolveHomePatchConfigs, resolveProfileDir, resolveTelemetryPatch, sanitizeProfile, setProfileVersionExemption, writeProfileBundles, writeProfileManifest };
@@ -10,7 +10,7 @@ import { type Entry } from '@deepseek-ai/cordis-plugin-loader';
10
10
  import { type PatchOptions } from '@deepseek-ai/cordis-plugin-include';
11
11
  import { dshHomePath } from '@deepseek-ai/dsh-home-paths';
12
12
  import { type LaunchEnvironmentSnapshot } from '@deepseek-ai/dsh-launch-environment';
13
- export { readProfilePatches, resolveTelemetryPatch, type ProfileContext, type ProfilePnpmInvocation } from './profile-context.ts';
13
+ export { readProfilePatches, resolveHomePatchConfigs, resolveTelemetryPatch, type ProfileContext, type ProfilePnpmInvocation, } from './profile-context.ts';
14
14
  export { sanitizeProfile } from './profile-sanitize.ts';
15
15
  export { getDshRuntimeVersion, evaluatePluginCompatibility, pluginCompatibilityWarning, type PluginCompatibility } from './plugin-compatibility.ts';
16
16
  export { PROFILE_COMPATIBILITY_FILENAME, readProfileCompatibility, readProfileVersionExemptions, mergeVersionExemptions, setProfileVersionExemption, type ProfileCompatibility, } from './profile-compatibility.ts';
@@ -20,6 +20,8 @@ export interface ProfileContext {
20
20
  readonly startedBundles: readonly string[];
21
21
  /** Parsed command-line overlays, applied above profile and home patches. */
22
22
  readonly overlays: readonly PatchOptions[];
23
+ /** Launcher package aliases applied identically at startup and on every reload. */
24
+ readonly transformPatches?: (patches: PatchOptions[]) => PatchOptions[];
23
25
  /** Distributor-reviewed exact plugin/runtime pairs, additive to user-owned profile exemptions. */
24
26
  readonly trustedVersionExemptions?: Readonly<Record<string, readonly string[]>>;
25
27
  /** Launch-time CHATCODE_CLI_TELEMETRY_DISABLED value; any non-empty value opts out. */
@@ -31,6 +33,13 @@ declare module '@deepseek-ai/cordis' {
31
33
  profileContext: ProfileContext;
32
34
  }
33
35
  }
36
+ /** Resolve shared home field overrides without replacing inherited deployment fields.
37
+ * @param binName Diagnostic prefix for malformed configuration.
38
+ * @param inherited Bundle and profile patches beneath the home layer.
39
+ * @param homePatches Parsed home layer, including optional mergeConfig markers.
40
+ * @returns Detached home patches ready for Loader composition or configuration dumps.
41
+ */
42
+ export declare function resolveHomePatchConfigs(binName: string, inherited: readonly PatchOptions[], homePatches: readonly PatchOptions[]): PatchOptions[];
34
43
  /**
35
44
  * Resolve the telemetry opt-out switch into its boot patch. ANY non-empty
36
45
  * value (including `'0'`/`'false'`) disables: a privacy switch prefers
@@ -47,7 +56,8 @@ export declare function resolveTelemetryPatch(disabledEnv: string | undefined, h
47
56
  * @param binName Diagnostic prefix for malformed or missing configuration.
48
57
  * @param context Data supplied by the profile launcher.
49
58
  * @param initialProfile Already loaded startup profile; omitted reads the current files.
59
+ * @param homePatches Candidate home layer for an edit; omitted reads the home patch.
50
60
  * @returns Detached ordered patches; this function does not update the Loader.
51
61
  */
52
- export declare function readProfilePatches(binName: string, context: ProfileContext, initialProfile?: Profile): PatchOptions[];
62
+ export declare function readProfilePatches(binName: string, context: ProfileContext, initialProfile?: Profile, homePatches?: readonly PatchOptions[]): PatchOptions[];
53
63
  //# sourceMappingURL=profile-context.d.ts.map
@@ -41,6 +41,24 @@ function f(e, r, t) {
41
41
  if (e.imports) return n(e.name, e.imports, r, t);
42
42
  }
43
43
  //#endregion
44
+ //#region lib/types/profile-resolution/legacy-links.js
45
+ /** Package directory canonicalization through the active runtime carrier's filesystem. */
46
+ /**
47
+ * Return whether the process reads application modules from pkg's virtual filesystem.
48
+ * @returns whether pkg owns the module filesystem.
49
+ */
50
+ function isPackagedExecutable() {
51
+ return process.pkg !== void 0;
52
+ }
53
+ /**
54
+ * Resolve a directory through the active carrier's filesystem implementation.
55
+ * @param path - directory path to canonicalize.
56
+ * @returns the canonical directory path.
57
+ */
58
+ function realModuleDirectory(path) {
59
+ return isPackagedExecutable() ? realpathSync(path) : realpathSync.native(path);
60
+ }
61
+ //#endregion
44
62
  //#region lib/types/profile-resolution/resolver.js
45
63
  /** In-memory profile package routing for Node's default ESM and CommonJS loaders. */
46
64
  const EMPTY_ATTRIBUTES = Object.freeze({});
@@ -59,7 +77,7 @@ function barePackageName(request) {
59
77
  }
60
78
  function canonicalPath(path) {
61
79
  try {
62
- return realpathSync(path);
80
+ return realModuleDirectory(path);
63
81
  } catch {
64
82
  return resolve(path);
65
83
  }
@@ -70,14 +88,15 @@ function prefixes(path) {
70
88
  return canonical === configured ? [configured] : [configured, canonical];
71
89
  }
72
90
  function compileResolution(resolution) {
91
+ const linkedPaths = resolution.linkedRoots.flatMap((root) => prefixes(root.realPath));
73
92
  return {
74
93
  entries: new Map(resolution.entries.map((entry) => [entry.name, entry])),
75
94
  profilesDir: resolution.profilesDir,
76
95
  profileDir: resolution.profileDir,
77
96
  profilePaths: prefixes(resolution.profilesDir),
78
97
  profile: resolution.profileDir === void 0 ? [] : prefixes(resolution.profileDir),
79
- installationPaths: [...new Set(resolution.entries.filter((entry) => entry.scope === "installation").flatMap((entry) => prefixes(entry.packageDir)))],
80
- linkedPaths: resolution.linkedRoots.flatMap((root) => prefixes(root.realPath)),
98
+ installationPaths: linkedPaths.length === 0 ? [] : [...new Set(resolution.entries.filter((entry) => entry.scope === "installation").flatMap((entry) => prefixes(entry.packageDir)))],
99
+ linkedPaths,
81
100
  localPackageNames: new Set(resolution.localPackageNames),
82
101
  esmRoutes: /* @__PURE__ */ new Map(),
83
102
  cjsRoutes: /* @__PURE__ */ new Map()
@@ -97,6 +97,8 @@
97
97
  - id: config-editor
98
98
  name: '@deepseek-ai/dsh-config-editor'
99
99
  disabled: !!js "!ctx.get('profileContext')"
100
+ config:
101
+ sharedEntries: [llm-pi-ai]
100
102
 
101
103
  - id: settings
102
104
  name: '@deepseek-ai/dsh-settings'
@@ -204,7 +206,7 @@
204
206
  - id: session-telemetry-otel
205
207
  name: '@deepseek-ai/dsh-session-telemetry-otel'
206
208
  config:
207
- mode: !!js process.env.DSH_TELEMETRY_MODE || 'FEEDBACK_ONLY'
209
+ mode: !!js process.env.CHATCODE_CLI_TELEMETRY_MODE || process.env.DSH_TELEMETRY_MODE || 'FEEDBACK_ONLY'
208
210
  shutdownTimeoutMillis: 3000
209
211
  exporter:
210
212
  url: !!js process.env.DSH_TELEMETRY_OTLP_URL ?? 'https://harness-telemetry.deepseeksvc.com/v1/logs'
@@ -228,7 +230,7 @@
228
230
  - id: sandbox-policy
229
231
  name: '@deepseek-ai/dsh-sandbox-policy'
230
232
  config:
231
- mode: !!js process.env.DSH_PERMISSION_MODE ?? 'workspace-write'
233
+ mode: !!js process.env.CHATCODE_CLI_PERMISSION_MODE || process.env.DSH_PERMISSION_MODE || 'workspace-write'
232
234
  workspaceRoot: !!js process.cwd()
233
235
 
234
236
  - id: bash-sandbox
@@ -244,7 +246,7 @@
244
246
  - id: approval
245
247
  name: '@deepseek-ai/dsh-user-approval'
246
248
  config:
247
- policy: !!js "(process.env.DSH_PERMISSION_MODE ?? 'workspace-write') === 'danger-full-access' ? 'never' : 'ask'"
249
+ policy: !!js "(process.env.CHATCODE_CLI_PERMISSION_MODE || process.env.DSH_PERMISSION_MODE || 'workspace-write') === 'danger-full-access' ? 'never' : 'ask'"
248
250
 
249
251
  - id: permission
250
252
  name: '@deepseek-ai/dsh-permission-presets'
@@ -340,6 +342,10 @@
340
342
  - id: compaction-basic
341
343
  name: '@deepseek-ai/dsh-compaction-basic'
342
344
 
345
+ # Shared ChatCode login is consumed only when a Tianti command or tool runs.
346
+ - id: tianti
347
+ name: '@deepseek-ai/dsh-tianti'
348
+
343
349
  # Human `/compact`: one useful reduction below the automatic threshold. Backend
344
350
  # independent, so it follows whichever compaction service this leaf mounts.
345
351
  - id: command-compact
@@ -124,7 +124,8 @@
124
124
  "@deepseek-ai/dsh-authorization": "workspace:*",
125
125
  "@deepseek-ai/dsh-deepseek-account-platform": "workspace:*",
126
126
  "@deepseek-ai/dsh-config-editor": "workspace:*",
127
- "@deepseek-ai/dsh-settings": "workspace:*"
127
+ "@deepseek-ai/dsh-settings": "workspace:*",
128
+ "@deepseek-ai/dsh-tianti": "workspace:*"
128
129
  },
129
130
  "peerDependencies": {
130
131
  "@deepseek-ai/cordis": "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")