@deepseek-harness-tui/dsh-tui 0.8.8 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. package/README.md +60 -238
  2. package/bin/dsh-tui.js +172 -5
  3. package/cordis.patch.yml +16 -4
  4. package/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -13
  5. package/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -59
  6. package/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -15
  7. package/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -32
  8. package/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -59
  9. package/dsh-ecosystem-spec/protocols/tui-channel.js +166 -166
  10. package/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -42
  11. package/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -143
  12. package/dsh-ecosystem-spec/registry/README.md +14 -14
  13. package/dsh-ecosystem-spec/registry/host-descriptor.tui.example.json +56 -56
  14. package/dsh-ecosystem-spec/registry/permissions-0.1.json +13 -13
  15. package/dsh-ecosystem-spec/registry/registry-0.15.json +149 -149
  16. package/lib/types/cc/hyperlink.d.ts +7 -1
  17. package/lib/types/cc/hyperlink.d.ts.map +1 -1
  18. package/lib/types/cc/hyperlink.js +3 -2
  19. package/lib/types/cc/markdown.d.ts.map +1 -1
  20. package/lib/types/cc/markdown.js +33 -3
  21. package/lib/types/cc/sessionColors.d.ts +27 -0
  22. package/lib/types/cc/sessionColors.d.ts.map +1 -0
  23. package/lib/types/cc/sessionColors.js +39 -0
  24. package/lib/types/commands.d.ts.map +1 -1
  25. package/lib/types/commands.js +10 -2
  26. package/lib/types/components/ActivityPicker.d.ts +4 -1
  27. package/lib/types/components/ActivityPicker.d.ts.map +1 -1
  28. package/lib/types/components/ActivityPicker.js +2 -2
  29. package/lib/types/components/AutoRecapRow.d.ts +23 -0
  30. package/lib/types/components/AutoRecapRow.d.ts.map +1 -0
  31. package/lib/types/components/AutoRecapRow.js +23 -0
  32. package/lib/types/components/BtwPanel.d.ts.map +1 -1
  33. package/lib/types/components/BtwPanel.js +1 -1
  34. package/lib/types/components/Chat/SubagentMessage.d.ts +2 -1
  35. package/lib/types/components/Chat/SubagentMessage.d.ts.map +1 -1
  36. package/lib/types/components/Chat/SubagentMessage.js +11 -3
  37. package/lib/types/components/ColorPicker.d.ts +17 -0
  38. package/lib/types/components/ColorPicker.d.ts.map +1 -0
  39. package/lib/types/components/ColorPicker.js +20 -0
  40. package/lib/types/components/CommandSuggestions.d.ts +23 -4
  41. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  42. package/lib/types/components/CommandSuggestions.js +41 -14
  43. package/lib/types/components/ContextBarView.d.ts +33 -0
  44. package/lib/types/components/ContextBarView.d.ts.map +1 -0
  45. package/lib/types/components/ContextBarView.js +46 -0
  46. package/lib/types/components/EffortInputBorder.d.ts +12 -1
  47. package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
  48. package/lib/types/components/EffortInputBorder.js +22 -5
  49. package/lib/types/components/EffortSlider.d.ts +4 -1
  50. package/lib/types/components/EffortSlider.d.ts.map +1 -1
  51. package/lib/types/components/EffortSlider.js +4 -2
  52. package/lib/types/components/ExtensionDialog.js +6 -2
  53. package/lib/types/components/FileActionsPanel.d.ts +22 -0
  54. package/lib/types/components/FileActionsPanel.d.ts.map +1 -0
  55. package/lib/types/components/FileActionsPanel.js +28 -0
  56. package/lib/types/components/FileSuggestions.d.ts +26 -7
  57. package/lib/types/components/FileSuggestions.d.ts.map +1 -1
  58. package/lib/types/components/FileSuggestions.js +39 -12
  59. package/lib/types/components/GoalTodoPanel.d.ts +26 -2
  60. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  61. package/lib/types/components/GoalTodoPanel.js +86 -17
  62. package/lib/types/components/HelpMenu.d.ts +7 -1
  63. package/lib/types/components/HelpMenu.d.ts.map +1 -1
  64. package/lib/types/components/HelpMenu.js +12 -4
  65. package/lib/types/components/HistorySearchDialog.d.ts +4 -1
  66. package/lib/types/components/HistorySearchDialog.d.ts.map +1 -1
  67. package/lib/types/components/HistorySearchDialog.js +2 -2
  68. package/lib/types/components/LangPicker.d.ts +14 -0
  69. package/lib/types/components/LangPicker.d.ts.map +1 -0
  70. package/lib/types/components/LangPicker.js +17 -0
  71. package/lib/types/components/LoadedContextPanel.d.ts.map +1 -1
  72. package/lib/types/components/LoadedContextPanel.js +3 -1
  73. package/lib/types/components/Markdown.d.ts.map +1 -1
  74. package/lib/types/components/Markdown.js +12 -3
  75. package/lib/types/components/MessageList.d.ts +45 -2
  76. package/lib/types/components/MessageList.d.ts.map +1 -1
  77. package/lib/types/components/MessageList.js +560 -41
  78. package/lib/types/components/ModelPicker.d.ts +27 -2
  79. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  80. package/lib/types/components/ModelPicker.js +26 -6
  81. package/lib/types/components/PermissionsPicker.d.ts +21 -0
  82. package/lib/types/components/PermissionsPicker.d.ts.map +1 -0
  83. package/lib/types/components/PermissionsPicker.js +27 -0
  84. package/lib/types/components/PlanPicker.d.ts +15 -0
  85. package/lib/types/components/PlanPicker.d.ts.map +1 -0
  86. package/lib/types/components/PlanPicker.js +18 -0
  87. package/lib/types/components/PresetPicker.d.ts +4 -1
  88. package/lib/types/components/PresetPicker.d.ts.map +1 -1
  89. package/lib/types/components/PresetPicker.js +2 -2
  90. package/lib/types/components/PromptInput.d.ts +4 -3
  91. package/lib/types/components/PromptInput.d.ts.map +1 -1
  92. package/lib/types/components/PromptInput.js +602 -75
  93. package/lib/types/components/RecapPanel.d.ts +25 -0
  94. package/lib/types/components/RecapPanel.d.ts.map +1 -0
  95. package/lib/types/components/RecapPanel.js +55 -0
  96. package/lib/types/components/RewindPicker.d.ts +12 -1
  97. package/lib/types/components/RewindPicker.d.ts.map +1 -1
  98. package/lib/types/components/RewindPicker.js +6 -4
  99. package/lib/types/components/ScrollbarGutter.d.ts +28 -0
  100. package/lib/types/components/ScrollbarGutter.d.ts.map +1 -0
  101. package/lib/types/components/ScrollbarGutter.js +119 -0
  102. package/lib/types/components/Select.d.ts +8 -1
  103. package/lib/types/components/Select.d.ts.map +1 -1
  104. package/lib/types/components/Select.js +4 -2
  105. package/lib/types/components/SkillsPicker.d.ts +4 -1
  106. package/lib/types/components/SkillsPicker.d.ts.map +1 -1
  107. package/lib/types/components/SkillsPicker.js +2 -2
  108. package/lib/types/components/SubagentCard.d.ts +2 -1
  109. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  110. package/lib/types/components/SubagentCard.js +9 -2
  111. package/lib/types/components/SubagentDashboard.d.ts +4 -0
  112. package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
  113. package/lib/types/components/SubagentDashboard.js +9 -1
  114. package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
  115. package/lib/types/components/SubagentDetailScene.js +5 -4
  116. package/lib/types/components/SuggestionCard.d.ts +65 -0
  117. package/lib/types/components/SuggestionCard.d.ts.map +1 -0
  118. package/lib/types/components/SuggestionCard.js +77 -0
  119. package/lib/types/components/ThemePicker.d.ts +4 -1
  120. package/lib/types/components/ThemePicker.d.ts.map +1 -1
  121. package/lib/types/components/ThemePicker.js +2 -2
  122. package/lib/types/components/ThinkingToggle.d.ts +4 -1
  123. package/lib/types/components/ThinkingToggle.d.ts.map +1 -1
  124. package/lib/types/components/ThinkingToggle.js +2 -2
  125. package/lib/types/components/TimelineRail.d.ts +53 -0
  126. package/lib/types/components/TimelineRail.d.ts.map +1 -0
  127. package/lib/types/components/TimelineRail.js +197 -0
  128. package/lib/types/components/WorkspaceFlowPicker.d.ts +6 -1
  129. package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -1
  130. package/lib/types/components/WorkspaceFlowPicker.js +4 -2
  131. package/lib/types/components/WorkspaceMenuPicker.d.ts +19 -0
  132. package/lib/types/components/WorkspaceMenuPicker.d.ts.map +1 -0
  133. package/lib/types/components/WorkspaceMenuPicker.js +19 -0
  134. package/lib/types/components/WorkspacePicker.d.ts +4 -1
  135. package/lib/types/components/WorkspacePicker.d.ts.map +1 -1
  136. package/lib/types/components/WorkspacePicker.js +2 -2
  137. package/lib/types/components/approvals/ApprovalPanel.d.ts.map +1 -1
  138. package/lib/types/components/approvals/ApprovalPanel.js +5 -1
  139. package/lib/types/components/design-system/ListItem.d.ts +8 -1
  140. package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
  141. package/lib/types/components/design-system/ListItem.js +8 -3
  142. package/lib/types/components/design-system/ThemeProvider.d.ts +7 -0
  143. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  144. package/lib/types/components/design-system/ThemeProvider.js +2 -1
  145. package/lib/types/components/messages/AssistantTextMessage.d.ts +5 -2
  146. package/lib/types/components/messages/AssistantTextMessage.d.ts.map +1 -1
  147. package/lib/types/components/messages/AssistantTextMessage.js +6 -2
  148. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +2 -1
  149. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
  150. package/lib/types/components/messages/AssistantThinkingMessage.js +10 -4
  151. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +15 -1
  152. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  153. package/lib/types/components/messages/AssistantToolUseMessage.js +37 -7
  154. package/lib/types/components/messages/UserPromptMessage.d.ts +2 -1
  155. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
  156. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +7 -3
  157. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  158. package/lib/types/components/questions/AskUserQuestionPanel.js +75 -11
  159. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  160. package/lib/types/components/questions/PlanReviewPanel.js +13 -2
  161. package/lib/types/components/sessions/SessionListRow.d.ts +4 -1
  162. package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
  163. package/lib/types/components/sessions/SessionListRow.js +4 -2
  164. package/lib/types/components/trajectory/HotspotView.d.ts +7 -1
  165. package/lib/types/components/trajectory/HotspotView.d.ts.map +1 -1
  166. package/lib/types/components/trajectory/HotspotView.js +8 -2
  167. package/lib/types/components/trajectory/Ledger.d.ts +9 -1
  168. package/lib/types/components/trajectory/Ledger.d.ts.map +1 -1
  169. package/lib/types/components/trajectory/Ledger.js +23 -5
  170. package/lib/types/components/trajectory/WaveBand.d.ts +10 -1
  171. package/lib/types/components/trajectory/WaveBand.d.ts.map +1 -1
  172. package/lib/types/components/trajectory/WaveBand.js +7 -2
  173. package/lib/types/dsh-adapter/channel.d.ts +117 -7
  174. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  175. package/lib/types/dsh-adapter/channel.js +1301 -122
  176. package/lib/types/dsh-adapter/compat/index.d.ts +8 -6
  177. package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
  178. package/lib/types/dsh-adapter/compat/index.js +8 -6
  179. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +150 -0
  180. package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
  181. package/lib/types/dsh-adapter/compat/sessionLog.js +518 -41
  182. package/lib/types/dsh-adapter/contract.d.ts +1 -1
  183. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  184. package/lib/types/dsh-adapter/contract.js +1 -0
  185. package/lib/types/dsh-adapter/extension-events.d.ts +1 -1
  186. package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
  187. package/lib/types/dsh-adapter/index.d.ts +20 -2
  188. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  189. package/lib/types/dsh-adapter/index.js +9 -1
  190. package/lib/types/dsh-adapter/plugin.d.ts +0 -9
  191. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  192. package/lib/types/dsh-adapter/plugin.js +453 -14
  193. package/lib/types/dsh-adapter/presets.d.ts +18 -0
  194. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  195. package/lib/types/dsh-adapter/presets.js +31 -0
  196. package/lib/types/dsh-adapter/providerWizard.d.ts +29 -1
  197. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  198. package/lib/types/dsh-adapter/providerWizard.js +89 -5
  199. package/lib/types/dsh-adapter/questions.d.ts +19 -2
  200. package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
  201. package/lib/types/dsh-adapter/questions.js +53 -10
  202. package/lib/types/dsh-adapter/recap.d.ts +49 -0
  203. package/lib/types/dsh-adapter/recap.d.ts.map +1 -0
  204. package/lib/types/dsh-adapter/recap.js +121 -0
  205. package/lib/types/dsh-adapter/sessionTree.d.ts +314 -0
  206. package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -0
  207. package/lib/types/dsh-adapter/sessionTree.js +954 -0
  208. package/lib/types/dsh-adapter/shortcuts.d.ts +15 -44
  209. package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
  210. package/lib/types/dsh-adapter/shortcuts.js +28 -165
  211. package/lib/types/dsh-adapter/types.d.ts +1 -1
  212. package/lib/types/dsh-adapter/types.d.ts.map +1 -1
  213. package/lib/types/herdr.js +1 -1
  214. package/lib/types/i18n.d.ts +770 -181
  215. package/lib/types/i18n.d.ts.map +1 -1
  216. package/lib/types/i18n.js +257 -80
  217. package/lib/types/ink/components/AlternateScreen.d.ts.map +1 -1
  218. package/lib/types/ink/components/AlternateScreen.js +13 -1
  219. package/lib/types/ink/components/App.d.ts +12 -1
  220. package/lib/types/ink/components/App.d.ts.map +1 -1
  221. package/lib/types/ink/components/App.js +101 -4
  222. package/lib/types/ink/components/ClockContext.d.ts.map +1 -1
  223. package/lib/types/ink/components/ClockContext.js +2 -0
  224. package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
  225. package/lib/types/ink/components/ScrollBox.js +170 -91
  226. package/lib/types/ink/constants.d.ts +9 -0
  227. package/lib/types/ink/constants.d.ts.map +1 -1
  228. package/lib/types/ink/constants.js +9 -0
  229. package/lib/types/ink/events/click-event.d.ts +7 -16
  230. package/lib/types/ink/events/click-event.d.ts.map +1 -1
  231. package/lib/types/ink/events/click-event.js +16 -19
  232. package/lib/types/ink/events/event-handlers.d.ts +11 -1
  233. package/lib/types/ink/events/event-handlers.d.ts.map +1 -1
  234. package/lib/types/ink/events/event-handlers.js +2 -0
  235. package/lib/types/ink/events/input-event.d.ts +9 -0
  236. package/lib/types/ink/events/input-event.d.ts.map +1 -1
  237. package/lib/types/ink/events/input-event.js +4 -0
  238. package/lib/types/ink/events/pointer-event.d.ts +61 -0
  239. package/lib/types/ink/events/pointer-event.d.ts.map +1 -0
  240. package/lib/types/ink/events/pointer-event.js +61 -0
  241. package/lib/types/ink/events/wheel-event.d.ts +17 -0
  242. package/lib/types/ink/events/wheel-event.d.ts.map +1 -0
  243. package/lib/types/ink/events/wheel-event.js +20 -0
  244. package/lib/types/ink/geometry-trace.d.ts +51 -0
  245. package/lib/types/ink/geometry-trace.d.ts.map +1 -0
  246. package/lib/types/ink/geometry-trace.js +83 -0
  247. package/lib/types/ink/hit-test.d.ts +56 -1
  248. package/lib/types/ink/hit-test.d.ts.map +1 -1
  249. package/lib/types/ink/hit-test.js +146 -8
  250. package/lib/types/ink/ink.d.ts +58 -1
  251. package/lib/types/ink/ink.d.ts.map +1 -1
  252. package/lib/types/ink/ink.js +230 -29
  253. package/lib/types/ink/log-update.d.ts.map +1 -1
  254. package/lib/types/ink/log-update.js +21 -0
  255. package/lib/types/ink/node-cache.d.ts +5 -0
  256. package/lib/types/ink/node-cache.d.ts.map +1 -1
  257. package/lib/types/ink/parse-keypress.d.ts +8 -0
  258. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  259. package/lib/types/ink/parse-keypress.js +101 -12
  260. package/lib/types/ink/render-node-to-output.d.ts +10 -0
  261. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  262. package/lib/types/ink/render-node-to-output.js +111 -18
  263. package/lib/types/ink/timeline-rail.d.ts +138 -0
  264. package/lib/types/ink/timeline-rail.d.ts.map +1 -0
  265. package/lib/types/ink/timeline-rail.js +179 -0
  266. package/lib/types/ink/wrap-text.d.ts.map +1 -1
  267. package/lib/types/ink/wrap-text.js +47 -5
  268. package/lib/types/migrationPrefs.d.ts +60 -0
  269. package/lib/types/migrationPrefs.d.ts.map +1 -0
  270. package/lib/types/migrationPrefs.js +97 -0
  271. package/lib/types/modelGroups.d.ts +72 -0
  272. package/lib/types/modelGroups.d.ts.map +1 -0
  273. package/lib/types/modelGroups.js +97 -0
  274. package/lib/types/modelRecents.d.ts +39 -0
  275. package/lib/types/modelRecents.d.ts.map +1 -0
  276. package/lib/types/modelRecents.js +97 -0
  277. package/lib/types/native-ts/yoga-layout/index.d.ts +11 -0
  278. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
  279. package/lib/types/native-ts/yoga-layout/index.js +31 -1
  280. package/lib/types/oauth.d.ts +15 -0
  281. package/lib/types/oauth.d.ts.map +1 -0
  282. package/lib/types/oauth.js +14 -0
  283. package/lib/types/reload.d.ts +109 -0
  284. package/lib/types/reload.d.ts.map +1 -0
  285. package/lib/types/reload.js +118 -0
  286. package/lib/types/screens/Chat.d.ts +3 -1
  287. package/lib/types/screens/Chat.d.ts.map +1 -1
  288. package/lib/types/screens/Chat.js +1377 -371
  289. package/lib/types/screens/SessionBrowser.d.ts.map +1 -1
  290. package/lib/types/screens/SessionBrowser.js +56 -29
  291. package/lib/types/screens/SessionTree.d.ts +27 -0
  292. package/lib/types/screens/SessionTree.d.ts.map +1 -0
  293. package/lib/types/screens/SessionTree.js +555 -0
  294. package/lib/types/screens/Settings.d.ts.map +1 -1
  295. package/lib/types/screens/Settings.js +64 -22
  296. package/lib/types/screens/StatusLine.d.ts +0 -8
  297. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  298. package/lib/types/screens/StatusLine.js +224 -45
  299. package/lib/types/screens/StatusMetrics.d.ts +35 -3
  300. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  301. package/lib/types/screens/StatusMetrics.js +63 -8
  302. package/lib/types/screens/TrajectoryScene.d.ts.map +1 -1
  303. package/lib/types/screens/TrajectoryScene.js +81 -14
  304. package/lib/types/screens/chatOverlay.d.ts +237 -0
  305. package/lib/types/screens/chatOverlay.d.ts.map +1 -0
  306. package/lib/types/screens/chatOverlay.js +116 -0
  307. package/lib/types/tips.d.ts.map +1 -1
  308. package/lib/types/tips.js +64 -10
  309. package/lib/types/tuiDisplayPrefs.d.ts +15 -0
  310. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  311. package/lib/types/tuiDisplayPrefs.js +9 -0
  312. package/lib/types/update.d.ts +139 -0
  313. package/lib/types/update.d.ts.map +1 -1
  314. package/lib/types/update.js +382 -30
  315. package/lib/types/utils/debug.d.ts +10 -0
  316. package/lib/types/utils/debug.d.ts.map +1 -1
  317. package/lib/types/utils/debug.js +24 -0
  318. package/lib/types/utils/fileTarget.d.ts +46 -0
  319. package/lib/types/utils/fileTarget.d.ts.map +1 -0
  320. package/lib/types/utils/fileTarget.js +178 -0
  321. package/lib/types/utils/keymap.d.ts +134 -0
  322. package/lib/types/utils/keymap.d.ts.map +1 -0
  323. package/lib/types/utils/keymap.js +311 -0
  324. package/lib/types/utils/mentions.d.ts +25 -2
  325. package/lib/types/utils/mentions.d.ts.map +1 -1
  326. package/lib/types/utils/mentions.js +69 -10
  327. package/lib/types/utils/openExternal.d.ts +50 -0
  328. package/lib/types/utils/openExternal.d.ts.map +1 -0
  329. package/lib/types/utils/openExternal.js +170 -0
  330. package/lib/types/utils/paths.d.ts.map +1 -1
  331. package/lib/types/utils/paths.js +1 -0
  332. package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +21 -0
  333. package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +140 -0
  334. package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +11 -0
  335. package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +44 -0
  336. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.d.ts +14 -0
  337. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.js +67 -0
  338. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.d.ts +64 -0
  339. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.js +170 -0
  340. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.d.ts +79 -0
  341. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.js +196 -0
  342. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.d.ts +68 -0
  343. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +193 -0
  344. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.d.ts +32 -0
  345. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.js +101 -0
  346. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.d.ts +31 -0
  347. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.js +68 -0
  348. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.d.ts +69 -0
  349. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.js +129 -0
  350. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +70 -0
  351. package/node_modules/@dsh-std/command/CHANGELOG.md +8 -8
  352. package/node_modules/@dsh-std/command/LICENSE +21 -21
  353. package/node_modules/@dsh-std/command/README.md +26 -26
  354. package/node_modules/@dsh-std/command/README.zh.md +28 -28
  355. package/node_modules/@dsh-std/command/lib/index.js.map +1 -1
  356. package/node_modules/@dsh-std/command/package.json +22 -22
  357. package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  358. package/node_modules/@dsh-std/connection/LICENSE +21 -21
  359. package/node_modules/@dsh-std/connection/README.md +42 -42
  360. package/node_modules/@dsh-std/connection/README.zh.md +42 -42
  361. package/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  362. package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  363. package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  364. package/node_modules/@dsh-std/connection/package.json +20 -20
  365. package/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  366. package/node_modules/@dsh-std/core/LICENSE +21 -21
  367. package/node_modules/@dsh-std/core/README.md +13 -13
  368. package/node_modules/@dsh-std/core/README.zh.md +13 -13
  369. package/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  370. package/node_modules/@dsh-std/core/package.json +21 -21
  371. package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  372. package/node_modules/@dsh-std/manifest/LICENSE +21 -21
  373. package/node_modules/@dsh-std/manifest/README.md +5 -5
  374. package/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  375. package/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  376. package/node_modules/@dsh-std/manifest/package.json +20 -20
  377. package/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  378. package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -8
  379. package/node_modules/@dsh-std/messages/LICENSE +21 -21
  380. package/node_modules/@dsh-std/messages/README.md +5 -5
  381. package/node_modules/@dsh-std/messages/README.zh.md +7 -7
  382. package/node_modules/@dsh-std/messages/lib/index.js.map +1 -1
  383. package/node_modules/@dsh-std/messages/package.json +20 -20
  384. package/node_modules/@dsh-std/messages/schema/message-observer-envelope-0.15.schema.json +54 -54
  385. package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  386. package/node_modules/@dsh-std/presentation/LICENSE +21 -21
  387. package/node_modules/@dsh-std/presentation/README.md +27 -27
  388. package/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  389. package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  390. package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  391. package/node_modules/@dsh-std/presentation/package.json +25 -25
  392. package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -8
  393. package/node_modules/@dsh-std/storage/LICENSE +21 -21
  394. package/node_modules/@dsh-std/storage/README.md +5 -5
  395. package/node_modules/@dsh-std/storage/README.zh.md +7 -7
  396. package/node_modules/@dsh-std/storage/lib/index.js.map +1 -1
  397. package/node_modules/@dsh-std/storage/package.json +20 -20
  398. package/node_modules/@dsh-std/storage/schema/local-storage-0.15.schema.json +56 -56
  399. package/package.json +19 -5
  400. package/presets/liangshen/.dsh-tui-managed.json +1 -1
  401. package/presets/liangshen/instruction-hint.mjs +8 -0
  402. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  403. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/LICENSE +21 -21
  404. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.md +42 -42
  405. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.zh.md +42 -42
  406. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  407. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  408. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  409. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +20 -20
  410. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  411. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/LICENSE +21 -21
  412. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.md +13 -13
  413. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.zh.md +13 -13
  414. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  415. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +21 -21
  416. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  417. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/LICENSE +21 -21
  418. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.md +5 -5
  419. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  420. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  421. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +20 -20
  422. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  423. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  424. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/LICENSE +21 -21
  425. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +27 -27
  426. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  427. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  428. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  429. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +25 -25
  430. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  431. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/LICENSE +21 -21
  432. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.md +13 -13
  433. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.zh.md +13 -13
  434. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  435. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +21 -21
  436. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  437. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/LICENSE +21 -21
  438. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.md +13 -13
  439. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.zh.md +13 -13
  440. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  441. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +21 -21
  442. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  443. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/LICENSE +21 -21
  444. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.md +13 -13
  445. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.zh.md +13 -13
  446. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  447. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +21 -21
  448. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  449. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/LICENSE +21 -21
  450. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.md +42 -42
  451. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.zh.md +42 -42
  452. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  453. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  454. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  455. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +20 -20
  456. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  457. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/LICENSE +21 -21
  458. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.md +13 -13
  459. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.zh.md +13 -13
  460. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  461. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +21 -21
  462. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  463. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/LICENSE +21 -21
  464. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.md +13 -13
  465. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.zh.md +13 -13
  466. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  467. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/package.json +21 -21
@@ -11,13 +11,32 @@
11
11
  * 5. `zh` (the original hard-coded language)
12
12
  *
13
13
  * `/lang` switches at runtime and hot-swaps the whole UI. The dictionary is
14
- * a flat key → per-language string map; `t(key, params)` substitutes
15
- * `{{name}}` placeholders with the given params. Missing keys render the
16
- * key itself so a typo is visible in the UI instead of silently blank.
14
+ * a flat key → per-language text map; `t(key, params)` substitutes
15
+ * `{{name}}` placeholders with the given params. A per-language value is
16
+ * either a plain template or `{ one, other }` plural forms selected via
17
+ * `Intl.PluralRules` on the `count` param (zh has no grammatical number and
18
+ * always resolves to `other`). Missing keys render the key itself so a typo
19
+ * is visible in the UI instead of silently blank.
20
+ *
21
+ * The dictionary shape is enforced at compile time (`satisfies` below):
22
+ * every entry carries zh, and en is optional only for the `cmd-desc-*`
23
+ * family whose en truth lives in the command registry (see {@link tOr}).
24
+ * scripts/verify-i18n.ts adds the checks types cannot express: placeholder
25
+ * parity between languages, single-brace typos, and dead keys.
17
26
  */
18
27
  export type Lang = 'zh' | 'en';
19
28
  /** The languages shipped with the plugin, in display order. */
20
29
  export declare const LANGS: readonly ["zh", "en"];
30
+ /**
31
+ * One dictionary value in one language: a plain `{{name}}` template, or
32
+ * plural forms picked by the `count` param through `Intl.PluralRules`.
33
+ * Only `one`/`other` exist because those are the only CLDR categories zh
34
+ * and en use; a third shipped language may need more.
35
+ */
36
+ export type I18nText = string | {
37
+ one: string;
38
+ other: string;
39
+ };
21
40
  declare const dict: {
22
41
  readonly 'activity-indicator-already': {
23
42
  readonly zh: "指示器已是:{{name}}";
@@ -129,7 +148,10 @@ declare const dict: {
129
148
  };
130
149
  readonly 'mentions-attached': {
131
150
  readonly zh: "已附加 {{count}} 个文件引用";
132
- readonly en: "Attached {{count}} file reference(s)";
151
+ readonly en: {
152
+ readonly one: "Attached {{count}} file reference";
153
+ readonly other: "Attached {{count}} file references";
154
+ };
133
155
  };
134
156
  readonly 'mentions-missing': {
135
157
  readonly zh: "未找到引用: {{paths}}";
@@ -267,10 +289,6 @@ declare const dict: {
267
289
  readonly zh: "工具";
268
290
  readonly en: "Tools";
269
291
  };
270
- readonly 'subagent-expand-hint': {
271
- readonly zh: "按 Enter 展开完整输出";
272
- readonly en: "Press Enter to expand full output";
273
- };
274
292
  readonly 'subagent-status-running': {
275
293
  readonly zh: "运行中";
276
294
  readonly en: "running";
@@ -311,6 +329,234 @@ declare const dict: {
311
329
  readonly zh: "已回退,但工作区挂载失败 · {{err}}";
312
330
  readonly en: "Session rewound, but workspace attachment failed · {{err}}";
313
331
  };
332
+ readonly 'rewind-no-persistence': {
333
+ readonly zh: "回退不可用——持久化服务未加载";
334
+ readonly en: "Rewind unavailable — session persistence not loaded";
335
+ };
336
+ readonly 'rewind-load-failed': {
337
+ readonly zh: "无法读取该会话日志 · {{err}}";
338
+ readonly en: "Could not read that session log · {{err}}";
339
+ };
340
+ readonly 'rewind-first-message': {
341
+ readonly zh: "不能回退到第一条消息之前";
342
+ readonly en: "Cannot rewind past the very first message";
343
+ };
344
+ readonly 'rewind-noop': {
345
+ readonly zh: "该点之后没有可回退的内容";
346
+ readonly en: "Nothing to rewind past this point";
347
+ };
348
+ readonly 'rewind-session-changed': {
349
+ readonly zh: "会话已切换,回退已放弃";
350
+ readonly en: "The session changed; the rewind was dropped";
351
+ };
352
+ readonly 'tree-unavailable': {
353
+ readonly zh: "会话树不可用——持久化服务未加载";
354
+ readonly en: "Session tree unavailable — session persistence not loaded";
355
+ };
356
+ readonly 'fork-unavailable': {
357
+ readonly zh: "分叉不可用——会话服务未加载";
358
+ readonly en: "Fork unavailable — session services not loaded";
359
+ };
360
+ readonly 'fork-while-working': {
361
+ readonly zh: "回合运行中,无法分叉会话";
362
+ readonly en: "Cannot fork while a turn is running";
363
+ };
364
+ readonly 'fork-failed': {
365
+ readonly zh: "分叉失败 · {{err}}";
366
+ readonly en: "Fork failed · {{err}}";
367
+ };
368
+ readonly 'fork-create-failed': {
369
+ readonly zh: "分叉失败——无法创建分叉会话";
370
+ readonly en: "Fork failed — could not create the forked session";
371
+ };
372
+ readonly 'fork-attach-failed': {
373
+ readonly zh: "已分叉,但工作区挂载失败 · {{err}}";
374
+ readonly en: "Session forked, but workspace attachment failed · {{err}}";
375
+ };
376
+ readonly 'fork-done': {
377
+ readonly zh: "已分叉({{id}})——仍在原会话中\n新进程进入分叉:{{command}}";
378
+ readonly en: "Forked ({{id}}) — still in the original session\nEnter the fork in a new process: {{command}}";
379
+ };
380
+ readonly 'tree-title': {
381
+ readonly zh: "会话树";
382
+ readonly en: "Session tree";
383
+ };
384
+ readonly 'tree-sessions': {
385
+ readonly zh: "会话";
386
+ readonly en: "sessions";
387
+ };
388
+ readonly 'tree-loading': {
389
+ readonly zh: "正在加载会话树…";
390
+ readonly en: "Loading the session tree…";
391
+ };
392
+ readonly 'tree-rewinding': {
393
+ readonly zh: "正在分叉并切换…";
394
+ readonly en: "Forking and switching…";
395
+ };
396
+ readonly 'tree-empty': {
397
+ readonly zh: "没有可显示的条目";
398
+ readonly en: "No entries to show";
399
+ };
400
+ readonly 'tree-truncated': {
401
+ readonly zh: "已截断";
402
+ readonly en: "truncated";
403
+ };
404
+ readonly 'tree-search': {
405
+ readonly zh: "输入即搜索…";
406
+ readonly en: "Type to search…";
407
+ };
408
+ readonly 'tree-filter-default': {
409
+ readonly zh: "默认";
410
+ readonly en: "default";
411
+ };
412
+ readonly 'tree-filter-no-tools': {
413
+ readonly zh: "无工具";
414
+ readonly en: "no tools";
415
+ };
416
+ readonly 'tree-filter-user-only': {
417
+ readonly zh: "仅用户";
418
+ readonly en: "user only";
419
+ };
420
+ readonly 'tree-filter-all': {
421
+ readonly zh: "全部";
422
+ readonly en: "all";
423
+ };
424
+ readonly 'tree-kind-user': {
425
+ readonly zh: "用户消息";
426
+ readonly en: "user message";
427
+ };
428
+ readonly 'tree-kind-assistant': {
429
+ readonly zh: "助手回复";
430
+ readonly en: "assistant message";
431
+ };
432
+ readonly 'tree-kind-tool': {
433
+ readonly zh: "工具调用";
434
+ readonly en: "tool call";
435
+ };
436
+ readonly 'tree-kind-compact': {
437
+ readonly zh: "压缩检查点";
438
+ readonly en: "compaction";
439
+ };
440
+ readonly 'tree-kind-interrupt': {
441
+ readonly zh: "中断";
442
+ readonly en: "interrupt";
443
+ };
444
+ readonly 'tree-kind-notice': {
445
+ readonly zh: "通知";
446
+ readonly en: "notice";
447
+ };
448
+ readonly 'tree-empty-fork': {
449
+ readonly zh: "(空分叉)";
450
+ readonly en: "(empty fork)";
451
+ };
452
+ readonly 'tree-unreadable': {
453
+ readonly zh: "(日志无法读取)";
454
+ readonly en: "(unreadable log)";
455
+ };
456
+ readonly 'tree-unloaded': {
457
+ readonly zh: "(超出预算未加载)";
458
+ readonly en: "(not loaded — over budget)";
459
+ };
460
+ readonly 'tree-first-message': {
461
+ readonly zh: "不能回退到第一条消息之前";
462
+ readonly en: "Cannot rewind past the very first message";
463
+ };
464
+ readonly 'tree-adopt-live': {
465
+ readonly zh: "当前会话就在这条分支上";
466
+ readonly en: "The live session is already on this branch";
467
+ };
468
+ readonly 'tree-adopt-unavailable': {
469
+ readonly zh: "该分支无法整体切换(未加载到末端)";
470
+ readonly en: "Cannot adopt this branch (its tip was not loaded)";
471
+ };
472
+ readonly 'tree-menu-rewind': {
473
+ readonly zh: "回退到这里";
474
+ readonly en: "Rewind here";
475
+ };
476
+ readonly 'tree-menu-rewind-detail': {
477
+ readonly zh: "丢弃该轮对话,提示词回到输入框";
478
+ readonly en: "Drops that turn; its prompt returns to the input";
479
+ };
480
+ readonly 'tree-menu-fork': {
481
+ readonly zh: "从这分叉";
482
+ readonly en: "Fork here";
483
+ };
484
+ readonly 'tree-menu-fork-detail': {
485
+ readonly zh: "保留这条消息,从这里开新分支";
486
+ readonly en: "Keeps this entry and branches here";
487
+ };
488
+ readonly 'tree-menu-adopt': {
489
+ readonly zh: "切换到该分支";
490
+ readonly en: "Adopt this branch";
491
+ };
492
+ readonly 'tree-menu-adopt-detail': {
493
+ readonly zh: "保留整条分支并切换过去";
494
+ readonly en: "Switches to the whole branch, content kept";
495
+ };
496
+ readonly 'tree-menu-cancel': {
497
+ readonly zh: "取消";
498
+ readonly en: "Cancel";
499
+ };
500
+ readonly 'tree-confirm-rewind': {
501
+ readonly zh: "回退到「{{text}}」?";
502
+ readonly en: "Rewind to \"{{text}}\"?";
503
+ };
504
+ readonly 'tree-confirm-drop': {
505
+ readonly zh: "回退到「{{text}}」?该轮 {{n}} 条消息将丢弃";
506
+ readonly en: "Rewind to \"{{text}}\"? Drops that turn ({{n}} entries)";
507
+ };
508
+ readonly 'tree-confirm-adopt': {
509
+ readonly zh: "切换到「{{text}}」所在分支?";
510
+ readonly en: "Switch to the branch of \"{{text}}\"?";
511
+ };
512
+ readonly 'tree-confirm-drops-branch': {
513
+ readonly zh: "注意:该分支的全部内容都在这一轮里,回退后将看不到它们";
514
+ readonly en: "Heads-up: this branch’s whole content is that one turn — it disappears from the fork";
515
+ };
516
+ readonly 'tree-hint': {
517
+ readonly zh: "**Enter** 菜单 · **{{mod}}F** 从这分叉 · **{{mod}}B** 切到分支 · **{{mod}}O** 过滤 · 点击行出菜单 · 输入搜索 · Esc 退出";
518
+ readonly en: "**Enter** menu · **{{mod}}F** fork here · **{{mod}}B** adopt branch · **{{mod}}O** filter · click a row for the menu · type to search · Esc exits";
519
+ };
520
+ readonly 'tree-hint-short': {
521
+ readonly zh: "**Enter** 菜单 · 点击行出菜单 · Esc 退出";
522
+ readonly en: "**Enter** menu · click a row · Esc exits";
523
+ };
524
+ readonly 'tree-hint-menu': {
525
+ readonly zh: "**↑↓** 选择 · **Enter** 执行 · 首字母直达 · Esc 返回";
526
+ readonly en: "**↑↓** move · **Enter** run · letter keys jump · Esc back";
527
+ };
528
+ readonly 'tree-hint-confirm': {
529
+ readonly zh: "**Enter** 确认 · Esc 取消";
530
+ readonly en: "**Enter** to confirm · Esc to cancel";
531
+ };
532
+ readonly 'tree-refused': {
533
+ readonly zh: "操作未执行(原因已记录到会话通知)";
534
+ readonly en: "Not executed — the reason was notified to the conversation";
535
+ };
536
+ readonly 'tree-rewind-failed': {
537
+ readonly zh: "操作失败 · {{message}}";
538
+ readonly en: "Action failed · {{message}}";
539
+ };
540
+ readonly 'tree-rewound': {
541
+ readonly zh: "已回退——编辑后重新发送";
542
+ readonly en: "Rewound — edit and resend";
543
+ };
544
+ readonly 'tree-forked': {
545
+ readonly zh: "已从此处分叉";
546
+ readonly en: "Forked from this point";
547
+ };
548
+ readonly 'tree-adopted': {
549
+ readonly zh: "已切换到该分支";
550
+ readonly en: "Switched to that branch";
551
+ };
552
+ readonly 'tree-preview-title': {
553
+ readonly zh: "预览";
554
+ readonly en: "Preview";
555
+ };
556
+ readonly 'tree-branch-live': {
557
+ readonly zh: "当前会话";
558
+ readonly en: "live session";
559
+ };
314
560
  readonly 'resume-while-working': {
315
561
  readonly zh: "回合运行中,无法恢复会话";
316
562
  readonly en: "Cannot resume while a turn is running";
@@ -363,6 +609,14 @@ declare const dict: {
363
609
  readonly zh: "模型已切换,但工作区挂载失败 · {{err}}";
364
610
  readonly en: "Model switched, but workspace attachment failed · {{err}}";
365
611
  };
612
+ readonly 'model-usage': {
613
+ readonly zh: "用法:/model <provider/model>(如 deepseek/deepseek-v4-flash)";
614
+ readonly en: "Usage: /model <provider/model> (e.g. deepseek/deepseek-v4-flash)";
615
+ };
616
+ readonly 'model-unknown': {
617
+ readonly zh: "未知模型「{{spec}}」· /model 查看全部";
618
+ readonly en: "Unknown model \"{{spec}}\" · /model to view all";
619
+ };
366
620
  readonly 'compact-unavailable': {
367
621
  readonly zh: "压缩不可用——当前 leaf 没有压缩服务";
368
622
  readonly en: "Compaction unavailable · no compaction service in this leaf";
@@ -395,10 +649,6 @@ declare const dict: {
395
649
  readonly zh: "📋 问卷已答 · {{total}} 题";
396
650
  readonly en: "📋 Questionnaire answered · {{total}} questions";
397
651
  };
398
- readonly 'theme-sakura-name': {
399
- readonly zh: "樱花粉";
400
- readonly en: "Sakura Pink";
401
- };
402
652
  readonly 'context-truncated': {
403
653
  readonly zh: "…(已截断)";
404
654
  readonly en: "… (truncated)";
@@ -471,10 +721,6 @@ declare const dict: {
471
721
  readonly zh: "已复制 {{n}} 个字符";
472
722
  readonly en: "Copied {{n}} characters";
473
723
  };
474
- readonly 'activity-usage-name': {
475
- readonly zh: "/activity frames <名>";
476
- readonly en: "/activity frames <name>";
477
- };
478
724
  readonly 'activity-current-preset': {
479
725
  readonly zh: "当前预设 {{name}}";
480
726
  readonly en: "Current preset {{name}}";
@@ -527,10 +773,6 @@ declare const dict: {
527
773
  readonly zh: "当前组合未挂载 agent-presets 名册(preset 不可用)";
528
774
  readonly en: "The agent-presets roster is not mounted (presets unavailable)";
529
775
  };
530
- readonly 'theme-name-arg': {
531
- readonly zh: "/theme <名字>";
532
- readonly en: "/theme <name>";
533
- };
534
776
  readonly 'theme-current': {
535
777
  readonly zh: "当前主题 {{name}}";
536
778
  readonly en: "Current theme {{name}}";
@@ -612,8 +854,8 @@ declare const dict: {
612
854
  readonly en: "Cannot switch workspaces while the agent is running";
613
855
  };
614
856
  readonly 'workspace-open-invalid': {
615
- readonly zh: "无法打开工作区:{target} 不是存在的目录";
616
- readonly en: "Cannot open workspace: {target} is not an existing directory";
857
+ readonly zh: "无法打开工作区:{{target}} 不是存在的目录";
858
+ readonly en: "Cannot open workspace: {{target}} is not an existing directory";
617
859
  };
618
860
  readonly 'workspace-switched': {
619
861
  readonly zh: "已切换工作区:{{target}}";
@@ -639,9 +881,21 @@ declare const dict: {
639
881
  readonly zh: "正在连接并读取目录… · Esc 关闭";
640
882
  readonly en: "Connecting and loading directories… · Esc to close";
641
883
  };
642
- readonly 'workspace-command-usage': {
643
- readonly zh: "用法:/workspace resume | rename <名称> | open <路径或 URI>{{commands}}";
644
- readonly en: "Usage: /workspace resume | rename <name> | open <path-or-URI>{{commands}}";
884
+ readonly 'workspace-menu-title': {
885
+ readonly zh: "Workspace 操作";
886
+ readonly en: "Workspace actions";
887
+ };
888
+ readonly 'workspace-menu-resume-desc': {
889
+ readonly zh: "切换到另一个工作区";
890
+ readonly en: "Switch to another workspace";
891
+ };
892
+ readonly 'workspace-menu-rename-desc': {
893
+ readonly zh: "重命名当前工作区(需输入名称)";
894
+ readonly en: "Rename the current workspace (needs a name)";
895
+ };
896
+ readonly 'workspace-menu-open-desc': {
897
+ readonly zh: "打开路径或工作区 URI(需输入路径)";
898
+ readonly en: "Open a path or workspace URI (needs a path)";
645
899
  };
646
900
  readonly 'workspace-open-usage': {
647
901
  readonly zh: "用法:/workspace open <路径或 URI>";
@@ -775,26 +1029,98 @@ declare const dict: {
775
1029
  readonly zh: "使用 /provider 管理 DSH 凭据;若来源为 env,请删除对应环境变量并重启 dsh-tui";
776
1030
  readonly en: "Manage DSH credentials with /provider; for env sources, remove the corresponding environment variable and restart dsh-tui";
777
1031
  };
778
- readonly 'permissions-policy-hint': {
1032
+ readonly 'login-oauth-heading': {
1033
+ readonly zh: "订阅账号(OAuth):";
1034
+ readonly en: "Subscriptions (OAuth):";
1035
+ };
1036
+ readonly 'login-oauth-row': {
1037
+ readonly zh: " {{provider}} — {{state}}";
1038
+ readonly en: " {{provider}} — {{state}}";
1039
+ };
1040
+ readonly 'login-oauth-in': {
1041
+ readonly zh: "已登录 · 令牌到期 {{time}}";
1042
+ readonly en: "signed in · token expires {{time}}";
1043
+ };
1044
+ readonly 'login-oauth-expired': {
1045
+ readonly zh: "已登录但令牌已过期,重新登录可恢复";
1046
+ readonly en: "signed in but the token expired — sign in again to restore";
1047
+ };
1048
+ readonly 'login-oauth-signed-out': {
1049
+ readonly zh: "未登录";
1050
+ readonly en: "not signed in";
1051
+ };
1052
+ readonly 'login-oauth-hint': {
1053
+ readonly zh: " 登录/登出:/provider 订阅账号登录,或 /auth login <provider>";
1054
+ readonly en: " Sign in/out: /provider subscription sign-in, or /auth login <provider>";
1055
+ };
1056
+ readonly 'permission-policy-hint': {
779
1057
  readonly zh: "DSH 权限策略由 fs-policy / bash-sandbox 配置决定(当前 leaf:workspace 内读写、写入需已读文件)。";
780
1058
  readonly en: "DSH permission policy is set by fs-policy / bash-sandbox config (current leaf: read/write in workspace, writes need a prior read).";
781
1059
  };
782
- readonly 'permissions-approval-hint': {
1060
+ readonly 'permission-approval-hint': {
783
1061
  readonly zh: "审批通道已挂载:命令申请权限提升(sandbox_permissions)时弹出审批条,Yes 放行一次、No / Esc 拒绝。";
784
1062
  readonly en: "The approval channel is mounted: sandbox escalations (sandbox_permissions) raise an approval bar — Yes allows once, No / Esc rejects.";
785
1063
  };
786
- readonly 'permissions-preset-hint': {
787
- readonly zh: "/permission 可查看与切换权限预设(read-only / workspace-write / danger-full-access)。";
788
- readonly en: "/permission shows and switches permission presets (read-only / workspace-write / danger-full-access).";
789
- };
790
- readonly 'permissions-root-hint': {
1064
+ readonly 'permission-root-hint': {
791
1065
  readonly zh: "当前文件系统策略以工作目录为根:{{cwd}}";
792
1066
  readonly en: "Current filesystem policy is rooted at the working directory: {{cwd}}";
793
1067
  };
794
- readonly 'permissions-path-hint': {
1068
+ readonly 'permission-path-hint': {
795
1069
  readonly zh: "模型工具相对路径均解析自该目录;跨目录访问由 fs-policy 拦截。";
796
1070
  readonly en: "Relative paths of model tools resolve from this directory; cross-directory access is blocked by fs-policy.";
797
1071
  };
1072
+ readonly 'permission-current': {
1073
+ readonly zh: "当前预设 {{name}}";
1074
+ readonly en: "Current preset {{name}}";
1075
+ };
1076
+ readonly 'permission-picker-title': {
1077
+ readonly zh: "权限预设";
1078
+ readonly en: "Permission preset";
1079
+ };
1080
+ readonly 'permission-preset-readonly': {
1081
+ readonly zh: "只读";
1082
+ readonly en: "Read-only";
1083
+ };
1084
+ readonly 'permission-preset-readonly-desc': {
1085
+ readonly zh: "会话只读:不写文件、不执行命令";
1086
+ readonly en: "Read-only session: no file writes, no commands";
1087
+ };
1088
+ readonly 'permission-preset-workspace-write': {
1089
+ readonly zh: "工作区读写";
1090
+ readonly en: "Workspace read/write";
1091
+ };
1092
+ readonly 'permission-preset-workspace-write-desc': {
1093
+ readonly zh: "工作区内读写;写入需先读该文件";
1094
+ readonly en: "Read/write inside the workspace; writes need a prior read";
1095
+ };
1096
+ readonly 'permission-preset-full-access': {
1097
+ readonly zh: "完全访问";
1098
+ readonly en: "Full access";
1099
+ };
1100
+ readonly 'permission-preset-full-access-desc': {
1101
+ readonly zh: "不受限读写,无需审批";
1102
+ readonly en: "Unrestricted access, no approvals";
1103
+ };
1104
+ readonly 'plan-picker-title': {
1105
+ readonly zh: "计划模式";
1106
+ readonly en: "Plan mode";
1107
+ };
1108
+ readonly 'plan-mode-on': {
1109
+ readonly zh: "开启";
1110
+ readonly en: "On";
1111
+ };
1112
+ readonly 'plan-mode-on-desc': {
1113
+ readonly zh: "进入计划模式:只读,先规划后动手";
1114
+ readonly en: "Enter plan mode: read-only, plan before acting";
1115
+ };
1116
+ readonly 'plan-mode-off': {
1117
+ readonly zh: "关闭";
1118
+ readonly en: "Off";
1119
+ };
1120
+ readonly 'plan-mode-off-desc': {
1121
+ readonly zh: "退出计划模式,恢复正常执行";
1122
+ readonly en: "Exit plan mode, back to normal execution";
1123
+ };
798
1124
  readonly 'hooks-not-mounted': {
799
1125
  readonly zh: "DSH hooks(dsh-hooks-claude / dsh-hooks-codex)未在本 leaf 挂载。";
800
1126
  readonly en: "DSH hooks (dsh-hooks-claude / dsh-hooks-codex) are not mounted in this leaf.";
@@ -835,6 +1161,62 @@ declare const dict: {
835
1161
  readonly zh: "镜像 registry 滞后:本次安装 v{{latest}};官方最新 v{{authoritative}},镜像同步后可再 /update。";
836
1162
  readonly en: "Mirror registry lag: installing v{{latest}} now; official latest is v{{authoritative}} — run /update again once the mirror syncs.";
837
1163
  };
1164
+ readonly 'reload-header': {
1165
+ readonly zh: "已重读偏好文件:";
1166
+ readonly en: "Preferences reloaded:";
1167
+ };
1168
+ readonly 'reload-applied': {
1169
+ readonly zh: "{{kind}} {{from}} → {{to}}(已应用)";
1170
+ readonly en: "{{kind}} {{from}} → {{to}} (applied)";
1171
+ };
1172
+ readonly 'reload-unchanged': {
1173
+ readonly zh: "{{kind}} 无变化";
1174
+ readonly en: "{{kind}} unchanged";
1175
+ };
1176
+ readonly 'reload-skipped-env': {
1177
+ readonly zh: "{{kind}} 跳过:环境变量优先";
1178
+ readonly en: "{{kind}} skipped: env override wins";
1179
+ };
1180
+ readonly 'reload-skipped-config': {
1181
+ readonly zh: "{{kind}} 跳过:显式配置优先";
1182
+ readonly en: "{{kind}} skipped: explicit config wins";
1183
+ };
1184
+ readonly 'reload-skipped-invalid': {
1185
+ readonly zh: "{{kind}} 跳过:文件缺失或无效";
1186
+ readonly en: "{{kind}} skipped: missing or invalid file";
1187
+ };
1188
+ readonly 'reload-footer': {
1189
+ readonly zh: "提示:settings.yaml / cordis.patch.yml 由 watcher 自动热重载;cordis.yml 根配置改动需 /restart";
1190
+ readonly en: "Note: settings.yaml / cordis.patch.yml hot-reload via watchers; cordis.yml root config changes need /restart";
1191
+ };
1192
+ readonly 'reload-kind-theme': {
1193
+ readonly zh: "主题";
1194
+ readonly en: "theme";
1195
+ };
1196
+ readonly 'reload-kind-lang': {
1197
+ readonly zh: "语言";
1198
+ readonly en: "language";
1199
+ };
1200
+ readonly 'reload-kind-preset': {
1201
+ readonly zh: "预设";
1202
+ readonly en: "preset";
1203
+ };
1204
+ readonly 'reload-kind-model': {
1205
+ readonly zh: "模型";
1206
+ readonly en: "model";
1207
+ };
1208
+ readonly 'reload-kind-activity': {
1209
+ readonly zh: "活动指示";
1210
+ readonly en: "activity";
1211
+ };
1212
+ readonly 'restart-starting': {
1213
+ readonly zh: "正在重启 dsh-tui,完成后自动恢复当前会话……";
1214
+ readonly en: "Restarting dsh-tui. The session resumes when it comes back…";
1215
+ };
1216
+ readonly 'restart-unavailable': {
1217
+ readonly zh: "当前运行方式不支持进程内重启(未挂载重启通道)。";
1218
+ readonly en: "Restart is unavailable in this launch mode (no restart channel mounted).";
1219
+ };
838
1220
  readonly 'streaming-folded': {
839
1221
  readonly zh: "…(前 {{count}} 字符流式期间已折叠,落定后完整显示)";
840
1222
  readonly en: "…(first {{count}} chars folded while streaming; full text renders once the turn settles)";
@@ -848,8 +1230,8 @@ declare const dict: {
848
1230
  readonly en: "Recommended: Windows Terminal (≥110 columns, monospace, TrueColor).";
849
1231
  };
850
1232
  readonly 'terminal-paste-hint': {
851
- readonly zh: "{{mod}}V 粘贴文本、文件路径或图片;Ctrl+Shift+V 终端原生粘贴;右键粘贴同样可用。";
852
- readonly en: "{{mod}}V pastes text, file paths, or images; Ctrl+Shift+V is native terminal paste; right-click paste also works.";
1233
+ readonly zh: "{{mod}}V 或 Alt+V 粘贴文本、文件路径或图片;Ctrl+Shift+V 终端原生粘贴;右键粘贴同样可用;快捷键可在 /settings 修改。";
1234
+ readonly en: "{{mod}}V or Alt+V pastes text, file paths, or images; Ctrl+Shift+V is native terminal paste; right-click paste also works; remappable via /settings.";
853
1235
  };
854
1236
  readonly 'connect-none': {
855
1237
  readonly zh: "DSH 暂无远程连接机制(CC 的 /connect 对应能力未适配)。";
@@ -883,6 +1265,82 @@ declare const dict: {
883
1265
  readonly zh: "侧问不可用(llm 服务未挂载)";
884
1266
  readonly en: "Side question unavailable (llm service not mounted)";
885
1267
  };
1268
+ readonly 'recap-llm-unavailable': {
1269
+ readonly zh: "recap 不可用(llm 服务未挂载)";
1270
+ readonly en: "Recap unavailable (llm service not mounted)";
1271
+ };
1272
+ readonly 'recap-no-activity': {
1273
+ readonly zh: "会话还没有可总结的活动";
1274
+ readonly en: "No session activity to recap yet";
1275
+ };
1276
+ readonly 'recap-answering': {
1277
+ readonly zh: "正在总结最近活动…";
1278
+ readonly en: "Summarizing recent activity…";
1279
+ };
1280
+ readonly 'recap-title-label': {
1281
+ readonly zh: "建议标题";
1282
+ readonly en: "Suggested title";
1283
+ };
1284
+ readonly 'recap-apply-title': {
1285
+ readonly zh: "应用";
1286
+ readonly en: "Apply";
1287
+ };
1288
+ readonly 'recap-title-applied': {
1289
+ readonly zh: "已应用";
1290
+ readonly en: "Applied";
1291
+ };
1292
+ readonly 'recap-title-applied-notify': {
1293
+ readonly zh: "已将会话标题设为「{{title}}」";
1294
+ readonly en: "Session title set to \"{{title}}\"";
1295
+ };
1296
+ readonly 'recap-hint': {
1297
+ readonly zh: "↑/↓ 滚动 · Space/Enter/Esc 关闭 · c 复制{{apply}}";
1298
+ readonly en: "↑/↓ scroll · Space/Enter/Esc dismiss · c copy{{apply}}";
1299
+ };
1300
+ readonly 'recap-auto-hint': {
1301
+ readonly zh: "点击展开查看/应用";
1302
+ readonly en: "Click to expand & apply";
1303
+ };
1304
+ readonly 'recap-auto-close': {
1305
+ readonly zh: "关闭";
1306
+ readonly en: "Dismiss";
1307
+ };
1308
+ readonly 'recap-auto-line': {
1309
+ readonly zh: "回顾:{{summary}}";
1310
+ readonly en: "Recap: {{summary}}";
1311
+ };
1312
+ readonly 'recap-panel-title': {
1313
+ readonly zh: "会话回顾";
1314
+ readonly en: "Session recap";
1315
+ };
1316
+ readonly 'recap-panel-subtitle': {
1317
+ readonly zh: "最近活动的快速复盘";
1318
+ readonly en: "A quick recap of recent activity";
1319
+ };
1320
+ readonly 'color-current': {
1321
+ readonly zh: "当前会话颜色 {{name}}";
1322
+ readonly en: "Current session color {{name}}";
1323
+ };
1324
+ readonly 'color-current-none': {
1325
+ readonly zh: "当前会话未设置颜色(用主题默认)";
1326
+ readonly en: "No session color set (theme default)";
1327
+ };
1328
+ readonly 'color-usage': {
1329
+ readonly zh: "用法:/color <{{list}}|reset> —— 颜色按会话保存,resume 后仍在";
1330
+ readonly en: "Usage: /color <{{list}}|reset> — per-session, survives resume";
1331
+ };
1332
+ readonly 'color-reset': {
1333
+ readonly zh: "已清除会话颜色,恢复主题默认";
1334
+ readonly en: "Session color cleared — back to the theme default";
1335
+ };
1336
+ readonly 'color-unknown': {
1337
+ readonly zh: "未知颜色「{{name}}」· 可选:{{list}}";
1338
+ readonly en: "Unknown color \"{{name}}\" · available: {{list}}";
1339
+ };
1340
+ readonly 'color-set': {
1341
+ readonly zh: "会话颜色已设为 {{name}}";
1342
+ readonly en: "Session color set to {{name}}";
1343
+ };
886
1344
  readonly 'exit-press-again': {
887
1345
  readonly zh: "再次按 Ctrl+C 退出";
888
1346
  readonly en: "Press Ctrl+C again to exit";
@@ -936,12 +1394,12 @@ declare const dict: {
936
1394
  readonly en: "dsh-tui update aborted: no dsh profile resolved.";
937
1395
  };
938
1396
  readonly 'update-launcher-align-unknown': {
939
- readonly zh: "Profile 已更新到 v{{version}}。如果你平时使用全局 dsh-tui 命令启动,请同步更新全局启动器:\n npm install -g @deepseek-harness-tui/dsh-tui@{{version}}";
940
- readonly en: "The profile is now v{{version}}. If you normally launch with the global dsh-tui command, align the global launcher too:\n npm install -g @deepseek-harness-tui/dsh-tui@{{version}}";
1397
+ readonly zh: "Profile 已更新到 v{{version}}。如果你平时使用全局 dsh-tui 命令启动,请同步更新全局启动器:\n npm install -g --legacy-peer-deps @deepseek-harness-tui/dsh-tui@{{version}}\n(--legacy-peer-deps 可绕过 npm 12 的 peer 解析崩溃,全局启动器是瘦壳,跳过全局 peer 解析是安全的)";
1398
+ readonly en: "The profile is now v{{version}}. If you normally launch with the global dsh-tui command, align the global launcher too:\n npm install -g --legacy-peer-deps @deepseek-harness-tui/dsh-tui@{{version}}\n(--legacy-peer-deps works around an npm 12 peer-resolution crash; the global launcher is a thin shim, so skipping global peer resolution is safe.)";
941
1399
  };
942
1400
  readonly 'update-launcher-outdated': {
943
- readonly zh: "Profile 已更新到 v{{profile}},但全局启动器仍是 v{{launcher}}。请同步更新:\n npm install -g @deepseek-harness-tui/dsh-tui@{{profile}}";
944
- readonly en: "The profile is now v{{profile}}, but the global launcher is still v{{launcher}}. Align it with:\n npm install -g @deepseek-harness-tui/dsh-tui@{{profile}}";
1401
+ readonly zh: "Profile 已更新到 v{{profile}},但全局启动器仍是 v{{launcher}}。请同步更新:\n npm install -g --legacy-peer-deps @deepseek-harness-tui/dsh-tui@{{profile}}\n(--legacy-peer-deps 可绕过 npm 12 的 peer 解析崩溃,见 #459)";
1402
+ readonly en: "The profile is now v{{profile}}, but the global launcher is still v{{launcher}}. Align it with:\n npm install -g --legacy-peer-deps @deepseek-harness-tui/dsh-tui@{{profile}}\n(--legacy-peer-deps works around an npm 12 peer-resolution crash, see #459.)";
945
1403
  };
946
1404
  readonly 'activity-ctx-warn': {
947
1405
  readonly zh: "⚠ 上下文";
@@ -1087,10 +1545,6 @@ declare const dict: {
1087
1545
  readonly zh: "无法读取剪贴板:没有可用的 wl-paste / xclip / xsel(未安装或会话不可连接)";
1088
1546
  readonly en: "Cannot read clipboard: no usable wl-paste / xclip / xsel (not installed or session unreachable)";
1089
1547
  };
1090
- readonly 'input-clipboard-image-saved': {
1091
- readonly zh: "剪贴板图片已保存为临时文件,已插入路径";
1092
- readonly en: "Clipboard image saved to a temp file; path inserted";
1093
- };
1094
1548
  readonly 'input-image-pasted': {
1095
1549
  readonly zh: "已粘贴图片 {{token}}";
1096
1550
  readonly en: "Pasted image {{token}}";
@@ -1111,53 +1565,89 @@ declare const dict: {
1111
1565
  readonly zh: "撤回 · Esc 打断并立即发送";
1112
1566
  readonly en: "Retract · Esc interrupts and sends immediately";
1113
1567
  };
1114
- readonly 'frame-blink': {
1115
- readonly zh: "眨眼";
1116
- readonly en: "blink";
1568
+ readonly 'input-fold-stats': {
1569
+ readonly zh: "{{lines}} 行 · {{chars}} 字";
1570
+ readonly en: "{{lines}} lines · {{chars}} chars";
1571
+ };
1572
+ readonly 'input-fold-hover': {
1573
+ readonly zh: "悬停查看";
1574
+ readonly en: "hover to peek";
1575
+ };
1576
+ readonly 'input-fold-peek-footer': {
1577
+ readonly zh: "… 共 {{lines}} 行 · 点击展开编辑";
1578
+ readonly en: "… {{lines}} lines total · click to edit";
1579
+ };
1580
+ readonly 'sugg-commands-title': {
1581
+ readonly zh: "命令";
1582
+ readonly en: "commands";
1583
+ };
1584
+ readonly 'sugg-files-title': {
1585
+ readonly zh: "文件";
1586
+ readonly en: "files";
1117
1587
  };
1118
- readonly 'frame-fin-1': {
1119
- readonly zh: "动腹鳍1";
1120
- readonly en: "fin1";
1588
+ readonly 'sugg-count': {
1589
+ readonly zh: "共 {{n}} 项";
1590
+ readonly en: "{{n}} items";
1121
1591
  };
1122
- readonly 'frame-fin-2': {
1123
- readonly zh: "动腹鳍2";
1124
- readonly en: "fin2";
1592
+ readonly 'sugg-more-above': {
1593
+ readonly zh: "↑{{n}}";
1594
+ readonly en: "↑{{n}}";
1125
1595
  };
1126
- readonly 'frame-spout-1': {
1127
- readonly zh: "喷水花1";
1128
- readonly en: "spout1";
1596
+ readonly 'sugg-more-below': {
1597
+ readonly zh: "↓{{n}}";
1598
+ readonly en: "↓{{n}}";
1129
1599
  };
1130
- readonly 'frame-spout-2': {
1131
- readonly zh: "喷水花2";
1132
- readonly en: "spout2";
1600
+ readonly 'sugg-status-desc': {
1601
+ readonly zh: "显示当前选择";
1602
+ readonly en: "Show the current choice";
1133
1603
  };
1134
- readonly 'frame-spout-3': {
1135
- readonly zh: "喷水花3";
1136
- readonly en: "spout3";
1604
+ readonly 'sugg-lang-zh-desc': {
1605
+ readonly zh: "切换界面语言到中文";
1606
+ readonly en: "Switch the UI language to Chinese";
1137
1607
  };
1138
- readonly 'frame-spout-4': {
1139
- readonly zh: "喷水花4";
1140
- readonly en: "spout4";
1608
+ readonly 'sugg-lang-en-desc': {
1609
+ readonly zh: "切换界面语言到英文";
1610
+ readonly en: "Switch the UI language to English";
1141
1611
  };
1142
- readonly 'frame-spout-5': {
1143
- readonly zh: "喷水花5";
1144
- readonly en: "spout5";
1612
+ readonly 'sugg-theme-auto-desc': {
1613
+ readonly zh: "跟随终端背景自动切换";
1614
+ readonly en: "Follow the terminal background";
1145
1615
  };
1146
- readonly 'frame-spout-6': {
1147
- readonly zh: "喷水花6";
1148
- readonly en: "spout6";
1616
+ readonly 'sugg-theme-builtin-desc': {
1617
+ readonly zh: "内置主题";
1618
+ readonly en: "Built-in theme";
1149
1619
  };
1150
- readonly 'frame-tail-1': {
1151
- readonly zh: "摆尾巴1";
1152
- readonly en: "tail1";
1620
+ readonly 'sugg-theme-user-desc': {
1621
+ readonly zh: "用户主题({{base}} 基底)";
1622
+ readonly en: "User theme ({{base}} base)";
1153
1623
  };
1154
- readonly 'frame-tail-2': {
1155
- readonly zh: "摆尾巴2";
1156
- readonly en: "tail2";
1624
+ readonly 'sugg-effort-level-desc': {
1625
+ readonly zh: "思考强度档位";
1626
+ readonly en: "Reasoning effort level";
1157
1627
  };
1158
- readonly 'frame-tail-3': {
1159
- readonly zh: "摆尾巴3";
1160
- readonly en: "tail3";
1628
+ readonly 'sugg-activity-frames-desc': {
1629
+ readonly zh: "列出或切换动画帧预设";
1630
+ readonly en: "List or switch frame presets";
1631
+ };
1632
+ readonly 'sugg-activity-frame-desc': {
1633
+ readonly zh: "动画帧预设";
1634
+ readonly en: "Animation frame preset";
1635
+ };
1636
+ readonly 'sugg-color-reset-desc': {
1637
+ readonly zh: "清除会话颜色,恢复主题默认";
1638
+ readonly en: "Clear the session color";
1639
+ };
1640
+ readonly 'sugg-color-name-desc': {
1641
+ readonly zh: "会话强调色";
1642
+ readonly en: "Session accent color";
1643
+ };
1644
+ readonly 'settings-fullscreen-restart': {
1645
+ readonly zh: "全屏设置已保存,重启 dsh-tui 后生效";
1646
+ readonly en: "Fullscreen preference saved — restart dsh-tui to apply";
1647
+ };
1648
+ readonly 'settings-fullscreen-migrated': {
1649
+ readonly zh: "全屏已是出厂默认(已清除更新前的 inline 选择);偏好 inline 可在 /settings 改回";
1650
+ readonly en: "Fullscreen is now the factory default (pre-update inline choice cleared); prefer inline? Switch back in /settings";
1161
1651
  };
1162
1652
  readonly 'help-for-commands': {
1163
1653
  readonly zh: "/ 查看命令";
@@ -1219,6 +1709,14 @@ declare const dict: {
1219
1709
  readonly zh: "ctrl+g 打开编辑器";
1220
1710
  readonly en: "ctrl+g to open editor";
1221
1711
  };
1712
+ readonly 'help-fold-todos': {
1713
+ readonly zh: "{{mod}}q 折叠待办";
1714
+ readonly en: "{{mod}}q to fold todos";
1715
+ };
1716
+ readonly 'goal-todo-fold-hint': {
1717
+ readonly zh: "{{mod}}q 折叠";
1718
+ readonly en: "{{mod}}q to fold";
1719
+ };
1222
1720
  readonly 'help-commands-title': {
1223
1721
  readonly zh: "命令:";
1224
1722
  readonly en: "commands:";
@@ -1499,10 +1997,6 @@ declare const dict: {
1499
1997
  readonly zh: "**Enter** 确认 · Esc 退出";
1500
1998
  readonly en: "**Enter** to confirm · Esc to exit";
1501
1999
  };
1502
- readonly 'hint-confirm-cancel': {
1503
- readonly zh: "**Enter** 确认 · Esc 取消";
1504
- readonly en: "**Enter** to confirm · Esc to cancel";
1505
- };
1506
2000
  readonly 'hint-select-exit': {
1507
2001
  readonly zh: "**Enter** 选择 · Esc 退出";
1508
2002
  readonly en: "**Enter** to select · Esc to exit";
@@ -1527,6 +2021,14 @@ declare const dict: {
1527
2021
  readonly zh: "? 查看快捷键";
1528
2022
  readonly en: "? for shortcuts";
1529
2023
  };
2024
+ readonly 'status-detail-of-window': {
2025
+ readonly zh: "的窗口";
2026
+ readonly en: "of window";
2027
+ };
2028
+ readonly 'status-detail-session-id': {
2029
+ readonly zh: "会话日志目录与此 id 同名";
2030
+ readonly en: "the session log directory is named after this id";
2031
+ };
1530
2032
  readonly 'hint-ext-dialog-input': {
1531
2033
  readonly zh: "**Enter** 确认 · Esc 取消";
1532
2034
  readonly en: "**Enter** to confirm · Esc to cancel";
@@ -1543,10 +2045,46 @@ declare const dict: {
1543
2045
  readonly zh: "(ctrl+o 展开)";
1544
2046
  readonly en: "(ctrl+o to expand)";
1545
2047
  };
2048
+ readonly 'file-actions-title': {
2049
+ readonly zh: "文件操作";
2050
+ readonly en: "File actions";
2051
+ };
2052
+ readonly 'file-actions-open': {
2053
+ readonly zh: "打开文件";
2054
+ readonly en: "Open file";
2055
+ };
2056
+ readonly 'file-actions-open-dir': {
2057
+ readonly zh: "打开文件夹";
2058
+ readonly en: "Open folder";
2059
+ };
2060
+ readonly 'file-actions-reveal': {
2061
+ readonly zh: "打开所在文件夹";
2062
+ readonly en: "Reveal in folder";
2063
+ };
2064
+ readonly 'file-actions-copy': {
2065
+ readonly zh: "复制绝对路径";
2066
+ readonly en: "Copy absolute path";
2067
+ };
1546
2068
  readonly 'picker-title-model': {
1547
2069
  readonly zh: "模型";
1548
2070
  readonly en: "Model";
1549
2071
  };
2072
+ readonly 'picker-group-recent': {
2073
+ readonly zh: "最近使用";
2074
+ readonly en: "Recently used";
2075
+ };
2076
+ readonly 'picker-group-count': {
2077
+ readonly zh: "{{count}} 个模型";
2078
+ readonly en: "{{count}} models";
2079
+ };
2080
+ readonly 'hint-model-groups': {
2081
+ readonly zh: "**Enter** 查看模型 · Esc 退出";
2082
+ readonly en: "**Enter** to view models · Esc to exit";
2083
+ };
2084
+ readonly 'hint-model-back': {
2085
+ readonly zh: "**Enter** 切换模型 · Esc/⌫ 返回上级";
2086
+ readonly en: "**Enter** to switch · Esc/⌫ to go back";
2087
+ };
1550
2088
  readonly 'picker-title-skills': {
1551
2089
  readonly zh: "技能";
1552
2090
  readonly en: "Skills";
@@ -1567,6 +2105,14 @@ declare const dict: {
1567
2105
  readonly zh: "技能列表加载失败";
1568
2106
  readonly en: "Failed to load the skill list";
1569
2107
  };
2108
+ readonly 'skills-unknown': {
2109
+ readonly zh: "未知技能「{{name}}」";
2110
+ readonly en: "Unknown skill \"{{name}}\"";
2111
+ };
2112
+ readonly 'skills-not-invocable': {
2113
+ readonly zh: "技能「{{name}}」不可直接调用";
2114
+ readonly en: "Skill \"{{name}}\" is not directly invocable";
2115
+ };
1570
2116
  readonly 'plugin-scene-crashed': {
1571
2117
  readonly zh: "插件场景「{{id}}」渲染崩溃:{{err}}(已自动关闭)";
1572
2118
  readonly en: "Plugin scene \"{{id}}\" crashed while rendering: {{err}} (closed)";
@@ -1599,6 +2145,10 @@ declare const dict: {
1599
2145
  readonly zh: "指示器预设";
1600
2146
  readonly en: "Indicator preset";
1601
2147
  };
2148
+ readonly 'picker-title-color': {
2149
+ readonly zh: "会话强调色";
2150
+ readonly en: "Session accent color";
2151
+ };
1602
2152
  readonly 'picker-title-effort': {
1603
2153
  readonly zh: "推理强度";
1604
2154
  readonly en: "Reasoning effort";
@@ -1691,10 +2241,6 @@ declare const dict: {
1691
2241
  readonly zh: "命令 \"/{{name}}\" 的调用已被拒绝——注册它的插件 \"{{owner}}\" 已被撤销 commands.invoke";
1692
2242
  readonly en: "Command \"/{{name}}\" invocation denied — its owner plugin \"{{owner}}\" lost commands.invoke";
1693
2243
  };
1694
- readonly 'plugins-check-tui-extension': {
1695
- readonly zh: "注:该 manifest 依赖 TUI 宿主扩展面(tui.dsh/v1alpha1 DecisionEvents / session.*.intercept 权限),判定基于宿主扩展覆盖层而非 vendored 社区注册表。";
1696
- readonly en: "Note: this manifest relies on the TUI host-extension surface (tui.dsh/v1alpha1 DecisionEvents / session.*.intercept permissions); the verdict used the host extension overlay, not the vendored community registry.";
1697
- };
1698
2244
  readonly 'plugins-trust-banner': {
1699
2245
  readonly zh: "插件与宿主同进程运行:授权是行为约束而非安全隔离;通过校验 ≠ 插件安全(C-070)。";
1700
2246
  readonly en: "Plugins run in-process with the host: grants are behavioral constraints, not a security boundary; passing validation ≠ a safe plugin (C-070).";
@@ -1721,7 +2267,10 @@ declare const dict: {
1721
2267
  };
1722
2268
  readonly 'plugins-footprint-overflow': {
1723
2269
  readonly zh: "…另有 {{count}} 个插件未显示";
1724
- readonly en: "…{{count}} more plugin(s) not shown";
2270
+ readonly en: {
2271
+ readonly one: "…{{count}} more plugin not shown";
2272
+ readonly other: "…{{count}} more plugins not shown";
2273
+ };
1725
2274
  };
1726
2275
  readonly 'plugins-ledger-empty': {
1727
2276
  readonly zh: "效果台账为空。";
@@ -1864,12 +2413,16 @@ declare const dict: {
1864
2413
  readonly en: "Summary folded";
1865
2414
  };
1866
2415
  readonly 'new-message': {
1867
- readonly zh: "{{n}} 条新消息";
1868
- readonly en: "1 new message";
2416
+ readonly zh: "↓ {{n}} 条新消息";
2417
+ readonly en: "↓ 1 new message";
1869
2418
  };
1870
2419
  readonly 'new-messages': {
1871
- readonly zh: "{{n}} 条新消息";
1872
- readonly en: "{{n}} new messages";
2420
+ readonly zh: "↓ {{n}} 条新消息";
2421
+ readonly en: "↓ {{n}} new messages";
2422
+ };
2423
+ readonly 'back-to-bottom': {
2424
+ readonly zh: "↓ 回到底部(Enter/End)";
2425
+ readonly en: "↓ back to bottom (Enter/End)";
1873
2426
  };
1874
2427
  readonly 'theme-builtin-base': {
1875
2428
  readonly zh: "内置 · {{name}} 基底";
@@ -1943,6 +2496,14 @@ declare const dict: {
1943
2496
  readonly zh: "Esc 中断";
1944
2497
  readonly en: "Esc cancel";
1945
2498
  };
2499
+ readonly 'question-hint-previous': {
2500
+ readonly zh: "Esc 上一题";
2501
+ readonly en: "Esc previous question";
2502
+ };
2503
+ readonly 'question-hint-cancel': {
2504
+ readonly zh: "Ctrl+C 取消整批";
2505
+ readonly en: "Ctrl+C cancel batch";
2506
+ };
1946
2507
  readonly 'question-hint-selected': {
1947
2508
  readonly zh: "已选 {{n}}";
1948
2509
  readonly en: "Selected {{n}}";
@@ -2019,10 +2580,6 @@ declare const dict: {
2019
2580
  readonly zh: "失败";
2020
2581
  readonly en: "failed";
2021
2582
  };
2022
- readonly 'subagent-running-label': {
2023
- readonly zh: "运行中";
2024
- readonly en: "Running";
2025
- };
2026
2583
  readonly 'subagent-started': {
2027
2584
  readonly zh: "开始时间";
2028
2585
  readonly en: "Started";
@@ -2031,10 +2588,6 @@ declare const dict: {
2031
2588
  readonly zh: "完成时间";
2032
2589
  readonly en: "Completed";
2033
2590
  };
2034
- readonly 'subagent-id': {
2035
- readonly zh: "ID";
2036
- readonly en: "ID";
2037
- };
2038
2591
  readonly 'subagent-error-label': {
2039
2592
  readonly zh: "错误";
2040
2593
  readonly en: "Error";
@@ -2059,14 +2612,6 @@ declare const dict: {
2059
2612
  readonly zh: "↑/↓ 选择 · Enter 查看详情 · Esc 关闭";
2060
2613
  readonly en: "↑/↓ select · Enter view detail · Esc close";
2061
2614
  };
2062
- readonly 'subagent-detail-hint-basic': {
2063
- readonly zh: "↑/↓ 滚动 · Enter/Esc 返回";
2064
- readonly en: "↑/↓ scroll · Enter/Esc back";
2065
- };
2066
- readonly 'subagent-detail-hint-enhanced': {
2067
- readonly zh: "↑/↓ 滚动 · X 中断 · Esc 返回";
2068
- readonly en: "↑/↓ scroll · X interrupt · Esc back";
2069
- };
2070
2615
  readonly 'subagent-card-prefix': {
2071
2616
  readonly zh: "子代理:";
2072
2617
  readonly en: "Subagent: ";
@@ -2303,6 +2848,78 @@ declare const dict: {
2303
2848
  readonly zh: "保持当前模型";
2304
2849
  readonly en: "Keep the current model";
2305
2850
  };
2851
+ readonly 'provider-opt-oauth': {
2852
+ readonly zh: "订阅账号登录(OAuth)";
2853
+ readonly en: "Subscription sign-in (OAuth)";
2854
+ };
2855
+ readonly 'provider-opt-oauth-desc': {
2856
+ readonly zh: "用 ChatGPT / Claude / Grok 等官方订阅账号登录,无需 API key";
2857
+ readonly en: "Sign in with an official subscription (ChatGPT / Claude / Grok) — no API key";
2858
+ };
2859
+ readonly 'provider-q-oauth': {
2860
+ readonly zh: "登录哪个订阅账号?";
2861
+ readonly en: "Sign in to which subscription?";
2862
+ };
2863
+ readonly 'provider-oauth-state-in': {
2864
+ readonly zh: "已登录 · 令牌到期 {{time}}";
2865
+ readonly en: "Signed in · token expires {{time}}";
2866
+ };
2867
+ readonly 'provider-oauth-state-expired': {
2868
+ readonly zh: "已登录但令牌已过期,重新登录即可恢复";
2869
+ readonly en: "Signed in but the token expired — sign in again to restore";
2870
+ };
2871
+ readonly 'provider-q-oauth-signed': {
2872
+ readonly zh: "{{provider}} 已登录,接下来?";
2873
+ readonly en: "{{provider}} is signed in — what next?";
2874
+ };
2875
+ readonly 'provider-opt-oauth-relogin': {
2876
+ readonly zh: "重新登录";
2877
+ readonly en: "Sign in again";
2878
+ };
2879
+ readonly 'provider-opt-oauth-relogin-desc': {
2880
+ readonly zh: "更换账号或刷新已有凭据";
2881
+ readonly en: "Switch accounts or refresh the stored credential";
2882
+ };
2883
+ readonly 'provider-opt-oauth-logout': {
2884
+ readonly zh: "登出";
2885
+ readonly en: "Sign out";
2886
+ };
2887
+ readonly 'provider-opt-oauth-logout-desc': {
2888
+ readonly zh: "删除本地保存的 OAuth 凭据";
2889
+ readonly en: "Remove the locally stored OAuth credential";
2890
+ };
2891
+ readonly 'provider-oauth-none': {
2892
+ readonly zh: "没有可 OAuth 登录的 provider(检查 dsh-auth 插件是否挂载)";
2893
+ readonly en: "No OAuth-capable providers (check whether the dsh-auth plugin is mounted)";
2894
+ };
2895
+ readonly 'provider-oauth-login-ok': {
2896
+ readonly zh: "{{provider}} 登录成功";
2897
+ readonly en: "Signed in to {{provider}}";
2898
+ };
2899
+ readonly 'provider-oauth-login-failed': {
2900
+ readonly zh: "OAuth 登录失败 · {{{err}}}";
2901
+ readonly en: "OAuth sign-in failed · {{{err}}}";
2902
+ };
2903
+ readonly 'provider-oauth-logout-ok': {
2904
+ readonly zh: "{{provider}} 已登出";
2905
+ readonly en: "Signed out of {{provider}}";
2906
+ };
2907
+ readonly 'provider-line-oauth-provider': {
2908
+ readonly zh: "路由:{{provider}}";
2909
+ readonly en: "Route: {{provider}}";
2910
+ };
2911
+ readonly 'provider-line-oauth-flow': {
2912
+ readonly zh: "登录方式:{{flow}}";
2913
+ readonly en: "Sign-in: {{flow}}";
2914
+ };
2915
+ readonly 'provider-line-oauth-expires': {
2916
+ readonly zh: "令牌到期:{{time}}";
2917
+ readonly en: "Token expires: {{time}}";
2918
+ };
2919
+ readonly 'provider-line-oauth-out': {
2920
+ readonly zh: "已登出,本地 OAuth 凭据已删除";
2921
+ readonly en: "Signed out — the stored OAuth credential was removed";
2922
+ };
2306
2923
  readonly 'cmd-desc-new': {
2307
2924
  readonly zh: "新开会话";
2308
2925
  };
@@ -2318,6 +2935,9 @@ declare const dict: {
2318
2935
  readonly 'cmd-desc-rename': {
2319
2936
  readonly zh: "重命名当前会话";
2320
2937
  };
2938
+ readonly 'cmd-desc-recap': {
2939
+ readonly zh: "生成最近会话活动摘要(可应用建议标题)";
2940
+ };
2321
2941
  readonly 'cmd-desc-quit': {
2322
2942
  readonly zh: "退出 dsh-tui";
2323
2943
  };
@@ -2327,6 +2947,12 @@ declare const dict: {
2327
2947
  readonly 'cmd-desc-rewind': {
2328
2948
  readonly zh: "回退会话到历史消息";
2329
2949
  };
2950
+ readonly 'cmd-desc-tree': {
2951
+ readonly zh: "浏览会话分叉树(回退/分叉/切分支)";
2952
+ };
2953
+ readonly 'cmd-desc-fork': {
2954
+ readonly zh: "把当前会话分叉为可恢复副本";
2955
+ };
2330
2956
  readonly 'cmd-desc-export': {
2331
2957
  readonly zh: "导出会话为 Markdown 文件";
2332
2958
  };
@@ -2342,6 +2968,9 @@ declare const dict: {
2342
2968
  readonly 'cmd-desc-config': {
2343
2969
  readonly zh: "查看 dsh-tui 配置来源";
2344
2970
  };
2971
+ readonly 'cmd-desc-reload': {
2972
+ readonly zh: "重读偏好文件并立即生效";
2973
+ };
2345
2974
  readonly 'cmd-desc-settings': {
2346
2975
  readonly zh: "查看和编辑插件设置";
2347
2976
  };
@@ -2363,6 +2992,9 @@ declare const dict: {
2363
2992
  readonly 'cmd-desc-theme': {
2364
2993
  readonly zh: "切换配色主题(auto 跟随系统,或内置/自定义)";
2365
2994
  };
2995
+ readonly 'cmd-desc-color': {
2996
+ readonly zh: "设置当前会话强调色(输入框边框与会话标签)";
2997
+ };
2366
2998
  readonly 'cmd-desc-lang': {
2367
2999
  readonly zh: "切换界面语言(en / zh)";
2368
3000
  };
@@ -2384,9 +3016,6 @@ declare const dict: {
2384
3016
  readonly 'cmd-desc-logout': {
2385
3017
  readonly zh: "清除 API 凭证";
2386
3018
  };
2387
- readonly 'cmd-desc-permissions': {
2388
- readonly zh: "查看权限策略状态";
2389
- };
2390
3019
  readonly 'cmd-desc-add-dir': {
2391
3020
  readonly zh: "查看文件系统策略范围";
2392
3021
  };
@@ -2453,6 +3082,9 @@ declare const dict: {
2453
3082
  readonly 'cmd-desc-help': {
2454
3083
  readonly zh: "查看快捷键与命令";
2455
3084
  };
3085
+ readonly 'cmd-desc-restart': {
3086
+ readonly zh: "重启 dsh-tui 并恢复当前会话";
3087
+ };
2456
3088
  readonly 'cmd-desc-exit': {
2457
3089
  readonly zh: "退出 dsh-tui";
2458
3090
  };
@@ -2489,6 +3121,18 @@ declare const dict: {
2489
3121
  readonly zh: "语言「{{lang}}」切换失败(无法写入 ~/.dsh-tui/lang.json)";
2490
3122
  readonly en: "Language \"{{lang}}\" switch failed (cannot write ~/.dsh-tui/lang.json)";
2491
3123
  };
3124
+ readonly 'lang-picker-title': {
3125
+ readonly zh: "界面语言";
3126
+ readonly en: "UI language";
3127
+ };
3128
+ readonly 'lang-zh-desc': {
3129
+ readonly zh: "简体中文(默认)";
3130
+ readonly en: "Simplified Chinese (default)";
3131
+ };
3132
+ readonly 'lang-en-desc': {
3133
+ readonly zh: "English(英文)";
3134
+ readonly en: "English";
3135
+ };
2492
3136
  readonly 'status-cache-label': {
2493
3137
  readonly zh: "缓存 ";
2494
3138
  readonly en: "cache ";
@@ -2573,74 +3217,10 @@ declare const dict: {
2573
3217
  readonly zh: "**j/k** 翻页 · **enter/esc** 收起 · **q** 退出";
2574
3218
  readonly en: "**j/k** page · **enter/esc** collapse · **q** exit";
2575
3219
  };
2576
- readonly 'traj-empty': {
2577
- readonly zh: "暂无轨迹事件";
2578
- readonly en: "No trajectory events yet";
2579
- };
2580
3220
  readonly 'traj-hint-failure': {
2581
3221
  readonly zh: "{{key}} 看完整轨迹";
2582
3222
  readonly en: "{{key}} for the full trajectory";
2583
3223
  };
2584
- readonly 'subagent.unnamed': {
2585
- readonly zh: "未命名子代理";
2586
- readonly en: "Unnamed subagent";
2587
- };
2588
- readonly 'subagent.no-model': {
2589
- readonly zh: "未知模型";
2590
- readonly en: "Unknown model";
2591
- };
2592
- readonly 'subagent.status.running': {
2593
- readonly zh: "运行中";
2594
- readonly en: "Running";
2595
- };
2596
- readonly 'subagent.status.completed': {
2597
- readonly zh: "已完成";
2598
- readonly en: "Completed";
2599
- };
2600
- readonly 'subagent.status.failed': {
2601
- readonly zh: "失败";
2602
- readonly en: "Failed";
2603
- };
2604
- readonly 'subagent.status.pending': {
2605
- readonly zh: "等待中";
2606
- readonly en: "Pending";
2607
- };
2608
- readonly 'subagent.dashboard.title': {
2609
- readonly zh: "子代理面板";
2610
- readonly en: "Subagent Dashboard";
2611
- };
2612
- readonly 'subagent.dashboard.stats': {
2613
- readonly zh: "运行中: {{running}} · 已完成: {{completed}} · 失败: {{failed}}";
2614
- readonly en: "Running: {{running}} · Completed: {{completed}} · Failed: {{failed}}";
2615
- };
2616
- readonly 'subagent.dashboard.empty': {
2617
- readonly zh: "暂无子代理";
2618
- readonly en: "No subagents yet";
2619
- };
2620
- readonly 'subagent.dashboard.help': {
2621
- readonly zh: "↑↓ 选择 · Enter 查看详情 · Esc 返回";
2622
- readonly en: "↑↓ select · Enter view details · Esc back";
2623
- };
2624
- readonly 'subagent.detail.not-found': {
2625
- readonly zh: "子代理未找到";
2626
- readonly en: "Subagent not found";
2627
- };
2628
- readonly 'subagent.detail.press-esc': {
2629
- readonly zh: "按 Esc 返回";
2630
- readonly en: "Press Esc to go back";
2631
- };
2632
- readonly 'subagent.detail.output': {
2633
- readonly zh: "输出";
2634
- readonly en: "Output";
2635
- };
2636
- readonly 'subagent.detail.no-output': {
2637
- readonly zh: "暂无输出";
2638
- readonly en: "No output yet";
2639
- };
2640
- readonly 'subagent.detail.help': {
2641
- readonly zh: "Esc 返回面板";
2642
- readonly en: "Esc back to dashboard";
2643
- };
2644
3224
  };
2645
3225
  export type I18nKey = keyof typeof dict;
2646
3226
  export type I18nParams = Record<string, string | number>;
@@ -2673,6 +3253,11 @@ export declare function t(key: I18nKey, params?: I18nParams): string;
2673
3253
  * @param params - Placeholder values substituted into whichever text wins.
2674
3254
  */
2675
3255
  export declare function tOr(key: string, fallback: string, params?: I18nParams): string;
3256
+ /** Read-only view of the dictionary for audits (scripts/verify-i18n.ts). */
3257
+ export declare const i18nDict: Readonly<Record<string, {
3258
+ readonly zh?: I18nText;
3259
+ readonly en?: I18nText;
3260
+ }>>;
2676
3261
  /**
2677
3262
  * Parse a persisted `{ lang }` value; anything else yields undefined.
2678
3263
  * @param text - Raw file contents.
@@ -2684,12 +3269,16 @@ export declare function readLangPref(dir?: string): Lang | undefined;
2684
3269
  export declare function writeLangPref(lang: Lang, dir?: string): boolean;
2685
3270
  /**
2686
3271
  * Guess the user's language from the OS locale (`LC_ALL`, `LC_MESSAGES`,
2687
- * `LANG`), defaulting to `zh`. Only consulted when nothing else (env var,
2688
- * cordis.yml `lang`, persisted `/lang` choice) pinned a language.
2689
- * The POSIX/C locale means "no locale selected" and conventionally maps to
2690
- * English — importantly it is what CI runners (LANG=C.UTF-8) report, so
2691
- * tests asserting English UI copy stay deterministic. An absent locale
2692
- * variable (typical on Windows) still defaults to `zh`.
3272
+ * `LANG`). Only consulted when nothing else (env var, cordis.yml `lang`,
3273
+ * persisted `/lang` choice) pinned a language. `zh*` maps to zh; every
3274
+ * other stated locale (en, but also fr/de/ja/…) maps to en — English is
3275
+ * the lingua-franca fallback for a locale we don't ship, and a German
3276
+ * user must not get a Chinese UI. The POSIX/C locale means "no locale
3277
+ * selected" and conventionally maps to English — importantly it is what
3278
+ * CI runners (LANG=C.UTF-8) report, so tests asserting English UI copy
3279
+ * stay deterministic. Only an ABSENT locale (typical on Windows, where
3280
+ * these POSIX vars don't exist and imply nothing about the user) keeps
3281
+ * the zh default.
2693
3282
  */
2694
3283
  export declare function detectLocaleLang(): Lang;
2695
3284
  /**