@deepseek-harness-tui/dsh-tui 0.10.0-beta.4 → 0.10.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 (592) hide show
  1. package/README.md +30 -15
  2. package/bin/dsh-tui.js +7 -37
  3. package/cordis.patch.yml +21 -20
  4. package/cordis.yml +6 -4
  5. package/lib/types/activityPrefs.js +3 -3
  6. package/lib/types/bootstrap/state.d.ts +2 -4
  7. package/lib/types/bootstrap/state.d.ts.map +1 -1
  8. package/lib/types/bootstrap/state.js +2 -4
  9. package/lib/types/commands.d.ts +6 -4
  10. package/lib/types/commands.d.ts.map +1 -1
  11. package/lib/types/commands.js +8 -9
  12. package/lib/types/components/ActivityLine.d.ts +1 -1
  13. package/lib/types/components/ActivityLine.js +5 -5
  14. package/lib/types/components/ActivityPicker.d.ts +2 -2
  15. package/lib/types/components/ActivityPicker.js +2 -2
  16. package/lib/types/components/BalanceReportRow.js +1 -1
  17. package/lib/types/components/BtwPanel.d.ts +2 -2
  18. package/lib/types/components/BtwPanel.js +2 -2
  19. package/lib/types/components/Chat/JobCard.d.ts +2 -2
  20. package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
  21. package/lib/types/components/Chat/JobCard.js +2 -2
  22. package/lib/types/components/Chat/SubagentMessage.d.ts +2 -2
  23. package/lib/types/components/Chat/SubagentMessage.d.ts.map +1 -1
  24. package/lib/types/components/Chat/SubagentMessage.js +2 -2
  25. package/lib/types/components/ColorPicker.js +1 -1
  26. package/lib/types/components/CommandSuggestions.d.ts +3 -4
  27. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  28. package/lib/types/components/CommandSuggestions.js +5 -6
  29. package/lib/types/components/ContextBarView.d.ts +1 -1
  30. package/lib/types/components/ContextBarView.js +2 -2
  31. package/lib/types/components/EffortInputBorder.d.ts +1 -1
  32. package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
  33. package/lib/types/components/ExtensionDialog.d.ts.map +1 -1
  34. package/lib/types/components/ExtensionDialog.js +65 -26
  35. package/lib/types/components/FileSuggestions.d.ts +0 -17
  36. package/lib/types/components/FileSuggestions.d.ts.map +1 -1
  37. package/lib/types/components/FileSuggestions.js +35 -20
  38. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  39. package/lib/types/components/GoalTodoPanel.js +3 -3
  40. package/lib/types/components/HelpMenu.d.ts +2 -2
  41. package/lib/types/components/HelpMenu.js +2 -2
  42. package/lib/types/components/HistorySearchDialog.d.ts +1 -2
  43. package/lib/types/components/HistorySearchDialog.d.ts.map +1 -1
  44. package/lib/types/components/HistorySearchDialog.js +2 -3
  45. package/lib/types/components/ImagePreviewOverlay.d.ts +51 -0
  46. package/lib/types/components/ImagePreviewOverlay.d.ts.map +1 -0
  47. package/lib/types/components/ImagePreviewOverlay.js +263 -0
  48. package/lib/types/components/JobsPanel.js +2 -2
  49. package/lib/types/components/LogoV2.d.ts +22 -6
  50. package/lib/types/components/LogoV2.d.ts.map +1 -1
  51. package/lib/types/components/LogoV2.js +138 -17
  52. package/lib/types/components/Markdown.js +2 -2
  53. package/lib/types/components/MarkdownTable.d.ts +4 -8
  54. package/lib/types/components/MarkdownTable.d.ts.map +1 -1
  55. package/lib/types/components/MarkdownTable.js +128 -245
  56. package/lib/types/components/MessageList.d.ts +13 -5
  57. package/lib/types/components/MessageList.d.ts.map +1 -1
  58. package/lib/types/components/MessageList.js +50 -32
  59. package/lib/types/components/ModelPicker.d.ts +1 -1
  60. package/lib/types/components/ModelPicker.js +1 -1
  61. package/lib/types/components/OverlayAbove.d.ts +7 -0
  62. package/lib/types/components/OverlayAbove.d.ts.map +1 -1
  63. package/lib/types/components/OverlayAbove.js +12 -1
  64. package/lib/types/components/PageMargin.d.ts +58 -0
  65. package/lib/types/components/PageMargin.d.ts.map +1 -0
  66. package/lib/types/components/PageMargin.js +38 -0
  67. package/lib/types/components/PluginStatusViewBoundary.d.ts +26 -0
  68. package/lib/types/components/PluginStatusViewBoundary.d.ts.map +1 -0
  69. package/lib/types/components/PluginStatusViewBoundary.js +22 -0
  70. package/lib/types/components/PresetPicker.d.ts +2 -2
  71. package/lib/types/components/PresetPicker.js +2 -2
  72. package/lib/types/components/PromptEditor.d.ts +2 -0
  73. package/lib/types/components/PromptEditor.d.ts.map +1 -1
  74. package/lib/types/components/PromptEditor.js +18 -3
  75. package/lib/types/components/PromptInput.d.ts +36 -9
  76. package/lib/types/components/PromptInput.d.ts.map +1 -1
  77. package/lib/types/components/PromptInput.js +861 -205
  78. package/lib/types/components/RewindPicker.d.ts +2 -2
  79. package/lib/types/components/RewindPicker.js +2 -2
  80. package/lib/types/components/ScrollbarGutter.d.ts.map +1 -1
  81. package/lib/types/components/SearchBox.d.ts +2 -2
  82. package/lib/types/components/SearchBox.js +4 -4
  83. package/lib/types/components/Select.d.ts +1 -1
  84. package/lib/types/components/Select.js +2 -2
  85. package/lib/types/components/Spinner/GlimmerMessage.d.ts +1 -3
  86. package/lib/types/components/Spinner/GlimmerMessage.d.ts.map +1 -1
  87. package/lib/types/components/Spinner/GlimmerMessage.js +35 -55
  88. package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts +3 -4
  89. package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts.map +1 -1
  90. package/lib/types/components/Spinner/SpinnerAnimationRow.js +46 -45
  91. package/lib/types/components/Spinner/SpinnerGlyph.d.ts +2 -2
  92. package/lib/types/components/Spinner/SpinnerGlyph.js +3 -3
  93. package/lib/types/components/Spinner/spinnerUtils.d.ts +3 -3
  94. package/lib/types/components/Spinner/spinnerUtils.d.ts.map +1 -1
  95. package/lib/types/components/Spinner/spinnerUtils.js +8 -14
  96. package/lib/types/components/Spinner/useStalledAnimation.d.ts +9 -8
  97. package/lib/types/components/Spinner/useStalledAnimation.d.ts.map +1 -1
  98. package/lib/types/components/Spinner/useStalledAnimation.js +40 -58
  99. package/lib/types/components/SplitDiffView.d.ts +2 -2
  100. package/lib/types/components/SplitDiffView.d.ts.map +1 -1
  101. package/lib/types/components/SplitDiffView.js +4 -4
  102. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
  103. package/lib/types/components/StreamingMarkdown.js +3 -4
  104. package/lib/types/components/SubagentCard.js +1 -1
  105. package/lib/types/components/SubagentDashboard.js +1 -1
  106. package/lib/types/components/SubagentDetailScene.js +2 -2
  107. package/lib/types/components/SyntaxText.js +2 -2
  108. package/lib/types/components/ThemePicker.js +1 -1
  109. package/lib/types/components/TimelineRail.d.ts.map +1 -1
  110. package/lib/types/components/TipsPanel.js +1 -1
  111. package/lib/types/components/ToolUseLoader.js +1 -1
  112. package/lib/types/components/Tooltip.d.ts.map +1 -1
  113. package/lib/types/components/Tooltip.js +13 -5
  114. package/lib/types/components/TurnInterruptedRow.d.ts +6 -0
  115. package/lib/types/components/TurnInterruptedRow.d.ts.map +1 -0
  116. package/lib/types/components/{InterruptedByUser.js → TurnInterruptedRow.js} +2 -3
  117. package/lib/types/components/Whale.d.ts +21 -12
  118. package/lib/types/components/Whale.d.ts.map +1 -1
  119. package/lib/types/components/Whale.js +46 -17
  120. package/lib/types/components/WorkingSpinner.d.ts +3 -5
  121. package/lib/types/components/WorkingSpinner.d.ts.map +1 -1
  122. package/lib/types/components/WorkingSpinner.js +7 -8
  123. package/lib/types/components/activityFrames.d.ts +14 -1
  124. package/lib/types/components/activityFrames.d.ts.map +1 -1
  125. package/lib/types/components/activityFrames.js +23 -1
  126. package/lib/types/components/approvals/ApprovalPanel.d.ts +4 -4
  127. package/lib/types/components/approvals/ApprovalPanel.js +6 -6
  128. package/lib/types/components/design-system/Byline.d.ts +1 -1
  129. package/lib/types/components/design-system/Byline.js +2 -2
  130. package/lib/types/components/design-system/Divider.d.ts +10 -2
  131. package/lib/types/components/design-system/Divider.d.ts.map +1 -1
  132. package/lib/types/components/design-system/Divider.js +19 -6
  133. package/lib/types/components/design-system/HintLine.js +1 -1
  134. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +1 -1
  135. package/lib/types/components/design-system/KeyboardShortcutHint.js +2 -2
  136. package/lib/types/components/design-system/ListItem.d.ts +2 -3
  137. package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
  138. package/lib/types/components/design-system/ListItem.js +4 -5
  139. package/lib/types/components/design-system/LoadingState.d.ts +2 -1
  140. package/lib/types/components/design-system/LoadingState.d.ts.map +1 -1
  141. package/lib/types/components/design-system/LoadingState.js +3 -2
  142. package/lib/types/components/design-system/Pane.d.ts +2 -2
  143. package/lib/types/components/design-system/Pane.js +2 -2
  144. package/lib/types/components/design-system/ProgressBar.d.ts +3 -3
  145. package/lib/types/components/design-system/ProgressBar.js +4 -4
  146. package/lib/types/components/design-system/StatusIcon.d.ts +2 -2
  147. package/lib/types/components/design-system/StatusIcon.js +3 -3
  148. package/lib/types/components/design-system/ThemeProvider.d.ts +1 -1
  149. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  150. package/lib/types/components/design-system/ThemeProvider.js +25 -2
  151. package/lib/types/components/design-system/ThemedBox.d.ts +1 -1
  152. package/lib/types/components/design-system/ThemedBox.js +1 -1
  153. package/lib/types/components/design-system/ThemedText.d.ts +3 -4
  154. package/lib/types/components/design-system/ThemedText.d.ts.map +1 -1
  155. package/lib/types/components/design-system/ThemedText.js +3 -4
  156. package/lib/types/components/messages/AssistantTextMessage.d.ts +5 -5
  157. package/lib/types/components/messages/AssistantTextMessage.d.ts.map +1 -1
  158. package/lib/types/components/messages/AssistantTextMessage.js +4 -4
  159. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +3 -3
  160. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
  161. package/lib/types/components/messages/AssistantThinkingMessage.js +6 -6
  162. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +6 -6
  163. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  164. package/lib/types/components/messages/AssistantToolUseMessage.js +88 -23
  165. package/lib/types/components/messages/MessageMetadata.d.ts +1 -2
  166. package/lib/types/components/messages/MessageMetadata.d.ts.map +1 -1
  167. package/lib/types/components/messages/MessageMetadata.js +2 -3
  168. package/lib/types/components/messages/TranscriptImages.d.ts +21 -0
  169. package/lib/types/components/messages/TranscriptImages.d.ts.map +1 -0
  170. package/lib/types/components/messages/TranscriptImages.js +83 -0
  171. package/lib/types/components/messages/UserPromptMessage.d.ts +4 -4
  172. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
  173. package/lib/types/components/messages/UserPromptMessage.js +4 -4
  174. package/lib/types/components/messages/imageInspection.d.ts +33 -0
  175. package/lib/types/components/messages/imageInspection.d.ts.map +1 -0
  176. package/lib/types/components/messages/imageInspection.js +107 -0
  177. package/lib/types/components/messages/originalImage.d.ts +5 -0
  178. package/lib/types/components/messages/originalImage.d.ts.map +1 -0
  179. package/lib/types/components/messages/originalImage.js +56 -0
  180. package/lib/types/components/messages/transcriptImageDecode.d.ts +9 -0
  181. package/lib/types/components/messages/transcriptImageDecode.d.ts.map +1 -0
  182. package/lib/types/components/messages/transcriptImageDecode.js +144 -0
  183. package/lib/types/components/messages/useImageInspection.d.ts +10 -0
  184. package/lib/types/components/messages/useImageInspection.d.ts.map +1 -0
  185. package/lib/types/components/messages/useImageInspection.js +81 -0
  186. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +22 -2
  187. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  188. package/lib/types/components/questions/AskUserQuestionPanel.js +182 -39
  189. package/lib/types/components/questions/PlanReviewPanel.d.ts +18 -2
  190. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  191. package/lib/types/components/questions/PlanReviewPanel.js +160 -24
  192. package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
  193. package/lib/types/components/sessions/SessionListRow.js +19 -2
  194. package/lib/types/components/sessions/SessionPreview.js +1 -1
  195. package/lib/types/components/shimmer.d.ts +1 -1
  196. package/lib/types/components/shimmer.js +1 -1
  197. package/lib/types/components/whaleFrames.d.ts +64 -8
  198. package/lib/types/components/whaleFrames.d.ts.map +1 -1
  199. package/lib/types/components/whaleFrames.js +381 -32
  200. package/lib/types/components/whaleIdle.d.ts +66 -0
  201. package/lib/types/components/whaleIdle.d.ts.map +1 -0
  202. package/lib/types/components/whaleIdle.js +174 -0
  203. package/lib/types/components/whaleLayers.d.ts +28 -0
  204. package/lib/types/components/whaleLayers.d.ts.map +1 -0
  205. package/lib/types/components/whaleLayers.js +90 -0
  206. package/lib/types/customTheme.d.ts +4 -4
  207. package/lib/types/customTheme.d.ts.map +1 -1
  208. package/lib/types/customTheme.js +12 -6
  209. package/lib/types/dsh-adapter/agent-view.d.ts +2 -2
  210. package/lib/types/dsh-adapter/agent-view.d.ts.map +1 -1
  211. package/lib/types/dsh-adapter/agent-view.js +2 -2
  212. package/lib/types/dsh-adapter/approvals.d.ts +3 -3
  213. package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
  214. package/lib/types/dsh-adapter/approvals.js +7 -6
  215. package/lib/types/dsh-adapter/channel.d.ts +151 -35
  216. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  217. package/lib/types/dsh-adapter/channel.js +1399 -540
  218. package/lib/types/dsh-adapter/compat/index.d.ts +8 -3
  219. package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
  220. package/lib/types/dsh-adapter/compat/index.js +8 -3
  221. package/lib/types/dsh-adapter/compat/liveSession.d.ts +75 -0
  222. package/lib/types/dsh-adapter/compat/liveSession.d.ts.map +1 -0
  223. package/lib/types/dsh-adapter/compat/liveSession.js +198 -0
  224. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +8 -0
  225. package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
  226. package/lib/types/dsh-adapter/compat/sessionLog.js +49 -0
  227. package/lib/types/dsh-adapter/contract.d.ts +10 -9
  228. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  229. package/lib/types/dsh-adapter/contract.js +14 -10
  230. package/lib/types/dsh-adapter/extensions.d.ts +2 -1
  231. package/lib/types/dsh-adapter/extensions.d.ts.map +1 -1
  232. package/lib/types/dsh-adapter/extensions.js +2 -1
  233. package/lib/types/dsh-adapter/index.d.ts +17 -7
  234. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  235. package/lib/types/dsh-adapter/index.js +9 -3
  236. package/lib/types/dsh-adapter/invariant.d.ts +1 -1
  237. package/lib/types/dsh-adapter/invariant.js +1 -1
  238. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  239. package/lib/types/dsh-adapter/plugin.js +174 -46
  240. package/lib/types/dsh-adapter/preset-resolution.d.ts +2 -2
  241. package/lib/types/dsh-adapter/preset-resolution.js +2 -2
  242. package/lib/types/dsh-adapter/presets.d.ts +2 -10
  243. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  244. package/lib/types/dsh-adapter/presets.js +4 -2
  245. package/lib/types/dsh-adapter/promptDebug.d.ts.map +1 -1
  246. package/lib/types/dsh-adapter/promptDebug.js +8 -5
  247. package/lib/types/dsh-adapter/questions-answerer.d.ts +2 -2
  248. package/lib/types/dsh-adapter/questions-answerer.js +2 -2
  249. package/lib/types/dsh-adapter/questions.d.ts +2 -2
  250. package/lib/types/dsh-adapter/questions.js +2 -2
  251. package/lib/types/dsh-adapter/recap.d.ts.map +1 -1
  252. package/lib/types/dsh-adapter/recap.js +8 -10
  253. package/lib/types/dsh-adapter/sanitize.d.ts +9 -0
  254. package/lib/types/dsh-adapter/sanitize.d.ts.map +1 -1
  255. package/lib/types/dsh-adapter/sanitize.js +14 -0
  256. package/lib/types/dsh-adapter/sessionTree.d.ts +1 -2
  257. package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -1
  258. package/lib/types/dsh-adapter/sessionTree.js +20 -6
  259. package/lib/types/dsh-adapter/sessions/header.d.ts +6 -0
  260. package/lib/types/dsh-adapter/sessions/header.d.ts.map +1 -1
  261. package/lib/types/dsh-adapter/sessions/header.js +24 -1
  262. package/lib/types/dsh-adapter/sessions/index.d.ts +1 -1
  263. package/lib/types/dsh-adapter/sessions/index.d.ts.map +1 -1
  264. package/lib/types/dsh-adapter/sessions/index.js +1 -1
  265. package/lib/types/dsh-adapter/sessions/types.d.ts +1 -1
  266. package/lib/types/dsh-adapter/settings-sections.d.ts +6 -1
  267. package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
  268. package/lib/types/dsh-adapter/sharp.d.ts +10 -0
  269. package/lib/types/dsh-adapter/sharp.d.ts.map +1 -0
  270. package/lib/types/dsh-adapter/sharp.js +59 -0
  271. package/lib/types/dsh-adapter/shortcuts.d.ts +2 -3
  272. package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
  273. package/lib/types/dsh-adapter/shortcuts.js +1 -1
  274. package/lib/types/dsh-adapter/sideQuestion.d.ts +3 -5
  275. package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
  276. package/lib/types/dsh-adapter/sideQuestion.js +11 -21
  277. package/lib/types/dsh-adapter/status.d.ts +82 -13
  278. package/lib/types/dsh-adapter/status.d.ts.map +1 -1
  279. package/lib/types/dsh-adapter/status.js +197 -25
  280. package/lib/types/dsh-adapter/themes.d.ts +2 -2
  281. package/lib/types/dsh-adapter/themes.d.ts.map +1 -1
  282. package/lib/types/dsh-adapter/themes.js +10 -4
  283. package/lib/types/dsh-adapter/trajectory/projection.d.ts +3 -3
  284. package/lib/types/dsh-adapter/trajectory/projection.js +3 -3
  285. package/lib/types/dsh-adapter/transcript-images.d.ts +34 -0
  286. package/lib/types/dsh-adapter/transcript-images.d.ts.map +1 -0
  287. package/lib/types/dsh-adapter/transcript-images.js +96 -0
  288. package/lib/types/effortPrefs.d.ts +13 -0
  289. package/lib/types/effortPrefs.d.ts.map +1 -1
  290. package/lib/types/effortPrefs.js +15 -0
  291. package/lib/types/extensions.d.ts +2 -1
  292. package/lib/types/extensions.d.ts.map +1 -1
  293. package/lib/types/extensions.js +3 -1
  294. package/lib/types/history.js +1 -1
  295. package/lib/types/hooks/useBlink.d.ts +1 -2
  296. package/lib/types/hooks/useBlink.d.ts.map +1 -1
  297. package/lib/types/hooks/useBlink.js +1 -2
  298. package/lib/types/i18n.d.ts +265 -23
  299. package/lib/types/i18n.d.ts.map +1 -1
  300. package/lib/types/i18n.js +103 -17
  301. package/lib/types/ink/Ansi.d.ts +7 -9
  302. package/lib/types/ink/Ansi.d.ts.map +1 -1
  303. package/lib/types/ink/Ansi.js +35 -259
  304. package/lib/types/ink/clearTerminal.d.ts +1 -1
  305. package/lib/types/ink/clearTerminal.js +1 -1
  306. package/lib/types/ink/colorize.d.ts.map +1 -1
  307. package/lib/types/ink/colorize.js +3 -4
  308. package/lib/types/ink/components/AlternateScreen.d.ts +7 -21
  309. package/lib/types/ink/components/AlternateScreen.d.ts.map +1 -1
  310. package/lib/types/ink/components/AlternateScreen.js +18 -75
  311. package/lib/types/ink/components/App.d.ts +44 -1
  312. package/lib/types/ink/components/App.d.ts.map +1 -1
  313. package/lib/types/ink/components/App.js +284 -98
  314. package/lib/types/ink/components/AppContext.d.ts +4 -2
  315. package/lib/types/ink/components/AppContext.d.ts.map +1 -1
  316. package/lib/types/ink/components/AppContext.js +2 -1
  317. package/lib/types/ink/components/Box.d.ts +5 -6
  318. package/lib/types/ink/components/Box.d.ts.map +1 -1
  319. package/lib/types/ink/components/Box.js +19 -174
  320. package/lib/types/ink/components/Button.d.ts +1 -1
  321. package/lib/types/ink/components/Button.d.ts.map +1 -1
  322. package/lib/types/ink/components/Button.js +19 -162
  323. package/lib/types/ink/components/ClockContext.d.ts +2 -1
  324. package/lib/types/ink/components/ClockContext.d.ts.map +1 -1
  325. package/lib/types/ink/components/ClockContext.js +7 -39
  326. package/lib/types/ink/components/Image.d.ts +28 -0
  327. package/lib/types/ink/components/Image.d.ts.map +1 -0
  328. package/lib/types/ink/components/Image.js +44 -0
  329. package/lib/types/ink/components/Link.d.ts +2 -2
  330. package/lib/types/ink/components/Link.d.ts.map +1 -1
  331. package/lib/types/ink/components/Link.js +3 -29
  332. package/lib/types/ink/components/Newline.d.ts +3 -9
  333. package/lib/types/ink/components/Newline.d.ts.map +1 -1
  334. package/lib/types/ink/components/Newline.js +3 -27
  335. package/lib/types/ink/components/NoSelect.d.ts +8 -19
  336. package/lib/types/ink/components/NoSelect.d.ts.map +1 -1
  337. package/lib/types/ink/components/NoSelect.js +3 -53
  338. package/lib/types/ink/components/RawAnsi.d.ts +8 -16
  339. package/lib/types/ink/components/RawAnsi.d.ts.map +1 -1
  340. package/lib/types/ink/components/RawAnsi.js +6 -44
  341. package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
  342. package/lib/types/ink/components/ScrollBox.js +39 -1
  343. package/lib/types/ink/components/Spacer.d.ts +3 -5
  344. package/lib/types/ink/components/Spacer.d.ts.map +1 -1
  345. package/lib/types/ink/components/Spacer.js +2 -15
  346. package/lib/types/ink/components/TerminalFocusContext.d.ts +2 -2
  347. package/lib/types/ink/components/TerminalFocusContext.d.ts.map +1 -1
  348. package/lib/types/ink/components/TerminalFocusContext.js +6 -40
  349. package/lib/types/ink/components/TerminalSizeContext.js +0 -1
  350. package/lib/types/ink/components/Text.d.ts +5 -5
  351. package/lib/types/ink/components/Text.d.ts.map +1 -1
  352. package/lib/types/ink/components/Text.js +15 -191
  353. package/lib/types/ink/dom.d.ts +3 -3
  354. package/lib/types/ink/dom.d.ts.map +1 -1
  355. package/lib/types/ink/dom.js +1 -1
  356. package/lib/types/ink/events/input-event.d.ts +10 -0
  357. package/lib/types/ink/events/input-event.d.ts.map +1 -1
  358. package/lib/types/ink/events/input-event.js +1 -0
  359. package/lib/types/ink/events/paste-event.d.ts +1 -1
  360. package/lib/types/ink/events/paste-event.js +1 -1
  361. package/lib/types/ink/events/resize-event.d.ts +1 -1
  362. package/lib/types/ink/events/resize-event.js +1 -1
  363. package/lib/types/ink/flush-tick.d.ts +1 -1
  364. package/lib/types/ink/flush-tick.js +1 -1
  365. package/lib/types/ink/frame.d.ts +9 -0
  366. package/lib/types/ink/frame.d.ts.map +1 -1
  367. package/lib/types/ink/geometry-trace.d.ts +1 -1
  368. package/lib/types/ink/geometry-trace.d.ts.map +1 -1
  369. package/lib/types/ink/hit-test.d.ts +10 -0
  370. package/lib/types/ink/hit-test.d.ts.map +1 -1
  371. package/lib/types/ink/hit-test.js +28 -6
  372. package/lib/types/ink/hooks/use-app.d.ts +1 -2
  373. package/lib/types/ink/hooks/use-app.d.ts.map +1 -1
  374. package/lib/types/ink/hooks/use-app.js +1 -2
  375. package/lib/types/ink/hooks/use-terminal-images.d.ts +14 -0
  376. package/lib/types/ink/hooks/use-terminal-images.d.ts.map +1 -0
  377. package/lib/types/ink/hooks/use-terminal-images.js +22 -0
  378. package/lib/types/ink/hooks/use-terminal-size.d.ts +1 -1
  379. package/lib/types/ink/hooks/use-terminal-size.js +1 -1
  380. package/lib/types/ink/ink.d.ts +97 -21
  381. package/lib/types/ink/ink.d.ts.map +1 -1
  382. package/lib/types/ink/ink.js +532 -62
  383. package/lib/types/ink/kitty-graphics.d.ts +41 -0
  384. package/lib/types/ink/kitty-graphics.d.ts.map +1 -0
  385. package/lib/types/ink/kitty-graphics.js +229 -0
  386. package/lib/types/ink/log-update.d.ts.map +1 -1
  387. package/lib/types/ink/log-update.js +4 -4
  388. package/lib/types/ink/node-cache.d.ts +5 -0
  389. package/lib/types/ink/node-cache.d.ts.map +1 -1
  390. package/lib/types/ink/output.d.ts +56 -3
  391. package/lib/types/ink/output.d.ts.map +1 -1
  392. package/lib/types/ink/output.js +192 -2
  393. package/lib/types/ink/parse-keypress.d.ts +28 -2
  394. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  395. package/lib/types/ink/parse-keypress.js +177 -43
  396. package/lib/types/ink/reconciler.d.ts +1 -1
  397. package/lib/types/ink/reconciler.d.ts.map +1 -1
  398. package/lib/types/ink/reconciler.js +6 -5
  399. package/lib/types/ink/render-node-to-output.d.ts +24 -0
  400. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  401. package/lib/types/ink/render-node-to-output.js +140 -26
  402. package/lib/types/ink/render-to-screen.js +5 -5
  403. package/lib/types/ink/renderer.d.ts +4 -0
  404. package/lib/types/ink/renderer.d.ts.map +1 -1
  405. package/lib/types/ink/renderer.js +21 -3
  406. package/lib/types/ink/root.d.ts +2 -0
  407. package/lib/types/ink/root.d.ts.map +1 -1
  408. package/lib/types/ink/root.js +2 -1
  409. package/lib/types/ink/screen.d.ts +64 -8
  410. package/lib/types/ink/screen.d.ts.map +1 -1
  411. package/lib/types/ink/screen.js +197 -9
  412. package/lib/types/ink/selection.d.ts +2 -2
  413. package/lib/types/ink/selection.js +3 -3
  414. package/lib/types/ink/sixel-codec.d.ts +41 -0
  415. package/lib/types/ink/sixel-codec.d.ts.map +1 -0
  416. package/lib/types/ink/sixel-codec.js +128 -0
  417. package/lib/types/ink/sixel-graphics.d.ts +56 -0
  418. package/lib/types/ink/sixel-graphics.d.ts.map +1 -0
  419. package/lib/types/ink/sixel-graphics.js +386 -0
  420. package/lib/types/ink/sixel-worker.d.ts +2 -0
  421. package/lib/types/ink/sixel-worker.d.ts.map +1 -0
  422. package/lib/types/ink/sixel-worker.js +12 -0
  423. package/lib/types/ink/stringWidth.d.ts +1 -9
  424. package/lib/types/ink/stringWidth.d.ts.map +1 -1
  425. package/lib/types/ink/stringWidth.js +3 -25
  426. package/lib/types/ink/styles.d.ts +10 -0
  427. package/lib/types/ink/styles.d.ts.map +1 -1
  428. package/lib/types/ink/terminal-image-protocol.d.ts +4 -0
  429. package/lib/types/ink/terminal-image-protocol.d.ts.map +1 -0
  430. package/lib/types/ink/terminal-image-protocol.js +8 -0
  431. package/lib/types/ink/terminal-image.d.ts +85 -0
  432. package/lib/types/ink/terminal-image.d.ts.map +1 -0
  433. package/lib/types/ink/terminal-image.js +223 -0
  434. package/lib/types/ink/terminal-querier.d.ts +30 -0
  435. package/lib/types/ink/terminal-querier.d.ts.map +1 -1
  436. package/lib/types/ink/terminal-querier.js +66 -21
  437. package/lib/types/ink/terminal.d.ts +1 -2
  438. package/lib/types/ink/terminal.d.ts.map +1 -1
  439. package/lib/types/ink/terminal.js +4 -5
  440. package/lib/types/ink/termio/osc.d.ts +4 -15
  441. package/lib/types/ink/termio/osc.d.ts.map +1 -1
  442. package/lib/types/ink/termio/osc.js +6 -18
  443. package/lib/types/ink/timeline-rail.d.ts +3 -7
  444. package/lib/types/ink/timeline-rail.d.ts.map +1 -1
  445. package/lib/types/ink/timeline-rail.js +2 -6
  446. package/lib/types/ink/{searchHighlight.d.ts → transcript-highlight.d.ts} +1 -1
  447. package/lib/types/ink/transcript-highlight.d.ts.map +1 -0
  448. package/lib/types/ink/update-overflow-guard.d.ts +1 -2
  449. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  450. package/lib/types/ink/update-overflow-guard.js +1 -2
  451. package/lib/types/ink/wrapAnsi.d.ts +1 -2
  452. package/lib/types/ink/wrapAnsi.d.ts.map +1 -1
  453. package/lib/types/ink/wrapAnsi.js +2 -7
  454. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
  455. package/lib/types/native-ts/yoga-layout/index.js +8 -10
  456. package/lib/types/presetPrefs.d.ts +2 -2
  457. package/lib/types/presetPrefs.d.ts.map +1 -1
  458. package/lib/types/presetPrefs.js +2 -2
  459. package/lib/types/reload.js +1 -1
  460. package/lib/types/screens/AgentView.d.ts +1 -1
  461. package/lib/types/screens/AgentView.js +12 -12
  462. package/lib/types/screens/Chat.d.ts +1 -1
  463. package/lib/types/screens/Chat.d.ts.map +1 -1
  464. package/lib/types/screens/Chat.js +522 -298
  465. package/lib/types/screens/SessionBrowser.d.ts.map +1 -1
  466. package/lib/types/screens/SessionBrowser.js +4 -2
  467. package/lib/types/screens/SessionTree.js +2 -2
  468. package/lib/types/screens/Settings.d.ts.map +1 -1
  469. package/lib/types/screens/Settings.js +32 -8
  470. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  471. package/lib/types/screens/StatusLine.js +13 -2
  472. package/lib/types/screens/TrajectoryScene.js +1 -1
  473. package/lib/types/screens/chatOverlay.d.ts +24 -0
  474. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  475. package/lib/types/screens/chatOverlay.js +13 -0
  476. package/lib/types/sessionHistory.d.ts +1 -3
  477. package/lib/types/sessionHistory.d.ts.map +1 -1
  478. package/lib/types/sessionHistory.js +14 -36
  479. package/lib/types/sessionModes.d.ts +62 -4
  480. package/lib/types/sessionModes.d.ts.map +1 -1
  481. package/lib/types/sessionModes.js +92 -7
  482. package/lib/types/sessions/format.d.ts +6 -0
  483. package/lib/types/sessions/format.d.ts.map +1 -1
  484. package/lib/types/sessions/format.js +10 -0
  485. package/lib/types/terminal-utils/cliHighlight.d.ts.map +1 -0
  486. package/lib/types/terminal-utils/figures.d.ts +26 -0
  487. package/lib/types/terminal-utils/figures.d.ts.map +1 -0
  488. package/lib/types/terminal-utils/figures.js +36 -0
  489. package/lib/types/terminal-utils/format.d.ts.map +1 -0
  490. package/lib/types/terminal-utils/hash.d.ts.map +1 -0
  491. package/lib/types/terminal-utils/hyperlink.d.ts.map +1 -0
  492. package/lib/types/terminal-utils/markdown.d.ts.map +1 -0
  493. package/lib/types/{cc → terminal-utils}/markdown.js +1 -1
  494. package/lib/types/{cc → terminal-utils}/sessionColors.d.ts +3 -3
  495. package/lib/types/terminal-utils/sessionColors.d.ts.map +1 -0
  496. package/lib/types/{cc → terminal-utils}/sessionColors.js +3 -3
  497. package/lib/types/terminal-utils/spinnerVerbs.d.ts +3 -0
  498. package/lib/types/terminal-utils/spinnerVerbs.d.ts.map +1 -0
  499. package/lib/types/terminal-utils/spinnerVerbs.js +21 -0
  500. package/lib/types/terminal-utils/syntaxRuns.d.ts.map +1 -0
  501. package/lib/types/terminal-utils/syntaxTheme.d.ts.map +1 -0
  502. package/lib/types/{cc → terminal-utils}/terminal.d.ts +1 -1
  503. package/lib/types/terminal-utils/terminal.d.ts.map +1 -0
  504. package/lib/types/{cc → terminal-utils}/terminal.js +1 -1
  505. package/lib/types/theme.d.ts +40 -32
  506. package/lib/types/theme.d.ts.map +1 -1
  507. package/lib/types/theme.js +123 -97
  508. package/lib/types/themeCatalog.d.ts +1 -1
  509. package/lib/types/themeCatalog.d.ts.map +1 -1
  510. package/lib/types/themeCatalog.js +7 -5
  511. package/lib/types/tips.d.ts.map +1 -1
  512. package/lib/types/tips.js +0 -6
  513. package/lib/types/trajectory/format.js +1 -1
  514. package/lib/types/tuiDisplayPrefs.d.ts +52 -0
  515. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  516. package/lib/types/tuiDisplayPrefs.js +91 -0
  517. package/lib/types/ui.d.ts +6 -5
  518. package/lib/types/ui.d.ts.map +1 -1
  519. package/lib/types/ui.js +5 -5
  520. package/lib/types/update.d.ts.map +1 -1
  521. package/lib/types/update.js +2 -3
  522. package/lib/types/utils/clipboard.d.ts +7 -0
  523. package/lib/types/utils/clipboard.d.ts.map +1 -1
  524. package/lib/types/utils/clipboard.js +20 -3
  525. package/lib/types/utils/debug.d.ts +1 -1
  526. package/lib/types/utils/debug.js +1 -1
  527. package/lib/types/utils/earlyInput.d.ts +2 -3
  528. package/lib/types/utils/earlyInput.d.ts.map +1 -1
  529. package/lib/types/utils/earlyInput.js +2 -3
  530. package/lib/types/utils/env.d.ts +2 -4
  531. package/lib/types/utils/env.d.ts.map +1 -1
  532. package/lib/types/utils/env.js +2 -4
  533. package/lib/types/utils/envUtils.d.ts +1 -1
  534. package/lib/types/utils/envUtils.js +1 -1
  535. package/lib/types/utils/fullscreen.d.ts +2 -3
  536. package/lib/types/utils/fullscreen.d.ts.map +1 -1
  537. package/lib/types/utils/fullscreen.js +2 -3
  538. package/lib/types/utils/intl.d.ts +2 -2
  539. package/lib/types/utils/intl.js +2 -2
  540. package/lib/types/utils/log.d.ts +2 -2
  541. package/lib/types/utils/log.js +2 -2
  542. package/lib/types/utils/mentions.d.ts +2 -2
  543. package/lib/types/utils/mentions.js +2 -2
  544. package/lib/types/utils/modifiers.d.ts +2 -2
  545. package/lib/types/utils/modifiers.js +2 -2
  546. package/lib/types/utils/pastedImagePath.d.ts +51 -0
  547. package/lib/types/utils/pastedImagePath.d.ts.map +1 -0
  548. package/lib/types/utils/pastedImagePath.js +194 -0
  549. package/lib/types/utils/paths.d.ts +2 -31
  550. package/lib/types/utils/paths.d.ts.map +1 -1
  551. package/lib/types/utils/paths.js +2 -56
  552. package/lib/types/utils/semver.d.ts +2 -2
  553. package/lib/types/utils/semver.js +2 -2
  554. package/lib/types/utils/truncateMiddle.d.ts +9 -0
  555. package/lib/types/utils/truncateMiddle.d.ts.map +1 -0
  556. package/lib/types/utils/truncateMiddle.js +28 -0
  557. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +10 -10
  558. package/package.json +105 -83
  559. package/presets/liangshen/agent.cordis.yml +3 -0
  560. package/presets/liangshen/skill-search.mjs +2 -3
  561. package/lib/types/cc/cliHighlight.d.ts.map +0 -1
  562. package/lib/types/cc/figures.d.ts +0 -77
  563. package/lib/types/cc/figures.d.ts.map +0 -1
  564. package/lib/types/cc/figures.js +0 -106
  565. package/lib/types/cc/format.d.ts.map +0 -1
  566. package/lib/types/cc/hash.d.ts.map +0 -1
  567. package/lib/types/cc/hyperlink.d.ts.map +0 -1
  568. package/lib/types/cc/markdown.d.ts.map +0 -1
  569. package/lib/types/cc/sessionColors.d.ts.map +0 -1
  570. package/lib/types/cc/spinnerVerbs.d.ts +0 -3
  571. package/lib/types/cc/spinnerVerbs.d.ts.map +0 -1
  572. package/lib/types/cc/spinnerVerbs.js +0 -190
  573. package/lib/types/cc/syntaxRuns.d.ts.map +0 -1
  574. package/lib/types/cc/syntaxTheme.d.ts.map +0 -1
  575. package/lib/types/cc/terminal.d.ts.map +0 -1
  576. package/lib/types/components/InterruptedByUser.d.ts +0 -7
  577. package/lib/types/components/InterruptedByUser.d.ts.map +0 -1
  578. package/lib/types/ink/searchHighlight.d.ts.map +0 -1
  579. /package/lib/types/ink/{searchHighlight.js → transcript-highlight.js} +0 -0
  580. /package/lib/types/{cc → terminal-utils}/cliHighlight.d.ts +0 -0
  581. /package/lib/types/{cc → terminal-utils}/cliHighlight.js +0 -0
  582. /package/lib/types/{cc → terminal-utils}/format.d.ts +0 -0
  583. /package/lib/types/{cc → terminal-utils}/format.js +0 -0
  584. /package/lib/types/{cc → terminal-utils}/hash.d.ts +0 -0
  585. /package/lib/types/{cc → terminal-utils}/hash.js +0 -0
  586. /package/lib/types/{cc → terminal-utils}/hyperlink.d.ts +0 -0
  587. /package/lib/types/{cc → terminal-utils}/hyperlink.js +0 -0
  588. /package/lib/types/{cc → terminal-utils}/markdown.d.ts +0 -0
  589. /package/lib/types/{cc → terminal-utils}/syntaxRuns.d.ts +0 -0
  590. /package/lib/types/{cc → terminal-utils}/syntaxRuns.js +0 -0
  591. /package/lib/types/{cc → terminal-utils}/syntaxTheme.d.ts +0 -0
  592. /package/lib/types/{cc → terminal-utils}/syntaxTheme.js +0 -0
package/README.md CHANGED
@@ -17,13 +17,11 @@
17
17
 
18
18
  # dsh-TUI
19
19
 
20
- >一个美观且实用的 Claude Code 风格 TUI 插件:像素鲸鱼顶栏、双流光大字、实时工作状态行、思考流式展开、双击 Esc 时间回溯、蓝白上下文进度条 + TPS 仪表。
20
+ >一个面向 DeepSeek Harness 的交互式终端界面插件:提供像素鲸鱼顶栏、实时工作状态行、流式思考展示、双击 Esc 时间回溯、上下文进度条与 TPS 仪表。
21
21
  >零核心改动,纯插件挂载。安装插件即可启用,卸载后不会留下核心补丁。
22
- >献给钟爱tui的各位极客们~
23
22
  >
24
- >A beautiful, practical Claude Code-style TUI plugin: pixel whale top bar, dual flowing-glow title, real-time status line, streaming thought expansion, double-Esc time rewind, blue-white context progress bar + TPS gauge.
23
+ >An interactive terminal UI plugin for DeepSeek Harness: pixel-whale header, live work status, streaming thinking display, double-Esc time rewind, a context progress bar, and a TPS gauge.
25
24
  >Zero core changes, pure plugin mounting. Install to enable; uninstall leaves no core patches.
26
- >For all TUI-loving geeks~
27
25
 
28
26
  ## 🎉 官方收录
29
27
 
@@ -52,11 +50,27 @@
52
50
 
53
51
  ## 核心能力
54
52
 
53
+ Windows Terminal 支持 Sixel 时,全屏会话记录可直接显示内嵌缩略图,点击后打开大图预览;非全屏 inline 模式仍保留文字回退。
54
+ Sixel 使用最多 256 色的自适应调色板,透明像素与背景合成;Worker 缓存量化结果,滚动时仅编码可见部分,移出视野或被浮层覆盖时擦除旧图。
55
+ 附件读取与解码最多两路并发;最后一个使用者离开后取消读取,未启动的解码不再执行。多图缓存、排队任务与单帧传输均有容量上限,超限时保留文字回退。
56
+ 自动探测优先 Kitty,其次使用 DA1 声明的 Sixel 能力。`DSH_TUI_IMAGE_PROTOCOL=auto|kitty|sixel|none` 可覆盖协议选择;
57
+ `DSH_TUI_DISABLE_TERMINAL_IMAGES=1`、无障碍模式、非 TTY 输出以及 tmux/screen 仍禁用图形。
58
+ 缺少图片依赖或编码失败时保留文字回退;强制协议也不会启用 inline Sixel。
59
+ 浅色主题的面板和图片预览默认使用白底,图片预览边框使用中性色。
60
+ 大图预览以对话区约 95% 宽高为预算,最长边可达 2048 像素,仍限制总像素量和后台开销;缩略图大小不变。
61
+ 预览支持适应窗口、100% 原像素与 200%/400%/800% 放大,拖动、滚轮或方向按钮平移;100% 需终端报告字符格像素尺寸。
62
+ 底部「打开原图」链接直接调用系统看图程序,打开未经重编码的原始附件,包括从历史会话恢复的图片。
63
+ 大图弹窗用 `←`/`→` 或底部 `‹`/`›` 切换上一张、下一张,显示当前张数,首尾不循环;切图回到适应窗口。
64
+
55
65
  - **终端交互**:低资源占用,长会话稳定可靠;多种主题切换,样式美观,实时显示工作状态、TPS、缓存命中率等
56
66
  推理等级、输入/输出 token 与 Git/会话信息;终端卡多行命令可经 `/settings` 折叠为首行 + 计数提示(Ctrl+O 或点击卡片展开);全屏模式下悬停在截断的工具卡标题、用户消息或会话标题上约 600ms,浮层显示完整内容。
57
- - **功能全面**:`/resume` 按工作目录分类浏览、搜索与预览历史会话(左键恢复、右键弹出操作菜单;可固定常用会话——「已固定」分组置顶显示,行内 ★ 或 `Ctrl+P` 切换,持久化到 `~/.dsh-tui`),另有 `/agentview` 会话总览(CC 同款 agent view:空输入 `←` 一键后台化,后台会话派发/预览/回复/停止一站式管理)、`/new`、`/compact`、`/export`、`/btw`,模型热切换,原生subagent,会话fork,自动更新,输入框 `/vim` vim 编辑模式、鼠标选区编辑(拖选高亮、Shift+click 扩展、双击选词、Ctrl+C 复制选区)与全屏草稿编辑(`Ctrl+Shift+E` 或输入行 `⛶` 按钮:行号 + 当前行高亮、Enter 换行、Ctrl+Enter 发送、滚轮滚动、点击/拖选,长草稿独占整屏;`/settings` 可关);可在vs code中[以vscode插件形式启动](docs/vscode.md),已上架 VS Code Marketplace。
67
+ 用户附图及助手/工具结果中的持久图片块会直接显示在会话记录中;Kitty graphics 或 Sixel 可用时显示等比缩略图,否则保留同尺寸文字回退。全屏下点击输入框 `[Image #N]` 或 transcript 缩略图在对话区域居中打开大图预览,卡片外的对话文字变暗,不遮挡输入栏(Esc/点击外部关闭),标题为 `Image #N — 格式 · 尺寸 · 体积 · 文件名`,本会话暂存的图片在卡片底行显示来源路径;Finder 复制的图片文件粘贴时直接入附件库为 `[Image #N]`;输入框里的 `[Image #N]` 是一个整体,光标整体跳过、删除整体生效,光标落在其上时整块反显并自动打开预览、离开时关闭。Vim 的 `x`/`X`/`d…` 同样整张删除,`u` 同时恢复文字与附件;撤销仅限当前草稿。
68
+ 终端图片预览默认开启,可在 `/settings → 终端图片预览` 或配置 `terminalImages: false` 中关闭,使用 `/restart` 后生效。已保存的 `/settings` 选择优先于 Cordis 配置;若曾保存为开启,请在 `/settings` 中关闭后再 `/restart`。关闭时保留文字信息并跳过预览解码,不影响向模型发送图片;`DSH_TUI_DISABLE_TERMINAL_IMAGES=1` 始终强制关闭预览。
69
+ - **功能全面**:`/resume` 按工作目录分类浏览、搜索与预览历史会话(左键恢复、右键弹出操作菜单;可固定常用会话——「已固定」分组置顶显示,行内 ★ 或 `Ctrl+P` 切换,持久化到 `~/.dsh-tui`),另有 `/agentview` 会话总览(空输入 `←` 一键后台化,后台会话派发、预览、回复与停止一站式管理)、`/new`、`/compact`、`/export`、`/btw`,模型热切换(新会话默认推理强度可在 /settings → 默认推理强度 预设),原生subagent,会话fork,自动更新,输入框 `/vim` vim 编辑模式、鼠标选区编辑(拖选高亮、Shift+click 扩展、双击选词、Ctrl+C 复制选区)与全屏草稿编辑(`Ctrl+Shift+E` 或输入行 `⛶` 按钮:行号 + 当前行高亮、Enter 换行、Ctrl+Enter 发送、滚轮滚动、点击/拖选,长草稿独占整屏;`/settings` 可关);可在vs code中[以vscode插件形式启动](docs/vscode.md),已上架 VS Code Marketplace。
58
70
  - **扩展丰富**:原生浏览器交互,compter use等大量附属功能性扩展
59
71
  - **技能归 DSH 管理**:`/skills` 展示当前 profile、用户与项目发现的技能;dsh-TUI 不预装通用技能。
72
+ - **工作状态动画**:默认使用 `moon8`;读取旧版本地配置中的 `claude` 值时自动映射为 `moon8`,选择器只显示当前预设。
73
+ - **像素鲸鱼娘**:开屏随机三选一开场动画;欢迎期(开始第一个任务前)可**点击冒爱心并唤醒睡着的鲸鱼**,闲置时摆鱼鳍、拍尾巴、入睡冒 Z(`/settings → whaleIdle` 可关)。**开始第一个任务后永久定格为静态标准帧**,零持续开销。鲸鱼娘的 22 帧手绘原图与闲置行为移植自 [dsh-ui-whale](https://github.com/lhh010/dsh-ui-whale)(作者 [@lhh010](https://github.com/lhh010)),特此致谢。
60
74
 
61
75
 
62
76
 
@@ -70,11 +84,6 @@
70
84
  <br>
71
85
  <strong>首屏:像素鲸鱼顶栏</strong>
72
86
  </td>
73
- <td align="center" valign="middle" width="50%">
74
- <img src="screenshots/working-line.png" alt="工作状态行 + 上下文进度条" width="480">
75
- <br>
76
- <strong>工作状态行 + 上下文进度条</strong>
77
- </td>
78
87
  </tr>
79
88
  </table>
80
89
  </div>
@@ -155,7 +164,9 @@ sh install.sh
155
164
  | [主题系统](docs/themes.md) | 内置主题、自动检测、静态 JSON 与 npm 插件主题、校验规则 |
156
165
  | [交互与命令](docs/interaction.md) | 快捷键、鼠标、问卷、slash command 与会话工作流 |
157
166
  | [架构与限制](docs/architecture.md) | 运行链路、渲染与持久化设计、安全边界、已知限制 |
158
- | [VS Code 使用指南](docs/vscode.md) | 在 VS Code 集成终端运行 dsh-tui;companion 扩展 `dsh-tui-vscode` 提供与 Claude Code 官方扩展几乎一致的体验(已上架 Marketplace) |
167
+ | [社区管理框架](docs/community-management.md) | 社区入口、角色、提案流程、roadmap 规则与维护节奏 |
168
+ | [项目路线图](docs/roadmap.md) | 公开目标、阶段、任务状态、退出条件与 Future Work |
169
+ | [VS Code 使用指南](docs/vscode.md) | 在 VS Code 集成终端运行 dsh-tui;companion 扩展 `dsh-tui-vscode` 提供多会话、会话历史与指定会话恢复(已上架 Marketplace) |
159
170
  | [贡献与开发约定](docs/contributing.md) | 贡献流程、仓库地图、构建产物、验证矩阵与修改规则 |
160
171
  | [插件准入与开发指南](https://github.com/T-Auto/dsh-ecosystem-spec/blob/main/docs/plugin-admission-and-development.md) | 接口与兼容性协定 / 插件准入规范 / 插件接缝 / 契约 / 验证清单(已并入 dsh-ecosystem-spec) |
161
172
 
@@ -169,9 +180,9 @@ sh install.sh
169
180
  - **社区交流群**:使用问题、插件创意、功能许愿,都欢迎进来聊。
170
181
  - **行为准则**:参与前请读一遍[贡献者行为准则](CODE_OF_CONDUCT.md)。
171
182
 
172
- | 微信群 | QQ 群(群号 572549239) | 微信四群 |
173
- | :---: | :---: | :---: |
174
- | <img src="screenshots/wechat-group.jpg" alt="dsh-TUI 社区交流群微信群二维码" width="200"> | <img src="screenshots/qq-group.png" alt="dsh-TUI 社区交流群 QQ 群二维码" width="200"> | <img src="screenshots/wechat-group4.jpg" alt="dsh-TUI 社区交流四群微信群二维码" width="200"> |
183
+ | 微信群(dsh-TUI 社区交流 4 群) | QQ 群(群号 572549239) |
184
+ | :---: | :---: |
185
+ | <img src="screenshots/wechat-group.jpg" alt="dsh-TUI 社区交流 4 群微信群二维码" width="200"> | <img src="screenshots/qq-group.png" alt="dsh-TUI 社区交流群 QQ 群二维码" width="200"> |
175
186
 
176
187
  > 微信群二维码约 7 天过期一次,如遇失效请走 QQ 群(572549239),或开个 issue 提醒我们更新。
177
188
 
@@ -179,10 +190,14 @@ sh install.sh
179
190
 
180
191
  > **Windows 安全警告:** Windows profile 默认使用 `danger-full-access`,且 approval 默认是 `never`。这会授予工具不受限制的访问权限;在敏感凭证或不可信仓库环境中启动前,务必先检查并收紧 profile 配置。
181
192
 
182
- `dsh-TUI` 不实现独立沙箱,而是使用当前 DSH profile 的文件、Shell、sandbox 与 approval 策略。权限预设来自 DSH `permissionPresets` registry:服务缺失时使用 legacy 三项兼容名册;服务已挂载但为空、损坏或不一致时标记为 unavailable,TUI fail closed,不伪造名册。可用 registry 按声明顺序提供第三方预设,只有符合既有 command-token 语法的 ID 才进入补全,`custom` 只显示为当前态,不是可选择目标;切换始终走官方 `/permission <preset>` 命令。若外部 `/permission` 命令本身未注册,输入沿用现有默认命令/model dispatch。在包含敏感凭证或不可信仓库的环境中启动前,请先检查 profile 配置。
193
+ `dsh-TUI` 不实现独立沙箱,而是使用当前 DSH profile 的文件、Shell、sandbox 与 approval 策略。权限预设来自 DSH `permissionPresets` registry:服务缺失时使用 legacy 三项兼容名册;服务已挂载但为空、损坏或不一致时标记为 unavailable,TUI fail closed,不伪造名册。可用 registry 按声明顺序提供第三方预设并自动进入补全、picker 与 `Shift+Tab` 循环(排除 `custom`/`status`、canonical 预设、重复 identity 与不安全 token);首次观察遵循 registry 顺序,后续刷新保留已见 identity 的相对顺序。服务可用时 `/permission` 以本地命令形式常驻菜单:切换优先调用官方 `/permission <preset>` 命令;命令行未暴露给本 agent 时,回退到 permissionPresets 服务自身的官方写路径(与命令 handler 同一实现,写真实 `permission/preset`/`sandbox/mode`/`approval/policy` 事件,绝不由 TUI 伪造),并以事件/读回确认;两条路都不可用时显式提示,绝不静默。计划模式退出先恢复进入前的 atom,再把权限身份还原到你进入前所在的预设(registry 仍提供时)。在包含敏感凭证或不可信仓库的环境中启动前,请先检查 profile 配置。
183
194
 
184
195
  详见[权限边界与已知限制](docs/architecture.md#权限与安全边界)。
185
196
 
197
+ ### 致谢
198
+
199
+ - 像素鲸鱼娘的 22 帧手绘原图(Excel 逐格绘制)与闲置动画行为(摆鱼鳍、拍尾巴、入睡冒 Z、点击冒爱心)移植自 **[dsh-ui-whale](https://github.com/lhh010/dsh-ui-whale)**(DeepSeek Harness Web 端鲸鱼宠物插件,作者 [@lhh010](https://github.com/lhh010),BSD-3-Clause),感谢作者与灵感 🐋💜
200
+
186
201
  ### 友情链接
187
202
 
188
203
  朋友们开发的[社区、相关项目与周边工具](docs/links.md)
package/bin/dsh-tui.js CHANGED
@@ -14,7 +14,7 @@
14
14
  * profile 内副本(被委托执行,或 junction/源码目录里直接运行)→ 完整
15
15
  * 启动逻辑(与 0.8.6 及之前一致):
16
16
  * dsh 预检 / profile 版本核对 / --resume 与工作区目标拦截 /
17
- * 旧环境变量警告 / `dsh --profile dsh-tui` 启动与退出码透传。
17
+ * `dsh --profile dsh-tui` 启动与退出码透传。
18
18
  *
19
19
  * 自举角色判定用 realpath:Windows Junction 轨(profile 指回仓库)与
20
20
  * `pnpm run dev` 源码运行都会折叠成同一物理目录 → 走完整逻辑,不会
@@ -120,7 +120,7 @@ const isVersionNewer = (a, b) => {
120
120
  return false
121
121
  }
122
122
 
123
- const lang = (process.env.DSH_TUI_LANG ?? process.env.CC_TUI_LANG) === 'en' ? 'en' : 'zh'
123
+ const lang = process.env.DSH_TUI_LANG === 'en' ? 'en' : 'zh'
124
124
  const MSG = {
125
125
  noDsh: {
126
126
  en: '[dsh-tui] dsh CLI not found. Install the official client first:\n npm install -g @deepseek-ai/dsh',
@@ -170,10 +170,6 @@ const MSG = {
170
170
  en: code => `[dsh-tui] dsh profile exited with code ${code}. Run it directly for diagnostics:\n dsh --profile ${PROFILE}`,
171
171
  zh: code => `[dsh-tui] dsh profile 已退出(退出码 ${code})。可直接运行以下命令查看诊断:\n dsh --profile ${PROFILE}`,
172
172
  },
173
- legacyEnv: {
174
- en: (oldName, newName) => `[dsh-tui] note: env ${oldName} was renamed to ${newName}; the old name no longer takes effect.`,
175
- zh: (oldName, newName) => `[dsh-tui] 提示:环境变量 ${oldName} 已更名为 ${newName},旧名不再生效。`,
176
- },
177
173
  notInstalled: {
178
174
  en: '(not installed)',
179
175
  zh: '(未安装)',
@@ -498,19 +494,15 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
498
494
  }
499
495
  }
500
496
 
501
- // --resume / 工作区目标拦截(issue #120/#53 的启动器契约)。
497
+ // --resume / 工作区目标拦截(launcher 契约,见 src/sessionHistory.ts)。
502
498
  const setResumeEnv = sessionId => {
503
499
  process.env.DSH_TUI_RESUME_SESSION = sessionId
504
- process.env.DSH_CC_RESUME_SESSION = sessionId
505
500
  }
506
501
  const readLastResumeTarget = () => {
507
- for (const dir of ['.dsh-tui', '.dsh-cc']) {
508
- try {
509
- const sessionId = readFileSync(join(homedir(), dir, 'resume.txt'), 'utf8').trim()
510
- if (sessionId) return sessionId
511
- } catch {
512
- // 没有历史会话可恢复——静默忽略,正常冷启动。
513
- }
502
+ try {
503
+ return readFileSync(join(homedir(), '.dsh-tui', 'resume.txt'), 'utf8').trim()
504
+ } catch {
505
+ // 没有历史会话可恢复——静默忽略,正常冷启动。
514
506
  }
515
507
  return ''
516
508
  }
@@ -538,28 +530,6 @@ if (!runningInsideProfile && ownVersion !== undefined && process.env.DSH_TUI_NO_
538
530
  }
539
531
  }
540
532
 
541
- // 旧环境变量警告(必须在 TUI 渲染前输出,fullscreen 下写 stderr 会破坏
542
- // 界面)。与 utils/paths 的 RENAMED_ENV 同表,内联以维持零 lib 依赖。
543
- const RENAMED_ENV = {
544
- CC_TUI_THEME: 'DSH_TUI_THEME',
545
- CC_TUI_LANG: 'DSH_TUI_LANG',
546
- CC_TUI_PERSONA: 'DSH_TUI_PERSONA',
547
- CC_TUI_PRESET: 'DSH_TUI_PRESET',
548
- CC_TUI_DISABLE_MOUSE: 'DSH_TUI_DISABLE_MOUSE',
549
- CC_TUI_DEBUG: 'DSH_TUI_DEBUG',
550
- CC_TUI_COMPACT_RATIO: 'DSH_TUI_COMPACT_RATIO',
551
- CC_TUI_COMPACT_RETAIN: 'DSH_TUI_COMPACT_RETAIN',
552
- DSH_CC_UPDATED_FROM: 'DSH_TUI_UPDATED_FROM',
553
- DSH_CC_RENDER_LOG: 'DSH_TUI_RENDER_LOG',
554
- DSH_CC_SESSION_ROOT: 'DSH_TUI_SESSION_ROOT',
555
- DSH_CC_WORKSPACE: 'DSH_TUI_WORKSPACE',
556
- }
557
- for (const oldName of Object.keys(RENAMED_ENV)) {
558
- if (process.env[oldName] !== undefined) {
559
- console.error(msg('legacyEnv')(oldName, RENAMED_ENV[oldName]))
560
- }
561
- }
562
-
563
533
  // 启动:被委托场景下本副本自己的版本即对齐诊断所见的启动器代际。
564
534
  if (process.env.DSH_TUI_LAUNCHER_VERSION === undefined && ownVersion !== undefined) {
565
535
  process.env.DSH_TUI_LAUNCHER_VERSION = ownVersion
package/cordis.patch.yml CHANGED
@@ -37,9 +37,9 @@
37
37
  config:
38
38
  agents: []
39
39
 
40
- # Preserve the TUI's opt-in privacy stance across the alpha base default
40
+ # Preserve the TUI's opt-in privacy stance across the 0.1.2 base default
41
41
  # change to FEEDBACK_ONLY. An explicit DSH_TELEMETRY_MODE still wins. This
42
- # restates the whole alpha config because include patches replace config
42
+ # restates the whole 0.1.2 config because include patches replace config
43
43
  # objects rather than merging them.
44
44
  - id: session-telemetry-otel
45
45
  config:
@@ -55,7 +55,7 @@
55
55
  maxExportBatchSize: 2048
56
56
  exportTimeoutMillis: 1500
57
57
 
58
- # The alpha base sends the active Loader package inventory on official
58
+ # The 0.1.2 base sends the active Loader package inventory on official
59
59
  # DeepSeek requests by default. TUI keeps that diagnostic metadata opt-in.
60
60
  - id: plugin-package-inventory-deepseek
61
61
  config:
@@ -66,8 +66,8 @@
66
66
  # The model-facing plugin set moves INTO the agent-presets roster: every
67
67
  # session composes its tools/prompt sections from one preset directory
68
68
  # (standard/ptc/minimal/cordis) instead of the host rows below. The TUI's
69
- # roster row uses the scoped `dsh-tui-agent-presets` id. alpha packages prepend
70
- # their bundled system root; the validated rc line still needs the dsh CLI's
69
+ # roster row uses the scoped `dsh-tui-agent-presets` id. The 0.1.2 generation
70
+ # prepends its bundled system root; legacy 0.1.1-rc.2 still needs the dsh CLI's
71
71
  # `config/agent-presets/` directory supplied explicitly. Both append
72
72
  # `$DSH_HOME/.agent-presets`. Mirroring the official dsh-web-app patch: every
73
73
  # dsh-base row a preset now owns is disabled here, so a minimal agent does not
@@ -81,9 +81,9 @@
81
81
  disabled: true
82
82
 
83
83
  # compaction lives in the preset's own isolate realm (standard/ptc/cordis
84
- # carry `compaction-basic` with package defaults; minimal has none). The
85
- # CC_TUI_COMPACT_RATIO/CC_TUI_COMPACT_RETAIN tunables retired with this host
86
- # row — preset compositions own their compaction config.
84
+ # carry `compaction-basic` with package defaults; minimal has none). The old
85
+ # ratio/retain tunables retired with this host row — preset compositions own
86
+ # their compaction config.
87
87
  - id: compaction-basic
88
88
  disabled: true
89
89
 
@@ -104,9 +104,9 @@
104
104
 
105
105
  - id: command-goal
106
106
  # rc.2 presets do not carry this command, so their host row must remain
107
- # active. alpha disables it only when the shipped standard preset really
108
- # owns the command; reading the capability avoids guessing from another
109
- # optional Loader row.
107
+ # active. Newer packages disable it only when the shipped standard preset
108
+ # really owns the command; reading the capability avoids guessing from
109
+ # another optional Loader row.
110
110
  disabled: !!js >-
111
111
  (() => {
112
112
  const require = process.getBuiltinModule('node:module').createRequire(ctx.baseUrl)
@@ -245,7 +245,7 @@
245
245
  name: '@deepseek-ai/dsh-code-runtime-worker-thread'
246
246
  disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'code-runtime' && entry.options.name === '@deepseek-ai/dsh-code-runtime-worker-thread' && !entry.disabled)"
247
247
 
248
- # Alpha presets opt their delegation tool into Host-owned model-selection
248
+ # 0.1.2 presets opt their delegation tool into Host-owned model-selection
249
249
  # settings. Without this service standard/ptc/cordis preset mounting fails.
250
250
  # The package subpath does not exist on rc.2, so resolve that capability
251
251
  # directly before Loader attempts the import. An enabled official row still
@@ -302,9 +302,9 @@
302
302
  name: '@deepseek-harness-tui/dsh-tui/extensions'
303
303
 
304
304
  # The agent-preset roster (issue #8): `ctx.agentPresets`, the service the
305
- # TUI composes every session's model-facing world from. alpha packages
306
- # prepend their bundled presets as the read-only system root; rc.2 packages
307
- # have no bundled root and still scan the dsh CLI directory. Both append
305
+ # TUI composes every session's model-facing world from. 0.1.2 packages
306
+ # prepend their bundled presets as the read-only system root; legacy rc.2
307
+ # packages have no bundled root and still scan the dsh CLI directory. Both append
308
308
  # `$DSH_HOME/.agent-presets` as the user root. Deployment-added roots may
309
309
  # still be supplied by a later patch.
310
310
  - id: dsh-tui-agent-presets
@@ -353,9 +353,8 @@
353
353
  # The interactive front door. The plugin creates/resumes its agent at
354
354
  # runtime, seeds the startup status line, and disposes the whole app tree
355
355
  # (exiting the process) when the TUI unmounts. `dsh-tui --resume`
356
- # feeds the session id through DSH_TUI_RESUME_SESSION (the pre-rename
357
- # DSH_CC_RESUME_SESSION is still honored as a fallback for old
358
- # launchers — TODO: drop once they age out, issue #120).
356
+ # feeds the session id through DSH_TUI_RESUME_SESSION (see
357
+ # src/sessionHistory.ts for the launcher contract).
359
358
  - id: dsh-tui
360
359
  name: '@deepseek-harness-tui/dsh-tui'
361
360
  # The entry-level dependency augments the plugin's `agents` inject and
@@ -375,13 +374,15 @@
375
374
  # verify-workspace-attachment.mjs asserts the name→inject distance.)
376
375
  config:
377
376
  provider: deepseek-official
378
- # Alt-screen fullscreen(CC 同款):应用内鼠标选区(选择即复制, OSC 52 +
377
+ # Alt-screen fullscreen 布局:应用内鼠标选区(选择即复制, OSC 52 +
379
378
  # wl-copy/xclip/xsel 兜底)、滚轮滚动、双击选词/三击选行。出厂默认开启,
380
379
  # 与 schema 默认(index.ts fullscreen default true)保持一致——两处必须
381
380
  # 同步翻转,否则本覆盖层会盖住 schema 默认,更新后用户仍落在 inline。
382
381
  # 想退回 inline 主屏(终端原生滚动/选择):/settings 全屏开关或 cordis.yml
383
382
  # `fullscreen: false`——显式选择始终优先于默认。
384
383
  fullscreen: true
384
+ # 在支持的终端预览图片;/settings 可关闭,重启生效。
385
+ terminalImages: true
385
386
  # Edit/Write diff 呈现:auto(≥110 列双栏对照,窄屏统一式)/
386
387
  # split(强制双栏)/ unified(强制统一式)。/settings 屏可实时改。
387
388
  # diffLayout: auto
@@ -412,7 +413,7 @@
412
413
  # wins over the roster default (standard).
413
414
  preset: !!js process.env.DSH_TUI_PRESET ?? undefined
414
415
  workspace: !!js process.env.DSH_TUI_WORKSPACE_TARGET ?? undefined
415
- sessionId: !!js process.env.DSH_TUI_RESUME_SESSION ?? process.env.DSH_CC_RESUME_SESSION ?? undefined
416
+ sessionId: !!js process.env.DSH_TUI_RESUME_SESSION ?? undefined
416
417
 
417
418
  # Live working-line data source (thinking copy / running tool / turn
418
419
  # summary). Mounted through @deepseek-harness-tui/dsh-tui's own
package/cordis.yml CHANGED
@@ -57,10 +57,12 @@
57
57
  inject: [agents, tuiWorkspaces, tuiScenes, tuiDialogs, tuiStatus, tuiShortcuts, tuiRenderers, tuiThemes]
58
58
  config:
59
59
  provider: deepseek-official
60
- # Alt-screen fullscreen (CC 同款): 应用内鼠标选区(选择即复制, OSC 52 +
60
+ # Alt-screen fullscreen 布局: 应用内鼠标选区(选择即复制, OSC 52 +
61
61
  # wl-copy/xclip/xsel 兜底)、滚轮滚动、双击选词/三击选行。false 则退回
62
62
  # inline 渲染, 鼠标交给终端模拟器原生选择。
63
63
  fullscreen: true
64
+ # 在支持的终端预览图片;/settings 可关闭,重启生效。
65
+ terminalImages: true
64
66
  # Reasoning effort applied to every request, validated against the live
65
67
  # route's adapter levels. An unlisted level falls back to the adapter
66
68
  # default; this wins over the persisted /effort choice and seeds the
@@ -83,9 +85,9 @@
83
85
  # plan: false
84
86
  # sandbox: danger-full-access
85
87
  # approval: never
86
- # feeds the chosen session id through this env var (DSH_TUI_ name; the
87
- # pre-rename DSH_CC_ spelling is still honored, issue #120).
88
- sessionId: !!js process.env.DSH_TUI_RESUME_SESSION ?? process.env.DSH_CC_RESUME_SESSION ?? undefined
88
+ # feeds the chosen session id through this env var (see
89
+ # src/sessionHistory.ts for the launcher contract).
90
+ sessionId: !!js process.env.DSH_TUI_RESUME_SESSION ?? undefined
89
91
  workspace: !!js process.env.DSH_TUI_WORKSPACE_TARGET ?? undefined
90
92
 
91
93
  # The DeepSeek adapter. Shipped default: full thinking at max effort.
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
11
11
  import { join } from 'node:path';
12
- import { isPresetName } from './components/activityFrames.js';
12
+ import { isPresetName, normalizeActivityPreset } from './components/activityFrames.js';
13
13
  import { parseWorkingActivityConfig } from 'dsh-working-activity/config';
14
14
  import { DATA_DIR } from './utils/paths.js';
15
15
  const PREFS_DIR = DATA_DIR;
@@ -24,7 +24,7 @@ export function parseActivityFrames(text) {
24
24
  if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
25
25
  return undefined;
26
26
  const frames = parsed.frames;
27
- return typeof frames === 'string' && isPresetName(frames) ? frames : undefined;
27
+ return typeof frames === 'string' && isPresetName(frames) ? normalizeActivityPreset(frames) : undefined;
28
28
  }
29
29
  catch {
30
30
  return undefined;
@@ -68,7 +68,7 @@ export function readActivityConfig(dir = PREFS_DIR) {
68
68
  export function writeActivityFrames(name, dir = PREFS_DIR) {
69
69
  try {
70
70
  mkdirSync(dir, { recursive: true });
71
- writeFileSync(join(dir, 'working-activity.json'), JSON.stringify({ frames: name }, null, 2));
71
+ writeFileSync(join(dir, 'working-activity.json'), JSON.stringify({ frames: normalizeActivityPreset(name) }, null, 2));
72
72
  return true;
73
73
  }
74
74
  catch {
@@ -1,8 +1,6 @@
1
1
  /**
2
- * Interaction-time telemetry stubs consumed by the ported Ink core
3
- * (ink/ink.tsx, ink/components/App.tsx, ink/components/ScrollBox.tsx). The
4
- * original functions fed Claude Code's session-activity tracking; dsh-tui
5
- * does not track interaction time.
2
+ * Interaction-time telemetry stubs used by the renderer's input and scroll
3
+ * paths. dsh-tui does not track interaction time, so these hooks are no-ops.
6
4
  */
7
5
  /** No-op interaction-time flush stub; dsh-tui does not track interaction time. */
8
6
  export declare function flushInteractionTime(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,IAAI,CAAG;AAE/C,mFAAmF;AACnF,wBAAgB,yBAAyB,IAAI,IAAI,CAAG;AAEpD,2EAA2E;AAC3E,wBAAgB,kBAAkB,IAAI,IAAI,CAAG"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,IAAI,CAAG;AAE/C,mFAAmF;AACnF,wBAAgB,yBAAyB,IAAI,IAAI,CAAG;AAEpD,2EAA2E;AAC3E,wBAAgB,kBAAkB,IAAI,IAAI,CAAG"}
@@ -1,8 +1,6 @@
1
1
  /**
2
- * Interaction-time telemetry stubs consumed by the ported Ink core
3
- * (ink/ink.tsx, ink/components/App.tsx, ink/components/ScrollBox.tsx). The
4
- * original functions fed Claude Code's session-activity tracking; dsh-tui
5
- * does not track interaction time.
2
+ * Interaction-time telemetry stubs used by the renderer's input and scroll
3
+ * paths. dsh-tui does not track interaction time, so these hooks are no-ops.
6
4
  */
7
5
  /** No-op interaction-time flush stub; dsh-tui does not track interaction time. */
8
6
  export function flushInteractionTime() { }
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Local slash commands for the dsh-tui TUI. Claude Code's command system is
3
- * deeply wired into its engine; dsh-tui ships a small built-in set with the
4
- * same `/name — description` suggestion chrome, and merges plugin-registered
2
+ * Local slash commands for dsh-tui, presented as `/name — description`.
3
+ * The built-in set is merged with plugin-registered
5
4
  * commands (plan/goal/…) from the DSH command registry (`dsh-commands`) —
6
5
  * `runCommand` in the Chat screen dispatches either kind, with the registry
7
6
  * handler winning for names both sides declare.
@@ -22,6 +21,9 @@ export interface LocalCommand {
22
21
  tag?: string;
23
22
  /** True when a DSH plugin registered this command (not built in). */
24
23
  external?: boolean;
24
+ /** True when this command explicitly accepts composer images. Local
25
+ * commands default to false; registry entries mirror `input.images`. */
26
+ acceptsImages?: boolean;
25
27
  /**
26
28
  * True when the entry is a user-invocable skill discovered by the DSH
27
29
  * skill registry (issue #86). Skill entries are completion-only: dispatch
@@ -106,7 +108,7 @@ export declare function parseCommandName(line: string): {
106
108
  */
107
109
  export declare function isLocalCommandName(input: string, list?: readonly LocalCommand[]): boolean;
108
110
  /**
109
- * Filter commands by a `/…` input prefix (matches the CC overlay behavior).
111
+ * Filter commands by a `/…` input prefix.
110
112
  * The prefix is the whole input after the slash, so `/plan off` matches
111
113
  * nothing and the overlay stays closed — Enter still dispatches through
112
114
  * `parseCommandName`.
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;AAElF,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,qBAAqB,EAAE,CAAA;AAEpG;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAY,EA+DxC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EAElD,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAEpD,CAAA;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAIhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAIhD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,OAAO,CAKT;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,YAAY,EAAE,CAKhB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,SAAS,YAAY,EAAmB,EAC/C,QAAQ,GAAE,eAA0B,GACnC,iBAAiB,EAAE,CAuCrB"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;AAElF,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;4EACwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,qBAAqB,EAAE,CAAA;AAEpG;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAY,EA+DxC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EAElD,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAEpD,CAAA;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAIhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAIhD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,OAAO,CAKT;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,YAAY,EAAE,CAKhB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,SAAS,YAAY,EAAmB,EAC/C,QAAQ,GAAE,eAA0B,GACnC,iBAAiB,EAAE,CAuCrB"}
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Local slash commands for the dsh-tui TUI. Claude Code's command system is
3
- * deeply wired into its engine; dsh-tui ships a small built-in set with the
4
- * same `/name — description` suggestion chrome, and merges plugin-registered
2
+ * Local slash commands for dsh-tui, presented as `/name — description`.
3
+ * The built-in set is merged with plugin-registered
5
4
  * commands (plan/goal/…) from the DSH command registry (`dsh-commands`) —
6
5
  * `runCommand` in the Chat screen dispatches either kind, with the registry
7
6
  * handler winning for names both sides declare.
@@ -23,14 +22,14 @@ export const LOCAL_COMMANDS = [
23
22
  // Conversation
24
23
  { name: 'new', description: 'Start a new conversation' },
25
24
  { name: 'clear', description: 'Clear the conversation' },
26
- { name: 'compact', description: 'Compact the conversation history' },
27
- { name: 'resume', description: 'Resume a previous session' },
25
+ { name: 'compact', description: 'Summarize earlier turns to free context space' },
26
+ { name: 'resume', description: 'Continue a saved session' },
28
27
  { name: 'rename', description: 'Rename the current session' },
29
28
  { name: 'recap', description: 'Generate a recap of recent session activity' },
30
- { name: 'rewind', description: 'Rewind the conversation to a previous message' },
29
+ { name: 'rewind', description: 'Return the session to an earlier message' },
31
30
  { name: 'tree', description: 'Browse the session family tree (rewind / fork / adopt)' },
32
31
  { name: 'fork', description: 'Fork the current session into a resumable copy' },
33
- { name: 'export', description: 'Export the conversation to a markdown file' },
32
+ { name: 'export', description: 'Save the session as a Markdown file' },
34
33
  { name: 'btw', description: 'Ask a quick side question without interrupting the conversation' },
35
34
  { name: 'trace', description: 'Show the session event trace timeline' },
36
35
  { name: 'agentview', description: 'Open the agent view (all sessions)' },
@@ -71,7 +70,7 @@ export const LOCAL_COMMANDS = [
71
70
  // Skills are discovered through the DSH registry and added at runtime.
72
71
  // A local entry of the same name would win the collision filter.
73
72
  // Misc / not applicable on this leaf
74
- { name: 'vim', description: 'Toggle vim mode' },
73
+ { name: 'vim', description: 'Turn Vim keybindings on or off' },
75
74
  { name: 'terminal-setup', description: 'Show terminal setup instructions' },
76
75
  { name: 'connect', description: 'Connect to a remote machine' },
77
76
  { name: 'workspace', description: 'Resume, rename, or open a workspace' },
@@ -145,7 +144,7 @@ export function isLocalCommandName(input, list = LOCAL_COMMANDS) {
145
144
  return HIDDEN_COMMAND_NAMES.has(name) || list.some(command => command.name === name);
146
145
  }
147
146
  /**
148
- * Filter commands by a `/…` input prefix (matches the CC overlay behavior).
147
+ * Filter commands by a `/…` input prefix.
149
148
  * The prefix is the whole input after the slash, so `/plan off` matches
150
149
  * nothing and the overlay stays closed — Enter still dispatches through
151
150
  * `parseCommandName`.
@@ -13,7 +13,7 @@ export declare function contextPressurePct(usage: {
13
13
  } | undefined, contextWindow: number | undefined): number | undefined;
14
14
  /**
15
15
  * The working-activity line, rendered either in the spinner slot (while a
16
- * turn runs — replacing the CC random-verb spinner) or on the status bar
16
+ * turn runs — alongside the random-verb spinner) or on the status bar
17
17
  * (the turn-summary card once idle). pi working-activity style: an animated
18
18
  * indicator frame, an ice-blue shimmer sweep over the line, an amber/red
19
19
  * `⚠ ctx N%` pressure prefix, and a trailing token suffix for the spinner
@@ -22,7 +22,7 @@ export function contextPressurePct(usage, contextWindow) {
22
22
  }
23
23
  /**
24
24
  * The working-activity line, rendered either in the spinner slot (while a
25
- * turn runs — replacing the CC random-verb spinner) or on the status bar
25
+ * turn runs — alongside the random-verb spinner) or on the status bar
26
26
  * (the turn-summary card once idle). pi working-activity style: an animated
27
27
  * indicator frame, an ice-blue shimmer sweep over the line, an amber/red
28
28
  * `⚠ ctx N%` pressure prefix, and a trailing token suffix for the spinner
@@ -38,10 +38,10 @@ export function ActivityLine({ activity, activityFrames, warnPct, warnDanger, su
38
38
  const frameIndex = Math.floor(time / preset.intervalMs) % preset.frames.length;
39
39
  const frame = preset.frames[frameIndex] ?? '·';
40
40
  const color = activity.phase === 'done' || activity.phase === 'tool'
41
- ? 'claude'
42
- : 'claudeBlue_FOR_SYSTEM_SPINNER';
41
+ ? 'accent'
42
+ : 'activity';
43
43
  const baseRGB = activity.phase === 'tool'
44
- ? (parseRGB(theme.claude) ?? BRAND)
45
- : (parseRGB(theme.claudeBlue_FOR_SYSTEM_SPINNER) ?? ICE);
44
+ ? (parseRGB(theme.accent) ?? BRAND)
45
+ : (parseRGB(theme.activity) ?? ICE);
46
46
  return (_jsxs(Text, { wrap: "truncate", children: [activity.phase !== 'done' && (_jsxs(Text, { color: color, children: [frame, " "] })), warnPct !== undefined && warnPct >= 80 && (_jsxs(Text, { color: warnDanger ? 'error' : 'warning', children: [t('activity-ctx-warn'), warnPct, "% \u00B7", ' '] })), activity.phase === 'done' ? (_jsx(Text, { color: color, children: activity.line })) : (_jsx(Text, { children: sweep(activity.line, time, baseRGB, FLASH, 60) })), suffix !== undefined && _jsx(Text, { dimColor: true, children: suffix })] }));
47
47
  }
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  /**
3
- * Working-activity indicator picker in the CC ModelPicker style (ported
4
- * from the pi extension's `/activity` interactive select): a
3
+ * Working-activity indicator picker (ported from the pi extension's
4
+ * `/activity` interactive select): a
5
5
  * permission-colored Pane listing every preset (random first) with its
6
6
  * frame preview, `❯` focus pointer and `✓` on the active preset. Enter
7
7
  * applies through `channel.setActivityFrames`, Esc cancels.
@@ -6,8 +6,8 @@ import { Select } from './Select.js';
6
6
  import { HintLine } from './design-system/HintLine.js';
7
7
  import { FRAME_PRESETS, PRESET_NAMES } from './activityFrames.js';
8
8
  /**
9
- * Working-activity indicator picker in the CC ModelPicker style (ported
10
- * from the pi extension's `/activity` interactive select): a
9
+ * Working-activity indicator picker (ported from the pi extension's
10
+ * `/activity` interactive select): a
11
11
  * permission-colored Pane listing every preset (random first) with its
12
12
  * frame preview, `❯` focus pointer and `✓` on the active preset. Enter
13
13
  * applies through `channel.setActivityFrames`, Esc cancels.
@@ -4,7 +4,7 @@ import { Box, Text } from '../ui.js';
4
4
  import { Divider } from './design-system/Divider.js';
5
5
  import { t } from '../i18n.js';
6
6
  import { estimateSessionCostSplitCny, isPeakHour, priceForModel } from '../deepseekPricing.js';
7
- import { formatTokens } from '../cc/format.js';
7
+ import { formatTokens } from '../terminal-utils/format.js';
8
8
  /**
9
9
  * `/balance` 余额报告行:Divider + 一行安静摘要,hover 展开明细
10
10
  * (各币种赠送/充值拆分、本会话 token 与花费估算、失败原因),点击行
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  /**
3
- * /btw side-question panel (CC's btw.tsx, inline-pane form like the local
4
- * pickers): title line with the question, a scrollable answer body (error /
3
+ * /btw side-question panel, an inline-pane form like the local pickers:
4
+ * title line with the question, a scrollable answer body (error /
5
5
  * markdown answer / answering spinner), and a hint line. Owns the keyboard
6
6
  * while open — every key it sees is consumed here.
7
7
  */
@@ -6,8 +6,8 @@ import { SpinnerGlyph } from './Spinner/SpinnerGlyph.js';
6
6
  import { t } from '../i18n.js';
7
7
  import { isPlainReturnInput } from '../utils/modifiers.js';
8
8
  /**
9
- * /btw side-question panel (CC's btw.tsx, inline-pane form like the local
10
- * pickers): title line with the question, a scrollable answer body (error /
9
+ * /btw side-question panel, an inline-pane form like the local pickers:
10
+ * title line with the question, a scrollable answer body (error /
11
11
  * markdown answer / answering spinner), and a hint line. Owns the keyboard
12
12
  * while open — every key it sees is consumed here.
13
13
  */
@@ -15,9 +15,9 @@ import type { JobRow } from '../../dsh-adapter/channel.js';
15
15
  * tail of the agent's own job_output results as they stream through the
16
16
  * transcript.
17
17
  */
18
- export declare function JobCard({ job, addMargin, onClick }: {
18
+ export declare function JobCard({ job, marginTopOnTurn, onClick }: {
19
19
  job: JobRow;
20
- addMargin: boolean;
20
+ marginTopOnTurn: boolean;
21
21
  onClick?(): void;
22
22
  }): React.ReactNode;
23
23
  //# sourceMappingURL=JobCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"JobCard.d.ts","sourceRoot":"","sources":["../../../../src/components/Chat/JobCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAkD1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,IAAI,IAAI,CAAA;CACjB,GAAG,KAAK,CAAC,SAAS,CAuDlB"}
1
+ {"version":3,"file":"JobCard.d.ts","sourceRoot":"","sources":["../../../../src/components/Chat/JobCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAkD1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE;IACzD,GAAG,EAAE,MAAM,CAAA;IACX,eAAe,EAAE,OAAO,CAAA;IACxB,OAAO,CAAC,IAAI,IAAI,CAAA;CACjB,GAAG,KAAK,CAAC,SAAS,CAuDlB"}
@@ -63,7 +63,7 @@ function clipLine(text, maxWidth) {
63
63
  * tail of the agent's own job_output results as they stream through the
64
64
  * transcript.
65
65
  */
66
- export function JobCard({ job, addMargin, onClick }) {
66
+ export function JobCard({ job, marginTopOnTurn, onClick }) {
67
67
  const settled = job.status === 'completed' || job.status === 'failed' || job.status === 'killed';
68
68
  // 动画订阅仅限存活卡片:settled 后退订共享 clock(同 SubagentMessage 的
69
69
  // 约定)。1s tick 只驱动运行时长跳动——状态标是静态的(见 statusInfo)。
@@ -82,5 +82,5 @@ export function JobCard({ job, addMargin, onClick }) {
82
82
  // 调用(run_in_background 卡)的延续,与工具卡通栏左对齐;子代理卡才
83
83
  // 是嵌套子实体、保留缩进。瀑布的 ` │ ` 槽自带两格,正好与工具卡正文
84
84
  // 的 ` ⎿ ` 槽位一致。
85
- return _jsxs(Box, { flexDirection: "column", marginTop: addMargin ? 1 : 0, ref: viewportRef, onClick: onClick, onMouseEnter: clickable ? () => setHovered(true) : undefined, onMouseLeave: clickable ? () => setHovered(false) : undefined, children: [_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: hovered && clickable ? 'claude' : info.color, children: info.glyph }), _jsx(Text, { bold: true, color: hovered && clickable ? 'claude' : undefined, children: `${t('jobs-card-prefix')}${job.id}` }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { dimColor: true, children: job.kind }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { children: clipLine(job.label, Math.max(10, rowWidth - 30)) }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { dimColor: true, children: formatJobDuration(job) }), headerDetail !== undefined && _jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { dimColor: true, children: headerDetail })] }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { color: info.color, children: info.label })] }), !settled && activity.length > 0 && activity.map((line, index) => (_jsx(Text, { dimColor: true, wrap: "truncate", children: ` │ ${clipLine(line, rowWidth)}` }, `${job.id}-wf-${index}`))), settled && job.status !== 'completed' && headerDetail !== undefined && (_jsx(Text, { dimColor: true, wrap: "truncate", children: ` └ ${clipLine(headerDetail, rowWidth)}` }))] });
85
+ return _jsxs(Box, { flexDirection: "column", marginTop: marginTopOnTurn ? 1 : 0, ref: viewportRef, onClick: onClick, onMouseEnter: clickable ? () => setHovered(true) : undefined, onMouseLeave: clickable ? () => setHovered(false) : undefined, children: [_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: hovered && clickable ? 'accent' : info.color, children: info.glyph }), _jsx(Text, { bold: true, color: hovered && clickable ? 'accent' : undefined, children: `${t('jobs-card-prefix')}${job.id}` }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { dimColor: true, children: job.kind }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { children: clipLine(job.label, Math.max(10, rowWidth - 30)) }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { dimColor: true, children: formatJobDuration(job) }), headerDetail !== undefined && _jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { dimColor: true, children: headerDetail })] }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { color: info.color, children: info.label })] }), !settled && activity.length > 0 && activity.map((line, index) => (_jsx(Text, { dimColor: true, wrap: "truncate", children: ` │ ${clipLine(line, rowWidth)}` }, `${job.id}-wf-${index}`))), settled && job.status !== 'completed' && headerDetail !== undefined && (_jsx(Text, { dimColor: true, wrap: "truncate", children: ` └ ${clipLine(headerDetail, rowWidth)}` }))] });
86
86
  }