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

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 (214) hide show
  1. package/README.md +4 -4
  2. package/bin/dsh-tui.js +26 -4
  3. package/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -13
  4. package/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -59
  5. package/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -15
  6. package/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -32
  7. package/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -59
  8. package/dsh-ecosystem-spec/protocols/tui-channel.js +166 -166
  9. package/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -42
  10. package/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -143
  11. package/dsh-ecosystem-spec/registry/README.md +14 -14
  12. package/dsh-ecosystem-spec/registry/host-descriptor.tui.example.json +56 -56
  13. package/dsh-ecosystem-spec/registry/permissions-0.1.json +13 -13
  14. package/dsh-ecosystem-spec/registry/registry-0.15.json +149 -149
  15. package/lib/types/commands.d.ts.map +1 -1
  16. package/lib/types/commands.js +7 -8
  17. package/lib/types/components/BalanceReportRow.d.ts +24 -0
  18. package/lib/types/components/BalanceReportRow.d.ts.map +1 -0
  19. package/lib/types/components/BalanceReportRow.js +87 -0
  20. package/lib/types/components/HistorySearchDialog.js +1 -1
  21. package/lib/types/components/MessageList.d.ts +3 -1
  22. package/lib/types/components/MessageList.d.ts.map +1 -1
  23. package/lib/types/components/MessageList.js +11 -7
  24. package/lib/types/components/PluginSceneBoundary.d.ts +1 -1
  25. package/lib/types/components/PluginSceneBoundary.js +1 -1
  26. package/lib/types/components/PromptInput.d.ts.map +1 -1
  27. package/lib/types/components/PromptInput.js +16 -0
  28. package/lib/types/components/Whale.d.ts +15 -4
  29. package/lib/types/components/Whale.d.ts.map +1 -1
  30. package/lib/types/components/Whale.js +9 -8
  31. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +7 -1
  32. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  33. package/lib/types/components/messages/AssistantToolUseMessage.js +34 -4
  34. package/lib/types/deepseekBalance.d.ts +53 -0
  35. package/lib/types/deepseekBalance.d.ts.map +1 -0
  36. package/lib/types/deepseekBalance.js +86 -0
  37. package/lib/types/deepseekPricing.d.ts +82 -0
  38. package/lib/types/deepseekPricing.d.ts.map +1 -0
  39. package/lib/types/deepseekPricing.js +133 -0
  40. package/lib/types/dsh-adapter/channel.d.ts +46 -1
  41. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  42. package/lib/types/dsh-adapter/channel.js +84 -10
  43. package/lib/types/dsh-adapter/index.d.ts +5 -0
  44. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  45. package/lib/types/dsh-adapter/index.js +1 -0
  46. package/lib/types/dsh-adapter/packaged-skills.d.ts +9 -0
  47. package/lib/types/dsh-adapter/packaged-skills.d.ts.map +1 -1
  48. package/lib/types/dsh-adapter/packaged-skills.js +19 -4
  49. package/lib/types/dsh-adapter/plugin.d.ts +6 -0
  50. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  51. package/lib/types/dsh-adapter/plugin.js +122 -18
  52. package/lib/types/dsh-adapter/settings-sections.d.ts +1 -0
  53. package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
  54. package/lib/types/dsh-adapter/settings-sections.js +35 -2
  55. package/lib/types/history.d.ts +4 -3
  56. package/lib/types/history.d.ts.map +1 -1
  57. package/lib/types/history.js +66 -18
  58. package/lib/types/i18n.d.ts +122 -55
  59. package/lib/types/i18n.d.ts.map +1 -1
  60. package/lib/types/i18n.js +39 -18
  61. package/lib/types/ink/ink.d.ts.map +1 -1
  62. package/lib/types/ink/ink.js +67 -17
  63. package/lib/types/ink/root.d.ts +16 -0
  64. package/lib/types/ink/root.d.ts.map +1 -1
  65. package/lib/types/ink/root.js +2 -0
  66. package/lib/types/ink/terminal-querier.d.ts +8 -0
  67. package/lib/types/ink/terminal-querier.d.ts.map +1 -1
  68. package/lib/types/ink/terminal-querier.js +13 -0
  69. package/lib/types/ink/terminal.d.ts +42 -0
  70. package/lib/types/ink/terminal.d.ts.map +1 -1
  71. package/lib/types/ink/terminal.js +52 -2
  72. package/lib/types/plugin-spec/registry.d.ts +1 -1
  73. package/lib/types/plugin-spec/registry.js +1 -1
  74. package/lib/types/screens/Chat.d.ts.map +1 -1
  75. package/lib/types/screens/Chat.js +72 -37
  76. package/lib/types/screens/SessionBrowser.d.ts.map +1 -1
  77. package/lib/types/screens/SessionBrowser.js +28 -13
  78. package/lib/types/screens/SessionTree.d.ts.map +1 -1
  79. package/lib/types/screens/SessionTree.js +33 -9
  80. package/lib/types/screens/Settings.d.ts +7 -5
  81. package/lib/types/screens/Settings.d.ts.map +1 -1
  82. package/lib/types/screens/Settings.js +206 -99
  83. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  84. package/lib/types/screens/StatusLine.js +32 -1
  85. package/lib/types/sessionHistory.d.ts +11 -0
  86. package/lib/types/sessionHistory.d.ts.map +1 -1
  87. package/lib/types/sessionHistory.js +29 -0
  88. package/lib/types/sessions/format.d.ts.map +1 -1
  89. package/lib/types/sessions/format.js +14 -4
  90. package/lib/types/tips.js +2 -2
  91. package/lib/types/tuiDisplayPrefs.d.ts +3 -0
  92. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  93. package/lib/types/tuiDisplayPrefs.js +1 -0
  94. package/lib/types/update.d.ts +46 -0
  95. package/lib/types/update.d.ts.map +1 -1
  96. package/lib/types/update.js +232 -3
  97. package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +21 -21
  98. package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +44 -44
  99. package/node_modules/@dsh-std/command/CHANGELOG.md +8 -8
  100. package/node_modules/@dsh-std/command/LICENSE +21 -21
  101. package/node_modules/@dsh-std/command/README.md +26 -26
  102. package/node_modules/@dsh-std/command/README.zh.md +28 -28
  103. package/node_modules/@dsh-std/command/lib/index.js.map +1 -1
  104. package/node_modules/@dsh-std/command/package.json +22 -22
  105. package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  106. package/node_modules/@dsh-std/connection/LICENSE +21 -21
  107. package/node_modules/@dsh-std/connection/README.md +42 -42
  108. package/node_modules/@dsh-std/connection/README.zh.md +42 -42
  109. package/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  110. package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  111. package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  112. package/node_modules/@dsh-std/connection/package.json +20 -20
  113. package/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  114. package/node_modules/@dsh-std/core/LICENSE +21 -21
  115. package/node_modules/@dsh-std/core/README.md +13 -13
  116. package/node_modules/@dsh-std/core/README.zh.md +13 -13
  117. package/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  118. package/node_modules/@dsh-std/core/package.json +21 -21
  119. package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  120. package/node_modules/@dsh-std/manifest/LICENSE +21 -21
  121. package/node_modules/@dsh-std/manifest/README.md +5 -5
  122. package/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  123. package/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  124. package/node_modules/@dsh-std/manifest/package.json +20 -20
  125. package/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  126. package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -8
  127. package/node_modules/@dsh-std/messages/LICENSE +21 -21
  128. package/node_modules/@dsh-std/messages/README.md +5 -5
  129. package/node_modules/@dsh-std/messages/README.zh.md +7 -7
  130. package/node_modules/@dsh-std/messages/lib/index.js.map +1 -1
  131. package/node_modules/@dsh-std/messages/package.json +20 -20
  132. package/node_modules/@dsh-std/messages/schema/message-observer-envelope-0.15.schema.json +54 -54
  133. package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  134. package/node_modules/@dsh-std/presentation/LICENSE +21 -21
  135. package/node_modules/@dsh-std/presentation/README.md +27 -27
  136. package/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  137. package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  138. package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  139. package/node_modules/@dsh-std/presentation/package.json +25 -25
  140. package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -8
  141. package/node_modules/@dsh-std/storage/LICENSE +21 -21
  142. package/node_modules/@dsh-std/storage/README.md +5 -5
  143. package/node_modules/@dsh-std/storage/README.zh.md +7 -7
  144. package/node_modules/@dsh-std/storage/lib/index.js.map +1 -1
  145. package/node_modules/@dsh-std/storage/package.json +20 -20
  146. package/node_modules/@dsh-std/storage/schema/local-storage-0.15.schema.json +56 -56
  147. package/package.json +95 -5
  148. package/skills/pr-comments/SKILL.md +1 -1
  149. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  150. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/LICENSE +21 -21
  151. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.md +42 -42
  152. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.zh.md +42 -42
  153. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  154. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  155. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  156. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +20 -20
  157. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  158. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/LICENSE +21 -21
  159. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.md +13 -13
  160. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.zh.md +13 -13
  161. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  162. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +21 -21
  163. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  164. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/LICENSE +21 -21
  165. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.md +5 -5
  166. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  167. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  168. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +20 -20
  169. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  170. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  171. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/LICENSE +21 -21
  172. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +27 -27
  173. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  174. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  175. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  176. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +25 -25
  177. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  178. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/LICENSE +21 -21
  179. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.md +13 -13
  180. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.zh.md +13 -13
  181. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  182. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +21 -21
  183. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  184. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/LICENSE +21 -21
  185. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.md +13 -13
  186. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.zh.md +13 -13
  187. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  188. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +21 -21
  189. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  190. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/LICENSE +21 -21
  191. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.md +13 -13
  192. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.zh.md +13 -13
  193. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  194. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +21 -21
  195. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  196. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/LICENSE +21 -21
  197. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.md +42 -42
  198. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.zh.md +42 -42
  199. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  200. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  201. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  202. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +20 -20
  203. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  204. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/LICENSE +21 -21
  205. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.md +13 -13
  206. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.zh.md +13 -13
  207. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  208. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +21 -21
  209. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  210. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/LICENSE +21 -21
  211. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.md +13 -13
  212. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.zh.md +13 -13
  213. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  214. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/package.json +21 -21
@@ -250,8 +250,8 @@ declare const dict: {
250
250
  readonly en: "(not initialized)";
251
251
  };
252
252
  readonly 'doctor-legacy-dir': {
253
- readonly zh: "旧数据目录: ~/.dsh-tui 仍存在(已迁移到 ~/.dsh-tui,确认无误后可自行删除)";
254
- readonly en: "Legacy data directory: ~/.dsh-tui still exists (migrated to ~/.dsh-tui; delete it yourself once satisfied)";
253
+ readonly zh: "旧数据目录: ~/.dsh-cc 仍存在(已迁移到 ~/.dsh-tui,确认无误后可自行删除)";
254
+ readonly en: "Legacy data directory: ~/.dsh-cc still exists (migrated to ~/.dsh-tui; delete it yourself once satisfied)";
255
255
  };
256
256
  readonly 'subagent-not-mounted': {
257
257
  readonly zh: "子代理服务未挂载(leaf 未启用 subagent)";
@@ -677,34 +677,6 @@ declare const dict: {
677
677
  readonly zh: "技能 {{name}} 已不可用或未开放用户直调";
678
678
  readonly en: "Skill {{name}} is gone or not user-invocable";
679
679
  };
680
- readonly 'skill-audit-prompt': {
681
- readonly zh: "请使用 audit 技能对当前项目做一次全面的代码审计,找出安全、正确性与质量问题。";
682
- readonly en: "Use the audit skill to do a thorough code audit of the current project, finding security, correctness and quality issues.";
683
- };
684
- readonly 'skill-bug-prompt': {
685
- readonly zh: "请使用 bug 技能协助我记录一份完整的 bug 报告(现象、复现步骤、期望行为)。";
686
- readonly en: "Use the bug skill to help me write a complete bug report (symptoms, reproduction steps, expected behavior).";
687
- };
688
- readonly 'skill-practice-prompt': {
689
- readonly zh: "请使用 practice 技能陪我进行一轮编程练习。";
690
- readonly en: "Use the practice skill to run a round of programming practice with me.";
691
- };
692
- readonly 'skill-review-prompt': {
693
- readonly zh: "请使用 review 技能对当前项目做一次全面的代码评审。";
694
- readonly en: "Use the review skill to do a thorough code review of the current project.";
695
- };
696
- readonly 'skill-pr-comments-prompt': {
697
- readonly zh: "请使用 pr-comments 技能审查当前分支的拉取请求评论并给出改进建议。";
698
- readonly en: "Use the pr-comments skill to review pull request comments on the current branch and suggest improvements.";
699
- };
700
- readonly 'skill-release-notes-prompt': {
701
- readonly zh: "请使用 release-notes 技能为当前项目生成发布说明。";
702
- readonly en: "Use the release-notes skill to generate release notes for the current project.";
703
- };
704
- readonly 'skill-vuln-check-prompt': {
705
- readonly zh: "请使用 vuln-check 技能对当前项目做一次安全漏洞检查。";
706
- readonly en: "Use the vuln-check skill to run a security vulnerability check on the current project.";
707
- };
708
680
  readonly 'context-loaded': {
709
681
  readonly zh: "已加载上下文";
710
682
  readonly en: "Context loaded";
@@ -945,6 +917,102 @@ declare const dict: {
945
917
  readonly zh: "注:DSH 不提供 API 费用计量,以上为 token 用量(按 provider 账单计费)";
946
918
  readonly en: "Note: DSH provides no API cost metering; the above is token usage (billed by your provider)";
947
919
  };
920
+ readonly 'status-cost-label': {
921
+ readonly zh: "≈";
922
+ readonly en: "≈";
923
+ };
924
+ readonly 'status-cost-note': {
925
+ readonly zh: "估算(官方单价,非账单)";
926
+ readonly en: "estimate (official rates, not a bill)";
927
+ };
928
+ readonly 'cost-peak-name': {
929
+ readonly zh: "梁文峰";
930
+ readonly en: "peak";
931
+ };
932
+ readonly 'cost-idle-name': {
933
+ readonly zh: "梁文谷";
934
+ readonly en: "idle";
935
+ };
936
+ readonly 'cost-now-peak': {
937
+ readonly zh: "峰";
938
+ readonly en: "peak";
939
+ };
940
+ readonly 'cost-now-idle': {
941
+ readonly zh: "谷";
942
+ readonly en: "idle";
943
+ };
944
+ readonly 'balance-summary-loading': {
945
+ readonly zh: "DeepSeek 余额 · 查询中…";
946
+ readonly en: "DeepSeek balance · querying…";
947
+ };
948
+ readonly 'balance-summary-ok': {
949
+ readonly zh: "DeepSeek 余额 ¥{{total}} · {{state}}";
950
+ readonly en: "DeepSeek balance ¥{{total}} · {{state}}";
951
+ };
952
+ readonly 'balance-summary-state-ok': {
953
+ readonly zh: "可用";
954
+ readonly en: "available";
955
+ };
956
+ readonly 'balance-summary-state-off': {
957
+ readonly zh: "不可用";
958
+ readonly en: "unavailable";
959
+ };
960
+ readonly 'balance-summary-fail': {
961
+ readonly zh: "DeepSeek 余额 · 查询失败";
962
+ readonly en: "DeepSeek balance · query failed";
963
+ };
964
+ readonly 'balance-currency': {
965
+ readonly zh: "{{currency}} 总额 ¥{{total}} · 赠送 ¥{{granted}} · 充值 ¥{{toppedUp}}";
966
+ readonly en: "{{currency}} total ¥{{total}} · granted ¥{{granted}} · topped up ¥{{toppedUp}}";
967
+ };
968
+ readonly 'balance-no-key': {
969
+ readonly zh: "未配置 DeepSeek API key(DEEPSEEK_API_KEY)";
970
+ readonly en: "No DeepSeek API key configured (DEEPSEEK_API_KEY)";
971
+ };
972
+ readonly 'balance-unauthorized': {
973
+ readonly zh: "认证失败——key 无效或已被撤销";
974
+ readonly en: "Authentication failed — the key is invalid or revoked";
975
+ };
976
+ readonly 'balance-network-error': {
977
+ readonly zh: "网络错误或请求超时";
978
+ readonly en: "Network error or request timeout";
979
+ };
980
+ readonly 'balance-http-error': {
981
+ readonly zh: "余额接口返回 HTTP {{status}}";
982
+ readonly en: "Balance endpoint returned HTTP {{status}}";
983
+ };
984
+ readonly 'balance-invalid': {
985
+ readonly zh: "余额接口响应格式异常";
986
+ readonly en: "Unexpected balance endpoint response";
987
+ };
988
+ readonly 'balance-fail-hint': {
989
+ readonly zh: "仅 DeepSeek 官方 API key 可查询;/login 可查看凭据状态";
990
+ readonly en: "Only a DeepSeek official API key can be queried; /login shows credential status";
991
+ };
992
+ readonly 'balance-hover-tokens': {
993
+ readonly zh: "本会话 tokens {{input}} in → {{output}} out · ≈¥{{cost}}({{peakName}} ¥{{peak}} / {{idleName}} ¥{{idle}})";
994
+ readonly en: "Session tokens {{input}} in → {{output}} out · ≈¥{{cost}} ({{peakName}} ¥{{peak}} / {{idleName}} ¥{{idle}})";
995
+ };
996
+ readonly 'balance-current-rate': {
997
+ readonly zh: "当前时段:{{name}} · 输入 ¥{{input}}/百万 · 输出 ¥{{output}}/百万";
998
+ readonly en: "Current window: {{name}} · input ¥{{input}}/M · output ¥{{output}}/M";
999
+ };
1000
+ readonly 'balance-refresh': {
1001
+ readonly zh: "点击刷新";
1002
+ readonly en: "click to refresh";
1003
+ };
1004
+ readonly 'balance-retry': {
1005
+ readonly zh: "点击重试";
1006
+ readonly en: "click to retry";
1007
+ };
1008
+ readonly 'balance-close': {
1009
+ readonly zh: "关闭";
1010
+ readonly en: "dismiss";
1011
+ };
1012
+ readonly 'balance-hint': {
1013
+ readonly zh: "余额查询免费 · 以 DeepSeek 平台为准";
1014
+ readonly en: "balance queries are free · authoritative on the DeepSeek platform";
1015
+ };
948
1016
  readonly 'doctor-example-config': {
949
1017
  readonly zh: "示例配置 {{path}}";
950
1018
  readonly en: "Example config {{path}}";
@@ -1161,6 +1229,14 @@ declare const dict: {
1161
1229
  readonly zh: "镜像 registry 滞后:本次安装 v{{latest}};官方最新 v{{authoritative}},镜像同步后可再 /update。";
1162
1230
  readonly en: "Mirror registry lag: installing v{{latest}} now; official latest is v{{authoritative}} — run /update again once the mirror syncs.";
1163
1231
  };
1232
+ readonly 'update-standalone-available': {
1233
+ readonly zh: "发现便携包新版本:v{{latest}}(当前 v{{current}})· 输入 /update 自动更新";
1234
+ readonly en: "New standalone version available: v{{latest}} (current v{{current}}) · type /update to update";
1235
+ };
1236
+ readonly 'update-standalone-starting': {
1237
+ readonly zh: "正在下载便携包新版本并自动替换,完成后会自动重启并恢复当前会话……";
1238
+ readonly en: "Downloading and replacing standalone binary. The TUI will restart and resume this session when finished…";
1239
+ };
1164
1240
  readonly 'reload-header': {
1165
1241
  readonly zh: "已重读偏好文件:";
1166
1242
  readonly en: "Preferences reloaded:";
@@ -1382,8 +1458,8 @@ declare const dict: {
1382
1458
  readonly en: "{{usage}} · {{percent}}% of context";
1383
1459
  };
1384
1460
  readonly 'legacy-dir-migrated': {
1385
- readonly zh: "数据目录已从 ~/.dsh-tui 复制到 ~/.dsh-tui(旧目录保留,确认无误后可自行删除)";
1386
- readonly en: "Data directory copied from ~/.dsh-tui to ~/.dsh-tui (the old directory is kept; delete it yourself once satisfied)";
1461
+ readonly zh: "数据目录已从 ~/.dsh-cc 复制到 ~/.dsh-tui(旧目录保留,确认无误后可自行删除)";
1462
+ readonly en: "Data directory copied from ~/.dsh-cc to ~/.dsh-tui (the old directory is kept; delete it yourself once satisfied)";
1387
1463
  };
1388
1464
  readonly 'legacy-env-renamed': {
1389
1465
  readonly zh: "环境变量 {{old}} 已更名为 {{new}},旧名不再生效";
@@ -1809,18 +1885,6 @@ declare const dict: {
1809
1885
  readonly zh: "命名空间未注册";
1810
1886
  readonly en: "namespace not served";
1811
1887
  };
1812
- readonly 'settings-readonly-heading': {
1813
- readonly zh: "其他设置命名空间(只读)";
1814
- readonly en: "Other settings namespaces (read-only)";
1815
- };
1816
- readonly 'settings-readonly-hint': {
1817
- readonly zh: "以上命名空间尚无 TUI 设置区块,可手工编辑 {{path}}";
1818
- readonly en: "No TUI section for these namespaces yet — edit {{path}} by hand";
1819
- };
1820
- readonly 'settings-badge-override': {
1821
- readonly zh: "已覆盖";
1822
- readonly en: "overridden";
1823
- };
1824
1888
  readonly 'settings-badge-restart': {
1825
1889
  readonly zh: "重启生效";
1826
1890
  readonly en: "applies on restart";
@@ -1837,6 +1901,10 @@ declare const dict: {
1837
1901
  readonly zh: "保存失败";
1838
1902
  readonly en: "save failed";
1839
1903
  };
1904
+ readonly 'settings-field-customized': {
1905
+ readonly zh: "已自定义";
1906
+ readonly en: "customized";
1907
+ };
1840
1908
  readonly 'settings-field-empty': {
1841
1909
  readonly zh: "(未设置)";
1842
1910
  readonly en: "(unset)";
@@ -1865,21 +1933,17 @@ declare const dict: {
1865
1933
  readonly zh: "保存 {{ns}} 失败——请重试";
1866
1934
  readonly en: "Saving {{ns}} failed — please retry";
1867
1935
  };
1868
- readonly 'settings-discarded': {
1869
- readonly zh: "已放弃所有未保存的修改";
1870
- readonly en: "Discarded all unsaved edits";
1871
- };
1872
1936
  readonly 'settings-hint-list': {
1873
- readonly zh: "**Enter** 进入/编辑/切换 · s 保存 · d 放弃 · Esc 放弃/退出";
1874
- readonly en: "**Enter** open/edit/toggle · s save · d discard · Esc discard/exit";
1937
+ readonly zh: "**Enter** 进入/编辑/切换(改动即保存) · Esc 退出";
1938
+ readonly en: "**Enter** open/edit/toggle (auto-saves) · Esc exit";
1875
1939
  };
1876
1940
  readonly 'settings-hint-group': {
1877
- readonly zh: "**Enter** 编辑/切换 · s 保存 · d 放弃 · Esc 返回";
1878
- readonly en: "**Enter** edit/toggle · s save · d discard · Esc back";
1941
+ readonly zh: "**Enter** 编辑/切换(改动即保存) · Esc 返回";
1942
+ readonly en: "**Enter** edit/toggle (auto-saves) · Esc back";
1879
1943
  };
1880
1944
  readonly 'settings-hint-edit': {
1881
- readonly zh: "**Enter** 确认 · Esc 取消";
1882
- readonly en: "**Enter** to confirm · Esc to cancel";
1945
+ readonly zh: "**Enter** 确认并保存 · Esc 取消";
1946
+ readonly en: "**Enter** to confirm & save · Esc to cancel";
1883
1947
  };
1884
1948
  readonly 'session-loading': {
1885
1949
  readonly zh: "正在读取会话…";
@@ -2965,6 +3029,9 @@ declare const dict: {
2965
3029
  readonly 'cmd-desc-cost': {
2966
3030
  readonly zh: "查看会话 token 用量";
2967
3031
  };
3032
+ readonly 'cmd-desc-balance': {
3033
+ readonly zh: "查看 DeepSeek 账户余额";
3034
+ };
2968
3035
  readonly 'cmd-desc-config': {
2969
3036
  readonly zh: "查看 dsh-tui 配置来源";
2970
3037
  };
@@ -3046,7 +3113,7 @@ declare const dict: {
3046
3113
  readonly 'cmd-desc-review': {
3047
3114
  readonly zh: "对当前项目做全面代码评审";
3048
3115
  };
3049
- readonly 'cmd-desc-pr_comments': {
3116
+ readonly 'cmd-desc-pr-comments': {
3050
3117
  readonly zh: "审查拉取请求评论";
3051
3118
  };
3052
3119
  readonly 'cmd-desc-release-notes': {
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAw9B0D,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,CAQ1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC"}
package/lib/types/i18n.js CHANGED
@@ -84,7 +84,7 @@ const dict = {
84
84
  'doctor-config-missing': { zh: '(不存在)', en: '(missing)' },
85
85
  'doctor-storage': { zh: '会话存储: {{dir}} {{state}}', en: 'Session storage: {{dir}} {{state}}' },
86
86
  'doctor-storage-uninit': { zh: '(未初始化)', en: '(not initialized)' },
87
- 'doctor-legacy-dir': { zh: '旧数据目录: ~/.dsh-tui 仍存在(已迁移到 ~/.dsh-tui,确认无误后可自行删除)', en: 'Legacy data directory: ~/.dsh-tui still exists (migrated to ~/.dsh-tui; delete it yourself once satisfied)' },
87
+ 'doctor-legacy-dir': { zh: '旧数据目录: ~/.dsh-cc 仍存在(已迁移到 ~/.dsh-tui,确认无误后可自行删除)', en: 'Legacy data directory: ~/.dsh-cc still exists (migrated to ~/.dsh-tui; delete it yourself once satisfied)' },
88
88
  'subagent-not-mounted': { zh: '子代理服务未挂载(leaf 未启用 subagent)', en: 'Subagent service not mounted (leaf has no subagent)' },
89
89
  'subagent-none': { zh: '当前会话暂无子代理', en: 'No subagents in the current session' },
90
90
  'subagent-resumable': { zh: '可续', en: 'resumable' },
@@ -201,13 +201,6 @@ const dict = {
201
201
  'context-tools': { zh: '工具 {{n}}', en: 'Tools {{n}}' },
202
202
  // ── screens/Chat.tsx ────────────────────────────────────────────────
203
203
  'skill-unavailable': { zh: '技能 {{name}} 已不可用或未开放用户直调', en: 'Skill {{name}} is gone or not user-invocable' },
204
- 'skill-audit-prompt': { zh: '请使用 audit 技能对当前项目做一次全面的代码审计,找出安全、正确性与质量问题。', en: 'Use the audit skill to do a thorough code audit of the current project, finding security, correctness and quality issues.' },
205
- 'skill-bug-prompt': { zh: '请使用 bug 技能协助我记录一份完整的 bug 报告(现象、复现步骤、期望行为)。', en: 'Use the bug skill to help me write a complete bug report (symptoms, reproduction steps, expected behavior).' },
206
- 'skill-practice-prompt': { zh: '请使用 practice 技能陪我进行一轮编程练习。', en: 'Use the practice skill to run a round of programming practice with me.' },
207
- 'skill-review-prompt': { zh: '请使用 review 技能对当前项目做一次全面的代码评审。', en: 'Use the review skill to do a thorough code review of the current project.' },
208
- 'skill-pr-comments-prompt': { zh: '请使用 pr-comments 技能审查当前分支的拉取请求评论并给出改进建议。', en: 'Use the pr-comments skill to review pull request comments on the current branch and suggest improvements.' },
209
- 'skill-release-notes-prompt': { zh: '请使用 release-notes 技能为当前项目生成发布说明。', en: 'Use the release-notes skill to generate release notes for the current project.' },
210
- 'skill-vuln-check-prompt': { zh: '请使用 vuln-check 技能对当前项目做一次安全漏洞检查。', en: 'Use the vuln-check skill to run a security vulnerability check on the current project.' },
211
204
  'context-loaded': { zh: '已加载上下文', en: 'Context loaded' },
212
205
  'context-panel-expand': { zh: '展开', en: 'Expand' },
213
206
  'context-panel-collapse': { zh: '折叠', en: 'Collapse' },
@@ -268,6 +261,33 @@ const dict = {
268
261
  'status-title': { zh: '标题 {{title}}', en: 'Title {{title}}' },
269
262
  'cost-cache-hit-rate': { zh: '缓存命中率 {{rate}}% · 缓存 {{read}} 读 / {{write}} 写', en: 'Cache hit rate {{rate}}% · cache {{read}} read / {{write}} write' },
270
263
  'cost-note': { zh: '注:DSH 不提供 API 费用计量,以上为 token 用量(按 provider 账单计费)', en: 'Note: DSH provides no API cost metering; the above is token usage (billed by your provider)' },
264
+ 'status-cost-label': { zh: '≈', en: '≈' },
265
+ 'status-cost-note': { zh: '估算(官方单价,非账单)', en: 'estimate (official rates, not a bill)' },
266
+ // 高峰/空闲时段名(用户玩梗命名:高峰=梁文峰,低谷=梁文谷)
267
+ 'cost-peak-name': { zh: '梁文峰', en: 'peak' },
268
+ 'cost-idle-name': { zh: '梁文谷', en: 'idle' },
269
+ // 状态栏字段上的当前时段短标记(峰/谷)
270
+ 'cost-now-peak': { zh: '峰', en: 'peak' },
271
+ 'cost-now-idle': { zh: '谷', en: 'idle' },
272
+ // /balance:DeepSeek 官方余额查询(BalanceReportRow 组件)
273
+ 'balance-summary-loading': { zh: 'DeepSeek 余额 · 查询中…', en: 'DeepSeek balance · querying…' },
274
+ 'balance-summary-ok': { zh: 'DeepSeek 余额 ¥{{total}} · {{state}}', en: 'DeepSeek balance ¥{{total}} · {{state}}' },
275
+ 'balance-summary-state-ok': { zh: '可用', en: 'available' },
276
+ 'balance-summary-state-off': { zh: '不可用', en: 'unavailable' },
277
+ 'balance-summary-fail': { zh: 'DeepSeek 余额 · 查询失败', en: 'DeepSeek balance · query failed' },
278
+ 'balance-currency': { zh: '{{currency}} 总额 ¥{{total}} · 赠送 ¥{{granted}} · 充值 ¥{{toppedUp}}', en: '{{currency}} total ¥{{total}} · granted ¥{{granted}} · topped up ¥{{toppedUp}}' },
279
+ 'balance-no-key': { zh: '未配置 DeepSeek API key(DEEPSEEK_API_KEY)', en: 'No DeepSeek API key configured (DEEPSEEK_API_KEY)' },
280
+ 'balance-unauthorized': { zh: '认证失败——key 无效或已被撤销', en: 'Authentication failed — the key is invalid or revoked' },
281
+ 'balance-network-error': { zh: '网络错误或请求超时', en: 'Network error or request timeout' },
282
+ 'balance-http-error': { zh: '余额接口返回 HTTP {{status}}', en: 'Balance endpoint returned HTTP {{status}}' },
283
+ 'balance-invalid': { zh: '余额接口响应格式异常', en: 'Unexpected balance endpoint response' },
284
+ 'balance-fail-hint': { zh: '仅 DeepSeek 官方 API key 可查询;/login 可查看凭据状态', en: 'Only a DeepSeek official API key can be queried; /login shows credential status' },
285
+ 'balance-hover-tokens': { zh: '本会话 tokens {{input}} in → {{output}} out · ≈¥{{cost}}({{peakName}} ¥{{peak}} / {{idleName}} ¥{{idle}})', en: 'Session tokens {{input}} in → {{output}} out · ≈¥{{cost}} ({{peakName}} ¥{{peak}} / {{idleName}} ¥{{idle}})' },
286
+ 'balance-current-rate': { zh: '当前时段:{{name}} · 输入 ¥{{input}}/百万 · 输出 ¥{{output}}/百万', en: 'Current window: {{name}} · input ¥{{input}}/M · output ¥{{output}}/M' },
287
+ 'balance-refresh': { zh: '点击刷新', en: 'click to refresh' },
288
+ 'balance-retry': { zh: '点击重试', en: 'click to retry' },
289
+ 'balance-close': { zh: '关闭', en: 'dismiss' },
290
+ 'balance-hint': { zh: '余额查询免费 · 以 DeepSeek 平台为准', en: 'balance queries are free · authoritative on the DeepSeek platform' },
271
291
  'doctor-example-config': { zh: '示例配置 {{path}}', en: 'Example config {{path}}' },
272
292
  'doctor-user-config': { zh: '用户配置 {{path}}', en: 'User config {{path}}' },
273
293
  'doctor-launch-hint': { zh: '启动方式 dsh-tui.cmd / dsh --profile dsh-tui', en: 'Launch dsh-tui.cmd / dsh --profile dsh-tui' },
@@ -323,6 +343,8 @@ const dict = {
323
343
  'update-check-failed': { zh: '无法确认新版本(网络或 registry 不可达),已尝试直接更新……', en: 'Could not confirm a newer version (network or registry unreachable); attempting the update anyway…' },
324
344
  'update-refused-deadlock': { zh: '已取消更新:镜像 registry 目前只能装到 v{{latest}},而该版本在旧全局启动器的 patch 下会启动死锁(#183/#307);官方最新为 v{{authoritative}},待镜像同步后再 /update。', en: 'Update cancelled: the mirror registry can only serve v{{latest}}, which deadlocks boot under older global-launcher patches (#183/#307); official latest is v{{authoritative}} — retry /update after the mirror syncs.' },
325
345
  'update-mirror-lag': { zh: '镜像 registry 滞后:本次安装 v{{latest}};官方最新 v{{authoritative}},镜像同步后可再 /update。', en: 'Mirror registry lag: installing v{{latest}} now; official latest is v{{authoritative}} — run /update again once the mirror syncs.' },
346
+ 'update-standalone-available': { zh: '发现便携包新版本:v{{latest}}(当前 v{{current}})· 输入 /update 自动更新', en: 'New standalone version available: v{{latest}} (current v{{current}}) · type /update to update' },
347
+ 'update-standalone-starting': { zh: '正在下载便携包新版本并自动替换,完成后会自动重启并恢复当前会话……', en: 'Downloading and replacing standalone binary. The TUI will restart and resume this session when finished…' },
326
348
  // ── /reload (pi-style soft reload) ────────────────────────────────────
327
349
  'reload-header': { zh: '已重读偏好文件:', en: 'Preferences reloaded:' },
328
350
  'reload-applied': { zh: '{{kind}} {{from}} → {{to}}(已应用)', en: '{{kind}} {{from}} → {{to}} (applied)' },
@@ -381,7 +403,7 @@ const dict = {
381
403
  'tokens-usage': { zh: 'Tokens:{{in}} 输入 · {{out}} 输出', en: 'Tokens: {{in}} in · {{out}} out' },
382
404
  'tokens-usage-context': { zh: '{{usage}} · 上下文 {{percent}}%', en: '{{usage}} · {{percent}}% of context' },
383
405
  // ── plugin.ts — boot-time rename notices (issue #120) ───────────────
384
- 'legacy-dir-migrated': { zh: '数据目录已从 ~/.dsh-tui 复制到 ~/.dsh-tui(旧目录保留,确认无误后可自行删除)', en: 'Data directory copied from ~/.dsh-tui to ~/.dsh-tui (the old directory is kept; delete it yourself once satisfied)' },
406
+ 'legacy-dir-migrated': { zh: '数据目录已从 ~/.dsh-cc 复制到 ~/.dsh-tui(旧目录保留,确认无误后可自行删除)', en: 'Data directory copied from ~/.dsh-cc to ~/.dsh-tui (the old directory is kept; delete it yourself once satisfied)' },
385
407
  'legacy-env-renamed': { zh: '环境变量 {{old}} 已更名为 {{new}},旧名不再生效', en: 'Environment variable {{old}} was renamed to {{new}}; the old name no longer takes effect' },
386
408
  // ── plugin.ts — /update flow ───────────────────────────────────────
387
409
  'update-aborted-no-profile': { zh: 'dsh-tui 更新中止:未解析到 dsh profile。', en: 'dsh-tui update aborted: no dsh profile resolved.' },
@@ -529,13 +551,11 @@ const dict = {
529
551
  'settings-empty': { zh: '没有可配置的插件设置(尚无插件注册设置区块)', en: 'No configurable plugin settings (no plugin has registered a section)' },
530
552
  'settings-group-empty': { zh: '此分组没有可配置字段', en: 'No configurable fields in this group' },
531
553
  'settings-section-unavailable': { zh: '命名空间未注册', en: 'namespace not served' },
532
- 'settings-readonly-heading': { zh: '其他设置命名空间(只读)', en: 'Other settings namespaces (read-only)' },
533
- 'settings-readonly-hint': { zh: '以上命名空间尚无 TUI 设置区块,可手工编辑 {{path}}', en: 'No TUI section for these namespaces yet — edit {{path}} by hand' },
534
- 'settings-badge-override': { zh: '已覆盖', en: 'overridden' },
535
554
  'settings-badge-restart': { zh: '重启生效', en: 'applies on restart' },
536
555
  'settings-badge-dirty': { zh: '未保存', en: 'unsaved' },
537
556
  'settings-badge-saving': { zh: '保存中', en: 'saving' },
538
557
  'settings-badge-failed': { zh: '保存失败', en: 'save failed' },
558
+ 'settings-field-customized': { zh: '已自定义', en: 'customized' },
539
559
  'settings-field-empty': { zh: '(未设置)', en: '(unset)' },
540
560
  'settings-field-invalid': { zh: '无效输入', en: 'invalid' },
541
561
  'settings-secret-set': { zh: '●●●●●●(已配置)', en: '●●●●●● (configured)' },
@@ -543,10 +563,9 @@ const dict = {
543
563
  'settings-secret-staged': { zh: '(待保存)', en: '(pending save)' },
544
564
  'settings-saved': { zh: '已保存 {{ns}}', en: 'Saved {{ns}}' },
545
565
  'settings-save-failed': { zh: '保存 {{ns}} 失败——请重试', en: 'Saving {{ns}} failed — please retry' },
546
- 'settings-discarded': { zh: '已放弃所有未保存的修改', en: 'Discarded all unsaved edits' },
547
- 'settings-hint-list': { zh: '**Enter** 进入/编辑/切换 · s 保存 · d 放弃 · Esc 放弃/退出', en: '**Enter** open/edit/toggle · s save · d discard · Esc discard/exit' },
548
- 'settings-hint-group': { zh: '**Enter** 编辑/切换 · s 保存 · d 放弃 · Esc 返回', en: '**Enter** edit/toggle · s save · d discard · Esc back' },
549
- 'settings-hint-edit': { zh: '**Enter** 确认 · Esc 取消', en: '**Enter** to confirm · Esc to cancel' },
566
+ 'settings-hint-list': { zh: '**Enter** 进入/编辑/切换(改动即保存) · Esc 退出', en: '**Enter** open/edit/toggle (auto-saves) · Esc exit' },
567
+ 'settings-hint-group': { zh: '**Enter** 编辑/切换(改动即保存) · Esc 返回', en: '**Enter** edit/toggle (auto-saves) · Esc back' },
568
+ 'settings-hint-edit': { zh: '**Enter** 确认并保存 · Esc 取消', en: '**Enter** to confirm & save · Esc to cancel' },
550
569
  // ── 会话浏览器:行、计数、筛选、预览 ───────────────────────────────
551
570
  'session-loading': { zh: '正在读取会话…', en: 'Reading sessions…' },
552
571
  'session-list-failed': { zh: '无法读取会话列表 · {{err}}', en: 'Could not read the session list · {{err}}' },
@@ -857,6 +876,7 @@ const dict = {
857
876
  'cmd-desc-context': { zh: '查看已加载的上下文明细' },
858
877
  'cmd-desc-status': { zh: '查看会话状态' },
859
878
  'cmd-desc-cost': { zh: '查看会话 token 用量' },
879
+ 'cmd-desc-balance': { zh: '查看 DeepSeek 账户余额' },
860
880
  'cmd-desc-config': { zh: '查看 dsh-tui 配置来源' },
861
881
  'cmd-desc-reload': { zh: '重读偏好文件并立即生效' },
862
882
  'cmd-desc-settings': { zh: '查看和编辑插件设置' },
@@ -882,12 +902,13 @@ const dict = {
882
902
  'cmd-desc-skills': { zh: '列出所有可用技能' },
883
903
  'cmd-desc-plugins': { zh: '显示插件契约、授权与台账诊断' },
884
904
  'cmd-desc-update': { zh: '更新 dsh-tui 并重启' },
885
- // Built-in skills
905
+ // Built-in skills(注册名与打包 SKILL.md 对齐;这些键经
906
+ // localizedDescription 的 cmd-desc-<name> 回退服务于直调命令条目)
886
907
  'cmd-desc-audit': { zh: '对当前项目做全面代码审计' },
887
908
  'cmd-desc-bug': { zh: '记录一份 bug 报告' },
888
909
  'cmd-desc-practice': { zh: '与 dsh-tui 进行编程练习' },
889
910
  'cmd-desc-review': { zh: '对当前项目做全面代码评审' },
890
- 'cmd-desc-pr_comments': { zh: '审查拉取请求评论' },
911
+ 'cmd-desc-pr-comments': { zh: '审查拉取请求评论' },
891
912
  'cmd-desc-release-notes': { zh: '生成发布说明' },
892
913
  'cmd-desc-vuln-check': { zh: '运行安全漏洞检查' },
893
914
  // Misc
@@ -1 +1 @@
1
- {"version":3,"file":"ink.d.ts","sourceRoot":"","sources":["../../../src/ink/ink.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAa9C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AASrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAA4B,KAAK,aAAa,EAAiB,MAAM,uBAAuB,CAAC;AAIpG,OAAO,EAAqG,KAAK,SAAS,EAAwF,KAAK,cAAc,EAAqH,MAAM,gBAAgB,CAAC;AAiCjX,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC,CAAC;AACF,MAAM,CAAC,OAAO,OAAO,GAAG;IA6HV,OAAO,CAAC,QAAQ,CAAC,OAAO;IA5HpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,GAAG,CAAoB;IAC/B,OAAO,CAAC,cAAc,CAEpB;IAEF,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAiB;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAa;IACrD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,UAAU,CAA8C;IAGhE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,uBAAuB,CAAuB;IACtD,OAAO,CAAC,gBAAgB,CAYtB;IACF,OAAO,CAAC,kBAAkB,CAGvB;IAIH,QAAQ,CAAC,SAAS,EAAE,cAAc,CAA0B;IAG5D,OAAO,CAAC,oBAAoB,CAAM;IAOlC,OAAO,CAAC,eAAe,CAIP;IAIhB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAyB;IAI5D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAK1D,OAAO,CAAC,eAAe,CAAS;IAGhC,OAAO,CAAC,sBAAsB,CAAS;IAKvC,OAAO,CAAC,oBAAoB,CAKZ;IAMhB,OAAO,CAAC,qBAAqB,CAAS;IAMtC,OAAO,CAAC,qBAAqB,CAAS;IAMtC,OAAO,CAAC,iBAAiB,CAAkC;IAK3D,OAAO,CAAC,aAAa,CAGL;IAChB,OAAO,CAAC,gBAAgB;gBAMK,OAAO,EAAE,OAAO;IAmH7C,OAAO,CAAC,YAAY,CAqBlB;IAQF,OAAO,CAAC,YAAY,CAyElB;IACF,kBAAkB,EAAE,MAAM,IAAI,CAAY;IAC1C,iBAAiB,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,IAAI,CAAY;IACvD,eAAe,EAAE,MAAM,IAAI,CAAY;IAEvC;;;;;OAKG;IACH,oBAAoB,IAAI,IAAI;IAyB5B;;;;;;;;;;;OAWG;IACH,mBAAmB,IAAI,IAAI;IAuD3B;;;;;;;;;;;;OAYG;IACH,gBAAgB;IAKhB,0EAA0E;IAC1E,OAAO,CAAC,SAAS;IAYjB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,aAAa;IAiBrB,QAAQ;IAkaR,KAAK,IAAI,IAAI;IAOb,MAAM,IAAI,IAAI;IAKd;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAUf;;;;;;;OAOG;IACH,WAAW,IAAI,IAAI;IAmBnB;;;;;;;OAOG;IACH,wBAAwB,IAAI,IAAI;IAgBhC;;;;;;;;;OASG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;;;;;OAMG;IACH,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,UAAQ,GAAG,IAAI;IAsChE,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,qBAAqB,GAAI,0BAAwB,KAAG,IAAI,CAuCtD;IAEF;;;;;;;;;;OAUG;IACH,iBAAiB,IAAI,IAAI;IAoDzB;;;;;;;;;OASG;IACH,qBAAqB,IAAI,IAAI;IAqB7B,sBAAsB;IACtB,UAAU,IAAI,IAAI;IAIlB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,iBAAiB,CAAK;IAC9B,oBAAoB,QAAO,IAAI,CAoB7B;IAEF,wEAAwE;IACxE,wBAAwB,GAAI,SAAS,OAAO,KAAG,IAAI,CAEjD;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;;;OAIG;IACH,oBAAoB,IAAI,MAAM;IAa9B;;;OAGG;IACH,aAAa,IAAI,MAAM;IAQvB,wDAAwD;IACxD,kBAAkB,IAAI,IAAI;IAM1B;;;;;;OAMG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMvC;;;;;;;;;wEASoE;IACpE,kBAAkB,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,GAAG,aAAa,EAAE;IAgCvD;;;;iEAI6D;IAC7D,kBAAkB,CAAC,KAAK,EAAE;QACxB,SAAS,EAAE,aAAa,EAAE,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,GAAG,IAAI;IAKf;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoBxC;;;;;OAKG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAIrF;;;;;;OAMG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY3E;;;;;;;OAOG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IA+CzC,iDAAiD;IACjD,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAItD,OAAO,CAAC,qBAAqB;IAK7B;;;;;;;;OAQG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,OAAO;IAe5D;;;;;;OAMG;IACH,eAAe,CACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,SAAI,EACV,MAAM,SAAI,GACT,OAAO;IASV,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAK7C,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAgBjD;;;;;;;;OAQG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAa5D;;;OAGG;IACH,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAEtD;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC;;;;;;OAMG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI;IAc9D;;;;;OAKG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAanD,OAAO,CAAC,cAAc,CAGd;IACR,OAAO,CAAC,UAAU,CAAS;IAC3B,YAAY,IAAI,IAAI;IA8BpB,WAAW,IAAI,IAAI;IAoDnB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,oBAAoB,CAK1B;IACF,OAAO,CAAC,SAAS;IAGjB,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAa7B,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI;IAiFtC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC,cAAc,IAAI,IAAI;IAYtB;;;;;;;OAOG;IACH,UAAU,IAAI,IAAI;IAalB,YAAY,IAAI,MAAM,IAAI;IAqB1B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,WAAW;CAmDpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,wBAAgB,UAAU,CAAC,KAAK,GAAE,MAAM,CAAC,UAA0B,GAAG,IAAI,CAsDzE"}
1
+ {"version":3,"file":"ink.d.ts","sourceRoot":"","sources":["../../../src/ink/ink.tsx"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ import createRenderer from './renderer.js';
33
33
  import { CharPool, cellAt, createScreen, HyperlinkPool, isEmptyCellAt, migrateScreenPools, StylePool } from './screen.js';
34
34
  import { applySearchHighlight } from './searchHighlight.js';
35
35
  import { applySelectionOverlay, captureScrolledRows, clearSelection, createSelectionState, extendSelection, findPlainTextUrlAt, getSelectedText, hasSelection, moveFocus, pickFollowForSelection, selectLineAt, selectWordAt, shiftAnchor, shiftSelection, shiftSelectionForFollow, startSelection, updateSelection } from './selection.js';
36
- import { isDecstbmSafe, SYNC_OUTPUT_SUPPORTED, supportsExtendedKeys, supportsWin32InputMode, writeDiffToTerminal } from './terminal.js';
36
+ import { isDecstbmSafe, SYNC_OUTPUT_SUPPORTED, serializeDiff, supportsDecrqmProbe, supportsExtendedKeys, supportsWin32InputMode, writeDiffToTerminal } from './terminal.js';
37
37
  import { CURSOR_HOME, cursorMove, cursorPosition, DISABLE_KITTY_KEYBOARD, DISABLE_MODIFY_OTHER_KEYS, DISABLE_WIN32_INPUT_MODE, ENABLE_KITTY_KEYBOARD, ENABLE_MODIFY_OTHER_KEYS, ENABLE_WIN32_INPUT_MODE, ERASE_SCREEN, ERASE_SCROLLBACK, SGR_RESET } from './termio/csi.js';
38
38
  import { DBP, DFE, DISABLE_MOUSE_TRACKING, ENABLE_MOUSE_TRACKING, ENTER_ALT_SCREEN, EXIT_ALT_SCREEN, SHOW_CURSOR } from './termio/dec.js';
39
39
  import { CLEAR_ITERM2_PROGRESS, CLEAR_TAB_STATUS, setClipboard, supportsTabStatus, wrapForMultiplexer } from './termio/osc.js';
@@ -1115,6 +1115,11 @@ export default class Ink {
1115
1115
  reassertTerminalModes = (includeAltScreen = false) => {
1116
1116
  if (!this.options.stdout.isTTY)
1117
1117
  return;
1118
+ // Shutdown latch: the >5s idle-gap trigger (or an event-loop stall
1119
+ // detector firing during the dispose window) must not re-assert mouse
1120
+ // tracking after the exit cleanup disabled it (issue #522).
1121
+ if (this.isUnmounted)
1122
+ return;
1118
1123
  // Don't touch the terminal during an editor handoff — re-enabling kitty
1119
1124
  // keyboard here would undo enterAlternateScreen's disable and nano would
1120
1125
  // start seeing CSI-u sequences again.
@@ -1275,6 +1280,14 @@ export default class Ink {
1275
1280
  */
1276
1281
  lastHealthProbeAt = 0;
1277
1282
  probeAltScreenHealth = () => {
1283
+ // Shutdown latch: during the dispose window after detachForShutdown
1284
+ // (up to the 5s fallback exit) stray input, focus, resize or a pending
1285
+ // DECRPM reply would otherwise re-write ENABLE_MOUSE_TRACKING AFTER the
1286
+ // exit cleanup's DISABLE_MOUSE_TRACKING — the mouse-reporting residue
1287
+ // the shell then echoes as SGR garbage (issue #522). isUnmounted is set
1288
+ // by detachForShutdown() before any cleanup sequence is written.
1289
+ if (this.isUnmounted)
1290
+ return;
1278
1291
  const now = Date.now();
1279
1292
  if (now - this.lastHealthProbeAt < 250)
1280
1293
  return;
@@ -1287,6 +1300,13 @@ export default class Ink {
1287
1300
  const querier = this.app?.querier;
1288
1301
  if (querier === undefined)
1289
1302
  return;
1303
+ // macOS Terminal.app prints the trailing `p` of `CSI ? 1049 $ p` as
1304
+ // literal text instead of ignoring the unsupported query, leaking a
1305
+ // visible character at the cursor on every probe. The blind
1306
+ // mouse-tracking re-assert above still runs there — only the round trip
1307
+ // is skipped, which costs nothing: Terminal.app never answered it.
1308
+ if (!supportsDecrqmProbe())
1309
+ return;
1290
1310
  void Promise.all([querier.send(decrqm(1049)), querier.flush()]).then(([reply]) => {
1291
1311
  // DECRPM status: 1/3 = set, 2/4 = reset, 0/undefined = unknown.
1292
1312
  // Heal only on a POSITIVE reset — an unanswered probe must not
@@ -1311,6 +1331,12 @@ export default class Ink {
1311
1331
  * stays true. ENTER_ALT_SCREEN is a terminal-side no-op if already in alt.
1312
1332
  */
1313
1333
  reenterAltScreen() {
1334
+ // Same shutdown latch as probeAltScreenHealth: a DECRPM reply resolving
1335
+ // after detachForShutdown (or a SIGCONT racing unmount) must not re-enter
1336
+ // the alt screen or re-enable mouse tracking past the exit cleanup
1337
+ // (issue #522).
1338
+ if (this.isUnmounted)
1339
+ return;
1314
1340
  this.options.stdout.write(ENTER_ALT_SCREEN + ERASE_SCREEN + CURSOR_HOME + (this.altScreenMouseTracking ? ENABLE_MOUSE_TRACKING : ''));
1315
1341
  this.resetFramesForAltScreen();
1316
1342
  }
@@ -1827,7 +1853,17 @@ export default class Ink {
1827
1853
  if (this.isUnmounted) {
1828
1854
  return;
1829
1855
  }
1830
- this.renderNow();
1856
+ // The final frame render is best-effort: a mid-state React commit can
1857
+ // throw (agent still working at the exact exit moment). It must NOT
1858
+ // skip the synchronous cleanup block below — a skipped DISABLE_*
1859
+ // leaves mouse reporting on past process exit, and the shell echoes
1860
+ // SGR garbage for every click/drag/wheel (issue #522).
1861
+ try {
1862
+ this.renderNow();
1863
+ }
1864
+ catch (renderError) {
1865
+ logError(renderError instanceof Error ? renderError : new Error(String(renderError)));
1866
+ }
1831
1867
  this.unsubscribeExit();
1832
1868
  if (typeof this.restoreConsole === 'function') {
1833
1869
  this.restoreConsole();
@@ -1837,43 +1873,57 @@ export default class Ink {
1837
1873
  // Non-TTY environments don't handle erasing ansi escapes well, so it's better to
1838
1874
  // only render last frame of non-static output
1839
1875
  const diff = this.log.renderPreviousOutput_DEPRECATED(this.frontFrame);
1840
- writeDiffToTerminal(this.terminal, optimize(diff));
1876
+ const lastFrame = serializeDiff(this.terminal, optimize(diff));
1841
1877
  // Clean up terminal modes synchronously before process exit.
1842
1878
  // React's componentWillUnmount won't run in time when process.exit() is called,
1843
1879
  // so we must reset terminal modes here to prevent escape sequence leakage.
1844
- // Use writeSync to stdout (fd 1) to ensure writes complete before exit.
1845
- // We unconditionally send all disable sequences because terminal detection
1846
- // may not work correctly (e.g., in tmux, screen) and these are no-ops on
1847
- // terminals that don't support them.
1880
+ // Use writeSync to the stdout stream's own fd (not a hard-coded 1 — a
1881
+ // host that runs the TUI on a non-1 TTY would drop every sequence while
1882
+ // the enable writes still reach the TTY, issue #522) to ensure writes
1883
+ // complete before exit. We unconditionally send all disable sequences
1884
+ // because terminal detection may not work correctly (e.g., in tmux,
1885
+ // screen) and these are no-ops on terminals that don't support them.
1848
1886
  /* eslint-disable custom-rules/no-sync-fs -- process exiting; async writes would be dropped */
1849
1887
  if (this.options.stdout.isTTY) {
1888
+ // Node's TTY WriteStream exposes .fd; the NodeJS.WriteStream interface
1889
+ // doesn't declare it, hence the local intersection cast.
1890
+ const stdoutWithFd = this.options.stdout;
1891
+ const stdoutFd = typeof stdoutWithFd.fd === 'number' ? stdoutWithFd.fd : 1;
1892
+ // The last frame must land on the ALT screen while it is still up:
1893
+ // writing it through the async stream would race the synchronous
1894
+ // EXIT_ALT_SCREEN below and the frame bytes would arrive AFTER the
1895
+ // switch to the main screen, painting misplaced residue over the
1896
+ // shell (issue #522).
1897
+ if (lastFrame !== '') {
1898
+ writeSync(stdoutFd, lastFrame);
1899
+ }
1850
1900
  if (this.altScreenActive) {
1851
1901
  // <AlternateScreen>'s unmount effect won't run during signal-exit.
1852
1902
  // Exit alt screen FIRST so other cleanup sequences go to the main screen.
1853
- writeSync(1, EXIT_ALT_SCREEN);
1903
+ writeSync(stdoutFd, EXIT_ALT_SCREEN);
1854
1904
  }
1855
1905
  // Disable mouse tracking — unconditional because altScreenActive can be
1856
1906
  // stale if AlternateScreen's unmount (which flips the flag) raced a
1857
1907
  // blocked event loop + SIGINT. No-op if tracking was never enabled.
1858
- writeSync(1, DISABLE_MOUSE_TRACKING);
1908
+ writeSync(stdoutFd, DISABLE_MOUSE_TRACKING);
1859
1909
  // Drain stdin so in-flight mouse events don't leak to the shell
1860
1910
  this.drainStdin();
1861
1911
  // Disable extended key reporting (both kitty and modifyOtherKeys)
1862
- writeSync(1, DISABLE_MODIFY_OTHER_KEYS);
1863
- writeSync(1, DISABLE_KITTY_KEYBOARD);
1912
+ writeSync(stdoutFd, DISABLE_MODIFY_OTHER_KEYS);
1913
+ writeSync(stdoutFd, DISABLE_KITTY_KEYBOARD);
1864
1914
  // Disable win32-input-mode (no-op where never enabled)
1865
- writeSync(1, DISABLE_WIN32_INPUT_MODE);
1915
+ writeSync(stdoutFd, DISABLE_WIN32_INPUT_MODE);
1866
1916
  // Disable focus events (DECSET 1004)
1867
- writeSync(1, DFE);
1917
+ writeSync(stdoutFd, DFE);
1868
1918
  // Disable bracketed paste mode
1869
- writeSync(1, DBP);
1919
+ writeSync(stdoutFd, DBP);
1870
1920
  // Show cursor
1871
- writeSync(1, SHOW_CURSOR);
1921
+ writeSync(stdoutFd, SHOW_CURSOR);
1872
1922
  // Clear iTerm2 progress bar
1873
- writeSync(1, CLEAR_ITERM2_PROGRESS);
1923
+ writeSync(stdoutFd, CLEAR_ITERM2_PROGRESS);
1874
1924
  // Clear tab status (OSC 21337) so a stale dot doesn't linger
1875
1925
  if (supportsTabStatus())
1876
- writeSync(1, wrapForMultiplexer(CLEAR_TAB_STATUS));
1926
+ writeSync(stdoutFd, wrapForMultiplexer(CLEAR_TAB_STATUS));
1877
1927
  }
1878
1928
  /* eslint-enable custom-rules/no-sync-fs */
1879
1929
  this.isUnmounted = true;
@@ -53,6 +53,22 @@ export type Instance = {
53
53
  * Returns a promise, which resolves when app is unmounted.
54
54
  */
55
55
  waitUntilExit: Ink['waitUntilExit'];
56
+ /**
57
+ * Detach the Ink runtime for process-level shutdown: latches isUnmounted
58
+ * (gating every mouse/alt-screen re-assert), cancels pending renders,
59
+ * releases TTY handlers and stdin raw mode, and disposes the querier.
60
+ * Exposed on the handle so shutdown code can latch the runtime even when
61
+ * the global instances map lookup misses (stdout identity drift, issue
62
+ * #522) — without it, the cleanup-vs-self-heal window re-enables mouse
63
+ * tracking after DISABLE_MOUSE_TRACKING has already been written.
64
+ */
65
+ detachForShutdown: Ink['detachForShutdown'];
66
+ /**
67
+ * Fully detach stdin before handing the terminal to a child process that
68
+ * inherits it (the /update and /restart handoffs). See Ink's own method
69
+ * for the listener/pump semantics.
70
+ */
71
+ detachStdinForHandoff: Ink['detachStdinForHandoff'];
56
72
  cleanup: () => void;
57
73
  };
58
74
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/ink/root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,GAAmC,MAAM,UAAU,CAAA;AAG1D,uCAAuC;AACvC,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;IAC3B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;CACtC,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IACvB;;OAEG;IACH,aAAa,EAAE,GAAG,CAAC,eAAe,CAAC,CAAA;IACnC,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACnC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,SAAS,EACf,UAAU,MAAM,CAAC,WAAW,GAAG,aAAa,KAC3C,QA0BF,CAAA;AAED;;;;;;GAMG;AACH,QAAA,MAAM,aAAa,GACjB,MAAM,SAAS,EACf,UAAU,MAAM,CAAC,WAAW,GAAG,aAAa,KAC3C,OAAO,CAAC,QAAQ,CAWlB,CAAA;AAED,eAAe,aAAa,CAAA;AAE5B;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/ink/root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,GAAmC,MAAM,UAAU,CAAA;AAG1D,uCAAuC;AACvC,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;IAC3B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;CACtC,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IACvB;;OAEG;IACH,aAAa,EAAE,GAAG,CAAC,eAAe,CAAC,CAAA;IACnC;;;;;;;;OAQG;IACH,iBAAiB,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAC3C;;;;OAIG;IACH,qBAAqB,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAA;IACnD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACnC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,SAAS,EACf,UAAU,MAAM,CAAC,WAAW,GAAG,aAAa,KAC3C,QA4BF,CAAA;AAED;;;;;;GAMG;AACH,QAAA,MAAM,aAAa,GACjB,MAAM,SAAS,EACf,UAAU,MAAM,CAAC,WAAW,GAAG,aAAa,KAC3C,OAAO,CAAC,QAAQ,CAWlB,CAAA;AAED,eAAe,aAAa,CAAA;AAE5B;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA6Bf"}