@askdkc/dsh-cli 0.13.5 → 0.14.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 (302) hide show
  1. package/bin/{dsh-tui.js → dsh-cli.js} +27 -27
  2. package/cordis.patch.yml +32 -32
  3. package/cordis.yml +17 -17
  4. package/lib/types/activityPrefs.d.ts +2 -2
  5. package/lib/types/activityPrefs.js +2 -2
  6. package/lib/types/adapter/channel/actions.js +1 -1
  7. package/lib/types/adapter/channel/consumer.js +1 -1
  8. package/lib/types/adapter/channel/internal-token.js +1 -1
  9. package/lib/types/adapter/channel/plugins.js +1 -1
  10. package/lib/types/adapter/channel/session-projection.js +3 -3
  11. package/lib/types/adapter/channel/transcript.js +1 -1
  12. package/lib/types/adapter/channel/ui.js +3 -3
  13. package/lib/types/adapter/kernel/host-facade.d.ts +1 -1
  14. package/lib/types/adapter/kernel/host-facade.js +6 -6
  15. package/lib/types/adapter/kernel/host-probe-access.d.ts +1 -1
  16. package/lib/types/adapter/kernel/host-probe-access.js +6 -6
  17. package/lib/types/adapter/kernel/kernel-runtime.js +1 -1
  18. package/lib/types/adapter/kernel/legacy-facade.d.ts +1 -1
  19. package/lib/types/adapter/kernel/legacy-facade.js +1 -1
  20. package/lib/types/adapter/kernel/replay-isolation.js +1 -1
  21. package/lib/types/adapter/kernel/runtime.d.ts +1 -1
  22. package/lib/types/adapter/kernel/runtime.js +7 -7
  23. package/lib/types/adapter/ports/channel-display.d.ts +1 -1
  24. package/lib/types/adapter/ports/channel-ui.d.ts +15 -15
  25. package/lib/types/adapter/standard/descriptor.d.ts +1 -1
  26. package/lib/types/adapter/standard/descriptor.js +2 -2
  27. package/lib/types/adapter/standard/registry.d.ts +1 -1
  28. package/lib/types/adapter/standard/registry.js +2 -2
  29. package/lib/types/adapter/standard/tui-extension.d.ts +2 -2
  30. package/lib/types/adapter/standard/tui-extension.js +3 -3
  31. package/lib/types/adapter/upstream/channel-driver.js +10 -10
  32. package/lib/types/adapter/upstream/decisions-driver.js +3 -3
  33. package/lib/types/adapter/upstream/extensions-driver.js +18 -18
  34. package/lib/types/adapter/upstream/host-descriptor-driver.js +4 -4
  35. package/lib/types/adapter/upstream/presentation-driver.js +5 -5
  36. package/lib/types/adapter/upstream/scenes-driver.js +4 -4
  37. package/lib/types/adapter/upstream/settings-driver.js +4 -4
  38. package/lib/types/adapter/upstream/workspace-driver.js +2 -2
  39. package/lib/types/bootstrap/state.d.ts +4 -4
  40. package/lib/types/bootstrap/state.js +4 -4
  41. package/lib/types/{tuiDisplayPrefs.d.ts → cliDisplayPrefs.d.ts} +1 -1
  42. package/lib/types/{tuiDisplayPrefs.d.ts.map → cliDisplayPrefs.d.ts.map} +1 -1
  43. package/lib/types/{tuiDisplayPrefs.js → cliDisplayPrefs.js} +1 -1
  44. package/lib/types/commands.js +7 -7
  45. package/lib/types/components/AutoRecapRow.d.ts +1 -1
  46. package/lib/types/components/AutoRecapRow.js +1 -1
  47. package/lib/types/components/HelpMenu.d.ts +1 -1
  48. package/lib/types/components/HelpMenu.js +1 -1
  49. package/lib/types/components/LogoV2.d.ts +2 -2
  50. package/lib/types/components/LogoV2.d.ts.map +1 -1
  51. package/lib/types/components/LogoV2.js +5 -19
  52. package/lib/types/components/MermaidDiagram.js +1 -1
  53. package/lib/types/components/MessageList.d.ts +2 -2
  54. package/lib/types/components/MessageList.js +1 -1
  55. package/lib/types/components/PageMargin.d.ts +3 -3
  56. package/lib/types/components/PageMargin.js +1 -1
  57. package/lib/types/components/PluginSceneBoundary.d.ts +1 -1
  58. package/lib/types/components/PluginSceneBoundary.js +1 -1
  59. package/lib/types/components/PromptInput.d.ts +1 -1
  60. package/lib/types/components/PromptInput.js +3 -3
  61. package/lib/types/components/ScrollbarGutter.d.ts +1 -1
  62. package/lib/types/components/ScrollbarGutter.js +1 -1
  63. package/lib/types/components/Select.d.ts +1 -1
  64. package/lib/types/components/Select.js +1 -1
  65. package/lib/types/components/SplitDiffView.d.ts +1 -1
  66. package/lib/types/components/ThemePicker.d.ts +1 -1
  67. package/lib/types/components/ThemePicker.js +1 -1
  68. package/lib/types/components/activityFrames.d.ts +1 -1
  69. package/lib/types/components/activityFrames.js +1 -1
  70. package/lib/types/components/design-system/Byline.d.ts +1 -1
  71. package/lib/types/components/design-system/Byline.js +1 -1
  72. package/lib/types/components/design-system/Divider.d.ts +1 -1
  73. package/lib/types/components/design-system/Divider.js +1 -1
  74. package/lib/types/components/design-system/StatusIcon.d.ts +1 -1
  75. package/lib/types/components/design-system/StatusIcon.js +1 -1
  76. package/lib/types/components/design-system/ThemeProvider.d.ts +1 -1
  77. package/lib/types/components/design-system/ThemeProvider.js +11 -11
  78. package/lib/types/components/design-system/ThemedBox.d.ts +1 -1
  79. package/lib/types/components/design-system/ThemedBox.js +1 -1
  80. package/lib/types/components/design-system/ThemedText.d.ts +1 -1
  81. package/lib/types/components/design-system/ThemedText.js +1 -1
  82. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +1 -1
  83. package/lib/types/components/messages/AssistantThinkingMessage.js +1 -1
  84. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +3 -3
  85. package/lib/types/components/messages/AssistantToolUseMessage.js +1 -1
  86. package/lib/types/components/messages/originalImage.js +1 -1
  87. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +1 -1
  88. package/lib/types/components/questions/AskUserQuestionPanel.js +1 -1
  89. package/lib/types/components/smoothReveal.d.ts +1 -1
  90. package/lib/types/components/smoothReveal.js +1 -1
  91. package/lib/types/customTheme.d.ts +5 -5
  92. package/lib/types/customTheme.js +7 -7
  93. package/lib/types/dsh-adapter/activity-store.d.ts +1 -1
  94. package/lib/types/dsh-adapter/activity-store.js +3 -3
  95. package/lib/types/dsh-adapter/bundled-presets.js +2 -2
  96. package/lib/types/dsh-adapter/channel/action-readiness.js +2 -2
  97. package/lib/types/dsh-adapter/channel/agent-view-projection.js +1 -1
  98. package/lib/types/dsh-adapter/channel/background-action.js +1 -1
  99. package/lib/types/dsh-adapter/channel/binding-events.js +1 -1
  100. package/lib/types/dsh-adapter/channel/binding.js +14 -14
  101. package/lib/types/dsh-adapter/channel/external-commands.js +3 -3
  102. package/lib/types/dsh-adapter/channel/input-delivery.js +1 -1
  103. package/lib/types/dsh-adapter/channel/job-projection.js +1 -1
  104. package/lib/types/dsh-adapter/channel/lifetime-resources.js +1 -1
  105. package/lib/types/dsh-adapter/channel/local-actions.js +1 -1
  106. package/lib/types/dsh-adapter/channel/mode-actions.js +1 -1
  107. package/lib/types/dsh-adapter/channel/mode-permission.js +6 -6
  108. package/lib/types/dsh-adapter/channel/mode-roster.js +1 -1
  109. package/lib/types/dsh-adapter/channel/owner.js +2 -2
  110. package/lib/types/dsh-adapter/channel/preferences.js +1 -1
  111. package/lib/types/dsh-adapter/channel/projection.js +1 -1
  112. package/lib/types/dsh-adapter/channel/reports.js +3 -3
  113. package/lib/types/dsh-adapter/channel/session-fork.js +1 -1
  114. package/lib/types/dsh-adapter/channel/session-metadata.d.ts +4 -4
  115. package/lib/types/dsh-adapter/channel/session-metadata.js +2 -2
  116. package/lib/types/dsh-adapter/channel/session-rewind.js +2 -2
  117. package/lib/types/dsh-adapter/channel/state.d.ts +1 -1
  118. package/lib/types/dsh-adapter/channel/state.js +1 -1
  119. package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
  120. package/lib/types/dsh-adapter/channel-ui.js +2 -2
  121. package/lib/types/dsh-adapter/channel.js +9 -9
  122. package/lib/types/dsh-adapter/cli-registration.d.ts.map +1 -1
  123. package/lib/types/dsh-adapter/cli-registration.js +5 -4
  124. package/lib/types/dsh-adapter/command-trees.d.ts +1 -1
  125. package/lib/types/dsh-adapter/command-trees.js +2 -2
  126. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +3 -3
  127. package/lib/types/dsh-adapter/compat/sessionLog.js +5 -5
  128. package/lib/types/dsh-adapter/compat/settings.d.ts.map +1 -1
  129. package/lib/types/dsh-adapter/compat/settings.js +15 -7
  130. package/lib/types/dsh-adapter/contract.d.ts +1 -1
  131. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  132. package/lib/types/dsh-adapter/contract.js +0 -1
  133. package/lib/types/dsh-adapter/decision-guard.d.ts +3 -3
  134. package/lib/types/dsh-adapter/decision-guard.js +6 -6
  135. package/lib/types/dsh-adapter/dialogs.d.ts +1 -1
  136. package/lib/types/dsh-adapter/dialogs.js +7 -7
  137. package/lib/types/dsh-adapter/effect-ledger.d.ts +2 -2
  138. package/lib/types/dsh-adapter/effect-ledger.js +5 -5
  139. package/lib/types/dsh-adapter/extension-events.js +10 -10
  140. package/lib/types/dsh-adapter/extensions.d.ts +3 -3
  141. package/lib/types/dsh-adapter/extensions.js +3 -3
  142. package/lib/types/dsh-adapter/host-access.js +11 -11
  143. package/lib/types/dsh-adapter/ide-channel.d.ts +6 -6
  144. package/lib/types/dsh-adapter/ide-channel.js +6 -6
  145. package/lib/types/dsh-adapter/index.d.ts +18 -18
  146. package/lib/types/dsh-adapter/index.js +5 -5
  147. package/lib/types/dsh-adapter/inject-channel.d.ts +4 -4
  148. package/lib/types/dsh-adapter/inject-channel.js +5 -5
  149. package/lib/types/dsh-adapter/invariant.d.ts +9 -2
  150. package/lib/types/dsh-adapter/invariant.d.ts.map +1 -1
  151. package/lib/types/dsh-adapter/invariant.js +1 -1
  152. package/lib/types/dsh-adapter/message-observer.d.ts +2 -2
  153. package/lib/types/dsh-adapter/message-observer.js +23 -23
  154. package/lib/types/dsh-adapter/migrate/adapters/scan.js +1 -1
  155. package/lib/types/dsh-adapter/migrate/bin-path.d.ts +1 -1
  156. package/lib/types/dsh-adapter/migrate/bin-path.js +4 -4
  157. package/lib/types/dsh-adapter/migrate/picker.d.ts +1 -1
  158. package/lib/types/dsh-adapter/migrate/picker.js +1 -1
  159. package/lib/types/dsh-adapter/migrate/uuid.js +1 -1
  160. package/lib/types/dsh-adapter/packaged-presets.js +1 -1
  161. package/lib/types/dsh-adapter/plugin-host.d.ts +2 -2
  162. package/lib/types/dsh-adapter/plugin-host.js +32 -32
  163. package/lib/types/dsh-adapter/plugin-storage.d.ts +3 -3
  164. package/lib/types/dsh-adapter/plugin-storage.js +5 -5
  165. package/lib/types/dsh-adapter/plugin.d.ts +4 -4
  166. package/lib/types/dsh-adapter/plugin.js +89 -89
  167. package/lib/types/dsh-adapter/preset-resolution.d.ts +1 -1
  168. package/lib/types/dsh-adapter/presets.js +1 -1
  169. package/lib/types/dsh-adapter/promptDebug.js +1 -1
  170. package/lib/types/dsh-adapter/questions.d.ts +1 -1
  171. package/lib/types/dsh-adapter/questions.js +1 -1
  172. package/lib/types/dsh-adapter/renderers.js +7 -7
  173. package/lib/types/dsh-adapter/scenes.d.ts +1 -1
  174. package/lib/types/dsh-adapter/scenes.js +6 -6
  175. package/lib/types/dsh-adapter/settings-sections.d.ts +1 -1
  176. package/lib/types/dsh-adapter/settings-sections.js +5 -5
  177. package/lib/types/dsh-adapter/sharp.js +1 -1
  178. package/lib/types/dsh-adapter/shortcuts.js +9 -9
  179. package/lib/types/dsh-adapter/status.js +21 -21
  180. package/lib/types/dsh-adapter/themes.js +2 -2
  181. package/lib/types/dsh-adapter/toast.js +7 -7
  182. package/lib/types/dsh-adapter/types.d.ts +0 -1
  183. package/lib/types/dsh-adapter/types.d.ts.map +1 -1
  184. package/lib/types/dsh-adapter/workspaces.d.ts +1 -1
  185. package/lib/types/dsh-adapter/workspaces.js +6 -6
  186. package/lib/types/effortPrefs.d.ts +2 -2
  187. package/lib/types/effortPrefs.js +2 -2
  188. package/lib/types/force-production-react.js +1 -1
  189. package/lib/types/herdr.js +4 -4
  190. package/lib/types/homePrefs.js +1 -1
  191. package/lib/types/i18n.d.ts +54 -54
  192. package/lib/types/i18n.js +39 -39
  193. package/lib/types/ink/clearTerminal.d.ts +1 -1
  194. package/lib/types/ink/clearTerminal.js +1 -1
  195. package/lib/types/ink/colorize.js +1 -1
  196. package/lib/types/ink/components/App.d.ts +1 -1
  197. package/lib/types/ink/components/App.js +5 -5
  198. package/lib/types/ink/components/Text.d.ts +1 -1
  199. package/lib/types/ink/devtools.d.ts +1 -1
  200. package/lib/types/ink/dom.d.ts +1 -1
  201. package/lib/types/ink/dom.js +1 -1
  202. package/lib/types/ink/geometry-trace.js +4 -4
  203. package/lib/types/ink/ink.d.ts.map +1 -1
  204. package/lib/types/ink/ink.js +8 -19
  205. package/lib/types/ink/reconciler.d.ts +1 -1
  206. package/lib/types/ink/reconciler.d.ts.map +1 -1
  207. package/lib/types/ink/reconciler.js +6 -3
  208. package/lib/types/ink/render-to-screen.d.ts.map +1 -1
  209. package/lib/types/ink/render-to-screen.js +0 -5
  210. package/lib/types/ink/terminal.js +3 -3
  211. package/lib/types/ink/termio/osc.js +1 -1
  212. package/lib/types/ink/update-overflow-guard.js +2 -2
  213. package/lib/types/minimalMode.d.ts +2 -2
  214. package/lib/types/minimalMode.js +2 -2
  215. package/lib/types/modelGroups.d.ts +1 -1
  216. package/lib/types/modelGroups.js +1 -1
  217. package/lib/types/modelPrefs.d.ts +1 -1
  218. package/lib/types/modelPrefs.js +1 -1
  219. package/lib/types/modelRecents.d.ts +2 -2
  220. package/lib/types/modelRecents.js +2 -2
  221. package/lib/types/package-version.d.ts +3 -0
  222. package/lib/types/package-version.d.ts.map +1 -0
  223. package/lib/types/package-version.js +25 -0
  224. package/lib/types/presetPrefs.d.ts +1 -1
  225. package/lib/types/presetPrefs.js +1 -1
  226. package/lib/types/reload.d.ts +8 -8
  227. package/lib/types/reload.js +4 -4
  228. package/lib/types/screens/Chat.js +27 -27
  229. package/lib/types/screens/StatusLine.js +1 -1
  230. package/lib/types/screens/StatusMetrics.js +1 -1
  231. package/lib/types/sessionHistory.d.ts +3 -3
  232. package/lib/types/sessionHistory.js +7 -7
  233. package/lib/types/sessionModes.js +1 -1
  234. package/lib/types/sessionMounts.d.ts +1 -1
  235. package/lib/types/sessionMounts.js +1 -1
  236. package/lib/types/sessionPins.d.ts +1 -1
  237. package/lib/types/sessionPins.js +1 -1
  238. package/lib/types/terminal-utils/cliHighlight.d.ts +1 -1
  239. package/lib/types/terminal-utils/hash.d.ts +1 -1
  240. package/lib/types/terminal-utils/hash.js +1 -1
  241. package/lib/types/terminal-utils/mermaid.d.ts +1 -1
  242. package/lib/types/terminal-utils/syntaxTheme.js +1 -1
  243. package/lib/types/theme.d.ts +3 -3
  244. package/lib/types/theme.js +3 -3
  245. package/lib/types/themePrefs.d.ts +3 -3
  246. package/lib/types/themePrefs.js +3 -3
  247. package/lib/types/tips.js +4 -4
  248. package/lib/types/trajectory/effortIgnition.d.ts +1 -1
  249. package/lib/types/trajectoryPrefs.d.ts +1 -1
  250. package/lib/types/trajectoryPrefs.js +1 -1
  251. package/lib/types/ui.d.ts +1 -1
  252. package/lib/types/ui.js +1 -1
  253. package/lib/types/update.d.ts +25 -26
  254. package/lib/types/update.d.ts.map +1 -1
  255. package/lib/types/update.js +55 -73
  256. package/lib/types/utils/clipboard.js +1 -1
  257. package/lib/types/utils/credentials.js +2 -2
  258. package/lib/types/utils/debug.d.ts +3 -3
  259. package/lib/types/utils/debug.js +6 -6
  260. package/lib/types/utils/earlyInput.d.ts +1 -1
  261. package/lib/types/utils/earlyInput.js +1 -1
  262. package/lib/types/utils/externalEditor.js +1 -1
  263. package/lib/types/utils/fullscreen.d.ts +3 -3
  264. package/lib/types/utils/fullscreen.js +4 -4
  265. package/lib/types/utils/log.js +1 -1
  266. package/lib/types/utils/paths.d.ts +3 -3
  267. package/lib/types/utils/paths.js +4 -4
  268. package/lib/types/working-activity.js +1 -1
  269. package/node_modules/@askdkc/dsh-auth/dsh-plugin.json +1 -1
  270. package/node_modules/@askdkc/dsh-auth/lib/index.d.ts +2 -2
  271. package/node_modules/@askdkc/dsh-auth/lib/index.js +2 -2
  272. package/node_modules/@askdkc/dsh-auth/lib/pi-ai.d.ts +0 -2
  273. package/node_modules/@askdkc/dsh-auth/lib/pi-ai.js +0 -2
  274. package/node_modules/@askdkc/dsh-auth/lib/service.d.ts +1 -1
  275. package/node_modules/@askdkc/dsh-auth/lib/service.js +2 -2
  276. package/node_modules/dsh-working-activity/lib/client.js.map +1 -1
  277. package/node_modules/dsh-working-activity/lib/types/client/index.d.ts +1 -1
  278. package/node_modules/dsh-working-activity/lib/types/config.d.ts +2 -2
  279. package/node_modules/dsh-working-activity/lib/types/config.js +2 -2
  280. package/node_modules/dsh-working-activity/lib/types/frames.d.ts +1 -1
  281. package/node_modules/dsh-working-activity/lib/types/frames.js +1 -1
  282. package/node_modules/dsh-working-activity/lib/types/index.d.ts +1 -1
  283. package/node_modules/dsh-working-activity/lib/types/index.js +2 -2
  284. package/node_modules/dsh-working-activity/lib/types/invariant.d.ts +13 -1
  285. package/node_modules/dsh-working-activity/lib/types/lang.d.ts +5 -5
  286. package/node_modules/dsh-working-activity/lib/types/lang.js +8 -8
  287. package/node_modules/dsh-working-activity/lib/types/projection.d.ts +1 -1
  288. package/node_modules/dsh-working-activity/lib/types/projection.js +1 -1
  289. package/node_modules/dsh-working-activity/lib/types/status.d.ts +1 -1
  290. package/node_modules/dsh-working-activity/lib/types/status.js +1 -1
  291. package/node_modules/dsh-working-activity/package.json +0 -4
  292. package/node_modules/dsh-working-activity/src/client/index.ts +1 -1
  293. package/node_modules/dsh-working-activity/src/config.ts +2 -2
  294. package/node_modules/dsh-working-activity/src/frames.ts +1 -1
  295. package/node_modules/dsh-working-activity/src/index.ts +4 -4
  296. package/node_modules/dsh-working-activity/src/invariant.ts +10 -3
  297. package/node_modules/dsh-working-activity/src/lang.ts +8 -8
  298. package/node_modules/dsh-working-activity/src/projection.ts +1 -1
  299. package/node_modules/dsh-working-activity/src/status.ts +1 -1
  300. package/package.json +8 -13
  301. package/presets/liangshen/agent.cordis.yml +1 -1
  302. package/presets/liangshen/custom-bash.mjs +2 -2
@@ -25,7 +25,7 @@
25
25
  * 可用。shellQuote 等小工具在此内联。
26
26
  *
27
27
  * 面向用户的消息走 MSG 双语表:与 TUI 的语言契约一致——
28
- * `DSH_TUI_LANG` 显式指定时从其值,否则默认英文(同 src/i18n.ts 的缺省)。
28
+ * `DSH_CLI_LANG` 显式指定时从其值,否则默认英文(同 src/i18n.ts 的缺省)。
29
29
  */
30
30
  import { spawn, spawnSync } from 'node:child_process'
31
31
  import { existsSync, readFileSync, readdirSync, realpathSync, rmSync } from 'node:fs'
@@ -33,9 +33,9 @@ import { homedir } from 'node:os'
33
33
  import { dirname, isAbsolute, join, resolve } from 'node:path'
34
34
  import { fileURLToPath, pathToFileURL } from 'node:url'
35
35
 
36
- if (process.platform === 'win32' && process.env.DSH_TUI_STANDALONE_BINARY && process.argv[2] !== 'safe') {
36
+ if (process.platform === 'win32' && process.env.DSH_CLI_STANDALONE_BINARY && process.argv[2] !== 'safe') {
37
37
  try {
38
- const oldBinary = `${process.env.DSH_TUI_STANDALONE_BINARY}.old`
38
+ const oldBinary = `${process.env.DSH_CLI_STANDALONE_BINARY}.old`
39
39
  if (existsSync(oldBinary)) rmSync(oldBinary, { force: true })
40
40
  } catch {
41
41
  // Best effort cleanup.
@@ -133,15 +133,15 @@ const isVersionNewer = (a, b) => {
133
133
  return false
134
134
  }
135
135
 
136
- const lang = process.env.DSH_TUI_LANG === 'zh' ? 'zh' : 'en'
136
+ const lang = process.env.DSH_CLI_LANG === 'zh' ? 'zh' : 'en'
137
137
  const MSG = {
138
138
  noDsh: {
139
- en: '[dsh-cli] dsh CLI not found. Install it or set DSH_TUI_DSH_ROOT to a built Harness checkout:\n npm install -g @deepseek-ai/dsh',
140
- zh: '[dsh-cli] 未检测到 dsh CLI。可安装官方客户端,或将 DSH_TUI_DSH_ROOT 指向已构建的 Harness 源码目录:\n npm install -g @deepseek-ai/dsh',
139
+ en: '[dsh-cli] dsh CLI not found. Install it or set DSH_CLI_DSH_ROOT to a built Harness checkout:\n npm install -g @deepseek-ai/dsh',
140
+ zh: '[dsh-cli] 未检测到 dsh CLI。可安装官方客户端,或将 DSH_CLI_DSH_ROOT 指向已构建的 Harness 源码目录:\n npm install -g @deepseek-ai/dsh',
141
141
  },
142
142
  invalidDshRoot: {
143
- en: root => `[dsh-cli] DSH_TUI_DSH_ROOT must be an absolute, built DeepSeek Harness checkout: ${root}`,
144
- zh: root => `[dsh-cli] DSH_TUI_DSH_ROOT 必须指向已构建的 DeepSeek Harness 源码绝对路径:${root}`,
143
+ en: root => `[dsh-cli] DSH_CLI_DSH_ROOT must be an absolute, built DeepSeek Harness checkout: ${root}`,
144
+ zh: root => `[dsh-cli] DSH_CLI_DSH_ROOT 必须指向已构建的 DeepSeek Harness 源码绝对路径:${root}`,
145
145
  },
146
146
  noPnpm: {
147
147
  en: '[dsh-cli] The first-time setup needs pnpm (dsh plugin delegates installs to it):\n npm install -g pnpm (or via corepack: corepack enable pnpm)',
@@ -446,7 +446,7 @@ const MSG = {
446
446
  },
447
447
  helpText: {
448
448
  en:
449
- `Usage: dsh-cli|dst [command] [options] [path|url]\n\n` +
449
+ `Usage: dsh-cli [command] [options] [path|url]\n\n` +
450
450
  `Commands:\n` +
451
451
  ` update Update the ${PROFILE} profile to the latest release\n` +
452
452
  ` migrate [agent] Import conversations from claude-code/codex/omp/zcode/grok-build (--dry-run to preview)\n` +
@@ -461,7 +461,7 @@ const MSG = {
461
461
  ` <path|url> Open with the given workspace target\n\n` +
462
462
  `Any other argument is forwarded to \`dsh --profile ${PROFILE}\`.`,
463
463
  zh:
464
- `用法:dsh-cli|dst [命令] [选项] [路径|URL]\n\n` +
464
+ `用法:dsh-cli [命令] [选项] [路径|URL]\n\n` +
465
465
  `命令:\n` +
466
466
  ` update 将 ${PROFILE} profile 升级到最新版本\n` +
467
467
  ` migrate [agent] 迁移 claude-code/codex/omp/zcode/grok-build 的对话(--dry-run 预览)\n` +
@@ -480,7 +480,7 @@ const MSG = {
480
480
  const msg = key => MSG[key][lang]
481
481
 
482
482
  // React 开发构建会把每次渲染的 performance.measure() 堆进无界缓冲区导致
483
- // 长会话 OOM——与仓库根 dsh-tui.cmd 保持一致,强制 production。
483
+ // 长会话 OOM——与仓库根 dsh-cli.cmd 保持一致,强制 production。
484
484
  process.env.NODE_ENV ??= 'production'
485
485
 
486
486
  const sameDir = (a, b) => {
@@ -494,7 +494,7 @@ const sameDir = (a, b) => {
494
494
  const dshHome = process.env.DSH_HOME || join(homedir(), '.dsh')
495
495
  const profileDir = join(dshHome, 'profiles', PROFILE)
496
496
  const profilePkgDir = join(profileDir, 'node_modules', '@askdkc', 'dsh-cli')
497
- const profileBin = join(profilePkgDir, 'bin', 'dsh-tui.js')
497
+ const profileBin = join(profilePkgDir, 'bin', 'dsh-cli.js')
498
498
  const installedPkgPath = join(profilePkgDir, 'package.json')
499
499
  const runningInsideProfile = sameDir(ownDir, profilePkgDir)
500
500
  const rescueProfileDir = join(dshHome, 'profiles', RESCUE_PROFILE)
@@ -547,7 +547,7 @@ if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
547
547
  }
548
548
  // A source checkout does not put `dsh` on PATH. An explicit Harness root lets
549
549
  // the launcher run its built CLI while keeping the caller's project cwd.
550
- const dshRoot = process.env.DSH_TUI_DSH_ROOT
550
+ const dshRoot = process.env.DSH_CLI_DSH_ROOT
551
551
  let dshBin
552
552
  if (dshRoot !== undefined) {
553
553
  const candidate = join(dshRoot, 'apps', 'cli', 'lib', 'bin.js')
@@ -638,7 +638,7 @@ const runDoctorChecks = () => {
638
638
  'DEEPSEEK_API_KEY',
639
639
  keyFromEnv ? L.keySetEnv : keyFromStore ? L.keySetStore : L.keyMissing,
640
640
  )
641
- for (const candidate of [join(homedir(), '.dsh-tui', 'cordis.yml'), join(profileDir, 'cordis.patch.yml')]) {
641
+ for (const candidate of [join(homedir(), '.dsh-cli', 'cordis.yml'), join(profileDir, 'cordis.patch.yml')]) {
642
642
  report(existsSync(candidate), 'config', `${candidate}${existsSync(candidate) ? '' : ` ${L.missing}`}`)
643
643
  }
644
644
  return { hardFailure, lines }
@@ -757,7 +757,7 @@ const startDshSession = (dshArgs, profile = PROFILE, env = process.env) =>
757
757
  // 那个会话,dsh 会在恢复时再报一次错,正好污染最该干净的通道。其余宿主变量
758
758
  // (PATH / DSH_HOME / 凭据…)是救援能工作的前提,照常继承。
759
759
  // home 层补丁不在此列:它由 createRescueProfile 的干净性门禁单独把关。
760
- const RESCUE_DROPPED_ENV = ['DSH_TUI_RESUME_SESSION', 'DSH_TUI_WORKSPACE_TARGET']
760
+ const RESCUE_DROPPED_ENV = ['DSH_CLI_RESUME_SESSION', 'DSH_CLI_WORKSPACE_TARGET']
761
761
  const rescueEnv = () => {
762
762
  const env = { ...process.env }
763
763
  for (const key of RESCUE_DROPPED_ENV) delete env[key]
@@ -1234,7 +1234,7 @@ if (subcommand === 'safe') {
1234
1234
  // 顶层处理、两种角色同一条路径——不放进委托链。委托会把 update 交给
1235
1235
  // profile 内的旧 bin:旧副本不认识这个词,只会当参数透传,恰好是「profile
1236
1236
  // 落后、最需要升级」的用户永远到不了新入口。这里统一动态 import **profile
1237
- // 的**编译产物(不是本副本的——DSH_TUI_NO_DELEGATE 下两者不同包,读本副本
1237
+ // 的**编译产物(不是本副本的——DSH_CLI_NO_DELEGATE 下两者不同包,读本副本
1238
1238
  // 会拿全局包版本误判 already-latest/half-updated);瘦壳零 lib 静态依赖的
1239
1239
  // 迁移契约不变。profile 未初始化时先走既有自举(dsh/pnpm 预检在其中);
1240
1240
  // 编译产物缺失或没有 cliUpdate 导出(半更新的旧版)给手工升级指引退出 1。
@@ -1282,23 +1282,23 @@ if (subcommand === 'migrate') {
1282
1282
  }
1283
1283
 
1284
1284
  // ─── 全局副本:瘦壳角色 ───────────────────────────────────────────────────────
1285
- // DSH_TUI_NO_DELEGATE=1 是测试/调试逃生口:强制走完整逻辑(verify-launcher
1285
+ // DSH_CLI_NO_DELEGATE=1 是测试/调试逃生口:强制走完整逻辑(verify-launcher
1286
1286
  // 的沙箱用它直接驱动全量路径;现场排查委托链时同样可用)。
1287
- if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_DELEGATE !== '1') {
1287
+ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_CLI_NO_DELEGATE !== '1') {
1288
1288
  if (!profileReady()) bootstrapProfile()
1289
1289
  // Refuse to delegate into a profile from an older release line: the profile
1290
1290
  // copy would launch `dsh --profile dsh-cli` against a composition built from
1291
1291
  // this launcher's patch surface and fail inside the loader.
1292
1292
  checkProfileAlignment(profileVersion())
1293
1293
  // 委托 profile 内副本执行全部启动逻辑。外层代际通过
1294
- // DSH_TUI_LAUNCHER_VERSION 交代(/update 的对齐诊断沿用该契约)。
1294
+ // DSH_CLI_LAUNCHER_VERSION 交代(/update 的对齐诊断沿用该契约)。
1295
1295
  try {
1296
1296
  readFileSync(profileBin, 'utf8')
1297
1297
  } catch {
1298
1298
  console.error(msg('delegateFailed')(profileBin))
1299
1299
  process.exit(1)
1300
1300
  }
1301
- process.env.DSH_TUI_LAUNCHER_VERSION = ownVersion
1301
+ process.env.DSH_CLI_LAUNCHER_VERSION = ownVersion
1302
1302
  const child = spawn(process.execPath, [profileBin, ...process.argv.slice(2)], {
1303
1303
  stdio: 'inherit',
1304
1304
  env: process.env,
@@ -1332,18 +1332,18 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
1332
1332
  }
1333
1333
  }
1334
1334
  // 版本错位诊断与瘦壳委托路径共用同一实现(见 checkProfileAlignment)。
1335
- // `!runningInsideProfile` 只在 DSH_TUI_NO_DELEGATE=1 的调试口下成立,因此
1335
+ // `!runningInsideProfile` 只在 DSH_CLI_NO_DELEGATE=1 的调试口下成立,因此
1336
1336
  // 该判定不能只留在这里——委派出去的子进程就是 profile 副本,看不到外层
1337
1337
  // 启动器版本。
1338
1338
  if (!runningInsideProfile) checkProfileAlignment(installedVersion)
1339
1339
 
1340
1340
  // --resume / 工作区目标拦截(launcher 契约,见 src/sessionHistory.ts)。
1341
1341
  const setResumeEnv = sessionId => {
1342
- process.env.DSH_TUI_RESUME_SESSION = sessionId
1342
+ process.env.DSH_CLI_RESUME_SESSION = sessionId
1343
1343
  }
1344
1344
  const readLastResumeTarget = () => {
1345
1345
  try {
1346
- return readFileSync(join(homedir(), '.dsh-tui', 'resume.txt'), 'utf8').trim()
1346
+ return readFileSync(join(homedir(), '.dsh-cli', 'resume.txt'), 'utf8').trim()
1347
1347
  } catch {
1348
1348
  // 没有历史会话可恢复——静默忽略,正常冷启动。
1349
1349
  }
@@ -1363,19 +1363,19 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
1363
1363
  if (!sessionId) sessionId = readLastResumeTarget()
1364
1364
  if (sessionId) setResumeEnv(sessionId)
1365
1365
  } else if (
1366
- process.env.DSH_TUI_WORKSPACE_TARGET === undefined
1366
+ process.env.DSH_CLI_WORKSPACE_TARGET === undefined
1367
1367
  && !a.startsWith('-')
1368
1368
  && (isAbsolute(a) || /^[a-z][a-z0-9+.-]*:\/\//iu.test(a) || existsSync(resolve(a)))
1369
1369
  ) {
1370
- process.env.DSH_TUI_WORKSPACE_TARGET = a
1370
+ process.env.DSH_CLI_WORKSPACE_TARGET = a
1371
1371
  } else {
1372
1372
  args.push(a)
1373
1373
  }
1374
1374
  }
1375
1375
 
1376
1376
  // 启动:被委托场景下本副本自己的版本即对齐诊断所见的启动器代际。
1377
- if (process.env.DSH_TUI_LAUNCHER_VERSION === undefined && ownVersion !== undefined) {
1378
- process.env.DSH_TUI_LAUNCHER_VERSION = ownVersion
1377
+ if (process.env.DSH_CLI_LAUNCHER_VERSION === undefined && ownVersion !== undefined) {
1378
+ process.env.DSH_CLI_LAUNCHER_VERSION = ownVersion
1379
1379
  }
1380
1380
 
1381
1381
  const firstArgs = args
package/cordis.patch.yml CHANGED
@@ -1,20 +1,20 @@
1
- # The dsh-tui bundle patch: the interactive terminal front door over the
1
+ # The dsh-cli bundle patch: the interactive terminal front door over the
2
2
  # dsh-base layer. Applied after dsh-base's insert; rows here override base
3
3
  # rows by id, with the profile's own cordis.patch.yml and any --patch
4
4
  # overlays still to come.
5
5
  #
6
6
  # A patch replaces the targeted row's whole `config`, so each row below
7
7
  # restates every key it owns (see the dsh-base patch for the shared
8
- # defaults). The dsh-base core rows that need no dsh-tui value — tools,
8
+ # defaults). The dsh-base core rows that need no dsh-cli value — tools,
9
9
  # sandbox/approval policy, skills, goal, plan mode, workspace context,
10
10
  # telemetry — are inherited unless this surface explicitly restates them.
11
11
 
12
12
  # ── surface-specific values over the dsh-base layer ─────────────────────────
13
13
 
14
- # Deployment persona, overridden by DSH_TUI_PERSONA.
14
+ # Deployment persona, overridden by DSH_CLI_PERSONA.
15
15
  - id: system-prompt
16
16
  config: !!js >-
17
- ({ personaPrefix: process.env.DSH_TUI_PERSONA ?? "You are a coding agent. Respond in the language of the user's request; use English when it is unclear. Do not infer the response language from instructions, quoted text, files, tool output, or the interface language." })
17
+ ({ personaPrefix: process.env.DSH_CLI_PERSONA ?? "You are a coding agent. Respond in the language of the user's request; use English when it is unclear. Do not infer the response language from instructions, quoted text, files, tool output, or the interface language." })
18
18
 
19
19
  # The native DeepSeek adapter, pinned to the harness defaults: full thinking
20
20
  # at max effort, key and base URL from the launching environment. The base
@@ -160,16 +160,16 @@
160
160
  # Sessions live in the shared JSONL store (~/.dsh/sessions) — the same
161
161
  # backend dsh web writes — so /resume here and the web session list see each
162
162
  # other (#24). The row itself comes from the dsh-base layer; this override
163
- # only re-points the root when DSH_TUI_SESSION_ROOT is set (test isolation).
163
+ # only re-points the root when DSH_CLI_SESSION_ROOT is set (test isolation).
164
164
  - id: session-persistence-jsonl
165
165
  config:
166
- root: !!js process.env.DSH_TUI_SESSION_ROOT ?? dshHomePath('sessions')
166
+ root: !!js process.env.DSH_CLI_SESSION_ROOT ?? dshHomePath('sessions')
167
167
 
168
- # ── dsh-tui rows ────────────────────────────────────────────────────────────
168
+ # ── dsh-cli rows ────────────────────────────────────────────────────────────
169
169
 
170
170
  # The `user-interaction` service row comes from the dsh-base bundle layer
171
171
  # (mounted before this layer); do not insert it again — the include patch
172
- # semantics would create a duplicate row. dsh-tui defensively creates the
172
+ # semantics would create a duplicate row. dsh-cli defensively creates the
173
173
  # service on its own context when no composition provides it (bare
174
174
  # `dsh --config cordis.yml` boots), then mounts the model-facing
175
175
  # ask_user_question tool. On legacy hosts it registers the TUI provider on
@@ -183,21 +183,21 @@
183
183
  #
184
184
  # These rows own host-plane services that the official web-app bundle may
185
185
  # already mount. Loader entry ids are process-global, so these
186
- # rows use dsh-tui-* scoped ids and self-disable when an enabled row with
186
+ # rows use dsh-cli-* scoped ids and self-disable when an enabled row with
187
187
  # the official id/name is already present in the tree. The disabled check
188
188
  # is evaluated during the same include update that inserts every row, so
189
189
  # it sees the web-app rows regardless of their activation state.
190
- - id: dsh-tui-storage
190
+ - id: dsh-cli-storage
191
191
  name: '@deepseek-ai/dsh-storage'
192
192
  disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'storage' && entry.options.name === '@deepseek-ai/dsh-storage' && !entry.disabled)"
193
193
 
194
- - id: dsh-tui-storage-json
194
+ - id: dsh-cli-storage-json
195
195
  name: '@deepseek-ai/dsh-storage-json'
196
196
  disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'storage-json' && entry.options.name === '@deepseek-ai/dsh-storage-json' && !entry.disabled)"
197
197
  config:
198
198
  root: !!js dshHomePath('storages')
199
199
 
200
- - id: dsh-tui-storage-domain
200
+ - id: dsh-cli-storage-domain
201
201
  name: '@deepseek-ai/dsh-storage-domain'
202
202
  disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'storage-domain' && entry.options.name === '@deepseek-ai/dsh-storage-domain' && !entry.disabled)"
203
203
  config:
@@ -205,33 +205,33 @@
205
205
 
206
206
  # Scoped services yield to active official rows in mixed profiles.
207
207
 
208
- - id: dsh-tui-workspace
208
+ - id: dsh-cli-workspace
209
209
  name: '@deepseek-ai/dsh-workspace'
210
210
  disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'workspace' && entry.options.name === '@deepseek-ai/dsh-workspace' && !entry.disabled)"
211
211
 
212
212
  # Delegation settings yield to the official row in mixed profiles.
213
- - id: dsh-tui-subagent-model-selection-settings
213
+ - id: dsh-cli-subagent-model-selection-settings
214
214
  name: '@deepseek-ai/dsh-tool-subagent/model-selection-settings'
215
215
  disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'subagent-model-selection-settings' && entry.options.name === '@deepseek-ai/dsh-tool-subagent/model-selection-settings' && !entry.disabled)"
216
216
 
217
217
  # Generic terminal workspace registry. Optional plugins add providers;
218
218
  # the TUI itself always supplies LOCAL and has no provider-specific code.
219
- - id: dsh-tui-workspaces
219
+ - id: dsh-cli-workspaces
220
220
  name: '@askdkc/dsh-cli/workspaces'
221
221
 
222
222
  # Optional plugins contribute nested slash-command completion here;
223
223
  # execution and durable command events remain owned by dsh-commands.
224
- - id: dsh-tui-command-trees
224
+ - id: dsh-cli-command-trees
225
225
  name: '@askdkc/dsh-cli/command-trees'
226
226
  # Optional plugins declare editable settings sections here (issue #165);
227
227
  # storage, validation and writes remain owned by the dsh settings service.
228
- - id: dsh-tui-settings-sections
228
+ - id: dsh-cli-settings-sections
229
229
  name: '@askdkc/dsh-cli/settings-sections'
230
230
 
231
231
  # Optional plugins register full-screen scenes (trajectory-style whole-
232
232
  # terminal views) here and open them from their own command handlers;
233
233
  # rendering and input ownership remain owned by the TUI's Chat screen.
234
- - id: dsh-tui-scenes
234
+ - id: dsh-cli-scenes
235
235
  name: '@askdkc/dsh-cli/scenes'
236
236
 
237
237
  # Plugin-interop anchor (Community Consensus v0.15): the unified grant
@@ -240,7 +240,7 @@
240
240
  # ledger) mount off THIS row's apply, so the patch surface changes only
241
241
  # once for the whole alignment. Mounted ahead of the extensions row and
242
242
  # any third-party plugin row.
243
- - id: dsh-tui-plugin-host
243
+ - id: dsh-cli-plugin-host
244
244
  name: '@askdkc/dsh-cli/plugin-host'
245
245
 
246
246
  # Plugin-facing UI seams (the pi-style extension surface): managed
@@ -249,11 +249,11 @@
249
249
  # decision events (tui/input, tui/rewind-prompt, tui/session-switch,
250
250
  # tui/compact, …) are fired by the channel on the cordis bus directly
251
251
  # and need no row.
252
- - id: dsh-tui-extensions
252
+ - id: dsh-cli-extensions
253
253
  name: '@askdkc/dsh-cli/extensions'
254
254
 
255
255
  # Current declarative registry. Web may already own this seat.
256
- - id: dsh-tui-agent-preset-registry
256
+ - id: dsh-cli-agent-preset-registry
257
257
  name: '@deepseek-ai/dsh-agent-preset-registry'
258
258
  disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'agent-preset-registry' && entry.options.name === '@deepseek-ai/dsh-agent-preset-registry' && !entry.disabled)"
259
259
  config:
@@ -263,7 +263,7 @@
263
263
  # waits on (dynamicCordisRunner/cordisInspect); dsh-base carries no such
264
264
  # row — the official web app inserts it the same way, so this copy yields
265
265
  # to it when it is already present.
266
- - id: dsh-tui-cordis-host-runner
266
+ - id: dsh-cli-cordis-host-runner
267
267
  name: '@deepseek-ai/dsh-cordis-host-runner'
268
268
  disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'cordis-host-runner' && entry.options.name === '@deepseek-ai/dsh-cordis-host-runner' && !entry.disabled)"
269
269
 
@@ -273,21 +273,21 @@
273
273
  # the ctx.dshAuth service this row provides. Entry-level inject only —
274
274
  # the plugin module's own inject is empty so a stale patch cannot
275
275
  # deadlock a composition lacking these services (#183 pattern).
276
- - id: dsh-tui-auth
276
+ - id: dsh-cli-auth
277
277
  name: '@askdkc/dsh-cli/oauth'
278
278
  inject: [llm, commands]
279
279
 
280
280
  # The interactive front door. The plugin creates/resumes its agent at
281
281
  # runtime, seeds the startup status line, and disposes the whole app tree
282
- # (exiting the process) when the TUI unmounts. `dsh-tui --resume`
283
- # feeds the session id through DSH_TUI_RESUME_SESSION (see
282
+ # (exiting the process) when the TUI unmounts. `dsh-cli --resume`
283
+ # feeds the session id through DSH_CLI_RESUME_SESSION (see
284
284
  # src/sessionHistory.ts for the launcher contract).
285
- - id: dsh-tui
285
+ - id: dsh-cli
286
286
  name: '@askdkc/dsh-cli'
287
287
  # The entry-level dependency augments the plugin's `agents` inject and
288
288
  # prevents startup Session creation from racing WorkspaceRegistry init.
289
289
  inject: [workspaceRegistry, agents, tuiWorkspaces, tuiScenes, tuiDialogs, tuiStatus, tuiShortcuts, tuiRenderers, tuiThemes]
290
- # `tuiWorkspaces`/`tuiScenes` (and the dsh-tui-extensions services,
290
+ # `tuiWorkspaces`/`tuiScenes` (and the dsh-cli-extensions services,
291
291
  # including `tuiThemes`)
292
292
  # live in the entry-level inject ONLY as an ordering (and reload-rebind)
293
293
  # guarantee alongside their service rows
@@ -337,12 +337,12 @@
337
337
  # plan: false
338
338
  # sandbox: danger-full-access
339
339
  # approval: never
340
- # Static preset choice (DSH_TUI_PRESET overrides): wins over the
341
- # persisted `/preset` preference (~/.dsh-tui/agent-preset.json), which
340
+ # Static preset choice (DSH_CLI_PRESET overrides): wins over the
341
+ # persisted `/preset` preference (~/.dsh-cli/agent-preset.json), which
342
342
  # wins over the roster default (standard).
343
- preset: !!js process.env.DSH_TUI_PRESET ?? undefined
344
- workspace: !!js process.env.DSH_TUI_WORKSPACE_TARGET ?? undefined
345
- sessionId: !!js process.env.DSH_TUI_RESUME_SESSION ?? undefined
343
+ preset: !!js process.env.DSH_CLI_PRESET ?? undefined
344
+ workspace: !!js process.env.DSH_CLI_WORKSPACE_TARGET ?? undefined
345
+ sessionId: !!js process.env.DSH_CLI_RESUME_SESSION ?? undefined
346
346
 
347
347
  # Live working-line data source (thinking copy / running tool / turn
348
348
  # summary). Mounted through dsh-cli's own
package/cordis.yml CHANGED
@@ -1,9 +1,9 @@
1
- # dsh-tui interactive front door over the agent-spine bundle.
1
+ # dsh-cli interactive front door over the agent-spine bundle.
2
2
  # Run with: dsh --config cordis.yml (或 npm 安装后走 dsh plugin 机制)
3
3
  # Requires DEEPSEEK_API_KEY; a terminal TTY is mandatory.
4
4
 
5
5
  # The user-interaction service: hosts `ctx.userQuestions`, the seam behind
6
- # the model-facing ask_user_question tool. dsh-tui uses the legacy provider
6
+ # the model-facing ask_user_question tool. dsh-cli uses the legacy provider
7
7
  # API when present, otherwise the scoped user-questions/request waterfall;
8
8
  # the service must live at the root so the agent loop's tool execution can
9
9
  # reach it.
@@ -12,7 +12,7 @@
12
12
 
13
13
  # The approval service (issue #49): the harness's sandbox escalation seam
14
14
  # (`sandbox_permissions: danger-full-access`) asks ApprovalService.request(),
15
- # which dispatches an `approval/request` waterfall; dsh-tui registers itself
15
+ # which dispatches an `approval/request` waterfall; dsh-cli registers itself
16
16
  # as the interactive answerer (ApprovalStore + approval panel). Without this
17
17
  # row the waterfall has no service and fail-closes to 'unavailable'. Policy
18
18
  # expression mirrors the profile cordis.patch.yml row exactly (verified by
@@ -24,35 +24,35 @@
24
24
  config:
25
25
  policy: !!js "process.platform === 'win32' ? 'never' : ((process.env.DSH_PERMISSION_MODE ?? 'workspace-write') === 'danger-full-access' ? 'never' : 'ask')"
26
26
 
27
- - id: dsh-tui-workspaces
27
+ - id: dsh-cli-workspaces
28
28
  name: '@askdkc/dsh-cli/workspaces'
29
29
 
30
- - id: dsh-tui-command-trees
30
+ - id: dsh-cli-command-trees
31
31
  name: '@askdkc/dsh-cli/command-trees'
32
32
 
33
33
  # Optional plugins declare editable settings sections here (issue #165);
34
34
  # storage, validation and writes remain owned by the dsh settings service.
35
- - id: dsh-tui-settings-sections
35
+ - id: dsh-cli-settings-sections
36
36
  name: '@askdkc/dsh-cli/settings-sections'
37
37
 
38
- - id: dsh-tui-scenes
38
+ - id: dsh-cli-scenes
39
39
  name: '@askdkc/dsh-cli/scenes'
40
40
 
41
41
  # Plugin-interop anchor (v0.15): unified grant store, runtime generation
42
42
  # id, Host Descriptor; later contract surfaces mount off this row's apply.
43
- - id: dsh-tui-plugin-host
43
+ - id: dsh-cli-plugin-host
44
44
  name: '@askdkc/dsh-cli/plugin-host'
45
45
 
46
46
  # Plugin-facing UI seams: managed dialogs, status-line contributions,
47
47
  # keyboard shortcuts, custom session-entry renderers, and runtime themes
48
48
  # (decision events are fired by the channel and need no row).
49
- - id: dsh-tui-extensions
49
+ - id: dsh-cli-extensions
50
50
  name: '@askdkc/dsh-cli/extensions'
51
51
 
52
- - id: dsh-tui
52
+ - id: dsh-cli
53
53
  name: '@askdkc/dsh-cli'
54
54
  # Entry-level only: orders/rebinds optional extension services on reload;
55
- # dsh-tui does not hard-inject them at code level, so stale profiles degrade
55
+ # dsh-cli does not hard-inject them at code level, so stale profiles degrade
56
56
  # to static themes and inert extension surfaces instead of deadlocking boot.
57
57
  inject: [agents, tuiWorkspaces, tuiScenes, tuiDialogs, tuiStatus, tuiShortcuts, tuiRenderers, tuiThemes]
58
58
  config:
@@ -89,8 +89,8 @@
89
89
  # approval: never
90
90
  # feeds the chosen session id through this env var (see
91
91
  # src/sessionHistory.ts for the launcher contract).
92
- sessionId: !!js process.env.DSH_TUI_RESUME_SESSION ?? undefined
93
- workspace: !!js process.env.DSH_TUI_WORKSPACE_TARGET ?? undefined
92
+ sessionId: !!js process.env.DSH_CLI_RESUME_SESSION ?? undefined
93
+ workspace: !!js process.env.DSH_CLI_WORKSPACE_TARGET ?? undefined
94
94
 
95
95
  # The DeepSeek adapter. Shipped default: full thinking at max effort.
96
96
  # rc.6 schema key is `apiKeyEnv` (a credential-ref env var NAME, default
@@ -172,7 +172,7 @@
172
172
  - id: agent-spine
173
173
  name: '@deepseek-ai/dsh-agent-spine-demo'
174
174
  config:
175
- persona: !!js process.env.DSH_TUI_PERSONA ?? "You are a coding agent. Respond in the language of the user's request; use English when it is unclear. Do not infer the response language from instructions, quoted text, files, tool output, or the interface language."
175
+ persona: !!js process.env.DSH_CLI_PERSONA ?? "You are a coding agent. Respond in the language of the user's request; use English when it is unclear. Do not infer the response language from instructions, quoted text, files, tool output, or the interface language."
176
176
  # Workspace context (AGENTS.md injection) at the standard 64KB cap;
177
177
  # task tools stay at their DSH defaults (on).
178
178
  workspaceContext:
@@ -227,7 +227,7 @@
227
227
  - id: sessions
228
228
  name: '@deepseek-ai/dsh-session-persistence-jsonl'
229
229
  config:
230
- root: !!js process.env.DSH_TUI_SESSION_ROOT ?? (process.env.USERPROFILE ?? process.env.HOME) + '/.dsh-tui/sessions'
230
+ root: !!js process.env.DSH_CLI_SESSION_ROOT ?? (process.env.USERPROFILE ?? process.env.HOME) + '/.dsh-cli/sessions'
231
231
 
232
232
  # Read-only session lineage — the subagent service's /agents listing reads it.
233
233
  - id: session-query
@@ -247,5 +247,5 @@
247
247
  # would never make manual /compact useful. Default 20% (200k tokens)
248
248
  # with a 5% retained tail; both are overridable for tests and must keep
249
249
  # retainRatio < thresholdRatio (BasicCompactConfig validates this).
250
- thresholdRatio: !!js parseFloat(process.env.DSH_TUI_COMPACT_RATIO ?? '0.2')
251
- retainRatio: !!js parseFloat(process.env.DSH_TUI_COMPACT_RETAIN ?? '0.05')
250
+ thresholdRatio: !!js parseFloat(process.env.DSH_CLI_COMPACT_RATIO ?? '0.2')
251
+ retainRatio: !!js parseFloat(process.env.DSH_CLI_COMPACT_RETAIN ?? '0.05')
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Persisted working-activity indicator preference, mirroring the pi
3
3
  * working-activity extension's `~/.pi/agent/working-activity.json`
4
- * (`frames` key). dsh-tui keeps its own copy at
5
- * `~/.dsh-tui/working-activity.json` so the `/activity` choice survives
4
+ * (`frames` key). dsh-cli keeps its own copy at
5
+ * `~/.dsh-cli/working-activity.json` so the `/activity` choice survives
6
6
  * restarts. The file is best-effort: a missing or corrupt file (or an
7
7
  * unknown preset left behind by an older version) just falls back to the
8
8
  * default preset.
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Persisted working-activity indicator preference, mirroring the pi
3
3
  * working-activity extension's `~/.pi/agent/working-activity.json`
4
- * (`frames` key). dsh-tui keeps its own copy at
5
- * `~/.dsh-tui/working-activity.json` so the `/activity` choice survives
4
+ * (`frames` key). dsh-cli keeps its own copy at
5
+ * `~/.dsh-cli/working-activity.json` so the `/activity` choice survives
6
6
  * restarts. The file is best-effort: a missing or corrupt file (or an
7
7
  * unknown preset left behind by an older version) just falls back to the
8
8
  * default preset.
@@ -14,7 +14,7 @@ import { CHANNEL_SPLIT_TOKEN } from './internal-token.js';
14
14
  /** Build the host-internal action surface over one live Channel. */
15
15
  export function createChannelActions(channel, token) {
16
16
  if (token !== CHANNEL_SPLIT_TOKEN) {
17
- throw new Error('dsh-tui: Channel split actions require the internal host token');
17
+ throw new Error('dsh-cli: Channel split actions require the internal host token');
18
18
  }
19
19
  return Object.freeze({
20
20
  submit: text => channel.submit(text),
@@ -38,7 +38,7 @@ export function createChannelConsumer(provider, options = {}) {
38
38
  }
39
39
  const hasNewError = continuityErrors.length > errorCountBefore;
40
40
  if (hasNewError && failClosed) {
41
- throw new Error(`dsh-tui: Channel continuity violation: ${continuityErrors[continuityErrors.length - 1]}`);
41
+ throw new Error(`dsh-cli: Channel continuity violation: ${continuityErrors[continuityErrors.length - 1]}`);
42
42
  }
43
43
  // When not fail-closed, keep advancing `last` to the snapshot that was
44
44
  // actually observed so later continuity messages describe the real
@@ -8,4 +8,4 @@
8
8
  * or `src/adapter/index`; only the upstream driver and the split modules
9
9
  * themselves import it.
10
10
  */
11
- export const CHANNEL_SPLIT_TOKEN = Symbol('dsh-tui.channel-split-token');
11
+ export const CHANNEL_SPLIT_TOKEN = Symbol('dsh-cli.channel-split-token');
@@ -33,7 +33,7 @@ function projectSettingsSection(section) {
33
33
  /** Build the host-internal plugin-facing surface over one live Channel. */
34
34
  export function createChannelPlugins(channel, token) {
35
35
  if (token !== CHANNEL_SPLIT_TOKEN) {
36
- throw new Error('dsh-tui: Channel split plugins require the internal host token');
36
+ throw new Error('dsh-cli: Channel split plugins require the internal host token');
37
37
  }
38
38
  return Object.freeze({
39
39
  async runExternalCommand(name, rawInput) {
@@ -59,7 +59,7 @@ export const KNOWN_DSH_EVENT_TYPES = new Set([
59
59
  // here so the conformance sweep over that file stays total; it folds to no
60
60
  // row like every other non-transcript type.
61
61
  'session/not-found',
62
- // Known dsh-tui / ecosystem plugin event types (exact, not prefix-based)
62
+ // Known dsh-cli / ecosystem plugin event types (exact, not prefix-based)
63
63
  'session/created',
64
64
  'session/disposed',
65
65
  'session/flush',
@@ -112,8 +112,8 @@ export const KNOWN_DSH_EVENT_TYPES = new Set([
112
112
  'tool/ptc-dispatch',
113
113
  'tool/ptc-dispatch-start',
114
114
  'web/deepseek-search-llm-request',
115
- 'dsh-tui/btw',
116
- 'dsh-tui/recap',
115
+ 'dsh-cli/btw',
116
+ 'dsh-cli/recap',
117
117
  'dsh-working-activity/config',
118
118
  'dsh-working-activity/status',
119
119
  'activity/status',
@@ -13,7 +13,7 @@ import { CHANNEL_SPLIT_TOKEN } from './internal-token.js';
13
13
  /** Build the host-internal transcript surface over one live Channel. */
14
14
  export function createChannelTranscript(channel, token) {
15
15
  if (token !== CHANNEL_SPLIT_TOKEN) {
16
- throw new Error('dsh-tui: Channel split transcript requires the internal host token');
16
+ throw new Error('dsh-cli: Channel split transcript requires the internal host token');
17
17
  }
18
18
  return Object.freeze({
19
19
  rows: () => projectChannelRows(channel.rows),
@@ -18,7 +18,7 @@ export function createChannelUiLease(isCurrent) {
18
18
  return {
19
19
  assertActive() {
20
20
  if (!active || !isCurrent())
21
- throw new Error('dsh-tui: Channel UI lifetime has ended');
21
+ throw new Error('dsh-cli: Channel UI lifetime has ended');
22
22
  },
23
23
  own(dispose) {
24
24
  let released = false;
@@ -48,7 +48,7 @@ export function createChannelUiLease(isCurrent) {
48
48
  failures.push(error);
49
49
  }
50
50
  }
51
- throwCleanupFailures(failures, 'dsh-tui: Channel UI cleanup failed');
51
+ throwCleanupFailures(failures, 'dsh-cli: Channel UI cleanup failed');
52
52
  },
53
53
  };
54
54
  }
@@ -71,7 +71,7 @@ export function createChannelUi(channel, mode, lease) {
71
71
  for (const key of Object.keys(effects)) {
72
72
  const fn = target[key];
73
73
  if (typeof fn !== 'function')
74
- throw new Error(`dsh-tui: missing Channel handle method ${key}`);
74
+ throw new Error(`dsh-cli: missing Channel handle method ${key}`);
75
75
  result[key] = (...args) => {
76
76
  check(effects[key]);
77
77
  return settle(Reflect.apply(fn, target, args));
@@ -4,7 +4,7 @@
4
4
  * P2 callers normally obtain this from `KernelRuntime.facade()`, which backs
5
5
  * the descriptor port with the unified kernel lifecycle evidence.
6
6
  * `facadeFromLegacy` remains only as a long-term compatibility fallback for
7
- * bare/test compositions (outside P6 removal scope; owner: dsh-tui adapter).
7
+ * bare/test compositions (outside P6 removal scope; owner: dsh-cli adapter).
8
8
  * Hard rules:
9
9
  * - It performs no business logic, no protocol translation, no capability
10
10
  * detection, no registry, and stores no mutable host state.