返回 DeepSeek-Reasonix
messages_en.go
根目录 / internal / i18n / messages_en.go
1 package i18n
2
3 // English is the baseline catalogue. The drift-guard test reflects over its
4 // fields, so every other catalogue must populate the same set.
5 var English = Messages{
6 WelcomeTitleFmt: "Welcome to %s",
7 NoConfigYet: "No configuration found yet — let's set it up.",
8
9 InitHint: "Project memory (AGENTS.md) is generated in-session: run `reasonix`, then `/init` — the model analyzes the codebase and writes it. For configuration, use `reasonix setup`.",
10
11 ChatTip: "Context is kept across turns. Type 'exit' or Ctrl-D to quit.",
12 TurnCancelled: "cancelled — back to prompt",
13 InterruptedRecovery: "This turn was interrupted. Partial output is kept for reference; only completed tool pairs and a bounded recovery summary enter the next model turn. Inspect the workspace before continuing or reverting changes.",
14 RecoveryPaused: "Automatic retries paused. Reasonix stopped repeated attempts and kept completed work. Send “Continue” to start a fresh attempt, or add instructions to change direction.",
15 NoSessionToResume: "no saved session to resume — start a new one with `reasonix`",
16 ResumeRequiresTTY: "--resume needs an interactive terminal; pass --continue for the most recent session",
17 PickSessionLabel: "Resume which session?",
18
19 ResumeBusy: "finish or cancel the current turn before resuming",
20 ResumeBadIndexFmt: "pick a session 1–%d (run /resume to list)",
21 ResumeAlreadyActive: "already in that session",
22 ResumedTitle: "resumed session",
23
24 RenameUsage: "usage: /rename <new title> or /rename <n> <new title>",
25 RenameNoSession: "no active session to rename",
26 RenameDoneFmt: "session renamed to %q",
27 ResumePickTitle: "Resume a saved session",
28 ResumePickHint: "↑/↓ move · Enter resume · Esc cancel",
29 ResumeRecoveryBadgeFmt: "[recovery copy · parent %s]",
30
31 ChatThinking: "thinking…",
32 ChatThoughtForFmt: "thought for %ds",
33 ChatStatusThinkingFmt: "%s thinking… (%ds · Esc cancels)",
34 ChatToolWorkingFmt: "%s working · %ds",
35 ChatSubagentPhaseQueued: "queued",
36 ChatSubagentPhaseRunning: "running",
37 ChatSubagentPhaseReasoning: "reasoning",
38 ChatSubagentPhaseResponding: "responding",
39 ChatSubagentPhaseTool: "using tools",
40 ChatSubagentPhaseRetrying: "retrying",
41 ChatSubagentPhaseCompleted: "completed",
42 ChatSubagentPhaseFailed: "failed",
43 ChatSubagentPhaseCancelled: "cancelled",
44 ChatSubagentProgressFmt: "%s · %ds · %ds ago",
45 ChatSubagentProgressDoneFmt: "%s · %ds",
46 ChatSubagentPreviewLabel: "▎",
47 ChatStatusRetryingFmt: "%s retrying (%d/%d)… (Esc cancels)",
48 ChatStatusCancellingFmt: "%s stopping… (%ds · Ctrl+C exits)",
49 ChatStatusIdle: "ready",
50 ChatStatusYoloIdle: "tool approvals skipped",
51 ChatStatusCycleHint: "Shift+Tab ask/auto/plan · Ctrl+Y YOLO",
52 ChatStatusCycleHintCompact: "Shift+Tab ask/auto/plan · Ctrl+Y YOLO",
53 ChatTurnReceiptLabel: "TURN",
54 ChatStatusModelLabel: "MODEL",
55 ChatStatusEffortLabel: "EFFORT",
56 ChatStatusWorkLabel: "WORK",
57 ChatStatusCacheLabel: "CACHE",
58 ChatStatusContextLabel: "CTX",
59 ChatStatusCompactLabel: "COMPACT",
60 ChatStatusJobsLabel: "JOBS",
61 ChatStatusBalanceLabel: "BAL",
62 ChatStatusCacheNowFmt: "turn hit %s",
63 ChatStatusCacheAvgFmt: "avg %s",
64 ChatStatusPlanApproval: "1 execute · 2 revise · 3 exit without executing · n/Esc keeps planning · PgUp/PgDn/Ctrl+Home/End scrolls",
65 PlanApprovalPrompt: "Plan ready above — choose what to do next",
66 PlanApprovalChoices: "1. Start execution\n2. Revise plan (keep planning)\n3. Exit without executing\nChoose [1/2/3] (y starts; n/Esc keeps planning)",
67 ChatStatusToolApproval: "1 approve once · 2 allow scope this session · 3/4 prefix or save when offered · n/Esc deny · Ctrl-C cancels turn",
68 AskTypeSomething: "Type something else",
69 AskTypingHint: "type below, Enter to confirm",
70 AskChatInstead: "None — just chat",
71 ChatStatusQuestion: "↑/↓ move · number to pick · space multi · Enter confirm · ←/→ switch · Esc cancel",
72 StatusResumePicker: "↑/↓ move · Enter resume · Esc cancel",
73 AskSubmitTitle: "Submit answers",
74 AskUnanswered: "(unanswered)",
75 AskSubmitHint: "Enter submits · ← returns to edit",
76 ToolApprovalPromptFmt: "Permission required\n\nWill call tool %s%s.\n%s\n%s",
77 ToolApprovalChoices: "1. Allow once\n2. Allow %s for this session\n3. Always allow %s (save to config)\n4. Deny\nChoose [1/2/3/4] (y/a/p/n also work)",
78 BashPrefixChoices: "1. Allow once\n2. Allow %s for this session\n3. Always allow %s (save to config)\n4. Deny\nChoose [1/2/3/4] (y/a/p/n also work)",
79 PlanModeReadOnlyCommandChoices: "1. Trust once\n2. Trust this prefix for this session\n3. Always trust this prefix for plan mode (save to config)\n4. Deny\nChoose [1/2/3/4] (y/a/p/n also work)",
80 FreshHumanApprovalChoices: "1. Allow once\n2. Deny\nChoose [1/2] (y/n also work)",
81 RecoveryApprovalChoices: "1. Continue once\n2. Try another approach",
82 RecoveryPlanChangeChoices: "1. Adopt the new plan and continue\n2. Do not adopt; let Auto adjust",
83 RecoveryPlanDecisionPrompt: "The execution plan needs your decision",
84 RecoveryPlanBeforeFmt: "Previous plan: %s",
85 RecoveryPlanAfterFmt: "Proposed plan: %s",
86 RecoveryTaskGrantChoices: "1. Continue once\n2. Continue and allow similar actions in this task\n3. Try another approach",
87 SandboxEscapeApprovalChoices: "1. Allow once\n2. Use real environment for this session\n3. Deny\nChoose [1/2/3] (y/a/n also work)",
88 ApprovalNeededFmt: "approval needed: %s",
89 ApprovalNeededWithSubjectFmt: "approval needed: %s %s",
90 ToolApprovalSourceFmt: "Source: %s",
91 ToolApprovalBuiltIn: "built-in tool",
92 ToolApprovalImageUse: "It will read provided image input for image understanding.",
93 ApprovalToolLabelBash: "bash",
94 ApprovalToolLabelEditFile: "edit file",
95 ApprovalToolLabelWriteFile: "write file",
96 ApprovalToolLabelMultiEdit: "multi edit",
97 ApprovalToolLabelMoveFile: "move file",
98 ApprovalToolLabelWebFetch: "web fetch",
99 ApprovalToolLabelRunSkill: "run skill",
100 ApprovalToolLabelRemember: "remember",
101 ApprovalToolLabelForget: "forget",
102 ApprovalToolLabelSandboxEscape: "bash sandbox escape",
103 ApprovalToolLabelPlanModeReadOnly: "plan-mode read-only command",
104 MemoryApprovalSaveUpdate: "Save/update memory",
105 MemoryApprovalBodyLabel: "body",
106 MemoryApprovalArchiveFmt: "Archive memory %q",
107 PlanModeBashTrustSubjectFmt: "Trust %q as a read-only command prefix while planning\nCommand: %s",
108 PlanModeBashTrustReason: "This bash command is not in Reasonix's built-in read-only set. Confirm only if this exact prefix is read-only for planning and research. Auto/YOLO approval cannot answer this trust prompt.",
109 PlanModeBashTrustDeclined: "the user declined to trust this bash command as read-only for plan mode - do not retry it; continue with other trusted read-only tools or ask how to proceed.",
110 SandboxEscapeSubjectFallback: "run shell command unconfined once",
111 SandboxEscapeSubjectPrefix: "run unconfined once: ",
112 SandboxEscapeWrapReason: "Windows does not provide an OS-level Bash sandbox for this command. Run it unconfined one time? This bypasses OS isolation for this command only.",
113 SandboxEscapeRuntimeReason: "The OS sandbox could not start this command. Run it unconfined one time? This bypasses OS isolation for this command only.",
114 SandboxEscapeDeclined: "the user declined to run this command without the OS sandbox - do not retry it unconfined; ask how they would like to proceed.",
115 ApprovalToolLabelConfigWrite: "Reasonix config write",
116 ConfigWriteSubjectPrefix: "write Reasonix config: ",
117 ConfigWriteReason: "This write targets a Reasonix-managed configuration file outside the workspace. It can change providers, sandbox rules, permissions, and MCP servers for future sessions, so it needs your explicit approval.",
118 ConfigWriteDeclined: "the user declined this Reasonix config write - do not retry it; ask how they would like to proceed.",
119 ConfigWriteApprovalChoices: "1. Allow once\n2. Allow for this session\n3. Deny\nChoose [1/2/3] (y/a/n also work)",
120 PermissionSavedFmt: "permission saved to %s: %s",
121 PermissionAlreadyAllowedFmt: "permission already covered in %s: %s",
122 PermissionSaveFailedFmt: "permission save failed for %s: %v",
123 PlanModeReadOnlyCommandTrustSavedFmt: "plan-mode read-only command trust saved to %s: %s",
124 PlanModeReadOnlyCommandTrustAlreadyFmt: "plan-mode read-only command trust already saved in %s: %s",
125 PlanModeReadOnlyCommandTrustFailedFmt: "plan-mode read-only command trust save failed for %s: %v",
126 DiffFoldedFmt: "… +%d more lines",
127 DiffFoldEnabledFmt: "diff folded to %d lines (/diff-fold to expand)",
128 DiffFoldDisabled: "diff expanded — showing all lines (/diff-fold to fold)",
129
130 OutputStyleNone: "no output styles available",
131 ThemeHeader: "themes:",
132 ThemeHint: "switch with /theme <auto|light|dark|style>",
133 ThemeChangedFmt: "theme switched to %s / %s",
134 ThemeUnknownFmt: "unknown theme %q",
135 LanguageHeader: "languages:",
136 LanguageHint: "switch with /language <auto|en|zh>",
137 LanguageChangedFmt: "language set to %s (resolved: %s)",
138 CurrencyHeader: "pricing currency:",
139 CurrencyHint: "switch with /currency <auto|CNY|USD>",
140 CurrencyChangedFmt: "pricing currency set to %s (resolved: %s)",
141 RuntimeRefreshBusy: "finish or cancel active work and stop background jobs before changing this setting",
142 RuntimeRefreshUnavailable: "runtime refresh is unavailable in this session",
143
144 CompactionWorking: "compacting conversation…",
145 CompactionTitle: "Context compacted",
146 CompactionUnit: "messages",
147 CompactionAuto: "auto",
148 CompactionManual: "manual",
149
150 ExtFormFieldsHint: "fields are collected through the usual prompts",
151 ExtRunActionFmt: "run %s",
152 SlashCompactFailed: "compaction failed",
153 SlashNewDone: "new session started — previous transcript saved",
154 SlashNewFailed: "could not start a new session",
155 SlashClearPrompt: "Clear current context without saving?",
156 SlashClearDone: "current context cleared",
157 SlashClearFailed: "could not clear current context",
158 SlashClsDone: "screen cleared",
159 SlashUnknown: "unknown command",
160 SlashUnknownSentAsMessage: "sent as a regular message",
161 SlashTodoCleared: "task list dismissed",
162
163 SkillPickerAvailableFmt: "%d available",
164 SkillPickerMatchingFmt: "%d matching · %d total",
165 SkillPickerHint: "↑↓ navigate · Space toggle · Enter save · / search · s sources · r rescan · Esc cancel",
166 SkillPickerDetailHint: "↑↓ navigate · Enter select · Space toggle · Esc back",
167 SkillPickerSearchEmpty: "No skills match your search",
168 SkillPickerSearchPlaceholder: "Search skills...",
169 SkillPickerSourceTitle: "Sources",
170 SkillPickerSourceActiveFmt: "%d active",
171 SkillPickerSourceHint: "↑↓ navigate · Enter skills · d diagnostics · s skills · r rescan · Esc close",
172 SkillPickerDiagHidden: "d show diagnostics",
173 SkillPickerDiagShown: "d hide diagnostics",
174 SkillPickerBuiltinSource: "builtin",
175 SkillPickerRescanned: "skills rescanned",
176 SkillPickerNoDescription: "(no description)",
177 SkillPickerScopeProject: "project",
178 SkillPickerScopeCustom: "custom",
179 SkillPickerScopeGlobal: "global",
180 SkillPickerScopeBuiltin: "builtin",
181 SkillPickerSubagent: "subagent",
182 SkillPickerAvailableLabel: "on",
183 SkillPickerDisabledLabel: "off",
184 SkillPickerNoChanges: "Skills dialog dismissed: No changes",
185 SkillPickerSourceSkillsHint: "↑↓ navigate · Space toggle · Enter details · Esc sources",
186 SkillPickerSourceSkillsEmpty: "No skills in this source",
187 SkillPickerActionToggle: "Toggle enabled",
188 SkillPickerActionDelete: "Delete skill",
189 SkillPickerDeleteTitleFmt: "Delete skill /%s?",
190 SkillPickerDeleteConfirm: "Delete",
191 SkillPickerDeleteCancel: "Cancel",
192 SkillPickerDeleteHint: "Enter confirm · y delete · n/Esc cancel",
193 SkillPickerDeletedFmt: "deleted skill %s",
194 SkillPickerMoreAboveFmt: "↑ %d more above",
195 SkillPickerMoreBelowFmt: "↓ %d more below",
196 SkillPickerTokenFmt: "~%d tok",
197 SkillPickerDetailMetaFmt: "Scope: %s Run as: %s",
198 SkillPickerSkillsUnit: "skills",
199 SkillPickerLinesUnit: "lines",
200 SkillPickerStatusLabel: "skill picker",
201 SkillPickerStatusOK: "ok",
202 SkillPickerStatusMissing: "missing",
203 SkillPickerStatusNotDir: "not-directory",
204 SkillPickerStatusUnreadable: "unreadable",
205 SlashPromptEmpty: "the MCP prompt returned no content to send",
206 SlashMCPNone: "no MCP servers configured — add a [[plugins]] entry in reasonix.toml",
207 CtrlCQuitHint: "press Ctrl+C again to quit",
208 CompHintSlash: "↑/↓ move · Tab/Enter select · Esc close",
209 CompHintFile: "↑/↓ move · Tab/Enter open folder or pick file · Esc close",
210 MouseCopiedHint: "copied to clipboard",
211 ClipboardCopyOSC52Hint: "copy sent via OSC 52 — terminal permission may be required",
212 ClipboardCopyFallbackHint: "native clipboard unavailable — copy sent via OSC 52",
213 ClipboardTextPasteRemoteHint: "mouse paste cannot read your local clipboard or PRIMARY selection over SSH — use the terminal paste shortcut or /mouse",
214 ClipboardTextPasteFailedFmt: "paste text failed: %v",
215 ClipboardImagePastingHint: "Pasting image…",
216 ClipboardImagePasteFailedFmt: "paste image failed: %v",
217 MouseCaptureOnHint: "mouse capture on — in-app drag-select/scrollbar/wheel active",
218 MouseCaptureOffHint: "mouse capture off — your terminal now handles selection and right-click",
219 MouseCaptureTag: "native mouse",
220
221 ShellExecEmpty: "usage: !<command> (e.g. !ls -la)",
222 ShellExecFailedFmt: "shell command failed: %v",
223 ShellExecTimeoutFmt: "shell command timed out (> %s)",
224 ShellModeHint: "Enter runs shell · Esc cancels · click output to expand",
225
226 CmdNew: "start new session; save transcript",
227 CmdClear: "discard current context",
228 CmdCls: "clear screen only (keep LLM context)",
229 CmdCompact: "compact context",
230 CmdRewind: "rewind to an earlier turn",
231 CmdTree: "show conversation branches",
232 CmdBranch: "create a conversation branch",
233 CmdSwitchBranch: "switch conversation branch",
234 CmdResume: "resume a saved session",
235 CmdRename: "rename a session",
236 CmdModel: "switch model",
237 CmdStatus: "show session status",
238 CmdWorkMode: "switch work mode",
239 CmdDocs: "search version-matched embedded documentation",
240 CmdMemory: "inspect instructions, memory, and recovery",
241 CmdMigrate: "retry legacy data migration",
242 CmdGoal: "set or clear the active goal",
243 CmdRemember: "save a memory note",
244 CmdForget: "archive a saved memory",
245 CmdMcp: "MCP servers",
246 CmdRemote: "remote SSH hosts",
247 CmdHooks: "manage hooks",
248 CmdPlugins: "manage plugin packages",
249 CmdPasteImage: "paste clipboard image",
250 CmdOutputStyle: "list output styles",
251 CmdTheme: "switch CLI theme",
252 CmdLanguage: "switch CLI language",
253 CmdCurrency: "switch pricing currency",
254 CmdSkill: "manage skills",
255 CmdVerbose: "toggle thinking text",
256 CmdReloadCmd: "reload custom commands",
257 CmdReload: "reload the agent runtime (tools, skills, commands, hooks, providers) keeping this session",
258 CmdDiffFold: "toggle diff fold/expand",
259 CmdSandbox: "show sandbox status",
260 CmdEffort: "set reasoning effort",
261 CmdMouse: "toggle in-app mouse capture (off = native terminal selection/right-click)",
262 CmdReasonLang: "set visible reasoning language",
263 CmdHelp: "list commands",
264 CmdTodo: "dismiss the task list",
265 CmdQuit: "exit the session",
266 CmdCopy: "pick a response to copy to clipboard",
267 CmdExport: "export session as markdown",
268 SlashCopyDone: "copied response to clipboard",
269 SlashCopyEmpty: "no assistant response to copy",
270 SlashCopyListHeader: "pick a response to copy:",
271 SlashExportDoneFmt: "session exported to %s",
272 SlashExportEmpty: "no messages to export",
273 ArgSkillShow: "show a skill's body",
274 ArgSkillNew: "scaffold a new skill",
275 ArgSkillPaths: "show discovery paths",
276 ArgMcpAdd: "connect a server",
277 ArgMcpRemove: "disconnect a server",
278 ArgMcpConnected: "connected",
279 ArgHooksList: "list active hooks",
280 ArgModelCurrent: "current",
281 ArgEffortAuto: "use the model default",
282 ArgEffortLow: "lighter reasoning",
283 ArgEffortMedium: "balanced reasoning",
284 ArgEffortHigh: "deeper reasoning",
285 ArgEffortXHigh: "extra deep reasoning",
286 ArgEffortMax: "maximum reasoning",
287 ArgThemeCurrent: "current",
288 ArgLanguageAuto: "auto-detect from REASONIX_LANG / locale",
289 ArgLanguageEn: "English",
290 ArgLanguageZh: "中文",
291
292 ListModelsHeaderFmt: "models (active: %s)",
293 ListModelsHint: "switch with the model switcher, or type /model <provider/model>",
294 ListMemorySaved: "saved memories",
295 ListMemoryArchived: "archived memories",
296 ListMemoryNone: "memory: none — add with “/remember <note>” or run /init to generate AGENTS.md",
297 ListSkillsHeaderFmt: "skills (%d)",
298 ListSkillsNone: "skills: none defined — invoke a built-in like /init, or author one with install_skill",
299 ListHooksHeaderFmt: "hooks (%d active)",
300 ListHooksNone: "hooks: none active — configure in .reasonix/settings.json (project) or <Reasonix home>/settings.json (global)",
301 ListMcpHeader: "mcp servers",
302 ListMcpNone: "mcp: no servers connected — add one in reasonix.toml ([[plugins]]) or a project .mcp.json",
303
304 MemoryEditHint: "edit doc files or use “/remember <note>”; doc edits apply next session",
305 ForgetUsage: "usage: /forget <name> — the slug shown under “saved memories” in /memory",
306 ForgetDoneFmt: "forgot and archived memory: %s",
307 QuickRememberEmpty: "nothing to remember",
308 QuickRememberDoneFmt: "remembered → %s",
309 GoalEmpty: "goal: none — set one with /goal <objective>",
310 GoalCurrentFmt: "goal: %s",
311 GoalSetFmt: "goal set → %s",
312 GoalCleared: "goal cleared",
313 GoalNotRunning: "no running goal to pause",
314 GoalNotPaused: "no paused or blocked goal to resume",
315 GoalPaused: "goal paused — /goal resume continues it",
316 GoalPausedReason: "paused by the user",
317 GoalPausedFmt: "goal is paused (%s) — use /goal resume to continue",
318 GoalBudgetExtended: "goal resumed — one additional turn slice added",
319 GoalRuntimeFmt: "runtime: turns %d/%d, tokens %d, no-progress %d/%d, extensions %d",
320 GoalRuntimeLastReason: "last reason",
321 ModelSwitchUnavailable: "model switching is unavailable in this session",
322 ModelSwitchBusy: "finish or cancel active work and stop background jobs before switching models",
323 ModelAlreadyOnFmt: "already on %s",
324 ModelSwitchingFmt: "switching to %s…",
325 ModelSwitchedFmt: "switched to %s (conversation carried over; prompt cache resets)",
326 ModelListHeader: "models (/model <provider/model> to switch)",
327 RuntimeSwitchPending: "wait for the current runtime switch to finish",
328 RuntimeReloadQueued: "reload queued — will run when the current work finishes",
329 RuntimeReloaded: "runtime reloaded",
330 RuntimeReloadedGenerationFmt: "runtime reloaded (generation %d)",
331 WorkModeStatusFmt: "work %s",
332 WorkModeListHeaderFmt: "work modes (current: %s)",
333 WorkModeListHint: "switch with /work-mode economy|balanced|delivery (/profile is an alias)",
334 WorkModeEconomyLabel: "economy",
335 WorkModeBalancedLabel: "balanced",
336 WorkModeDeliveryLabel: "delivery",
337 WorkModeEconomyDesc: "lower token use; optional tool sources connect on demand",
338 WorkModeBalancedDesc: "full tool surface; model decides how much work is needed",
339 WorkModeDeliveryDesc: "complete, verified delivery; stronger skill and plugin use",
340 WorkModeUsage: "usage: /work-mode economy|balanced|delivery",
341 WorkModeSwitchUnavailable: "work-mode switching is unavailable in this session",
342 WorkModeSwitchBusy: "finish or cancel active work before switching work modes",
343 WorkModeAlreadyOnFmt: "work mode is already %s",
344 WorkModeSwitchingFmt: "switching work mode to %s…",
345 WorkModeSwitchedFmt: "work mode switched to %s (conversation carried over; prompt cache resets)",
346 RewindNone: "nothing to rewind yet",
347 RewindCodeConversation: "Code + conversation",
348 RewindConversationOnly: "Conversation only",
349 RewindCodeOnly: "Code only",
350 RewindFork: "Fork (new branch, keep code)",
351 RewindSummarizeFrom: "Summarize from here",
352 RewindSummarizeUpto: "Summarize up to here",
353 RewindPickTitle: "⟲ Rewind — pick a turn",
354 RewindPickHint: "↑/↓ move · Enter choose · Esc close",
355 RewindRestoreTitleFmt: "⟲ Restore to turn %d ",
356 RewindApplyHint: "↑/↓ · Enter apply · Esc back",
357 RewindCoverageTitle: "⚠ Partial file coverage",
358 RewindCoverageWarningFmt: "%d coverage gap(s) mean some file changes may not be restored.",
359 RewindConfirmHint: "Enter/y confirm · Esc back",
360 RewindUnavailableFmt: "rewind unavailable: %s",
361 RewindEmpty: "(empty)",
362
363 EnterAPIKeysHeader: "Enter API keys (Enter to skip and set later):",
364 WroteFileFmt: "Wrote %s",
365 SetupComplete: "Setup complete.",
366 SetupCancelled: "setup cancelled.",
367 TryHintFmt: "Try: %s",
368 NextHint: "Next: set your API key (run `reasonix setup` or export DEEPSEEK_API_KEY=...), then run `reasonix run \"your task\"`.",
369 ConfirmReconfigureFmt: "%s already exists. Reconfigure and overwrite?",
370 NotOverwritingFmt: "%s already exists; not overwriting",
371 SetupManagerTitle: "Provider configuration",
372 SetupAddOpenAI: "Add OpenAI-compatible provider",
373 SetupAddAnthropic: "Add Anthropic-compatible provider",
374 SetupProviderExistsFmt: "Provider %q already exists. Manage the existing provider to edit its models or settings.",
375 SetupSaveExit: "Save and exit",
376 SetupSaveExitDesc: "write staged changes",
377 SetupCancel: "Cancel",
378 SetupCancelDesc: "discard all staged changes",
379 SetupModelsUnit: "models",
380 SetupKeySet: "key set",
381 SetupKeyMissing: "key missing",
382 SetupDefaultBadge: "default",
383 SetupProviderActionsFmt: "Manage %s",
384 SetupEditProvider: "Edit provider",
385 SetupUpdateKey: "Update API key",
386 SetupTestRefresh: "Test connection / refresh models",
387 SetupSetDefault: "Set default model",
388 SetupRemoveProvider: "Remove provider",
389 SetupBack: "Back",
390 SetupPromptModels: "Models (comma-separated)",
391 SetupSharedKeyWarningFmt: "%s is also used by %s at %s. Share this credential?",
392 SetupPromptAPIKeyFmt: "Enter new value for %s",
393 SetupSelectDefaultModel: "Select default model",
394 SetupConfirmRemoveFmt: "Remove provider %s?",
395 SetupSummaryTitle: "Pending changes:",
396 SetupSummaryAddedFmt: "Added: %s",
397 SetupSummaryEditedFmt: "Edited: %s",
398 SetupSummaryRemovedFmt: "Removed: %s",
399 SetupSummaryDefaultFmt: "Default model: %s",
400 SetupSummaryKeysFmt: "API keys updated: %d",
401 SetupSummaryNoChanges: "No changes",
402 SetupConfirmSave: "Save these changes?",
403 SetupConcurrentChangeFmt: "Configuration changed while setup was open (%s). No staged setup changes were saved; run setup again to review the latest configuration.",
404
405 // model fetching
406 FetchingModelsFmt: "Fetching models for %s...",
407 FetchModelsSuccessFmt: "Found %d models for %s",
408 FetchModelsFailedFmt: "Failed to fetch models for %s: %v",
409 FetchModelsUsingPresetsFmt: "Live fetch unavailable for %s, using preset model list",
410 SelectModelsLabel: "Select models to enable for %s",
411 CustomFetchEmpty: "/models returned an empty list — falling back to manual entry",
412 AnthropicFetchEmpty: "/models returned an empty list — Anthropic-compatible providers usually don't expose one, falling back to manual entry",
413 APIKeyAlreadySetFmt: "reusing existing value for %s",
414 APIKeyResetPromptFmt: "Re-enter %s?",
415 InvalidAPIKeyEnvFmt: "%q is not a valid API Key variable name. Use letters, numbers, and underscores (for example, MY_PROVIDER_API_KEY); do not enter a model name.",
416 RepairedAPIKeyEnvFmt: "provider %s: replaced invalid API Key variable name %q with %q",
417
418 // custom provider
419 CustomProviderDesc: "Add third-party OpenAI compatible model",
420 CustomAddMethodLabel: "Add third-party OpenAI compatible model - Select add method",
421 CustomMethodManual: "Enter model name manually",
422 CustomMethodURL: "Fetch models from URL",
423 CustomPromptModel: "Enter model name",
424 CustomPromptBaseURL: "Enter Base URL",
425 CustomPromptKeyEnv: "API Key variable name (press Enter to use the default; not the model name)",
426 CustomPromptAPIKey: "Enter API Key",
427 CustomAddedFmt: "Added custom model: %s",
428
429 // Anthropic compatible provider
430 AnthropicProviderDesc: "Add third-party Anthropic compatible model",
431 AnthropicAddMethodLabel: "Add third-party Anthropic compatible model - Select add method",
432 AnthropicMethodManual: "Enter model name manually",
433 AnthropicMethodURL: "Fetch models from URL",
434 AnthropicPromptModel: "Enter model name",
435 AnthropicPromptBaseURL: "Enter Base URL",
436 AnthropicPromptKeyEnv: "API Key variable name (press Enter to use the default; not the model name)",
437 AnthropicPromptAPIKey: "Enter API Key",
438 AnthropicAddedFmt: "Added Anthropic compatible model: %s",
439 AnthropicFetchingModelsFmt: "Fetching models for %s...",
440 AnthropicFetchModelsSuccessFmt: "Found %d models for %s",
441 AnthropicFetchModelsFailedFmt: "Failed to fetch models for %s: %v",
442 AnthropicSelectModelsLabel: "Select models to enable for %s",
443
444 RemoteConnectingFmt: "connecting to %s…",
445 RemoteConnectedFmt: "connected to %s",
446 RemoteReconnectingFmt: "reconnecting to %s (attempt %d)…",
447 RemoteDegradedFmt: "connected to %s, but some forwards are down",
448 RemoteDisconnected: "disconnected (remote serve keeps running)",
449 RemoteServeReadyFmt: "remote serve ready: %s",
450 RemoteHostKeyPromptFmt: "unknown host key for %s\n type: %s\n fingerprint: %s",
451 RemotePassphrasePromptFmt: "passphrase for %s:",
452 RemotePasswordPromptFmt: "password for %s:",
453 RemoteBootstrapStepFmt: "remote serve: %s %s",
454 RemoteNoHostsHint: "no remote hosts configured; add one with `reasonix remote add <name> [user@]host`",
455
456 UnknownCommandFmt: "unknown command %q",
457 UsageRunHint: "usage: reasonix -p [--model NAME] <task>",
458 ErrorPrefix: "error:",
459 ReconfigureOnUnknownModel: "Configured model is no longer available — re-running setup.",
460 WriteConfigErr: "write config:",
461 WriteEnvErr: "write .env:",
462
463 ProviderErrBadRequest: "Malformed request (HTTP 400): the request body was rejected. This is likely a bug — please report it if it persists.",
464 ProviderErrAuth: "Authentication failed (HTTP 401): your API key is missing or unset. Add it to .env or run `reasonix setup`.",
465 ProviderErrAuthRejected: "Authentication failed (HTTP 401): the server rejected your API key. It may be wrong or expired, or the provider hit a transient auth/quota issue — retried with backoff and still failed. Try again shortly, or check the key in .env / run `reasonix setup`.",
466 ProviderErrInsufficientBalance: "Insufficient balance (HTTP 402): your account is out of credit. Top up your account, then retry.",
467 ProviderErrUnprocessable: "Invalid parameters (HTTP 422): a request parameter was rejected. This is likely a bug — please report it if it persists.",
468 ProviderErrInputSensitive: "MiniMax rejected the input during content review (error 1026). The review may include conversation history and tool results; adjust the relevant content or start a new session with only the necessary context. Repeating the same request is unlikely to help.",
469 ProviderErrOutputSensitive: "MiniMax rejected the generated output during content review (error 1027). Adjust the request and try again, or use another provider if the rejection persists.",
470 ProviderErrRateLimited: "Rate limit reached (HTTP 429): too many requests (TPM/RPM). Retried with backoff — slow down or try again shortly.",
471 ProviderErrServer: "Server error (HTTP 500): the provider hit an internal fault. Retried with backoff; if it keeps failing, try again later.",
472 ProviderErrServerBusy: "Server busy (HTTP 503): the provider is overloaded. Retried with backoff; please try again shortly.",
473
474 SelectOneHint: "(↑/↓ · Enter · q to cancel; / to search)",
475 SelectManyHint: "(↑/↓ · Space · Enter · q; / to search)",
476
477 SelectMoreAboveFmt: " ↑ %d more above",
478 SelectMoreBelowFmt: " ↓ %d more below",
479 SelectSearchHint: "/ to search · type to filter · Esc cancel search",
480
481 CmdProvider: "switch provider",
482 ProviderListHeader: "providers (/provider <name> to switch)",
483 ProviderAlreadyOnFmt: "already using provider %s",
484 ProviderUnknownFmt: "unknown provider %q",
485 ProviderPickLabel: "Select a model from %s",
486 ProviderNoModelsFmt: "provider %s has no configured models",
487
488 // self-update
489 UpgradeChecking: "Checking for updates…",
490 UpgradeChannelDeprecated: "Release channels are retired; using the official release.",
491 UpgradeDevBuild: "dev builds cannot self-update",
492 UpgradeFetchFailed: "failed to check for updates: %v",
493 UpgradeInvalidVersion: "remote version is not valid semver",
494 UpgradeAlreadyLatest: "Already on the latest version.",
495 UpgradeForcing: "Reinstalling the same version…",
496 UpgradeAvailableFmt: "Current: %s → Latest: %s",
497 UpgradeNoAssetFmt: "no binary found for %s",
498 UpgradeDownloadingFmt: "Downloading %s (%s)…",
499 UpgradeDownloadFailed: "download failed: %v",
500 UpgradeVerifying: "Verifying checksum…",
501 UpgradeChecksumFailed: "could not fetch checksum file: %v",
502 UpgradeChecksumMismatchFmt: "SHA256 mismatch: got %s, want %s",
503 UpgradeChecksumNotFoundFmt: "%s not found in SHA256SUMS",
504 UpgradeExtractFailed: "failed to extract binary: %v",
505 UpgradeApplying: "Replacing binary…",
506 UpgradeApplyFailed: "failed to apply update: %v",
507 UpgradeSuccessFmt: "Updated %s → %s",
508
509 ReportNoPending: "No pending CLI crash reports.",
510 ReportHeaderFmt: "CLI crash report %s",
511 ReportCapturedFmt: "Captured: %s",
512 ReportPreviewOnlyFmt: "Preview only. Run `reasonix report send %s` to send this report.",
513 ReportSendPrompt: "Send this sanitized report to crash.reasonix.io?",
514 ReportKept: "Report kept locally.",
515 ReportDeletedFmt: "Deleted CLI crash report %s.",
516 ReportSentFmt: "Sent CLI crash report %s.",
517 ReportConfigFailedFmt: "cannot load network configuration: %v",
518 ReportUploadFailedFmt: "report upload failed; the local report was kept: %v",
519 ReportSentDeleteFailedFmt: "report was sent but the local copy could not be deleted: %v",
520 ReportUsageBody: `Usage:
521 reasonix report preview the newest local report and confirm sending
522 reasonix report list list local CLI crash reports
523 reasonix report show [ID] preview a report (newest when ID is omitted)
524 reasonix report send [ID] send a reviewed report and delete it after success
525 reasonix report delete [ID] delete a local report without sending`,
526
527 CLITelemetryConsentNotice: "Reasonix can send anonymous, content-free CLI usage statistics to crash.reasonix.io: a random install ID, version, OS, and fixed quality buckets. It never sends prompts, answers, code, paths, model or tool content, or environment variables. You can disable this later with `reasonix config telemetry off`.",
528 CLITelemetryConsentPrompt: "Allow anonymous CLI usage statistics?",
529 CLITelemetryConsentInvalid: "Please answer y or n.",
530 CLITelemetryConsentSaveFailedFmt: "CLI telemetry remains disabled because the preference could not be saved: %v",
531 CLITelemetryConsentCleanupFailedFmt: "CLI telemetry is disabled, but pending statistics could not be deleted: %v",
532
533 UsageBody: `reasonix — a config- and plugin-driven coding agent (multi-model)
534
535 Usage:
536 reasonix [--model NAME] [-c|--continue] [-r|--resume [QUERY]] [--permission-mode MODE] [--effort LEVEL] [--add-dir PATH] interactive session
537 reasonix -p|--print [--model NAME] [--output-format text|json|stream-json] [--allowed-tools RULES] [--add-dir PATH] <task>
538 reasonix run [--model NAME] [--max-steps N] [-c|--continue] [--resume PATH] [--copy] [--output-format FORMAT] <task>
539 reasonix run --events-jsonl [--model NAME] <task> emit redacted structured events as JSONL
540 reasonix review [--base BRANCH] [--commit SHA] [--model NAME] AI-powered code review on local diffs
541 reasonix serve [--model NAME] [--addr HOST:PORT] [--auth none|token|password] [--token STR] [--password STR] [--hash-password] serve over HTTP+SSE (with optional auth)
542 reasonix acp [--model NAME] serve Agent Client Protocol over stdio (also: reasonix --acp)
543 reasonix setup [path] interactive config wizard; writes reasonix.toml (+ .env)
544 reasonix config reasoning-language [auto|zh|en] configure visible reasoning language
545 reasonix config compact-ratio [--local] [65..85] configure automatic compaction threshold
546 reasonix config telemetry [auto|on|off] configure content-free CLI usage metrics
547 reasonix report [list|show|send|delete] [ID] review and explicitly send local CLI crash reports
548 reasonix mcp <add|remove|list|import> manage MCP servers in reasonix.toml
549 reasonix subagent <list|create|edit|delete|try|run> manage and run isolated subagent profiles
550 reasonix init show how to generate project memory (AGENTS.md)
551 reasonix doctor [--json] print redacted local diagnostics
552 reasonix doctor session <branch-id> [--zip] [--out PATH] export a session conflict diagnostic zip
553 reasonix session list --json [--dir PATH] list redacted sessions for machine clients
554 reasonix session show|status <machine-session-id> --json [--dir PATH] query one redacted session
555 reasonix session recovery [<machine-session-id>] --json [--dir PATH] query redacted recovery state
556 reasonix hook list|status --json [--dir PATH] inspect redacted hook state
557 reasonix task list|show|status|events|stop|cancel|monitor|tmux --json [--dir PATH]
558 inspect or control redacted tasks
559 reasonix bot start|doctor|weixin-login multi-channel IM bot gateway
560 reasonix upgrade [--check] [--force] update to the latest official release (also: reasonix update)
561 reasonix completion bash|zsh|fish print a shell completion script to stdout
562 reasonix version [--verbose|--json] print version (single line) or build metadata
563 reasonix --version | -v single-line version (script-safe)
564 reasonix help
565
566 Examples:
567 reasonix
568 reasonix --continue
569 reasonix --resume provider-config
570 reasonix run "implement the TODOs in main.go"
571 reasonix run --model mimo-pro "add unit tests for this function"
572 reasonix -p "summarize this repository" --output-format json
573 reasonix subagent run review "review the current changes"
574 echo "explain this code" | reasonix run
575
576 Configuration:
577 Resolution: flag > ./reasonix.toml > <Reasonix home>/config.toml > built-in defaults
578 Secrets come from the environment via api_key_env (e.g. DEEPSEEK_API_KEY).
579 Run 'reasonix setup' to scaffold a config; see docs/SPEC.md.
580 `,
581 }
582
582 lines GO