@deepseek-harness-tui/dsh-tui 0.14.1 → 0.16.0

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 (886) hide show
  1. package/README.md +163 -17
  2. package/bin/dsh-tui.js +200 -34
  3. package/cordis.patch.yml +16 -52
  4. package/cordis.yml +6 -2
  5. package/guide/dsh-tui-guide/claude-backend.en.md +44 -7
  6. package/guide/dsh-tui-guide/claude-backend.md +28 -6
  7. package/guide/dsh-tui-guide/codex-backend.en.md +47 -10
  8. package/guide/dsh-tui-guide/codex-backend.md +26 -4
  9. package/guide/dsh-tui-guide/configuration.en.md +168 -18
  10. package/guide/dsh-tui-guide/configuration.md +144 -16
  11. package/guide/dsh-tui-guide/getting-started.en.md +15 -0
  12. package/guide/dsh-tui-guide/getting-started.md +15 -0
  13. package/guide/dsh-tui-guide/interaction.en.md +64 -24
  14. package/guide/dsh-tui-guide/interaction.md +49 -19
  15. package/guide/dsh-tui-guide/plugins.en.md +97 -3
  16. package/guide/dsh-tui-guide/plugins.md +55 -2
  17. package/guide/dsh-tui-guide/themes.en.md +23 -14
  18. package/guide/dsh-tui-guide/themes.md +19 -12
  19. package/guide/dsh-tui-guide/user-guide.en.md +53 -21
  20. package/guide/dsh-tui-guide/user-guide.md +43 -22
  21. package/lib/settings.json +103 -9
  22. package/lib/types/adapter/channel/projection.d.ts.map +1 -1
  23. package/lib/types/adapter/channel/projection.js +1 -0
  24. package/lib/types/adapter/channel/ui-policy.d.ts +1 -1
  25. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  26. package/lib/types/adapter/channel/ui-policy.js +4 -0
  27. package/lib/types/adapter/channel/ui.d.ts +2 -0
  28. package/lib/types/adapter/channel/ui.d.ts.map +1 -1
  29. package/lib/types/adapter/channel/ui.js +6 -2
  30. package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
  31. package/lib/types/adapter/kernel/runtime.js +2 -0
  32. package/lib/types/adapter/ports/channel-catalog.d.ts +5 -1
  33. package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
  34. package/lib/types/adapter/ports/channel-settings.d.ts +14 -3
  35. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  36. package/lib/types/adapter/ports/channel-ui.d.ts +56 -12
  37. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  38. package/lib/types/adapter/ports/channel-view.d.ts +68 -0
  39. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  40. package/lib/types/adapter/ports/channel.d.ts +2 -0
  41. package/lib/types/adapter/ports/channel.d.ts.map +1 -1
  42. package/lib/types/adapter/spec/backend-capabilities.d.ts +22 -0
  43. package/lib/types/adapter/spec/backend-capabilities.d.ts.map +1 -0
  44. package/lib/types/adapter/spec/backend-capabilities.js +49 -0
  45. package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
  46. package/lib/types/adapter/spec/protocol-constants.js +10 -3
  47. package/lib/types/adapter/spec/tui-contributions.d.ts +3 -0
  48. package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
  49. package/lib/types/adapter/spec/tui-contributions.js +7 -0
  50. package/lib/types/adapter/standard/registry.d.ts +6 -0
  51. package/lib/types/adapter/standard/registry.d.ts.map +1 -1
  52. package/lib/types/adapter/standard/registry.js +65 -15
  53. package/lib/types/adapter/standard/tui-extension.d.ts.map +1 -1
  54. package/lib/types/adapter/standard/tui-extension.js +7 -1
  55. package/lib/types/adapter/standard/types.d.ts +10 -1
  56. package/lib/types/adapter/standard/types.d.ts.map +1 -1
  57. package/lib/types/adapter/upstream/host-descriptor-driver.d.ts.map +1 -1
  58. package/lib/types/adapter/upstream/host-descriptor-driver.js +52 -0
  59. package/lib/types/agent/backend-manifest.d.ts +152 -0
  60. package/lib/types/agent/backend-manifest.d.ts.map +1 -0
  61. package/lib/types/agent/backend-manifest.js +14 -0
  62. package/lib/types/agent/backend.d.ts +71 -5
  63. package/lib/types/agent/backend.d.ts.map +1 -1
  64. package/lib/types/agent/capabilities.d.ts +6 -0
  65. package/lib/types/agent/capabilities.d.ts.map +1 -1
  66. package/lib/types/agent/events.d.ts +3 -2
  67. package/lib/types/agent/events.d.ts.map +1 -1
  68. package/lib/types/agent/index.d.ts +2 -0
  69. package/lib/types/agent/index.d.ts.map +1 -1
  70. package/lib/types/agent/refs.d.ts +11 -1
  71. package/lib/types/agent/refs.d.ts.map +1 -1
  72. package/lib/types/agent/starting-session.d.ts +4 -0
  73. package/lib/types/agent/starting-session.d.ts.map +1 -0
  74. package/lib/types/agent/starting-session.js +19 -0
  75. package/lib/types/backends/claude/activity.d.ts +1 -1
  76. package/lib/types/backends/claude/activity.d.ts.map +1 -1
  77. package/lib/types/backends/claude/activity.js +5 -5
  78. package/lib/types/backends/claude/auth.d.ts.map +1 -1
  79. package/lib/types/backends/claude/auth.js +10 -3
  80. package/lib/types/backends/claude/backend.d.ts.map +1 -1
  81. package/lib/types/backends/claude/backend.js +103 -29
  82. package/lib/types/backends/claude/catalog.d.ts +2 -1
  83. package/lib/types/backends/claude/catalog.d.ts.map +1 -1
  84. package/lib/types/backends/claude/catalog.js +15 -5
  85. package/lib/types/backends/claude/channels.d.ts +5 -3
  86. package/lib/types/backends/claude/channels.d.ts.map +1 -1
  87. package/lib/types/backends/claude/channels.js +5 -4
  88. package/lib/types/backends/claude/contract.d.ts +4 -0
  89. package/lib/types/backends/claude/contract.d.ts.map +1 -1
  90. package/lib/types/backends/claude/contract.js +4 -0
  91. package/lib/types/backends/claude/controls.d.ts +4 -0
  92. package/lib/types/backends/claude/controls.d.ts.map +1 -1
  93. package/lib/types/backends/claude/controls.js +34 -42
  94. package/lib/types/backends/claude/dialogs.d.ts +8 -2
  95. package/lib/types/backends/claude/dialogs.d.ts.map +1 -1
  96. package/lib/types/backends/claude/dialogs.js +24 -16
  97. package/lib/types/backends/claude/images.d.ts +1 -1
  98. package/lib/types/backends/claude/images.d.ts.map +1 -1
  99. package/lib/types/backends/claude/images.js +7 -7
  100. package/lib/types/backends/claude/manifest.d.ts +21 -0
  101. package/lib/types/backends/claude/manifest.d.ts.map +1 -0
  102. package/lib/types/backends/claude/manifest.js +29 -0
  103. package/lib/types/backends/claude/older-history.js +2 -2
  104. package/lib/types/backends/claude/permissions.js +11 -11
  105. package/lib/types/backends/claude/prefs.d.ts +4 -2
  106. package/lib/types/backends/claude/prefs.d.ts.map +1 -1
  107. package/lib/types/backends/claude/prefs.js +4 -3
  108. package/lib/types/backends/claude/process.d.ts +16 -4
  109. package/lib/types/backends/claude/process.d.ts.map +1 -1
  110. package/lib/types/backends/claude/process.js +100 -37
  111. package/lib/types/backends/claude/send-message.d.ts +1 -1
  112. package/lib/types/backends/claude/send-message.d.ts.map +1 -1
  113. package/lib/types/backends/claude/session/auth.js +22 -22
  114. package/lib/types/backends/claude/session/channels.d.ts +4 -0
  115. package/lib/types/backends/claude/session/channels.d.ts.map +1 -1
  116. package/lib/types/backends/claude/session/channels.js +5 -3
  117. package/lib/types/backends/claude/session/lifecycle.d.ts.map +1 -1
  118. package/lib/types/backends/claude/session/lifecycle.js +31 -23
  119. package/lib/types/backends/claude/session/store.js +8 -8
  120. package/lib/types/backends/claude/session/subagents.js +2 -2
  121. package/lib/types/backends/claude/session/types.d.ts +7 -0
  122. package/lib/types/backends/claude/session/types.d.ts.map +1 -1
  123. package/lib/types/backends/claude/side-query.js +3 -3
  124. package/lib/types/backends/claude/task-output.js +5 -5
  125. package/lib/types/backends/claude/text.d.ts +778 -0
  126. package/lib/types/backends/claude/text.d.ts.map +1 -0
  127. package/lib/types/backends/claude/text.js +298 -0
  128. package/lib/types/backends/claude/transcript-file.d.ts +1 -1
  129. package/lib/types/backends/claude/transcript-file.d.ts.map +1 -1
  130. package/lib/types/backends/claude/transcript-file.js +4 -4
  131. package/lib/types/backends/claude/translate/attempts.js +2 -2
  132. package/lib/types/backends/claude/translate/core.js +3 -3
  133. package/lib/types/backends/claude/translate/messages.js +4 -4
  134. package/lib/types/backends/claude/translate/system.js +14 -14
  135. package/lib/types/backends/claude/translate/tasks.js +2 -2
  136. package/lib/types/backends/claude/translate/types.d.ts +1 -1
  137. package/lib/types/backends/claude/translate/types.d.ts.map +1 -1
  138. package/lib/types/backends/codex/auth/external-tokens.js +16 -16
  139. package/lib/types/backends/codex/auth/status.js +14 -14
  140. package/lib/types/backends/codex/backend.d.ts +4 -19
  141. package/lib/types/backends/codex/backend.d.ts.map +1 -1
  142. package/lib/types/backends/codex/backend.js +118 -25
  143. package/lib/types/backends/codex/catalog.d.ts +2 -1
  144. package/lib/types/backends/codex/catalog.d.ts.map +1 -1
  145. package/lib/types/backends/codex/catalog.js +63 -18
  146. package/lib/types/backends/codex/channels.d.ts +6 -3
  147. package/lib/types/backends/codex/channels.d.ts.map +1 -1
  148. package/lib/types/backends/codex/channels.js +15 -13
  149. package/lib/types/backends/codex/contract.d.ts +3 -0
  150. package/lib/types/backends/codex/contract.d.ts.map +1 -1
  151. package/lib/types/backends/codex/contract.js +3 -0
  152. package/lib/types/backends/codex/detect.d.ts.map +1 -1
  153. package/lib/types/backends/codex/detect.js +9 -6
  154. package/lib/types/backends/codex/manifest.d.ts +30 -0
  155. package/lib/types/backends/codex/manifest.d.ts.map +1 -0
  156. package/lib/types/backends/codex/manifest.js +23 -0
  157. package/lib/types/backends/codex/prefs.d.ts +4 -2
  158. package/lib/types/backends/codex/prefs.d.ts.map +1 -1
  159. package/lib/types/backends/codex/prefs.js +4 -3
  160. package/lib/types/backends/codex/rpc/hub.js +2 -2
  161. package/lib/types/backends/codex/session/activity.d.ts +1 -1
  162. package/lib/types/backends/codex/session/activity.d.ts.map +1 -1
  163. package/lib/types/backends/codex/session/activity.js +13 -13
  164. package/lib/types/backends/codex/session/approvals.js +30 -30
  165. package/lib/types/backends/codex/session/async-questions.d.ts +17 -0
  166. package/lib/types/backends/codex/session/async-questions.d.ts.map +1 -0
  167. package/lib/types/backends/codex/session/async-questions.js +89 -0
  168. package/lib/types/backends/codex/session/commands.d.ts +8 -2
  169. package/lib/types/backends/codex/session/commands.d.ts.map +1 -1
  170. package/lib/types/backends/codex/session/commands.js +71 -23
  171. package/lib/types/backends/codex/session/controls.d.ts +1 -1
  172. package/lib/types/backends/codex/session/controls.d.ts.map +1 -1
  173. package/lib/types/backends/codex/session/controls.js +21 -16
  174. package/lib/types/backends/codex/session/goals.d.ts.map +1 -1
  175. package/lib/types/backends/codex/session/goals.js +3 -3
  176. package/lib/types/backends/codex/session/history.js +2 -2
  177. package/lib/types/backends/codex/session/images.js +8 -8
  178. package/lib/types/backends/codex/session/input.d.ts +6 -2
  179. package/lib/types/backends/codex/session/input.d.ts.map +1 -1
  180. package/lib/types/backends/codex/session/input.js +55 -13
  181. package/lib/types/backends/codex/session/plan-review.js +6 -6
  182. package/lib/types/backends/codex/session/session.d.ts.map +1 -1
  183. package/lib/types/backends/codex/session/session.js +100 -42
  184. package/lib/types/backends/codex/session/side-query.d.ts.map +1 -1
  185. package/lib/types/backends/codex/session/side-query.js +27 -9
  186. package/lib/types/backends/codex/session/state.d.ts +6 -1
  187. package/lib/types/backends/codex/session/state.d.ts.map +1 -1
  188. package/lib/types/backends/codex/session/subagents.js +5 -5
  189. package/lib/types/backends/codex/session/tasks.js +4 -4
  190. package/lib/types/backends/codex/text.d.ts +933 -0
  191. package/lib/types/backends/codex/text.d.ts.map +1 -0
  192. package/lib/types/backends/codex/text.js +313 -0
  193. package/lib/types/backends/codex/translate/items.d.ts.map +1 -1
  194. package/lib/types/backends/codex/translate/items.js +7 -5
  195. package/lib/types/backends/codex/translate/live.d.ts.map +1 -1
  196. package/lib/types/backends/codex/translate/live.js +11 -8
  197. package/lib/types/backends/codex/translate/notices.js +10 -10
  198. package/lib/types/backends/codex/translate/question-reply.d.ts +11 -0
  199. package/lib/types/backends/codex/translate/question-reply.d.ts.map +1 -0
  200. package/lib/types/backends/codex/translate/question-reply.js +53 -0
  201. package/lib/types/backends/shared/channel-slug.d.ts +4 -0
  202. package/lib/types/backends/shared/channel-slug.d.ts.map +1 -0
  203. package/lib/types/backends/shared/channel-slug.js +25 -0
  204. package/lib/types/backends/shared/channel-tokens.d.ts.map +1 -1
  205. package/lib/types/backends/shared/channel-tokens.js +30 -23
  206. package/lib/types/{channel → backends/shared}/elicitation.d.ts +78 -21
  207. package/lib/types/backends/shared/elicitation.d.ts.map +1 -0
  208. package/lib/types/{channel → backends/shared}/elicitation.js +64 -66
  209. package/lib/types/backends/shared/image-size.d.ts +33 -0
  210. package/lib/types/backends/shared/image-size.d.ts.map +1 -0
  211. package/lib/types/backends/shared/image-size.js +134 -0
  212. package/lib/types/{utils → backends/shared}/jsonl.d.ts +5 -1
  213. package/lib/types/backends/shared/jsonl.d.ts.map +1 -0
  214. package/lib/types/{utils → backends/shared}/jsonl.js +5 -1
  215. package/lib/types/backends/shared/localized-text.d.ts +30 -0
  216. package/lib/types/backends/shared/localized-text.d.ts.map +1 -0
  217. package/lib/types/backends/shared/localized-text.js +24 -0
  218. package/lib/types/backends/shared/platform-text.d.ts +88 -0
  219. package/lib/types/backends/shared/platform-text.d.ts.map +1 -0
  220. package/lib/types/backends/shared/platform-text.js +33 -0
  221. package/lib/types/branding.d.ts +13 -0
  222. package/lib/types/branding.d.ts.map +1 -1
  223. package/lib/types/branding.js +18 -0
  224. package/lib/types/channel/channel-slug.d.ts +3 -1
  225. package/lib/types/channel/channel-slug.d.ts.map +1 -1
  226. package/lib/types/channel/channel-slug.js +3 -1
  227. package/lib/types/channel/projection.d.ts.map +1 -1
  228. package/lib/types/channel/projection.js +10 -0
  229. package/lib/types/channel/sanitize.d.ts +7 -0
  230. package/lib/types/channel/sanitize.d.ts.map +1 -1
  231. package/lib/types/channel/sanitize.js +9 -0
  232. package/lib/types/channel/usage.d.ts.map +1 -1
  233. package/lib/types/channel/usage.js +5 -0
  234. package/lib/types/commands.d.ts +15 -0
  235. package/lib/types/commands.d.ts.map +1 -1
  236. package/lib/types/commands.js +58 -10
  237. package/lib/types/components/AgentMessageComposer.d.ts.map +1 -1
  238. package/lib/types/components/AgentMessageComposer.js +3 -2
  239. package/lib/types/components/BtwPanel.d.ts.map +1 -1
  240. package/lib/types/components/BtwPanel.js +4 -2
  241. package/lib/types/components/Chat/JobCard.js +3 -3
  242. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  243. package/lib/types/components/CommandSuggestions.js +24 -7
  244. package/lib/types/components/ContextBarView.d.ts +5 -1
  245. package/lib/types/components/ContextBarView.d.ts.map +1 -1
  246. package/lib/types/components/ContextBarView.js +6 -3
  247. package/lib/types/components/ExtensionDialog.d.ts.map +1 -1
  248. package/lib/types/components/ExtensionDialog.js +2 -3
  249. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  250. package/lib/types/components/GoalTodoPanel.js +14 -3
  251. package/lib/types/components/InlineMathParagraph.js +1 -1
  252. package/lib/types/components/KernelPicker.d.ts.map +1 -1
  253. package/lib/types/components/KernelPicker.js +1 -1
  254. package/lib/types/components/LogoV2.d.ts +4 -1
  255. package/lib/types/components/LogoV2.d.ts.map +1 -1
  256. package/lib/types/components/LogoV2.js +14 -9
  257. package/lib/types/components/MarkdownTable.d.ts.map +1 -1
  258. package/lib/types/components/MarkdownTable.js +4 -3
  259. package/lib/types/components/MessageList.d.ts.map +1 -1
  260. package/lib/types/components/MessageList.js +109 -15
  261. package/lib/types/components/ModelPicker.d.ts +24 -31
  262. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  263. package/lib/types/components/ModelPicker.js +115 -40
  264. package/lib/types/components/PermissionsPicker.d.ts +10 -1
  265. package/lib/types/components/PermissionsPicker.d.ts.map +1 -1
  266. package/lib/types/components/PermissionsPicker.js +24 -16
  267. package/lib/types/components/PluginInstallPane.d.ts +21 -0
  268. package/lib/types/components/PluginInstallPane.d.ts.map +1 -0
  269. package/lib/types/components/PluginInstallPane.js +84 -0
  270. package/lib/types/components/PluginManagePane.d.ts +21 -0
  271. package/lib/types/components/PluginManagePane.d.ts.map +1 -0
  272. package/lib/types/components/PluginManagePane.js +69 -0
  273. package/lib/types/components/PromptEditor.d.ts +3 -3
  274. package/lib/types/components/PromptInput.d.ts +21 -3
  275. package/lib/types/components/PromptInput.d.ts.map +1 -1
  276. package/lib/types/components/PromptInput.js +65 -121
  277. package/lib/types/components/SdkInstallWizard.d.ts +3 -1
  278. package/lib/types/components/SdkInstallWizard.d.ts.map +1 -1
  279. package/lib/types/components/SdkInstallWizard.js +8 -1
  280. package/lib/types/components/SearchBox.d.ts +13 -15
  281. package/lib/types/components/SearchBox.d.ts.map +1 -1
  282. package/lib/types/components/SearchBox.js +58 -27
  283. package/lib/types/components/SubagentCard.d.ts +13 -1
  284. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  285. package/lib/types/components/SubagentCard.js +27 -12
  286. package/lib/types/components/SubagentDashboard.d.ts +8 -1
  287. package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
  288. package/lib/types/components/SubagentDashboard.js +58 -16
  289. package/lib/types/components/ThemePicker.d.ts +1 -1
  290. package/lib/types/components/ThemePicker.d.ts.map +1 -1
  291. package/lib/types/components/ThemePicker.js +14 -11
  292. package/lib/types/components/Tooltip.js +1 -1
  293. package/lib/types/components/WorkingSpinner.js +1 -1
  294. package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -1
  295. package/lib/types/components/WorkspaceFlowPicker.js +4 -3
  296. package/lib/types/components/composerImageTokens.d.ts +24 -0
  297. package/lib/types/components/composerImageTokens.d.ts.map +1 -0
  298. package/lib/types/components/composerImageTokens.js +37 -0
  299. package/lib/types/components/design-system/InputCaret.d.ts +7 -0
  300. package/lib/types/components/design-system/InputCaret.d.ts.map +1 -0
  301. package/lib/types/components/design-system/InputCaret.js +9 -0
  302. package/lib/types/components/design-system/ListItem.d.ts +13 -2
  303. package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
  304. package/lib/types/components/design-system/ListItem.js +11 -5
  305. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  306. package/lib/types/components/design-system/ThemeProvider.js +6 -8
  307. package/lib/types/components/kernelCatalog.d.ts +55 -11
  308. package/lib/types/components/kernelCatalog.d.ts.map +1 -1
  309. package/lib/types/components/kernelCatalog.js +42 -23
  310. package/lib/types/components/launchpadActions.d.ts +4 -0
  311. package/lib/types/components/launchpadActions.d.ts.map +1 -1
  312. package/lib/types/components/launchpadActions.js +5 -4
  313. package/lib/types/components/launchpadLayout.d.ts +14 -1
  314. package/lib/types/components/launchpadLayout.d.ts.map +1 -1
  315. package/lib/types/components/launchpadLayout.js +38 -19
  316. package/lib/types/components/messages/TeamMessageBubble.d.ts +20 -0
  317. package/lib/types/components/messages/TeamMessageBubble.d.ts.map +1 -0
  318. package/lib/types/components/messages/TeamMessageBubble.js +15 -0
  319. package/lib/types/components/messages/UserPromptMessage.d.ts +4 -3
  320. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
  321. package/lib/types/components/messages/UserPromptMessage.js +4 -3
  322. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  323. package/lib/types/components/questions/AskUserQuestionPanel.js +8 -3
  324. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  325. package/lib/types/components/questions/PlanReviewPanel.js +4 -3
  326. package/lib/types/components/questions/ProviderModelEditor.d.ts.map +1 -1
  327. package/lib/types/components/questions/ProviderModelEditor.js +3 -13
  328. package/lib/types/components/sessions/ForeignSessionRow.d.ts +3 -1
  329. package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -1
  330. package/lib/types/components/sessions/ForeignSessionRow.js +5 -2
  331. package/lib/types/components/sessions/SessionListRow.d.ts +3 -1
  332. package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
  333. package/lib/types/components/sessions/SessionListRow.js +5 -2
  334. package/lib/types/components/sidePanel/PanelBar.d.ts +1 -0
  335. package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -1
  336. package/lib/types/components/sidePanel/PanelBar.js +21 -17
  337. package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -1
  338. package/lib/types/components/sidePanel/PanelHost.js +5 -1
  339. package/lib/types/components/sidePanel/PanelStore.d.ts +8 -0
  340. package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -1
  341. package/lib/types/components/sidePanel/PanelStore.js +11 -0
  342. package/lib/types/components/sidePanel/SidePanelColumn.d.ts +1 -1
  343. package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
  344. package/lib/types/components/sidePanel/SidePanelColumn.js +15 -2
  345. package/lib/types/components/sidePanel/SidePanelLayout.d.ts +6 -4
  346. package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -1
  347. package/lib/types/components/sidePanel/SidePanelLayout.js +33 -7
  348. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +7 -0
  349. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -1
  350. package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +4 -0
  351. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +7 -2
  352. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -1
  353. package/lib/types/components/sidePanel/btw/BtwComposer.js +28 -8
  354. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts +2 -1
  355. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -1
  356. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +156 -21
  357. package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts +6 -2
  358. package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -1
  359. package/lib/types/components/sidePanel/btw/BtwThreadScene.js +64 -16
  360. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +15 -5
  361. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -1
  362. package/lib/types/components/sidePanel/btw/BtwThreadView.js +101 -10
  363. package/lib/types/components/sidePanel/btw/threads.d.ts +18 -0
  364. package/lib/types/components/sidePanel/btw/threads.d.ts.map +1 -1
  365. package/lib/types/components/sidePanel/btw/threads.js +51 -0
  366. package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -1
  367. package/lib/types/components/sidePanel/builtinPanels.js +5 -1
  368. package/lib/types/components/sidePanel/companion/CompanionPanel.js +2 -2
  369. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +5 -1
  370. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -1
  371. package/lib/types/components/sidePanel/companion/SplashMascot.js +19 -4
  372. package/lib/types/components/sidePanel/companion/skins.d.ts +8 -0
  373. package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -1
  374. package/lib/types/components/sidePanel/companion/skins.js +57 -12
  375. package/lib/types/components/sidePanel/types.d.ts +7 -1
  376. package/lib/types/components/sidePanel/types.d.ts.map +1 -1
  377. package/lib/types/components/sidePanel/useSidePanel.d.ts +2 -0
  378. package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -1
  379. package/lib/types/components/sidePanel/useSidePanel.js +11 -1
  380. package/lib/types/components/splashArtRows.d.ts +29 -0
  381. package/lib/types/components/splashArtRows.d.ts.map +1 -0
  382. package/lib/types/components/splashArtRows.js +31 -0
  383. package/lib/types/components/splashFonts.d.ts +24 -1
  384. package/lib/types/components/splashFonts.d.ts.map +1 -1
  385. package/lib/types/components/splashFonts.js +40 -5
  386. package/lib/types/components/teamRoster.d.ts +70 -0
  387. package/lib/types/components/teamRoster.d.ts.map +1 -0
  388. package/lib/types/components/teamRoster.js +78 -0
  389. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
  390. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
  391. package/lib/types/components/workspaces/HomeWorkspaceRow.js +5 -2
  392. package/lib/types/dsh-adapter/admission-loader.d.ts +102 -0
  393. package/lib/types/dsh-adapter/admission-loader.d.ts.map +1 -0
  394. package/lib/types/dsh-adapter/admission-loader.js +301 -0
  395. package/lib/types/dsh-adapter/agent-view.d.ts.map +1 -1
  396. package/lib/types/dsh-adapter/agent-view.js +3 -1
  397. package/lib/types/dsh-adapter/approvals.d.ts +7 -0
  398. package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
  399. package/lib/types/dsh-adapter/approvals.js +45 -1
  400. package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -1
  401. package/lib/types/dsh-adapter/backend/translate.js +71 -8
  402. package/lib/types/dsh-adapter/backend-admission.d.ts +64 -0
  403. package/lib/types/dsh-adapter/backend-admission.d.ts.map +1 -0
  404. package/lib/types/dsh-adapter/backend-admission.js +34 -0
  405. package/lib/types/dsh-adapter/backend-assembly.d.ts +31 -0
  406. package/lib/types/dsh-adapter/backend-assembly.d.ts.map +1 -0
  407. package/lib/types/dsh-adapter/backend-assembly.js +225 -0
  408. package/lib/types/dsh-adapter/backend-contribution.d.ts +62 -0
  409. package/lib/types/dsh-adapter/backend-contribution.d.ts.map +1 -0
  410. package/lib/types/dsh-adapter/backend-contribution.js +78 -0
  411. package/lib/types/dsh-adapter/backend-registry.d.ts +136 -0
  412. package/lib/types/dsh-adapter/backend-registry.d.ts.map +1 -0
  413. package/lib/types/dsh-adapter/backend-registry.js +304 -0
  414. package/lib/types/dsh-adapter/backends.d.ts +67 -24
  415. package/lib/types/dsh-adapter/backends.d.ts.map +1 -1
  416. package/lib/types/dsh-adapter/backends.generated.d.ts +12 -0
  417. package/lib/types/dsh-adapter/backends.generated.d.ts.map +1 -0
  418. package/lib/types/dsh-adapter/backends.generated.js +6 -0
  419. package/lib/types/dsh-adapter/backends.js +91 -46
  420. package/lib/types/dsh-adapter/bundled-presets.d.ts.map +1 -1
  421. package/lib/types/dsh-adapter/bundled-presets.js +60 -3
  422. package/lib/types/dsh-adapter/channel/action-readiness.d.ts +2 -0
  423. package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
  424. package/lib/types/dsh-adapter/channel/action-readiness.js +9 -3
  425. package/lib/types/dsh-adapter/channel/agent-view-projection.js +2 -2
  426. package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
  427. package/lib/types/dsh-adapter/channel/background-action.js +8 -3
  428. package/lib/types/dsh-adapter/channel/binding-events.d.ts +17 -3
  429. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  430. package/lib/types/dsh-adapter/channel/binding-events.js +19 -46
  431. package/lib/types/dsh-adapter/channel/channel-host.d.ts +45 -0
  432. package/lib/types/dsh-adapter/channel/channel-host.d.ts.map +1 -0
  433. package/lib/types/dsh-adapter/channel/channel-host.js +1 -0
  434. package/lib/types/dsh-adapter/channel/command-completions.d.ts +5 -0
  435. package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
  436. package/lib/types/dsh-adapter/channel/command-completions.js +79 -6
  437. package/lib/types/dsh-adapter/channel/compaction.d.ts +7 -2
  438. package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
  439. package/lib/types/dsh-adapter/channel/compaction.js +100 -26
  440. package/lib/types/dsh-adapter/channel/composer-images.d.ts +4 -2
  441. package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
  442. package/lib/types/dsh-adapter/channel/composer-images.js +36 -5
  443. package/lib/types/dsh-adapter/channel/cordis-host.d.ts +14 -0
  444. package/lib/types/dsh-adapter/channel/cordis-host.d.ts.map +1 -0
  445. package/lib/types/dsh-adapter/channel/cordis-host.js +35 -0
  446. package/lib/types/dsh-adapter/channel/core/actions.d.ts +3 -3
  447. package/lib/types/dsh-adapter/channel/core/actions.d.ts.map +1 -1
  448. package/lib/types/dsh-adapter/channel/core/actions.js +15 -6
  449. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +10 -3
  450. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -1
  451. package/lib/types/dsh-adapter/channel/core/binding-feed.js +5 -1
  452. package/lib/types/dsh-adapter/channel/core/compose.d.ts +12 -28
  453. package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -1
  454. package/lib/types/dsh-adapter/channel/core/compose.js +330 -117
  455. package/lib/types/dsh-adapter/channel/core/files.d.ts +7 -2
  456. package/lib/types/dsh-adapter/channel/core/files.d.ts.map +1 -1
  457. package/lib/types/dsh-adapter/channel/core/files.js +1 -0
  458. package/lib/types/dsh-adapter/channel/core/host.d.ts +12 -6
  459. package/lib/types/dsh-adapter/channel/core/host.d.ts.map +1 -1
  460. package/lib/types/dsh-adapter/channel/core/host.js +69 -35
  461. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts +5 -3
  462. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts.map +1 -1
  463. package/lib/types/dsh-adapter/channel/core/local-actions.js +5 -2
  464. package/lib/types/dsh-adapter/channel/core/session-controls.js +2 -2
  465. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts +7 -4
  466. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts.map +1 -1
  467. package/lib/types/dsh-adapter/channel/core/session-switch.js +8 -4
  468. package/lib/types/dsh-adapter/channel/core/sessions.d.ts +1 -1
  469. package/lib/types/dsh-adapter/channel/core/sessions.d.ts.map +1 -1
  470. package/lib/types/dsh-adapter/channel/core/sessions.js +75 -16
  471. package/lib/types/dsh-adapter/channel/extensions.d.ts +4 -3
  472. package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -1
  473. package/lib/types/dsh-adapter/channel/extensions.js +109 -30
  474. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +2 -2
  475. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
  476. package/lib/types/dsh-adapter/channel/input-delivery.js +14 -5
  477. package/lib/types/dsh-adapter/channel/job-projection.d.ts +4 -0
  478. package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
  479. package/lib/types/dsh-adapter/channel/job-projection.js +205 -24
  480. package/lib/types/dsh-adapter/channel/mentions.d.ts +3 -3
  481. package/lib/types/dsh-adapter/channel/mentions.d.ts.map +1 -1
  482. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +7 -0
  483. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  484. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +235 -13
  485. package/lib/types/dsh-adapter/channel/model-actions.d.ts +5 -1
  486. package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
  487. package/lib/types/dsh-adapter/channel/model-actions.js +48 -29
  488. package/lib/types/dsh-adapter/channel/model-selection.d.ts +17 -0
  489. package/lib/types/dsh-adapter/channel/model-selection.d.ts.map +1 -0
  490. package/lib/types/dsh-adapter/channel/model-selection.js +109 -0
  491. package/lib/types/dsh-adapter/channel/model-switch.d.ts +12 -21
  492. package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
  493. package/lib/types/dsh-adapter/channel/model-switch.js +39 -102
  494. package/lib/types/dsh-adapter/channel/permissions.d.ts.map +1 -1
  495. package/lib/types/dsh-adapter/channel/permissions.js +4 -1
  496. package/lib/types/dsh-adapter/channel/projection-helpers.d.ts.map +1 -1
  497. package/lib/types/dsh-adapter/channel/projection-helpers.js +2 -0
  498. package/lib/types/dsh-adapter/channel/projection.js +1 -1
  499. package/lib/types/dsh-adapter/channel/reports.d.ts +1 -1
  500. package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
  501. package/lib/types/dsh-adapter/channel/reports.js +11 -3
  502. package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -1
  503. package/lib/types/dsh-adapter/channel/session-fork.js +33 -20
  504. package/lib/types/dsh-adapter/channel/session-listing.d.ts +20 -0
  505. package/lib/types/dsh-adapter/channel/session-listing.d.ts.map +1 -0
  506. package/lib/types/dsh-adapter/channel/session-listing.js +51 -0
  507. package/lib/types/dsh-adapter/channel/session-metadata.d.ts +3 -1
  508. package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
  509. package/lib/types/dsh-adapter/channel/session-metadata.js +60 -30
  510. package/lib/types/dsh-adapter/channel/session-reset.js +2 -2
  511. package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
  512. package/lib/types/dsh-adapter/channel/session-resume.js +22 -8
  513. package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
  514. package/lib/types/dsh-adapter/channel/session-rewind.js +38 -24
  515. package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
  516. package/lib/types/dsh-adapter/channel/session-tree-actions.js +38 -24
  517. package/lib/types/dsh-adapter/channel/settings-host.d.ts +5 -2
  518. package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
  519. package/lib/types/dsh-adapter/channel/settings-host.js +136 -5
  520. package/lib/types/dsh-adapter/channel/state.d.ts +43 -1
  521. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  522. package/lib/types/dsh-adapter/channel/state.js +14 -1
  523. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  524. package/lib/types/dsh-adapter/channel/subagent-projection.js +84 -12
  525. package/lib/types/dsh-adapter/channel/task-completion.d.ts +6 -0
  526. package/lib/types/dsh-adapter/channel/task-completion.d.ts.map +1 -0
  527. package/lib/types/dsh-adapter/channel/task-completion.js +114 -0
  528. package/lib/types/dsh-adapter/channel/transcript.d.ts +8 -1
  529. package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -1
  530. package/lib/types/dsh-adapter/channel/transcript.js +20 -3
  531. package/lib/types/dsh-adapter/channel/upstream-retry.d.ts +81 -0
  532. package/lib/types/dsh-adapter/channel/upstream-retry.d.ts.map +1 -0
  533. package/lib/types/dsh-adapter/channel/upstream-retry.js +138 -0
  534. package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
  535. package/lib/types/dsh-adapter/channel/workspace-actions.js +9 -8
  536. package/lib/types/dsh-adapter/channel-ui.d.ts +3 -1
  537. package/lib/types/dsh-adapter/channel-ui.d.ts.map +1 -1
  538. package/lib/types/dsh-adapter/channel-ui.js +4 -2
  539. package/lib/types/dsh-adapter/channel.d.ts +2 -2
  540. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  541. package/lib/types/dsh-adapter/channel.js +19 -5
  542. package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts +55 -0
  543. package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts.map +1 -0
  544. package/lib/types/dsh-adapter/compat/agent-team-0.2.0.js +96 -0
  545. package/lib/types/dsh-adapter/context-occupancy.d.ts +81 -4
  546. package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -1
  547. package/lib/types/dsh-adapter/context-occupancy.js +108 -17
  548. package/lib/types/dsh-adapter/contract.d.ts +4 -4
  549. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  550. package/lib/types/dsh-adapter/contract.js +20 -5
  551. package/lib/types/dsh-adapter/effect-ledger.d.ts +7 -0
  552. package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -1
  553. package/lib/types/dsh-adapter/effect-ledger.js +8 -1
  554. package/lib/types/dsh-adapter/entry-slot.d.ts +38 -0
  555. package/lib/types/dsh-adapter/entry-slot.d.ts.map +1 -0
  556. package/lib/types/dsh-adapter/entry-slot.js +28 -0
  557. package/lib/types/dsh-adapter/fresh-agent.d.ts +22 -0
  558. package/lib/types/dsh-adapter/fresh-agent.d.ts.map +1 -0
  559. package/lib/types/dsh-adapter/fresh-agent.js +226 -0
  560. package/lib/types/dsh-adapter/host-access.d.ts +16 -1
  561. package/lib/types/dsh-adapter/host-access.d.ts.map +1 -1
  562. package/lib/types/dsh-adapter/host-access.js +148 -2
  563. package/lib/types/dsh-adapter/host-contract.d.ts +103 -0
  564. package/lib/types/dsh-adapter/host-contract.d.ts.map +1 -0
  565. package/lib/types/dsh-adapter/host-contract.js +77 -0
  566. package/lib/types/dsh-adapter/host-dsh.d.ts +112 -0
  567. package/lib/types/dsh-adapter/host-dsh.d.ts.map +1 -0
  568. package/lib/types/dsh-adapter/host-dsh.js +481 -0
  569. package/lib/types/dsh-adapter/host-entry.d.ts +9 -0
  570. package/lib/types/dsh-adapter/host-entry.d.ts.map +1 -0
  571. package/lib/types/dsh-adapter/host-entry.js +253 -0
  572. package/lib/types/dsh-adapter/index.d.ts +53 -17
  573. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  574. package/lib/types/dsh-adapter/index.js +63 -9
  575. package/lib/types/dsh-adapter/install/executors.d.ts +44 -0
  576. package/lib/types/dsh-adapter/install/executors.d.ts.map +1 -0
  577. package/lib/types/dsh-adapter/install/executors.js +15 -0
  578. package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts +3 -0
  579. package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts.map +1 -0
  580. package/lib/types/dsh-adapter/install/pnpm-profile-add.js +150 -0
  581. package/lib/types/dsh-adapter/invariant.d.ts +7 -2
  582. package/lib/types/dsh-adapter/invariant.d.ts.map +1 -1
  583. package/lib/types/dsh-adapter/invariant.js +6 -3
  584. package/lib/types/dsh-adapter/jobs.d.ts +7 -0
  585. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  586. package/lib/types/dsh-adapter/jobs.js +13 -0
  587. package/lib/types/dsh-adapter/lite-profile.d.ts +50 -0
  588. package/lib/types/dsh-adapter/lite-profile.d.ts.map +1 -0
  589. package/lib/types/dsh-adapter/lite-profile.js +49 -0
  590. package/lib/types/dsh-adapter/migrate/index.js +2 -2
  591. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +1 -1
  592. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -1
  593. package/lib/types/dsh-adapter/migrate/parse/jsonl.js +4 -3
  594. package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -1
  595. package/lib/types/dsh-adapter/oauth/profiles.js +5 -1
  596. package/lib/types/dsh-adapter/panels.d.ts +7 -0
  597. package/lib/types/dsh-adapter/panels.d.ts.map +1 -1
  598. package/lib/types/dsh-adapter/panels.js +41 -2
  599. package/lib/types/dsh-adapter/plugin-completions.d.ts +32 -0
  600. package/lib/types/dsh-adapter/plugin-completions.d.ts.map +1 -0
  601. package/lib/types/dsh-adapter/plugin-completions.js +80 -0
  602. package/lib/types/dsh-adapter/plugin-declaration.d.ts +119 -0
  603. package/lib/types/dsh-adapter/plugin-declaration.d.ts.map +1 -0
  604. package/lib/types/dsh-adapter/plugin-declaration.js +183 -0
  605. package/lib/types/dsh-adapter/plugin-feed.d.ts +94 -0
  606. package/lib/types/dsh-adapter/plugin-feed.d.ts.map +1 -0
  607. package/lib/types/dsh-adapter/plugin-feed.js +135 -0
  608. package/lib/types/dsh-adapter/plugin-guard.d.ts +115 -0
  609. package/lib/types/dsh-adapter/plugin-guard.d.ts.map +1 -0
  610. package/lib/types/dsh-adapter/plugin-guard.js +108 -0
  611. package/lib/types/dsh-adapter/plugin-host.d.ts +13 -2
  612. package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
  613. package/lib/types/dsh-adapter/plugin-host.js +34 -8
  614. package/lib/types/dsh-adapter/plugin-install.d.ts +160 -0
  615. package/lib/types/dsh-adapter/plugin-install.d.ts.map +1 -0
  616. package/lib/types/dsh-adapter/plugin-install.js +545 -0
  617. package/lib/types/dsh-adapter/plugin-manage.d.ts +178 -0
  618. package/lib/types/dsh-adapter/plugin-manage.d.ts.map +1 -0
  619. package/lib/types/dsh-adapter/plugin-manage.js +468 -0
  620. package/lib/types/dsh-adapter/plugin-manager.d.ts +144 -0
  621. package/lib/types/dsh-adapter/plugin-manager.d.ts.map +1 -0
  622. package/lib/types/dsh-adapter/plugin-manager.js +83 -0
  623. package/lib/types/dsh-adapter/plugin.d.ts +50 -1
  624. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  625. package/lib/types/dsh-adapter/plugin.js +918 -234
  626. package/lib/types/dsh-adapter/plugins-info.d.ts +130 -8
  627. package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
  628. package/lib/types/dsh-adapter/plugins-info.js +469 -44
  629. package/lib/types/dsh-adapter/process-exit.d.ts +43 -0
  630. package/lib/types/dsh-adapter/process-exit.d.ts.map +1 -0
  631. package/lib/types/dsh-adapter/process-exit.js +60 -0
  632. package/lib/types/dsh-adapter/root-dispose.d.ts +18 -0
  633. package/lib/types/dsh-adapter/root-dispose.d.ts.map +1 -0
  634. package/lib/types/dsh-adapter/root-dispose.js +28 -0
  635. package/lib/types/dsh-adapter/session-list-metadata.d.ts +20 -0
  636. package/lib/types/dsh-adapter/session-list-metadata.d.ts.map +1 -0
  637. package/lib/types/dsh-adapter/session-list-metadata.js +56 -0
  638. package/lib/types/dsh-adapter/session-projection-store.d.ts +66 -0
  639. package/lib/types/dsh-adapter/session-projection-store.d.ts.map +1 -0
  640. package/lib/types/dsh-adapter/session-projection-store.js +149 -0
  641. package/lib/types/dsh-adapter/session-seed.d.ts +11 -0
  642. package/lib/types/dsh-adapter/session-seed.d.ts.map +1 -0
  643. package/lib/types/dsh-adapter/session-seed.js +47 -0
  644. package/lib/types/dsh-adapter/sessions/list.d.ts +3 -1
  645. package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
  646. package/lib/types/dsh-adapter/sessions/list.js +11 -5
  647. package/lib/types/dsh-adapter/sessions/snapshot.d.ts +0 -2
  648. package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -1
  649. package/lib/types/dsh-adapter/sessions/snapshot.js +7 -70
  650. package/lib/types/dsh-adapter/settingsEditor.js +2 -2
  651. package/lib/types/dsh-adapter/sideQuestion.d.ts +21 -0
  652. package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
  653. package/lib/types/dsh-adapter/sideQuestion.js +53 -0
  654. package/lib/types/dsh-adapter/startup-args.d.ts +2 -0
  655. package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -1
  656. package/lib/types/dsh-adapter/startup-args.js +5 -0
  657. package/lib/types/dsh-adapter/subagents.d.ts +33 -1
  658. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  659. package/lib/types/dsh-adapter/subagents.js +112 -9
  660. package/lib/types/dsh-adapter/team-mode.d.ts +74 -0
  661. package/lib/types/dsh-adapter/team-mode.d.ts.map +1 -0
  662. package/lib/types/dsh-adapter/team-mode.js +188 -0
  663. package/lib/types/dsh-adapter/team-roster.d.ts +67 -0
  664. package/lib/types/dsh-adapter/team-roster.d.ts.map +1 -0
  665. package/lib/types/dsh-adapter/team-roster.js +136 -0
  666. package/lib/types/dsh-adapter/team-tools.d.ts +58 -0
  667. package/lib/types/dsh-adapter/team-tools.d.ts.map +1 -0
  668. package/lib/types/dsh-adapter/team-tools.js +208 -0
  669. package/lib/types/dsh-adapter/tui-settings.d.ts +57 -0
  670. package/lib/types/dsh-adapter/tui-settings.d.ts.map +1 -0
  671. package/lib/types/dsh-adapter/tui-settings.js +199 -0
  672. package/lib/types/dsh-adapter/types.d.ts +1 -1
  673. package/lib/types/dsh-adapter/types.d.ts.map +1 -1
  674. package/lib/types/effortPrefs.d.ts +6 -3
  675. package/lib/types/effortPrefs.d.ts.map +1 -1
  676. package/lib/types/effortPrefs.js +7 -4
  677. package/lib/types/hostEntryRoute.d.ts +18 -0
  678. package/lib/types/hostEntryRoute.d.ts.map +1 -0
  679. package/lib/types/hostEntryRoute.js +57 -0
  680. package/lib/types/i18n.d.ts +961 -1439
  681. package/lib/types/i18n.d.ts.map +1 -1
  682. package/lib/types/i18n.js +443 -387
  683. package/lib/types/ink/components/AlternateScreen.js +2 -2
  684. package/lib/types/ink/components/App.d.ts +1 -0
  685. package/lib/types/ink/components/App.d.ts.map +1 -1
  686. package/lib/types/ink/components/App.js +16 -4
  687. package/lib/types/ink/components/CursorDeclarationContext.d.ts +9 -0
  688. package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -1
  689. package/lib/types/ink/components/CursorDeclarationContext.js +2 -0
  690. package/lib/types/ink/components/ScrollBox.d.ts +9 -0
  691. package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
  692. package/lib/types/ink/components/ScrollBox.js +23 -0
  693. package/lib/types/ink/dom.d.ts.map +1 -1
  694. package/lib/types/ink/hooks/use-copy-on-select.d.ts +2 -2
  695. package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -1
  696. package/lib/types/ink/hooks/use-copy-on-select.js +13 -7
  697. package/lib/types/ink/hooks/use-declared-cursor.d.ts +11 -3
  698. package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -1
  699. package/lib/types/ink/hooks/use-declared-cursor.js +30 -10
  700. package/lib/types/ink/ink.d.ts +22 -17
  701. package/lib/types/ink/ink.d.ts.map +1 -1
  702. package/lib/types/ink/ink.js +151 -40
  703. package/lib/types/ink/kitty-graphics.d.ts +2 -0
  704. package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
  705. package/lib/types/ink/kitty-graphics.js +6 -1
  706. package/lib/types/ink/node-cache.d.ts +2 -1
  707. package/lib/types/ink/node-cache.d.ts.map +1 -1
  708. package/lib/types/ink/output.d.ts +10 -4
  709. package/lib/types/ink/output.d.ts.map +1 -1
  710. package/lib/types/ink/output.js +14 -10
  711. package/lib/types/ink/render-node-to-output.d.ts +5 -2
  712. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  713. package/lib/types/ink/render-node-to-output.js +27 -9
  714. package/lib/types/ink/renderer.d.ts +1 -0
  715. package/lib/types/ink/renderer.d.ts.map +1 -1
  716. package/lib/types/ink/renderer.js +4 -3
  717. package/lib/types/ink/root.d.ts +4 -1
  718. package/lib/types/ink/root.d.ts.map +1 -1
  719. package/lib/types/ink/screen.d.ts +4 -2
  720. package/lib/types/ink/screen.d.ts.map +1 -1
  721. package/lib/types/ink/selection.d.ts +10 -1
  722. package/lib/types/ink/selection.d.ts.map +1 -1
  723. package/lib/types/ink/selection.js +94 -25
  724. package/lib/types/ink/stdin-handoff.d.ts +11 -0
  725. package/lib/types/ink/stdin-handoff.d.ts.map +1 -0
  726. package/lib/types/ink/stdin-handoff.js +20 -0
  727. package/lib/types/ink/styles.d.ts +2 -1
  728. package/lib/types/ink/styles.d.ts.map +1 -1
  729. package/lib/types/ink/terminal-image.d.ts +6 -4
  730. package/lib/types/ink/terminal-image.d.ts.map +1 -1
  731. package/lib/types/ink/terminal-image.js +16 -39
  732. package/lib/types/ink/terminal-notification.d.ts +8 -0
  733. package/lib/types/ink/terminal-notification.d.ts.map +1 -0
  734. package/lib/types/ink/terminal-notification.js +83 -0
  735. package/lib/types/ink/terminal.d.ts +9 -0
  736. package/lib/types/ink/terminal.d.ts.map +1 -1
  737. package/lib/types/ink/terminal.js +34 -1
  738. package/lib/types/ink/termio/csi.d.ts +11 -0
  739. package/lib/types/ink/termio/csi.d.ts.map +1 -1
  740. package/lib/types/ink/termio/csi.js +13 -0
  741. package/lib/types/ink/update-overflow-guard.d.ts +6 -0
  742. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  743. package/lib/types/ink/update-overflow-guard.js +17 -0
  744. package/lib/types/ink/wrap-text.d.ts +6 -0
  745. package/lib/types/ink/wrap-text.d.ts.map +1 -1
  746. package/lib/types/ink/wrap-text.js +17 -0
  747. package/lib/types/kernelPrefs.d.ts +130 -17
  748. package/lib/types/kernelPrefs.d.ts.map +1 -1
  749. package/lib/types/kernelPrefs.js +98 -35
  750. package/lib/types/math/inline-layout.d.ts +2 -0
  751. package/lib/types/math/inline-layout.d.ts.map +1 -1
  752. package/lib/types/math/inline-layout.js +5 -27
  753. package/lib/types/modelGroups.d.ts +15 -27
  754. package/lib/types/modelGroups.d.ts.map +1 -1
  755. package/lib/types/modelGroups.js +17 -31
  756. package/lib/types/modelPrefs.d.ts +5 -4
  757. package/lib/types/modelPrefs.d.ts.map +1 -1
  758. package/lib/types/modelPrefs.js +5 -4
  759. package/lib/types/modelRoute.d.ts +23 -9
  760. package/lib/types/modelRoute.d.ts.map +1 -1
  761. package/lib/types/modelRoute.js +25 -11
  762. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
  763. package/lib/types/native-ts/yoga-layout/index.js +8 -1
  764. package/lib/types/permissionPrefs.d.ts +34 -0
  765. package/lib/types/permissionPrefs.d.ts.map +1 -0
  766. package/lib/types/permissionPrefs.js +61 -0
  767. package/lib/types/permissionPresetLabels.d.ts +25 -0
  768. package/lib/types/permissionPresetLabels.d.ts.map +1 -0
  769. package/lib/types/permissionPresetLabels.js +33 -0
  770. package/lib/types/plugin-host.d.ts +1 -0
  771. package/lib/types/plugin-host.d.ts.map +1 -1
  772. package/lib/types/preset-patch.d.ts +22 -0
  773. package/lib/types/preset-patch.d.ts.map +1 -0
  774. package/lib/types/preset-patch.js +14 -0
  775. package/lib/types/presetPrefs.d.ts +17 -3
  776. package/lib/types/presetPrefs.d.ts.map +1 -1
  777. package/lib/types/presetPrefs.js +20 -3
  778. package/lib/types/reload.d.ts +6 -10
  779. package/lib/types/reload.d.ts.map +1 -1
  780. package/lib/types/reload.js +14 -14
  781. package/lib/types/screens/Chat.d.ts +55 -16
  782. package/lib/types/screens/Chat.d.ts.map +1 -1
  783. package/lib/types/screens/Chat.js +742 -280
  784. package/lib/types/screens/Launchpad.d.ts +33 -17
  785. package/lib/types/screens/Launchpad.d.ts.map +1 -1
  786. package/lib/types/screens/Launchpad.js +256 -78
  787. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  788. package/lib/types/screens/SessionSupervisor.js +53 -12
  789. package/lib/types/screens/Settings.d.ts.map +1 -1
  790. package/lib/types/screens/Settings.js +7 -0
  791. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  792. package/lib/types/screens/StatusLine.js +24 -7
  793. package/lib/types/screens/StatusMetrics.d.ts +46 -1
  794. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  795. package/lib/types/screens/StatusMetrics.js +72 -0
  796. package/lib/types/screens/chat/useKernelPicker.d.ts +8 -4
  797. package/lib/types/screens/chat/useKernelPicker.d.ts.map +1 -1
  798. package/lib/types/screens/chat/useKernelPicker.js +61 -21
  799. package/lib/types/screens/chat/useModelPicker.d.ts +42 -0
  800. package/lib/types/screens/chat/useModelPicker.d.ts.map +1 -0
  801. package/lib/types/screens/chat/useModelPicker.js +182 -0
  802. package/lib/types/screens/chat/usePluginWriteFlow.d.ts +68 -0
  803. package/lib/types/screens/chat/usePluginWriteFlow.d.ts.map +1 -0
  804. package/lib/types/screens/chat/usePluginWriteFlow.js +92 -0
  805. package/lib/types/screens/chatOverlay.d.ts +30 -5
  806. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  807. package/lib/types/screens/chatOverlay.js +0 -1
  808. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +4 -1
  809. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -1
  810. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +26 -5
  811. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +1 -1
  812. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  813. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +51 -29
  814. package/lib/types/sessionHistory.d.ts +5 -0
  815. package/lib/types/sessionHistory.d.ts.map +1 -1
  816. package/lib/types/sessionHistory.js +5 -0
  817. package/lib/types/sessionModes.d.ts +5 -3
  818. package/lib/types/sessionModes.d.ts.map +1 -1
  819. package/lib/types/sessionModes.js +9 -3
  820. package/lib/types/sessions/listSnapshot.d.ts +6 -0
  821. package/lib/types/sessions/listSnapshot.d.ts.map +1 -0
  822. package/lib/types/sessions/listSnapshot.js +67 -0
  823. package/lib/types/settings/definitions.d.ts +50 -0
  824. package/lib/types/settings/definitions.d.ts.map +1 -1
  825. package/lib/types/settings/definitions.js +42 -8
  826. package/lib/types/terminal-utils/cjk-emphasis.d.ts +28 -0
  827. package/lib/types/terminal-utils/cjk-emphasis.d.ts.map +1 -0
  828. package/lib/types/terminal-utils/cjk-emphasis.js +31 -0
  829. package/lib/types/terminal-utils/markdown.d.ts +3 -1
  830. package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
  831. package/lib/types/terminal-utils/markdown.js +7 -2
  832. package/lib/types/theme.d.ts +29 -12
  833. package/lib/types/theme.d.ts.map +1 -1
  834. package/lib/types/theme.js +310 -23
  835. package/lib/types/themeCatalog.d.ts.map +1 -1
  836. package/lib/types/themeCatalog.js +21 -2
  837. package/lib/types/tips.js +4 -4
  838. package/lib/types/tuiSettingsFile.d.ts +56 -0
  839. package/lib/types/tuiSettingsFile.d.ts.map +1 -0
  840. package/lib/types/tuiSettingsFile.js +206 -0
  841. package/lib/types/ui.d.ts +2 -0
  842. package/lib/types/ui.d.ts.map +1 -1
  843. package/lib/types/ui.js +2 -0
  844. package/lib/types/update.d.ts +72 -26
  845. package/lib/types/update.d.ts.map +1 -1
  846. package/lib/types/update.js +131 -43
  847. package/lib/types/utils/bmp.d.ts +7 -0
  848. package/lib/types/utils/bmp.d.ts.map +1 -1
  849. package/lib/types/utils/bmp.js +27 -0
  850. package/lib/types/utils/bootTrace.d.ts +2 -0
  851. package/lib/types/utils/bootTrace.d.ts.map +1 -0
  852. package/lib/types/utils/bootTrace.js +20 -0
  853. package/lib/types/utils/clipboard.d.ts.map +1 -1
  854. package/lib/types/utils/clipboard.js +11 -3
  855. package/lib/types/utils/credentials.d.ts +14 -2
  856. package/lib/types/utils/credentials.d.ts.map +1 -1
  857. package/lib/types/utils/credentials.js +34 -11
  858. package/lib/types/utils/imageResize.d.ts +10 -20
  859. package/lib/types/utils/imageResize.d.ts.map +1 -1
  860. package/lib/types/utils/imageResize.js +61 -134
  861. package/lib/types/utils/inputPaste.d.ts +2 -2
  862. package/lib/types/utils/inputPaste.js +2 -2
  863. package/lib/types/utils/pastedImagePath.d.ts +5 -0
  864. package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
  865. package/lib/types/utils/pastedImagePath.js +33 -0
  866. package/lib/types/utils/paths.d.ts +11 -0
  867. package/lib/types/utils/paths.d.ts.map +1 -1
  868. package/lib/types/utils/paths.js +13 -0
  869. package/package.json +150 -114
  870. package/presets/winbash.mjs +716 -0
  871. package/tui-profile/feed/README.md +63 -0
  872. package/tui-profile/feed/first-party.json +10 -0
  873. package/tui-profile/protocols/profile-definitions.d.ts +1 -0
  874. package/tui-profile/protocols/profile-definitions.js +14 -0
  875. package/tui-profile/protocols/tui-contributions.d.ts +55 -0
  876. package/tui-profile/protocols/tui-contributions.js +141 -0
  877. package/tui-profile/registry/contracts/backend-v1alpha1.json +13 -0
  878. package/tui-profile/registry/registry-0.15.json +12 -0
  879. package/lib/types/backends/claude/install.d.ts +0 -15
  880. package/lib/types/backends/claude/install.d.ts.map +0 -1
  881. package/lib/types/backends/claude/install.js +0 -91
  882. package/lib/types/channel/elicitation.d.ts.map +0 -1
  883. package/lib/types/dsh-adapter/channel/session-lineage.d.ts +0 -42
  884. package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +0 -1
  885. package/lib/types/dsh-adapter/channel/session-lineage.js +0 -51
  886. package/lib/types/utils/jsonl.d.ts.map +0 -1
package/bin/dsh-tui.js CHANGED
@@ -28,7 +28,7 @@
28
28
  * `DSH_TUI_LANG` 显式指定时从其值,否则默认中文(同 src/i18n.ts 的缺省)。
29
29
  */
30
30
  import { spawn, spawnSync } from 'node:child_process'
31
- import { existsSync, readFileSync, readdirSync, realpathSync, rmSync } from 'node:fs'
31
+ import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync } from 'node:fs'
32
32
  import { homedir } from 'node:os'
33
33
  import { dirname, isAbsolute, join, resolve } from 'node:path'
34
34
  import { fileURLToPath, pathToFileURL } from 'node:url'
@@ -63,7 +63,14 @@ const ownVersion = ownPackage?.name === '@deepseek-harness-tui/dsh-tui' ? ownPac
63
63
  const PACKAGE = '@deepseek-harness-tui/dsh-tui'
64
64
  const PROFILE = 'dsh-tui'
65
65
  // Kept local so the launcher also works without compiled modules.
66
- const KERNEL_IDS = ['dsh', 'claude', 'codex']
66
+ /** 内置内核:只用于文案("内置 dsh / claude / codex")与 rescue/safe 提示。
67
+ * **不是校验来源**——插件后端由各自 profile 提供,启动器看不到,所以
68
+ * `--backend` 只做 id 语法校验(P0 D1)。 */
69
+ const BUILTIN_BACKEND_IDS = ['dsh', 'claude', 'codex']
70
+ /** 后端 id 语法,与 src/agent/backend-manifest.ts 的 BACKEND_ID_PATTERN 同一规则
71
+ * (启动器要能在没有编译产物时工作,所以这里是副本;两边改动必须同步)。 */
72
+ const BACKEND_ID_PATTERN = /^[a-z0-9][a-z0-9-]{0,31}$/
73
+ const isBackendIdSyntax = value => typeof value === 'string' && BACKEND_ID_PATTERN.test(value)
67
74
 
68
75
  // 随包用户手册(guide/,见 scripts/build-guide.mjs):交给 dsh 当内核
69
76
  // dsh-skill-filesystem 的随包技能根(rank 600 的 bundledSkillDir 默认取这个
@@ -111,6 +118,26 @@ const shellOpt = isWin ? { shell: true } : {}
111
118
  const cmd = (command, args) =>
112
119
  isWin ? [`${command} ${shellQuote(args).join(' ')}`, []] : [command, args]
113
120
 
121
+ // dsh CLI 预检(`dsh --version`),异步起、不占关键路径:本包入口不需要 dsh CLI,
122
+ // 只有 `dsh --profile` 出口(`requireDsh()`)与入口失败后的提示判定才消费结果。
123
+ // **不能** unref:`requireDsh()` await 它时若这是唯一活跃句柄,Node 会把顶层 await
124
+ // 判成永不结算、以 exit 13 终止启动器。
125
+ let dshProbe
126
+ const probeDsh = () => {
127
+ dshProbe ??= new Promise(resolve => {
128
+ const child = spawn(...cmd('dsh', ['--version']), { stdio: 'ignore', ...shellOpt })
129
+ child.on('error', () => resolve(false))
130
+ child.on('exit', code => resolve(code === 0))
131
+ })
132
+ return dshProbe
133
+ }
134
+
135
+ const requireDsh = async () => {
136
+ if (await probeDsh()) return
137
+ console.error(msg('noDsh'))
138
+ process.exit(1)
139
+ }
140
+
114
141
  // 内联 semver(解析 + 严格大于):启动器可能在依赖不完整的环境里被执行
115
142
  // (迁移、半损坏安装、测试沙箱),零外部依赖是自保底线。覆盖 semver 的
116
143
  // 核心-先行版比较规则:先行版标识符逐段比(数字段按数值、小于字母段),
@@ -195,6 +222,13 @@ const MSG = {
195
222
  en: code => `[dsh-tui] dsh profile exited with code ${code}. Run it directly for diagnostics:\n dsh --profile ${PROFILE}`,
196
223
  zh: code => `[dsh-tui] dsh profile 已退出(退出码 ${code})。可直接运行以下命令查看诊断:\n dsh --profile ${PROFILE}`,
197
224
  },
225
+ // 裸 --resume / -c / --continue 派生不出目标(roadmap §6 第 11 条,B-2a):以前
226
+ // 这里不设 env,再把 --continue 交给下游=静默冷启动。恢复语义要求明确报错并非零
227
+ // 退出,用户去掉 --resume 之后才按普通启动流程处理。
228
+ resumeNoLastSession: {
229
+ en: backend => `[dsh-tui] No session to resume: the "${backend}" backend has not recorded one yet. Start without --resume for a fresh session, or name one with --resume <session id>.`,
230
+ zh: backend => `[dsh-tui] 没有可恢复的上次会话:后端「${backend}」还没有记录过会话。去掉 --resume 即可冷启动,或用 --resume <会话 id> 指定一个。`,
231
+ },
198
232
  safeAsk: {
199
233
  en: code => `dsh-tui exited unexpectedly (code ${code}). Enter safe mode? [Y/n] `,
200
234
  zh: code => `dsh-tui 异常退出(码 ${code})。进入安全模式?[Y/n] `,
@@ -466,7 +500,8 @@ const MSG = {
466
500
  `Options:\n` +
467
501
  ` --resume [id] Resume the last (or the given) session\n` +
468
502
  ` -c, --continue Same as --resume\n` +
469
- ` --backend <id> Agent backend: dsh | claude | codex (claude, codex: experimental)\n` +
503
+ ` --backend <id> Agent backend: dsh | claude | codex, or an installed plugin backend\n` +
504
+ ` (claude, codex and plugin backends: experimental)\n` +
470
505
  ` -- <prompt...> Treat the remaining arguments as literal prompt text\n` +
471
506
  ` <path|url> Open with the given workspace target\n\n` +
472
507
  `Leading DSH options (e.g. --dump-config, --patch <path>) are forwarded unchanged.\n` +
@@ -484,7 +519,8 @@ const MSG = {
484
519
  `选项:\n` +
485
520
  ` --resume [id] 恢复上次(或指定 id 的)会话\n` +
486
521
  ` -c, --continue 同 --resume\n` +
487
- ` --backend <id> Agent 后端:dsh | claude | codex(claude、codex 为实验性)\n` +
522
+ ` --backend <id> Agent 后端:dsh | claude | codex,或已安装的插件后端\n` +
523
+ ` (claude、codex 与插件后端均为实验性)\n` +
488
524
  ` -- <提示词...> 将剩余参数作为字面提示词\n` +
489
525
  ` <路径|URL> 以指定工作区目标启动\n\n` +
490
526
  `前置 DSH 选项(如 --dump-config、--patch <路径>)原样转发。\n` +
@@ -560,7 +596,20 @@ if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
560
596
  process.exit(0)
561
597
  }
562
598
  /**
563
- * Whether the DSH credential store declares a reference by this name.
599
+ * The credential documents a read may consult, most authoritative first: the
600
+ * active home's store, then the default `~/.dsh` store. A `DSH_HOME` override
601
+ * moves the harness home, but a key the user stored where both READMEs name it
602
+ * must keep counting as set instead of failing the doctor.
603
+ * @param home - The DSH home directory that owns `.credentials.yaml`.
604
+ * @returns Candidate file paths, most authoritative first.
605
+ */
606
+ const credentialStoreFiles = home => {
607
+ const active = join(home, '.credentials.yaml')
608
+ const fallback = join(homedir(), '.dsh', '.credentials.yaml')
609
+ return active === fallback ? [active] : [active, fallback]
610
+ }
611
+ /**
612
+ * Whether any DSH credential store declares a reference by this name.
564
613
  *
565
614
  * The launcher stays dependency-free, so the YAML is read as text: only the
566
615
  * top-level `refs:` block maps reference names to stored secrets, and matching
@@ -572,15 +621,17 @@ if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
572
621
  * @returns True when a `refs` entry with that name exists.
573
622
  */
574
623
  const credentialRefDeclared = (home, name) => {
575
- try {
576
- const text = readFileSync(join(home, '.credentials.yaml'), 'utf8')
577
- const block = /^refs:[ \t]*\r?\n((?:[ \t]+\S.*(?:\r?\n|$))*)/mu.exec(text)
578
- if (block === null) return false
579
- const escaped = name.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&')
580
- return new RegExp(`^[ \t]+${escaped}[ \t]*:`, 'mu').test(block[1])
581
- } catch {
582
- return false
624
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&')
625
+ const pattern = new RegExp(`^[ \t]+${escaped}[ \t]*:`, 'mu')
626
+ for (const file of credentialStoreFiles(home)) {
627
+ try {
628
+ const block = /^refs:[ \t]*\r?\n((?:[ \t]+\S.*(?:\r?\n|$))*)/mu.exec(readFileSync(file, 'utf8'))
629
+ if (block !== null && pattern.test(block[1])) return true
630
+ } catch {
631
+ // An unreadable or absent store simply does not declare the ref.
632
+ }
583
633
  }
634
+ return false
584
635
  }
585
636
 
586
637
  // ─── doctor 检查逻辑(doctor 子命令与 safe 会话共用)──────────────────────────
@@ -756,13 +807,41 @@ const startDshSession = (dshArgs, profile = PROFILE, env = process.env) =>
756
807
  })
757
808
  })
758
809
 
810
+ // entry 子进程的 Node 编译缓存:纯 env 注入,替身进程继承。用户显式设过
811
+ // `NODE_COMPILE_CACHE`(含空串)不覆盖。
812
+ // 路径沿用 `join(homedir(), '.dsh-tui', …)` 写法,**不要**抽成共用的模块级常量:
813
+ // verify-safe-mode.mjs 把 readLastRunRecord 至「TTY 判定」注释之间的源码切进只注入
814
+ // 少数全局的 vm 沙箱,区间内引用的外部常量会是 `undefined`,套件静默转红。
815
+ // (别把那两处切片标记原文抄进注释:会让脚本的 indexOf 提前命中。)
816
+ const withCompileCache = env => {
817
+ if (env.NODE_COMPILE_CACHE !== undefined) return env
818
+ const cacheDir = join(homedir(), '.dsh-tui', 'compile-cache')
819
+ try {
820
+ mkdirSync(cacheDir, { recursive: true, mode: 0o700 })
821
+ } catch {
822
+ return env
823
+ }
824
+ return { ...env, NODE_COMPILE_CACHE: cacheDir }
825
+ }
826
+
827
+ // 本包自己的入口:`node <入口> <应用参数>`。结果模型与 startDshSession 相同。
828
+ const startEntrySession = (entry, appArgs, env = process.env) =>
829
+ new Promise(resolve => {
830
+ const child = spawn(process.execPath, [entry, ...appArgs], { stdio: 'inherit', env: withCompileCache(env) })
831
+ child.on('error', err => resolve({ kind: 'error', error: err }))
832
+ child.on('exit', (code, signal) => {
833
+ if (signal) resolve({ kind: 'signal', signal })
834
+ else resolve({ kind: 'exit', code: code ?? 0 })
835
+ })
836
+ })
837
+
759
838
  // 救援子进程的环境:显式构造,而不是把宿主 process.env 原样交给它。救援的
760
839
  // 语义是「干净冷启动」,而启动器自己写进 process.env 的会话控制变量会把刚
761
840
  // 崩掉的主 profile 的会话 id / 工作区目标带进救援——救援 profile 里并不存在
762
841
  // 那个会话,dsh 会在恢复时再报一次错,正好污染最该干净的通道。其余宿主变量
763
842
  // (PATH / DSH_HOME / 凭据…)是救援能工作的前提,照常继承。
764
843
  // home 层补丁不在此列:它由 createRescueProfile 的干净性门禁单独把关。
765
- const RESCUE_DROPPED_ENV = ['DSH_TUI_RESUME_SESSION', 'DSH_TUI_WORKSPACE_TARGET']
844
+ const RESCUE_DROPPED_ENV = ['DSH_TUI_RESUME_SESSION', 'DSH_TUI_RESUME_BACKEND', 'DSH_TUI_WORKSPACE_TARGET']
766
845
  const rescueEnv = () => {
767
846
  const env = { ...process.env }
768
847
  for (const key of RESCUE_DROPPED_ENV) delete env[key]
@@ -779,7 +858,7 @@ const readLastRunRecord = () => {
779
858
  try {
780
859
  const parsed = JSON.parse(readFileSync(join(homedir(), '.dsh-tui', 'last-run.json'), 'utf8'))
781
860
  if (parsed === null || typeof parsed !== 'object') return undefined
782
- if (!KERNEL_IDS.includes(parsed.backendId)) return undefined
861
+ if (!isBackendIdSyntax(parsed.backendId)) return undefined
783
862
  if (typeof parsed.sessionId !== 'string' || typeof parsed.cwd !== 'string' || typeof parsed.attemptId !== 'string') return undefined
784
863
  if (typeof parsed.updatedAt !== 'number' || !Number.isFinite(parsed.updatedAt)) return undefined
785
864
  return parsed
@@ -790,14 +869,19 @@ const readLastRunRecord = () => {
790
869
  // 记录 → 重试 env:DSH_TUI_BACKEND 与一次性的 DSH_TUI_BACKEND_HANDOFF(后者
791
870
  // 压过 Config 行)都设成记录里的内核;记录有可恢复的会话 id 才设
792
871
  // DSH_TUI_RESUME_SESSION,否则删掉继承来的值,在该内核上冷启动。
872
+ // DSH_TUI_RESUME_BACKEND 记下这个 id 是**从哪个内核读来的**:记录里的内核可能
873
+ // 已经不在注册表里,boot 会回落 dsh,届时这个 id 必须被撤销而不是交给 dsh
874
+ // (见 src/kernelPrefs.ts 的 resolveResumeTarget)。
793
875
  const envFromLastRun = record => {
794
876
  const env = { ...process.env }
795
877
  env.DSH_TUI_BACKEND = record.backendId
796
878
  env.DSH_TUI_BACKEND_HANDOFF = record.backendId
797
879
  if (typeof record.sessionId === 'string' && record.sessionId.trim() !== '') {
798
880
  env.DSH_TUI_RESUME_SESSION = record.sessionId
881
+ env.DSH_TUI_RESUME_BACKEND = record.backendId
799
882
  } else {
800
883
  delete env.DSH_TUI_RESUME_SESSION
884
+ delete env.DSH_TUI_RESUME_BACKEND
801
885
  }
802
886
  return env
803
887
  }
@@ -817,13 +901,34 @@ const readBackendLastSession = backendId => {
817
901
  return ''
818
902
  }
819
903
  }
904
+
905
+ // env 里的后端选择:先按 boot 侧 parseBackendId 的规则**归一**(trim + 小写)再判定。
906
+ // 拿原始值判定会让两侧分歧:`DSH_TUI_BACKEND=Codex` 时 boot 归一后起 codex,启动器
907
+ // 却当它没命中而读 dsh 的 resume.txt——codex 便拿着 DSH 的会话 id 去恢复(必报错)。
908
+ // 归一后 `dsh` 与非法/空值同样走 resume.txt 分支。
909
+ const backendChoiceFromEnv = () => {
910
+ const raw = process.env.DSH_TUI_BACKEND
911
+ if (typeof raw !== 'string') return undefined
912
+ const id = raw.trim().toLowerCase()
913
+ return isBackendIdSyntax(id) && id !== 'dsh' ? id : undefined
914
+ }
915
+
916
+ // 安全模式重试标记(与 src/kernelPrefs.ts 的 RESUME_RETRY_ENV 同一个字面量):重试
917
+ // 的目标派生自 last-run.json,而记录里的内核可能已经不在注册表里、boot 会回落 dsh
918
+ // 并撤销这个目标。重试是用户最后的退路,所以带这个标记的那次启动撤销后降级为告警 +
919
+ // 冷启动,而不是报错退出。一次性:boot 读到即从 process.env 删除,不传给子进程。
920
+ const RESUME_RETRY_ENV = 'DSH_TUI_RESUME_RETRY'
921
+
820
922
  // 安全模式「重试正常启动」的环境(菜单选项 1,首启 fallback 与 `safe` 共用):
821
923
  // 1. 本次启动之后写下的最后运行记录:崩溃时实际在跑的内核与会话,压过
822
924
  // env 里的 --resume(内核切换是用户更新的选择)。
823
925
  // 2. 没有这样的记录(崩得太早,或旧版本不写):env 里已有
824
926
  // DSH_TUI_RESUME_SESSION 就照用;否则按 env 的后端读它的上次会话
825
927
  // (resume.txt 或对应后端偏好文件),读不到就冷启动。
826
- const resumeEnvForRetry = () => {
928
+ // 三条分支派生出来的目标都带上 RESUME_RETRY_ENV:它们是"回到崩溃前"的重试,撤销
929
+ // 只能降级为冷启动,不能把用户最后的退路一起关掉。
930
+ const resumeEnvForRetry = () => ({ ...resumeEnvForRetryTarget(), [RESUME_RETRY_ENV]: '1' })
931
+ const resumeEnvForRetryTarget = () => {
827
932
  const chain = launchChain
828
933
  const record = readLastRunRecord()
829
934
  if (record !== undefined && chain !== null && record.updatedAt >= chain.startedAt) {
@@ -831,8 +936,13 @@ const resumeEnvForRetry = () => {
831
936
  }
832
937
  if (process.env.DSH_TUI_RESUME_SESSION !== undefined) return process.env
833
938
  let target = ''
834
- if (KERNEL_IDS.includes(process.env.DSH_TUI_BACKEND) && process.env.DSH_TUI_BACKEND !== 'dsh') {
835
- target = readBackendLastSession(process.env.DSH_TUI_BACKEND)
939
+ // 与裸 --resume 同理:这两个目标都是**派生**的,来源内核要一并记下,boot 回落
940
+ // 到别的内核时才撤得掉(显式 marker 走上面那条 return,不带来源)。
941
+ let source = 'dsh'
942
+ const backendChoice = backendChoiceFromEnv()
943
+ if (backendChoice !== undefined) {
944
+ target = readBackendLastSession(backendChoice)
945
+ source = backendChoice
836
946
  } else {
837
947
  try {
838
948
  target = readFileSync(join(homedir(), '.dsh-tui', 'resume.txt'), 'utf8').trim()
@@ -840,7 +950,9 @@ const resumeEnvForRetry = () => {
840
950
  // 没有历史会话可恢复——静默冷启动。
841
951
  }
842
952
  }
843
- return target === '' ? process.env : { ...process.env, DSH_TUI_RESUME_SESSION: target }
953
+ return target === ''
954
+ ? process.env
955
+ : { ...process.env, DSH_TUI_RESUME_SESSION: target, DSH_TUI_RESUME_BACKEND: source }
844
956
  }
845
957
 
846
958
  // TTY 判定:询问与菜单都要求 stdin/stdout 均可交互(readline 需要 stdin,
@@ -1385,14 +1497,8 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
1385
1497
  forwardExit(child)
1386
1498
  } else {
1387
1499
  // ─── profile 副本(或源码运行):完整启动逻辑 ─────────────────────────────
1388
- // dsh CLI 预检(缺失时给安装指引,先于一切 profile 逻辑)。
1389
- {
1390
- const probe = spawnSync(...cmd('dsh', ['--version']), { stdio: 'pipe', ...shellOpt })
1391
- if (probe.error || probe.status !== 0) {
1392
- console.error(msg('noDsh'))
1393
- process.exit(1)
1394
- }
1395
- }
1500
+ // dsh CLI 预检:异步起,结果在要起 dsh 的出口才消费(见 probeDsh)。
1501
+ void probeDsh()
1396
1502
 
1397
1503
  let installedVersion
1398
1504
  try {
@@ -1417,8 +1523,12 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
1417
1523
  if (!runningInsideProfile) checkProfileAlignment(installedVersion)
1418
1524
 
1419
1525
  // --resume / 工作区目标拦截(launcher 契约,见 src/sessionHistory.ts)。
1420
- const setResumeEnv = sessionId => {
1526
+ // sourceBackend 只在**派生**目标时给出(读的是那个内核的上次会话);显式敲的
1527
+ // id 传 undefined,把来源标记删掉——它归用户管,启动器不替它作证。
1528
+ const setResumeEnv = (sessionId, sourceBackend) => {
1421
1529
  process.env.DSH_TUI_RESUME_SESSION = sessionId
1530
+ if (sourceBackend === undefined) delete process.env.DSH_TUI_RESUME_BACKEND
1531
+ else process.env.DSH_TUI_RESUME_BACKEND = sourceBackend
1422
1532
  }
1423
1533
  const readLastResumeTarget = () => {
1424
1534
  try {
@@ -1466,8 +1576,13 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
1466
1576
  if (a === '--backend' || a.startsWith('--backend=')) {
1467
1577
  const backend = a.startsWith('--backend=') ? a.slice('--backend='.length).trim() : (argv[i + 1] ?? '').trim()
1468
1578
  if (a === '--backend' && argv[i + 1] !== undefined) i += 1
1469
- if (!KERNEL_IDS.includes(backend)) {
1470
- console.error(lang === 'zh' ? `未知的 --backend:${backend}(可选 ${KERNEL_IDS.join(' / ')})` : `Unknown --backend: ${backend} (expected ${KERNEL_IDS.join(' or ')})`)
1579
+ // 只挡语法非法:合法但没装的 id(插件后端、或拼错的 id)进 TUI 后由 boot
1580
+ // 告警并回落 dsh——启动器拿不到 profile 里装了什么(P0 D1 的已知代价,
1581
+ // Stage C 的 /plugin 会让启动器读已装清单后恢复"装前即报错")。
1582
+ if (!isBackendIdSyntax(backend)) {
1583
+ console.error(lang === 'zh'
1584
+ ? `非法的 --backend:${backend}(后端 id 只能是小写字母、数字与连字符,最长 32 字符;内置 ${BUILTIN_BACKEND_IDS.join(' / ')},插件后端需已安装)`
1585
+ : `Invalid --backend: ${backend} (a backend id is lowercase letters, digits and dashes, at most 32 characters; built-in: ${BUILTIN_BACKEND_IDS.join(' or ')} — a plugin backend must be installed)`)
1471
1586
  process.exit(2)
1472
1587
  }
1473
1588
  process.env.DSH_TUI_BACKEND = backend
@@ -1494,10 +1609,40 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
1494
1609
  }
1495
1610
 
1496
1611
  // 按出现顺序重放 --resume:裸 --resume 时 DSH 读 resume.txt(契约不变),
1497
- // 其他内核读各自的上次会话。
1612
+ // 其他内核读各自的上次会话。派生出来的目标同时记下**来源内核**
1613
+ // (DSH_TUI_RESUME_BACKEND),boot 若回落到别的内核就撤销它;显式给出的 id 不
1614
+ // 带来源,原样透传。
1615
+ // 裸请求**派生不出目标就是失败**(roadmap §6 第 11 条,B-2a):以前这里不设任何
1616
+ // env、随后把 --continue 交给下游,等于静默冷启动。只有最后那次请求算数(与
1617
+ // 上面"每个 flag 都设一次、最后者胜"一致),被后面的显式 id 顶掉的裸 flag 不报错。
1618
+ let bareWithoutTarget = ''
1498
1619
  for (const flag of resumeFlags) {
1499
- const sessionId = flag ?? (KERNEL_IDS.includes(process.env.DSH_TUI_BACKEND) && process.env.DSH_TUI_BACKEND !== 'dsh' ? readBackendLastSession(process.env.DSH_TUI_BACKEND) : readLastResumeTarget())
1500
- if (sessionId) setResumeEnv(sessionId)
1620
+ const backendChoice = backendChoiceFromEnv()
1621
+ if (flag !== null) {
1622
+ setResumeEnv(flag, undefined)
1623
+ bareWithoutTarget = ''
1624
+ continue
1625
+ }
1626
+ // 没有 --backend 时裸 --resume 读的是 DSH 的 resume.txt,来源即 dsh:内存里
1627
+ // 记着的内核(kernel.json)可能把它顶掉,那时这个 id 同样不该跟过去。
1628
+ const sourceBackend = backendChoice ?? 'dsh'
1629
+ const sessionId = backendChoice !== undefined ? readBackendLastSession(backendChoice) : readLastResumeTarget()
1630
+ if (sessionId) {
1631
+ setResumeEnv(sessionId, sourceBackend)
1632
+ bareWithoutTarget = ''
1633
+ } else {
1634
+ bareWithoutTarget = sourceBackend
1635
+ }
1636
+ }
1637
+ // Keep the final bare request until boot knows the effective backend. A
1638
+ // missing/foreign marker must not erase it. --continue takes no id, so the
1639
+ // next prompt token cannot accidentally become a resume target.
1640
+ if (resumeFlags.at(-1) === null) {
1641
+ if (bareWithoutTarget !== '') {
1642
+ console.error(msg('resumeNoLastSession')(bareWithoutTarget))
1643
+ process.exit(1)
1644
+ }
1645
+ args.unshift('--continue')
1501
1646
  }
1502
1647
 
1503
1648
  // 启动:被委托场景下本副本自己的版本即对齐诊断所见的启动器代际。
@@ -1508,7 +1653,28 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
1508
1653
  // DSH consumes its own --; only the app tail belongs behind it. Preserve
1509
1654
  // the app-level separator too, and replay this same argv on a safe retry.
1510
1655
  const firstArgs = [...hostArgs, ...(args.length > 0 ? ['--', ...args] : [])]
1656
+
1657
+ // 内核分流(docs/standalone-host-design.md):默认所有内核都走本包入口,由入口
1658
+ // 判定内核(src/hostEntryRoute.ts)。DSH_TUI_HOST_ENTRY=0 让所有内核回到
1659
+ // `dsh --profile`;dsh 自己的 hostArgs(--version、--dump-config* 等)始终交给 dsh。
1660
+ const hostEntry = join(ownDir, 'lib', 'types', 'dsh-adapter', 'host-entry.js')
1661
+ const hostEntryEnabled = process.env.DSH_TUI_HOST_ENTRY !== '0' && existsSync(hostEntry)
1511
1662
  // 必须在首次 spawn 之前:本次启动的 TUI 写的记录都晚于这个时刻。
1512
1663
  noteLaunchChain()
1513
- settleFirstResult(await startDshSession(firstArgs), firstArgs)
1664
+ if (hostEntryEnabled && hostArgs.length === 0) {
1665
+ // 替身进程经它重起(src/update.ts restartArgv)。只在入口路线设置:带 hostArgs
1666
+ // (如 --patch)的 `dsh --profile` 启动重起时须原样重放整条 dsh argv。
1667
+ process.env.DSH_TUI_HOST_ENTRY_PATH = hostEntry
1668
+ process.env.DSH_TUI_PROFILE ??= PROFILE
1669
+ // The in-process DSH kernel reads the bundled guide skills like `dsh` does.
1670
+ const result = await startEntrySession(hostEntry, args, withGuideSkillDir(process.env))
1671
+ // 没有 dsh CLI:安全模式与排查提示都指向不存在的 `dsh --profile`(DSH 内核下
1672
+ // 入口已打印 noDsh),原样退出。
1673
+ if (result.kind === 'exit' && result.code !== 0 && !(await probeDsh())) process.exit(result.code)
1674
+ settleFirstResult(result, firstArgs)
1675
+ } else {
1676
+ // `dsh --profile` 出口:hostArgs,或入口被关闭的非默认路径。
1677
+ await requireDsh()
1678
+ settleFirstResult(await startDshSession(firstArgs), firstArgs)
1679
+ }
1514
1680
  }
package/cordis.patch.yml CHANGED
@@ -7,7 +7,7 @@
7
7
  # restates every key it owns (see the dsh-base patch for the shared
8
8
  # defaults). The dsh-base core rows that need no dsh-tui value — tools,
9
9
  # sandbox/approval policy, skills, goal, plan mode, workspace context,
10
- # telemetry — are inherited unless this surface explicitly restates them.
10
+ # telemetry — are inherited unchanged.
11
11
 
12
12
  # ── surface-specific values over the dsh-base layer ─────────────────────────
13
13
 
@@ -54,53 +54,6 @@
54
54
  config:
55
55
  agents: []
56
56
 
57
- # Preserve the TUI's opt-in privacy stance across the 0.1.2 base default
58
- # change to FEEDBACK_ONLY. An explicit DSH_TELEMETRY_MODE still wins. This
59
- # restates the whole 0.1.2 config because include patches replace config
60
- # objects rather than merging them. The 0.2.0 base moved the collector to
61
- # dsh-otel-collector and added maxRequestBytes; older cohorts keep the
62
- # endpoint (and the key set) their base shipped, so both follow the
63
- # installed package version.
64
- - id: session-telemetry-otel
65
- config: !!js >-
66
- (() => {
67
- let url = 'https://dsh-otel-collector.deepseeksvc.com/v1/logs'
68
- let modern = false
69
- try {
70
- const require = process.getBuiltinModule('node:module').createRequire(ctx.baseUrl)
71
- const fs = process.getBuiltinModule('node:fs')
72
- const manifest = require.resolve('@deepseek-ai/dsh-session-telemetry-otel/package.json')
73
- const version = String(JSON.parse(fs.readFileSync(manifest, 'utf8')).version ?? '')
74
- const match = /^(\d+)\.(\d+)\./u.exec(version)
75
- modern = match === null || Number(match[1]) > 0 || Number(match[2]) >= 2
76
- if (!modern) url = 'https://harness-telemetry.deepseeksvc.com/v1/logs'
77
- } catch {}
78
- return {
79
- mode: process.env.DSH_TELEMETRY_MODE || 'DISABLED',
80
- shutdownTimeoutMillis: 3000,
81
- // 0.2.0's base config caps one request at 4 MB; the older plugin's
82
- // schema has no such key, so only a probed 0.2+ host gets it.
83
- ...(modern ? { maxRequestBytes: 4000000 } : {}),
84
- exporter: {
85
- url: process.env.DSH_TELEMETRY_OTLP_URL ?? url,
86
- compression: 'gzip',
87
- timeoutMillis: 1000,
88
- },
89
- processor: {
90
- scheduledDelayMillis: 10000,
91
- maxQueueSize: 2048,
92
- maxExportBatchSize: 2048,
93
- exportTimeoutMillis: 1500,
94
- },
95
- }
96
- })()
97
-
98
- # The 0.1.2 base sends the active Loader package inventory on official
99
- # DeepSeek requests by default. TUI keeps that diagnostic metadata opt-in.
100
- - id: plugin-package-inventory-deepseek
101
- config:
102
- enabled: false
103
-
104
57
  # ── agent presets (issue #8) ────────────────────────────────────────────────
105
58
  #
106
59
  # The model-facing plugin set moves INTO the preset registry: every
@@ -218,7 +171,9 @@
218
171
 
219
172
  # Windows has no sandbox confinement backend yet (sandbox-local's win32
220
173
  # chain is empty); use danger-full-access on Windows so bash commands can
221
- # run. Other platforms keep the base workspace-write default.
174
+ # run. Other platforms keep the base workspace-write default. DSH_PERMISSION_MODE
175
+ # is the INITIAL state of a launch — the remembered /permission pick
176
+ # (~/.dsh-tui/permission.json) outranks it whenever it is not set.
222
177
  - id: sandbox-policy
223
178
  config:
224
179
  mode: !!js "process.platform === 'win32' ? 'danger-full-access' : (process.env.DSH_PERMISSION_MODE ?? 'workspace-write')"
@@ -467,6 +422,9 @@
467
422
  # open. (The comment sits below the inject line:
468
423
  # verify-workspace-attachment.mjs asserts the name→inject distance.)
469
424
  config:
425
+ # `provider` + `model` are the deployment DEFAULT route (used until a
426
+ # `/model` pick is persisted in ~/.dsh-tui/model.json, which then wins
427
+ # whole); a half-pinned pair is ignored outright (issue #67).
470
428
  provider: deepseek-official
471
429
  # Alt-screen fullscreen 布局:应用内鼠标选区(选择即复制, OSC 52 +
472
430
  # wl-copy/xclip/xsel 兜底)、滚轮滚动、双击选词/三击选行。出厂默认开启,
@@ -479,10 +437,15 @@
479
437
  terminalImages: true
480
438
  # diffLayout: auto
481
439
  # mermaidDiagrams: true
440
+ # 任务完成通知:off / unfocused(默认)/ always;方式:auto(默认)/ osc9 / bel。
441
+ # taskNotifications: unfocused
442
+ # notificationMethod: auto
482
443
  # 回复中 LaTeX 公式的显示方式:auto(默认,目前为 Unicode)/ image(支持图形的终端里块级公式显示为图片)/ unicode / source(保留源码)。/settings 可实时改。
483
444
  # mathRendering: auto
484
445
  # 每个请求实际生效的推理强度,按当前路由的 adapter 档位校验
485
446
  #(deepseek: off/low/high/max);非法值回落 adapter 默认。
447
+ # 这是部署默认值:上一次 /effort 的持久化选择(~/.dsh-tui/effort.json)
448
+ # 优先于它,它只决定"还没有选择过"的会话。
486
449
  effort: max
487
450
  # Shift+Tab session-mode cycle (array order IS the cycle order;
488
451
  # absent → the built-in default/plan/full trio below). Each entry
@@ -503,9 +466,10 @@
503
466
  # plan: false
504
467
  # sandbox: danger-full-access
505
468
  # approval: never
506
- # Static preset choice (DSH_TUI_PRESET overrides): wins over the
507
- # persisted `/preset` preference (~/.dsh-tui/agent-preset.json), which
508
- # wins over the roster default (standard).
469
+ # Deployment default for the Agent preset: the persisted `/preset`
470
+ # preference (~/.dsh-tui/agent-preset.json) outranks it, and
471
+ # DSH_TUI_PRESET (this run's explicit instruction) outranks both; the
472
+ # roster default (standard) closes the chain.
509
473
  preset: !!js process.env.DSH_TUI_PRESET ?? undefined
510
474
  workspace: !!js process.env.DSH_TUI_WORKSPACE_TARGET ?? undefined
511
475
  sessionId: !!js process.env.DSH_TUI_RESUME_SESSION ?? undefined
package/cordis.yml CHANGED
@@ -64,12 +64,16 @@
64
64
  # 以下为 /settings 可改的显示设置;每项说明与默认值见应用内 /settings 屏。
65
65
  terminalImages: true
66
66
  # mermaidDiagrams: true
67
+ # 任务完成通知:off / unfocused(默认)/ always;方式:auto(默认)/ osc9 / bel。
68
+ # taskNotifications: unfocused
69
+ # notificationMethod: auto
67
70
  # 回复中 LaTeX 公式的显示方式:auto(默认,目前为 Unicode)/ image(支持图形的终端里块级公式显示为图片)/ unicode / source(保留源码)。/settings 可实时改。
68
71
  # mathRendering: auto
69
72
  # Reasoning effort applied to every request, validated against the live
70
73
  # route's adapter levels. An unlisted level falls back to the adapter
71
- # default; this wins over the persisted /effort choice and seeds the
72
- # startup header/statusline.
74
+ # default. This is the deployment DEFAULT for sessions that carry no
75
+ # choice of their own: the persisted /effort pick (last session's level)
76
+ # outranks it, and it seeds the startup header/statusline.
73
77
  effort: max
74
78
  # Shift+Tab 会话模式循环(数组顺序即循环顺序;缺省为下面三档)。
75
79
  # 每档可声明 plan(计划模式开/关)、sandbox(read-only/
@@ -18,7 +18,13 @@ You need:
18
18
  entry or `/kernel`) and press Enter on the dim Claude row — the wizard
19
19
  locates the profile directory and installs the pinned SDK via pnpm; the row
20
20
  lights up when it finishes (standalone builds and profile-less launches get
21
- manual instructions). The manual equivalent, run once in the dsh-tui profile
21
+ manual instructions). Before installing, the wizard pins the profile's pnpm
22
+ store to a stable path (storeDir: ../../.pnpm-store, written into
23
+ pnpm-workspace.yaml), so store drift caused by environment overrides (a
24
+ sandbox or relay that redirected XDG_DATA_HOME, and the like) cannot recur;
25
+ if the drift predates the install, the installer rebuilds the dependencies
26
+ automatically and retries — no manual cleanup needed. The manual equivalent,
27
+ run once in the dsh-tui profile
22
28
  directory (`~/.dsh/profiles/dsh-tui`, or `$DSH_HOME/profiles/dsh-tui` when
23
29
  `DSH_HOME` is set):
24
30
 
@@ -27,9 +33,16 @@ You need:
27
33
  ```
28
34
 
29
35
  - A Claude credential; see "Signing in" below.
30
- - The `claude` command is optional: a working `claude` on `PATH` is used (same
31
- version and session store as the CLI you already use), otherwise the SDK's
32
- bundled binary.
36
+ - The `claude` command is optional: dsh-TUI probes an **explicitly specified
37
+ executable path** (an environment variable, used as set, with no version check;
38
+ the variable name is in [Agent backends](agent-backend-design.md) (Chinese)) → a
39
+ `claude` on `PATH` → the native installer's directory under your home
40
+ (`%USERPROFILE%\.local\bin\claude.exe` on Windows, `~/.local/bin/claude` on
41
+ POSIX), and a `PATH` hit still wins; every candidate has to launch and report a
42
+ version before it is adopted (same version and session store as the CLI you
43
+ already use), and only when none does is the SDK's bundled binary used. When the
44
+ SDK is missing but a local Claude Code exists, the install wizard's confirmation
45
+ pane reports the CLI it found.
33
46
 
34
47
  To pick the backend, use any of:
35
48
 
@@ -37,8 +50,13 @@ To pick the backend, use any of:
37
50
  `/kernel` inside a session, which open the kernel picker. Picking the other
38
51
  kernel remembers the choice (`~/.dsh-tui/kernel.json`) and restarts dsh-TUI
39
52
  into a new session on it; the old session stays in `/resume`. A running turn
40
- blocks the switch. Without the SDK or a credential the picker marks Claude as
41
- *Not installed* or *Not signed in*.
53
+ blocks the switch. Without the SDK the picker marks Claude as *Not installed*;
54
+ an undetected credential does **not** block the pick — a key may perfectly well
55
+ live where detection cannot see it (the Claude settings' `env`, an
56
+ `apiKeyHelper`, a relay channel). The row stays selectable (the bottom-right
57
+ plate never shows sign-in state; the picker's subtitle says *Not signed in*).
58
+ The CLI applies its own configuration after start; `/login` covers a
59
+ subscription sign-in in-session, `/channel` the relay route.
42
60
  - `dsh-tui --backend claude` (this launch only).
43
61
  - `backend: claude` in the dsh-tui config row.
44
62
 
@@ -98,7 +116,7 @@ Works, served by Claude:
98
116
  Not available (hidden from completion; typing one shows a notice and nothing is
99
117
  sent to the model): `/tree`, `/agentview`, `/bg`, `/home`, `/workspace`,
100
118
  `/preset`, `/provider`, `/balance`, `/config`, `/reload`,
101
- `/setup`, `/migrate`, `/skills`, `/plugins`, `/hooks`, `/add-dir`,
119
+ `/setup`, `/migrate`, `/skills`, `/plugin`, `/hooks`, `/add-dir`,
102
120
  `/goal` (Claude has no goal capability). Other commands the DSH composition
103
121
  registers (such as `/plan`) do not appear either.
104
122
 
@@ -151,6 +169,12 @@ a notice, so a cloned repository cannot silently switch off every check.
151
169
  conversation continues), `Ctrl+R` renames, `Ctrl+D` deletes; the open session and
152
170
  one another dsh-TUI terminal is using cannot be deleted. Pins are kept per
153
171
  backend.
172
+ Reopening or restarting first paints the last complete list while the SDK refreshes it.
173
+ First-paint snapshots are isolated by Claude configuration directory. Without a snapshot,
174
+ up to 32 recent sessions from the SDK's default project scope appear first, including
175
+ the current directory and Git worktrees in the same repository, then the complete
176
+ project and other projects. A failed all-projects read retains the project's worktree
177
+ sessions. Failed reads preserve the last complete snapshot.
154
178
  - From a shell: `dsh-tui --backend claude --resume <id>`; without an id it resumes
155
179
  the last Claude session this install used. dsh-TUI prints that command on exit.
156
180
  A session another dsh-TUI terminal has open is refused, and a `--resume` that
@@ -193,6 +217,19 @@ their prompts carried.
193
217
  ## Known limitations
194
218
 
195
219
  - One dsh-TUI process runs one backend; switching restarts through `/kernel`.
220
+ - On Claude, `dsh-tui` starts the TUI from the package's own entry and
221
+ composes only a light profile (this package plus the third-party plugins the
222
+ profile declares, without DSH's agent core): the screen appears first and sending waits until
223
+ the session has opened. Until then Enter keeps the draft and says the kernel
224
+ is still starting, and a command-line prompt is sent once the session opens;
225
+ a failed open says why (the landing page closes to show it) and `/new`
226
+ retries. Third-party
227
+ DSH/Cordis plugins (themes, panels, decision hooks) load and join once the
228
+ screen is up; a plugin that needs DSH's own services (agents, tools, the LLM
229
+ layer) does not activate on this kernel. `DSH_TUI_HOST_ENTRY=0` goes back to
230
+ starting through `dsh --profile dsh-tui`. (The DSH kernel starts from the
231
+ package's entry by default too, but composes the whole DSH profile into that
232
+ process.)
196
233
  - In a Claude session the side panel's workspace panel reports it is unsupported
197
234
  and the trajectory panel stays empty.
198
235
  - No `/add-dir`; the refusal dialog offers only *Retry* and *Cancel*; an MCP