@deepseek-harness-tui/dsh-tui 0.11.1 → 0.12.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 (531) hide show
  1. package/README.md +70 -24
  2. package/assets/whale-girl/whale-girl-dark.png +0 -0
  3. package/assets/whale-girl/whale-girl-happy.png +0 -0
  4. package/assets/whale-girl/whale-girl.png +0 -0
  5. package/bin/dsh-tui.js +93 -6
  6. package/cordis.patch.yml +63 -22
  7. package/cordis.yml +3 -2
  8. package/guide/dsh-tui-guide/SKILL.md +37 -0
  9. package/guide/dsh-tui-guide/configuration.en.md +410 -0
  10. package/guide/dsh-tui-guide/configuration.md +349 -0
  11. package/guide/dsh-tui-guide/getting-started.en.md +398 -0
  12. package/guide/dsh-tui-guide/getting-started.md +397 -0
  13. package/guide/dsh-tui-guide/interaction.en.md +674 -0
  14. package/guide/dsh-tui-guide/interaction.md +747 -0
  15. package/guide/dsh-tui-guide/migrate.en.md +166 -0
  16. package/guide/dsh-tui-guide/migrate.md +132 -0
  17. package/guide/dsh-tui-guide/plugins.en.md +68 -0
  18. package/guide/dsh-tui-guide/plugins.md +56 -0
  19. package/guide/dsh-tui-guide/themes.en.md +192 -0
  20. package/guide/dsh-tui-guide/themes.md +185 -0
  21. package/guide/dsh-tui-guide/user-guide.en.md +608 -0
  22. package/guide/dsh-tui-guide/user-guide.md +586 -0
  23. package/guide/dsh-tui-guide/vscode.en.md +301 -0
  24. package/guide/dsh-tui-guide/vscode.md +272 -0
  25. package/lib/settings.json +1272 -0
  26. package/lib/types/adapter/channel/ui-policy.d.ts +10 -2
  27. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  28. package/lib/types/adapter/channel/ui-policy.js +17 -0
  29. package/lib/types/adapter/kernel/replay.d.ts.map +1 -1
  30. package/lib/types/adapter/kernel/replay.js +2 -0
  31. package/lib/types/adapter/ports/channel-display.d.ts +12 -0
  32. package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
  33. package/lib/types/adapter/ports/channel-session.d.ts +38 -0
  34. package/lib/types/adapter/ports/channel-session.d.ts.map +1 -1
  35. package/lib/types/adapter/ports/channel-settings.d.ts +14 -1
  36. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  37. package/lib/types/adapter/ports/channel-ui.d.ts +75 -6
  38. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  39. package/lib/types/adapter/ports/channel-view.d.ts +86 -9
  40. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  41. package/lib/types/commands.d.ts.map +1 -1
  42. package/lib/types/commands.js +2 -0
  43. package/lib/types/components/BalanceReportRow.d.ts +10 -2
  44. package/lib/types/components/BalanceReportRow.d.ts.map +1 -1
  45. package/lib/types/components/BalanceReportRow.js +18 -4
  46. package/lib/types/components/Chat/JobCard.d.ts +9 -0
  47. package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
  48. package/lib/types/components/Chat/JobCard.js +42 -15
  49. package/lib/types/components/Chat/SubagentMessage.js +6 -6
  50. package/lib/types/components/CompactionStatusRow.d.ts +24 -0
  51. package/lib/types/components/CompactionStatusRow.d.ts.map +1 -0
  52. package/lib/types/components/CompactionStatusRow.js +72 -0
  53. package/lib/types/components/GoalTodoPanel.js +2 -2
  54. package/lib/types/components/HelpMenu.d.ts +2 -2
  55. package/lib/types/components/HelpMenu.d.ts.map +1 -1
  56. package/lib/types/components/HelpMenu.js +5 -4
  57. package/lib/types/components/InlineMathParagraph.d.ts +22 -0
  58. package/lib/types/components/InlineMathParagraph.d.ts.map +1 -0
  59. package/lib/types/components/InlineMathParagraph.js +178 -0
  60. package/lib/types/components/JobsPanel.d.ts.map +1 -1
  61. package/lib/types/components/JobsPanel.js +80 -33
  62. package/lib/types/components/LogoV2.d.ts +41 -3
  63. package/lib/types/components/LogoV2.d.ts.map +1 -1
  64. package/lib/types/components/LogoV2.js +148 -24
  65. package/lib/types/components/Markdown.d.ts +10 -3
  66. package/lib/types/components/Markdown.d.ts.map +1 -1
  67. package/lib/types/components/Markdown.js +47 -14
  68. package/lib/types/components/MathBlock.d.ts +13 -0
  69. package/lib/types/components/MathBlock.d.ts.map +1 -0
  70. package/lib/types/components/MathBlock.js +136 -0
  71. package/lib/types/components/MessageList.d.ts +10 -1
  72. package/lib/types/components/MessageList.d.ts.map +1 -1
  73. package/lib/types/components/MessageList.js +16 -7
  74. package/lib/types/components/MigratePicker.d.ts +30 -0
  75. package/lib/types/components/MigratePicker.d.ts.map +1 -0
  76. package/lib/types/components/MigratePicker.js +38 -0
  77. package/lib/types/components/PresetPicker.d.ts +4 -0
  78. package/lib/types/components/PresetPicker.d.ts.map +1 -1
  79. package/lib/types/components/PresetPicker.js +5 -1
  80. package/lib/types/components/PromptInput.d.ts +17 -0
  81. package/lib/types/components/PromptInput.d.ts.map +1 -1
  82. package/lib/types/components/PromptInput.js +60 -8
  83. package/lib/types/components/SplitDiffView.d.ts.map +1 -1
  84. package/lib/types/components/SplitDiffView.js +2 -1
  85. package/lib/types/components/StarPrompt.d.ts +59 -0
  86. package/lib/types/components/StarPrompt.d.ts.map +1 -0
  87. package/lib/types/components/StarPrompt.js +326 -0
  88. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
  89. package/lib/types/components/StreamingMarkdown.js +20 -3
  90. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  91. package/lib/types/components/SubagentCard.js +8 -8
  92. package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
  93. package/lib/types/components/SubagentDetailScene.js +108 -10
  94. package/lib/types/components/TimelineRail.d.ts.map +1 -1
  95. package/lib/types/components/TimelineRail.js +9 -1
  96. package/lib/types/components/Whale.d.ts +17 -8
  97. package/lib/types/components/Whale.d.ts.map +1 -1
  98. package/lib/types/components/Whale.js +25 -15
  99. package/lib/types/components/WhaleGirl.d.ts +35 -0
  100. package/lib/types/components/WhaleGirl.d.ts.map +1 -0
  101. package/lib/types/components/WhaleGirl.js +50 -0
  102. package/lib/types/components/WorkingSpinner.d.ts +4 -1
  103. package/lib/types/components/WorkingSpinner.d.ts.map +1 -1
  104. package/lib/types/components/WorkingSpinner.js +2 -2
  105. package/lib/types/components/bigfont.d.ts +47 -18
  106. package/lib/types/components/bigfont.d.ts.map +1 -1
  107. package/lib/types/components/bigfont.js +55 -40
  108. package/lib/types/components/design-system/ThemeProvider.d.ts +6 -0
  109. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  110. package/lib/types/components/design-system/ThemeProvider.js +40 -1
  111. package/lib/types/components/maidPortrait.d.ts +44 -0
  112. package/lib/types/components/maidPortrait.d.ts.map +1 -0
  113. package/lib/types/components/maidPortrait.js +178 -0
  114. package/lib/types/components/mathPreview.d.ts +25 -0
  115. package/lib/types/components/mathPreview.d.ts.map +1 -0
  116. package/lib/types/components/mathPreview.js +48 -0
  117. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
  118. package/lib/types/components/messages/AssistantThinkingMessage.js +6 -5
  119. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  120. package/lib/types/components/messages/AssistantToolUseMessage.js +3 -2
  121. package/lib/types/components/messages/TranscriptImages.d.ts.map +1 -1
  122. package/lib/types/components/messages/TranscriptImages.js +11 -1
  123. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +14 -2
  124. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  125. package/lib/types/components/questions/AskUserQuestionPanel.js +80 -38
  126. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  127. package/lib/types/components/questions/PlanReviewPanel.js +3 -3
  128. package/lib/types/components/sessions/ForeignSessionRow.d.ts +34 -0
  129. package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -0
  130. package/lib/types/components/sessions/ForeignSessionRow.js +43 -0
  131. package/lib/types/components/sessions/SourceTabs.d.ts +52 -0
  132. package/lib/types/components/sessions/SourceTabs.d.ts.map +1 -0
  133. package/lib/types/components/sessions/SourceTabs.js +70 -0
  134. package/lib/types/components/splashEggs.d.ts +56 -0
  135. package/lib/types/components/splashEggs.d.ts.map +1 -0
  136. package/lib/types/components/splashEggs.js +67 -0
  137. package/lib/types/components/splashFonts.d.ts +119 -0
  138. package/lib/types/components/splashFonts.d.ts.map +1 -0
  139. package/lib/types/components/splashFonts.js +267 -0
  140. package/lib/types/components/splashLayout.d.ts +41 -0
  141. package/lib/types/components/splashLayout.d.ts.map +1 -0
  142. package/lib/types/components/splashLayout.js +40 -0
  143. package/lib/types/components/trajectory/MiniWake.d.ts +11 -1
  144. package/lib/types/components/trajectory/MiniWake.d.ts.map +1 -1
  145. package/lib/types/components/trajectory/MiniWake.js +9 -3
  146. package/lib/types/components/whaleGirlSprite.d.ts +17 -0
  147. package/lib/types/components/whaleGirlSprite.d.ts.map +1 -0
  148. package/lib/types/components/whaleGirlSprite.js +47 -0
  149. package/lib/types/deepseekPricing.d.ts +74 -0
  150. package/lib/types/deepseekPricing.d.ts.map +1 -1
  151. package/lib/types/deepseekPricing.js +110 -11
  152. package/lib/types/dsh-adapter/channel/action-readiness.d.ts +1 -1
  153. package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
  154. package/lib/types/dsh-adapter/channel/action-readiness.js +6 -1
  155. package/lib/types/dsh-adapter/channel/background-action.d.ts +1 -0
  156. package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
  157. package/lib/types/dsh-adapter/channel/background-action.js +1 -0
  158. package/lib/types/dsh-adapter/channel/binding-events.d.ts +8 -9
  159. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  160. package/lib/types/dsh-adapter/channel/binding-events.js +69 -21
  161. package/lib/types/dsh-adapter/channel/compaction.d.ts +2 -1
  162. package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
  163. package/lib/types/dsh-adapter/channel/compaction.js +35 -2
  164. package/lib/types/dsh-adapter/channel/external-commands.d.ts.map +1 -1
  165. package/lib/types/dsh-adapter/channel/external-commands.js +8 -2
  166. package/lib/types/dsh-adapter/channel/job-projection.d.ts +1 -0
  167. package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
  168. package/lib/types/dsh-adapter/channel/job-projection.js +88 -3
  169. package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -1
  170. package/lib/types/dsh-adapter/channel/local-actions.js +6 -1
  171. package/lib/types/dsh-adapter/channel/mode-actions.d.ts +13 -0
  172. package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
  173. package/lib/types/dsh-adapter/channel/mode-actions.js +48 -7
  174. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  175. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +25 -9
  176. package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
  177. package/lib/types/dsh-adapter/channel/model-switch.js +5 -1
  178. package/lib/types/dsh-adapter/channel/paths.d.ts.map +1 -1
  179. package/lib/types/dsh-adapter/channel/paths.js +7 -1
  180. package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
  181. package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
  182. package/lib/types/dsh-adapter/channel/preferences.js +31 -5
  183. package/lib/types/dsh-adapter/channel/projection.d.ts +1 -2
  184. package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
  185. package/lib/types/dsh-adapter/channel/projection.js +127 -17
  186. package/lib/types/dsh-adapter/channel/question-record.d.ts +76 -0
  187. package/lib/types/dsh-adapter/channel/question-record.d.ts.map +1 -0
  188. package/lib/types/dsh-adapter/channel/question-record.js +107 -0
  189. package/lib/types/dsh-adapter/channel/session-lineage.d.ts +42 -0
  190. package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +1 -0
  191. package/lib/types/dsh-adapter/channel/session-lineage.js +51 -0
  192. package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +2 -0
  193. package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -1
  194. package/lib/types/dsh-adapter/channel/session-live-adoption.js +9 -3
  195. package/lib/types/dsh-adapter/channel/session-metadata.d.ts +2 -1
  196. package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
  197. package/lib/types/dsh-adapter/channel/session-metadata.js +39 -7
  198. package/lib/types/dsh-adapter/channel/session-reset.d.ts +1 -1
  199. package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
  200. package/lib/types/dsh-adapter/channel/session-reset.js +7 -0
  201. package/lib/types/dsh-adapter/channel/session-resume.d.ts +1 -0
  202. package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
  203. package/lib/types/dsh-adapter/channel/session-resume.js +4 -2
  204. package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
  205. package/lib/types/dsh-adapter/channel/settings-host.js +8 -0
  206. package/lib/types/dsh-adapter/channel/state.d.ts +17 -2
  207. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  208. package/lib/types/dsh-adapter/channel/state.js +6 -1
  209. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +30 -35
  210. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  211. package/lib/types/dsh-adapter/channel/subagent-projection.js +143 -4
  212. package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
  213. package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
  214. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  215. package/lib/types/dsh-adapter/channel.js +35 -5
  216. package/lib/types/dsh-adapter/compat/messages.d.ts +6 -0
  217. package/lib/types/dsh-adapter/compat/messages.d.ts.map +1 -1
  218. package/lib/types/dsh-adapter/compat/messages.js +9 -0
  219. package/lib/types/dsh-adapter/contract.d.ts +6 -5
  220. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  221. package/lib/types/dsh-adapter/contract.js +14 -6
  222. package/lib/types/dsh-adapter/index.d.ts +36 -1
  223. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  224. package/lib/types/dsh-adapter/index.js +22 -6
  225. package/lib/types/dsh-adapter/jobs.d.ts +82 -16
  226. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  227. package/lib/types/dsh-adapter/jobs.js +104 -9
  228. package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts +3 -0
  229. package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts.map +1 -0
  230. package/lib/types/dsh-adapter/migrate/adapters/claude-code.js +131 -0
  231. package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts +17 -0
  232. package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts.map +1 -0
  233. package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.js +329 -0
  234. package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts +3 -0
  235. package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts.map +1 -0
  236. package/lib/types/dsh-adapter/migrate/adapters/codex.js +102 -0
  237. package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts +16 -0
  238. package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts.map +1 -0
  239. package/lib/types/dsh-adapter/migrate/adapters/codex.parse.js +289 -0
  240. package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts +3 -0
  241. package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts.map +1 -0
  242. package/lib/types/dsh-adapter/migrate/adapters/grok-build.js +117 -0
  243. package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts +13 -0
  244. package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts.map +1 -0
  245. package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.js +178 -0
  246. package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts +3 -0
  247. package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts.map +1 -0
  248. package/lib/types/dsh-adapter/migrate/adapters/omp.js +133 -0
  249. package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts +60 -0
  250. package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts.map +1 -0
  251. package/lib/types/dsh-adapter/migrate/adapters/scan-fs.js +178 -0
  252. package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts +8 -0
  253. package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts.map +1 -0
  254. package/lib/types/dsh-adapter/migrate/adapters/scan.js +40 -0
  255. package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts +3 -0
  256. package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts.map +1 -0
  257. package/lib/types/dsh-adapter/migrate/adapters/zcode.js +93 -0
  258. package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts +9 -0
  259. package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts.map +1 -0
  260. package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.js +89 -0
  261. package/lib/types/dsh-adapter/migrate/bin-path.d.ts +6 -0
  262. package/lib/types/dsh-adapter/migrate/bin-path.d.ts.map +1 -0
  263. package/lib/types/dsh-adapter/migrate/bin-path.js +30 -0
  264. package/lib/types/dsh-adapter/migrate/browse.d.ts +42 -0
  265. package/lib/types/dsh-adapter/migrate/browse.d.ts.map +1 -0
  266. package/lib/types/dsh-adapter/migrate/browse.js +90 -0
  267. package/lib/types/dsh-adapter/migrate/cli.d.ts +9 -0
  268. package/lib/types/dsh-adapter/migrate/cli.d.ts.map +1 -0
  269. package/lib/types/dsh-adapter/migrate/cli.js +106 -0
  270. package/lib/types/dsh-adapter/migrate/import-one.d.ts +89 -0
  271. package/lib/types/dsh-adapter/migrate/import-one.d.ts.map +1 -0
  272. package/lib/types/dsh-adapter/migrate/import-one.js +133 -0
  273. package/lib/types/dsh-adapter/migrate/index.d.ts +35 -0
  274. package/lib/types/dsh-adapter/migrate/index.d.ts.map +1 -0
  275. package/lib/types/dsh-adapter/migrate/index.js +107 -0
  276. package/lib/types/dsh-adapter/migrate/parse/injection.d.ts +40 -0
  277. package/lib/types/dsh-adapter/migrate/parse/injection.d.ts.map +1 -0
  278. package/lib/types/dsh-adapter/migrate/parse/injection.js +127 -0
  279. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +28 -0
  280. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -0
  281. package/lib/types/dsh-adapter/migrate/parse/jsonl.js +40 -0
  282. package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts +28 -0
  283. package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts.map +1 -0
  284. package/lib/types/dsh-adapter/migrate/parse/role-turns.js +50 -0
  285. package/lib/types/dsh-adapter/migrate/parse/title.d.ts +18 -0
  286. package/lib/types/dsh-adapter/migrate/parse/title.d.ts.map +1 -0
  287. package/lib/types/dsh-adapter/migrate/parse/title.js +29 -0
  288. package/lib/types/dsh-adapter/migrate/parse/tools.d.ts +62 -0
  289. package/lib/types/dsh-adapter/migrate/parse/tools.d.ts.map +1 -0
  290. package/lib/types/dsh-adapter/migrate/parse/tools.js +110 -0
  291. package/lib/types/dsh-adapter/migrate/picker.d.ts +64 -0
  292. package/lib/types/dsh-adapter/migrate/picker.d.ts.map +1 -0
  293. package/lib/types/dsh-adapter/migrate/picker.js +86 -0
  294. package/lib/types/dsh-adapter/migrate/recent-agents.d.ts +40 -0
  295. package/lib/types/dsh-adapter/migrate/recent-agents.d.ts.map +1 -0
  296. package/lib/types/dsh-adapter/migrate/recent-agents.js +100 -0
  297. package/lib/types/dsh-adapter/migrate/sessionize.d.ts +39 -0
  298. package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -0
  299. package/lib/types/dsh-adapter/migrate/sessionize.js +271 -0
  300. package/lib/types/dsh-adapter/migrate/types.d.ts +176 -0
  301. package/lib/types/dsh-adapter/migrate/types.d.ts.map +1 -0
  302. package/lib/types/dsh-adapter/migrate/types.js +11 -0
  303. package/lib/types/dsh-adapter/migrate/uuid.d.ts +7 -0
  304. package/lib/types/dsh-adapter/migrate/uuid.d.ts.map +1 -0
  305. package/lib/types/dsh-adapter/migrate/uuid.js +25 -0
  306. package/lib/types/dsh-adapter/oauth/bonus.d.ts +27 -0
  307. package/lib/types/dsh-adapter/oauth/bonus.d.ts.map +1 -0
  308. package/lib/types/dsh-adapter/oauth/bonus.js +69 -0
  309. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.d.ts +2 -1
  310. package/lib/types/dsh-adapter/oauth/command.d.ts.map +1 -0
  311. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.js +7 -4
  312. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.d.ts +13 -10
  313. package/lib/types/dsh-adapter/oauth/credentials.d.ts.map +1 -0
  314. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.js +61 -23
  315. package/lib/types/dsh-adapter/oauth/deepseek.d.ts +39 -0
  316. package/lib/types/dsh-adapter/oauth/deepseek.d.ts.map +1 -0
  317. package/lib/types/dsh-adapter/oauth/deepseek.js +189 -0
  318. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.d.ts +24 -16
  319. package/lib/types/dsh-adapter/oauth/index.d.ts.map +1 -0
  320. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.js +34 -20
  321. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/interaction.d.ts +14 -12
  322. package/lib/types/dsh-adapter/oauth/interaction.d.ts.map +1 -0
  323. package/lib/types/dsh-adapter/oauth/interaction.js +283 -0
  324. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.d.ts +2 -1
  325. package/lib/types/dsh-adapter/oauth/opener.d.ts.map +1 -0
  326. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.js +1 -1
  327. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.d.ts +10 -3
  328. package/lib/types/dsh-adapter/oauth/pi-ai.d.ts.map +1 -0
  329. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.js +8 -3
  330. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.d.ts +6 -3
  331. package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -0
  332. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.js +11 -3
  333. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.d.ts +14 -7
  334. package/lib/types/dsh-adapter/oauth/service.d.ts.map +1 -0
  335. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.js +82 -17
  336. package/lib/types/dsh-adapter/plugin.d.ts +12 -3
  337. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  338. package/lib/types/dsh-adapter/plugin.js +215 -376
  339. package/lib/types/dsh-adapter/presets.d.ts +6 -4
  340. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  341. package/lib/types/dsh-adapter/presets.js +6 -4
  342. package/lib/types/dsh-adapter/providerWizard.d.ts +17 -0
  343. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  344. package/lib/types/dsh-adapter/providerWizard.js +260 -68
  345. package/lib/types/dsh-adapter/questions.d.ts +22 -15
  346. package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
  347. package/lib/types/dsh-adapter/questions.js +47 -45
  348. package/lib/types/dsh-adapter/sessions/digest.d.ts +11 -6
  349. package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -1
  350. package/lib/types/dsh-adapter/sessions/digest.js +20 -13
  351. package/lib/types/dsh-adapter/sessions/frames.d.ts +3 -1
  352. package/lib/types/dsh-adapter/sessions/frames.d.ts.map +1 -1
  353. package/lib/types/dsh-adapter/sessions/frames.js +5 -4
  354. package/lib/types/dsh-adapter/sessions/list.d.ts +6 -1
  355. package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
  356. package/lib/types/dsh-adapter/sessions/list.js +188 -164
  357. package/lib/types/dsh-adapter/sessions/recovery.d.ts +16 -0
  358. package/lib/types/dsh-adapter/sessions/recovery.d.ts.map +1 -0
  359. package/lib/types/dsh-adapter/sessions/recovery.js +108 -0
  360. package/lib/types/dsh-adapter/sessions/snapshot.d.ts +7 -0
  361. package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -0
  362. package/lib/types/dsh-adapter/sessions/snapshot.js +90 -0
  363. package/lib/types/dsh-adapter/sessions/store.d.ts +10 -4
  364. package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
  365. package/lib/types/dsh-adapter/sessions/store.js +62 -25
  366. package/lib/types/dsh-adapter/sideQuestion.d.ts +41 -2
  367. package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
  368. package/lib/types/dsh-adapter/sideQuestion.js +98 -2
  369. package/lib/types/dsh-adapter/subagents.d.ts +29 -3
  370. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  371. package/lib/types/dsh-adapter/subagents.js +87 -3
  372. package/lib/types/herdr.d.ts +2 -0
  373. package/lib/types/herdr.d.ts.map +1 -1
  374. package/lib/types/herdr.js +9 -3
  375. package/lib/types/i18n.d.ts +598 -60
  376. package/lib/types/i18n.d.ts.map +1 -1
  377. package/lib/types/i18n.js +198 -31
  378. package/lib/types/ink/components/App.d.ts +2 -2
  379. package/lib/types/ink/components/App.d.ts.map +1 -1
  380. package/lib/types/ink/components/App.js +15 -2
  381. package/lib/types/ink/components/Image.d.ts +14 -1
  382. package/lib/types/ink/components/Image.d.ts.map +1 -1
  383. package/lib/types/ink/components/Image.js +2 -2
  384. package/lib/types/ink/events/input-event.js +3 -3
  385. package/lib/types/ink/hooks/use-terminal-images.d.ts +12 -0
  386. package/lib/types/ink/hooks/use-terminal-images.d.ts.map +1 -1
  387. package/lib/types/ink/hooks/use-terminal-images.js +13 -0
  388. package/lib/types/ink/ink.d.ts +6 -0
  389. package/lib/types/ink/ink.d.ts.map +1 -1
  390. package/lib/types/ink/ink.js +16 -1
  391. package/lib/types/ink/kitty-graphics.d.ts +44 -3
  392. package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
  393. package/lib/types/ink/kitty-graphics.js +184 -23
  394. package/lib/types/ink/output.d.ts +24 -2
  395. package/lib/types/ink/output.d.ts.map +1 -1
  396. package/lib/types/ink/output.js +83 -5
  397. package/lib/types/ink/parse-keypress.d.ts +61 -1
  398. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  399. package/lib/types/ink/parse-keypress.js +764 -93
  400. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  401. package/lib/types/ink/render-node-to-output.js +8 -1
  402. package/lib/types/ink/screen.d.ts +24 -0
  403. package/lib/types/ink/screen.d.ts.map +1 -1
  404. package/lib/types/ink/screen.js +89 -0
  405. package/lib/types/ink/selection.d.ts +40 -18
  406. package/lib/types/ink/selection.d.ts.map +1 -1
  407. package/lib/types/ink/selection.js +142 -30
  408. package/lib/types/ink/sixel-codec.d.ts +12 -1
  409. package/lib/types/ink/sixel-codec.d.ts.map +1 -1
  410. package/lib/types/ink/sixel-codec.js +29 -5
  411. package/lib/types/ink/sixel-graphics.d.ts.map +1 -1
  412. package/lib/types/ink/sixel-graphics.js +5 -3
  413. package/lib/types/ink/styles.d.ts +9 -0
  414. package/lib/types/ink/styles.d.ts.map +1 -1
  415. package/lib/types/ink/terminal-image.d.ts +8 -0
  416. package/lib/types/ink/terminal-image.d.ts.map +1 -1
  417. package/lib/types/ink/terminal-querier.d.ts +32 -1
  418. package/lib/types/ink/terminal-querier.d.ts.map +1 -1
  419. package/lib/types/ink/terminal-querier.js +54 -2
  420. package/lib/types/ink/timeline-rail.d.ts +5 -0
  421. package/lib/types/ink/timeline-rail.d.ts.map +1 -1
  422. package/lib/types/ink/update-overflow-guard.d.ts +24 -0
  423. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  424. package/lib/types/ink/update-overflow-guard.js +25 -3
  425. package/lib/types/math/inline-layout.d.ts +29 -0
  426. package/lib/types/math/inline-layout.d.ts.map +1 -0
  427. package/lib/types/math/inline-layout.js +106 -0
  428. package/lib/types/math/layout.d.ts +58 -0
  429. package/lib/types/math/layout.d.ts.map +1 -0
  430. package/lib/types/math/layout.js +59 -0
  431. package/lib/types/math/renderer.d.ts +64 -0
  432. package/lib/types/math/renderer.d.ts.map +1 -0
  433. package/lib/types/math/renderer.js +256 -0
  434. package/lib/types/minimalUiMode.d.ts +19 -0
  435. package/lib/types/minimalUiMode.d.ts.map +1 -0
  436. package/lib/types/minimalUiMode.js +23 -0
  437. package/lib/types/oauth.d.ts +5 -10
  438. package/lib/types/oauth.d.ts.map +1 -1
  439. package/lib/types/oauth.js +5 -10
  440. package/lib/types/screens/Chat.d.ts +17 -1
  441. package/lib/types/screens/Chat.d.ts.map +1 -1
  442. package/lib/types/screens/Chat.js +627 -54
  443. package/lib/types/screens/SessionSupervisor.d.ts +2 -1
  444. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  445. package/lib/types/screens/SessionSupervisor.js +156 -19
  446. package/lib/types/screens/Settings.d.ts.map +1 -1
  447. package/lib/types/screens/Settings.js +49 -11
  448. package/lib/types/screens/StatusLine.d.ts +4 -0
  449. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  450. package/lib/types/screens/StatusLine.js +57 -27
  451. package/lib/types/screens/chatOverlay.d.ts +5 -0
  452. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  453. package/lib/types/screens/chatOverlay.js +1 -0
  454. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +47 -0
  455. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -0
  456. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +65 -0
  457. package/lib/types/screens/sessionSupervisor/model.d.ts +12 -0
  458. package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
  459. package/lib/types/screens/sessionSupervisor/model.js +26 -0
  460. package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts +107 -0
  461. package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts.map +1 -0
  462. package/lib/types/screens/sessionSupervisor/useForeignSessions.js +312 -0
  463. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +4 -1
  464. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  465. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +97 -14
  466. package/lib/types/sessionHistory.d.ts +2 -2
  467. package/lib/types/sessionHistory.d.ts.map +1 -1
  468. package/lib/types/sessionHistory.js +31 -5
  469. package/lib/types/settings/definitions.d.ts +681 -0
  470. package/lib/types/settings/definitions.d.ts.map +1 -0
  471. package/lib/types/settings/definitions.js +511 -0
  472. package/lib/types/starAction.d.ts +44 -0
  473. package/lib/types/starAction.d.ts.map +1 -0
  474. package/lib/types/starAction.js +52 -0
  475. package/lib/types/terminal-utils/latex.d.ts +10 -0
  476. package/lib/types/terminal-utils/latex.d.ts.map +1 -0
  477. package/lib/types/terminal-utils/latex.js +1417 -0
  478. package/lib/types/terminal-utils/markdown.d.ts +3 -1
  479. package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
  480. package/lib/types/terminal-utils/markdown.js +26 -1
  481. package/lib/types/terminal-utils/math.d.ts +66 -0
  482. package/lib/types/terminal-utils/math.d.ts.map +1 -0
  483. package/lib/types/terminal-utils/math.js +337 -0
  484. package/lib/types/tips.d.ts.map +1 -1
  485. package/lib/types/tips.js +16 -4
  486. package/lib/types/tuiDisplayPrefs.d.ts +67 -0
  487. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  488. package/lib/types/tuiDisplayPrefs.js +59 -0
  489. package/lib/types/ui.d.ts +1 -1
  490. package/lib/types/ui.d.ts.map +1 -1
  491. package/lib/types/ui.js +1 -1
  492. package/lib/types/update.js +2 -2
  493. package/lib/types/usageStats.d.ts +98 -0
  494. package/lib/types/usageStats.d.ts.map +1 -0
  495. package/lib/types/usageStats.js +169 -0
  496. package/lib/types/utils/bmp.d.ts +17 -0
  497. package/lib/types/utils/bmp.d.ts.map +1 -0
  498. package/lib/types/utils/bmp.js +154 -0
  499. package/lib/types/utils/clipboard.d.ts +14 -2
  500. package/lib/types/utils/clipboard.d.ts.map +1 -1
  501. package/lib/types/utils/clipboard.js +143 -8
  502. package/lib/types/utils/fold-long-lines.d.ts.map +1 -1
  503. package/lib/types/utils/fold-long-lines.js +2 -1
  504. package/lib/types/utils/keymap.d.ts +4 -1
  505. package/lib/types/utils/keymap.d.ts.map +1 -1
  506. package/lib/types/utils/keymap.js +8 -0
  507. package/lib/types/utils/modifiers.d.ts +4 -3
  508. package/lib/types/utils/modifiers.d.ts.map +1 -1
  509. package/lib/types/utils/modifiers.js +4 -3
  510. package/lib/types/utils/pastedImagePath.d.ts +8 -0
  511. package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
  512. package/lib/types/utils/pastedImagePath.js +29 -5
  513. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/LICENSE +202 -0
  514. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/NOTICE +20 -0
  515. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/index.d.ts +16 -0
  516. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/bundled-packages.json +4 -0
  517. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs +20 -0
  518. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs.LEGAL.txt +35 -0
  519. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/package.json +29 -0
  520. package/package.json +127 -102
  521. package/presets/liangshen/agent.cordis.yml +4 -1
  522. package/presets/liangshen/preset.yml +1 -1
  523. package/lib/types/minimalMode.d.ts +0 -13
  524. package/lib/types/minimalMode.d.ts.map +0 -1
  525. package/lib/types/minimalMode.js +0 -17
  526. package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +0 -21
  527. package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +0 -143
  528. package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +0 -11
  529. package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +0 -44
  530. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +0 -193
  531. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +0 -69
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="docs/assets/logo.svg" alt="dsh-TUI - DeepSeek Harness terminal interface" width="560">
2
+ <img src="docs/assets/readme/logo-en.svg" alt="dsh-TUI animated whale logo" width="560">
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -27,13 +27,16 @@
27
27
  - **Pixel whale pet** — three startup intros, click to wake; freezes after the first task.
28
28
  - **Terminal-native UI** — streaming Markdown, tool cards, `/` and `@` completion, `#L12-14` ranges, history search, zh/en UI.
29
29
  - **Images** — Kitty/Sixel thumbnails, centered preview with zoom and pan, paste-time fitting, text fallback.
30
- - **Mermaid diagrams** — ```` ```mermaid ```` fences drawn as Unicode diagrams.
30
+ - **Mermaid diagrams** — ````mermaid ```` fences drawn as Unicode diagrams.
31
+ - **LaTeX math** — `$…$` and `$$…$$` formulas as Unicode text, fractions and limits stacked in display blocks; `mathRendering: image` typesets block and one-row inline formulas as terminal images on graphics terminals.
31
32
  - **Timeline rail** — every turn clickable; timeline / scrollbar / hidden gutter.
32
- - **Live state** — activity animation, context bar, TPS, cache hit rate, effort, tokens, Git and session metadata.
33
+ - **Live state** — activity animation, context bar, TPS, cache hit rate, effort, tokens, session cost estimate (main + subagents), Git and session metadata.
33
34
  - **One session manager** — `/resume` `/home` `/agentview` `/bg` `⌸`.
34
35
  - **Session workflow** — `/new` `/compact` `/export` `/btw`, model hot-switch, fork, rewind, vim, fullscreen draft editor.
35
36
  - **IDE selection channel** — a VS Code selection lands in the prompt.
36
37
  - **DSH integrations** — presets, skills, MCP, goals, todos, subagents, questionnaires.
38
+ - **Account sign-in** — the standard profile offers pi-ai OAuth for ChatGPT/Codex, Claude, and Grok (plus OpenAI direct and Meta Muse when available), and Host-owned DeepSeek browser sign-in as `deepseek-account` on DSH 0.2.0-rc.1+. Use `/provider` or `/auth` without another plugin.
39
+ A profile-only update from a global TUI patch that already mounts `dsh-tui-auth` can still start the official loopback callback listener on demand; fixed-port SSH forwarding still requires the global package to be aligned.
37
40
  - **Extensions** — browser interaction, computer use and more.
38
41
  - **Built for long sessions** — event-driven projection, virtualization, bounded caches.
39
42
 
@@ -42,20 +45,10 @@ Keys and commands: [Interaction and commands](docs/interaction.en.md). Everythin
42
45
  ## Preview
43
46
 
44
47
  <div align="center">
45
- <table>
46
- <tr>
47
- <td align="center" valign="middle" width="50%">
48
- <img src="screenshots/splash.png" alt="dsh-TUI conversation with the pixel-whale header" width="480">
49
- <br>
50
- <strong>Conversation with the pixel-whale header</strong>
51
- </td>
52
- <td align="center" valign="middle" width="50%">
53
- <img src="screenshots/ide-selection-badge.png" alt="IDE selection badge: live line count under the prompt" width="480">
54
- <br>
55
- <strong>Live IDE selection badge</strong>
56
- </td>
57
- </tr>
58
- </table>
48
+ <picture>
49
+ <source media="(max-width: 640px)" srcset="docs/assets/readme/preview-en-mobile.svg">
50
+ <img src="docs/assets/readme/preview-en.svg" alt="Recorded dsh-TUI session: welcome, completion, help and typing, with animated pixel whale." width="78%">
51
+ </picture>
59
52
  </div>
60
53
 
61
54
  ## Featured & Listed
@@ -89,10 +82,13 @@ daily** (TypeScript).
89
82
  ## Quick Start
90
83
 
91
84
  Prerequisites: [Node.js](https://nodejs.org/en) and
92
- [deepseek-harness](https://github.com/deepseek-ai/deepseek-harness), with
93
- `DEEPSEEK_API_KEY` configured.
85
+ [deepseek-harness](https://github.com/deepseek-ai/deepseek-harness).
86
+ The `deepseek-official` API-key route needs `DEEPSEEK_API_KEY`. On DSH
87
+ 0.2.0-rc.1+, the standard profile can instead use `/auth login deepseek-account`
88
+ and select the separate account route through `/model`. Other supported
89
+ accounts can sign in through `/provider` or `/auth` after startup.
94
90
 
95
- The primary compatibility target is DSH `0.1.7-rc.2`. This adapter supports its
91
+ The primary compatibility target is DSH `0.2.0-rc.2`. This adapter supports its
96
92
  Shell API, V4 session messages, declarative presets, and profile-backed settings;
97
93
  older supported hosts retain their compatibility paths. See [configuration](docs/configuration.en.md).
98
94
 
@@ -138,7 +134,35 @@ source builds, and troubleshooting, including migration from the former
138
134
  | `dsh-tui safe` | Read-only diagnostics, plugin inventory and repair guidance; `safe --rescue` builds a clean rescue profile |
139
135
  | `dsh-tui version` · `dsh-tui help` | Launcher and profile versions and usage; both work even without a `dsh` install |
140
136
 
141
- Other arguments go to `dsh --profile dsh-tui`. Safe mode: [Getting started](docs/getting-started.en.md).
137
+ Leading DSH options such as `--dump-config` and `--patch <path>` are forwarded
138
+ unchanged; other arguments go to the app in `dsh --profile dsh-tui`. Use
139
+ `dsh-tui -- --resume=sid-1 ./notes` to send `--resume=sid-1 ./notes` as literal
140
+ prompt text, without selecting a session or workspace. When invoking DSH
141
+ directly, use `dsh --profile dsh-tui -- -- --resume=sid-1 ./notes`: the first
142
+ `--` belongs to DSH, the second to the app. Host options can precede a literal
143
+ prompt: `dsh-tui --patch ./overlay.yml -- --resume=sid-1` applies the overlay
144
+ and sends `--resume=sid-1` as prompt text without resuming that session.
145
+ Safe mode: [Getting started](docs/getting-started.en.md).
146
+
147
+ ### Importing conversations from other agents (`dsh-tui migrate`)
148
+
149
+ Bring Claude Code, Codex, OMP, zcode, or Grok Build conversation histories into the DSH session store, then browse and resume them by their original working directory via `/resume`:
150
+
151
+ ```sh
152
+ dsh-tui migrate # list importable counts per agent (writes nothing)
153
+ dsh-tui migrate claude-code # import every Claude Code conversation (likewise codex / omp / zcode / grok-build)
154
+ dsh-tui migrate codex --dry-run # preview what would land, write nothing
155
+ ```
156
+
157
+ - **Read-only source**: migration only reads the foreign agent's local store; artifacts are written through the official `JsonlSessionPersistence` backend, so imported sessions are first-class (openable, continuable).
158
+ - **Idempotent**: one deterministic UUID per source conversation — re-importing skips what is already present instead of stacking duplicates.
159
+ - **Structure preserved**: user/assistant messages, reasoning traces, tool calls with their results, and the source's context compactions (as native compaction checkpoints) are rebuilt turn by turn; harness-injected machine text opens no turn. An imported session can pick the work straight up.
160
+ In-TUI browsing: the session screen (`/resume`) shows a tab per agent that has conversations; picking one imports just that conversation and opens it.
161
+ In-TUI: `/migrate` (optionally `/migrate <agent> [--dry-run]`) runs the same import in a child process and reports through the notification flow.
162
+ CLI alternative: `dsh-tui migrate ...` from any shell runs the same import.
163
+ Full guide: [Session migration](docs/migrate.en.md).
164
+
165
+ - More agents (pi, opencode, …) extend the adapter registry as adapters land; grok-build reads `GROK_HOME` when set.
142
166
 
143
167
  **VS Code**: use the integrated terminal or the `dsh-tui-vscode` extension. See [VS Code guide](docs/vscode.en.md). **Herdr**: run `dsh-tui` in a [Herdr](https://herdr.dev) pane; `idle` / `working` / `blocked` are reported through its local integration API.
144
168
 
@@ -148,13 +172,33 @@ Other arguments go to `dsh --profile dsh-tui`. Safe mode: [Getting started](docs
148
172
 
149
173
  While the model is working: `Enter` steers, `Tab` queues a follow-up, `Ctrl+Enter` interrupts and sends.
150
174
 
175
+ On native Windows, fragmented Win32 input records are reassembled across short input delays instead of appearing as numeric protocol text. The platform check only reports that this machine might run the private mode (win32-input-mode); a bare `ESC[` fragment is held only after one record has actually been decoded, while a fragment whose own shape is already record-specific holds on its own (which is how even the first record can survive a split). Windows terminals that never enter the mode (mintty, GitBash) therefore keep the classic VT path: a lone `Esc` keeps its normal response time, and a letter typed after a timed-out `ESC[` is not swallowed.
176
+
177
+ Incomplete records are held for a bounded recovery window (1 second from first capture, never extended by later input; 64 bytes max); past either bound the hold ends and input is handled as before. Unrecognized complete CSI sequences are not inserted as text; after a damaged CSI prefix, a bare ASCII letter can be consumed as its terminator, while normal Win32 key records and bracketed-paste text retain their own boundaries.
178
+
179
+ A session's very first record can still leave residue if it is split before its record-specific shape forms; once any record has been decoded, every split position is covered. Inside the recovery window, literal input starting with `[digit;…` cannot be told apart from a protocol prefix — it may be held, or re-joined to a preceding `Esc`. To type it, wait for the window to close, or avoid that shape right after `Esc`.
180
+
181
+ Terminal replies that arrive split are reassembled the same way (native Windows ConPTY is the common source): while the app still has a query awaiting its answer, an unfinished DA1 / DA2 / DSR / DECRPM / XTVERSION tail — even one split again after the introducer `Esc` was flushed — is held across input delays, but only while its shape can still complete into the response type that query expects. It is then consumed as the reply it completes instead of entering the prompt as protocol text.
182
+
183
+ That claim is evidence-gated, and this is the difference from earlier builds: no query awaiting an answer means nothing is claimed, so a literal `[?61;4c` typed right after `Esc` still enters the prompt exactly as before.
184
+
185
+ The window is bounded like the record hold (about a second, never extended by later input; 64 bytes max); past either bound it ends, and bytes still shaped like an unfinished reply prefix are dropped rather than shown.
186
+
187
+ Inside that window, with a query of the matching response type outstanding, same-shaped literal input can still be claimed as a reply; to type it, wait for the window to close (about a second), or avoid that shape while a query is outstanding.
188
+
151
189
  Mouse (fullscreen): drag to select and copy, double/triple click to select a word or line, click tool cards, timeline ticks and `[Image #N]` previews.
152
190
 
191
+ **Pasting**: native and bracketed paste keeps ordinary text and newlines, and never submits itself on arrival. On Windows terminals that deliver a paste as win32-input-mode key records, the residue is stripped at the entry point (a multi-line paste no longer leaves stray `_`) and pasted CRLF collapses to a single newline; genuine underscores and bracketed-paste text are untouched.
192
+
193
+ **Dropped files**: a native Windows desktop drop (Windows Terminal / OpenConsole) arrives as an OSC 8 hyperlink; the parser restores its `file://` URI to a decoded local path before paste hygiene runs, so the `]8;id=…;` parameter bytes never reach the draft. Image paths enter the existing image staging pipeline; other files are inserted as a referenceable path (a path containing whitespace arrives in the composer's quoted `"…"` single-token form). Only `file://` URIs are restored, and it is fail-closed: a remote authority/UNC, a payload carrying several distinct URIs, or a URI that carries several tokens is refused and stays literal text rather than guessed.
194
+
153
195
  Full reference: [Interaction and commands](docs/interaction.en.md).
154
196
 
155
197
  ## Built-in Commands
156
198
 
157
- `/resume` · `/home` · `/agentview` · `/bg` · `⌸` open the same session manager: workspace rail, live state, filter, ★ pins. Also `/model` `/new` `/compact` `/export` `/btw` `/tree` `/fork` `/rewind` `/settings` `/status` `/cost` `/jobs` `/skills` `/mcp` `/login` `/update`.
199
+ `/resume` · `/home` · `/agentview` · `/bg` · `⌸` open the same session manager: workspace rail, live state, filter, ★ pins. Also `/model` `/new` `/compact` `/export` `/btw` `/tree` `/fork` `/rewind` `/settings` `/status` `/cost` `/jobs` `/skills` `/mcp` `/provider` `/auth` `/login` `/update`.
200
+
201
+ The session manager paints the last successful list immediately while it checks the persistence store for changes. Titles that require a deeper log scan appear first with a fallback name and update in place when recovery finishes.
158
202
 
159
203
  **Background sessions**: `/bg` or `←` on an empty prompt; `Esc` returns. They run in this process and stop when the TUI exits. Logs survive.
160
204
 
@@ -178,10 +222,12 @@ Runtime path, module boundaries, performance notes and persistence locations: [A
178
222
  ## Known Limitations
179
223
 
180
224
  - Injected plugin context has no standalone display; it counts into the context segments.
181
- - `/model` switches by forking the session; the old session stays in `/resume`.
225
+ - `/model` switches by forking the session; the old session stays in `/resume` (a session nobody has typed into records no branch, so your first prompt there still gets a generated title).
182
226
  - `Ctrl+V` needs platform clipboard tools; unsupported bitmap formats are rejected.
227
+ - A dropped file is restored from its OSC 8 `file://` URI alone: multi-file drops, non-Windows terminal drop encodings and terminator-less truncated frames are not covered, and the hyperlink's own display name is never used.
183
228
  - A background session lives inside this process and stops when the TUI exits.
184
- - `/thinking` is not persisted; `/compact` is unavailable under the `minimal` preset; `/update` needs a `dsh --profile` launch and is refused while a turn is running.
229
+ - `/thinking` is not persisted; `/compact` is unavailable under the kernel's `minimal` agent preset (极简模式, one persistent-shell tool) — a different thing from the `/settings → Minimal UI` (极简界面) display switch; `/update` needs a `dsh --profile` launch and is refused while a turn is running.
230
+ - The status-bar `≈¥` and `/cost` are session estimates that include subagent usage (priced per each agent's model × peak/idle × cache components); unofficial or unlisted models show tokens only and are marked unpriced. **The platform bill is authoritative.**
185
231
 
186
232
  Full list: [Architecture and limitations → Known limitations](docs/architecture.en.md#known-limitations).
187
233
 
Binary file
package/bin/dsh-tui.js CHANGED
@@ -62,6 +62,16 @@ const ownPackage = readJson(join(ownDir, 'package.json'))
62
62
  const ownVersion = ownPackage?.name === '@deepseek-harness-tui/dsh-tui' ? ownPackage.version : undefined
63
63
  const PACKAGE = '@deepseek-harness-tui/dsh-tui'
64
64
  const PROFILE = 'dsh-tui'
65
+
66
+ // 随包用户手册(guide/,见 scripts/build-guide.mjs):交给 dsh 当内核
67
+ // dsh-skill-filesystem 的随包技能根(rank 600 的 bundledSkillDir 默认取这个
68
+ // 环境变量)。会话里模型常驻只多一行技能目录,用户真问到 dsh-tui 时才按需
69
+ // 读手册。用户自己设过就不覆盖;包里没有 guide/(旧安装/裁剪包)时保持原样。
70
+ const withGuideSkillDir = env => {
71
+ if (env.DSH_BUNDLED_SKILL_DIR !== undefined) return env
72
+ const guideDir = join(ownDir, 'guide')
73
+ return existsSync(guideDir) ? { ...env, DSH_BUNDLED_SKILL_DIR: guideDir } : env
74
+ }
65
75
  // 救援 profile(最小可用):同 home 下的空白 profile(仅 base+TUI,无第三方
66
76
  // 插件),是主 profile 装炸时的干净启动通道——创建走官方 dsh plugin add
67
77
  // (钉当前版本,同 bootstrap 语义)。
@@ -432,11 +442,20 @@ const MSG = {
432
442
  `[dsh-tui] \`update\` 需要 profile 的编译产物,但它缺失或版本过旧、不含 CLI 入口。\n` +
433
443
  `请改用手工升级:\n dsh plugin --profile ${PROFILE} add ${PACKAGE}@latest`,
434
444
  },
445
+ migrateUnavailable: {
446
+ en:
447
+ `[dsh-tui] \`migrate\` needs the profile's compiled copy, but it is missing or too old to carry the CLI entry.\n` +
448
+ `Update first:\n dsh-tui update`,
449
+ zh:
450
+ `[dsh-tui] \`migrate\` 需要 profile 的编译产物,但它缺失或版本过旧、不含 CLI 入口。\n` +
451
+ `请先升级:\n dsh-tui update`,
452
+ },
435
453
  helpText: {
436
454
  en:
437
455
  `Usage: dsh-tui|dst [command] [options] [path|url]\n\n` +
438
456
  `Commands:\n` +
439
457
  ` update Update the ${PROFILE} profile to the latest release\n` +
458
+ ` migrate [agent] Import conversations from claude-code/codex/omp/zcode/grok-build (--dry-run to preview)\n` +
440
459
  ` doctor Pre-flight environment checks (dsh/pnpm/profile/key)\n` +
441
460
  ` safe Safe mode: read-only diagnostics, inventory, repair guidance\n` +
442
461
  ` safe --rescue Create/verify the clean rescue profile (starts it in a terminal)\n` +
@@ -445,12 +464,15 @@ const MSG = {
445
464
  `Options:\n` +
446
465
  ` --resume [id] Resume the last (or the given) session\n` +
447
466
  ` -c, --continue Same as --resume\n` +
467
+ ` -- <prompt...> Treat the remaining arguments as literal prompt text\n` +
448
468
  ` <path|url> Open with the given workspace target\n\n` +
449
- `Any other argument is forwarded to \`dsh --profile ${PROFILE}\`.`,
469
+ `Leading DSH options (e.g. --dump-config, --patch <path>) are forwarded unchanged.\n` +
470
+ `Other arguments go to the app in \`dsh --profile ${PROFILE}\`.`,
450
471
  zh:
451
472
  `用法:dsh-tui|dst [命令] [选项] [路径|URL]\n\n` +
452
473
  `命令:\n` +
453
474
  ` update 将 ${PROFILE} profile 升级到最新版本\n` +
475
+ ` migrate [agent] 迁移 claude-code/codex/omp/zcode/grok-build 的对话(--dry-run 预览)\n` +
454
476
  ` doctor 启动前环境诊断(dsh/pnpm/profile/密钥)\n` +
455
477
  ` safe 安全模式:只读诊断、插件清单与修复指引\n` +
456
478
  ` safe --rescue 创建/校验干净的救援 profile(有终端时随即启动它)\n` +
@@ -459,8 +481,10 @@ const MSG = {
459
481
  `选项:\n` +
460
482
  ` --resume [id] 恢复上次(或指定 id 的)会话\n` +
461
483
  ` -c, --continue 同 --resume\n` +
484
+ ` -- <提示词...> 将剩余参数作为字面提示词\n` +
462
485
  ` <路径|URL> 以指定工作区目标启动\n\n` +
463
- `其余参数原样转发给 \`dsh --profile ${PROFILE}\`。`,
486
+ `前置 DSH 选项(如 --dump-config、--patch <路径>)原样转发。\n` +
487
+ `其余参数交给 \`dsh --profile ${PROFILE}\` 中的应用。`,
464
488
  },
465
489
  }
466
490
  const msg = key => MSG[key][lang]
@@ -714,7 +738,7 @@ const startDshSession = (dshArgs, profile = PROFILE, env = process.env) =>
714
738
  new Promise(resolve => {
715
739
  const child = spawn(...cmd('dsh', ['--profile', profile, ...dshArgs]), {
716
740
  stdio: 'inherit',
717
- env,
741
+ env: withGuideSkillDir(env),
718
742
  ...shellOpt,
719
743
  })
720
744
  child.on('error', err => resolve({ kind: 'error', error: err }))
@@ -737,6 +761,23 @@ const rescueEnv = () => {
737
761
  return env
738
762
  }
739
763
 
764
+ // 安全模式「重试正常启动」的环境(菜单选项 1,首启 fallback 与 `safe` 共用):
765
+ // 崩溃往往发生在 TUI 的退出漏斗之前,此时 `~/.dsh-tui/resume.txt` 是"用户上
766
+ // 一刻在哪个会话"的唯一线索(TUI 侧崩溃分支也会写它,见
767
+ // src/dsh-adapter/plugin.ts 的退出漏斗)。不带这个变量重试等于开一个新的空会话
768
+ // ——正是「会话丢了」的观感。已经显式设了该变量(用户自己 `--resume`)则不覆盖;
769
+ // 指针缺失/不可读时保持冷启动语义。
770
+ const resumeEnvForRetry = () => {
771
+ if (process.env.DSH_TUI_RESUME_SESSION !== undefined) return process.env
772
+ let target = ''
773
+ try {
774
+ target = readFileSync(join(homedir(), '.dsh-tui', 'resume.txt'), 'utf8').trim()
775
+ } catch {
776
+ // 没有历史会话可恢复——静默冷启动。
777
+ }
778
+ return target === '' ? process.env : { ...process.env, DSH_TUI_RESUME_SESSION: target }
779
+ }
780
+
740
781
  // TTY 判定:询问与菜单都要求 stdin/stdout 均可交互(readline 需要 stdin,
741
782
  // 菜单可读需要 stdout);任一非 TTY(脚本/管道/headless 宿主)走降级。
742
783
  const isInteractive = () => Boolean(process.stdin.isTTY && process.stdout.isTTY)
@@ -1057,7 +1098,7 @@ const settleFirstResult = async (result, firstArgs) => {
1057
1098
  if (result.kind === 'error') {
1058
1099
  console.error(msg('launchFailed')(result.error))
1059
1100
  if (isInteractive()) {
1060
- if (await askSafeEntry(1)) process.exit(await runSafeSession({ pendingExitCode: 1, retryDsh: () => startDshSession(firstArgs) }))
1101
+ if (await askSafeEntry(1)) process.exit(await runSafeSession({ pendingExitCode: 1, retryDsh: () => startDshSession(firstArgs, PROFILE, resumeEnvForRetry()) }))
1061
1102
  } else {
1062
1103
  console.error(msg('safeHint')(1))
1063
1104
  }
@@ -1068,7 +1109,7 @@ const settleFirstResult = async (result, firstArgs) => {
1068
1109
  console.error(msg('profileExited')(result.code))
1069
1110
  if (isInteractive()) {
1070
1111
  if (await askSafeEntry(result.code)) {
1071
- process.exit(await runSafeSession({ pendingExitCode: result.code, retryDsh: () => startDshSession(firstArgs) }))
1112
+ process.exit(await runSafeSession({ pendingExitCode: result.code, retryDsh: () => startDshSession(firstArgs, PROFILE, resumeEnvForRetry()) }))
1072
1113
  }
1073
1114
  } else {
1074
1115
  console.error(msg('safeHint')(result.code))
@@ -1234,6 +1275,26 @@ if (subcommand === 'update') {
1234
1275
  process.exit(await cliUpdate(PROFILE))
1235
1276
  }
1236
1277
 
1278
+ // ─── 子命令:migrate ─────────────────────────────────────────────────────────
1279
+ // 跨代理会话迁移(claude-code / codex / omp → DSH sessions)。与 update 同
1280
+ // 一条委托路径:动态 import **profile 的**编译产物(瘦壳零 lib 依赖不变),
1281
+ // 落盘走上游官方 JsonlSessionPersistence(见 src/dsh-adapter/migrate/)。
1282
+ // profile 未初始化时先自举;产物缺失或旧版无 cliMigrate 导出给升级指引。
1283
+ if (subcommand === 'migrate') {
1284
+ if (!profileReady()) bootstrapProfile()
1285
+ let cliMigrate
1286
+ try {
1287
+ ;({ cliMigrate } = await import(pathToFileURL(join(profilePkgDir, 'lib', 'types', 'dsh-adapter', 'migrate', 'cli.js')).href))
1288
+ } catch {
1289
+ cliMigrate = undefined
1290
+ }
1291
+ if (typeof cliMigrate !== 'function') {
1292
+ console.error(msg('migrateUnavailable'))
1293
+ process.exit(1)
1294
+ }
1295
+ process.exit(await cliMigrate(process.argv.slice(3)))
1296
+ }
1297
+
1237
1298
  // ─── 全局副本:瘦壳角色 ───────────────────────────────────────────────────────
1238
1299
  // DSH_TUI_NO_DELEGATE=1 是测试/调试逃生口:强制走完整逻辑(verify-launcher
1239
1300
  // 的沙箱用它直接驱动全量路径;现场排查委托链时同样可用)。
@@ -1302,10 +1363,34 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
1302
1363
  }
1303
1364
  return ''
1304
1365
  }
1366
+ // Launcher-owned options from DSH apps/cli/src/args.ts. Only classify the
1367
+ // leading prefix here; DSH still owns validation and execution. Keep this
1368
+ // inline: migrated global launchers must not depend on lib/ or other files.
1369
+ const dshValueFlags = new Set(['--profile', '--from-default-profile', '--patch'])
1370
+ const dshSwitches = new Set(['--dump-config', '--dump-default-config', '--dump-config-schema', '-V', '--version'])
1371
+ const hostArgs = []
1305
1372
  const args = []
1306
1373
  const argv = process.argv.slice(2)
1307
1374
  for (let i = 0; i < argv.length; i++) {
1308
1375
  const a = argv[i]
1376
+ if (a === '--') {
1377
+ args.push(...argv.slice(i))
1378
+ break
1379
+ }
1380
+ if (args.length === 0) {
1381
+ const flag = a.split('=', 1)[0]
1382
+ if (dshValueFlags.has(flag)) {
1383
+ hostArgs.push(a)
1384
+ // Required host values are raw tokens, even when flag-shaped. Never
1385
+ // intercept them as a resume flag or an existing workspace path.
1386
+ if (a === flag && argv[i + 1] !== undefined) hostArgs.push(argv[++i])
1387
+ continue
1388
+ }
1389
+ if (dshSwitches.has(a)) {
1390
+ hostArgs.push(a)
1391
+ continue
1392
+ }
1393
+ }
1309
1394
  if (a === '--resume' || a === '-c' || a === '--continue' || a.startsWith('--resume=')) {
1310
1395
  let sessionId = ''
1311
1396
  if (a.startsWith('--resume=')) {
@@ -1331,6 +1416,8 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
1331
1416
  process.env.DSH_TUI_LAUNCHER_VERSION = ownVersion
1332
1417
  }
1333
1418
 
1334
- const firstArgs = args
1419
+ // DSH consumes its own --; only the app tail belongs behind it. Preserve
1420
+ // the app-level separator too, and replay this same argv on a safe retry.
1421
+ const firstArgs = [...hostArgs, ...(args.length > 0 ? ['--', ...args] : [])]
1335
1422
  settleFirstResult(await startDshSession(firstArgs), firstArgs)
1336
1423
  }
package/cordis.patch.yml CHANGED
@@ -57,20 +57,43 @@
57
57
  # Preserve the TUI's opt-in privacy stance across the 0.1.2 base default
58
58
  # change to FEEDBACK_ONLY. An explicit DSH_TELEMETRY_MODE still wins. This
59
59
  # restates the whole 0.1.2 config because include patches replace config
60
- # objects rather than merging them.
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.
61
64
  - id: session-telemetry-otel
62
- config:
63
- mode: !!js process.env.DSH_TELEMETRY_MODE || 'DISABLED'
64
- shutdownTimeoutMillis: 3000
65
- exporter:
66
- url: !!js process.env.DSH_TELEMETRY_OTLP_URL ?? 'https://harness-telemetry.deepseeksvc.com/v1/logs'
67
- compression: gzip
68
- timeoutMillis: 1000
69
- processor:
70
- scheduledDelayMillis: 10000
71
- maxQueueSize: 2048
72
- maxExportBatchSize: 2048
73
- exportTimeoutMillis: 1500
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
+ })()
74
97
 
75
98
  # The 0.1.2 base sends the active Loader package inventory on official
76
99
  # DeepSeek requests by default. TUI keeps that diagnostic metadata opt-in.
@@ -386,11 +409,30 @@
386
409
  name: '@deepseek-ai/dsh-cordis-host-runner'
387
410
  disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'cordis-host-runner' && entry.options.name === '@deepseek-ai/dsh-cordis-host-runner' && !entry.disabled)"
388
411
 
389
- # Subscription OAuth sign-in (bundled dsh-auth dependency): mounts the
390
- # ChatGPT/Codex, Claude Pro/Max and SuperGrok provider routes plus the
391
- # /auth command; the TUI's /provider wizard gains its OAuth branch from
392
- # the ctx.dshAuth service this row provides. Entry-level inject only —
393
- # the plugin module's own inject is empty so a stale patch cannot
412
+ # DeepSeek account sign-in uses the Host-owned /oauth/callback route. A
413
+ # TUI-only profile needs a loopback listener; a mixed Web+TUI profile
414
+ # reuses Web's official webserver instead of opening a second one. Hosts
415
+ # without an enabled account service row leave this listener disabled.
416
+ - id: dsh-tui-webserver
417
+ name: '@deepseek-ai/dsh-host-webserver'
418
+ disabled: !!js >-
419
+ (() => {
420
+ const require = process.getBuiltinModule('node:module').createRequire(ctx.baseUrl)
421
+ try { require.resolve('@deepseek-ai/dsh-host-webserver/package.json') } catch { return true }
422
+ const entries = [...ctx.loader.entries()]
423
+ return !entries.some(entry => entry.options.name === '@deepseek-ai/dsh-deepseek-account-platform' && !entry.disabled)
424
+ || entries.some(entry => entry.options.id === 'webserver' && entry.options.name === '@deepseek-ai/dsh-host-webserver' && !entry.disabled)
425
+ })()
426
+ config:
427
+ host: 127.0.0.1
428
+ port: 0
429
+
430
+ # Built-in subscription OAuth sign-in: mounts available pi-ai routes
431
+ # (ChatGPT/Codex, Claude, Grok; newer pi-ai adds OpenAI direct and Meta)
432
+ # plus the /auth command. Its facade also delegates DeepSeek sign-in to
433
+ # the Host-owned account service when available. The TUI's /provider
434
+ # wizard gains its OAuth branch from ctx.dshAuth. Entry-level inject only —
435
+ # the internal module's own inject is empty so a stale patch cannot
394
436
  # deadlock a composition lacking these services (#183 pattern).
395
437
  - id: dsh-tui-auth
396
438
  name: '@deepseek-harness-tui/dsh-tui/oauth'
@@ -427,13 +469,12 @@
427
469
  # 想退回 inline 主屏(终端原生滚动/选择):/settings 全屏开关或 cordis.yml
428
470
  # `fullscreen: false`——显式选择始终优先于默认。
429
471
  fullscreen: true
430
- # 在支持的终端预览图片;/settings 可关闭,重启生效。
472
+ # 以下为 /settings 可改的显示设置;每项说明与默认值见应用内 /settings 屏。
431
473
  terminalImages: true
432
- # Edit/Write diff 呈现:auto(≥110 列双栏对照,窄屏统一式)/
433
- # split(强制双栏)/ unified(强制统一式)。/settings 屏可实时改。
434
474
  # diffLayout: auto
435
- # 回复中的 ```mermaid 代码块画成字符图;false 保留源码。/settings 可实时改。
436
475
  # mermaidDiagrams: true
476
+ # 回复中 LaTeX 公式的显示方式:auto(默认,目前为 Unicode)/ image(支持图形的终端里块级公式显示为图片)/ unicode / source(保留源码)。/settings 可实时改。
477
+ # mathRendering: auto
437
478
  # 每个请求实际生效的推理强度,按当前路由的 adapter 档位校验
438
479
  #(deepseek: off/low/high/max);非法值回落 adapter 默认。
439
480
  effort: max
package/cordis.yml CHANGED
@@ -61,10 +61,11 @@
61
61
  # wl-copy/xclip/xsel 兜底)、滚轮滚动、双击选词/三击选行。false 则退回
62
62
  # inline 渲染, 鼠标交给终端模拟器原生选择。
63
63
  fullscreen: true
64
- # 在支持的终端预览图片;/settings 可关闭,重启生效。
64
+ # 以下为 /settings 可改的显示设置;每项说明与默认值见应用内 /settings 屏。
65
65
  terminalImages: true
66
- # 回复中的 ```mermaid 代码块画成字符图;false 保留源码。/settings 可实时改。
67
66
  # mermaidDiagrams: true
67
+ # 回复中 LaTeX 公式的显示方式:auto(默认,目前为 Unicode)/ image(支持图形的终端里块级公式显示为图片)/ unicode / source(保留源码)。/settings 可实时改。
68
+ # mathRendering: auto
68
69
  # Reasoning effort applied to every request, validated against the live
69
70
  # route's adapter levels. An unlisted level falls back to the adapter
70
71
  # default; this wins over the persisted /effort choice and seeds the
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: dsh-tui-guide
3
+ description: Use when the user asks about dsh-tui itself (usage, shortcuts, config, themes, migration, VS Code). Load before answering; skip for normal coding tasks.
4
+ ---
5
+
6
+ # dsh-tui 用户手册(索引)
7
+
8
+ 用户手册全文就在**本文件所在目录**——`skill` 工具返回的 `resourceBase`。共 8 篇,
9
+ 每篇中英各一份:中文文件名无后缀,英文加 `.en.md`。拿不到绝对路径时,用
10
+ `glob` 在 dsh-tui 包里搜 `guide/dsh-tui-guide`。
11
+
12
+ ## 怎么用
13
+
14
+ 1. **跟用户同语言**:中文提问读无后缀文件,英文提问读加后缀的那份;回答也用同一种语言。
15
+ 2. **先定位再读**:16 个文件合计约 290 KB,整篇读既慢又挤上下文。先 `grep` 关键词拿到命中行,
16
+ 再用 `read` 带 `offset`/`limit` 只展开需要的那几段。
17
+ 3. **一次一到两篇**:按下面的路由表挑最贴近的;跨主题时再补第二篇。
18
+ 4. **给出处**:回答末尾写清来源(文件名 + 小节标题),用户能直接翻回去核对。
19
+ 5. **别编**:手册没写的直说"手册没写",再给保守建议;不要拿记忆里的旧行为顶替。
20
+
21
+ ## 路由表
22
+
23
+ | 用户问的 | 文件 |
24
+ | --- | --- |
25
+ | 安装、首次启动、启动失败、排障 | `getting-started.md` |
26
+ | 日常使用、键位、斜杠命令、会话与工作流、设置 | `user-guide.md` |
27
+ | 输入框、鼠标、选中复制、粘贴、图片、问卷与审批 | `interaction.md` |
28
+ | 配置覆盖层、TUI 开关、agent preset、模型路由、MCP | `configuration.md` |
29
+ | 主题、配色、自动检测、自定义主题 | `themes.md` |
30
+ | 从 Claude Code / Codex / OMP / zcode / Grok 迁移会话 | `migrate.md` |
31
+ | VS Code 集成、扩展、IDE 选区 | `vscode.md` |
32
+ | 插件生态、接缝稳定性分级 | `plugins.md` |
33
+
34
+ 英文提问时把上表文件名接上后缀(例如 `user-guide.en.md`)。
35
+
36
+ > 除本文件外,这些副本由 `scripts/build-guide.mjs` 从仓库 `docs/` 逐字节同步生成,
37
+ > 不要手改;改文档请改 `docs/` 再跑一次构建。