@deepseek-harness-tui/dsh-tui 0.5.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 (638) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +235 -0
  3. package/bin/dsh-tui.js +95 -0
  4. package/cordis.patch.yml +218 -0
  5. package/cordis.yml +185 -0
  6. package/lib/invariant.js +28 -0
  7. package/lib/types/activityPrefs.d.ts +29 -0
  8. package/lib/types/activityPrefs.d.ts.map +1 -0
  9. package/lib/types/activityPrefs.js +60 -0
  10. package/lib/types/bootstrap/state.d.ts +13 -0
  11. package/lib/types/bootstrap/state.d.ts.map +1 -0
  12. package/lib/types/bootstrap/state.js +12 -0
  13. package/lib/types/cc/cliHighlight.d.ts +20 -0
  14. package/lib/types/cc/cliHighlight.d.ts.map +1 -0
  15. package/lib/types/cc/cliHighlight.js +53 -0
  16. package/lib/types/cc/figures.d.ts +59 -0
  17. package/lib/types/cc/figures.d.ts.map +1 -0
  18. package/lib/types/cc/figures.js +69 -0
  19. package/lib/types/cc/format.d.ts +26 -0
  20. package/lib/types/cc/format.d.ts.map +1 -0
  21. package/lib/types/cc/format.js +55 -0
  22. package/lib/types/cc/hash.d.ts +25 -0
  23. package/lib/types/cc/hash.d.ts.map +1 -0
  24. package/lib/types/cc/hash.js +41 -0
  25. package/lib/types/cc/hyperlink.d.ts +21 -0
  26. package/lib/types/cc/hyperlink.d.ts.map +1 -0
  27. package/lib/types/cc/hyperlink.js +31 -0
  28. package/lib/types/cc/markdown.d.ts +43 -0
  29. package/lib/types/cc/markdown.d.ts.map +1 -0
  30. package/lib/types/cc/markdown.js +345 -0
  31. package/lib/types/cc/spinnerVerbs.d.ts +3 -0
  32. package/lib/types/cc/spinnerVerbs.d.ts.map +1 -0
  33. package/lib/types/cc/spinnerVerbs.js +190 -0
  34. package/lib/types/cc/terminal.d.ts +15 -0
  35. package/lib/types/cc/terminal.d.ts.map +1 -0
  36. package/lib/types/cc/terminal.js +84 -0
  37. package/lib/types/channel.d.ts +672 -0
  38. package/lib/types/channel.d.ts.map +1 -0
  39. package/lib/types/channel.js +2427 -0
  40. package/lib/types/childStderr.d.ts +63 -0
  41. package/lib/types/childStderr.d.ts.map +1 -0
  42. package/lib/types/childStderr.js +161 -0
  43. package/lib/types/commands.d.ts +55 -0
  44. package/lib/types/commands.d.ts.map +1 -0
  45. package/lib/types/commands.js +101 -0
  46. package/lib/types/components/ActivityLine.d.ts +29 -0
  47. package/lib/types/components/ActivityLine.d.ts.map +1 -0
  48. package/lib/types/components/ActivityLine.js +47 -0
  49. package/lib/types/components/ActivityPicker.d.ts +13 -0
  50. package/lib/types/components/ActivityPicker.d.ts.map +1 -0
  51. package/lib/types/components/ActivityPicker.js +24 -0
  52. package/lib/types/components/CommandSuggestions.d.ts +14 -0
  53. package/lib/types/components/CommandSuggestions.d.ts.map +1 -0
  54. package/lib/types/components/CommandSuggestions.js +33 -0
  55. package/lib/types/components/FileSuggestions.d.ts +12 -0
  56. package/lib/types/components/FileSuggestions.d.ts.map +1 -0
  57. package/lib/types/components/FileSuggestions.js +26 -0
  58. package/lib/types/components/GoalTodoPanel.d.ts +13 -0
  59. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -0
  60. package/lib/types/components/GoalTodoPanel.js +57 -0
  61. package/lib/types/components/HelpMenu.d.ts +12 -0
  62. package/lib/types/components/HelpMenu.d.ts.map +1 -0
  63. package/lib/types/components/HelpMenu.js +12 -0
  64. package/lib/types/components/HistorySearchDialog.d.ts +16 -0
  65. package/lib/types/components/HistorySearchDialog.d.ts.map +1 -0
  66. package/lib/types/components/HistorySearchDialog.js +31 -0
  67. package/lib/types/components/InterruptedByUser.d.ts +7 -0
  68. package/lib/types/components/InterruptedByUser.d.ts.map +1 -0
  69. package/lib/types/components/InterruptedByUser.js +9 -0
  70. package/lib/types/components/LoadedContextPanel.d.ts +20 -0
  71. package/lib/types/components/LoadedContextPanel.d.ts.map +1 -0
  72. package/lib/types/components/LoadedContextPanel.js +30 -0
  73. package/lib/types/components/LogoV2.d.ts +23 -0
  74. package/lib/types/components/LogoV2.d.ts.map +1 -0
  75. package/lib/types/components/LogoV2.js +95 -0
  76. package/lib/types/components/Markdown.d.ts +24 -0
  77. package/lib/types/components/Markdown.d.ts.map +1 -0
  78. package/lib/types/components/Markdown.js +106 -0
  79. package/lib/types/components/MarkdownTable.d.ts +17 -0
  80. package/lib/types/components/MarkdownTable.d.ts.map +1 -0
  81. package/lib/types/components/MarkdownTable.js +272 -0
  82. package/lib/types/components/MessageList.d.ts +41 -0
  83. package/lib/types/components/MessageList.d.ts.map +1 -0
  84. package/lib/types/components/MessageList.js +303 -0
  85. package/lib/types/components/ModelPicker.d.ts +14 -0
  86. package/lib/types/components/ModelPicker.d.ts.map +1 -0
  87. package/lib/types/components/ModelPicker.js +15 -0
  88. package/lib/types/components/PresetPicker.d.ts +17 -0
  89. package/lib/types/components/PresetPicker.d.ts.map +1 -0
  90. package/lib/types/components/PresetPicker.js +25 -0
  91. package/lib/types/components/PromptInput.d.ts +67 -0
  92. package/lib/types/components/PromptInput.d.ts.map +1 -0
  93. package/lib/types/components/PromptInput.js +778 -0
  94. package/lib/types/components/ResumePicker.d.ts +15 -0
  95. package/lib/types/components/ResumePicker.d.ts.map +1 -0
  96. package/lib/types/components/ResumePicker.js +34 -0
  97. package/lib/types/components/RewindPicker.d.ts +14 -0
  98. package/lib/types/components/RewindPicker.d.ts.map +1 -0
  99. package/lib/types/components/RewindPicker.js +23 -0
  100. package/lib/types/components/SearchBox.d.ts +20 -0
  101. package/lib/types/components/SearchBox.d.ts.map +1 -0
  102. package/lib/types/components/SearchBox.js +33 -0
  103. package/lib/types/components/Select.d.ts +22 -0
  104. package/lib/types/components/Select.d.ts.map +1 -0
  105. package/lib/types/components/Select.js +19 -0
  106. package/lib/types/components/Spinner/GlimmerMessage.d.ts +19 -0
  107. package/lib/types/components/Spinner/GlimmerMessage.d.ts.map +1 -0
  108. package/lib/types/components/Spinner/GlimmerMessage.js +78 -0
  109. package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts +31 -0
  110. package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts.map +1 -0
  111. package/lib/types/components/Spinner/SpinnerAnimationRow.js +162 -0
  112. package/lib/types/components/Spinner/SpinnerGlyph.d.ts +16 -0
  113. package/lib/types/components/Spinner/SpinnerGlyph.d.ts.map +1 -0
  114. package/lib/types/components/Spinner/SpinnerGlyph.js +36 -0
  115. package/lib/types/components/Spinner/spinnerMode.d.ts +6 -0
  116. package/lib/types/components/Spinner/spinnerMode.d.ts.map +1 -0
  117. package/lib/types/components/Spinner/spinnerMode.js +1 -0
  118. package/lib/types/components/Spinner/spinnerUtils.d.ts +41 -0
  119. package/lib/types/components/Spinner/spinnerUtils.d.ts.map +1 -0
  120. package/lib/types/components/Spinner/spinnerUtils.js +104 -0
  121. package/lib/types/components/Spinner/useStalledAnimation.d.ts +16 -0
  122. package/lib/types/components/Spinner/useStalledAnimation.d.ts.map +1 -0
  123. package/lib/types/components/Spinner/useStalledAnimation.js +71 -0
  124. package/lib/types/components/StreamingMarkdown.d.ts +12 -0
  125. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -0
  126. package/lib/types/components/StreamingMarkdown.js +39 -0
  127. package/lib/types/components/ThemePicker.d.ts +22 -0
  128. package/lib/types/components/ThemePicker.d.ts.map +1 -0
  129. package/lib/types/components/ThemePicker.js +51 -0
  130. package/lib/types/components/ThinkingToggle.d.ts +17 -0
  131. package/lib/types/components/ThinkingToggle.d.ts.map +1 -0
  132. package/lib/types/components/ThinkingToggle.js +30 -0
  133. package/lib/types/components/ToolUseLoader.d.ts +13 -0
  134. package/lib/types/components/ToolUseLoader.d.ts.map +1 -0
  135. package/lib/types/components/ToolUseLoader.js +17 -0
  136. package/lib/types/components/Whale.d.ts +22 -0
  137. package/lib/types/components/Whale.d.ts.map +1 -0
  138. package/lib/types/components/Whale.js +78 -0
  139. package/lib/types/components/WorkingSpinner.d.ts +26 -0
  140. package/lib/types/components/WorkingSpinner.d.ts.map +1 -0
  141. package/lib/types/components/WorkingSpinner.js +68 -0
  142. package/lib/types/components/activityFrames.d.ts +31 -0
  143. package/lib/types/components/activityFrames.d.ts.map +1 -0
  144. package/lib/types/components/activityFrames.js +83 -0
  145. package/lib/types/components/bigfont.d.ts +28 -0
  146. package/lib/types/components/bigfont.d.ts.map +1 -0
  147. package/lib/types/components/bigfont.js +91 -0
  148. package/lib/types/components/design-system/Byline.d.ts +14 -0
  149. package/lib/types/components/design-system/Byline.d.ts.map +1 -0
  150. package/lib/types/components/design-system/Byline.js +17 -0
  151. package/lib/types/components/design-system/Divider.d.ts +40 -0
  152. package/lib/types/components/design-system/Divider.d.ts.map +1 -0
  153. package/lib/types/components/design-system/Divider.js +24 -0
  154. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +19 -0
  155. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts.map +1 -0
  156. package/lib/types/components/design-system/KeyboardShortcutHint.js +14 -0
  157. package/lib/types/components/design-system/ListItem.d.ts +36 -0
  158. package/lib/types/components/design-system/ListItem.d.ts.map +1 -0
  159. package/lib/types/components/design-system/ListItem.js +48 -0
  160. package/lib/types/components/design-system/LoadingState.d.ts +19 -0
  161. package/lib/types/components/design-system/LoadingState.d.ts.map +1 -0
  162. package/lib/types/components/design-system/LoadingState.js +22 -0
  163. package/lib/types/components/design-system/Pane.d.ts +17 -0
  164. package/lib/types/components/design-system/Pane.d.ts.map +1 -0
  165. package/lib/types/components/design-system/Pane.js +15 -0
  166. package/lib/types/components/design-system/ProgressBar.d.ts +22 -0
  167. package/lib/types/components/design-system/ProgressBar.d.ts.map +1 -0
  168. package/lib/types/components/design-system/ProgressBar.js +27 -0
  169. package/lib/types/components/design-system/StatusIcon.d.ts +15 -0
  170. package/lib/types/components/design-system/StatusIcon.d.ts.map +1 -0
  171. package/lib/types/components/design-system/StatusIcon.js +20 -0
  172. package/lib/types/components/design-system/ThemeProvider.d.ts +11 -0
  173. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -0
  174. package/lib/types/components/design-system/ThemeProvider.js +135 -0
  175. package/lib/types/components/design-system/ThemedBox.d.ts +37 -0
  176. package/lib/types/components/design-system/ThemedBox.d.ts.map +1 -0
  177. package/lib/types/components/design-system/ThemedBox.js +26 -0
  178. package/lib/types/components/design-system/ThemedText.d.ts +56 -0
  179. package/lib/types/components/design-system/ThemedText.d.ts.map +1 -0
  180. package/lib/types/components/design-system/ThemedText.js +45 -0
  181. package/lib/types/components/messages/AssistantTextMessage.d.ts +18 -0
  182. package/lib/types/components/messages/AssistantTextMessage.d.ts.map +1 -0
  183. package/lib/types/components/messages/AssistantTextMessage.js +15 -0
  184. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +23 -0
  185. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -0
  186. package/lib/types/components/messages/AssistantThinkingMessage.js +23 -0
  187. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +23 -0
  188. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -0
  189. package/lib/types/components/messages/AssistantToolUseMessage.js +220 -0
  190. package/lib/types/components/messages/MessageMetadata.d.ts +15 -0
  191. package/lib/types/components/messages/MessageMetadata.d.ts.map +1 -0
  192. package/lib/types/components/messages/MessageMetadata.js +20 -0
  193. package/lib/types/components/messages/UserPromptMessage.d.ts +19 -0
  194. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -0
  195. package/lib/types/components/messages/UserPromptMessage.js +15 -0
  196. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +39 -0
  197. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -0
  198. package/lib/types/components/questions/AskUserQuestionPanel.js +228 -0
  199. package/lib/types/components/shimmer.d.ts +35 -0
  200. package/lib/types/components/shimmer.d.ts.map +1 -0
  201. package/lib/types/components/shimmer.js +43 -0
  202. package/lib/types/components/whaleFrames.d.ts +25 -0
  203. package/lib/types/components/whaleFrames.d.ts.map +1 -0
  204. package/lib/types/components/whaleFrames.js +419 -0
  205. package/lib/types/customTheme.d.ts +104 -0
  206. package/lib/types/customTheme.d.ts.map +1 -0
  207. package/lib/types/customTheme.js +268 -0
  208. package/lib/types/effortPrefs.d.ts +22 -0
  209. package/lib/types/effortPrefs.d.ts.map +1 -0
  210. package/lib/types/effortPrefs.js +45 -0
  211. package/lib/types/history.d.ts +24 -0
  212. package/lib/types/history.d.ts.map +1 -0
  213. package/lib/types/history.js +75 -0
  214. package/lib/types/hooks/useBlink.d.ts +11 -0
  215. package/lib/types/hooks/useBlink.d.ts.map +1 -0
  216. package/lib/types/hooks/useBlink.js +20 -0
  217. package/lib/types/i18n.d.ts +926 -0
  218. package/lib/types/i18n.d.ts.map +1 -0
  219. package/lib/types/i18n.js +356 -0
  220. package/lib/types/index.d.ts +70 -0
  221. package/lib/types/index.d.ts.map +1 -0
  222. package/lib/types/index.js +31 -0
  223. package/lib/types/ink/Ansi.d.ts +11 -0
  224. package/lib/types/ink/Ansi.d.ts.map +1 -0
  225. package/lib/types/ink/Ansi.js +269 -0
  226. package/lib/types/ink/bidi.d.ts +18 -0
  227. package/lib/types/ink/bidi.d.ts.map +1 -0
  228. package/lib/types/ink/bidi.js +119 -0
  229. package/lib/types/ink/clearTerminal.d.ts +22 -0
  230. package/lib/types/ink/clearTerminal.d.ts.map +1 -0
  231. package/lib/types/ink/clearTerminal.js +72 -0
  232. package/lib/types/ink/colorize.d.ts +33 -0
  233. package/lib/types/ink/colorize.d.ts.map +1 -0
  234. package/lib/types/ink/colorize.js +213 -0
  235. package/lib/types/ink/components/AlternateScreen.d.ts +22 -0
  236. package/lib/types/ink/components/AlternateScreen.d.ts.map +1 -0
  237. package/lib/types/ink/components/AlternateScreen.js +74 -0
  238. package/lib/types/ink/components/App.d.ts +73 -0
  239. package/lib/types/ink/components/App.d.ts.map +1 -0
  240. package/lib/types/ink/components/App.js +597 -0
  241. package/lib/types/ink/components/AppContext.d.ts +15 -0
  242. package/lib/types/ink/components/AppContext.d.ts.map +1 -0
  243. package/lib/types/ink/components/AppContext.js +11 -0
  244. package/lib/types/ink/components/Box.d.ts +49 -0
  245. package/lib/types/ink/components/Box.d.ts.map +1 -0
  246. package/lib/types/ink/components/Box.js +153 -0
  247. package/lib/types/ink/components/Button.d.ts +37 -0
  248. package/lib/types/ink/components/Button.d.ts.map +1 -0
  249. package/lib/types/ink/components/Button.js +166 -0
  250. package/lib/types/ink/components/ClockContext.d.ts +10 -0
  251. package/lib/types/ink/components/ClockContext.d.ts.map +1 -0
  252. package/lib/types/ink/components/ClockContext.js +108 -0
  253. package/lib/types/ink/components/CursorDeclarationContext.d.ts +30 -0
  254. package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -0
  255. package/lib/types/ink/components/CursorDeclarationContext.js +6 -0
  256. package/lib/types/ink/components/ErrorOverview.d.ts +7 -0
  257. package/lib/types/ink/components/ErrorOverview.d.ts.map +1 -0
  258. package/lib/types/ink/components/ErrorOverview.js +49 -0
  259. package/lib/types/ink/components/Link.d.ts +8 -0
  260. package/lib/types/ink/components/Link.d.ts.map +1 -0
  261. package/lib/types/ink/components/Link.js +33 -0
  262. package/lib/types/ink/components/Newline.d.ts +13 -0
  263. package/lib/types/ink/components/Newline.d.ts.map +1 -0
  264. package/lib/types/ink/components/Newline.js +29 -0
  265. package/lib/types/ink/components/NoSelect.d.ts +20 -0
  266. package/lib/types/ink/components/NoSelect.d.ts.map +1 -0
  267. package/lib/types/ink/components/NoSelect.js +56 -0
  268. package/lib/types/ink/components/RawAnsi.d.ts +17 -0
  269. package/lib/types/ink/components/RawAnsi.d.ts.map +1 -0
  270. package/lib/types/ink/components/RawAnsi.js +45 -0
  271. package/lib/types/ink/components/ScrollBox.d.ts +78 -0
  272. package/lib/types/ink/components/ScrollBox.d.ts.map +1 -0
  273. package/lib/types/ink/components/ScrollBox.js +174 -0
  274. package/lib/types/ink/components/Spacer.d.ts +6 -0
  275. package/lib/types/ink/components/Spacer.d.ts.map +1 -0
  276. package/lib/types/ink/components/Spacer.js +19 -0
  277. package/lib/types/ink/components/StdinContext.d.ts +32 -0
  278. package/lib/types/ink/components/StdinContext.d.ts.map +1 -0
  279. package/lib/types/ink/components/StdinContext.js +16 -0
  280. package/lib/types/ink/components/TerminalFocusContext.d.ts +11 -0
  281. package/lib/types/ink/components/TerminalFocusContext.d.ts.map +1 -0
  282. package/lib/types/ink/components/TerminalFocusContext.js +45 -0
  283. package/lib/types/ink/components/TerminalSizeContext.d.ts +6 -0
  284. package/lib/types/ink/components/TerminalSizeContext.d.ts.map +1 -0
  285. package/lib/types/ink/components/TerminalSizeContext.js +3 -0
  286. package/lib/types/ink/components/Text.d.ts +56 -0
  287. package/lib/types/ink/components/Text.d.ts.map +1 -0
  288. package/lib/types/ink/components/Text.js +194 -0
  289. package/lib/types/ink/constants.d.ts +3 -0
  290. package/lib/types/ink/constants.d.ts.map +1 -0
  291. package/lib/types/ink/constants.js +2 -0
  292. package/lib/types/ink/cursor.d.ts +11 -0
  293. package/lib/types/ink/cursor.d.ts.map +1 -0
  294. package/lib/types/ink/cursor.js +1 -0
  295. package/lib/types/ink/devtools.d.ts +7 -0
  296. package/lib/types/ink/devtools.d.ts.map +1 -0
  297. package/lib/types/ink/devtools.js +1 -0
  298. package/lib/types/ink/dom.d.ts +178 -0
  299. package/lib/types/ink/dom.d.ts.map +1 -0
  300. package/lib/types/ink/dom.js +424 -0
  301. package/lib/types/ink/events/click-event.d.ts +32 -0
  302. package/lib/types/ink/events/click-event.d.ts.map +1 -0
  303. package/lib/types/ink/events/click-event.js +36 -0
  304. package/lib/types/ink/events/dispatcher.d.ts +63 -0
  305. package/lib/types/ink/events/dispatcher.d.ts.map +1 -0
  306. package/lib/types/ink/events/dispatcher.js +194 -0
  307. package/lib/types/ink/events/emitter.d.ts +20 -0
  308. package/lib/types/ink/events/emitter.d.ts.map +1 -0
  309. package/lib/types/ink/events/emitter.js +43 -0
  310. package/lib/types/ink/events/event-handlers.d.ts +47 -0
  311. package/lib/types/ink/events/event-handlers.d.ts.map +1 -0
  312. package/lib/types/ink/events/event-handlers.js +30 -0
  313. package/lib/types/ink/events/event.d.ts +19 -0
  314. package/lib/types/ink/events/event.d.ts.map +1 -0
  315. package/lib/types/ink/events/event.js +22 -0
  316. package/lib/types/ink/events/focus-event.d.ts +19 -0
  317. package/lib/types/ink/events/focus-event.d.ts.map +1 -0
  318. package/lib/types/ink/events/focus-event.js +21 -0
  319. package/lib/types/ink/events/input-event.d.ts +53 -0
  320. package/lib/types/ink/events/input-event.d.ts.map +1 -0
  321. package/lib/types/ink/events/input-event.js +180 -0
  322. package/lib/types/ink/events/keyboard-event.d.ts +40 -0
  323. package/lib/types/ink/events/keyboard-event.d.ts.map +1 -0
  324. package/lib/types/ink/events/keyboard-event.js +65 -0
  325. package/lib/types/ink/events/paste-event.d.ts +11 -0
  326. package/lib/types/ink/events/paste-event.d.ts.map +1 -0
  327. package/lib/types/ink/events/paste-event.js +13 -0
  328. package/lib/types/ink/events/resize-event.d.ts +13 -0
  329. package/lib/types/ink/events/resize-event.d.ts.map +1 -0
  330. package/lib/types/ink/events/resize-event.js +16 -0
  331. package/lib/types/ink/events/terminal-event.d.ts +112 -0
  332. package/lib/types/ink/events/terminal-event.d.ts.map +1 -0
  333. package/lib/types/ink/events/terminal-event.js +131 -0
  334. package/lib/types/ink/events/terminal-focus-event.d.ts +21 -0
  335. package/lib/types/ink/events/terminal-focus-event.d.ts.map +1 -0
  336. package/lib/types/ink/events/terminal-focus-event.js +18 -0
  337. package/lib/types/ink/focus.d.ts +74 -0
  338. package/lib/types/ink/focus.d.ts.map +1 -0
  339. package/lib/types/ink/focus.js +188 -0
  340. package/lib/types/ink/frame.d.ts +119 -0
  341. package/lib/types/ink/frame.d.ts.map +1 -0
  342. package/lib/types/ink/frame.js +43 -0
  343. package/lib/types/ink/get-max-width.d.ts +20 -0
  344. package/lib/types/ink/get-max-width.d.ts.map +1 -0
  345. package/lib/types/ink/get-max-width.js +25 -0
  346. package/lib/types/ink/hit-test.d.ts +47 -0
  347. package/lib/types/ink/hit-test.d.ts.map +1 -0
  348. package/lib/types/ink/hit-test.js +126 -0
  349. package/lib/types/ink/hooks/use-animation-frame.d.ts +27 -0
  350. package/lib/types/ink/hooks/use-animation-frame.d.ts.map +1 -0
  351. package/lib/types/ink/hooks/use-animation-frame.js +48 -0
  352. package/lib/types/ink/hooks/use-app.d.ts +8 -0
  353. package/lib/types/ink/hooks/use-app.d.ts.map +1 -0
  354. package/lib/types/ink/hooks/use-app.js +8 -0
  355. package/lib/types/ink/hooks/use-copy-on-select.d.ts +22 -0
  356. package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -0
  357. package/lib/types/ink/hooks/use-copy-on-select.js +40 -0
  358. package/lib/types/ink/hooks/use-declared-cursor.d.ts +31 -0
  359. package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -0
  360. package/lib/types/ink/hooks/use-declared-cursor.js +65 -0
  361. package/lib/types/ink/hooks/use-input.d.ts +41 -0
  362. package/lib/types/ink/hooks/use-input.d.ts.map +1 -0
  363. package/lib/types/ink/hooks/use-input.js +73 -0
  364. package/lib/types/ink/hooks/use-interval.d.ts +23 -0
  365. package/lib/types/ink/hooks/use-interval.d.ts.map +1 -0
  366. package/lib/types/ink/hooks/use-interval.js +58 -0
  367. package/lib/types/ink/hooks/use-search-highlight.d.ts +34 -0
  368. package/lib/types/ink/hooks/use-search-highlight.d.ts.map +1 -0
  369. package/lib/types/ink/hooks/use-search-highlight.js +35 -0
  370. package/lib/types/ink/hooks/use-selection.d.ts +44 -0
  371. package/lib/types/ink/hooks/use-selection.d.ts.map +1 -0
  372. package/lib/types/ink/hooks/use-selection.js +64 -0
  373. package/lib/types/ink/hooks/use-stdin.d.ts +8 -0
  374. package/lib/types/ink/hooks/use-stdin.d.ts.map +1 -0
  375. package/lib/types/ink/hooks/use-stdin.js +8 -0
  376. package/lib/types/ink/hooks/use-tab-status.d.ts +18 -0
  377. package/lib/types/ink/hooks/use-tab-status.d.ts.map +1 -0
  378. package/lib/types/ink/hooks/use-tab-status.js +58 -0
  379. package/lib/types/ink/hooks/use-terminal-focus.d.ts +11 -0
  380. package/lib/types/ink/hooks/use-terminal-focus.d.ts.map +1 -0
  381. package/lib/types/ink/hooks/use-terminal-focus.js +15 -0
  382. package/lib/types/ink/hooks/use-terminal-size.d.ts +6 -0
  383. package/lib/types/ink/hooks/use-terminal-size.d.ts.map +1 -0
  384. package/lib/types/ink/hooks/use-terminal-size.js +12 -0
  385. package/lib/types/ink/hooks/use-terminal-title.d.ts +14 -0
  386. package/lib/types/ink/hooks/use-terminal-title.d.ts.map +1 -0
  387. package/lib/types/ink/hooks/use-terminal-title.js +30 -0
  388. package/lib/types/ink/hooks/use-terminal-viewport.d.ts +32 -0
  389. package/lib/types/ink/hooks/use-terminal-viewport.d.ts.map +1 -0
  390. package/lib/types/ink/hooks/use-terminal-viewport.js +79 -0
  391. package/lib/types/ink/ink.d.ts +370 -0
  392. package/lib/types/ink/ink.d.ts.map +1 -0
  393. package/lib/types/ink/ink.js +1665 -0
  394. package/lib/types/ink/instances.d.ts +10 -0
  395. package/lib/types/ink/instances.d.ts.map +1 -0
  396. package/lib/types/ink/instances.js +13 -0
  397. package/lib/types/ink/layout/engine.d.ts +7 -0
  398. package/lib/types/ink/layout/engine.d.ts.map +1 -0
  399. package/lib/types/ink/layout/engine.js +8 -0
  400. package/lib/types/ink/layout/geometry.d.ts +86 -0
  401. package/lib/types/ink/layout/geometry.d.ts.map +1 -0
  402. package/lib/types/ink/layout/geometry.js +95 -0
  403. package/lib/types/ink/layout/node.d.ts +151 -0
  404. package/lib/types/ink/layout/node.d.ts.map +1 -0
  405. package/lib/types/ink/layout/node.js +72 -0
  406. package/lib/types/ink/layout/yoga.d.ts +69 -0
  407. package/lib/types/ink/layout/yoga.d.ts.map +1 -0
  408. package/lib/types/ink/layout/yoga.js +249 -0
  409. package/lib/types/ink/line-width-cache.d.ts +9 -0
  410. package/lib/types/ink/line-width-cache.d.ts.map +1 -0
  411. package/lib/types/ink/line-width-cache.js +45 -0
  412. package/lib/types/ink/log-update.d.ts +57 -0
  413. package/lib/types/ink/log-update.d.ts.map +1 -0
  414. package/lib/types/ink/log-update.js +710 -0
  415. package/lib/types/ink/measure-element.d.ts +19 -0
  416. package/lib/types/ink/measure-element.d.ts.map +1 -0
  417. package/lib/types/ink/measure-element.js +10 -0
  418. package/lib/types/ink/measure-text.d.ts +13 -0
  419. package/lib/types/ink/measure-text.d.ts.map +1 -0
  420. package/lib/types/ink/measure-text.js +38 -0
  421. package/lib/types/ink/node-cache.d.ts +33 -0
  422. package/lib/types/ink/node-cache.d.ts.map +1 -0
  423. package/lib/types/ink/node-cache.js +42 -0
  424. package/lib/types/ink/optimizer.d.ts +18 -0
  425. package/lib/types/ink/optimizer.d.ts.map +1 -0
  426. package/lib/types/ink/optimizer.js +83 -0
  427. package/lib/types/ink/output.d.ts +200 -0
  428. package/lib/types/ink/output.d.ts.map +1 -0
  429. package/lib/types/ink/output.js +663 -0
  430. package/lib/types/ink/parse-keypress.d.ts +132 -0
  431. package/lib/types/ink/parse-keypress.d.ts.map +1 -0
  432. package/lib/types/ink/parse-keypress.js +707 -0
  433. package/lib/types/ink/reconciler.d.ts +43 -0
  434. package/lib/types/ink/reconciler.d.ts.map +1 -0
  435. package/lib/types/ink/reconciler.js +413 -0
  436. package/lib/types/ink/render-border.d.ts +36 -0
  437. package/lib/types/ink/render-border.d.ts.map +1 -0
  438. package/lib/types/ink/render-border.js +143 -0
  439. package/lib/types/ink/render-node-to-output.d.ts +93 -0
  440. package/lib/types/ink/render-node-to-output.d.ts.map +1 -0
  441. package/lib/types/ink/render-node-to-output.js +1290 -0
  442. package/lib/types/ink/render-to-screen.d.ts +65 -0
  443. package/lib/types/ink/render-to-screen.d.ts.map +1 -0
  444. package/lib/types/ink/render-to-screen.js +189 -0
  445. package/lib/types/ink/renderer.d.ts +24 -0
  446. package/lib/types/ink/renderer.d.ts.map +1 -0
  447. package/lib/types/ink/renderer.js +136 -0
  448. package/lib/types/ink/root.d.ts +91 -0
  449. package/lib/types/ink/root.d.ts.map +1 -0
  450. package/lib/types/ink/root.js +93 -0
  451. package/lib/types/ink/screen.d.ts +443 -0
  452. package/lib/types/ink/screen.d.ts.map +1 -0
  453. package/lib/types/ink/screen.js +1295 -0
  454. package/lib/types/ink/searchHighlight.d.ts +25 -0
  455. package/lib/types/ink/searchHighlight.d.ts.map +1 -0
  456. package/lib/types/ink/searchHighlight.js +82 -0
  457. package/lib/types/ink/selection.d.ts +323 -0
  458. package/lib/types/ink/selection.d.ts.map +1 -0
  459. package/lib/types/ink/selection.js +881 -0
  460. package/lib/types/ink/squash-text-nodes.d.ts +30 -0
  461. package/lib/types/ink/squash-text-nodes.d.ts.map +1 -0
  462. package/lib/types/ink/squash-text-nodes.js +63 -0
  463. package/lib/types/ink/stringWidth.d.ts +11 -0
  464. package/lib/types/ink/stringWidth.d.ts.map +1 -0
  465. package/lib/types/ink/stringWidth.js +209 -0
  466. package/lib/types/ink/styles.d.ts +324 -0
  467. package/lib/types/ink/styles.d.ts.map +1 -0
  468. package/lib/types/ink/styles.js +307 -0
  469. package/lib/types/ink/supports-hyperlinks.d.ts +20 -0
  470. package/lib/types/ink/supports-hyperlinks.d.ts.map +1 -0
  471. package/lib/types/ink/supports-hyperlinks.js +44 -0
  472. package/lib/types/ink/tabstops.d.ts +9 -0
  473. package/lib/types/ink/tabstops.d.ts.map +1 -0
  474. package/lib/types/ink/tabstops.js +46 -0
  475. package/lib/types/ink/terminal-focus-state.d.ts +35 -0
  476. package/lib/types/ink/terminal-focus-state.d.ts.map +1 -0
  477. package/lib/types/ink/terminal-focus-state.js +57 -0
  478. package/lib/types/ink/terminal-querier.d.ts +161 -0
  479. package/lib/types/ink/terminal-querier.d.ts.map +1 -0
  480. package/lib/types/ink/terminal-querier.js +204 -0
  481. package/lib/types/ink/terminal.d.ts +80 -0
  482. package/lib/types/ink/terminal.d.ts.map +1 -0
  483. package/lib/types/ink/terminal.js +268 -0
  484. package/lib/types/ink/termio/ansi.d.ts +75 -0
  485. package/lib/types/ink/termio/ansi.d.ts.map +1 -0
  486. package/lib/types/ink/termio/ansi.js +79 -0
  487. package/lib/types/ink/termio/csi.d.ts +253 -0
  488. package/lib/types/ink/termio/csi.d.ts.map +1 -0
  489. package/lib/types/ink/termio/csi.js +347 -0
  490. package/lib/types/ink/termio/dec.d.ts +61 -0
  491. package/lib/types/ink/termio/dec.d.ts.map +1 -0
  492. package/lib/types/ink/termio/dec.js +76 -0
  493. package/lib/types/ink/termio/esc.d.ts +15 -0
  494. package/lib/types/ink/termio/esc.d.ts.map +1 -0
  495. package/lib/types/ink/termio/esc.js +57 -0
  496. package/lib/types/ink/termio/osc.d.ts +208 -0
  497. package/lib/types/ink/termio/osc.d.ts.map +1 -0
  498. package/lib/types/ink/termio/osc.js +466 -0
  499. package/lib/types/ink/termio/parser.d.ts +46 -0
  500. package/lib/types/ink/termio/parser.d.ts.map +1 -0
  501. package/lib/types/ink/termio/parser.js +366 -0
  502. package/lib/types/ink/termio/sgr.d.ts +17 -0
  503. package/lib/types/ink/termio/sgr.d.ts.map +1 -0
  504. package/lib/types/ink/termio/sgr.js +300 -0
  505. package/lib/types/ink/termio/tokenize.d.ts +50 -0
  506. package/lib/types/ink/termio/tokenize.d.ts.map +1 -0
  507. package/lib/types/ink/termio/tokenize.js +266 -0
  508. package/lib/types/ink/termio/types.d.ts +211 -0
  509. package/lib/types/ink/termio/types.d.ts.map +1 -0
  510. package/lib/types/ink/termio/types.js +68 -0
  511. package/lib/types/ink/termio.d.ts +25 -0
  512. package/lib/types/ink/termio.d.ts.map +1 -0
  513. package/lib/types/ink/termio.js +24 -0
  514. package/lib/types/ink/truncateToWidth.d.ts +7 -0
  515. package/lib/types/ink/truncateToWidth.d.ts.map +1 -0
  516. package/lib/types/ink/truncateToWidth.js +18 -0
  517. package/lib/types/ink/useTerminalNotification.d.ts +45 -0
  518. package/lib/types/ink/useTerminalNotification.d.ts.map +1 -0
  519. package/lib/types/ink/useTerminalNotification.js +70 -0
  520. package/lib/types/ink/warn.d.ts +7 -0
  521. package/lib/types/ink/warn.d.ts.map +1 -0
  522. package/lib/types/ink/warn.js +15 -0
  523. package/lib/types/ink/widest-line.d.ts +7 -0
  524. package/lib/types/ink/widest-line.d.ts.map +1 -0
  525. package/lib/types/ink/widest-line.js +19 -0
  526. package/lib/types/ink/wrap-text.d.ts +10 -0
  527. package/lib/types/ink/wrap-text.d.ts.map +1 -0
  528. package/lib/types/ink/wrap-text.js +61 -0
  529. package/lib/types/ink/wrapAnsi.d.ts +18 -0
  530. package/lib/types/ink/wrapAnsi.d.ts.map +1 -0
  531. package/lib/types/ink/wrapAnsi.js +16 -0
  532. package/lib/types/invariant.d.ts +20 -0
  533. package/lib/types/invariant.d.ts.map +1 -0
  534. package/lib/types/invariant.js +26 -0
  535. package/lib/types/modelPrefs.d.ts +37 -0
  536. package/lib/types/modelPrefs.d.ts.map +1 -0
  537. package/lib/types/modelPrefs.js +66 -0
  538. package/lib/types/modelRoute.d.ts +79 -0
  539. package/lib/types/modelRoute.d.ts.map +1 -0
  540. package/lib/types/modelRoute.js +96 -0
  541. package/lib/types/native-ts/yoga-layout/enums.d.ts +183 -0
  542. package/lib/types/native-ts/yoga-layout/enums.d.ts.map +1 -0
  543. package/lib/types/native-ts/yoga-layout/enums.js +150 -0
  544. package/lib/types/native-ts/yoga-layout/index.d.ts +788 -0
  545. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -0
  546. package/lib/types/native-ts/yoga-layout/index.js +2571 -0
  547. package/lib/types/packaged-skills.d.ts +10 -0
  548. package/lib/types/packaged-skills.d.ts.map +1 -0
  549. package/lib/types/packaged-skills.js +63 -0
  550. package/lib/types/plugin.d.ts +33 -0
  551. package/lib/types/plugin.d.ts.map +1 -0
  552. package/lib/types/plugin.js +454 -0
  553. package/lib/types/presetPrefs.d.ts +29 -0
  554. package/lib/types/presetPrefs.d.ts.map +1 -0
  555. package/lib/types/presetPrefs.js +61 -0
  556. package/lib/types/presets.d.ts +110 -0
  557. package/lib/types/presets.d.ts.map +1 -0
  558. package/lib/types/presets.js +114 -0
  559. package/lib/types/questions.d.ts +97 -0
  560. package/lib/types/questions.d.ts.map +1 -0
  561. package/lib/types/questions.js +201 -0
  562. package/lib/types/screens/Chat.d.ts +23 -0
  563. package/lib/types/screens/Chat.d.ts.map +1 -0
  564. package/lib/types/screens/Chat.js +1263 -0
  565. package/lib/types/screens/StatusLine.d.ts +16 -0
  566. package/lib/types/screens/StatusLine.d.ts.map +1 -0
  567. package/lib/types/screens/StatusLine.js +105 -0
  568. package/lib/types/screens/StatusMetrics.d.ts +87 -0
  569. package/lib/types/screens/StatusMetrics.d.ts.map +1 -0
  570. package/lib/types/screens/StatusMetrics.js +252 -0
  571. package/lib/types/sessionHistory.d.ts +32 -0
  572. package/lib/types/sessionHistory.d.ts.map +1 -0
  573. package/lib/types/sessionHistory.js +87 -0
  574. package/lib/types/theme.d.ts +115 -0
  575. package/lib/types/theme.d.ts.map +1 -0
  576. package/lib/types/theme.js +300 -0
  577. package/lib/types/themePrefs.d.ts +28 -0
  578. package/lib/types/themePrefs.d.ts.map +1 -0
  579. package/lib/types/themePrefs.js +59 -0
  580. package/lib/types/ui.d.ts +28 -0
  581. package/lib/types/ui.d.ts.map +1 -0
  582. package/lib/types/ui.js +25 -0
  583. package/lib/types/update.d.ts +76 -0
  584. package/lib/types/update.d.ts.map +1 -0
  585. package/lib/types/update.js +203 -0
  586. package/lib/types/utils/clipboard.d.ts +43 -0
  587. package/lib/types/utils/clipboard.d.ts.map +1 -0
  588. package/lib/types/utils/clipboard.js +82 -0
  589. package/lib/types/utils/debug.d.ts +8 -0
  590. package/lib/types/utils/debug.d.ts.map +1 -0
  591. package/lib/types/utils/debug.js +12 -0
  592. package/lib/types/utils/earlyInput.d.ts +7 -0
  593. package/lib/types/utils/earlyInput.d.ts.map +1 -0
  594. package/lib/types/utils/earlyInput.js +6 -0
  595. package/lib/types/utils/env.d.ts +10 -0
  596. package/lib/types/utils/env.d.ts.map +1 -0
  597. package/lib/types/utils/env.js +9 -0
  598. package/lib/types/utils/envUtils.d.ts +8 -0
  599. package/lib/types/utils/envUtils.d.ts.map +1 -0
  600. package/lib/types/utils/envUtils.js +13 -0
  601. package/lib/types/utils/execFileNoThrow.d.ts +34 -0
  602. package/lib/types/utils/execFileNoThrow.d.ts.map +1 -0
  603. package/lib/types/utils/execFileNoThrow.js +31 -0
  604. package/lib/types/utils/fullscreen.d.ts +8 -0
  605. package/lib/types/utils/fullscreen.d.ts.map +1 -0
  606. package/lib/types/utils/fullscreen.js +10 -0
  607. package/lib/types/utils/intl.d.ts +7 -0
  608. package/lib/types/utils/intl.d.ts.map +1 -0
  609. package/lib/types/utils/intl.js +9 -0
  610. package/lib/types/utils/loaded-context.d.ts +20 -0
  611. package/lib/types/utils/loaded-context.d.ts.map +1 -0
  612. package/lib/types/utils/loaded-context.js +36 -0
  613. package/lib/types/utils/log.d.ts +7 -0
  614. package/lib/types/utils/log.d.ts.map +1 -0
  615. package/lib/types/utils/log.js +9 -0
  616. package/lib/types/utils/mentions.d.ts +30 -0
  617. package/lib/types/utils/mentions.d.ts.map +1 -0
  618. package/lib/types/utils/mentions.js +72 -0
  619. package/lib/types/utils/narration.d.ts +11 -0
  620. package/lib/types/utils/narration.d.ts.map +1 -0
  621. package/lib/types/utils/narration.js +16 -0
  622. package/lib/types/utils/semver.d.ts +9 -0
  623. package/lib/types/utils/semver.d.ts.map +1 -0
  624. package/lib/types/utils/semver.js +24 -0
  625. package/lib/types/utils/sliceAnsi.d.ts +12 -0
  626. package/lib/types/utils/sliceAnsi.d.ts.map +1 -0
  627. package/lib/types/utils/sliceAnsi.js +79 -0
  628. package/lib/types/working-activity.d.ts +19 -0
  629. package/lib/types/working-activity.d.ts.map +1 -0
  630. package/lib/types/working-activity.js +18 -0
  631. package/package.json +141 -0
  632. package/skills/audit/SKILL.md +24 -0
  633. package/skills/bug/SKILL.md +27 -0
  634. package/skills/pr-comments/SKILL.md +20 -0
  635. package/skills/practice/SKILL.md +22 -0
  636. package/skills/release-notes/SKILL.md +25 -0
  637. package/skills/review/SKILL.md +25 -0
  638. package/skills/vuln-check/SKILL.md +25 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026, chimney (ccch1mneyyy)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,235 @@
1
+
2
+ <p align="center">
3
+ <img src="docs/assets/logo.svg" alt="dsh-TUI - DeepSeek Harness terminal interface" width="560">
4
+ </p>
5
+ <p align="center">
6
+ <strong>简体中文</strong> | <a href="README_EN.md">English</a>
7
+ </p>
8
+
9
+
10
+ <p align="center">
11
+ <a href="https://www.npmjs.com/package/@deepseek-harness-tui/dsh-tui"><img alt="npm" src="https://img.shields.io/npm/v/@deepseek-harness-tui/dsh-tui?style=flat-square&color=4b6fff"></a>
12
+ <a href="https://github.com/ccch1mneyyy/dsh-TUI/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/ccch1mneyyy/dsh-TUI/actions/workflows/ci.yml/badge.svg"></a>
13
+ <a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-263146?style=flat-square"></a>
14
+ <img alt="Public beta" src="https://img.shields.io/badge/status-public%20beta-7da1de?style=flat-square">
15
+ <img alt="官方收录" src="https://img.shields.io/badge/DeepSeek%20Harness%20官方公众号-收录-brightgreen">
16
+ </p>
17
+
18
+ # dsh-TUI
19
+
20
+ > 一个美观且实用的 Claude Code 风格 TUI 插件:像素鲸鱼顶栏、双流光大字、实时工作状态行、思考流式展开、双击 Esc 时间回溯、蓝白上下文进度条 + TPS 仪表。
21
+ > 零核心改动,纯插件挂载。安装插件即可启用,卸载后不会留下核心补丁。
22
+
23
+ ## 🎉 官方收录
24
+
25
+ 本插件被 **DeepSeek Harness 官方公众号** 推文收录,作为"内测用户精选插件"展示:
26
+
27
+ <p align="center">
28
+ <img src="screenshots/wechat-official.png" alt="DeepSeek Harness 官方公众号推文收录 dsh-TUI" width="560">
29
+ </p>
30
+
31
+ ## 核心能力
32
+
33
+ - **终端原生交互**:流式 Markdown、结构化工具卡、命令与文件补全、`@` 文件引用
34
+ (消息任意位置补全,发送时自动附加文件内容/目录列表)、历史搜索、消息选择、
35
+ inline/alternate-screen 两种渲染模式,以及 `/lang` 中英界面语言切换。
36
+ - **可观察的 Agent 状态**:实时工作状态、上下文分段进度、TPS、缓存命中率、
37
+ 推理等级、输入/输出 token 与 Git/会话信息。
38
+ - **完整会话工作流**:`/resume`、`/new`、`/compact`、`/export`、模型切换,
39
+ 以及双击 `Esc` 发起的会话 rewind/fork。
40
+ - **DSH 官方能力接入**:Agent preset、Skills、MCP、Goals、Todos、子代理、
41
+ `ask_user_question` 问卷都通过现有服务或注册表连接。
42
+ - **为长会话设计**:事件驱动投影、差分终端输出、消息虚拟化、回放合并与有界缓存,
43
+ 避免渲染成本和内存随会话无限增长。
44
+
45
+ ## 界面预览
46
+
47
+ ![首屏:像素鲸鱼顶栏](screenshots/splash.png)
48
+
49
+ ![工作状态行 + 上下文进度条](screenshots/working-line.png)
50
+
51
+ ## 快速开始
52
+
53
+ 前置条件:可用的终端 TTY、官方 `dsh` CLI,以及 `pnpm` 10+。运行模型还需要
54
+ `DEEPSEEK_API_KEY`。
55
+
56
+ ```sh
57
+ # 1. 全局安装 CLI + 本插件(本插件自带 dsh-tui 直达命令)
58
+ npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui
59
+
60
+ # 2. 启动(首次运行会自动初始化 dsh-tui profile,需 pnpm)
61
+ dsh-tui
62
+ ```
63
+
64
+ 备选——手工安装 profile(仓库根目录 `install.sh` 已封装,含 pnpm 预检):
65
+
66
+ ```sh
67
+ sh install.sh
68
+ # 或:dsh plugin --profile dsh-tui add @deepseek-harness-tui/dsh-tui
69
+ # 之后 dsh-tui 与 dsh --profile dsh-tui 等价
70
+ ```
71
+
72
+ `dsh-tui --resume` 恢复上次会话;Windows 也可用仓库里的 `dsh-tui.cmd`(等价)。
73
+
74
+ TUI 启动后会在后台检查 npm 是否有新版本;发现更新时会提示,输入 `/update`
75
+ 即可自动更新并重启恢复当前会话。
76
+
77
+ 旧版 `dsh-cc-tui` / `cc-tui` profile 的迁移命令与兼容数据说明见
78
+ [安装与快速开始](docs/getting-started.md#从旧包迁移)。
79
+
80
+ 安装流程、profile 叠加机制、源码构建与常见问题见
81
+ [安装与快速开始](docs/getting-started.md)。
82
+
83
+ ## 快捷键
84
+
85
+ | 键 | 功能 |
86
+ |---|---|
87
+ | `Enter` | 发送(`Shift+Enter` 换行);命令菜单打开时执行选中项 |
88
+ | `Ctrl+C` | 中断当前回合;空闲时连按两次退出 |
89
+ | `Esc` | 关闭命令/文件菜单;空闲双击清空输入;**空输入双击 = 时间回溯** |
90
+ | `Ctrl+O` | 展开/收起详情(思考全文、工具参数与输出) |
91
+ | `Ctrl+R` | 历史消息搜索 |
92
+ | `/` | 会话内全文搜索(`n`/`N` 跳转) |
93
+ | `Tab` / `Enter` | 命令 / `@` 文件补全(目录可继续深入) |
94
+ | `Ctrl+V` | 粘贴:文本直接插入光标处;**Explorer 复制的文件/图片 → 插入文件路径** |
95
+ | `?` | 快捷键菜单 |
96
+ | `Shift+↑` | 消息选择模式(Enter 展开单条) |
97
+
98
+ **鼠标(`fullscreen: true` 全屏模式;默认关,profile 补丁层覆盖开启)**
99
+
100
+ | 操作 | 功能 |
101
+ |---|---|
102
+ | 拖拽选择 | 应用内文本选区,**松开即复制**(OSC 52 + `wl-copy`/`xclip`/`xsel` 原生兜底;tmux 内走 `load-buffer -w`),复制后自动取消选区并弹出「已复制 N 个字符」提示 |
103
+ | 双击 / 三击 | 选词 / 选行,同样即选即复制 |
104
+ | 滚轮 | 滚动消息列表 |
105
+ | `Esc` | 拖拽进行中取消选区(不复制) |
106
+
107
+ **问卷(模型发起 `ask_user_question` 时)**
108
+
109
+ | 键 | 功能 |
110
+ |---|---|
111
+ | `↑/↓` | 选择选项 |
112
+ | `Space` | 多选题勾选/取消 |
113
+ | `Tab` | 切到自定义回答(不选选项直接打字) |
114
+ | `Enter` | 提交当前选择 |
115
+ | `Esc` | 中断提问(模型收到 ASK_ABORTED,可继续对话) |
116
+
117
+ **本地命令(CC 指令全集复刻,均走 DSH 官方链路)**
118
+
119
+ | 分组 | 命令 |
120
+ |---|---|
121
+ | 会话 | `/new` 新会话 · `/resume` 恢复 · `/clear` 清屏 · `/compact` 压缩 · `/export` 导出 Markdown |
122
+ | 状态 | `/status` 会话信息 · `/cost` token 用量 · `/doctor` 环境自检 · `/config` 配置来源 · `/init` 创建 AGENTS.md |
123
+ | 模型 | `/model` 选择器 · `/thinking` 思考显示 · `/tokens` token 明细 · `/theme` 主题选择器 · `/lang` 中英界面切换 |
124
+ | 账号/策略 | `/login` 凭证状态 · `/logout` 登出说明 · `/permissions` 权限说明 · `/add-dir` 文件策略范围 · `/hooks` · `/mcp` · `/memory` |
125
+ | 技能 | `/audit` 代码审计 · `/bug` bug 报告 · `/review` 代码评审 · `/practice` 编程练习 · `/pr_comments` PR 评论 · `/release-notes` 发布说明 · `/vuln-check` 漏洞检查 |
126
+ | 其它 | `/agents` 子代理列表 · `/update` 自动更新并重启 · `/vim` · `/terminal-setup` · `/connect` · `/help` · `/exit` |
127
+ | 注册表 | `/plan` `/goal`(DSH 命令注册表插件,随插件自动并入 `/` 菜单) |
128
+
129
+ ## 文档
130
+
131
+ | 主题 | 内容 |
132
+ | --- | --- |
133
+ | [安装与快速开始](docs/getting-started.md) | 前置条件、安装、启动、profile 生命周期、源码开发 |
134
+ | [配置参考](docs/configuration.md) | Cordis 覆盖、配置字段、Agent preset、MCP、环境变量 |
135
+ | [主题系统](docs/themes.md) | 内置主题、自动检测、自定义 JSON 主题与校验规则 |
136
+ | [交互与命令](docs/interaction.md) | 快捷键、鼠标、问卷、slash command 与会话工作流 |
137
+ | [架构与限制](docs/architecture.md) | 运行链路、渲染与持久化设计、安全边界、已知限制 |
138
+ | [贡献与开发约定](docs/contributing.md) | 贡献流程、仓库地图、构建产物、验证矩阵与修改规则 |
139
+
140
+ 完整的中英文索引见 [`docs/README.md`](docs/README.md)。
141
+
142
+ ## 配置与扩展
143
+
144
+ - **Agent preset**:四种官方 Agent 模式(`standard` / `code` / `minimal` / `cordis`),
145
+ `/preset` 切换;已产生对话的会话不可切换,空白会话立即生效。默认 preset 持久化
146
+ 在 `~/.dsh-cc/agent-preset.json`;`/model` 的选择持久化在 `~/.dsh-cc/model.json`。
147
+ 详见[配置参考](docs/configuration.md#agent-preset)。
148
+ - **自定义主题**:`/theme` 选择器(内置 `light` / `dark` / `dark-ansi`),也支持
149
+ `~/.dsh-cc/themes/<名字>.json` 自定义主题,选中即热切换并持久化;
150
+ `CC_TUI_THEME` 环境变量 > 持久化选择 > OSC 11 终端背景自动检测。
151
+ 详见[主题系统](docs/themes.md)。
152
+ - **MCP**:通过 `@deepseek-ai/dsh-mcp-client` 挂载服务器,工具以
153
+ `mcp__<服务器>__<工具>` 注册;`/mcp` 查看连接状态。
154
+ 详见[配置参考](docs/configuration.md#mcp)。
155
+
156
+ ## 工作方式
157
+
158
+ ```text
159
+ dsh profile
160
+ -> dsh-base
161
+ -> dsh-TUI Cordis patch
162
+ -> Agent preset + DSH services
163
+ -> session/event
164
+ -> Channel projection
165
+ -> React components
166
+ -> ported Ink/Yoga renderer
167
+ -> terminal
168
+ ```
169
+
170
+ TUI 只负责交互与呈现。会话日志是对话真源,模型调用、工具执行、fork/resume、
171
+ compaction 和持久化继续由 DSH 服务拥有。更详细的模块边界与性能设计见
172
+ [架构文档](docs/architecture.md)。
173
+
174
+ ## 技术要点
175
+
176
+ - **Gentle Mist Blue 配色**:雾蓝只承担品牌、焦点、交互与高亮,正文保持中性灰;
177
+ 启动时查询终端背景色(OSC 11)自动选浅色/深色调色板,终端不响应时回退深色。
178
+ - **事件驱动渲染**:`session/event` 事件流 → 增量差分渲染,滚动状态独立维护。
179
+ - **布局级虚拟化**:长会话的每帧成本从 O(全会话) 降到 O(可视窗口)——屏幕外的
180
+ 消息行渲染为"量高占位符",其子树完全不参与布局。
181
+ - **上下文进度条**:参考 pi-nano-context 算法(最大余数法分段着色 + 多级缩略读数)。
182
+ - **TPS 仪表**:参考 pi-tps-meter——流式 1/8 格 gauge、历史 min-max sparkline、
183
+ 速度语义色(≥50 绿 / ≥20 黄 / <20 红)。
184
+ - **working-activity 生态**:工作状态行消费
185
+ [dsh-working-activity](https://github.com/ccch1mneyyy/dsh-working-activity)
186
+ 的 log-only `activity/status` 事件(与 Web UI 同一数据源)。
187
+ - **终端粘贴**:raw 模式下 Ctrl+V 由应用接管——PowerShell `Get-Clipboard` 读取,
188
+ Explorer 复制的文件/图片插入文件路径,纯文本原样插入光标处。
189
+
190
+ ## 已知限制
191
+
192
+ - 注入上下文(plugin source 内容)未做独立展示,随系统提示词并入进度条统计。
193
+ - `/model` 实时切换走"会话 fork 续聊"(DSH 无原位换模型 API):历史原样保留,
194
+ 新会话路由到新模型,旧会话仍留在 `/resume` 列表里;选择写入
195
+ `~/.dsh-cc/model.json`,重启与 `/new` 均沿用。
196
+ - `Ctrl+V` 读剪贴板依赖 PowerShell `Get-Clipboard`:剪贴板被其他进程短暂锁定
197
+ 时自动重试,持续锁定时静默放弃。
198
+ - 退出时以进程退出收尾,不等待 agent 异步落盘(持久化由 persistence 插件兜底)。
199
+ - DSH 的 `/permission`(沙箱模式切换)未适配:需要 approval 服务 + 审批 UI,
200
+ 当前 TUI 不消费审批流,刻意不挂。
201
+ - `/vim` `/connect` `/hooks` `/memory` 为 CC 同名占位:对应能力在 DSH 侧无等价
202
+ 机制,命令会给出明确说明而非静默。
203
+
204
+ 完整已知限制与安全边界见[架构与限制](docs/architecture.md)。
205
+
206
+ ## 开发
207
+
208
+ CI 使用 Node 24 与 pnpm 11;包声明支持 Node `^22.19 || >=24`。
209
+
210
+ ```sh
211
+ pnpm install --frozen-lockfile
212
+ pnpm build
213
+ pnpm smoke
214
+ ```
215
+
216
+ `pnpm build` 会把 `src/` 编译到已提交的 `lib/types/`。修改源码时必须同步生成产物;
217
+ 渲染、问卷和工具卡还需运行对应回归脚本。
218
+
219
+ ## 权限与安全边界
220
+
221
+ `dsh-TUI` 不实现独立沙箱,而是使用当前 DSH profile 的文件、Shell、sandbox 与
222
+ approval 策略。仓库提供的 profile 在非 Windows 平台默认采用工作区约束与审批;
223
+ Windows 当前没有对应的沙箱后端,组合会退回到 `danger-full-access` 且不弹审批。
224
+ 在包含敏感凭证或不可信仓库的环境中启动前,请先检查 profile 配置。
225
+
226
+ 详见[权限边界与已知限制](docs/architecture.md#权限与安全边界)。
227
+
228
+ ### 友情链接
229
+
230
+ 朋友们开发的[社区、相关项目与周边工具](docs/links.md)
231
+
232
+
233
+ ## License
234
+
235
+ [MIT](LICENSE)
package/bin/dsh-tui.js ADDED
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * dsh-tui — dsh-tui profile 的一键直达启动器。
4
+ *
5
+ * 全局安装 @deepseek-harness-tui/dsh-tui 后获得 `dsh-tui` 命令,免去手工
6
+ * 输入 `dsh --profile dsh-tui`:
7
+ *
8
+ * 1. 检测 dsh CLI(缺失时提示安装 @deepseek-ai/dsh);
9
+ * 2. 检测 $DSH_HOME/profiles/dsh-tui 是否已初始化,未初始化则自动执行
10
+ * `dsh plugin --profile dsh-tui add @deepseek-harness-tui/dsh-tui@<本包版本>`
11
+ * 自举——版本号与本包对齐,避免 pnpm store 缓存带来的旧版漂移;
12
+ * 3. 透传全部参数启动 `dsh --profile dsh-tui`。
13
+ *
14
+ * `--resume` 由本启动器拦截:读取 TUI 保留的兼容路径 ~/.dsh-cc/resume.txt,
15
+ * 以 DSH_CC_RESUME_SESSION 环境变量喂回(见 src/sessionHistory.ts 的
16
+ * 启动器契约),该 flag 本身不再传给 dsh。
17
+ */
18
+ import { spawn, spawnSync } from 'node:child_process'
19
+ import { existsSync, readFileSync } from 'node:fs'
20
+ import { homedir } from 'node:os'
21
+ import { join } from 'node:path'
22
+ import { fileURLToPath } from 'node:url'
23
+
24
+ const here = fileURLToPath(new URL('.', import.meta.url))
25
+ const ownVersion = JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf8')).version
26
+ const PACKAGE = '@deepseek-harness-tui/dsh-tui'
27
+ const PROFILE = 'dsh-tui'
28
+
29
+ // React 开发构建会把每次渲染的 performance.measure() 堆进无界缓冲区导致
30
+ // 长会话 OOM——与仓库根 dsh-tui.cmd 保持一致,强制 production。
31
+ process.env.NODE_ENV ??= 'production'
32
+
33
+ const isWin = process.platform === 'win32'
34
+ // Windows 上 .cmd shim 必须经 shell 启动(Node ≥18.20.2 的安全限制);
35
+ // 其余平台直接 spawn 无后缀的 dsh。
36
+ const shellOpt = isWin ? { shell: true } : {}
37
+
38
+ // --- 1. dsh CLI 预检 ---------------------------------------------------------
39
+ const probe = spawnSync('dsh', ['--version'], { stdio: 'pipe', ...shellOpt })
40
+ if (probe.error || probe.status !== 0) {
41
+ console.error('[dsh-tui] 未检测到 dsh CLI。请先安装官方客户端:')
42
+ console.error(' npm install -g @deepseek-ai/dsh')
43
+ process.exit(1)
44
+ }
45
+
46
+ // --- 2. profile 自举 ----------------------------------------------------------
47
+ const dshHome = process.env.DSH_HOME || join(homedir(), '.dsh')
48
+ const profileDir = join(dshHome, 'profiles', PROFILE)
49
+ if (!existsSync(join(profileDir, 'node_modules', '@deepseek-harness-tui', 'dsh-tui'))) {
50
+ const pnpmProbe = spawnSync('pnpm', ['--version'], { stdio: 'pipe', ...shellOpt })
51
+ if (pnpmProbe.error || pnpmProbe.status !== 0) {
52
+ console.error('[dsh-tui] 首次安装需要 pnpm(dsh plugin 会把安装转发给它):')
53
+ console.error(' npm install -g pnpm (或启用 corepack:corepack enable pnpm)')
54
+ process.exit(1)
55
+ }
56
+ console.log(`[dsh-tui] 首次运行,正在初始化 ${PROFILE} profile(${PACKAGE}@${ownVersion})…`)
57
+ const add = spawnSync('dsh', ['plugin', '--profile', PROFILE, 'add', `${PACKAGE}@${ownVersion}`], { stdio: 'inherit', ...shellOpt })
58
+ if (add.status !== 0) {
59
+ console.error('[dsh-tui] 插件安装失败。可稍后手工重试:')
60
+ console.error(` dsh plugin --profile ${PROFILE} add ${PACKAGE}@${ownVersion}`)
61
+ process.exit(add.status ?? 1)
62
+ }
63
+ }
64
+
65
+ // --- 3. --resume 拦截 ---------------------------------------------------------
66
+ const args = []
67
+ for (const a of process.argv.slice(2)) {
68
+ if (a === '--resume') {
69
+ try {
70
+ process.env.DSH_CC_RESUME_SESSION = readFileSync(join(homedir(), '.dsh-cc', 'resume.txt'), 'utf8').trim()
71
+ } catch {
72
+ // 没有历史会话可恢复——静默忽略,正常冷启动。
73
+ }
74
+ } else {
75
+ args.push(a)
76
+ }
77
+ }
78
+
79
+ // --- 4. 启动 ------------------------------------------------------------------
80
+ const child = spawn('dsh', ['--profile', PROFILE, ...args], {
81
+ stdio: 'inherit',
82
+ env: process.env,
83
+ ...shellOpt,
84
+ })
85
+ child.on('error', (err) => {
86
+ console.error(`[dsh-tui] 启动失败:${err.message}`)
87
+ process.exit(1)
88
+ })
89
+ child.on('exit', (code, signal) => {
90
+ if (signal) {
91
+ process.kill(process.pid, signal)
92
+ } else {
93
+ process.exit(code ?? 0)
94
+ }
95
+ })
@@ -0,0 +1,218 @@
1
+ # The dsh-tui bundle patch: the interactive terminal front door over the
2
+ # dsh-base layer. Applied after dsh-base's insert; rows here override base
3
+ # rows by id, with the profile's own cordis.patch.yml and any --patch
4
+ # overlays still to come.
5
+ #
6
+ # A patch replaces the targeted row's whole `config`, so each row below
7
+ # restates every key it owns (see the dsh-base patch for the shared
8
+ # defaults). The dsh-base core rows that need no dsh-tui value — tools,
9
+ # sandbox/approval policy, skills, goal, plan mode, workspace context,
10
+ # telemetry — are inherited unchanged.
11
+
12
+ # ── surface-specific values over the dsh-base layer ─────────────────────────
13
+
14
+ # The dsh-tui deployment persona; CC_TUI_PERSONA overrides the coding-agent
15
+ # default (the base persona is empty).
16
+ - id: system-prompt
17
+ config:
18
+ persona: !!js process.env.CC_TUI_PERSONA ?? 'You are a coding agent.'
19
+
20
+ # The native DeepSeek adapter, pinned to the harness defaults: full thinking
21
+ # at max effort, key and base URL from the launching environment. The base
22
+ # entry defers both to the `llm-deepseek:` settings section; the settings
23
+ # document still overrides these entries per request when it carries one.
24
+ # rc.6 schema key is `apiKeyEnv` (credential-ref env var NAME, default
25
+ # DEEPSEEK_API_KEY); the old snapshot's `apiKey` key no longer exists.
26
+ - id: llm-deepseek
27
+ config:
28
+ apiKeyEnv: 'DEEPSEEK_API_KEY'
29
+ baseURL: !!js process.env.DEEPSEEK_BASE_URL
30
+ thinking: enabled
31
+ reasoningEffort: max
32
+
33
+ # The TUI creates (or resumes) its agent at runtime through the agent
34
+ # factory; no declarative agents are started at boot, and the configured
35
+ # agent list stays the base's empty default.
36
+ - id: agent-loop
37
+ config:
38
+ agents: []
39
+
40
+ # ── agent presets (issue #8) ────────────────────────────────────────────────
41
+ #
42
+ # The model-facing plugin set moves INTO the agent-presets roster: every
43
+ # session composes its tools/prompt sections from one preset directory
44
+ # (standard/code/minimal/cordis) instead of the host rows below. The dsh CLI's
45
+ # profile-boot sees this composition's `agent-presets` row and overlays the
46
+ # shipped `config/agent-presets/` root onto it automatically, so the row here
47
+ # carries no roots; `$DSH_HOME/.agent-presets` (user-authored presets) is
48
+ # appended by the roster itself (`includeUserRoot` default). Mirroring the
49
+ # official dsh-web-app patch: every dsh-base row a preset now owns is
50
+ # disabled here, so a minimal agent does not leak host-layer tools (an agent's
51
+ # registry view resolves agent → preset → global).
52
+
53
+ - id: agent-instructions
54
+ disabled: true
55
+
56
+ - id: command-compact
57
+ disabled: true
58
+
59
+ # compaction lives in the preset's own isolate realm (standard/code/cordis
60
+ # carry `compaction-basic` with package defaults; minimal has none). The
61
+ # CC_TUI_COMPACT_RATIO/CC_TUI_COMPACT_RETAIN tunables retired with this host
62
+ # row — preset compositions own their compaction config.
63
+ - id: compaction-basic
64
+ disabled: true
65
+
66
+ - id: plan-mode
67
+ disabled: true
68
+
69
+ - id: skill-filesystem
70
+ disabled: true
71
+
72
+ - id: tool-bash
73
+ disabled: true
74
+
75
+ - id: tool-fs
76
+ disabled: true
77
+
78
+ - id: tool-fs-search
79
+ disabled: true
80
+
81
+ - id: tool-goal
82
+ disabled: true
83
+
84
+ - id: tool-jobs
85
+ disabled: true
86
+
87
+ - id: tool-pwsh
88
+ disabled: true
89
+
90
+ - id: tool-ralph
91
+ disabled: true
92
+
93
+ - id: tool-result-pruner
94
+ disabled: true
95
+
96
+ - id: tool-skill
97
+ disabled: true
98
+
99
+ - id: tool-str-replace-editor
100
+ disabled: true
101
+
102
+ # Delegation tools (subagent spawn/fork, controls, workflows) are preset rows
103
+ # now; the preset's `delegation` group re-adds them with package defaults, so
104
+ # the former TUI's depth-1 cap no longer applies.
105
+ - id: tool-subagent
106
+ disabled: true
107
+
108
+ - id: tool-subagent-control
109
+ disabled: true
110
+
111
+ - id: tool-subagent-fork
112
+ disabled: true
113
+
114
+ - id: tool-subagent-list-agents
115
+ disabled: true
116
+
117
+ - id: tool-todo
118
+ disabled: true
119
+
120
+ - id: tool-web
121
+ disabled: true
122
+
123
+ - id: tool-workflow
124
+ disabled: true
125
+
126
+ - id: workflow-worker-thread
127
+ disabled: true
128
+
129
+ # Windows has no sandbox confinement backend yet (sandbox-local's win32
130
+ # chain is empty); use danger-full-access on Windows so bash commands can
131
+ # run. Other platforms keep the base workspace-write default.
132
+ - id: sandbox-policy
133
+ config:
134
+ mode: !!js "process.platform === 'win32' ? 'danger-full-access' : (process.env.DSH_PERMISSION_MODE ?? 'workspace-write')"
135
+ workspaceRoot: !!js process.cwd()
136
+
137
+ # On Windows, skip approval prompts (no sandbox = the user's terminal trust
138
+ # model, matching every other terminal coding agent).
139
+ - id: approval
140
+ config:
141
+ policy: !!js "process.platform === 'win32' ? 'never' : ((process.env.DSH_PERMISSION_MODE ?? 'workspace-write') === 'danger-full-access' ? 'never' : 'ask')"
142
+
143
+ # Sessions live in the shared JSONL store (~/.dsh/sessions) — the same
144
+ # backend dsh web writes — so /resume here and the web session list see each
145
+ # other (#24). The row itself comes from the dsh-base layer; this override
146
+ # only re-points the root when DSH_CC_SESSION_ROOT is set (test isolation).
147
+ - id: session-persistence-jsonl
148
+ config:
149
+ root: !!js process.env.DSH_CC_SESSION_ROOT ?? dshHomePath('sessions')
150
+
151
+ # ── dsh-tui rows ────────────────────────────────────────────────────────────
152
+
153
+ # The `user-interaction` service row comes from the dsh-base bundle layer
154
+ # (mounted before this layer); do not insert it again — the include patch
155
+ # semantics would create a duplicate row. dsh-tui defensively creates the
156
+ # service on its own context when no composition provides it (bare
157
+ # `dsh --config cordis.yml` boots), then mounts the model-facing
158
+ # ask_user_question tool and registers the questionnaire provider on
159
+ # `ctx.userQuestions`.
160
+
161
+ - insert:
162
+ # The agent-preset roster (issue #8): `ctx.agentPresets`, the service the
163
+ # TUI composes every session's model-facing world from. No `roots` here —
164
+ # the dsh CLI's profile-boot overlays its shipped `config/agent-presets/`
165
+ # directory (standard/code/minimal/cordis, system trust) onto this row
166
+ # whenever a composition carries it, and the roster itself appends the
167
+ # user-authored `$DSH_HOME/.agent-presets` root. A boot that never reached
168
+ # profile-boot (bare `dsh --config cordis.yml`) leaves the roster empty;
169
+ # the TUI then keeps its pre-presets behavior (see presets.ts).
170
+ - id: agent-presets
171
+ name: '@deepseek-ai/dsh-agent-presets'
172
+ config:
173
+ default: standard
174
+
175
+ # Host-plane services the `cordis` preset's plugin-experimentation tool
176
+ # waits on (dynamicCordisRunner/cordisInspect); dsh-base carries no such
177
+ # row — the official web app inserts it the same way.
178
+ - id: cordis-host-runner
179
+ name: '@deepseek-ai/dsh-cordis-host-runner'
180
+
181
+ # The interactive front door. The plugin creates/resumes its agent at
182
+ # runtime, seeds the startup status line, and disposes the whole app tree
183
+ # (exiting the process) when the TUI unmounts. `dsh-tui.cmd --resume`
184
+ # feeds the session id through DSH_CC_RESUME_SESSION.
185
+ - id: dsh-tui
186
+ name: '@deepseek-harness-tui/dsh-tui'
187
+ config:
188
+ provider: deepseek-official
189
+ # Alt-screen fullscreen(CC 同款):应用内鼠标选区(选择即复制, OSC 52 +
190
+ # wl-copy/xclip/xsel 兜底)、滚轮滚动、双击选词/三击选行。默认关闭——
191
+ # inline 模式下由终端原生选择/复制/scrollback 接管;想用 fullscreen 在
192
+ # profile 用户层 cordis.patch.yml 同 id 覆盖整行 config(fullscreen: true)。
193
+ fullscreen: false
194
+ # 每个请求实际生效的推理强度,按当前路由的 adapter 档位校验
195
+ # (deepseek: off/high/max)——不在档位表里的值被忽略,回落 adapter
196
+ # 默认值。优先于持久化的 Shift+Tab 选择(~/.dsh-cc/effort.json);
197
+ # 同时作为顶栏/状态栏的启动显示,首个请求头回来后以实际值为准。
198
+ effort: max
199
+ # Static preset choice (CC_TUI_PRESET overrides): wins over the
200
+ # persisted `/preset` preference (~/.dsh-cc/agent-preset.json), which
201
+ # wins over the roster default (standard).
202
+ preset: !!js process.env.CC_TUI_PRESET ?? undefined
203
+ sessionId: !!js process.env.DSH_CC_RESUME_SESSION ?? undefined
204
+
205
+ # Live working-line data source (thinking copy / running tool / turn
206
+ # summary). Mounted through @deepseek-harness-tui/dsh-tui's own
207
+ # `./working-activity` re-export, NOT the bare `dsh-working-activity`
208
+ # name: the dsh Loader resolves row names from the profile directory,
209
+ # and pnpm's isolated node_modules layout never links a transitive
210
+ # dependency into the profile root (npm's flat layout hid this), so the
211
+ # bare name died with ERR_MODULE_NOT_FOUND and disposed the whole app at
212
+ # boot (#60).
213
+ # publishIntervalMs 500 keeps the status-line timers ticking smoothly
214
+ # (default 2000ms).
215
+ - id: working-activity
216
+ name: '@deepseek-harness-tui/dsh-tui/working-activity'
217
+ config:
218
+ publishIntervalMs: 500