@deepseek-harness-tui/dsh-tui 0.9.0 → 0.9.2

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 (307) hide show
  1. package/README.md +69 -256
  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 +6 -0
  26. package/lib/types/components/AutoRecapRow.d.ts +23 -0
  27. package/lib/types/components/AutoRecapRow.d.ts.map +1 -0
  28. package/lib/types/components/AutoRecapRow.js +23 -0
  29. package/lib/types/components/ColorPicker.d.ts +17 -0
  30. package/lib/types/components/ColorPicker.d.ts.map +1 -0
  31. package/lib/types/components/ColorPicker.js +20 -0
  32. package/lib/types/components/CommandSuggestions.d.ts +3 -1
  33. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  34. package/lib/types/components/ContextBarView.d.ts +33 -0
  35. package/lib/types/components/ContextBarView.d.ts.map +1 -0
  36. package/lib/types/components/ContextBarView.js +46 -0
  37. package/lib/types/components/EffortInputBorder.d.ts +12 -1
  38. package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
  39. package/lib/types/components/EffortInputBorder.js +22 -5
  40. package/lib/types/components/FileActionsPanel.d.ts +22 -0
  41. package/lib/types/components/FileActionsPanel.d.ts.map +1 -0
  42. package/lib/types/components/FileActionsPanel.js +28 -0
  43. package/lib/types/components/FileSuggestions.d.ts +3 -1
  44. package/lib/types/components/FileSuggestions.d.ts.map +1 -1
  45. package/lib/types/components/MessageList.d.ts +3 -1
  46. package/lib/types/components/MessageList.d.ts.map +1 -1
  47. package/lib/types/components/MessageList.js +13 -6
  48. package/lib/types/components/ModelPicker.d.ts +26 -4
  49. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  50. package/lib/types/components/ModelPicker.js +26 -6
  51. package/lib/types/components/PromptInput.d.ts.map +1 -1
  52. package/lib/types/components/PromptInput.js +365 -57
  53. package/lib/types/components/RecapPanel.d.ts +25 -0
  54. package/lib/types/components/RecapPanel.d.ts.map +1 -0
  55. package/lib/types/components/RecapPanel.js +55 -0
  56. package/lib/types/components/ScrollbarGutter.d.ts.map +1 -1
  57. package/lib/types/components/ScrollbarGutter.js +55 -4
  58. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  59. package/lib/types/components/SubagentCard.js +6 -4
  60. package/lib/types/components/SuggestionCard.d.ts +4 -2
  61. package/lib/types/components/SuggestionCard.d.ts.map +1 -1
  62. package/lib/types/components/TimelineRail.d.ts.map +1 -1
  63. package/lib/types/components/TimelineRail.js +9 -2
  64. package/lib/types/components/design-system/ThemeProvider.d.ts +7 -0
  65. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  66. package/lib/types/components/design-system/ThemeProvider.js +2 -1
  67. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +8 -1
  68. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  69. package/lib/types/components/messages/AssistantToolUseMessage.js +36 -8
  70. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +7 -3
  71. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  72. package/lib/types/components/questions/AskUserQuestionPanel.js +41 -9
  73. package/lib/types/dsh-adapter/channel.d.ts +101 -2
  74. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  75. package/lib/types/dsh-adapter/channel.js +969 -93
  76. package/lib/types/dsh-adapter/compat/index.d.ts +8 -6
  77. package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
  78. package/lib/types/dsh-adapter/compat/index.js +8 -6
  79. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +150 -0
  80. package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
  81. package/lib/types/dsh-adapter/compat/sessionLog.js +518 -41
  82. package/lib/types/dsh-adapter/contract.d.ts +1 -1
  83. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  84. package/lib/types/dsh-adapter/contract.js +1 -0
  85. package/lib/types/dsh-adapter/extension-events.d.ts +1 -1
  86. package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
  87. package/lib/types/dsh-adapter/index.d.ts +10 -0
  88. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  89. package/lib/types/dsh-adapter/index.js +5 -0
  90. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  91. package/lib/types/dsh-adapter/plugin.js +317 -8
  92. package/lib/types/dsh-adapter/presets.d.ts +18 -0
  93. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  94. package/lib/types/dsh-adapter/presets.js +31 -0
  95. package/lib/types/dsh-adapter/providerWizard.d.ts +29 -1
  96. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  97. package/lib/types/dsh-adapter/providerWizard.js +89 -5
  98. package/lib/types/dsh-adapter/questions.d.ts +19 -2
  99. package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
  100. package/lib/types/dsh-adapter/questions.js +53 -10
  101. package/lib/types/dsh-adapter/recap.d.ts +49 -0
  102. package/lib/types/dsh-adapter/recap.d.ts.map +1 -0
  103. package/lib/types/dsh-adapter/recap.js +121 -0
  104. package/lib/types/dsh-adapter/sessionTree.d.ts +314 -0
  105. package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -0
  106. package/lib/types/dsh-adapter/sessionTree.js +954 -0
  107. package/lib/types/dsh-adapter/shortcuts.d.ts +15 -44
  108. package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
  109. package/lib/types/dsh-adapter/shortcuts.js +28 -165
  110. package/lib/types/dsh-adapter/types.d.ts +1 -1
  111. package/lib/types/dsh-adapter/types.d.ts.map +1 -1
  112. package/lib/types/herdr.js +1 -1
  113. package/lib/types/i18n.d.ts +604 -176
  114. package/lib/types/i18n.d.ts.map +1 -1
  115. package/lib/types/i18n.js +206 -72
  116. package/lib/types/ink/log-update.d.ts.map +1 -1
  117. package/lib/types/ink/log-update.js +21 -0
  118. package/lib/types/migrationPrefs.d.ts +60 -0
  119. package/lib/types/migrationPrefs.d.ts.map +1 -0
  120. package/lib/types/migrationPrefs.js +97 -0
  121. package/lib/types/modelGroups.d.ts +72 -0
  122. package/lib/types/modelGroups.d.ts.map +1 -0
  123. package/lib/types/modelGroups.js +97 -0
  124. package/lib/types/modelRecents.d.ts +39 -0
  125. package/lib/types/modelRecents.d.ts.map +1 -0
  126. package/lib/types/modelRecents.js +97 -0
  127. package/lib/types/native-ts/yoga-layout/index.d.ts +11 -0
  128. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
  129. package/lib/types/native-ts/yoga-layout/index.js +31 -1
  130. package/lib/types/oauth.d.ts +15 -0
  131. package/lib/types/oauth.d.ts.map +1 -0
  132. package/lib/types/oauth.js +14 -0
  133. package/lib/types/plugin-spec/registry.d.ts +1 -1
  134. package/lib/types/plugin-spec/registry.js +1 -1
  135. package/lib/types/reload.d.ts +109 -0
  136. package/lib/types/reload.d.ts.map +1 -0
  137. package/lib/types/reload.js +118 -0
  138. package/lib/types/screens/Chat.d.ts +3 -1
  139. package/lib/types/screens/Chat.d.ts.map +1 -1
  140. package/lib/types/screens/Chat.js +588 -64
  141. package/lib/types/screens/SessionTree.d.ts +27 -0
  142. package/lib/types/screens/SessionTree.d.ts.map +1 -0
  143. package/lib/types/screens/SessionTree.js +555 -0
  144. package/lib/types/screens/StatusLine.d.ts +0 -9
  145. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  146. package/lib/types/screens/StatusLine.js +215 -52
  147. package/lib/types/screens/StatusMetrics.d.ts +35 -3
  148. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  149. package/lib/types/screens/StatusMetrics.js +63 -8
  150. package/lib/types/screens/chatOverlay.d.ts +17 -1
  151. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  152. package/lib/types/screens/chatOverlay.js +3 -1
  153. package/lib/types/tips.d.ts.map +1 -1
  154. package/lib/types/tips.js +22 -4
  155. package/lib/types/update.d.ts +159 -0
  156. package/lib/types/update.d.ts.map +1 -1
  157. package/lib/types/update.js +496 -30
  158. package/lib/types/utils/debug.d.ts +1 -1
  159. package/lib/types/utils/debug.js +3 -3
  160. package/lib/types/utils/fileTarget.d.ts +46 -0
  161. package/lib/types/utils/fileTarget.d.ts.map +1 -0
  162. package/lib/types/utils/fileTarget.js +178 -0
  163. package/lib/types/utils/keymap.d.ts +134 -0
  164. package/lib/types/utils/keymap.d.ts.map +1 -0
  165. package/lib/types/utils/keymap.js +311 -0
  166. package/lib/types/utils/mentions.d.ts +25 -2
  167. package/lib/types/utils/mentions.d.ts.map +1 -1
  168. package/lib/types/utils/mentions.js +69 -10
  169. package/lib/types/utils/openExternal.d.ts +50 -0
  170. package/lib/types/utils/openExternal.d.ts.map +1 -0
  171. package/lib/types/utils/openExternal.js +170 -0
  172. package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +21 -0
  173. package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +140 -0
  174. package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +11 -0
  175. package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +44 -0
  176. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.d.ts +14 -0
  177. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.js +67 -0
  178. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.d.ts +64 -0
  179. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.js +170 -0
  180. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.d.ts +79 -0
  181. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.js +196 -0
  182. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.d.ts +68 -0
  183. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +193 -0
  184. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.d.ts +32 -0
  185. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.js +101 -0
  186. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.d.ts +31 -0
  187. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.js +68 -0
  188. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.d.ts +69 -0
  189. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.js +129 -0
  190. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +70 -0
  191. package/node_modules/@dsh-std/command/CHANGELOG.md +8 -8
  192. package/node_modules/@dsh-std/command/LICENSE +21 -21
  193. package/node_modules/@dsh-std/command/README.md +26 -26
  194. package/node_modules/@dsh-std/command/README.zh.md +28 -28
  195. package/node_modules/@dsh-std/command/lib/index.js.map +1 -1
  196. package/node_modules/@dsh-std/command/package.json +22 -22
  197. package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  198. package/node_modules/@dsh-std/connection/LICENSE +21 -21
  199. package/node_modules/@dsh-std/connection/README.md +42 -42
  200. package/node_modules/@dsh-std/connection/README.zh.md +42 -42
  201. package/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  202. package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  203. package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  204. package/node_modules/@dsh-std/connection/package.json +20 -20
  205. package/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  206. package/node_modules/@dsh-std/core/LICENSE +21 -21
  207. package/node_modules/@dsh-std/core/README.md +13 -13
  208. package/node_modules/@dsh-std/core/README.zh.md +13 -13
  209. package/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  210. package/node_modules/@dsh-std/core/package.json +21 -21
  211. package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  212. package/node_modules/@dsh-std/manifest/LICENSE +21 -21
  213. package/node_modules/@dsh-std/manifest/README.md +5 -5
  214. package/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  215. package/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  216. package/node_modules/@dsh-std/manifest/package.json +20 -20
  217. package/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  218. package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -8
  219. package/node_modules/@dsh-std/messages/LICENSE +21 -21
  220. package/node_modules/@dsh-std/messages/README.md +5 -5
  221. package/node_modules/@dsh-std/messages/README.zh.md +7 -7
  222. package/node_modules/@dsh-std/messages/lib/index.js.map +1 -1
  223. package/node_modules/@dsh-std/messages/package.json +20 -20
  224. package/node_modules/@dsh-std/messages/schema/message-observer-envelope-0.15.schema.json +54 -54
  225. package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  226. package/node_modules/@dsh-std/presentation/LICENSE +21 -21
  227. package/node_modules/@dsh-std/presentation/README.md +27 -27
  228. package/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  229. package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  230. package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  231. package/node_modules/@dsh-std/presentation/package.json +25 -25
  232. package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -8
  233. package/node_modules/@dsh-std/storage/LICENSE +21 -21
  234. package/node_modules/@dsh-std/storage/README.md +5 -5
  235. package/node_modules/@dsh-std/storage/README.zh.md +7 -7
  236. package/node_modules/@dsh-std/storage/lib/index.js.map +1 -1
  237. package/node_modules/@dsh-std/storage/package.json +20 -20
  238. package/node_modules/@dsh-std/storage/schema/local-storage-0.15.schema.json +56 -56
  239. package/package.json +17 -5
  240. package/presets/liangshen/.dsh-tui-managed.json +1 -1
  241. package/presets/liangshen/instruction-hint.mjs +8 -0
  242. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  243. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/LICENSE +21 -21
  244. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.md +42 -42
  245. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.zh.md +42 -42
  246. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  247. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  248. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  249. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +20 -20
  250. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  251. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/LICENSE +21 -21
  252. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.md +13 -13
  253. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.zh.md +13 -13
  254. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  255. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +21 -21
  256. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  257. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/LICENSE +21 -21
  258. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.md +5 -5
  259. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  260. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  261. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +20 -20
  262. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  263. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  264. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/LICENSE +21 -21
  265. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +27 -27
  266. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  267. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  268. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  269. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +25 -25
  270. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  271. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/LICENSE +21 -21
  272. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.md +13 -13
  273. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.zh.md +13 -13
  274. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  275. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +21 -21
  276. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  277. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/LICENSE +21 -21
  278. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.md +13 -13
  279. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.zh.md +13 -13
  280. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  281. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +21 -21
  282. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  283. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/LICENSE +21 -21
  284. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.md +13 -13
  285. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.zh.md +13 -13
  286. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  287. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +21 -21
  288. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  289. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/LICENSE +21 -21
  290. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.md +42 -42
  291. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.zh.md +42 -42
  292. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  293. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  294. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  295. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +20 -20
  296. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  297. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/LICENSE +21 -21
  298. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.md +13 -13
  299. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.zh.md +13 -13
  300. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  301. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +21 -21
  302. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  303. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/LICENSE +21 -21
  304. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.md +13 -13
  305. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.zh.md +13 -13
  306. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  307. 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";
@@ -403,10 +649,6 @@ declare const dict: {
403
649
  readonly zh: "📋 问卷已答 · {{total}} 题";
404
650
  readonly en: "📋 Questionnaire answered · {{total}} questions";
405
651
  };
406
- readonly 'theme-sakura-name': {
407
- readonly zh: "樱花粉";
408
- readonly en: "Sakura Pink";
409
- };
410
652
  readonly 'context-truncated': {
411
653
  readonly zh: "…(已截断)";
412
654
  readonly en: "… (truncated)";
@@ -479,10 +721,6 @@ declare const dict: {
479
721
  readonly zh: "已复制 {{n}} 个字符";
480
722
  readonly en: "Copied {{n}} characters";
481
723
  };
482
- readonly 'activity-usage-name': {
483
- readonly zh: "/activity frames <名>";
484
- readonly en: "/activity frames <name>";
485
- };
486
724
  readonly 'activity-current-preset': {
487
725
  readonly zh: "当前预设 {{name}}";
488
726
  readonly en: "Current preset {{name}}";
@@ -535,10 +773,6 @@ declare const dict: {
535
773
  readonly zh: "当前组合未挂载 agent-presets 名册(preset 不可用)";
536
774
  readonly en: "The agent-presets roster is not mounted (presets unavailable)";
537
775
  };
538
- readonly 'theme-name-arg': {
539
- readonly zh: "/theme <名字>";
540
- readonly en: "/theme <name>";
541
- };
542
776
  readonly 'theme-current': {
543
777
  readonly zh: "当前主题 {{name}}";
544
778
  readonly en: "Current theme {{name}}";
@@ -620,8 +854,8 @@ declare const dict: {
620
854
  readonly en: "Cannot switch workspaces while the agent is running";
621
855
  };
622
856
  readonly 'workspace-open-invalid': {
623
- readonly zh: "无法打开工作区:{target} 不是存在的目录";
624
- 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";
625
859
  };
626
860
  readonly 'workspace-switched': {
627
861
  readonly zh: "已切换工作区:{{target}}";
@@ -647,10 +881,6 @@ declare const dict: {
647
881
  readonly zh: "正在连接并读取目录… · Esc 关闭";
648
882
  readonly en: "Connecting and loading directories… · Esc to close";
649
883
  };
650
- readonly 'workspace-command-usage': {
651
- readonly zh: "用法:/workspace resume | rename <名称> | open <路径或 URI>{{commands}}";
652
- readonly en: "Usage: /workspace resume | rename <name> | open <path-or-URI>{{commands}}";
653
- };
654
884
  readonly 'workspace-menu-title': {
655
885
  readonly zh: "Workspace 操作";
656
886
  readonly en: "Workspace actions";
@@ -799,6 +1029,30 @@ declare const dict: {
799
1029
  readonly zh: "使用 /provider 管理 DSH 凭据;若来源为 env,请删除对应环境变量并重启 dsh-tui";
800
1030
  readonly en: "Manage DSH credentials with /provider; for env sources, remove the corresponding environment variable and restart dsh-tui";
801
1031
  };
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
+ };
802
1056
  readonly 'permission-policy-hint': {
803
1057
  readonly zh: "DSH 权限策略由 fs-policy / bash-sandbox 配置决定(当前 leaf:workspace 内读写、写入需已读文件)。";
804
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).";
@@ -907,6 +1161,62 @@ declare const dict: {
907
1161
  readonly zh: "镜像 registry 滞后:本次安装 v{{latest}};官方最新 v{{authoritative}},镜像同步后可再 /update。";
908
1162
  readonly en: "Mirror registry lag: installing v{{latest}} now; official latest is v{{authoritative}} — run /update again once the mirror syncs.";
909
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
+ };
910
1220
  readonly 'streaming-folded': {
911
1221
  readonly zh: "…(前 {{count}} 字符流式期间已折叠,落定后完整显示)";
912
1222
  readonly en: "…(first {{count}} chars folded while streaming; full text renders once the turn settles)";
@@ -920,8 +1230,8 @@ declare const dict: {
920
1230
  readonly en: "Recommended: Windows Terminal (≥110 columns, monospace, TrueColor).";
921
1231
  };
922
1232
  readonly 'terminal-paste-hint': {
923
- readonly zh: "{{mod}}V 粘贴文本、文件路径或图片;Ctrl+Shift+V 终端原生粘贴;右键粘贴同样可用。";
924
- 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.";
925
1235
  };
926
1236
  readonly 'connect-none': {
927
1237
  readonly zh: "DSH 暂无远程连接机制(CC 的 /connect 对应能力未适配)。";
@@ -955,6 +1265,82 @@ declare const dict: {
955
1265
  readonly zh: "侧问不可用(llm 服务未挂载)";
956
1266
  readonly en: "Side question unavailable (llm service not mounted)";
957
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
+ };
958
1344
  readonly 'exit-press-again': {
959
1345
  readonly zh: "再次按 Ctrl+C 退出";
960
1346
  readonly en: "Press Ctrl+C again to exit";
@@ -1008,12 +1394,12 @@ declare const dict: {
1008
1394
  readonly en: "dsh-tui update aborted: no dsh profile resolved.";
1009
1395
  };
1010
1396
  readonly 'update-launcher-align-unknown': {
1011
- readonly zh: "Profile 已更新到 v{{version}}。如果你平时使用全局 dsh-tui 命令启动,请同步更新全局启动器:\n npm install -g @deepseek-harness-tui/dsh-tui@{{version}}";
1012
- 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.)";
1013
1399
  };
1014
1400
  readonly 'update-launcher-outdated': {
1015
- readonly zh: "Profile 已更新到 v{{profile}},但全局启动器仍是 v{{launcher}}。请同步更新:\n npm install -g @deepseek-harness-tui/dsh-tui@{{profile}}";
1016
- 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.)";
1017
1403
  };
1018
1404
  readonly 'activity-ctx-warn': {
1019
1405
  readonly zh: "⚠ 上下文";
@@ -1159,10 +1545,6 @@ declare const dict: {
1159
1545
  readonly zh: "无法读取剪贴板:没有可用的 wl-paste / xclip / xsel(未安装或会话不可连接)";
1160
1546
  readonly en: "Cannot read clipboard: no usable wl-paste / xclip / xsel (not installed or session unreachable)";
1161
1547
  };
1162
- readonly 'input-clipboard-image-saved': {
1163
- readonly zh: "剪贴板图片已保存为临时文件,已插入路径";
1164
- readonly en: "Clipboard image saved to a temp file; path inserted";
1165
- };
1166
1548
  readonly 'input-image-pasted': {
1167
1549
  readonly zh: "已粘贴图片 {{token}}";
1168
1550
  readonly en: "Pasted image {{token}}";
@@ -1183,53 +1565,17 @@ declare const dict: {
1183
1565
  readonly zh: "撤回 · Esc 打断并立即发送";
1184
1566
  readonly en: "Retract · Esc interrupts and sends immediately";
1185
1567
  };
1186
- readonly 'frame-blink': {
1187
- readonly zh: "眨眼";
1188
- readonly en: "blink";
1189
- };
1190
- readonly 'frame-fin-1': {
1191
- readonly zh: "动腹鳍1";
1192
- readonly en: "fin1";
1193
- };
1194
- readonly 'frame-fin-2': {
1195
- readonly zh: "动腹鳍2";
1196
- readonly en: "fin2";
1197
- };
1198
- readonly 'frame-spout-1': {
1199
- readonly zh: "喷水花1";
1200
- readonly en: "spout1";
1201
- };
1202
- readonly 'frame-spout-2': {
1203
- readonly zh: "喷水花2";
1204
- readonly en: "spout2";
1205
- };
1206
- readonly 'frame-spout-3': {
1207
- readonly zh: "喷水花3";
1208
- readonly en: "spout3";
1209
- };
1210
- readonly 'frame-spout-4': {
1211
- readonly zh: "喷水花4";
1212
- readonly en: "spout4";
1213
- };
1214
- readonly 'frame-spout-5': {
1215
- readonly zh: "喷水花5";
1216
- readonly en: "spout5";
1217
- };
1218
- readonly 'frame-spout-6': {
1219
- readonly zh: "喷水花6";
1220
- readonly en: "spout6";
1221
- };
1222
- readonly 'frame-tail-1': {
1223
- readonly zh: "摆尾巴1";
1224
- readonly en: "tail1";
1568
+ readonly 'input-fold-stats': {
1569
+ readonly zh: "{{lines}} 行 · {{chars}} 字";
1570
+ readonly en: "{{lines}} lines · {{chars}} chars";
1225
1571
  };
1226
- readonly 'frame-tail-2': {
1227
- readonly zh: "摆尾巴2";
1228
- readonly en: "tail2";
1572
+ readonly 'input-fold-hover': {
1573
+ readonly zh: "悬停查看";
1574
+ readonly en: "hover to peek";
1229
1575
  };
1230
- readonly 'frame-tail-3': {
1231
- readonly zh: "摆尾巴3";
1232
- readonly en: "tail3";
1576
+ readonly 'input-fold-peek-footer': {
1577
+ readonly zh: "… 共 {{lines}} 行 · 点击展开编辑";
1578
+ readonly en: "… {{lines}} lines total · click to edit";
1233
1579
  };
1234
1580
  readonly 'sugg-commands-title': {
1235
1581
  readonly zh: "命令";
@@ -1287,10 +1633,22 @@ declare const dict: {
1287
1633
  readonly zh: "动画帧预设";
1288
1634
  readonly en: "Animation frame preset";
1289
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
+ };
1290
1644
  readonly 'settings-fullscreen-restart': {
1291
1645
  readonly zh: "全屏设置已保存,重启 dsh-tui 后生效";
1292
1646
  readonly en: "Fullscreen preference saved — restart dsh-tui to apply";
1293
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";
1651
+ };
1294
1652
  readonly 'help-for-commands': {
1295
1653
  readonly zh: "/ 查看命令";
1296
1654
  readonly en: "/ for commands";
@@ -1639,10 +1997,6 @@ declare const dict: {
1639
1997
  readonly zh: "**Enter** 确认 · Esc 退出";
1640
1998
  readonly en: "**Enter** to confirm · Esc to exit";
1641
1999
  };
1642
- readonly 'hint-confirm-cancel': {
1643
- readonly zh: "**Enter** 确认 · Esc 取消";
1644
- readonly en: "**Enter** to confirm · Esc to cancel";
1645
- };
1646
2000
  readonly 'hint-select-exit': {
1647
2001
  readonly zh: "**Enter** 选择 · Esc 退出";
1648
2002
  readonly en: "**Enter** to select · Esc to exit";
@@ -1667,6 +2021,14 @@ declare const dict: {
1667
2021
  readonly zh: "? 查看快捷键";
1668
2022
  readonly en: "? for shortcuts";
1669
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
+ };
1670
2032
  readonly 'hint-ext-dialog-input': {
1671
2033
  readonly zh: "**Enter** 确认 · Esc 取消";
1672
2034
  readonly en: "**Enter** to confirm · Esc to cancel";
@@ -1683,10 +2045,46 @@ declare const dict: {
1683
2045
  readonly zh: "(ctrl+o 展开)";
1684
2046
  readonly en: "(ctrl+o to expand)";
1685
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
+ };
1686
2068
  readonly 'picker-title-model': {
1687
2069
  readonly zh: "模型";
1688
2070
  readonly en: "Model";
1689
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
+ };
1690
2088
  readonly 'picker-title-skills': {
1691
2089
  readonly zh: "技能";
1692
2090
  readonly en: "Skills";
@@ -1747,6 +2145,10 @@ declare const dict: {
1747
2145
  readonly zh: "指示器预设";
1748
2146
  readonly en: "Indicator preset";
1749
2147
  };
2148
+ readonly 'picker-title-color': {
2149
+ readonly zh: "会话强调色";
2150
+ readonly en: "Session accent color";
2151
+ };
1750
2152
  readonly 'picker-title-effort': {
1751
2153
  readonly zh: "推理强度";
1752
2154
  readonly en: "Reasoning effort";
@@ -1839,10 +2241,6 @@ declare const dict: {
1839
2241
  readonly zh: "命令 \"/{{name}}\" 的调用已被拒绝——注册它的插件 \"{{owner}}\" 已被撤销 commands.invoke";
1840
2242
  readonly en: "Command \"/{{name}}\" invocation denied — its owner plugin \"{{owner}}\" lost commands.invoke";
1841
2243
  };
1842
- readonly 'plugins-check-tui-extension': {
1843
- readonly zh: "注:该 manifest 依赖 TUI 宿主扩展面(tui.dsh/v1alpha1 DecisionEvents / session.*.intercept 权限),判定基于宿主扩展覆盖层而非 vendored 社区注册表。";
1844
- 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.";
1845
- };
1846
2244
  readonly 'plugins-trust-banner': {
1847
2245
  readonly zh: "插件与宿主同进程运行:授权是行为约束而非安全隔离;通过校验 ≠ 插件安全(C-070)。";
1848
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).";
@@ -1869,7 +2267,10 @@ declare const dict: {
1869
2267
  };
1870
2268
  readonly 'plugins-footprint-overflow': {
1871
2269
  readonly zh: "…另有 {{count}} 个插件未显示";
1872
- 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
+ };
1873
2274
  };
1874
2275
  readonly 'plugins-ledger-empty': {
1875
2276
  readonly zh: "效果台账为空。";
@@ -2095,6 +2496,14 @@ declare const dict: {
2095
2496
  readonly zh: "Esc 中断";
2096
2497
  readonly en: "Esc cancel";
2097
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
+ };
2098
2507
  readonly 'question-hint-selected': {
2099
2508
  readonly zh: "已选 {{n}}";
2100
2509
  readonly en: "Selected {{n}}";
@@ -2171,10 +2580,6 @@ declare const dict: {
2171
2580
  readonly zh: "失败";
2172
2581
  readonly en: "failed";
2173
2582
  };
2174
- readonly 'subagent-running-label': {
2175
- readonly zh: "运行中";
2176
- readonly en: "Running";
2177
- };
2178
2583
  readonly 'subagent-started': {
2179
2584
  readonly zh: "开始时间";
2180
2585
  readonly en: "Started";
@@ -2183,10 +2588,6 @@ declare const dict: {
2183
2588
  readonly zh: "完成时间";
2184
2589
  readonly en: "Completed";
2185
2590
  };
2186
- readonly 'subagent-id': {
2187
- readonly zh: "ID";
2188
- readonly en: "ID";
2189
- };
2190
2591
  readonly 'subagent-error-label': {
2191
2592
  readonly zh: "错误";
2192
2593
  readonly en: "Error";
@@ -2211,14 +2612,6 @@ declare const dict: {
2211
2612
  readonly zh: "↑/↓ 选择 · Enter 查看详情 · Esc 关闭";
2212
2613
  readonly en: "↑/↓ select · Enter view detail · Esc close";
2213
2614
  };
2214
- readonly 'subagent-detail-hint-basic': {
2215
- readonly zh: "↑/↓ 滚动 · Enter/Esc 返回";
2216
- readonly en: "↑/↓ scroll · Enter/Esc back";
2217
- };
2218
- readonly 'subagent-detail-hint-enhanced': {
2219
- readonly zh: "↑/↓ 滚动 · X 中断 · Esc 返回";
2220
- readonly en: "↑/↓ scroll · X interrupt · Esc back";
2221
- };
2222
2615
  readonly 'subagent-card-prefix': {
2223
2616
  readonly zh: "子代理:";
2224
2617
  readonly en: "Subagent: ";
@@ -2455,6 +2848,78 @@ declare const dict: {
2455
2848
  readonly zh: "保持当前模型";
2456
2849
  readonly en: "Keep the current model";
2457
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
+ };
2458
2923
  readonly 'cmd-desc-new': {
2459
2924
  readonly zh: "新开会话";
2460
2925
  };
@@ -2470,6 +2935,9 @@ declare const dict: {
2470
2935
  readonly 'cmd-desc-rename': {
2471
2936
  readonly zh: "重命名当前会话";
2472
2937
  };
2938
+ readonly 'cmd-desc-recap': {
2939
+ readonly zh: "生成最近会话活动摘要(可应用建议标题)";
2940
+ };
2473
2941
  readonly 'cmd-desc-quit': {
2474
2942
  readonly zh: "退出 dsh-tui";
2475
2943
  };
@@ -2479,6 +2947,12 @@ declare const dict: {
2479
2947
  readonly 'cmd-desc-rewind': {
2480
2948
  readonly zh: "回退会话到历史消息";
2481
2949
  };
2950
+ readonly 'cmd-desc-tree': {
2951
+ readonly zh: "浏览会话分叉树(回退/分叉/切分支)";
2952
+ };
2953
+ readonly 'cmd-desc-fork': {
2954
+ readonly zh: "把当前会话分叉为可恢复副本";
2955
+ };
2482
2956
  readonly 'cmd-desc-export': {
2483
2957
  readonly zh: "导出会话为 Markdown 文件";
2484
2958
  };
@@ -2494,6 +2968,9 @@ declare const dict: {
2494
2968
  readonly 'cmd-desc-config': {
2495
2969
  readonly zh: "查看 dsh-tui 配置来源";
2496
2970
  };
2971
+ readonly 'cmd-desc-reload': {
2972
+ readonly zh: "重读偏好文件并立即生效";
2973
+ };
2497
2974
  readonly 'cmd-desc-settings': {
2498
2975
  readonly zh: "查看和编辑插件设置";
2499
2976
  };
@@ -2515,6 +2992,9 @@ declare const dict: {
2515
2992
  readonly 'cmd-desc-theme': {
2516
2993
  readonly zh: "切换配色主题(auto 跟随系统,或内置/自定义)";
2517
2994
  };
2995
+ readonly 'cmd-desc-color': {
2996
+ readonly zh: "设置当前会话强调色(输入框边框与会话标签)";
2997
+ };
2518
2998
  readonly 'cmd-desc-lang': {
2519
2999
  readonly zh: "切换界面语言(en / zh)";
2520
3000
  };
@@ -2602,6 +3082,9 @@ declare const dict: {
2602
3082
  readonly 'cmd-desc-help': {
2603
3083
  readonly zh: "查看快捷键与命令";
2604
3084
  };
3085
+ readonly 'cmd-desc-restart': {
3086
+ readonly zh: "重启 dsh-tui 并恢复当前会话";
3087
+ };
2605
3088
  readonly 'cmd-desc-exit': {
2606
3089
  readonly zh: "退出 dsh-tui";
2607
3090
  };
@@ -2734,74 +3217,10 @@ declare const dict: {
2734
3217
  readonly zh: "**j/k** 翻页 · **enter/esc** 收起 · **q** 退出";
2735
3218
  readonly en: "**j/k** page · **enter/esc** collapse · **q** exit";
2736
3219
  };
2737
- readonly 'traj-empty': {
2738
- readonly zh: "暂无轨迹事件";
2739
- readonly en: "No trajectory events yet";
2740
- };
2741
3220
  readonly 'traj-hint-failure': {
2742
3221
  readonly zh: "{{key}} 看完整轨迹";
2743
3222
  readonly en: "{{key}} for the full trajectory";
2744
3223
  };
2745
- readonly 'subagent.unnamed': {
2746
- readonly zh: "未命名子代理";
2747
- readonly en: "Unnamed subagent";
2748
- };
2749
- readonly 'subagent.no-model': {
2750
- readonly zh: "未知模型";
2751
- readonly en: "Unknown model";
2752
- };
2753
- readonly 'subagent.status.running': {
2754
- readonly zh: "运行中";
2755
- readonly en: "Running";
2756
- };
2757
- readonly 'subagent.status.completed': {
2758
- readonly zh: "已完成";
2759
- readonly en: "Completed";
2760
- };
2761
- readonly 'subagent.status.failed': {
2762
- readonly zh: "失败";
2763
- readonly en: "Failed";
2764
- };
2765
- readonly 'subagent.status.pending': {
2766
- readonly zh: "等待中";
2767
- readonly en: "Pending";
2768
- };
2769
- readonly 'subagent.dashboard.title': {
2770
- readonly zh: "子代理面板";
2771
- readonly en: "Subagent Dashboard";
2772
- };
2773
- readonly 'subagent.dashboard.stats': {
2774
- readonly zh: "运行中: {{running}} · 已完成: {{completed}} · 失败: {{failed}}";
2775
- readonly en: "Running: {{running}} · Completed: {{completed}} · Failed: {{failed}}";
2776
- };
2777
- readonly 'subagent.dashboard.empty': {
2778
- readonly zh: "暂无子代理";
2779
- readonly en: "No subagents yet";
2780
- };
2781
- readonly 'subagent.dashboard.help': {
2782
- readonly zh: "↑↓ 选择 · Enter 查看详情 · Esc 返回";
2783
- readonly en: "↑↓ select · Enter view details · Esc back";
2784
- };
2785
- readonly 'subagent.detail.not-found': {
2786
- readonly zh: "子代理未找到";
2787
- readonly en: "Subagent not found";
2788
- };
2789
- readonly 'subagent.detail.press-esc': {
2790
- readonly zh: "按 Esc 返回";
2791
- readonly en: "Press Esc to go back";
2792
- };
2793
- readonly 'subagent.detail.output': {
2794
- readonly zh: "输出";
2795
- readonly en: "Output";
2796
- };
2797
- readonly 'subagent.detail.no-output': {
2798
- readonly zh: "暂无输出";
2799
- readonly en: "No output yet";
2800
- };
2801
- readonly 'subagent.detail.help': {
2802
- readonly zh: "Esc 返回面板";
2803
- readonly en: "Esc back to dashboard";
2804
- };
2805
3224
  };
2806
3225
  export type I18nKey = keyof typeof dict;
2807
3226
  export type I18nParams = Record<string, string | number>;
@@ -2834,6 +3253,11 @@ export declare function t(key: I18nKey, params?: I18nParams): string;
2834
3253
  * @param params - Placeholder values substituted into whichever text wins.
2835
3254
  */
2836
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
+ }>>;
2837
3261
  /**
2838
3262
  * Parse a persisted `{ lang }` value; anything else yields undefined.
2839
3263
  * @param text - Raw file contents.
@@ -2845,12 +3269,16 @@ export declare function readLangPref(dir?: string): Lang | undefined;
2845
3269
  export declare function writeLangPref(lang: Lang, dir?: string): boolean;
2846
3270
  /**
2847
3271
  * Guess the user's language from the OS locale (`LC_ALL`, `LC_MESSAGES`,
2848
- * `LANG`), defaulting to `zh`. Only consulted when nothing else (env var,
2849
- * cordis.yml `lang`, persisted `/lang` choice) pinned a language.
2850
- * The POSIX/C locale means "no locale selected" and conventionally maps to
2851
- * English — importantly it is what CI runners (LANG=C.UTF-8) report, so
2852
- * tests asserting English UI copy stay deterministic. An absent locale
2853
- * 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.
2854
3282
  */
2855
3283
  export declare function detectLocaleLang(): Lang;
2856
3284
  /**