reasonix 0.48.1 → 0.49.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 (123) hide show
  1. package/dashboard/dist/app.js +123 -16
  2. package/dashboard/dist/app.js.map +1 -1
  3. package/dist/cli/{acp-QJGGHQLA.js → acp-WFQIC6SO.js} +18 -18
  4. package/dist/cli/chat-D32JGNVH.js +51 -0
  5. package/dist/cli/{chunk-TIJ4ZHD6.js → chunk-23ZPCIPR.js} +12 -9
  6. package/dist/cli/chunk-23ZPCIPR.js.map +1 -0
  7. package/dist/cli/{chunk-TKVXTQ3T.js → chunk-3ZZXQ3CZ.js} +27 -27
  8. package/dist/cli/chunk-3ZZXQ3CZ.js.map +1 -0
  9. package/dist/cli/{chunk-H2F4LDNH.js → chunk-7AST3QQ3.js} +2 -2
  10. package/dist/cli/{chunk-XMR2VCGT.js → chunk-7JTKBJ2G.js} +3 -3
  11. package/dist/cli/{chunk-X53B3JIX.js → chunk-7X4JJOO7.js} +2 -61
  12. package/dist/cli/{chunk-X53B3JIX.js.map → chunk-7X4JJOO7.js.map} +1 -1
  13. package/dist/cli/{chunk-WKOXKCF3.js → chunk-ASOLXV67.js} +3 -3
  14. package/dist/cli/{chunk-43ROGEX2.js → chunk-AWEULQG6.js} +10 -9
  15. package/dist/cli/{chunk-43ROGEX2.js.map → chunk-AWEULQG6.js.map} +1 -1
  16. package/dist/cli/{chunk-5AW6NIHU.js → chunk-DFX5ZH5L.js} +2 -2
  17. package/dist/cli/{chunk-4E2BHJU4.js → chunk-GNS7BAT2.js} +2 -2
  18. package/dist/cli/{chunk-5U5LMMFF.js → chunk-J2IHQGPQ.js} +12 -6
  19. package/dist/cli/chunk-J2IHQGPQ.js.map +1 -0
  20. package/dist/cli/{chunk-O3AGYTG2.js → chunk-JGTX4RRQ.js} +3 -3
  21. package/dist/cli/{chunk-SLAFMXAZ.js → chunk-JNTMOX7G.js} +2 -2
  22. package/dist/cli/{chunk-RCLS63KE.js → chunk-MGTBP7GG.js} +2 -2
  23. package/dist/cli/{chunk-JFBGSWQB.js → chunk-MQWO32ZD.js} +323 -159
  24. package/dist/cli/chunk-MQWO32ZD.js.map +1 -0
  25. package/dist/cli/{chunk-FD7SNDWW.js → chunk-O5LIHAMP.js} +8 -4
  26. package/dist/cli/chunk-O5LIHAMP.js.map +1 -0
  27. package/dist/cli/{chunk-PJIQIYTV.js → chunk-PB3MAFEI.js} +3 -3
  28. package/dist/cli/{chunk-NQZ5U37J.js → chunk-PEMG6CUB.js} +2 -2
  29. package/dist/cli/{chunk-KH5JIJJD.js → chunk-PXBQ6IZ7.js} +3 -3
  30. package/dist/cli/{chunk-J2TQAWOM.js → chunk-Q46B3Z7H.js} +25 -10
  31. package/dist/cli/{chunk-J2TQAWOM.js.map → chunk-Q46B3Z7H.js.map} +1 -1
  32. package/dist/cli/{chunk-DABAOQSV.js → chunk-QF32ROX2.js} +1260 -1754
  33. package/dist/cli/chunk-QF32ROX2.js.map +1 -0
  34. package/dist/cli/{chunk-IKSYVBBZ.js → chunk-QX5TWXRZ.js} +2 -2
  35. package/dist/cli/{chunk-R7U44O3Y.js → chunk-TAIKVL35.js} +2 -2
  36. package/dist/cli/{chunk-B5CZL2SE.js → chunk-TEDWJKEI.js} +4 -9
  37. package/dist/cli/chunk-TEDWJKEI.js.map +1 -0
  38. package/dist/cli/{chunk-EO6RPTJG.js → chunk-U5XQDCK7.js} +5 -5
  39. package/dist/cli/{chunk-SWUMD2LX.js → chunk-W46ZMNKO.js} +3 -3
  40. package/dist/cli/{chunk-FPME5QOO.js → chunk-WMTMMSXU.js} +166 -5
  41. package/dist/cli/chunk-WMTMMSXU.js.map +1 -0
  42. package/dist/cli/{chunk-PIC5HJRD.js → chunk-YEF7C4XI.js} +154 -86
  43. package/dist/cli/chunk-YEF7C4XI.js.map +1 -0
  44. package/dist/cli/{chunk-3FULTFRB.js → chunk-ZAEJWKXB.js} +2 -2
  45. package/dist/cli/chunk-ZWHSHFDP.js +6173 -0
  46. package/dist/cli/chunk-ZWHSHFDP.js.map +1 -0
  47. package/dist/cli/{code-OKA5YPOH.js → code-R4IHI7SR.js} +30 -30
  48. package/dist/cli/{commands-3U6PUVSS.js → commands-DRHFCYMO.js} +4 -4
  49. package/dist/cli/{commit-HFB7SRBU.js → commit-AG5KB4YP.js} +3 -3
  50. package/dist/cli/{desktop-G7UMW3CJ.js → desktop-JGL6GORA.js} +19 -19
  51. package/dist/cli/{diff-PGXW4YZD.js → diff-4Z7ETWZO.js} +9 -9
  52. package/dist/cli/{doctor-WWJFLVCB.js → doctor-VA3RHQLB.js} +9 -9
  53. package/dist/cli/index.js +37 -36
  54. package/dist/cli/index.js.map +1 -1
  55. package/dist/cli/{mcp-Y3VKIK3T.js → mcp-LZO4HXFA.js} +34 -23
  56. package/dist/cli/mcp-LZO4HXFA.js.map +1 -0
  57. package/dist/cli/{mcp-browse-4IN2QIFR.js → mcp-browse-C3GXVMYZ.js} +3 -3
  58. package/dist/cli/{mcp-inspect-BUXFXDHB.js → mcp-inspect-ZMYUNFDS.js} +2 -2
  59. package/dist/cli/{prompt-US57R6BA.js → prompt-MC3U5KRP.js} +5 -5
  60. package/dist/cli/{prune-sessions-SEWX7GP6.js → prune-sessions-OEPFH4N6.js} +11 -7
  61. package/dist/cli/prune-sessions-OEPFH4N6.js.map +1 -0
  62. package/dist/cli/{replay-EQJMZRB3.js → replay-4TP7ZUMZ.js} +10 -10
  63. package/dist/cli/{run-KVEI66TR.js → run-6MXQYBOE.js} +16 -15
  64. package/dist/cli/run-6MXQYBOE.js.map +1 -0
  65. package/dist/cli/{server-D6C4GHWN.js → server-Z3IMJNNI.js} +63 -12
  66. package/dist/cli/server-Z3IMJNNI.js.map +1 -0
  67. package/dist/cli/{sessions-TGVS2RQZ.js → sessions-NXQ5SAV7.js} +18 -18
  68. package/dist/cli/sessions-NXQ5SAV7.js.map +1 -0
  69. package/dist/cli/{setup-WLKX6GGG.js → setup-LHZELI6I.js} +6 -6
  70. package/dist/cli/{stats-TCD7Q6MB.js → stats-SUIJ3QWY.js} +6 -6
  71. package/dist/cli/{version-BCWWS2OU.js → version-BIFONEUB.js} +13 -13
  72. package/dist/index.d.ts +63 -15
  73. package/dist/index.js +855 -360
  74. package/dist/index.js.map +1 -1
  75. package/package.json +2 -1
  76. package/dist/cli/chat-ZXF227MP.js +0 -51
  77. package/dist/cli/chunk-5U5LMMFF.js.map +0 -1
  78. package/dist/cli/chunk-6FRNXWDZ.js +0 -2265
  79. package/dist/cli/chunk-6FRNXWDZ.js.map +0 -1
  80. package/dist/cli/chunk-B5CZL2SE.js.map +0 -1
  81. package/dist/cli/chunk-DABAOQSV.js.map +0 -1
  82. package/dist/cli/chunk-FD7SNDWW.js.map +0 -1
  83. package/dist/cli/chunk-FPME5QOO.js.map +0 -1
  84. package/dist/cli/chunk-JFBGSWQB.js.map +0 -1
  85. package/dist/cli/chunk-PIC5HJRD.js.map +0 -1
  86. package/dist/cli/chunk-TIJ4ZHD6.js.map +0 -1
  87. package/dist/cli/chunk-TKVXTQ3T.js.map +0 -1
  88. package/dist/cli/mcp-Y3VKIK3T.js.map +0 -1
  89. package/dist/cli/prune-sessions-SEWX7GP6.js.map +0 -1
  90. package/dist/cli/run-KVEI66TR.js.map +0 -1
  91. package/dist/cli/server-D6C4GHWN.js.map +0 -1
  92. package/dist/cli/sessions-TGVS2RQZ.js.map +0 -1
  93. /package/dist/cli/{acp-QJGGHQLA.js.map → acp-WFQIC6SO.js.map} +0 -0
  94. /package/dist/cli/{chat-ZXF227MP.js.map → chat-D32JGNVH.js.map} +0 -0
  95. /package/dist/cli/{chunk-H2F4LDNH.js.map → chunk-7AST3QQ3.js.map} +0 -0
  96. /package/dist/cli/{chunk-XMR2VCGT.js.map → chunk-7JTKBJ2G.js.map} +0 -0
  97. /package/dist/cli/{chunk-WKOXKCF3.js.map → chunk-ASOLXV67.js.map} +0 -0
  98. /package/dist/cli/{chunk-5AW6NIHU.js.map → chunk-DFX5ZH5L.js.map} +0 -0
  99. /package/dist/cli/{chunk-4E2BHJU4.js.map → chunk-GNS7BAT2.js.map} +0 -0
  100. /package/dist/cli/{chunk-O3AGYTG2.js.map → chunk-JGTX4RRQ.js.map} +0 -0
  101. /package/dist/cli/{chunk-SLAFMXAZ.js.map → chunk-JNTMOX7G.js.map} +0 -0
  102. /package/dist/cli/{chunk-RCLS63KE.js.map → chunk-MGTBP7GG.js.map} +0 -0
  103. /package/dist/cli/{chunk-PJIQIYTV.js.map → chunk-PB3MAFEI.js.map} +0 -0
  104. /package/dist/cli/{chunk-NQZ5U37J.js.map → chunk-PEMG6CUB.js.map} +0 -0
  105. /package/dist/cli/{chunk-KH5JIJJD.js.map → chunk-PXBQ6IZ7.js.map} +0 -0
  106. /package/dist/cli/{chunk-IKSYVBBZ.js.map → chunk-QX5TWXRZ.js.map} +0 -0
  107. /package/dist/cli/{chunk-R7U44O3Y.js.map → chunk-TAIKVL35.js.map} +0 -0
  108. /package/dist/cli/{chunk-EO6RPTJG.js.map → chunk-U5XQDCK7.js.map} +0 -0
  109. /package/dist/cli/{chunk-SWUMD2LX.js.map → chunk-W46ZMNKO.js.map} +0 -0
  110. /package/dist/cli/{chunk-3FULTFRB.js.map → chunk-ZAEJWKXB.js.map} +0 -0
  111. /package/dist/cli/{code-OKA5YPOH.js.map → code-R4IHI7SR.js.map} +0 -0
  112. /package/dist/cli/{commands-3U6PUVSS.js.map → commands-DRHFCYMO.js.map} +0 -0
  113. /package/dist/cli/{commit-HFB7SRBU.js.map → commit-AG5KB4YP.js.map} +0 -0
  114. /package/dist/cli/{desktop-G7UMW3CJ.js.map → desktop-JGL6GORA.js.map} +0 -0
  115. /package/dist/cli/{diff-PGXW4YZD.js.map → diff-4Z7ETWZO.js.map} +0 -0
  116. /package/dist/cli/{doctor-WWJFLVCB.js.map → doctor-VA3RHQLB.js.map} +0 -0
  117. /package/dist/cli/{mcp-browse-4IN2QIFR.js.map → mcp-browse-C3GXVMYZ.js.map} +0 -0
  118. /package/dist/cli/{mcp-inspect-BUXFXDHB.js.map → mcp-inspect-ZMYUNFDS.js.map} +0 -0
  119. /package/dist/cli/{prompt-US57R6BA.js.map → prompt-MC3U5KRP.js.map} +0 -0
  120. /package/dist/cli/{replay-EQJMZRB3.js.map → replay-4TP7ZUMZ.js.map} +0 -0
  121. /package/dist/cli/{setup-WLKX6GGG.js.map → setup-LHZELI6I.js.map} +0 -0
  122. /package/dist/cli/{stats-TCD7Q6MB.js.map → stats-SUIJ3QWY.js.map} +0 -0
  123. /package/dist/cli/{version-BCWWS2OU.js.map → version-BIFONEUB.js.map} +0 -0
@@ -3,7 +3,7 @@ import { createRequire as __cr } from 'node:module'; if (typeof globalThis.requi
3
3
  import {
4
4
  loadLanguage,
5
5
  saveLanguage
6
- } from "./chunk-FPME5QOO.js";
6
+ } from "./chunk-WMTMMSXU.js";
7
7
 
8
8
  // src/i18n/EN.ts
9
9
  var EN = {
@@ -48,7 +48,17 @@ var EN = {
48
48
  missingApiKey: "DEEPSEEK_API_KEY is not set and stdin is not a TTY (cannot prompt).\nSet the env var, or run `reasonix chat` once interactively to save a key.\n"
49
49
  },
50
50
  sessions: {
51
- emptyHint: "no saved sessions yet \u2014 run `reasonix chat` (sessions are auto-saved unless --no-session)."
51
+ emptyHint: "no saved sessions yet \u2014 run `reasonix chat` (sessions are auto-saved unless --no-session).",
52
+ listHeader: "Saved sessions (~/.reasonix/sessions/):",
53
+ inspectHint: "Inspect: reasonix sessions <name>",
54
+ resumeHint: "Resume: reasonix chat --session <name>",
55
+ noSession: 'no session named "{name}" (or it\u2019s empty).',
56
+ lookedAt: "looked at: {path}",
57
+ noIdleSessions: "no sessions idle \u2265{days} days. Nothing pruned.",
58
+ wouldPrune: "would prune {count} session(s) idle \u2265{days} days:",
59
+ dryRunHint: "re-run without --dry-run to actually delete.",
60
+ prunedCount: "pruned {count} session(s) idle \u2265{days} days:",
61
+ daysInvalid: "--days must be a positive integer (got {days})."
52
62
  },
53
63
  ui: {
54
64
  welcome: "Run `reasonix` any time to start chatting \u2014 your settings are remembered.",
@@ -152,10 +162,6 @@ var EN = {
152
162
  title: "copy / paste",
153
163
  rows: [
154
164
  { key: "select text", text: "drag to select \u2014 terminal-native (no modifier needed)" },
155
- {
156
- key: "/copy",
157
- text: "vim/tmux-style copy mode \u2014 works in SSH/mosh/tmux where drag-select can't extend past the viewport"
158
- },
159
165
  {
160
166
  key: "copy",
161
167
  text: "Ctrl+Shift+C (Win/Linux) \xB7 Cmd+C (macOS) \u2014 or auto-copy-on-select if your terminal does it"
@@ -246,9 +252,6 @@ var EN = {
246
252
  },
247
253
  slash: {
248
254
  help: { description: "show the full command reference" },
249
- copy: {
250
- description: "open vim/tmux-style copy mode \u2014 j/k navigate, v select, y yank to clipboard"
251
- },
252
255
  status: { description: "current model, flags, context, session" },
253
256
  preset: {
254
257
  description: "model bundle \u2014 auto escalates flash \u2192 pro, flash/pro lock",
@@ -400,8 +403,8 @@ var EN = {
400
403
  argsHint: "<question>"
401
404
  },
402
405
  "search-engine": {
403
- description: "switch web search backend \u2014 mojeek (default, no deps), searxng (self-hosted), metaso (free 100/d), tavily (free 1000/mo), perplexity (AI-native), or exa (AI-native)",
404
- argsHint: "<mojeek|searxng|metaso|tavily|perplexity|exa> [<key>]"
406
+ description: "switch web search backend \u2014 bing (default, works from CN without proxy), searxng (self-hosted), metaso (free 100/d), tavily (free 1000/mo), perplexity (AI-native), or exa (AI-native)",
407
+ argsHint: "<bing|searxng|metaso|tavily|perplexity|exa> [<key>]"
405
408
  }
406
409
  },
407
410
  wizard: {
@@ -564,6 +567,8 @@ var EN = {
564
567
  verboseOn: "\u25B8 verbose mode on \u2014 full reasoning + tool output",
565
568
  verboseOff: "\u25B8 verbose mode off \u2014 head/tail elision restored",
566
569
  commandFailed: "! command failed",
570
+ steerInjected: "\u25B8 steering queued \u2014 will be added after the current step",
571
+ steerCommandRejected: "\u25B8 commands are disabled while steering a busy turn",
567
572
  btwUsage: "\u25B8 /btw <question> \u2014 ask a side question without polluting the conversation context.",
568
573
  btwHeader: "\u226B btw",
569
574
  btwFailed: "/btw failed",
@@ -609,7 +614,9 @@ var EN = {
609
614
  editHistoryAlreadyReverted: "(already reverted \u2014 /history shows the batch-level status)",
610
615
  editHistoryRevertFile: "/undo {id} {path} \u2192 revert just this file",
611
616
  mcpFailed: "MCP {name} failed",
612
- mcpWarn: "MCP {name} warn"
617
+ mcpWarn: "MCP {name} warn",
618
+ unknownTheme: "unknown theme: {name}\navailable: {choices}",
619
+ themeSaved: "theme saved: {name}\nactive on next launch: {active}"
613
620
  },
614
621
  hooks: {
615
622
  head: "hook {tag} `{cmd}` {decision}{truncTag}",
@@ -653,6 +660,7 @@ var EN = {
653
660
  balance402: "Out of balance (DeepSeek 402): {inner}. Top up at https://platform.deepseek.com/top_up \u2014 the panel header shows your balance once it's non-zero.",
654
661
  badparam422: "Invalid parameter (DeepSeek 422): {inner}",
655
662
  badrequest400: "Bad request (DeepSeek 400): {inner}",
663
+ concurrency429: "DeepSeek concurrency limit hit (429): {inner}. The account has too many in-flight requests (cap: 500 for v4-pro, 2500 for v4-flash, summed across API keys account-wide). Usually means another Reasonix process is sharing the same key, or a parallel subagent fan-out overshot. Wait a few seconds and retry, reduce parallelism, or request a higher cap at https://platform.deepseek.com.",
656
664
  deepseek5xxHead: "DeepSeek service unavailable ({status}) \u2014 this is a DeepSeek-side problem, not Reasonix. Already retried 4\xD7 with backoff.",
657
665
  deepseek5xxReachable: " DeepSeek's main API answered our health check, but /chat/completions is failing \u2014 partial outage on their side.",
658
666
  deepseek5xxUnreachable: " DeepSeek API is unreachable from your network \u2014 could be a wider DS outage or a local network issue.",
@@ -938,6 +946,9 @@ var EN = {
938
946
  activeNone: "\u25B8 active plan: (none)",
939
947
  noArchives: "no archived plans yet for this session \u2014 they auto-archive when every step is done",
940
948
  archivedHeader: "Archived ({count}):",
949
+ evidencePending: " ! evidence pending \u2014 current step needs verification/diff/checkpoint/manual evidence",
950
+ evidenceLine: " evidence {stepId}: {summary}",
951
+ archivedEvidenceLine: " evidence: {summary}",
941
952
  replayNoSession: "no session attached \u2014 `/replay` is per-session. Run `reasonix code` in a project to get a session.",
942
953
  replayNoArchives: "no archived plans yet for this session \u2014 `/replay` lights up once a plan completes (auto-archives when every step is done).",
943
954
  replayInvalidIndex: "invalid index \u2014 `/replay` takes 1..{max} (newest = 1). Use `/plans` to see the list.",
@@ -1032,7 +1043,7 @@ var EN = {
1032
1043
  currentEngine: "Current web search engine: {engine}",
1033
1044
  endpoint: "SearXNG endpoint: {url}",
1034
1045
  usageHeader: "Usage:",
1035
- usageMojeek: " /search-engine mojeek use Mojeek (default, no external deps)",
1046
+ usageBing: " /search-engine bing use Bing (default, works from CN without proxy)",
1036
1047
  usageSearxng: " /search-engine searxng use SearXNG at default endpoint",
1037
1048
  usageSearxngUrl: " /search-engine searxng <url> use SearXNG at custom endpoint",
1038
1049
  usageMetaso: " /search-engine metaso use Metaso API (100/d free, configure your own API key for more)",
@@ -1128,7 +1139,9 @@ var EN = {
1128
1139
  editorFailed: "external editor:",
1129
1140
  editorMissing: "no $EDITOR / $VISUAL / $GIT_EDITOR set \u2014 export one (e.g. `export EDITOR=nano`) and retry",
1130
1141
  editorExited: "editor exited with code {code}",
1131
- typeaheadStaged: "\u25B8 {count} line(s) staged \xB7 esc recall"
1142
+ typeaheadStaged: "\u25B8 {count} line(s) staged \xB7 esc recall",
1143
+ steerPlaceholder: "type to steer the current task \u2014 commands are disabled while busy",
1144
+ steerHint: "send \u2014 injected mid-turn"
1132
1145
  },
1133
1146
  pathConfirm: {
1134
1147
  title: "Outside-sandbox path",
@@ -1147,7 +1160,13 @@ var EN = {
1147
1160
  denyDesc: "press Tab to add context telling the model why",
1148
1161
  pathLabel: "path",
1149
1162
  sandboxLabel: "sandbox",
1150
- allowPrefixLabel: "prefix"
1163
+ allowPrefixLabel: "prefix",
1164
+ promptTitleRead: "Access path \u2014 read",
1165
+ promptTitleWrite: "Access path \u2014 write",
1166
+ actionAllowRead: "Allow read",
1167
+ actionAllowWrite: "Allow write",
1168
+ actionAlwaysAllow: "Always allow \u2014 {prefix}",
1169
+ actionDeny: "Deny"
1151
1170
  },
1152
1171
  shellConfirm: {
1153
1172
  title: "Shell command",
@@ -1169,7 +1188,12 @@ var EN = {
1169
1188
  timeoutLabel: "timeout",
1170
1189
  waitLabel: "wait",
1171
1190
  previewMore: "\u2026 {n} more line hidden \u2014 press esc, ask the model to split it",
1172
- previewMorePlural: "\u2026 {n} more lines hidden \u2014 press esc, ask the model to split it"
1191
+ previewMorePlural: "\u2026 {n} more lines hidden \u2014 press esc, ask the model to split it",
1192
+ promptTitleRunCommand: "Run command",
1193
+ promptTitleRunBackground: "Run background command",
1194
+ actionRunOnce: "Run once",
1195
+ actionAlwaysAllow: "Always allow \u2014 {prefix}",
1196
+ actionDeny: "Deny"
1173
1197
  },
1174
1198
  editConfirm: {
1175
1199
  footer: "[y/Enter] apply \xB7 [n] reject with reason \xB7 [a] apply rest \xB7 [A] flip AUTO \xB7 [\u2191\u2193/Space] scroll \xB7 [Esc] abort",
@@ -1310,37 +1334,37 @@ var EN = {
1310
1334
  probeFailed: "probe failed \u2014 {message}"
1311
1335
  },
1312
1336
  webErrors: {
1313
- status: "web_search {status} \u2014 try: the search backend returned an error; rephrase the query, or switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1337
+ status: "web_search {status} \u2014 try: the search backend returned an error; rephrase the query, or switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1314
1338
  rateLimit429: "web_search 429 \u2014 try: wait 10s before retrying, or rephrase the query; the search backend is rate-limiting this client",
1315
- forbidden403: "web_search 403 \u2014 try: the search backend is blocking this client; switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa, or wait and retry later",
1339
+ forbidden403: "web_search 403 \u2014 try: the search backend is blocking this client; switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa, or wait and retry later",
1316
1340
  serverError5xx: "web_search {status} \u2014 try: open the search URL in a browser; if it loads this is transient and a retry in 30s may help",
1317
- mojeekBlocked: "web_search: Mojeek anti-bot page \u2014 rate-limited or blocked \u2014 try: wait 30s and retry, or switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1318
- mojeekNoResults: "web_search: 0 results but response doesn't look like a real empty page ({chars} chars, first 120: {preview}) \u2014 try: rephrase the query with simpler terms, or switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1341
+ bingBlocked: "web_search: Bing anti-bot page \u2014 rate-limited or blocked \u2014 try: wait 30s and retry, or switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1342
+ bingNoResults: "web_search: 0 results but response doesn't look like a real empty page ({chars} chars, first 120: {preview}) \u2014 try: rephrase the query with simpler terms, or switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1319
1343
  invalidEndpoint: 'web_search: invalid SearXNG endpoint "{endpoint}" \u2014 try: set a valid URL with /search-endpoint http://host:port',
1320
1344
  endpointMustBeHttp: "web_search: SearXNG endpoint must be http(s), got {protocol} \u2014 try: set a valid URL with /search-endpoint http://host:port",
1321
- cannotReach: "web_search: Cannot reach SearXNG server at {endpoint} \u2014 try: install and start SearXNG (https://github.com/searxng/searxng, e.g. `docker run -d -p 8080:8080 searxng/searxng`), or switch to another engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1322
- searxngNoResults: "web_search: 0 results but SearXNG response doesn't look like an empty results page ({chars} chars) \u2014 try: rephrase the query with simpler terms, or switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1345
+ cannotReach: "web_search: Cannot reach SearXNG server at {endpoint} \u2014 try: install and start SearXNG (https://github.com/searxng/searxng, e.g. `docker run -d -p 8080:8080 searxng/searxng`), or switch to another engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1346
+ searxngNoResults: "web_search: 0 results but SearXNG response doesn't look like an empty results page ({chars} chars) \u2014 try: rephrase the query with simpler terms, or switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1323
1347
  metasoMissingKey: "web_search: Metaso requires an API key \u2014 set METASO_API_KEY or configure one with /search-engine metaso <key>. Get one at https://metaso.cn/search-api/playground",
1324
1348
  metasoDailyLimit: "web_search: Metaso daily search limit reached \u2014 set METASO_API_KEY or get a key at https://metaso.cn/search-api/playground",
1325
1349
  metasoUnauthorized: "web_search: Metaso API key rejected \u2014 check METASO_API_KEY or get one at https://metaso.cn/search-api/playground",
1326
1350
  metasoRateLimit: "web_search: Metaso rate-limited \u2014 wait and retry, or get your own API key at https://metaso.cn/search-api/playground",
1327
- metasoServerError: "web_search: Metaso server error ({status}) \u2014 try again later, or switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1351
+ metasoServerError: "web_search: Metaso server error ({status}) \u2014 try again later, or switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1328
1352
  metasoParseError: "web_search: Metaso returned unparseable response (HTTP {status}) \u2014 try again later",
1329
1353
  metasoApiError: "web_search: Metaso API error (code {code}: {message}) \u2014 try again later",
1330
1354
  tavilyMissingKey: "web_search: Tavily backend requires an API key \u2014 set TAVILY_API_KEY env var or `tavilyApiKey` in ~/.reasonix/config.json; free 1000/mo signup at https://tavily.com",
1331
1355
  tavilyUnauthorized: "web_search: Tavily API key rejected \u2014 check TAVILY_API_KEY or get one at https://tavily.com",
1332
- tavilyRateLimit: "web_search: Tavily rate-limited or monthly quota exceeded \u2014 wait, switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa, or upgrade your Tavily plan",
1333
- tavilyServerError: "web_search: Tavily server error ({status}) \u2014 try again later, or switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1356
+ tavilyRateLimit: "web_search: Tavily rate-limited or monthly quota exceeded \u2014 wait, switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa, or upgrade your Tavily plan",
1357
+ tavilyServerError: "web_search: Tavily server error ({status}) \u2014 try again later, or switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1334
1358
  tavilyParseError: "web_search: Tavily returned unparseable response (HTTP {status}) \u2014 try again later",
1335
1359
  perplexityMissingKey: "web_search: Perplexity backend requires an API key \u2014 set PERPLEXITY_API_KEY env var or `perplexityApiKey` in ~/.reasonix/config.json; get one at https://perplexity.ai/settings/api",
1336
1360
  perplexityUnauthorized: "web_search: Perplexity API key rejected \u2014 check PERPLEXITY_API_KEY or get one at https://perplexity.ai/settings/api",
1337
- perplexityRateLimit: "web_search: Perplexity rate-limited \u2014 wait and retry, or switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1338
- perplexityServerError: "web_search: Perplexity server error ({status}) \u2014 try again later, or switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1361
+ perplexityRateLimit: "web_search: Perplexity rate-limited \u2014 wait and retry, or switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1362
+ perplexityServerError: "web_search: Perplexity server error ({status}) \u2014 try again later, or switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1339
1363
  perplexityParseError: "web_search: Perplexity returned unparseable response (HTTP {status}) \u2014 try again later",
1340
1364
  exaMissingKey: "web_search: Exa backend requires an API key \u2014 set EXA_API_KEY env var or `exaApiKey` in ~/.reasonix/config.json; free 1000/mo signup at https://exa.ai",
1341
1365
  exaUnauthorized: "web_search: Exa API key rejected \u2014 check EXA_API_KEY or get one at https://exa.ai",
1342
1366
  exaRateLimit: "web_search: Exa API rate-limited or monthly quota exceeded \u2014 wait or upgrade at https://exa.ai/pricing",
1343
- exaServerError: "web_search: Exa server error ({status}) \u2014 try again later, or switch engine with /search-engine mojeek|searxng|metaso|tavily|perplexity|exa",
1367
+ exaServerError: "web_search: Exa server error ({status}) \u2014 try again later, or switch engine with /search-engine bing|searxng|metaso|tavily|perplexity|exa",
1344
1368
  exaParseError: "web_search: Exa returned unparseable response (HTTP {status}) \u2014 try again later",
1345
1369
  fetchStatus: "web_fetch {status} for {url} \u2014 try: confirm the URL resolves in a browser; status suggests the host returned an error page",
1346
1370
  fetchRateLimit429: "web_fetch 429 for {url} \u2014 try: wait 10s before retrying; the host is rate-limiting this client",
@@ -1432,19 +1456,6 @@ var EN = {
1432
1456
  categoryProject: "project",
1433
1457
  categoryReference: "reference"
1434
1458
  },
1435
- copyMode: {
1436
- title: "\u2500\u2500 COPY MODE \u2500\u2500",
1437
- help: "j/k or \u2191/\u2193 move \xB7 v select \xB7 y yank \xB7 g/G top/bottom \xB7 q quit",
1438
- statusBar: "line {cur}/{total} \xB7 selection: {sel}",
1439
- statusYanked: "yanked {size} chars (osc52={osc52})",
1440
- statusEmpty: "nothing selected",
1441
- empty: "(no chat content yet \u2014 say something to the model first)",
1442
- labelUser: "you",
1443
- labelAssistant: "assistant",
1444
- labelReasoning: "reasoning",
1445
- yankedToast: "\u25B8 copied {size} chars to clipboard (osc52)",
1446
- yankedToastFile: "\u25B8 copied {size} chars \xB7 file: {path}"
1447
- },
1448
1459
  mcpHealth: {
1449
1460
  noData: "no inspect data",
1450
1461
  healthy: "healthy \xB7 {ms}ms",
@@ -1596,9 +1607,11 @@ var EN = {
1596
1607
  groupSystem: "System",
1597
1608
  descEnter: "Send message",
1598
1609
  descShiftEnter: "New line",
1610
+ descCtrlEnter: "New line",
1611
+ descCtrlJ: "New line",
1599
1612
  descCtrlU: "Clear input",
1600
1613
  descCtrlW: "Delete word",
1601
- descCtrlP: "Toggle shortcut panel",
1614
+ descCtrlP: "Show/hide shortcuts",
1602
1615
  descCtrlX: "Open in editor",
1603
1616
  descArrows: "Input history",
1604
1617
  descPgUpDown: "Scroll page",
@@ -1612,9 +1625,30 @@ var EN = {
1612
1625
  descCtrlC: "Quit",
1613
1626
  descEsc: "Stop / Cancel",
1614
1627
  descCtrlR: "Toggle verbose",
1615
- descCtrlO: "Expand stream",
1628
+ descCtrlO: "Expand reply (streaming only)",
1616
1629
  descHelp: "Show all commands",
1617
1630
  descShiftTab: "Switch edit mode"
1631
+ },
1632
+ mcpCli: {
1633
+ bundledCatalog: "Bundled MCP servers (offline catalog):",
1634
+ justFetched: "just fetched",
1635
+ cachedAge: "cached, {age}",
1636
+ moreAvailable: "more available",
1637
+ allLoaded: "all loaded",
1638
+ morePagesAvailable: "\u25B8 more pages available \u2014 `reasonix mcp list --pages <n>` or --all",
1639
+ installHint: "Install: reasonix mcp install <name>",
1640
+ usageSearch: "usage: reasonix mcp search <query>",
1641
+ usageInstall: "usage: reasonix mcp install <name>",
1642
+ noMatchesFor: 'No matches for "{q}" across {count} loaded entries ({source})',
1643
+ matchCount: '{count} match(es) for "{q}" in {source} registry ({loaded} entries scanned):',
1644
+ moreLoaded: "\u2026 {count} more loaded \u2014 use `reasonix mcp search <query>` to filter",
1645
+ moreMatches: "\u2026 {count} more matches",
1646
+ installed: "Installed: {spec}",
1647
+ noServerFound: 'No MCP server named "{target}" found after walking {pages} page(s) of the {source} registry.',
1648
+ noServerTryMore: "Try: reasonix mcp install {target} --max-pages 100",
1649
+ noInstallMeta: 'Could not derive install metadata for "{name}" \u2014 try `npx -y @smithery/cli install {name}` directly.',
1650
+ buildSpecFailed: "Cannot build install spec for {name}: {message}",
1651
+ alreadyInstalled: "Already installed: {spec}"
1618
1652
  }
1619
1653
  };
1620
1654
 
@@ -1661,7 +1695,17 @@ var zhCN = {
1661
1695
  missingApiKey: "\u672A\u8BBE\u7F6E DEEPSEEK_API_KEY \u4E14\u6807\u51C6\u8F93\u5165\u4E0D\u662F TTY\uFF08\u65E0\u6CD5\u4EA4\u4E92\u5F0F\u8F93\u5165\uFF09\u3002\n\u8BF7\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF\uFF0C\u6216\u5148\u8FD0\u884C `reasonix chat` \u4EA4\u4E92\u4E00\u6B21\u4EE5\u4FDD\u5B58\u5BC6\u94A5\u3002\n"
1662
1696
  },
1663
1697
  sessions: {
1664
- emptyHint: "\u6682\u65E0\u5DF2\u4FDD\u5B58\u7684\u4F1A\u8BDD \u2014 \u8FD0\u884C `reasonix chat`\uFF08\u4F1A\u8BDD\u4F1A\u81EA\u52A8\u4FDD\u5B58\uFF0C\u9664\u975E\u4F7F\u7528\u4E86 --no-session\uFF09\u3002"
1698
+ emptyHint: "\u6682\u65E0\u5DF2\u4FDD\u5B58\u7684\u4F1A\u8BDD \u2014 \u8FD0\u884C `reasonix chat`\uFF08\u4F1A\u8BDD\u4F1A\u81EA\u52A8\u4FDD\u5B58\uFF0C\u9664\u975E\u4F7F\u7528\u4E86 --no-session\uFF09\u3002",
1699
+ listHeader: "\u4FDD\u5B58\u7684\u4F1A\u8BDD (~/.reasonix/sessions/)\uFF1A",
1700
+ inspectHint: "\u67E5\u770B\uFF1Areasonix sessions <name>",
1701
+ resumeHint: "\u6062\u590D\uFF1Areasonix chat --session <name>",
1702
+ noSession: '\u627E\u4E0D\u5230\u4F1A\u8BDD "{name}"\uFF08\u6216\u4E3A\u7A7A\uFF09\u3002',
1703
+ lookedAt: "\u4F4D\u7F6E\uFF1A{path}",
1704
+ noIdleSessions: "\u6CA1\u6709\u95F2\u7F6E \u2265{days} \u5929\u7684\u4F1A\u8BDD\u3002\u65E0\u9700\u6E05\u7406\u3002",
1705
+ wouldPrune: "\u5C06\u6E05\u7406 {count} \u4E2A\u95F2\u7F6E \u2265{days} \u5929\u7684\u4F1A\u8BDD\uFF1A",
1706
+ dryRunHint: "\u53BB\u6389 --dry-run \u53EF\u5B9E\u9645\u6267\u884C\u5220\u9664\u3002",
1707
+ prunedCount: "\u5DF2\u6E05\u7406 {count} \u4E2A\u95F2\u7F6E \u2265{days} \u5929\u7684\u4F1A\u8BDD\uFF1A",
1708
+ daysInvalid: "--days \u5FC5\u987B\u662F\u6B63\u6574\u6570\uFF08\u4F20\u5165\u4E86 {days}\uFF09\u3002"
1665
1709
  },
1666
1710
  ui: {
1667
1711
  welcome: "\u968F\u65F6\u8FD0\u884C `reasonix` \u5F00\u59CB\u804A\u5929 \u2014 \u60A8\u7684\u8BBE\u7F6E\u5C06\u88AB\u8BB0\u4F4F\u3002",
@@ -1759,10 +1803,6 @@ var zhCN = {
1759
1803
  title: "\u590D\u5236 / \u7C98\u8D34",
1760
1804
  rows: [
1761
1805
  { key: "\u9009\u4E2D\u6587\u5B57", text: "\u76F4\u63A5\u62D6\u52A8 \u2014 \u7EC8\u7AEF\u539F\u751F\uFF08\u4E0D\u9700\u8981\u4EFB\u4F55\u4FEE\u9970\u952E\uFF09" },
1762
- {
1763
- key: "/copy",
1764
- text: "vim/tmux \u98CE\u683C\u590D\u5236\u6A21\u5F0F \u2014 SSH / mosh / tmux \u4E0B\u62D6\u9009\u8D8A\u8FC7\u53EF\u89C6\u533A\u65E0\u6548\u65F6\u7528\u8FD9\u4E2A"
1765
- },
1766
1806
  {
1767
1807
  key: "\u590D\u5236",
1768
1808
  text: "Ctrl+Shift+C\uFF08Win/Linux\uFF09\xB7 Cmd+C\uFF08macOS\uFF09\u2014 \u6216\u9009\u4E2D\u5373\u590D\u5236\uFF08\u770B\u7EC8\u7AEF\u8BBE\u7F6E\uFF09"
@@ -1853,9 +1893,6 @@ var zhCN = {
1853
1893
  },
1854
1894
  slash: {
1855
1895
  help: { description: "\u663E\u793A\u5B8C\u6574\u547D\u4EE4\u53C2\u8003" },
1856
- copy: {
1857
- description: "\u8FDB\u5165 vim/tmux \u98CE\u683C\u590D\u5236\u6A21\u5F0F \u2014 j/k \u79FB\u52A8\u3001v \u8D77\u9009\u533A\u3001y \u590D\u5236\u5230\u526A\u8D34\u677F"
1858
- },
1859
1896
  status: { description: "\u5F53\u524D\u6A21\u578B\u3001\u6807\u5FD7\u3001\u4E0A\u4E0B\u6587\u3001\u4F1A\u8BDD" },
1860
1897
  preset: {
1861
1898
  description: "\u6A21\u578B\u7EC4\u5408 \u2014 \u81EA\u52A8\u5728 flash \u2192 pro \u4E4B\u95F4\u5207\u6362\uFF0C\u6216\u9501\u5B9A flash/pro",
@@ -2011,8 +2048,8 @@ var zhCN = {
2011
2048
  argsHint: "<question>"
2012
2049
  },
2013
2050
  "search-engine": {
2014
- description: "\u5207\u6362\u7F51\u7EDC\u641C\u7D22\u540E\u7AEF \u2014 mojeek\uFF08\u9ED8\u8BA4\uFF0C\u65E0\u4F9D\u8D56\uFF09\u3001searxng\uFF08\u81EA\u6258\u7BA1\uFF09\u3001metaso\uFF08\u6BCF\u65E5 100 \u6B21\uFF09\u3001tavily\uFF08\u6BCF\u6708 1000 \u6B21\u514D\u8D39\uFF09\u3001perplexity\uFF08AI \u76F4\u63A5\u56DE\u7B54\uFF09\u6216 exa\uFF08AI \u76F4\u63A5\u56DE\u7B54\uFF09",
2015
- argsHint: "<mojeek|searxng|metaso|tavily|perplexity|exa> [<key>]"
2051
+ description: "\u5207\u6362\u7F51\u7EDC\u641C\u7D22\u540E\u7AEF \u2014 bing\uFF08\u9ED8\u8BA4\uFF0C\u56FD\u5185\u88F8 IP \u76F4\u8FDE\uFF09\u3001searxng\uFF08\u81EA\u6258\u7BA1\uFF09\u3001metaso\uFF08\u6BCF\u65E5 100 \u6B21\uFF09\u3001tavily\uFF08\u6BCF\u6708 1000 \u6B21\u514D\u8D39\uFF09\u3001perplexity\uFF08AI \u76F4\u63A5\u56DE\u7B54\uFF09\u6216 exa\uFF08AI \u76F4\u63A5\u56DE\u7B54\uFF09",
2052
+ argsHint: "<bing|searxng|metaso|tavily|perplexity|exa> [<key>]"
2016
2053
  }
2017
2054
  },
2018
2055
  wizard: {
@@ -2175,6 +2212,8 @@ var zhCN = {
2175
2212
  verboseOn: "\u25B8 \u8BE6\u7EC6\u6A21\u5F0F\u5DF2\u5F00 \u2014 \u663E\u793A\u5B8C\u6574\u63A8\u7406 + \u5DE5\u5177\u8F93\u51FA",
2176
2213
  verboseOff: "\u25B8 \u8BE6\u7EC6\u6A21\u5F0F\u5DF2\u5173 \u2014 \u6062\u590D\u5934\u5C3E\u7701\u7565",
2177
2214
  commandFailed: "! \u547D\u4EE4\u5931\u8D25",
2215
+ steerInjected: "\u25B8 \u5DF2\u52A0\u5165\u5F15\u5BFC\u961F\u5217 \u2014 \u5C06\u5728\u5F53\u524D\u6B65\u9AA4\u540E\u6CE8\u5165",
2216
+ steerCommandRejected: "\u25B8 \u5F53\u524D\u8F6E\u6B21\u5FD9\u788C\u65F6\u4E0D\u80FD\u63D0\u4EA4\u547D\u4EE4\uFF0C\u53EA\u80FD\u8F93\u5165\u666E\u901A\u5F15\u5BFC\u6D88\u606F",
2178
2217
  btwUsage: "\u25B8 /btw <\u95EE\u9898> \u2014 \u987A\u4FBF\u95EE\u4E2A\u9898\u5916\u8BDD\uFF0C\u4E0D\u4F1A\u5199\u5165\u5F53\u524D\u4F1A\u8BDD\u4E0A\u4E0B\u6587\u3002",
2179
2218
  btwHeader: "\u226B btw",
2180
2219
  btwFailed: "/btw \u8C03\u7528\u5931\u8D25",
@@ -2220,7 +2259,9 @@ var zhCN = {
2220
2259
  editHistoryAlreadyReverted: "\uFF08\u5DF2\u64A4\u9500 \u2014 /history \u663E\u793A\u6279\u6B21\u7EA7\u72B6\u6001\uFF09",
2221
2260
  editHistoryRevertFile: "/undo {id} {path} \u2192 \u4EC5\u8FD8\u539F\u6B64\u6587\u4EF6",
2222
2261
  mcpFailed: "MCP {name} \u5931\u8D25",
2223
- mcpWarn: "MCP {name} \u8B66\u544A"
2262
+ mcpWarn: "MCP {name} \u8B66\u544A",
2263
+ unknownTheme: "\u672A\u77E5\u4E3B\u9898\uFF1A{name}\n\u53EF\u7528\u4E3B\u9898\uFF1A{choices}",
2264
+ themeSaved: "\u4E3B\u9898\u5DF2\u4FDD\u5B58\uFF1A{name}\n\u4E0B\u6B21\u542F\u52A8\u751F\u6548\uFF1A{active}"
2224
2265
  },
2225
2266
  hooks: {
2226
2267
  head: "\u94A9\u5B50 {tag} `{cmd}` {decision}{truncTag}",
@@ -2264,6 +2305,7 @@ var zhCN = {
2264
2305
  balance402: "\u4F59\u989D\u4E0D\u8DB3\uFF08DeepSeek 402\uFF09\uFF1A{inner}\u3002\u5728 https://platform.deepseek.com/top_up \u5145\u503C \u2014 \u4F59\u989D\u975E\u96F6\u65F6\u9762\u677F\u9876\u680F\u4F1A\u663E\u793A\u3002",
2265
2306
  badparam422: "\u53C2\u6570\u9519\u8BEF\uFF08DeepSeek 422\uFF09\uFF1A{inner}",
2266
2307
  badrequest400: "\u8BF7\u6C42\u9519\u8BEF\uFF08DeepSeek 400\uFF09\uFF1A{inner}",
2308
+ concurrency429: "DeepSeek \u5E76\u53D1\u8D85\u9650\uFF08429\uFF09\uFF1A{inner}\u3002\u8D26\u53F7\u5728\u8DD1\u7684\u8BF7\u6C42\u8D85\u8FC7\u4E0A\u9650\uFF08v4-pro 500\u3001v4-flash 2500\uFF0C\u8D26\u53F7\u4E0B\u6240\u6709 API key \u7D2F\u52A0\uFF09\u3002\u901A\u5E38\u662F\u540C\u4E00\u8D26\u53F7\u5F00\u4E86\u591A\u4E2A Reasonix \u8FDB\u7A0B\uFF0C\u6216\u8005\u5E76\u884C subagent \u4E00\u6B21\u53D1\u592A\u591A\u3002\u7B49\u51E0\u79D2\u91CD\u8BD5\u3001\u51CF\u5C11\u5E76\u884C\uFF0C\u6216\u5728 https://platform.deepseek.com \u7533\u8BF7\u6269\u5BB9\u3002",
2267
2309
  deepseek5xxHead: "DeepSeek \u670D\u52A1\u4E0D\u53EF\u7528\uFF08{status}\uFF09 \u2014 \u8FD9\u662F DeepSeek \u670D\u52A1\u7AEF\u95EE\u9898\uFF0C\u4E0D\u662F Reasonix \u6545\u969C\u3002\u5DF2\u6309\u6307\u6570\u9000\u907F\u91CD\u8BD5 4 \u6B21\u3002",
2268
2310
  deepseek5xxReachable: " DeepSeek \u4E3B API \u5065\u5EB7\u68C0\u67E5\u901A\u8FC7\uFF0C\u4F46 /chat/completions \u5728\u6302 \u2014 \u4ED6\u4EEC\u90A3\u8FB9\u90E8\u5206\u670D\u52A1\u5F02\u5E38\u3002",
2269
2311
  deepseek5xxUnreachable: " \u65E0\u6CD5\u4ECE\u4F60\u7684\u7F51\u7EDC\u8BBF\u95EE DeepSeek API \u2014 \u53EF\u80FD\u662F DS \u6574\u4F53\u6545\u969C\uFF0C\u4E5F\u53EF\u80FD\u662F\u672C\u5730\u7F51\u7EDC\u95EE\u9898\u3002",
@@ -2549,6 +2591,9 @@ var zhCN = {
2549
2591
  activeNone: "\u25B8 \u6D3B\u8DC3\u8BA1\u5212\uFF1A\uFF08\u65E0\uFF09",
2550
2592
  noArchives: "\u6B64\u4F1A\u8BDD\u5C1A\u65E0\u5F52\u6863\u8BA1\u5212 \u2014 \u5F53\u6BCF\u4E2A\u6B65\u9AA4\u5B8C\u6210\u65F6\u81EA\u52A8\u5F52\u6863",
2551
2593
  archivedHeader: "\u5DF2\u5F52\u6863\uFF08{count}\uFF09\uFF1A",
2594
+ evidencePending: " ! \u7B49\u5F85 evidence \u2014 \u5F53\u524D\u6B65\u9AA4\u9700\u8981 verification/diff/checkpoint/manual evidence",
2595
+ evidenceLine: " evidence {stepId}: {summary}",
2596
+ archivedEvidenceLine: " evidence: {summary}",
2552
2597
  replayNoSession: "\u672A\u9644\u52A0\u4F1A\u8BDD \u2014 `/replay` \u662F\u6309\u4F1A\u8BDD\u7684\u3002\u5728\u9879\u76EE\u4E2D\u8FD0\u884C `reasonix code` \u4EE5\u83B7\u53D6\u4F1A\u8BDD\u3002",
2553
2598
  replayNoArchives: "\u6B64\u4F1A\u8BDD\u5C1A\u65E0\u5F52\u6863\u8BA1\u5212 \u2014 `/replay` \u5728\u8BA1\u5212\u5B8C\u6210\u540E\u542F\u7528\uFF08\u6BCF\u4E2A\u6B65\u9AA4\u5B8C\u6210\u65F6\u81EA\u52A8\u5F52\u6863\uFF09\u3002",
2554
2599
  replayInvalidIndex: "\u65E0\u6548\u7D22\u5F15 \u2014 `/replay` \u63A5\u53D7 1..{max}\uFF08\u6700\u65B0 = 1\uFF09\u3002\u4F7F\u7528 `/plans` \u67E5\u770B\u5217\u8868\u3002",
@@ -2643,7 +2688,7 @@ var zhCN = {
2643
2688
  currentEngine: "\u5F53\u524D\u7F51\u9875\u641C\u7D22\u5F15\u64CE\uFF1A{engine}",
2644
2689
  endpoint: "SearXNG \u7AEF\u70B9\uFF1A{url}",
2645
2690
  usageHeader: "\u7528\u6CD5\uFF1A",
2646
- usageMojeek: " /search-engine mojeek \u4F7F\u7528 Mojeek\uFF08\u9ED8\u8BA4\uFF0C\u65E0\u5916\u90E8\u4F9D\u8D56\uFF09",
2691
+ usageBing: " /search-engine bing \u4F7F\u7528 Bing\uFF08\u9ED8\u8BA4\uFF0C\u56FD\u5185\u88F8 IP \u76F4\u8FDE\uFF0C\u65E0\u9700\u4EE3\u7406\uFF09",
2647
2692
  usageSearxng: " /search-engine searxng \u4F7F\u7528 SearXNG \u9ED8\u8BA4\u7AEF\u70B9",
2648
2693
  usageSearxngUrl: " /search-engine searxng <url> \u4F7F\u7528 SearXNG \u81EA\u5B9A\u4E49\u7AEF\u70B9",
2649
2694
  usageMetaso: " /search-engine metaso \u4F7F\u7528 Metaso API\uFF08\u6BCF\u5929 100 \u6B21\u514D\u8D39\uFF0C\u914D\u7F6E\u4F60\u81EA\u5DF1\u7684 API \u5BC6\u94A5\u53EF\u63D0\u5347\u9650\u989D\uFF09",
@@ -2739,7 +2784,9 @@ var zhCN = {
2739
2784
  editorFailed: "\u5916\u90E8\u7F16\u8F91\u5668\uFF1A",
2740
2785
  editorMissing: "\u672A\u8BBE\u7F6E $EDITOR / $VISUAL / $GIT_EDITOR \u2014 \u8BF7\u5BFC\u51FA\u73AF\u5883\u53D8\u91CF\uFF08\u4F8B\u5982 `export EDITOR=nano`\uFF09\u540E\u91CD\u8BD5",
2741
2786
  editorExited: "\u7F16\u8F91\u5668\u5F02\u5E38\u9000\u51FA\uFF0C\u8FD4\u56DE\u7801 {code}",
2742
- typeaheadStaged: "\u25B8 {count} \u884C\u5DF2\u6682\u5B58 \xB7 esc \u53EC\u56DE"
2787
+ typeaheadStaged: "\u25B8 {count} \u884C\u5DF2\u6682\u5B58 \xB7 esc \u53EC\u56DE",
2788
+ steerPlaceholder: "\u8F93\u5165\u6D88\u606F\u4EE5\u5F15\u5BFC\u5F53\u524D\u4EFB\u52A1 \u2014 \u5FD9\u788C\u65F6\u4E0D\u652F\u6301\u547D\u4EE4",
2789
+ steerHint: "\u53D1\u9001 \u2014 \u56DE\u5408\u5185\u6CE8\u5165"
2743
2790
  },
2744
2791
  pathConfirm: {
2745
2792
  title: "\u6C99\u7BB1\u5916\u8DEF\u5F84",
@@ -2758,7 +2805,13 @@ var zhCN = {
2758
2805
  denyDesc: "\u6309 Tab \u6DFB\u52A0\u8BF4\u660E\uFF0C\u544A\u8BC9\u6A21\u578B\u539F\u56E0",
2759
2806
  pathLabel: "\u8DEF\u5F84",
2760
2807
  sandboxLabel: "\u6C99\u7BB1",
2761
- allowPrefixLabel: "\u524D\u7F00"
2808
+ allowPrefixLabel: "\u524D\u7F00",
2809
+ promptTitleRead: "\u8BBF\u95EE\u8DEF\u5F84 \u2014 \u8BFB\u53D6",
2810
+ promptTitleWrite: "\u8BBF\u95EE\u8DEF\u5F84 \u2014 \u5199\u5165",
2811
+ actionAllowRead: "\u5141\u8BB8\u8BFB\u53D6",
2812
+ actionAllowWrite: "\u5141\u8BB8\u5199\u5165",
2813
+ actionAlwaysAllow: "\u59CB\u7EC8\u5141\u8BB8 \u2014 {prefix}",
2814
+ actionDeny: "\u62D2\u7EDD"
2762
2815
  },
2763
2816
  shellConfirm: {
2764
2817
  title: "Shell \u547D\u4EE4",
@@ -2780,7 +2833,12 @@ var zhCN = {
2780
2833
  timeoutLabel: "\u8D85\u65F6",
2781
2834
  waitLabel: "\u7B49\u5F85",
2782
2835
  previewMore: "\u2026 \u8FD8\u6709 {n} \u884C\u672A\u663E\u793A \u2014 \u6309 esc \u53D6\u6D88\uFF0C\u8BA9\u6A21\u578B\u62C6\u5206\u540E\u518D\u8BD5",
2783
- previewMorePlural: "\u2026 \u8FD8\u6709 {n} \u884C\u672A\u663E\u793A \u2014 \u6309 esc \u53D6\u6D88\uFF0C\u8BA9\u6A21\u578B\u62C6\u5206\u540E\u518D\u8BD5"
2836
+ previewMorePlural: "\u2026 \u8FD8\u6709 {n} \u884C\u672A\u663E\u793A \u2014 \u6309 esc \u53D6\u6D88\uFF0C\u8BA9\u6A21\u578B\u62C6\u5206\u540E\u518D\u8BD5",
2837
+ promptTitleRunCommand: "\u8FD0\u884C\u547D\u4EE4",
2838
+ promptTitleRunBackground: "\u8FD0\u884C\u540E\u53F0\u547D\u4EE4",
2839
+ actionRunOnce: "\u8FD0\u884C\u4E00\u6B21",
2840
+ actionAlwaysAllow: "\u59CB\u7EC8\u5141\u8BB8 \u2014 {prefix}",
2841
+ actionDeny: "\u62D2\u7EDD"
2784
2842
  },
2785
2843
  editConfirm: {
2786
2844
  footer: "[y/Enter] \u5E94\u7528 \xB7 [n] \u62D2\u7EDD\u5E76\u8BF4\u660E \xB7 [a] \u5E94\u7528\u5269\u4F59 \xB7 [A] \u5207\u6362 AUTO \xB7 [\u2191\u2193/Space] \u6EDA\u52A8 \xB7 [Esc] \u4E2D\u6B62",
@@ -2921,37 +2979,37 @@ var zhCN = {
2921
2979
  probeFailed: "\u63A2\u6D4B\u5931\u8D25 \u2014 {message}"
2922
2980
  },
2923
2981
  webErrors: {
2924
- status: "web_search {status} \u2014 try: \u641C\u7D22\u540E\u7AEF\u8FD4\u56DE\u9519\u8BEF\uFF1B\u8BF7\u6539\u5199\u67E5\u8BE2\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2982
+ status: "web_search {status} \u2014 try: \u641C\u7D22\u540E\u7AEF\u8FD4\u56DE\u9519\u8BEF\uFF1B\u8BF7\u6539\u5199\u67E5\u8BE2\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2925
2983
  rateLimit429: "web_search 429 \u2014 try: \u7B49\u5F85 10 \u79D2\u540E\u91CD\u8BD5\uFF0C\u6216\u6539\u5199\u67E5\u8BE2\uFF1B\u641C\u7D22\u540E\u7AEF\u6B63\u5728\u5BF9\u8BE5\u5BA2\u6237\u7AEF\u8FDB\u884C\u9650\u6D41",
2926
- forbidden403: "web_search 403 \u2014 try: \u641C\u7D22\u540E\u7AEF\u62D2\u7EDD\u8BE5\u5BA2\u6237\u7AEF\u8BBF\u95EE\uFF1B\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE\uFF0C\u6216\u7A0D\u540E\u91CD\u8BD5",
2984
+ forbidden403: "web_search 403 \u2014 try: \u641C\u7D22\u540E\u7AEF\u62D2\u7EDD\u8BE5\u5BA2\u6237\u7AEF\u8BBF\u95EE\uFF1B\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE\uFF0C\u6216\u7A0D\u540E\u91CD\u8BD5",
2927
2985
  serverError5xx: "web_search {status} \u2014 try: \u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u641C\u7D22 URL\uFF1B\u82E5\u80FD\u52A0\u8F7D\u5219\u5C5E\u4E34\u65F6\u6545\u969C\uFF0C\u7B49 30 \u79D2\u91CD\u8BD5\u5373\u53EF",
2928
- mojeekBlocked: "web_search: Mojeek \u53CD\u722C\u9875\u9762 \u2014 \u9891\u7387\u9650\u5236\u6216\u88AB\u5C4F\u853D \u2014 try: \u7B49\u5F85 30 \u79D2\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2929
- mojeekNoResults: "web_search: \u8FD4\u56DE 0 \u6761\u7ED3\u679C\u4F46\u54CD\u5E94\u770B\u8D77\u6765\u4E0D\u662F\u6B63\u5E38\u7A7A\u7ED3\u679C\u9875\uFF08{chars} \u5B57\u7B26\uFF0C\u524D 120 \u5B57\u7B26\uFF1A{preview}\uFF09\u2014 try: \u4F7F\u7528\u66F4\u7B80\u5355\u7684\u5173\u952E\u8BCD\u6539\u5199\u67E5\u8BE2\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2986
+ bingBlocked: "web_search: Bing \u53CD\u722C\u9875\u9762 \u2014 \u9891\u7387\u9650\u5236\u6216\u88AB\u5C4F\u853D \u2014 try: \u7B49\u5F85 30 \u79D2\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2987
+ bingNoResults: "web_search: \u8FD4\u56DE 0 \u6761\u7ED3\u679C\u4F46\u54CD\u5E94\u770B\u8D77\u6765\u4E0D\u662F\u6B63\u5E38\u7A7A\u7ED3\u679C\u9875\uFF08{chars} \u5B57\u7B26\uFF0C\u524D 120 \u5B57\u7B26\uFF1A{preview}\uFF09\u2014 try: \u4F7F\u7528\u66F4\u7B80\u5355\u7684\u5173\u952E\u8BCD\u6539\u5199\u67E5\u8BE2\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2930
2988
  invalidEndpoint: 'web_search: \u65E0\u6548\u7684 SearXNG \u7AEF\u70B9 "{endpoint}" \u2014 try: \u4F7F\u7528 /search-endpoint http://host:port \u8BBE\u7F6E\u6709\u6548\u7684 URL',
2931
2989
  endpointMustBeHttp: "web_search: SearXNG \u7AEF\u70B9\u5FC5\u987B\u662F http(s) \u534F\u8BAE\uFF0C\u5F53\u524D\u4E3A {protocol} \u2014 try: \u4F7F\u7528 /search-endpoint http://host:port \u8BBE\u7F6E\u6709\u6548\u7684 URL",
2932
- cannotReach: "web_search: \u65E0\u6CD5\u8BBF\u95EE SearXNG \u670D\u52A1\u5668 {endpoint} \u2014 try: \u5B89\u88C5\u5E76\u542F\u52A8 SearXNG\uFF08https://github.com/searxng/searxng\uFF0C\u4F8B\u5982 `docker run -d -p 8080:8080 searxng/searxng`\uFF09\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2933
- searxngNoResults: "web_search: \u8FD4\u56DE 0 \u6761\u7ED3\u679C\u4F46 SearXNG \u54CD\u5E94\u770B\u8D77\u6765\u4E0D\u662F\u6B63\u5E38\u7A7A\u7ED3\u679C\u9875\uFF08{chars} \u5B57\u7B26\uFF09\u2014 try: \u4F7F\u7528\u66F4\u7B80\u5355\u7684\u5173\u952E\u8BCD\u6539\u5199\u67E5\u8BE2\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2990
+ cannotReach: "web_search: \u65E0\u6CD5\u8BBF\u95EE SearXNG \u670D\u52A1\u5668 {endpoint} \u2014 try: \u5B89\u88C5\u5E76\u542F\u52A8 SearXNG\uFF08https://github.com/searxng/searxng\uFF0C\u4F8B\u5982 `docker run -d -p 8080:8080 searxng/searxng`\uFF09\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2991
+ searxngNoResults: "web_search: \u8FD4\u56DE 0 \u6761\u7ED3\u679C\u4F46 SearXNG \u54CD\u5E94\u770B\u8D77\u6765\u4E0D\u662F\u6B63\u5E38\u7A7A\u7ED3\u679C\u9875\uFF08{chars} \u5B57\u7B26\uFF09\u2014 try: \u4F7F\u7528\u66F4\u7B80\u5355\u7684\u5173\u952E\u8BCD\u6539\u5199\u67E5\u8BE2\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2934
2992
  metasoMissingKey: "web_search: Metaso \u9700\u8981 API \u5BC6\u94A5 \u2014 \u8BBE\u7F6E METASO_API_KEY\uFF0C\u6216\u4F7F\u7528 /search-engine metaso <key> \u914D\u7F6E\uFF1B\u53EF\u5728 https://metaso.cn/search-api/playground \u83B7\u53D6\u5BC6\u94A5",
2935
2993
  metasoDailyLimit: "web_search: Metaso \u6BCF\u65E5\u641C\u7D22\u6B21\u6570\u5DF2\u8FBE\u4E0A\u9650 \u2014 \u8BBE\u7F6E METASO_API_KEY\uFF0C\u6216\u5728 https://metaso.cn/search-api/playground \u83B7\u53D6\u5BC6\u94A5",
2936
2994
  metasoUnauthorized: "web_search: Metaso API \u5BC6\u94A5\u88AB\u62D2\u7EDD \u2014 \u68C0\u67E5 METASO_API_KEY\uFF0C\u6216\u5728 https://metaso.cn/search-api/playground \u83B7\u53D6\u5BC6\u94A5",
2937
2995
  metasoRateLimit: "web_search: Metaso \u8BF7\u6C42\u9891\u7387\u9650\u5236 \u2014 \u7B49\u5F85\u540E\u91CD\u8BD5\uFF0C\u6216\u5728 https://metaso.cn/search-api/playground \u83B7\u53D6\u81EA\u5DF1\u7684\u5BC6\u94A5",
2938
- metasoServerError: "web_search: Metaso \u670D\u52A1\u5668\u9519\u8BEF\uFF08{status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2996
+ metasoServerError: "web_search: Metaso \u670D\u52A1\u5668\u9519\u8BEF\uFF08{status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2939
2997
  metasoParseError: "web_search: Metaso \u8FD4\u56DE\u65E0\u6CD5\u89E3\u6790\u7684\u54CD\u5E94\uFF08HTTP {status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5",
2940
2998
  metasoApiError: "web_search: Metaso API \u9519\u8BEF\uFF08code {code}: {message}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5",
2941
2999
  tavilyMissingKey: "web_search: Tavily \u540E\u7AEF\u9700\u8981 API \u5BC6\u94A5 \u2014 \u8BBE\u7F6E TAVILY_API_KEY \u73AF\u5883\u53D8\u91CF\uFF0C\u6216\u5728 ~/.reasonix/config.json \u4E2D\u914D\u7F6E `tavilyApiKey`\uFF1Bhttps://tavily.com \u6BCF\u6708 1000 \u6B21\u514D\u8D39",
2942
3000
  tavilyUnauthorized: "web_search: Tavily API \u5BC6\u94A5\u88AB\u62D2\u7EDD \u2014 \u68C0\u67E5 TAVILY_API_KEY\uFF0C\u6216\u5728 https://tavily.com \u83B7\u53D6\u5BC6\u94A5",
2943
- tavilyRateLimit: "web_search: Tavily \u8BF7\u6C42\u9891\u7387\u9650\u5236\u6216\u6708\u5EA6\u914D\u989D\u7528\u5C3D \u2014 \u7B49\u5F85\u3001\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE\uFF0C\u6216\u5347\u7EA7 Tavily \u8BA1\u5212",
2944
- tavilyServerError: "web_search: Tavily \u670D\u52A1\u5668\u9519\u8BEF\uFF08{status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
3001
+ tavilyRateLimit: "web_search: Tavily \u8BF7\u6C42\u9891\u7387\u9650\u5236\u6216\u6708\u5EA6\u914D\u989D\u7528\u5C3D \u2014 \u7B49\u5F85\u3001\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE\uFF0C\u6216\u5347\u7EA7 Tavily \u8BA1\u5212",
3002
+ tavilyServerError: "web_search: Tavily \u670D\u52A1\u5668\u9519\u8BEF\uFF08{status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2945
3003
  tavilyParseError: "web_search: Tavily \u8FD4\u56DE\u65E0\u6CD5\u89E3\u6790\u7684\u54CD\u5E94\uFF08HTTP {status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5",
2946
3004
  perplexityMissingKey: "web_search: Perplexity \u540E\u7AEF\u9700\u8981 API \u5BC6\u94A5 \u2014 \u8BBE\u7F6E PERPLEXITY_API_KEY \u73AF\u5883\u53D8\u91CF\uFF0C\u6216\u5728 ~/.reasonix/config.json \u4E2D\u914D\u7F6E `perplexityApiKey`\uFF1B\u5728 https://perplexity.ai/settings/api \u83B7\u53D6\u5BC6\u94A5",
2947
3005
  perplexityUnauthorized: "web_search: Perplexity API \u5BC6\u94A5\u88AB\u62D2\u7EDD \u2014 \u68C0\u67E5 PERPLEXITY_API_KEY\uFF0C\u6216\u5728 https://perplexity.ai/settings/api \u83B7\u53D6\u5BC6\u94A5",
2948
- perplexityRateLimit: "web_search: Perplexity \u8BF7\u6C42\u9891\u7387\u9650\u5236 \u2014 \u7B49\u5F85\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2949
- perplexityServerError: "web_search: Perplexity \u670D\u52A1\u5668\u9519\u8BEF\uFF08{status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
3006
+ perplexityRateLimit: "web_search: Perplexity \u8BF7\u6C42\u9891\u7387\u9650\u5236 \u2014 \u7B49\u5F85\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
3007
+ perplexityServerError: "web_search: Perplexity \u670D\u52A1\u5668\u9519\u8BEF\uFF08{status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2950
3008
  perplexityParseError: "web_search: Perplexity \u8FD4\u56DE\u65E0\u6CD5\u89E3\u6790\u7684\u54CD\u5E94\uFF08HTTP {status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5",
2951
3009
  exaMissingKey: "web_search: Exa \u540E\u7AEF\u9700\u8981 API \u5BC6\u94A5 \u2014 \u8BBE\u7F6E EXA_API_KEY \u73AF\u5883\u53D8\u91CF\uFF0C\u6216\u5728 ~/.reasonix/config.json \u4E2D\u914D\u7F6E `exaApiKey`\uFF1Bhttps://exa.ai \u6BCF\u6708 1000 \u6B21\u514D\u8D39",
2952
3010
  exaUnauthorized: "web_search: Exa API \u5BC6\u94A5\u88AB\u62D2\u7EDD \u2014 \u68C0\u67E5 EXA_API_KEY\uFF0C\u6216\u5728 https://exa.ai \u83B7\u53D6\u5BC6\u94A5",
2953
3011
  exaRateLimit: "web_search: Exa \u8BF7\u6C42\u9891\u7387\u9650\u5236\u6216\u6708\u5EA6\u914D\u989D\u7528\u5C3D \u2014 \u7B49\u5F85\u5347\u7EA7\uFF0C\u6216\u5728 https://exa.ai/pricing \u67E5\u770B\u8BA1\u5212",
2954
- exaServerError: "web_search: Exa \u670D\u52A1\u5668\u9519\u8BEF\uFF08{status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine mojeek|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
3012
+ exaServerError: "web_search: Exa \u670D\u52A1\u5668\u9519\u8BEF\uFF08{status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u4F7F\u7528 /search-engine bing|searxng|metaso|tavily|perplexity|exa \u5207\u6362\u5F15\u64CE",
2955
3013
  exaParseError: "web_search: Exa \u8FD4\u56DE\u65E0\u6CD5\u89E3\u6790\u7684\u54CD\u5E94\uFF08HTTP {status}\uFF09\u2014 \u7A0D\u540E\u91CD\u8BD5",
2956
3014
  fetchStatus: "web_fetch {status} for {url} \u2014 try: \u5728\u6D4F\u89C8\u5668\u4E2D\u786E\u8BA4\u8BE5 URL \u80FD\u5426\u8BBF\u95EE\uFF1B\u8BE5\u72B6\u6001\u7801\u8868\u660E\u76EE\u6807\u4E3B\u673A\u8FD4\u56DE\u4E86\u9519\u8BEF\u9875\u9762",
2957
3015
  fetchRateLimit429: "web_fetch 429 for {url} \u2014 try: \u7B49\u5F85 10 \u79D2\u540E\u91CD\u8BD5\uFF1B\u76EE\u6807\u4E3B\u673A\u6B63\u5728\u5BF9\u8BE5\u5BA2\u6237\u7AEF\u8FDB\u884C\u9650\u6D41",
@@ -3043,19 +3101,6 @@ var zhCN = {
3043
3101
  categoryProject: "\u9879\u76EE",
3044
3102
  categoryReference: "\u53C2\u8003"
3045
3103
  },
3046
- copyMode: {
3047
- title: "\u2500\u2500 \u590D\u5236\u6A21\u5F0F \u2500\u2500",
3048
- help: "j/k \u6216 \u2191/\u2193 \u79FB\u52A8 \xB7 v \u8D77\u9009\u533A \xB7 y \u590D\u5236 \xB7 g/G \u9876/\u5E95 \xB7 q \u9000\u51FA",
3049
- statusBar: "\u7B2C {cur}/{total} \u884C \xB7 \u9009\u533A\uFF1A{sel}",
3050
- statusYanked: "\u5DF2\u590D\u5236 {size} \u5B57\u7B26\uFF08osc52={osc52}\uFF09",
3051
- statusEmpty: "\u672A\u9009\u4E2D\u5185\u5BB9",
3052
- empty: "\uFF08\u8FD8\u6CA1\u6709\u804A\u5929\u5185\u5BB9 \u2014 \u5148\u548C\u6A21\u578B\u8BF4\u70B9\u4EC0\u4E48\uFF09",
3053
- labelUser: "\u4F60",
3054
- labelAssistant: "\u52A9\u624B",
3055
- labelReasoning: "\u63A8\u7406",
3056
- yankedToast: "\u25B8 \u5DF2\u590D\u5236 {size} \u5B57\u7B26\u5230\u526A\u8D34\u677F (osc52)",
3057
- yankedToastFile: "\u25B8 \u5DF2\u590D\u5236 {size} \u5B57\u7B26 \xB7 \u6587\u4EF6\uFF1A{path}"
3058
- },
3059
3104
  mcpHealth: {
3060
3105
  noData: "\u65E0\u68C0\u67E5\u6570\u636E",
3061
3106
  healthy: "\u6B63\u5E38 \xB7 {ms}ms",
@@ -3207,9 +3252,11 @@ var zhCN = {
3207
3252
  groupSystem: "\u7CFB\u7EDF",
3208
3253
  descEnter: "\u53D1\u9001\u6D88\u606F",
3209
3254
  descShiftEnter: "\u6362\u884C",
3255
+ descCtrlEnter: "\u6362\u884C",
3256
+ descCtrlJ: "\u6362\u884C",
3210
3257
  descCtrlU: "\u6E05\u7A7A\u8F93\u5165",
3211
3258
  descCtrlW: "\u5220\u9664\u5355\u8BCD",
3212
- descCtrlP: "\u6253\u5F00/\u5173\u95ED\u5FEB\u6377\u952E\u9762\u677F",
3259
+ descCtrlP: "\u663E\u793A/\u9690\u85CF\u5FEB\u6377\u952E",
3213
3260
  descCtrlX: "\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00",
3214
3261
  descArrows: "\u6D4F\u89C8\u8F93\u5165\u5386\u53F2",
3215
3262
  descPgUpDown: "\u7FFB\u9875",
@@ -3223,9 +3270,30 @@ var zhCN = {
3223
3270
  descCtrlC: "\u9000\u51FA",
3224
3271
  descEsc: "\u505C\u6B62/\u53D6\u6D88",
3225
3272
  descCtrlR: "\u5207\u6362\u8BE6\u7EC6\u6A21\u5F0F",
3226
- descCtrlO: "\u5C55\u5F00\u6D41\u5F0F\u8F93\u51FA",
3273
+ descCtrlO: "\u5C55\u5F00\u56DE\u590D\uFF08\u4EC5\u6D41\u5F0F\u8F93\u51FA\u671F\u95F4\uFF09",
3227
3274
  descHelp: "\u663E\u793A\u6240\u6709\u547D\u4EE4",
3228
3275
  descShiftTab: "\u5207\u6362\u7F16\u8F91\u6A21\u5F0F"
3276
+ },
3277
+ mcpCli: {
3278
+ bundledCatalog: "\u5DF2\u6253\u5305\u7684 MCP \u670D\u52A1\u5668\uFF08\u79BB\u7EBF\u76EE\u5F55\uFF09\uFF1A",
3279
+ justFetched: "\u521A\u521A\u83B7\u53D6",
3280
+ cachedAge: "\u7F13\u5B58\uFF0C{age}",
3281
+ moreAvailable: "\u8FD8\u6709\u66F4\u591A",
3282
+ allLoaded: "\u5DF2\u5168\u90E8\u52A0\u8F7D",
3283
+ morePagesAvailable: "\u25B8 \u8FD8\u6709\u66F4\u591A\u9875\u53EF\u7528 \u2014 `reasonix mcp list --pages <n>` \u6216 --all",
3284
+ installHint: "\u5B89\u88C5\uFF1Areasonix mcp install <name>",
3285
+ usageSearch: "\u7528\u6CD5\uFF1Areasonix mcp search <query>",
3286
+ usageInstall: "\u7528\u6CD5\uFF1Areasonix mcp install <name>",
3287
+ noMatchesFor: '\u672A\u627E\u5230 "{q}" \u7684\u5339\u914D\u9879\uFF08\u5DF2\u68C0\u7D22 {count} \u6761\u8BB0\u5F55\uFF0C\u6765\u6E90\uFF1A{source}\uFF09',
3288
+ matchCount: '\u5728 {source} \u4E2D\u627E\u5230 {count} \u6761 "{q}" \u7684\u5339\u914D\u9879\uFF08\u5DF2\u626B\u63CF {loaded} \u6761\u8BB0\u5F55\uFF09\uFF1A',
3289
+ moreLoaded: "\u2026 \u8FD8\u6709 {count} \u6761\u5DF2\u52A0\u8F7D \u2014 \u4F7F\u7528 `reasonix mcp search <query>` \u7B5B\u9009",
3290
+ moreMatches: "\u2026 \u8FD8\u6709 {count} \u6761\u5339\u914D\u9879",
3291
+ installed: "\u5DF2\u5B89\u88C5\uFF1A{spec}",
3292
+ noServerFound: '\u5728 {source} \u4E2D\u904D\u5386\u4E86 {pages} \u9875\u540E\u672A\u627E\u5230\u540D\u4E3A "{target}" \u7684 MCP \u670D\u52A1\u5668\u3002',
3293
+ noServerTryMore: "\u8BD5\u8BD5\uFF1Areasonix mcp install {target} --max-pages 100",
3294
+ noInstallMeta: '\u65E0\u6CD5\u4E3A "{name}" \u83B7\u53D6\u5B89\u88C5\u5143\u6570\u636E \u2014 \u8BD5\u8BD5 `npx -y @smithery/cli install {name}`\u3002',
3295
+ buildSpecFailed: "\u65E0\u6CD5\u4E3A {name} \u6784\u5EFA\u5B89\u88C5 spec\uFF1A{message}",
3296
+ alreadyInstalled: "\u5DF2\u5B89\u88C5\uFF1A{spec}"
3229
3297
  }
3230
3298
  };
3231
3299
 
@@ -3316,4 +3384,4 @@ export {
3316
3384
  tObj,
3317
3385
  t
3318
3386
  };
3319
- //# sourceMappingURL=chunk-PIC5HJRD.js.map
3387
+ //# sourceMappingURL=chunk-YEF7C4XI.js.map