@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
@@ -0,0 +1,13 @@
1
+ import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
2
+ import type { SessionId } from '@deepseek-ai/dsh-session/types';
3
+ /** Host operations shared with the TUI; no history is opened to list archived Sessions. */
4
+ export interface ArchivedSessionsInjected {
5
+ requestDelete: (id: SessionId) => Promise<void>;
6
+ restore: (id: SessionId) => Promise<void>;
7
+ failureText: (error: unknown) => string;
8
+ }
9
+ type Props = PropsRuntime<'settings.section'> & PropsLocale<'workspace'> & InjectFace<ArchivedSessionsInjected>;
10
+ /** Archived roots, including archived empty Sessions, with one global search and bounded DOM. */
11
+ export declare function ArchivedSessions({ useSessions, useWorkspaces, requestDelete, restore, failureText, t }: Props): import("react").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=ArchivedSessions.d.ts.map
@@ -281,6 +281,10 @@ export type SessionMenuItemProps<Injected extends object = object> = PropsRuntim
281
281
  export type SessionRowActionProps<Injected extends object = object> = PropsRuntime<'sidebar.workspaces.session.row.action'> & PropsLocale<'workspace'> & InjectFace<Injected>;
282
282
  /** One transient Workspace notice rendered by the overlay toast entry. */
283
283
  export type RowToast = {
284
+ kind: 'sessionOperation';
285
+ message: string;
286
+ success: boolean;
287
+ } | {
284
288
  kind: 'archived';
285
289
  sessionId: SessionId;
286
290
  } | {
@@ -5,6 +5,25 @@
5
5
  */
6
6
  /** Simplified Chinese dictionary (the key-set source of truth). */
7
7
  export declare const zh: {
8
+ 'archive.manager.title': string;
9
+ 'archive.manager.description': string;
10
+ 'archive.manager.search': string;
11
+ 'archive.manager.restoreAria': string;
12
+ 'archive.manager.deleteAria': string;
13
+ 'archive.manager.restore': string;
14
+ 'archive.manager.delete': string;
15
+ 'archive.manager.previous': string;
16
+ 'archive.manager.next': string;
17
+ 'archive.manager.page': string;
18
+ 'archive.manager.confirmTitle': string;
19
+ 'archive.manager.confirmDescription': string;
20
+ 'archive.manager.deleting': string;
21
+ 'archive.manager.busy': string;
22
+ 'archive.manager.notArchived': string;
23
+ 'archive.manager.scopeChanged': string;
24
+ 'archive.manager.deleted': string;
25
+ 'archive.manager.restored': string;
26
+ 'archive.manager.failed': string;
8
27
  'defaultWorkspace.failed': string;
9
28
  'group.ungrouped': string;
10
29
  'session.new': string;
@@ -15,6 +34,7 @@ export declare const zh: {
15
34
  'shortcut.forkFailed': string;
16
35
  'section.workspaces': string;
17
36
  'section.sessions': string;
37
+ 'section.recent': string;
18
38
  'viewOptions.label': string;
19
39
  'groupBy.label': string;
20
40
  'groupBy.workspace': string;
@@ -43,6 +63,7 @@ export declare const zh: {
43
63
  'search.hasMore': string;
44
64
  'menu.addWorkspace': string;
45
65
  'picker.loading': string;
66
+ 'picker.failed': string;
46
67
  'conflict.named': string;
47
68
  'folderError.title': string;
48
69
  'folderError.retry': string;
@@ -121,6 +142,25 @@ export declare const zh: {
121
142
  export type WorkspaceKey = keyof typeof zh;
122
143
  /** English dictionary, checked complete against the zh key set. */
123
144
  export declare const en: {
145
+ 'archive.manager.title': string;
146
+ 'archive.manager.description': string;
147
+ 'archive.manager.search': string;
148
+ 'archive.manager.restoreAria': string;
149
+ 'archive.manager.deleteAria': string;
150
+ 'archive.manager.restore': string;
151
+ 'archive.manager.delete': string;
152
+ 'archive.manager.previous': string;
153
+ 'archive.manager.next': string;
154
+ 'archive.manager.page': string;
155
+ 'archive.manager.confirmTitle': string;
156
+ 'archive.manager.confirmDescription': string;
157
+ 'archive.manager.deleting': string;
158
+ 'archive.manager.busy': string;
159
+ 'archive.manager.notArchived': string;
160
+ 'archive.manager.scopeChanged': string;
161
+ 'archive.manager.deleted': string;
162
+ 'archive.manager.restored': string;
163
+ 'archive.manager.failed': string;
124
164
  'defaultWorkspace.failed': string;
125
165
  'group.ungrouped': string;
126
166
  'session.new': string;
@@ -131,6 +171,7 @@ export declare const en: {
131
171
  'shortcut.forkFailed': string;
132
172
  'section.workspaces': string;
133
173
  'section.sessions': string;
174
+ 'section.recent': string;
134
175
  'viewOptions.label': string;
135
176
  'groupBy.label': string;
136
177
  'groupBy.workspace': string;
@@ -159,6 +200,7 @@ export declare const en: {
159
200
  'search.hasMore': string;
160
201
  'menu.addWorkspace': string;
161
202
  'picker.loading': string;
203
+ 'picker.failed': string;
162
204
  'conflict.named': string;
163
205
  'folderError.title': string;
164
206
  'folderError.retry': string;
@@ -0,0 +1,11 @@
1
+ /** Metadata-only recency projection, independent of Workspace and pin order. */
2
+ import type { SessionListState } from '@deepseek-ai/dsh-api-session-controller/client';
3
+ import type { SessionId } from '@deepseek-ai/dsh-session/types';
4
+ import { type SessionRowState } from './tree.ts';
5
+ /**
6
+ * Cache chronological membership across status, title, selection, and projection updates.
7
+ * @param rowState - archive visibility for this selector's lifetime.
8
+ * @returns a selector that sorts only when membership or activity timestamps change.
9
+ */
10
+ export declare function createRecentSessionSelector(rowState: Pick<SessionRowState, 'archivedSessionIds' | 'archivedFilter'>): (list: SessionListState) => readonly SessionId[];
11
+ //# sourceMappingURL=recent.d.ts.map
@@ -0,0 +1,15 @@
1
+ import type { SessionListState } from '@deepseek-ai/dsh-api-session-controller/client';
2
+ import type { SessionId } from '@deepseek-ai/dsh-session/types';
3
+ import type { WorkspaceBrowserProps } from '../contract/slots.ts';
4
+ import { type SessionRowState } from '../tree.ts';
5
+ type RecentListProps = Pick<WorkspaceBrowserProps, 'usePanelInfo' | 'useSessionStatus' | 'open' | 'requestSessionRename' | 'renderSlot' | 't'> & {
6
+ list: SessionListState;
7
+ rowState: SessionRowState;
8
+ revealSessionId: SessionId | undefined;
9
+ onSessionRevealed: (id: SessionId) => void;
10
+ onLeaveArchivedOnly: () => void;
11
+ };
12
+ /** Project status and mount row extensions only for the viewport and a small overscan. */
13
+ export declare function RecentList({ list, rowState, useSessionStatus, usePanelInfo, open, requestSessionRename, renderSlot, t, revealSessionId, onSessionRevealed, onLeaveArchivedOnly, }: RecentListProps): import("react").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=RecentList.d.ts.map
@@ -95,7 +95,7 @@ export declare function SearchResultItem({ result, currentId, onOpen, onUnarchiv
95
95
  * @param props.t - the browser root's locale seat.
96
96
  * @returns the session row.
97
97
  */
98
- export declare function SessionNodeItem({ node, currentId, now, onOpen, onRenameRequest, renderSlot, onReveal, drag, t, }: {
98
+ export declare function SessionNodeItem({ node, currentId, now, onOpen, onRenameRequest, renderSlot, onReveal, drag, position, t, }: {
99
99
  node: SessionNode;
100
100
  currentId: string | undefined;
101
101
  now: number;
@@ -106,6 +106,11 @@ export declare function SessionNodeItem({ node, currentId, now, onOpen, onRename
106
106
  onReveal?: (() => void) | undefined;
107
107
  /** Present on reorderable-list rows so every row can remain a drop target. */
108
108
  drag?: RowDragProps | undefined;
109
+ /** Logical position within a virtualized tree, independent of mounted rows. */
110
+ position?: {
111
+ index: number;
112
+ total: number;
113
+ } | undefined;
109
114
  t: RowTranslate;
110
115
  } & PropsRenderSlots<'sidebar.workspaces.session.menu.item' | 'sidebar.workspaces.session.row.action' | 'sidebar.session.row.leading' | 'sidebar.session.row.hover'>): import("react").JSX.Element;
111
116
  export {};
@@ -0,0 +1,24 @@
1
+ import type { HostObservable, InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
2
+ import type { SessionId } from '@deepseek-ai/dsh-session/types';
3
+ import type { ArchiveSessionInjected, SessionMenuItemProps } from '../contract/slots.ts';
4
+ export interface DeleteRequest {
5
+ id: SessionId;
6
+ title: string;
7
+ scope: readonly SessionId[];
8
+ }
9
+ export interface DeleteSessionInjected {
10
+ hooks: {
11
+ request: HostObservable<DeleteRequest | null>;
12
+ };
13
+ dismiss: () => void;
14
+ remove: (id: SessionId, scope: readonly SessionId[]) => Promise<void>;
15
+ failureText: (error: unknown) => string;
16
+ }
17
+ export type DeleteMenuInjected = Pick<ArchiveSessionInjected, 'hooks'> & {
18
+ requestDelete: (id: SessionId) => void;
19
+ };
20
+ /** Permanent deletion is offered only for archived rows. */
21
+ export declare function DeleteSessionMenuItem({ sessionId, useArchived, useMenuOpenState, requestDelete, t, }: SessionMenuItemProps<DeleteMenuInjected>): import("react").JSX.Element | null;
22
+ /** The dialog outlives the menu or settings page that raised it. */
23
+ export declare function SessionDeleteDialog(props: PropsRuntime<'shell.overlay'> & PropsLocale<'workspace'> & InjectFace<DeleteSessionInjected>): import("react").JSX.Element | null;
24
+ //# sourceMappingURL=DeleteSession.d.ts.map
@@ -11,8 +11,8 @@ import type { SessionId } from '@deepseek-ai/dsh-session/types';
11
11
  import { type ArchivedFilter, type SessionRowState } from './tree.ts';
12
12
  /** Browser-local order account for the hierarchy-free flat Session list. */
13
13
  export declare const FLAT_SESSION_ORDER_KEY = "__flat_session_order__";
14
- /** Session-list grouping mode: sibling Workspace sections, a Workspace tree, or one flat list. */
15
- export type SessionGroupBy = 'workspace' | 'workspace-tree' | 'flat';
14
+ /** Session-list view: Workspace sections, a Workspace tree, a reorderable list, or a recent timeline. */
15
+ export type SessionGroupBy = 'workspace' | 'workspace-tree' | 'flat' | 'recent';
16
16
  /** Session order: saved manual positions or current recency. */
17
17
  export type SessionOrderBy = 'manual' | 'updated';
18
18
  /** Workspace browser viewing state persisted across surface remounts and reloads. */
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Derives the workspace browser tree from caller-projected Workspace and
3
- * Session order. Unassigned Sessions trail under Ungrouped; only the selected
4
- * blank Session remains visible.
3
+ * Session order. Unassigned Sessions trail under Ungrouped; sessions without
4
+ * user input remain hidden, including the selected provisional Session.
5
5
  */
6
6
  import { type SessionListState, type SessionSearchResultItem } from '@deepseek-ai/dsh-api-session-controller/client';
7
7
  import type { WorkspaceId, WorkspaceView } from '@deepseek-ai/dsh-api-workspace-controller/client';
@@ -110,13 +110,6 @@ export declare function orderByRecency(sessionIds: readonly SessionId[], summari
110
110
  * @returns saved relative positions plus missing members ordered by pin, fork source, recency, and archive status.
111
111
  */
112
112
  export declare function reconcileManualOrder(memberIds: readonly SessionId[], savedOrder: readonly string[] | undefined, summaries: SessionListState['byId'], rowState?: Pick<SessionRowState, 'pinnedSessionIds' | 'archivedSessionIds'>): SessionId[];
113
- /**
114
- * Keep the selected provisional New Session ahead of either base order.
115
- * @param order - recency or reconciled manual order.
116
- * @param currentBlank - selected blank Session in this account, when present.
117
- * @returns a copy with the selected blank first and no duplicate slot.
118
- */
119
- export declare function pinCurrentBlank(order: readonly SessionId[], currentBlank: SessionId | undefined): SessionId[];
120
113
  /**
121
114
  * Archived-row visibility choice: the default hides archived rows, `show`
122
115
  * mixes them into their kept slots, and `only` restricts the view (and
@@ -137,8 +130,8 @@ export interface SessionRowState {
137
130
  *
138
131
  * Every group shows, except that the archived-only filter drops groups
139
132
  * without visible members; sessions populate under expanded groups with
140
- * pinned rows leading in the selected local order. Blank sessions are
141
- * excluded except for the selected provisional New Session row; archived
133
+ * pinned rows leading in the selected local order. Sessions without user
134
+ * input are excluded, including the selected empty Session; archived
142
135
  * sessions keep their slots and appear per the archived filter. Content
143
136
  * search lives outside this derivation (see {@link deriveSearchResults}).
144
137
  * @param list - sessions list snapshot (`mainView` retention feeds containsCurrent).
@@ -152,7 +145,7 @@ export declare function deriveGroups(list: SessionListState, workspaces: readonl
152
145
  /**
153
146
  * Select complete flat-list membership, independently of archive visibility.
154
147
  * @param list - sessions list snapshot.
155
- * @returns known ordinary Session ids, including archives and only the current blank.
148
+ * @returns known ordinary conversations, including archives but excluding empty Sessions.
156
149
  */
157
150
  export declare function sessionMemberIds(list: SessionListState): SessionId[];
158
151
  /**
@@ -160,7 +153,7 @@ export declare function sessionMemberIds(list: SessionListState): SessionId[];
160
153
  * @param list - sessions list snapshot.
161
154
  * @param archivedSessionIds - registry-global archive set.
162
155
  * @param archivedFilter - archived-row visibility choice.
163
- * @returns known visible Session ids in list order, including ordinary forks and only the current blank.
156
+ * @returns visible conversation ids in list order, including ordinary forks.
164
157
  */
165
158
  export declare function visibleSessionIds(list: SessionListState, archivedSessionIds: readonly SessionId[], archivedFilter: ArchivedFilter): SessionId[];
166
159
  /**
@@ -173,6 +166,15 @@ export declare function visibleSessionIds(list: SessionListState, archivedSessio
173
166
  * @returns flat rows in sectioned order with current status indicators.
174
167
  */
175
168
  export declare function deriveFlat(list: SessionListState, sessionIds: readonly SessionId[], rowState: SessionRowState, statuses: SessionStatuses): SessionNode[];
169
+ /**
170
+ * Project only mounted recent rows, preserving the supplied chronological order.
171
+ * @param list - metadata snapshot; no Session history is opened.
172
+ * @param sessionIds - the visible window of the recency projection.
173
+ * @param rowState - pin decoration and archive visibility.
174
+ * @param statuses - unified UI status by Session.
175
+ * @returns rows without moving pinned or archived members ahead of newer Sessions.
176
+ */
177
+ export declare function deriveRecentRows(list: SessionListState, sessionIds: readonly SessionId[], rowState: SessionRowState, statuses: SessionStatuses): SessionNode[];
176
178
  /**
177
179
  * Merge immediate title/Workspace substring matches with ranked Host content
178
180
  * matches. Local rows lead newest-first, content-only rows retain backend
@@ -75,10 +75,12 @@
75
75
  "@deepseek-ai/dsh-typert-protocol": "workspace:*",
76
76
  "@deepseek-ai/dsh-util-values": "workspace:*",
77
77
  "@deepseek-ai/dsh-util-workspace-path": "workspace:*",
78
+ "@tanstack/react-virtual": "^3.14.9",
78
79
  "@types/react": "~18.3.1",
79
80
  "clsx": "^2.0.0",
80
81
  "react": "^18.2.0",
81
- "@deepseek-ai/dsh-client-shortcuts": "workspace:*"
82
+ "@deepseek-ai/dsh-client-shortcuts": "workspace:*",
83
+ "@deepseek-ai/dsh-client-ui-settings": "workspace:*"
82
84
  },
83
85
  "files": [
84
86
  "lib/index.js",
@@ -157,8 +157,24 @@ function normalizeDefinition(definition) {
157
157
  if (typeof rawInput !== "object" || rawInput === null || !("hint" in rawInput) || typeof rawInput.hint !== "string") throw new TypeError(`command "${definition.name}" input hint must be a string`);
158
158
  if (rawInput.hint.trim().length === 0) throw new TypeError(`command "${definition.name}" input hint must not be empty`);
159
159
  if ("attachments" in rawInput && rawInput.attachments !== void 0 && typeof rawInput.attachments !== "boolean") throw new TypeError(`command "${definition.name}" input attachments flag must be a boolean`);
160
+ let suggestions;
161
+ if ("suggestions" in rawInput && rawInput.suggestions !== void 0) {
162
+ if (!Array.isArray(rawInput.suggestions)) throw new TypeError(`command "${definition.name}" input suggestions must be an array`);
163
+ const seen = /* @__PURE__ */ new Set();
164
+ suggestions = Object.freeze(rawInput.suggestions.map((entry) => {
165
+ if (typeof entry !== "object" || entry === null || !("value" in entry) || typeof entry.value !== "string" || !/^[a-z0-9_.:\/-]+$/iu.test(entry.value) || !("description" in entry) || typeof entry.description !== "string" || !entry.description.trim()) throw new TypeError(`command "${definition.name}" input suggestions require a token value and description`);
166
+ const key = entry.value.toLowerCase();
167
+ if (seen.has(key)) throw new TypeError(`command "${definition.name}" input suggestions repeat "${entry.value}"`);
168
+ seen.add(key);
169
+ return Object.freeze({
170
+ value: entry.value,
171
+ description: entry.description
172
+ });
173
+ }));
174
+ }
160
175
  input = Object.freeze({
161
176
  hint: rawInput.hint,
177
+ ...suggestions === void 0 ? {} : { suggestions },
162
178
  ..."attachments" in rawInput && rawInput.attachments === true ? { attachments: true } : {}
163
179
  });
164
180
  }
@@ -37,6 +37,10 @@ const _deepseek_ai_dsh_commands_commands_list_result$schema = () => (_deepseek_a
37
37
  'description': z.string().readonly(),
38
38
  'input': z.object({
39
39
  'hint': z.string().readonly(),
40
+ 'suggestions': z.array(z.object({
41
+ 'value': z.string().readonly(),
42
+ 'description': z.string().readonly(),
43
+ })).readonly().optional(),
40
44
  'attachments': z.boolean().readonly().optional(),
41
45
  }).readonly().optional(),
42
46
  })))
@@ -96,7 +100,7 @@ export const TYPERT = {
96
100
  typeSymbol: '@deepseek-ai/dsh-commands#commands/execute:result',
97
101
  create: _deepseek_ai_dsh_commands_commands_execute_result$schema,
98
102
  },
99
- sourceLocation: {"file":"packages/interaction/commands/src/index.ts","line":361,"column":9},
103
+ sourceLocation: {"file":"packages/interaction/commands/src/index.ts","line":380,"column":9},
100
104
  },
101
105
  {
102
106
  id: '@deepseek-ai/dsh-commands#commands/list',
@@ -126,7 +130,7 @@ export const TYPERT = {
126
130
  typeSymbol: '@deepseek-ai/dsh-commands#commands/list:result',
127
131
  create: _deepseek_ai_dsh_commands_commands_list_result$schema,
128
132
  },
129
- sourceLocation: {"file":"packages/interaction/commands/src/index.ts","line":315,"column":3},
133
+ sourceLocation: {"file":"packages/interaction/commands/src/index.ts","line":334,"column":3},
130
134
  },
131
135
  ],
132
136
  model: {
@@ -270,7 +274,7 @@ export const TYPERT = {
270
274
  },
271
275
  {
272
276
  "name": "CommandInputDescriptor",
273
- "declaration": "export interface CommandInputDescriptor {\n readonly hint: string;\n readonly attachments?: boolean;\n}"
277
+ "declaration": "export interface CommandInputDescriptor {\n readonly hint: string;\n readonly suggestions?: readonly { readonly value: string; readonly description: string; }[];\n readonly attachments?: boolean;\n}"
274
278
  },
275
279
  {
276
280
  "name": "CommandInvocation",
@@ -37,6 +37,10 @@ const _deepseek_ai_dsh_commands_commands_list_result$schema = () => (_deepseek_a
37
37
  'description': z.string().readonly(),
38
38
  'input': z.object({
39
39
  'hint': z.string().readonly(),
40
+ 'suggestions': z.array(z.object({
41
+ 'value': z.string().readonly(),
42
+ 'description': z.string().readonly(),
43
+ })).readonly().optional(),
40
44
  'attachments': z.boolean().readonly().optional(),
41
45
  }).readonly().optional(),
42
46
  })))
@@ -93,7 +97,7 @@ export const TYPERT_REMOTE = {
93
97
  typeSymbol: '@deepseek-ai/dsh-commands#commands/execute:result',
94
98
  create: _deepseek_ai_dsh_commands_commands_execute_result$schema,
95
99
  },
96
- sourceLocation: {"file":"packages/interaction/commands/src/index.ts","line":361,"column":9},
100
+ sourceLocation: {"file":"packages/interaction/commands/src/index.ts","line":380,"column":9},
97
101
  },
98
102
  {
99
103
  id: '@deepseek-ai/dsh-commands#commands/list',
@@ -123,7 +127,7 @@ export const TYPERT_REMOTE = {
123
127
  typeSymbol: '@deepseek-ai/dsh-commands#commands/list:result',
124
128
  create: _deepseek_ai_dsh_commands_commands_list_result$schema,
125
129
  },
126
- sourceLocation: {"file":"packages/interaction/commands/src/index.ts","line":315,"column":3},
130
+ sourceLocation: {"file":"packages/interaction/commands/src/index.ts","line":334,"column":3},
127
131
  },
128
132
  ],
129
133
  }
@@ -147,8 +147,28 @@ function normalizeDefinition(definition) {
147
147
  if ('attachments' in rawInput && rawInput.attachments !== undefined && typeof rawInput.attachments !== 'boolean') {
148
148
  throw new TypeError(`command "${definition.name}" input attachments flag must be a boolean`);
149
149
  }
150
+ let suggestions;
151
+ if ('suggestions' in rawInput && rawInput.suggestions !== undefined) {
152
+ if (!Array.isArray(rawInput.suggestions)) {
153
+ throw new TypeError(`command "${definition.name}" input suggestions must be an array`);
154
+ }
155
+ const seen = new Set();
156
+ suggestions = Object.freeze(rawInput.suggestions.map((entry) => {
157
+ if (typeof entry !== 'object' || entry === null
158
+ || !('value' in entry) || typeof entry.value !== 'string' || !/^[a-z0-9_.:\/-]+$/iu.test(entry.value)
159
+ || !('description' in entry) || typeof entry.description !== 'string' || !entry.description.trim()) {
160
+ throw new TypeError(`command "${definition.name}" input suggestions require a token value and description`);
161
+ }
162
+ const key = entry.value.toLowerCase();
163
+ if (seen.has(key))
164
+ throw new TypeError(`command "${definition.name}" input suggestions repeat "${entry.value}"`);
165
+ seen.add(key);
166
+ return Object.freeze({ value: entry.value, description: entry.description });
167
+ }));
168
+ }
150
169
  input = Object.freeze({
151
170
  hint: rawInput.hint,
171
+ ...suggestions === undefined ? {} : { suggestions },
152
172
  ...('attachments' in rawInput && rawInput.attachments === true) ? { attachments: true } : {},
153
173
  });
154
174
  }
@@ -20,6 +20,11 @@ export type CommandSubmitAttachment = ({
20
20
  export interface CommandInputDescriptor {
21
21
  /** Placeholder shown before the user supplies free-form input. */
22
22
  readonly hint: string;
23
+ /** Advisory first-argument completions; handlers still own the full input grammar. */
24
+ readonly suggestions?: readonly {
25
+ readonly value: string;
26
+ readonly description: string;
27
+ }[];
23
28
  /**
24
29
  * Whether composer attachments may accompany an invocation. Absent or
25
30
  * false = the executor rejects an invocation carrying attachments and capable
@@ -0,0 +1,35 @@
1
+ import { Service } from "@deepseek-ai/cordis";
2
+ //#region lib/types/index.js
3
+ /**
4
+ * Exclusive named registration for the computer-use capability.
5
+ * @module @deepseek-ai/dsh-computer-use
6
+ */
7
+ /** Owns one optional provider registration in the shared computer-use service. */
8
+ var ComputerUseRegistry = class extends Service {
9
+ registration;
10
+ constructor(ctx) {
11
+ super(ctx, "computerUse");
12
+ }
13
+ /** Name of the registered provider, including while its resources are closing. */
14
+ get providerName() {
15
+ return this.registration;
16
+ }
17
+ /**
18
+ * Reserve the sole provider slot until the contribution is disposed.
19
+ * A second registration fails even when it repeats the current name. Providers
20
+ * must stop their tools and await owned work before releasing this registration.
21
+ * @param name - provider-owned name used in registration diagnostics.
22
+ * @returns the effect disposer for this exact registration.
23
+ */
24
+ register(name) {
25
+ if (this.registration !== void 0) throw new Error(`computer use provider "${this.registration}" is already registered`);
26
+ return this.ctx.effect(() => {
27
+ this.registration = name;
28
+ return () => {
29
+ this.registration = void 0;
30
+ };
31
+ }, "computerUse.register()");
32
+ }
33
+ };
34
+ //#endregion
35
+ export { ComputerUseRegistry, ComputerUseRegistry as default };
@@ -0,0 +1,11 @@
1
+ /** Computer-use provider identities. @module @deepseek-ai/dsh-computer-use/brand */
2
+ import type { Branded } from '@deepseek-ai/dsh-brand';
3
+ /** Provider-owned name identifying a computer-use registration. */
4
+ export type ComputerUseProviderName = Branded<'ComputerUseProviderName'>;
5
+ /**
6
+ * Brand a provider-owned name without changing or validating it.
7
+ * @param name - name chosen by the provider implementation.
8
+ * @returns the same name with its computer-use provider brand.
9
+ */
10
+ export declare function ComputerUseProviderName(name: string): ComputerUseProviderName;
11
+ //# sourceMappingURL=brand.d.ts.map
@@ -0,0 +1,10 @@
1
+ /** Computer-use provider identities. @module @deepseek-ai/dsh-computer-use/brand */
2
+ /**
3
+ * Brand a provider-owned name without changing or validating it.
4
+ * @param name - name chosen by the provider implementation.
5
+ * @returns the same name with its computer-use provider brand.
6
+ */
7
+ export function ComputerUseProviderName(name) {
8
+ return name;
9
+ }
10
+ //# sourceMappingURL=brand.js.map
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Exclusive named registration for the computer-use capability.
3
+ * @module @deepseek-ai/dsh-computer-use
4
+ */
5
+ import { Context, Service } from '@deepseek-ai/cordis';
6
+ import type { ComputerUseProviderName } from './brand.ts';
7
+ declare module '@deepseek-ai/cordis' {
8
+ interface Context {
9
+ computerUse: ComputerUseRegistry;
10
+ }
11
+ }
12
+ /** Owns one optional provider registration in the shared computer-use service. */
13
+ export declare class ComputerUseRegistry extends Service {
14
+ private registration;
15
+ constructor(ctx: Context);
16
+ /** Name of the registered provider, including while its resources are closing. */
17
+ get providerName(): ComputerUseProviderName | undefined;
18
+ /**
19
+ * Reserve the sole provider slot until the contribution is disposed.
20
+ * A second registration fails even when it repeats the current name. Providers
21
+ * must stop their tools and await owned work before releasing this registration.
22
+ * @param name - provider-owned name used in registration diagnostics.
23
+ * @returns the effect disposer for this exact registration.
24
+ */
25
+ register(name: ComputerUseProviderName): () => Promise<void>;
26
+ }
27
+ export default ComputerUseRegistry;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Exclusive named registration for the computer-use capability.
3
+ * @module @deepseek-ai/dsh-computer-use
4
+ */
5
+ import { Service } from '@deepseek-ai/cordis';
6
+ /** Owns one optional provider registration in the shared computer-use service. */
7
+ export class ComputerUseRegistry extends Service {
8
+ registration;
9
+ constructor(ctx) {
10
+ super(ctx, 'computerUse');
11
+ }
12
+ /** Name of the registered provider, including while its resources are closing. */
13
+ get providerName() {
14
+ return this.registration;
15
+ }
16
+ /**
17
+ * Reserve the sole provider slot until the contribution is disposed.
18
+ * A second registration fails even when it repeats the current name. Providers
19
+ * must stop their tools and await owned work before releasing this registration.
20
+ * @param name - provider-owned name used in registration diagnostics.
21
+ * @returns the effect disposer for this exact registration.
22
+ */
23
+ register(name) {
24
+ if (this.registration !== undefined) {
25
+ throw new Error(`computer use provider "${this.registration}" is already registered`);
26
+ }
27
+ return this.ctx.effect(() => {
28
+ this.registration = name;
29
+ return () => {
30
+ this.registration = undefined;
31
+ };
32
+ }, 'computerUse.register()');
33
+ }
34
+ }
35
+ export default ComputerUseRegistry;
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@deepseek-ai/dsh-computer-use",
3
+ "description": "Exclusive named computer-use provider registration",
4
+ "version": "0.1.7-rc.2",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/deepseek-ai/deepseek-harness.git",
11
+ "directory": "packages/computer-use/computer-use"
12
+ },
13
+ "type": "module",
14
+ "main": "lib/index.js",
15
+ "types": "lib/types/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./lib/types/index.d.ts",
19
+ "default": "./lib/index.js"
20
+ },
21
+ "./src/*": "./src/*",
22
+ "./package.json": "./package.json",
23
+ "./brand": {
24
+ "types": "./lib/types/brand.d.ts",
25
+ "default": "./lib/types/brand.js"
26
+ }
27
+ },
28
+ "files": [
29
+ "lib/index.js",
30
+ "lib/types/**/*.js",
31
+ "lib/types/**/*.d.ts"
32
+ ],
33
+ "license": "MIT",
34
+ "peerDependencies": {
35
+ "@deepseek-ai/cordis": "workspace:~",
36
+ "@deepseek-ai/dsh-brand": "workspace:*"
37
+ },
38
+ "devDependencies": {
39
+ "@deepseek-ai/cordis": "workspace:~",
40
+ "@deepseek-ai/dsh-brand": "workspace:*"
41
+ }
42
+ }