@deepseek-harness-tui/dsh-tui 0.11.2 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/README.md +21 -5
  2. package/bin/dsh-tui.js +30 -3
  3. package/cordis.patch.yml +24 -5
  4. package/guide/dsh-tui-guide/SKILL.md +37 -0
  5. package/guide/dsh-tui-guide/configuration.en.md +410 -0
  6. package/guide/dsh-tui-guide/configuration.md +349 -0
  7. package/guide/dsh-tui-guide/getting-started.en.md +398 -0
  8. package/guide/dsh-tui-guide/getting-started.md +397 -0
  9. package/guide/dsh-tui-guide/interaction.en.md +674 -0
  10. package/guide/dsh-tui-guide/interaction.md +747 -0
  11. package/guide/dsh-tui-guide/migrate.en.md +166 -0
  12. package/guide/dsh-tui-guide/migrate.md +132 -0
  13. package/guide/dsh-tui-guide/plugins.en.md +68 -0
  14. package/guide/dsh-tui-guide/plugins.md +56 -0
  15. package/guide/dsh-tui-guide/themes.en.md +192 -0
  16. package/guide/dsh-tui-guide/themes.md +185 -0
  17. package/guide/dsh-tui-guide/user-guide.en.md +608 -0
  18. package/guide/dsh-tui-guide/user-guide.md +586 -0
  19. package/guide/dsh-tui-guide/vscode.en.md +301 -0
  20. package/guide/dsh-tui-guide/vscode.md +272 -0
  21. package/lib/settings.json +5 -5
  22. package/lib/types/adapter/channel/ui-policy.d.ts +3 -2
  23. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  24. package/lib/types/adapter/channel/ui-policy.js +4 -0
  25. package/lib/types/adapter/ports/channel-settings.d.ts +2 -1
  26. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  27. package/lib/types/adapter/ports/channel-ui.d.ts +29 -2
  28. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  29. package/lib/types/adapter/ports/channel-view.d.ts +43 -9
  30. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  31. package/lib/types/components/Chat/JobCard.d.ts +9 -0
  32. package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
  33. package/lib/types/components/Chat/JobCard.js +42 -15
  34. package/lib/types/components/Chat/SubagentMessage.js +6 -6
  35. package/lib/types/components/JobsPanel.d.ts.map +1 -1
  36. package/lib/types/components/JobsPanel.js +80 -33
  37. package/lib/types/components/MessageList.js +3 -3
  38. package/lib/types/components/PresetPicker.d.ts +4 -0
  39. package/lib/types/components/PresetPicker.d.ts.map +1 -1
  40. package/lib/types/components/PresetPicker.js +5 -1
  41. package/lib/types/components/PromptInput.d.ts.map +1 -1
  42. package/lib/types/components/PromptInput.js +12 -1
  43. package/lib/types/components/StarPrompt.d.ts +6 -0
  44. package/lib/types/components/StarPrompt.d.ts.map +1 -1
  45. package/lib/types/components/StarPrompt.js +45 -0
  46. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  47. package/lib/types/components/SubagentCard.js +8 -8
  48. package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
  49. package/lib/types/components/SubagentDetailScene.js +108 -10
  50. package/lib/types/components/WhaleGirl.d.ts +6 -0
  51. package/lib/types/components/WhaleGirl.d.ts.map +1 -1
  52. package/lib/types/components/WhaleGirl.js +18 -0
  53. package/lib/types/components/messages/AssistantThinkingMessage.js +4 -4
  54. package/lib/types/components/trajectory/MiniWake.d.ts +11 -1
  55. package/lib/types/components/trajectory/MiniWake.d.ts.map +1 -1
  56. package/lib/types/components/trajectory/MiniWake.js +9 -3
  57. package/lib/types/dsh-adapter/channel/external-commands.d.ts.map +1 -1
  58. package/lib/types/dsh-adapter/channel/external-commands.js +8 -2
  59. package/lib/types/dsh-adapter/channel/job-projection.d.ts +1 -0
  60. package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
  61. package/lib/types/dsh-adapter/channel/job-projection.js +88 -3
  62. package/lib/types/dsh-adapter/channel/mode-actions.d.ts +13 -0
  63. package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
  64. package/lib/types/dsh-adapter/channel/mode-actions.js +48 -7
  65. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  66. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +25 -9
  67. package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
  68. package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
  69. package/lib/types/dsh-adapter/channel/preferences.js +17 -7
  70. package/lib/types/dsh-adapter/channel/state.d.ts +4 -2
  71. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  72. package/lib/types/dsh-adapter/channel/state.js +1 -1
  73. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  74. package/lib/types/dsh-adapter/channel/subagent-projection.js +5 -0
  75. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  76. package/lib/types/dsh-adapter/channel.js +16 -1
  77. package/lib/types/dsh-adapter/contract.d.ts +5 -4
  78. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  79. package/lib/types/dsh-adapter/contract.js +9 -3
  80. package/lib/types/dsh-adapter/jobs.d.ts +82 -16
  81. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  82. package/lib/types/dsh-adapter/jobs.js +104 -9
  83. package/lib/types/dsh-adapter/oauth/bonus.d.ts +27 -0
  84. package/lib/types/dsh-adapter/oauth/bonus.d.ts.map +1 -0
  85. package/lib/types/dsh-adapter/oauth/bonus.js +69 -0
  86. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.d.ts +2 -1
  87. package/lib/types/dsh-adapter/oauth/command.d.ts.map +1 -0
  88. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.js +7 -4
  89. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.d.ts +13 -10
  90. package/lib/types/dsh-adapter/oauth/credentials.d.ts.map +1 -0
  91. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.js +61 -23
  92. package/lib/types/dsh-adapter/oauth/deepseek.d.ts +39 -0
  93. package/lib/types/dsh-adapter/oauth/deepseek.d.ts.map +1 -0
  94. package/lib/types/dsh-adapter/oauth/deepseek.js +189 -0
  95. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.d.ts +24 -16
  96. package/lib/types/dsh-adapter/oauth/index.d.ts.map +1 -0
  97. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.js +34 -20
  98. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/interaction.d.ts +14 -12
  99. package/lib/types/dsh-adapter/oauth/interaction.d.ts.map +1 -0
  100. package/lib/types/dsh-adapter/oauth/interaction.js +283 -0
  101. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.d.ts +2 -1
  102. package/lib/types/dsh-adapter/oauth/opener.d.ts.map +1 -0
  103. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.js +1 -1
  104. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.d.ts +10 -3
  105. package/lib/types/dsh-adapter/oauth/pi-ai.d.ts.map +1 -0
  106. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.js +8 -3
  107. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.d.ts +6 -3
  108. package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -0
  109. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.js +11 -3
  110. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.d.ts +14 -7
  111. package/lib/types/dsh-adapter/oauth/service.d.ts.map +1 -0
  112. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.js +82 -17
  113. package/lib/types/dsh-adapter/plugin.d.ts +8 -1
  114. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  115. package/lib/types/dsh-adapter/plugin.js +72 -12
  116. package/lib/types/dsh-adapter/presets.d.ts +6 -4
  117. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  118. package/lib/types/dsh-adapter/presets.js +6 -4
  119. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  120. package/lib/types/dsh-adapter/providerWizard.js +6 -2
  121. package/lib/types/dsh-adapter/subagents.d.ts +1 -0
  122. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  123. package/lib/types/dsh-adapter/subagents.js +10 -1
  124. package/lib/types/i18n.d.ts +174 -18
  125. package/lib/types/i18n.d.ts.map +1 -1
  126. package/lib/types/i18n.js +53 -11
  127. package/lib/types/ink/components/App.d.ts.map +1 -1
  128. package/lib/types/ink/components/App.js +10 -1
  129. package/lib/types/ink/parse-keypress.d.ts +35 -0
  130. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  131. package/lib/types/ink/parse-keypress.js +611 -83
  132. package/lib/types/ink/terminal-querier.d.ts +25 -0
  133. package/lib/types/ink/terminal-querier.d.ts.map +1 -1
  134. package/lib/types/ink/terminal-querier.js +42 -0
  135. package/lib/types/ink/update-overflow-guard.d.ts +24 -0
  136. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  137. package/lib/types/ink/update-overflow-guard.js +25 -3
  138. package/lib/types/minimalUiMode.d.ts +19 -0
  139. package/lib/types/minimalUiMode.d.ts.map +1 -0
  140. package/lib/types/minimalUiMode.js +23 -0
  141. package/lib/types/oauth.d.ts +5 -10
  142. package/lib/types/oauth.d.ts.map +1 -1
  143. package/lib/types/oauth.js +5 -10
  144. package/lib/types/screens/Chat.d.ts +4 -1
  145. package/lib/types/screens/Chat.d.ts.map +1 -1
  146. package/lib/types/screens/Chat.js +27 -7
  147. package/lib/types/screens/StatusLine.d.ts +4 -0
  148. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  149. package/lib/types/screens/StatusLine.js +12 -12
  150. package/lib/types/settings/definitions.js +4 -4
  151. package/lib/types/tips.d.ts.map +1 -1
  152. package/lib/types/tips.js +10 -4
  153. package/lib/types/update.js +2 -2
  154. package/lib/types/utils/pastedImagePath.d.ts +8 -0
  155. package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
  156. package/lib/types/utils/pastedImagePath.js +29 -5
  157. package/package.json +111 -100
  158. package/presets/liangshen/agent.cordis.yml +4 -1
  159. package/presets/liangshen/preset.yml +1 -1
  160. package/lib/types/minimalMode.d.ts +0 -13
  161. package/lib/types/minimalMode.d.ts.map +0 -1
  162. package/lib/types/minimalMode.js +0 -17
  163. package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +0 -21
  164. package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +0 -143
  165. package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +0 -11
  166. package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +0 -44
  167. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +0 -193
  168. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +0 -69
@@ -216,8 +216,8 @@ declare const dict: {
216
216
  readonly en: "Minimal";
217
217
  };
218
218
  readonly 'preset-desc-minimal': {
219
- readonly zh: "仅提供持久 bash 与 str_replace_editor 的双工具编码 Agent。";
220
- readonly en: "A two-tool coding agent exposing only persistent bash and str_replace_editor.";
219
+ readonly zh: "内核 Agent 预设(极简模式):只暴露一个持久 shell 工具(POSIX 为 bash,Windows 为 pwsh),不带 compaction、计划模式与运行时上下文。";
220
+ readonly en: "Kernel agent preset (Minimal): a single persistent-shell tool (bash on POSIX, pwsh on Windows), with no compaction, no plan mode and no runtime context.";
221
221
  };
222
222
  readonly 'preset-name-code': {
223
223
  readonly zh: "PTC 模式";
@@ -240,8 +240,12 @@ declare const dict: {
240
240
  readonly en: "Liangshen mode";
241
241
  };
242
242
  readonly 'preset-desc-liangshen': {
243
- readonly zh: "主 Agent 与子 Agent 首轮均保持 Minimal 双工具,首次工具调用后开放完整目录,压缩后重新锚定。";
244
- readonly en: "Root and delegated agents keep the minimal two-tool pair on the first turn; the full catalog opens after the first tool call and re-anchors after compaction.";
243
+ readonly zh: "主 Agent 与子 Agent 首轮均保持极简模式的最小工具面,首次工具调用后开放完整目录,压缩后重新锚定。";
244
+ readonly en: "Root and delegated agents keep the Minimal preset's minimal tool surface on the first turn; the full catalog opens after the first tool call and re-anchors after compaction.";
245
+ };
246
+ readonly 'preset-picker-title': {
247
+ readonly zh: "内核 Agent 预设";
248
+ readonly en: "Kernel agent preset";
245
249
  };
246
250
  readonly 'mcp-none-configured': {
247
251
  readonly zh: "未配置 MCP 服务器。";
@@ -1765,8 +1769,8 @@ declare const dict: {
1765
1769
  readonly en: "Manage DSH credentials with /provider; for env sources, remove the corresponding environment variable and restart dsh-tui";
1766
1770
  };
1767
1771
  readonly 'login-oauth-heading': {
1768
- readonly zh: "订阅账号(OAuth):";
1769
- readonly en: "Subscriptions (OAuth):";
1772
+ readonly zh: "OAuth 账号:";
1773
+ readonly en: "OAuth accounts:";
1770
1774
  };
1771
1775
  readonly 'login-oauth-row': {
1772
1776
  readonly zh: " {{provider}} — {{state}}";
@@ -1776,6 +1780,10 @@ declare const dict: {
1776
1780
  readonly zh: "已登录 · 令牌到期 {{time}}";
1777
1781
  readonly en: "signed in · token expires {{time}}";
1778
1782
  };
1783
+ readonly 'login-oauth-in-no-expiry': {
1784
+ readonly zh: "已登录";
1785
+ readonly en: "signed in";
1786
+ };
1779
1787
  readonly 'login-oauth-expired': {
1780
1788
  readonly zh: "已登录但令牌已过期,重新登录可恢复";
1781
1789
  readonly en: "signed in but the token expired — sign in again to restore";
@@ -1785,8 +1793,8 @@ declare const dict: {
1785
1793
  readonly en: "not signed in";
1786
1794
  };
1787
1795
  readonly 'login-oauth-hint': {
1788
- readonly zh: " 登录/登出:/provider 订阅账号登录,或 /auth login <provider>";
1789
- readonly en: " Sign in/out: /provider subscription sign-in, or /auth login <provider>";
1796
+ readonly zh: " 登录/登出:/provider 账号登录,或 /auth login <provider>";
1797
+ readonly en: " Sign in/out: /provider account sign-in, or /auth login <provider>";
1790
1798
  };
1791
1799
  readonly 'permission-policy-hint': {
1792
1800
  readonly zh: "DSH 权限策略由 fs-policy / bash-sandbox 配置决定(当前 leaf:workspace 内读写、写入需已读文件)。";
@@ -2256,6 +2264,10 @@ declare const dict: {
2256
2264
  readonly zh: "当前 preset 未注册 /plan 命令,无法切换计划模式";
2257
2265
  readonly en: "The active preset does not register /plan; cannot toggle plan mode";
2258
2266
  };
2267
+ readonly 'mode-switch-failed': {
2268
+ readonly zh: "模式切换失败 · {{err}}";
2269
+ readonly en: "Mode switch failed · {{err}}";
2270
+ };
2259
2271
  readonly 'mode-permission-unregistered': {
2260
2272
  readonly zh: "当前 preset 未注册 /permission 命令,无法切换权限模式";
2261
2273
  readonly en: "The active preset does not register /permission; cannot switch the permission mode";
@@ -2387,6 +2399,22 @@ declare const dict: {
2387
2399
  readonly zh: "**Enter** / **Esc** 关闭";
2388
2400
  readonly en: "**Enter** / **Esc** to close";
2389
2401
  };
2402
+ readonly 'coupon-modal-title': {
2403
+ readonly zh: "鲸鱼券";
2404
+ readonly en: "Whale coupon";
2405
+ };
2406
+ readonly 'coupon-modal-received': {
2407
+ readonly zh: "DeepSeek 送你的 {{amount}} {{unit}}鲸鱼券到账啦~";
2408
+ readonly en: "Your {{amount}} {{unit}} whale coupon from DeepSeek is here ~";
2409
+ };
2410
+ readonly 'coupon-modal-expiry': {
2411
+ readonly zh: "Deepy提醒:这张券 {{month}} 月 {{day}} 日 {{time}} 就要过期啦,别忘记用掉哦~";
2412
+ readonly en: "Deepy says: this coupon expires on {{month}}/{{day}} at {{time}}. Do not forget to use it ~";
2413
+ };
2414
+ readonly 'coupon-modal-hint': {
2415
+ readonly zh: "**Enter** / **Esc** 收好鲸鱼券";
2416
+ readonly en: "**Enter** / **Esc** to tuck it away";
2417
+ };
2390
2418
  readonly 'logo-tip-prefix': {
2391
2419
  readonly zh: "提示:";
2392
2420
  readonly en: "Tip: ";
@@ -3714,6 +3742,14 @@ declare const dict: {
3714
3742
  readonly zh: "子代理:";
3715
3743
  readonly en: "Subagent: ";
3716
3744
  };
3745
+ readonly 'subagent-mode-continuable': {
3746
+ readonly zh: "♻ 可继续";
3747
+ readonly en: "♻ continuable";
3748
+ };
3749
+ readonly 'subagent-mode-one-shot': {
3750
+ readonly zh: "◇ 一次性";
3751
+ readonly en: "◇ one-shot";
3752
+ };
3717
3753
  readonly 'subagent-tab-summary': {
3718
3754
  readonly zh: "摘要";
3719
3755
  readonly en: "Summary";
@@ -3722,6 +3758,26 @@ declare const dict: {
3722
3758
  readonly zh: "暂无摘要";
3723
3759
  readonly en: "No summary yet";
3724
3760
  };
3761
+ readonly 'subagent-thinking-fold': {
3762
+ readonly zh: "思考 · {{count}} 段 · {{chars}} 字";
3763
+ readonly en: "Thinking · {{count}} paras · {{chars}} chars";
3764
+ };
3765
+ readonly 'subagent-thinking-expand': {
3766
+ readonly zh: "Enter 展开";
3767
+ readonly en: "Enter expand";
3768
+ };
3769
+ readonly 'subagent-thinking-collapse': {
3770
+ readonly zh: "Enter 收起";
3771
+ readonly en: "Enter collapse";
3772
+ };
3773
+ readonly 'subagent-conclusion': {
3774
+ readonly zh: "结论";
3775
+ readonly en: "Conclusion";
3776
+ };
3777
+ readonly 'subagent-hint-fold': {
3778
+ readonly zh: "Enter 思考折叠";
3779
+ readonly en: "Enter thinking";
3780
+ };
3725
3781
  readonly 'subagent-no-tools': {
3726
3782
  readonly zh: "暂无工具调用";
3727
3783
  readonly en: "No tool calls";
@@ -3791,8 +3847,12 @@ declare const dict: {
3791
3847
  readonly en: "Commands the agent runs in the background appear here";
3792
3848
  };
3793
3849
  readonly 'jobs-panel-hint': {
3794
- readonly zh: "↑/↓ 选择(聚焦行显示详情)· k 停止选中任务 · Esc 关闭";
3795
- readonly en: "↑/↓ select (focused row shows details) · k kill focused job · Esc close";
3850
+ readonly zh: "↑/↓ 或点击选择 · k 两次停止选中任务 · Esc 关闭";
3851
+ readonly en: "↑/↓ or click to select · press k twice to stop the focused job · Esc close";
3852
+ };
3853
+ readonly 'jobs-kill-armed': {
3854
+ readonly zh: "再按 k 确认停止";
3855
+ readonly en: "press k again to confirm";
3796
3856
  };
3797
3857
  readonly 'jobs-panel-started': {
3798
3858
  readonly zh: "开始";
@@ -3806,6 +3866,10 @@ declare const dict: {
3806
3866
  readonly zh: "命令";
3807
3867
  readonly en: "command";
3808
3868
  };
3869
+ readonly 'jobs-panel-output': {
3870
+ readonly zh: "输出";
3871
+ readonly en: "output";
3872
+ };
3809
3873
  readonly 'jobs-panel-output-at': {
3810
3874
  readonly zh: "输出更新于";
3811
3875
  readonly en: "output updated";
@@ -3814,6 +3878,18 @@ declare const dict: {
3814
3878
  readonly zh: "(暂无镜像输出——agent 读取后显示)";
3815
3879
  readonly en: "(no mirrored output yet — appears when the agent reads it)";
3816
3880
  };
3881
+ readonly 'jobs-output-gap': {
3882
+ readonly zh: "……较早的输出已丢弃……";
3883
+ readonly en: "……earlier output discarded……";
3884
+ };
3885
+ readonly 'jobs-output-dropped': {
3886
+ readonly zh: "部分输出未保留";
3887
+ readonly en: "some output not retained";
3888
+ };
3889
+ readonly 'jobs-output-spill': {
3890
+ readonly zh: "完整输出落盘:{{path}}";
3891
+ readonly en: "full output retained at: {{path}}";
3892
+ };
3817
3893
  readonly 'jobs-toast-completed': {
3818
3894
  readonly zh: "后台任务完成:{{label}}({{id}} · 用时 {{duration}})";
3819
3895
  readonly en: "Background job completed: {{label}} ({{id}} · {{duration}})";
@@ -4091,21 +4167,25 @@ declare const dict: {
4091
4167
  readonly en: "Keep the current model";
4092
4168
  };
4093
4169
  readonly 'provider-opt-oauth': {
4094
- readonly zh: "订阅账号登录(OAuth)";
4095
- readonly en: "Subscription sign-in (OAuth)";
4170
+ readonly zh: "账号登录(OAuth)";
4171
+ readonly en: "Account sign-in (OAuth)";
4096
4172
  };
4097
4173
  readonly 'provider-opt-oauth-desc': {
4098
- readonly zh: "用 ChatGPT / Claude / Grok 等官方订阅账号登录,无需 API key";
4099
- readonly en: "Sign in with an official subscription (ChatGPT / Claude / Grok) — no API key";
4174
+ readonly zh: "使用当前宿主支持的账号登录,无需 API key";
4175
+ readonly en: "Sign in with an account supported by this host — no API key";
4100
4176
  };
4101
4177
  readonly 'provider-q-oauth': {
4102
- readonly zh: "登录哪个订阅账号?";
4103
- readonly en: "Sign in to which subscription?";
4178
+ readonly zh: "登录哪个账号?";
4179
+ readonly en: "Sign in to which account?";
4104
4180
  };
4105
4181
  readonly 'provider-oauth-state-in': {
4106
4182
  readonly zh: "已登录 · 令牌到期 {{time}}";
4107
4183
  readonly en: "Signed in · token expires {{time}}";
4108
4184
  };
4185
+ readonly 'provider-oauth-state-in-no-expiry': {
4186
+ readonly zh: "已登录";
4187
+ readonly en: "Signed in";
4188
+ };
4109
4189
  readonly 'provider-oauth-state-expired': {
4110
4190
  readonly zh: "已登录但令牌已过期,重新登录即可恢复";
4111
4191
  readonly en: "Signed in but the token expired — sign in again to restore";
@@ -4131,8 +4211,8 @@ declare const dict: {
4131
4211
  readonly en: "Remove the locally stored OAuth credential";
4132
4212
  };
4133
4213
  readonly 'provider-oauth-none': {
4134
- readonly zh: "没有可 OAuth 登录的 provider(检查 dsh-auth 插件是否挂载)";
4135
- readonly en: "No OAuth-capable providers (check whether the dsh-auth plugin is mounted)";
4214
+ readonly zh: "没有可 OAuth 登录的 provider(检查 OAuth 模块是否挂载)";
4215
+ readonly en: "No OAuth-capable providers (check whether the OAuth module is mounted)";
4136
4216
  };
4137
4217
  readonly 'provider-oauth-login-ok': {
4138
4218
  readonly zh: "{{provider}} 登录成功";
@@ -4162,6 +4242,82 @@ declare const dict: {
4162
4242
  readonly zh: "已登出,本地 OAuth 凭据已删除";
4163
4243
  readonly en: "Signed out — the stored OAuth credential was removed";
4164
4244
  };
4245
+ readonly 'oauth-event-auth-url': {
4246
+ readonly zh: "打开以下 URL 完成授权(本地回调会自动结束登录):\n{{url}}";
4247
+ readonly en: "Open this URL to authorize (a local callback completes sign-in):\n{{url}}";
4248
+ };
4249
+ readonly 'oauth-event-device-code': {
4250
+ readonly zh: "访问 {{uri}} 并输入以下代码:\n {{code}}";
4251
+ readonly en: "Visit {{uri}} and enter this code:\n {{code}}";
4252
+ };
4253
+ readonly 'oauth-copy-link': {
4254
+ readonly zh: "复制授权链接";
4255
+ readonly en: "Copy authorization link";
4256
+ };
4257
+ readonly 'oauth-copy-code': {
4258
+ readonly zh: "复制代码";
4259
+ readonly en: "Copy code";
4260
+ };
4261
+ readonly 'oauth-open-again': {
4262
+ readonly zh: "重新打开浏览器";
4263
+ readonly en: "Open browser again";
4264
+ };
4265
+ readonly 'oauth-cancel': {
4266
+ readonly zh: "取消登录";
4267
+ readonly en: "Cancel sign-in";
4268
+ };
4269
+ readonly 'oauth-auth-url-opened': {
4270
+ readonly zh: "授权页面已在浏览器打开,请在浏览器中完成登录。";
4271
+ readonly en: "Authorization page opened in your browser — complete the sign-in there.";
4272
+ };
4273
+ readonly 'oauth-auth-url-opened-fallback': {
4274
+ readonly zh: "若页面未打开,请复制下方链接手动访问。";
4275
+ readonly en: "If it did not open, copy the link below and open it by hand.";
4276
+ };
4277
+ readonly 'oauth-auth-url-manual': {
4278
+ readonly zh: "打开以下 URL 完成授权。";
4279
+ readonly en: "Open this URL to authorize.";
4280
+ };
4281
+ readonly 'oauth-auth-url-copy-hint': {
4282
+ readonly zh: "链接较长,换行后不宜手选;可使用复制操作。";
4283
+ readonly en: "Copy the link below (it is too long to select reliably once wrapped):";
4284
+ };
4285
+ readonly 'oauth-device-opened': {
4286
+ readonly zh: "请在已打开的浏览器页面({{uri}})输入以下代码:";
4287
+ readonly en: "Enter this code on the page opened in your browser ({{uri}}):";
4288
+ };
4289
+ readonly 'oauth-device-manual': {
4290
+ readonly zh: "访问 {{uri}} 并输入以下代码:";
4291
+ readonly en: "Visit {{uri}} and enter this code:";
4292
+ };
4293
+ readonly 'oauth-secret-unmasked': {
4294
+ readonly zh: "此输入界面不会隐藏内容,请留意屏幕可见范围";
4295
+ readonly en: "Input is not masked on this surface — mind your screen";
4296
+ };
4297
+ readonly 'oauth-copied': {
4298
+ readonly zh: "已复制,可粘贴到需要的位置。";
4299
+ readonly en: "Copied — paste it where you need it.";
4300
+ };
4301
+ readonly 'oauth-copy-failed': {
4302
+ readonly zh: "复制失败;请手动选取文字。";
4303
+ readonly en: "Copy failed — no clipboard helper answered; select the text manually.";
4304
+ };
4305
+ readonly 'oauth-reopened': {
4306
+ readonly zh: "已在浏览器重新打开。";
4307
+ readonly en: "Reopened in your browser.";
4308
+ };
4309
+ readonly 'oauth-open-failed': {
4310
+ readonly zh: "无法打开浏览器,请改为复制链接。";
4311
+ readonly en: "Could not open the browser; copy the link instead.";
4312
+ };
4313
+ readonly 'oauth-waiting': {
4314
+ readonly zh: "等待授权…";
4315
+ readonly en: "Waiting for authorization…";
4316
+ };
4317
+ readonly 'oauth-choose-action': {
4318
+ readonly zh: "请选择一个操作。";
4319
+ readonly en: "Choose an action.";
4320
+ };
4165
4321
  readonly 'provider-q-action': {
4166
4322
  readonly zh: "要做什么?";
4167
4323
  readonly en: "What do you want to do?";
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAMH,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAI9B,+DAA+D;AAC/D,eAAO,MAAM,KAAK,uBAAwB,CAAA;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAi5C0D,CAAA;AAEpE,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,IAAI,CAAA;AACvC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;AAUxD,uEAAuE;AACvE,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAA;AAG1B,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAG5D;AAED,qCAAqC;AACrC,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,yDAAyD;AACzD,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAGxC;AAED,iDAAiD;AACjD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,UAAe,GAAG,MAAM,CAG/D;AAwBD;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,UAAe,GAAG,MAAM,CAGlF;AAED,4EAA4E;AAC5E,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAQ,CAAA;AAI1G;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAS5D;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAkB,GAAG,IAAI,GAAG,SAAS,CAMtE;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,MAAkB,GAAG,OAAO,CAU1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAMH,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAI9B,+DAA+D;AAC/D,eAAO,MAAM,KAAK,uBAAwB,CAAA;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA27C0D,CAAA;AAEpE,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,IAAI,CAAA;AACvC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;AAUxD,uEAAuE;AACvE,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAA;AAG1B,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAG5D;AAED,qCAAqC;AACrC,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,yDAAyD;AACzD,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAGxC;AAED,iDAAiD;AACjD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,UAAe,GAAG,MAAM,CAG/D;AAwBD;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,UAAe,GAAG,MAAM,CAGlF;AAED,4EAA4E;AAC5E,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAQ,CAAA;AAI1G;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAS5D;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAkB,GAAG,IAAI,GAAG,SAAS,CAMtE;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,MAAkB,GAAG,OAAO,CAU1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC"}
package/lib/types/i18n.js CHANGED
@@ -107,13 +107,16 @@ const dict = {
107
107
  'preset-name-standard': { zh: '标准模式', en: 'Standard' },
108
108
  'preset-desc-standard': { zh: '功能完整的编码 Agent,支持文件编辑、Shell、文件与网页检索、Skills、计划、目标、子代理和工作流。', en: 'Full-featured coding agent: file editing, shell, file & web search, skills, plans, goals, subagents and workflows.' },
109
109
  'preset-name-minimal': { zh: '极简模式', en: 'Minimal' },
110
- 'preset-desc-minimal': { zh: '仅提供持久 bash 与 str_replace_editor 的双工具编码 Agent。', en: 'A two-tool coding agent exposing only persistent bash and str_replace_editor.' },
110
+ 'preset-desc-minimal': { zh: '内核 Agent 预设(极简模式):只暴露一个持久 shell 工具(POSIX 为 bash,Windows 为 pwsh),不带 compaction、计划模式与运行时上下文。', en: 'Kernel agent preset (Minimal): a single persistent-shell tool (bash on POSIX, pwsh on Windows), with no compaction, no plan mode and no runtime context.' },
111
111
  'preset-name-code': { zh: 'PTC 模式', en: 'PTC' },
112
112
  'preset-desc-code': { zh: '具备标准模式的全部能力,并通过 Code Mode SDK 呈现工具,让模型用一个 TypeScript 程序组合多步操作。', en: 'Everything standard mode offers, with tools exposed through the Code Mode SDK so the model composes multi-step operations in one TypeScript program.' },
113
113
  'preset-name-cordis': { zh: '创造模式', en: 'Creation' },
114
114
  'preset-desc-cordis': { zh: '用于创建自定义 Agent preset:具备标准模式的全部能力,并提供运行时检查、插件实验和 preset 创作指导。', en: 'For authoring custom agent presets: everything standard mode offers plus runtime inspection, plugin experiments and preset-authoring guidance.' },
115
115
  'preset-name-liangshen': { zh: '梁神模式', en: 'Liangshen mode' },
116
- 'preset-desc-liangshen': { zh: '主 Agent 与子 Agent 首轮均保持 Minimal 双工具,首次工具调用后开放完整目录,压缩后重新锚定。', en: 'Root and delegated agents keep the minimal two-tool pair on the first turn; the full catalog opens after the first tool call and re-anchors after compaction.' },
116
+ 'preset-desc-liangshen': { zh: '主 Agent 与子 Agent 首轮均保持极简模式的最小工具面,首次工具调用后开放完整目录,压缩后重新锚定。', en: 'Root and delegated agents keep the Minimal preset\'s minimal tool surface on the first turn; the full catalog opens after the first tool call and re-anchors after compaction.' },
117
+ // The preset picker's header names the AGENT PRESET explicitly, so it can
118
+ // never be read as the /settings 「极简界面」 (Minimal UI) display switch.
119
+ 'preset-picker-title': { zh: '内核 Agent 预设', en: 'Kernel agent preset' },
117
120
  'mcp-none-configured': { zh: '未配置 MCP 服务器。', en: 'No MCP servers configured.' },
118
121
  'mcp-insert-hint': { zh: '在 profile 补丁层(~/.dsh/profiles/dsh-tui/cordis.patch.yml)insert 一行即可,例:', en: 'Insert one line in the profile patch layer (~/.dsh/profiles/dsh-tui/cordis.patch.yml), e.g.:' },
119
122
  'mcp-readme-hint': { zh: '详见仓库 README 的 MCP 章节。', en: 'See the MCP section of the repo README.' },
@@ -533,13 +536,14 @@ const dict = {
533
536
  'login-base-url': { zh: 'Base URL: {{url}}', en: 'Base URL: {{url}}' },
534
537
  'login-official-endpoint': { zh: '官方端点', en: 'official endpoint' },
535
538
  'login-logout-hint': { zh: '使用 /provider 管理 DSH 凭据;若来源为 env,请删除对应环境变量并重启 dsh-tui', en: 'Manage DSH credentials with /provider; for env sources, remove the corresponding environment variable and restart dsh-tui' },
536
- // /login 的 OAuth 账号状态段(dsh-auth 类插件挂载时追加)
537
- 'login-oauth-heading': { zh: '订阅账号(OAuth):', en: 'Subscriptions (OAuth):' },
539
+ // /login 的 OAuth 账号状态段(内置 OAuth 模块挂载时追加)
540
+ 'login-oauth-heading': { zh: 'OAuth 账号:', en: 'OAuth accounts:' },
538
541
  'login-oauth-row': { zh: ' {{provider}} — {{state}}', en: ' {{provider}} — {{state}}' },
539
542
  'login-oauth-in': { zh: '已登录 · 令牌到期 {{time}}', en: 'signed in · token expires {{time}}' },
543
+ 'login-oauth-in-no-expiry': { zh: '已登录', en: 'signed in' },
540
544
  'login-oauth-expired': { zh: '已登录但令牌已过期,重新登录可恢复', en: 'signed in but the token expired — sign in again to restore' },
541
545
  'login-oauth-signed-out': { zh: '未登录', en: 'not signed in' },
542
- 'login-oauth-hint': { zh: ' 登录/登出:/provider 订阅账号登录,或 /auth login <provider>', en: ' Sign in/out: /provider subscription sign-in, or /auth login <provider>' },
546
+ 'login-oauth-hint': { zh: ' 登录/登出:/provider 账号登录,或 /auth login <provider>', en: ' Sign in/out: /provider account sign-in, or /auth login <provider>' },
543
547
  'permission-policy-hint': { zh: 'DSH 权限策略由 fs-policy / bash-sandbox 配置决定(当前 leaf:workspace 内读写、写入需已读文件)。', en: 'DSH permission policy is set by fs-policy / bash-sandbox config (current leaf: read/write in workspace, writes need a prior read).' },
544
548
  'permission-approval-hint': { zh: '审批通道已挂载:命令申请权限提升(sandbox_permissions)时弹出审批条,Yes 放行一次、No / Esc 拒绝。', en: 'The approval channel is mounted: sandbox escalations (sandbox_permissions) raise an approval bar — Yes allows once, No / Esc rejects.' },
545
549
  'permission-root-hint': { zh: '当前文件系统策略以工作目录为根:{{cwd}}', en: 'Current filesystem policy is rooted at the working directory: {{cwd}}' },
@@ -694,6 +698,7 @@ const dict = {
694
698
  'mode-plan': { zh: '计划模式', en: 'plan mode' },
695
699
  'mode-full': { zh: '完全访问', en: 'full access' },
696
700
  'mode-plan-unavailable': { zh: '当前 preset 未注册 /plan 命令,无法切换计划模式', en: 'The active preset does not register /plan; cannot toggle plan mode' },
701
+ 'mode-switch-failed': { zh: '模式切换失败 · {{err}}', en: 'Mode switch failed · {{err}}' },
697
702
  'mode-permission-unregistered': { zh: '当前 preset 未注册 /permission 命令,无法切换权限模式', en: 'The active preset does not register /permission; cannot switch the permission mode' },
698
703
  'mode-permission-invoke-failed': { zh: '/permission 切换失败,请重试或查看日志', en: '/permission switch failed; retry or check the logs' },
699
704
  'mode-permission-unconfirmed': { zh: '权限切换未被 DSH 确认,模式未改变', en: 'The permission switch was not confirmed by DSH; the mode is unchanged' },
@@ -749,6 +754,10 @@ const dict = {
749
754
  'star-modal-thanks-3': { zh: '这颗 Star 会变成 dshTUI 继续成长的动力。', en: 'This Star becomes fuel for dsh-TUI to keep growing.' },
750
755
  'star-modal-thanks-4': { zh: '希望以后,它也能继续陪你走很久。', en: 'May it keep you company for a long time to come.' },
751
756
  'star-modal-thanks-hint': { zh: '**Enter** / **Esc** 关闭', en: '**Enter** / **Esc** to close' },
757
+ 'coupon-modal-title': { zh: '鲸鱼券', en: 'Whale coupon' },
758
+ 'coupon-modal-received': { zh: 'DeepSeek 送你的 {{amount}} {{unit}}鲸鱼券到账啦~', en: 'Your {{amount}} {{unit}} whale coupon from DeepSeek is here ~' },
759
+ 'coupon-modal-expiry': { zh: 'Deepy提醒:这张券 {{month}} 月 {{day}} 日 {{time}} 就要过期啦,别忘记用掉哦~', en: 'Deepy says: this coupon expires on {{month}}/{{day}} at {{time}}. Do not forget to use it ~' },
760
+ 'coupon-modal-hint': { zh: '**Enter** / **Esc** 收好鲸鱼券', en: '**Enter** / **Esc** to tuck it away' },
752
761
  'logo-tip-prefix': { zh: '提示:', en: 'Tip: ' },
753
762
  'logo-tip-more': { zh: '更多技巧', en: 'more tips' },
754
763
  // Upstream-drift notice (merged one-liner under the tip; copy explains
@@ -1159,8 +1168,15 @@ const dict = {
1159
1168
  'subagent-dashboard-hint-basic': { zh: '↑/↓ 浏览 · Esc 关闭', en: '↑/↓ browse · Esc close' },
1160
1169
  'subagent-dashboard-hint-detail': { zh: '↑/↓ 选择 · Enter 查看详情 · Esc 关闭', en: '↑/↓ select · Enter view detail · Esc close' },
1161
1170
  'subagent-card-prefix': { zh: '子代理:', en: 'Subagent: ' },
1171
+ 'subagent-mode-continuable': { zh: '♻ 可继续', en: '♻ continuable' },
1172
+ 'subagent-mode-one-shot': { zh: '◇ 一次性', en: '◇ one-shot' },
1162
1173
  'subagent-tab-summary': { zh: '摘要', en: 'Summary' },
1163
1174
  'subagent-no-summary': { zh: '暂无摘要', en: 'No summary yet' },
1175
+ 'subagent-thinking-fold': { zh: '思考 · {{count}} 段 · {{chars}} 字', en: 'Thinking · {{count}} paras · {{chars}} chars' },
1176
+ 'subagent-thinking-expand': { zh: 'Enter 展开', en: 'Enter expand' },
1177
+ 'subagent-thinking-collapse': { zh: 'Enter 收起', en: 'Enter collapse' },
1178
+ 'subagent-conclusion': { zh: '结论', en: 'Conclusion' },
1179
+ 'subagent-hint-fold': { zh: 'Enter 思考折叠', en: 'Enter thinking' },
1164
1180
  'subagent-no-tools': { zh: '暂无工具调用', en: 'No tool calls' },
1165
1181
  'subagent-hint-page': { zh: '切页', en: 'page' },
1166
1182
  'subagent-hint-scroll': { zh: '滚动', en: 'scroll' },
@@ -1179,12 +1195,17 @@ const dict = {
1179
1195
  'jobs-panel-count-failed': { zh: '失败', en: 'failed' },
1180
1196
  'jobs-panel-empty': { zh: '当前会话暂无后台任务', en: 'No background jobs in the current session' },
1181
1197
  'jobs-panel-empty-hint': { zh: '后台运行的命令(run_in_background)会出现在这里', en: 'Commands the agent runs in the background appear here' },
1182
- 'jobs-panel-hint': { zh: '↑/↓ 选择(聚焦行显示详情)· k 停止选中任务 · Esc 关闭', en: '↑/↓ select (focused row shows details) · k kill focused job · Esc close' },
1198
+ 'jobs-panel-hint': { zh: '↑/↓ 或点击选择 · k 两次停止选中任务 · Esc 关闭', en: '↑/↓ or click to select · press k twice to stop the focused job · Esc close' },
1199
+ 'jobs-kill-armed': { zh: '再按 k 确认停止', en: 'press k again to confirm' },
1183
1200
  'jobs-panel-started': { zh: '开始', en: 'started' },
1184
1201
  'jobs-panel-finished': { zh: '结束', en: 'finished' },
1185
1202
  'jobs-panel-command': { zh: '命令', en: 'command' },
1203
+ 'jobs-panel-output': { zh: '输出', en: 'output' },
1186
1204
  'jobs-panel-output-at': { zh: '输出更新于', en: 'output updated' },
1187
1205
  'jobs-panel-no-output-yet': { zh: '(暂无镜像输出——agent 读取后显示)', en: '(no mirrored output yet — appears when the agent reads it)' },
1206
+ 'jobs-output-gap': { zh: '……较早的输出已丢弃……', en: '……earlier output discarded……' },
1207
+ 'jobs-output-dropped': { zh: '部分输出未保留', en: 'some output not retained' },
1208
+ 'jobs-output-spill': { zh: '完整输出落盘:{{path}}', en: 'full output retained at: {{path}}' },
1188
1209
  'jobs-toast-completed': { zh: '后台任务完成:{{label}}({{id}} · 用时 {{duration}})', en: 'Background job completed: {{label}} ({{id}} · {{duration}})' },
1189
1210
  'jobs-toast-failed': { zh: '后台任务失败:{{label}}({{id}} · {{detail}})', en: 'Background job failed: {{label}} ({{id}} · {{detail}})' },
1190
1211
  'jobs-toast-killed': { zh: '后台任务已停止:{{label}}({{id}} · 用时 {{duration}})', en: 'Background job killed: {{label}} ({{id}} · {{duration}})' },
@@ -1256,18 +1277,19 @@ const dict = {
1256
1277
  'provider-q-switch': { zh: '立即切换到新 provider?', en: 'Switch to the new provider now?' },
1257
1278
  'provider-opt-switch-now': { zh: '切换到 {{model}}', en: 'Switch to {{model}}' },
1258
1279
  'provider-opt-switch-keep': { zh: '保持当前模型', en: 'Keep the current model' },
1259
- // /provider OAuth 分支(dsh-auth 等插件挂载 ctx.dshAuth 时出现)
1260
- 'provider-opt-oauth': { zh: '订阅账号登录(OAuth)', en: 'Subscription sign-in (OAuth)' },
1261
- 'provider-opt-oauth-desc': { zh: '用 ChatGPT / Claude / Grok 等官方订阅账号登录,无需 API key', en: 'Sign in with an official subscription (ChatGPT / Claude / Grok) — no API key' },
1262
- 'provider-q-oauth': { zh: '登录哪个订阅账号?', en: 'Sign in to which subscription?' },
1280
+ // /provider OAuth 分支(内置 OAuth 模块挂载 ctx.dshAuth 时出现)
1281
+ 'provider-opt-oauth': { zh: '账号登录(OAuth)', en: 'Account sign-in (OAuth)' },
1282
+ 'provider-opt-oauth-desc': { zh: '使用当前宿主支持的账号登录,无需 API key', en: 'Sign in with an account supported by this host — no API key' },
1283
+ 'provider-q-oauth': { zh: '登录哪个账号?', en: 'Sign in to which account?' },
1263
1284
  'provider-oauth-state-in': { zh: '已登录 · 令牌到期 {{time}}', en: 'Signed in · token expires {{time}}' },
1285
+ 'provider-oauth-state-in-no-expiry': { zh: '已登录', en: 'Signed in' },
1264
1286
  'provider-oauth-state-expired': { zh: '已登录但令牌已过期,重新登录即可恢复', en: 'Signed in but the token expired — sign in again to restore' },
1265
1287
  'provider-q-oauth-signed': { zh: '{{provider}} 已登录,接下来?', en: '{{provider}} is signed in — what next?' },
1266
1288
  'provider-opt-oauth-relogin': { zh: '重新登录', en: 'Sign in again' },
1267
1289
  'provider-opt-oauth-relogin-desc': { zh: '更换账号或刷新已有凭据', en: 'Switch accounts or refresh the stored credential' },
1268
1290
  'provider-opt-oauth-logout': { zh: '登出', en: 'Sign out' },
1269
1291
  'provider-opt-oauth-logout-desc': { zh: '删除本地保存的 OAuth 凭据', en: 'Remove the locally stored OAuth credential' },
1270
- 'provider-oauth-none': { zh: '没有可 OAuth 登录的 provider(检查 dsh-auth 插件是否挂载)', en: 'No OAuth-capable providers (check whether the dsh-auth plugin is mounted)' },
1292
+ 'provider-oauth-none': { zh: '没有可 OAuth 登录的 provider(检查 OAuth 模块是否挂载)', en: 'No OAuth-capable providers (check whether the OAuth module is mounted)' },
1271
1293
  'provider-oauth-login-ok': { zh: '{{provider}} 登录成功', en: 'Signed in to {{provider}}' },
1272
1294
  'provider-oauth-login-failed': { zh: 'OAuth 登录失败 · {{{err}}}', en: 'OAuth sign-in failed · {{{err}}}' },
1273
1295
  'provider-oauth-logout-ok': { zh: '{{provider}} 已登出', en: 'Signed out of {{provider}}' },
@@ -1275,6 +1297,26 @@ const dict = {
1275
1297
  'provider-line-oauth-flow': { zh: '登录方式:{{flow}}', en: 'Sign-in: {{flow}}' },
1276
1298
  'provider-line-oauth-expires': { zh: '令牌到期:{{time}}', en: 'Token expires: {{time}}' },
1277
1299
  'provider-line-oauth-out': { zh: '已登出,本地 OAuth 凭据已删除', en: 'Signed out — the stored OAuth credential was removed' },
1300
+ // 内置 OAuth 与 pi-ai AuthInteraction 之间的问卷桥(provider 自带提示原文不改写)
1301
+ 'oauth-event-auth-url': { zh: '打开以下 URL 完成授权(本地回调会自动结束登录):\n{{url}}', en: 'Open this URL to authorize (a local callback completes sign-in):\n{{url}}' },
1302
+ 'oauth-event-device-code': { zh: '访问 {{uri}} 并输入以下代码:\n {{code}}', en: 'Visit {{uri}} and enter this code:\n {{code}}' },
1303
+ 'oauth-copy-link': { zh: '复制授权链接', en: 'Copy authorization link' },
1304
+ 'oauth-copy-code': { zh: '复制代码', en: 'Copy code' },
1305
+ 'oauth-open-again': { zh: '重新打开浏览器', en: 'Open browser again' },
1306
+ 'oauth-cancel': { zh: '取消登录', en: 'Cancel sign-in' },
1307
+ 'oauth-auth-url-opened': { zh: '授权页面已在浏览器打开,请在浏览器中完成登录。', en: 'Authorization page opened in your browser — complete the sign-in there.' },
1308
+ 'oauth-auth-url-opened-fallback': { zh: '若页面未打开,请复制下方链接手动访问。', en: 'If it did not open, copy the link below and open it by hand.' },
1309
+ 'oauth-auth-url-manual': { zh: '打开以下 URL 完成授权。', en: 'Open this URL to authorize.' },
1310
+ 'oauth-auth-url-copy-hint': { zh: '链接较长,换行后不宜手选;可使用复制操作。', en: 'Copy the link below (it is too long to select reliably once wrapped):' },
1311
+ 'oauth-device-opened': { zh: '请在已打开的浏览器页面({{uri}})输入以下代码:', en: 'Enter this code on the page opened in your browser ({{uri}}):' },
1312
+ 'oauth-device-manual': { zh: '访问 {{uri}} 并输入以下代码:', en: 'Visit {{uri}} and enter this code:' },
1313
+ 'oauth-secret-unmasked': { zh: '此输入界面不会隐藏内容,请留意屏幕可见范围', en: 'Input is not masked on this surface — mind your screen' },
1314
+ 'oauth-copied': { zh: '已复制,可粘贴到需要的位置。', en: 'Copied — paste it where you need it.' },
1315
+ 'oauth-copy-failed': { zh: '复制失败;请手动选取文字。', en: 'Copy failed — no clipboard helper answered; select the text manually.' },
1316
+ 'oauth-reopened': { zh: '已在浏览器重新打开。', en: 'Reopened in your browser.' },
1317
+ 'oauth-open-failed': { zh: '无法打开浏览器,请改为复制链接。', en: 'Could not open the browser; copy the link instead.' },
1318
+ 'oauth-waiting': { zh: '等待授权…', en: 'Waiting for authorization…' },
1319
+ 'oauth-choose-action': { zh: '请选择一个操作。', en: 'Choose an action.' },
1278
1320
  // /provider 动作层(添加/编辑;删除并入编辑菜单)
1279
1321
  'provider-q-action': { zh: '要做什么?', en: 'What do you want to do?' },
1280
1322
  'provider-opt-action-add': { zh: '添加新 provider', en: 'Add a new provider' },
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../src/ink/components/App.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../src/ink/components/App.tsx"],"names":[],"mappings":"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"}
@@ -384,8 +384,17 @@ export default class App extends PureComponent {
384
384
  };
385
385
  // Process input through the parser and handle the results
386
386
  processInput = (input) => {
387
+ // Host-injected query evidence (#1142 pattern): the parser only claims
388
+ // a terminal-response tail when a query of the matching expected type
389
+ // is genuinely awaiting an answer. This is the live query lifecycle,
390
+ // not a recency window — a settled query stops authorizing at once.
391
+ // Injected per call — newState replaces the whole state object, so a
392
+ // value stored once would go stale. Read-only for the parser.
393
+ const terminalExpectedResponseTypes = [
394
+ ...this.querier.pendingResponseTypes,
395
+ ];
387
396
  // Parse input using our state machine
388
- const [keys, newState] = parseMultipleKeypresses(this.keyParseState, input);
397
+ const [keys, newState] = parseMultipleKeypresses({ ...this.keyParseState, terminalExpectedResponseTypes }, input);
389
398
  // Gesture latch: a parser-captured SGR mouse prefix (mouseTailHold
390
399
  // transitioned to a value, or the tokenizer's `incomplete` buffer
391
400
  // starts with an SGR prefix) is byte-level evidence of a mouse event
@@ -165,6 +165,41 @@ export type KeyParseState = {
165
165
  * otherwise kill a slow split).
166
166
  */
167
167
  mouseTailHoldAt?: number;
168
+ /**
169
+ * Date.now() of the most recent flush that emitted a lone Escape key from an
170
+ * incomplete terminal sequence. Any text chunk inside the window may be that
171
+ * sequence's delayed tail — the bound is time (TERMINAL_RESPONSE_TAIL_GRACE_MS),
172
+ * not just the chunk that follows the flush.
173
+ */
174
+ terminalResponseTailAfterEscFlushAt?: number;
175
+ /**
176
+ * Date.now() of the FIRST capture of the reply prefix currently held open
177
+ * across flushes (see TERMINAL_RESPONSE_TAIL_GRACE_MS). Later flushes and
178
+ * continuations never renew it; the hold is released — bytes dropped — once
179
+ * it expires or its in-flight claim disappears. Parser-maintained, like
180
+ * mouseTailHoldAt; never host-injected.
181
+ */
182
+ terminalResponseHoldAt?: number;
183
+ /**
184
+ * Parser-maintained reply fragment held across calls after its introducer
185
+ * ESC was already flushed as a standalone key (a ConPTY split that lands
186
+ * mid-tail). The fragment has the synthesized ESC removed; the next text
187
+ * chunk may complete it. It lives only inside the
188
+ * terminalResponseTailAfterEscFlushAt window and is dropped — never
189
+ * emitted as text — once that window closes, the evidence disappears or
190
+ * the fragment stops being reply-shaped.
191
+ */
192
+ terminalResponseReattachTail?: string;
193
+ /**
194
+ * Host-injected, read-only in-flight evidence for terminal-query replies:
195
+ * the response types of the queries still awaiting a reply
196
+ * (querier.pendingResponseTypes). A reply is only claimed while one of
197
+ * these types is both expected and shape-compatible with the bytes; an
198
+ * absent or empty list means no evidence, so the parser never claims a
199
+ * response tail and direct callers keep the pre-gate behavior. The host
200
+ * re-injects it on every call, so a settled query stops counting at once.
201
+ */
202
+ terminalExpectedResponseTypes?: readonly TerminalResponse['type'][];
168
203
  _tokenizer?: Tokenizer;
169
204
  };
170
205
  /** Initial `KeyParseState` for a fresh parser. */
@@ -1 +1 @@
1
- {"version":3,"file":"parse-keypress.d.ts","sourceRoot":"","sources":["../../../src/ink/parse-keypress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-keypress.d.ts","sourceRoot":"","sources":["../../../src/ink/parse-keypress.ts"],"names":[],"mappings":"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"}