返回 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 FinalReadinessRecovery: "Task work or completion checks are paused. Run /continue-checks to preserve completed evidence and finish the remaining work.",
15 ReadinessContinuing: "Reasonix is finishing the remaining task work or checks automatically.",
16 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.",
17 CompletionUncertain: "Completion could not be confirmed. The current result and completed work are kept. Send \"continue\" to resume, or restate what should change.",
18 ReasoningReplayRepair: "The model provider rejected this conversation's stored thinking blocks. Reasonix removed them from the provider-visible history and retried once.",
19 ImageRequestRecovery: "This image could not be included. Attach it again and resend; if it still fails, check the image model settings. Your conversation is kept",
20 ExtensionRequestRecovery: "An extension could not prepare a usable model request. Review the recently enabled extensions in settings and retry; your conversation is kept",
21 ExtensionBlockRecovery: "Review the extension's reason and settings before retrying. Repeatedly resending the same message will not resolve this block.",
22 ContextLimitRecovery: "Automatic context recovery could not fit this request. Shorten the latest message or choose a model with a larger context window. The original history is kept",
23 SessionSaveRecovery: "The conversation could not be saved. Keep it open and export a backup if available. Check free disk space and folder permissions before resuming",
24 EmptyFinal: "No visible answer was produced; asking the assistant to respond again.",
25 ExecutorHandoff: "The assistant answered before taking action; asking it to use the required tools.",
26 ToolBudget: "Tool round limit reached; asking the assistant to summarize progress.",
27 TaskBudget: "This task reached its spend budget; asking for a final answer.",
28 LoopGuard: "The assistant is not making progress; asking it to change approach.",
29 ProgressGuard: "The assistant keeps repeating work without new evidence; asking it to change approach.",
30 OperationNeedsUser: "The same change failed the same way twice; it is paused for you instead of being retried.",
31 SoftBudgetConverge: "Converging a long read-only investigation.",
32 EvidenceNudge: "Several mutations are unverified; asking for the cheapest discriminating check.",
33 ReasoningGovernor: "Exploration phase with expensive thinking; riding reduced reasoning depth until evidence work starts.",
34 UnappliedSteerFmt: "Guidance was not applied because the turn ended before it could be processed. Send it again if it is still needed:\n%s",
35 DeprecatedContextRetention: "agent.keep and agent.recent_keep are deprecated.",
36 FinishReasonLength: "response truncated: hit max output tokens",
37 FinishReasonContentFilter: "response blocked by content filter",
38 FinishReasonRepetition: "response truncated: model repetition detected",
39 StreamInterruptedIdleTimeout: "model stream stalled: no data arrived before the idle timeout; check the provider gateway or network proxy",
40 StreamInterruptedPrematureEOF: "model stream ended before completion; the provider gateway or network proxy dropped the connection",
41 StreamInterruptedConnectionReset: "model connection was reset; check the provider gateway or network proxy",
42 ToolOutputTruncatedFmt: "tool output truncated: %d of %d bytes elided",
43 IncompleteReadFinishBlocked: "Reasonix refused to finish because a file read still has unread content.",
44 ReadContinuationRequired: "Reasonix is continuing or narrowing an incomplete file read before allowing changes or completion.",
45 IncompleteReadDetected: "Reasonix detected an incomplete file read and armed a host continuation.",
46 ReadStrategyRequired: "The complete file did not fit the dynamic context budget; Reasonix entered restricted search/read mode.",
47 ReadStrategyProgress: "Reasonix recorded valid progress in a restricted read strategy.",
48 ReadStrategyResolved: "Reasonix validated a narrowed read strategy receipt.",
49 ReadLocalSafetyPaged: "Reasonix safely paged a large local read_file result.",
50 ReadCompleted: "Reasonix finished recovering the complete file read.",
51 ReadRestrictedStrategyFmt: "read_file switched to restricted strategy: estimated_tokens=%d budget_tokens=%d",
52 ContextRecoveryAdjustBudget: "Adjusted the output budget to fit the shared context window.",
53 PromptTruncatedByServerNotice: "The provider accepted this request but silently dropped part of the prompt, so the model did not receive the full instructions or tool definitions. Raise the server's own context length (for Ollama: OLLAMA_CONTEXT_LENGTH, or a Modelfile num_ctx), then set context_window to match.",
54 ContextRecoveryCompacted: "Compacted context after a shared-window overflow and retried.",
55 PlannerFallback: "Planner failed; continuing this turn with the executor only.",
56 PlannerSafetyFallback: "Planner stopped at a safety boundary without a final plan; continuing this turn with the executor.",
57 PlannerPlanAwaitingApproval: "Plan ready; execution was not started without approval.",
58 PlannerPlanNotApproved: "Plan not approved; nothing was executed. Reply to continue.",
59 PlannerPlanOnly: "Plan ready; the request explicitly excluded execution.",
60 CapabilityProxyFmt: "capability proxy: %s → %s",
61 ReceiptVerified: "nothing left unverified",
62 ReceiptGapsHeader: "not verified:",
63 ReceiptRisksHeader: "declared risks:",
64 ReceiptMore: "and %d more",
65 ReceiptGapKinds: map[string]string{
66 "unbacked_claim": "claimed but unsupported",
67 "unproven_criterion": "criterion without proof",
68 "missing_check": "expected check never passed",
69 "failed_verification": "verification failed",
70 "stale_verification": "verified before the last change",
71 "unverified_change": "changed with nothing verifying it",
72 "unreviewed_change": "changed, never looked at again",
73 "declared_unverified": "declared unverified",
74 },
75 NoSessionToResume: "no saved session to resume — start a new one with `reasonix`",
76 ResumeRequiresTTY: "--resume needs an interactive terminal; pass --continue for the most recent session",
77 AmbiguousResumeHint: "run again with `--resume <id>` using one of the ids above",
78 PickSessionLabel: "Resume which session?",
79
80 ResumeBusy: "finish or cancel the current turn before resuming",
81 ResumeBadIndexFmt: "pick a session 1–%d (run /resume to list)",
82 ResumeAlreadyActive: "already in that session",
83 ResumedTitle: "resumed session",
84
85 RenameUsage: "usage: /rename <new title> or /rename <n> <new title>",
86 RenameNoSession: "no active session to rename",
87 RenameDoneFmt: "session renamed to %q",
88 ResumePickTitle: "Resume a saved session",
89 ResumePickHint: "↑/↓ move · Enter resume · Esc cancel",
90 ResumeRecoveryBadgeFmt: "[recovery copy · parent %s]",
91
92 ChatThinking: "thinking…",
93 ChatThoughtForFmt: "thought for %ds",
94 ChatStatusThinkingFmt: "%s thinking… (%ds · Esc cancels)",
95 TurnPhaseWorking: "working",
96 ReadStatusReadingFmt: "reading %s",
97 ReadStatusCoveredFmt: "reading %s · lines %s",
98 ReadStatusDoneFmt: "read %s · lines %s",
99 ReadStatusPausedFmt: "read paused: %s",
100 ReadStatusRecovery: "remaining content could not be verified within the reading budget; inspect a smaller range or continue independent work; full review is incomplete",
101 TurnPhaseChecking: "checking",
102 TurnPhaseVerifying: "verifying",
103 TurnPhaseReviewing: "reviewing",
104 CompletionSummaryBlocked: "This turn is blocked; review the changes for details.",
105 CompletionSummaryNeedsAttention: "This turn still has verification or review gaps.",
106 ChatToolWorkingFmt: "%s working · %ds",
107 ChatSubagentPhaseQueued: "queued",
108 ChatSubagentPhaseRunning: "running",
109 ChatSubagentPhaseReasoning: "reasoning",
110 ChatSubagentPhaseResponding: "responding",
111 ChatSubagentPhaseTool: "using tools",
112 ChatSubagentPhaseRetrying: "retrying",
113 ChatSubagentPhaseCompleted: "completed",
114 ChatSubagentPhaseFailed: "failed",
115 ChatSubagentPhaseCancelled: "cancelled",
116 ChatSubagentProgressFmt: "%s · %ds · %ds ago",
117 ChatSubagentProgressDoneFmt: "%s · %ds",
118 ChatSubagentPreviewLabel: "▎",
119 ChatStatusRetryingFmt: "%s retrying (%d/%d)… (Esc cancels)",
120 ChatStatusCancellingFmt: "%s stopping… (%ds · Ctrl+C exits)",
121 ChatStatusIdle: "ready",
122 ChatStatusCycleHint: "Shift+Tab read-only/workspace/YOLO/plan · Ctrl+Y YOLO",
123 ChatStatusCycleHintCompact: "Shift+Tab read-only/workspace/YOLO/plan · Ctrl+Y YOLO",
124 ChatTurnReceiptLabel: "TURN",
125 RateBandPeak: "peak",
126 RateBandOffPeak: "off-peak",
127 RateBandMixed: "mixed rates",
128 ChatStatusModelLabel: "MODEL",
129 ChatStatusEffortLabel: "EFFORT",
130 ChatStatusPresetLabel: "PRESET",
131 ChatStatusCacheLabel: "CACHE",
132 ChatStatusContextLabel: "CTX",
133 ChatStatusCompactLabel: "COMPACT",
134 ChatStatusJobsLabel: "JOBS",
135 ChatStatusBalanceLabel: "BAL",
136 ChatStatusCostLabel: "COST",
137 ChatStatusCacheNowFmt: "turn hit %s",
138 ChatStatusCacheAvgFmt: "avg %s",
139 ChatStatusPlanApproval: "1 execute · 2 revise · 3 exit without executing · n/Esc keeps planning · PgUp/PgDn/Ctrl+Home/End scrolls",
140 PlanApprovalPrompt: "Plan ready above — choose what to do next",
141 PlanApprovalChoices: "1. Start execution\n2. Revise plan (keep planning)\n3. Exit without executing\nChoose [1/2/3] (y starts; n/Esc keeps planning)",
142 ChatStatusToolApproval: "1 approve once · 2 allow scope this session · 3/4 prefix or save when offered · n/Esc deny · Ctrl-C cancels turn",
143 AskTypeSomething: "Type something else",
144 AskTypingHint: "type below, Enter to confirm",
145 AskChatInstead: "None — just chat",
146 ChatStatusQuestion: "↑/↓ move · number to pick · space multi · Enter confirm · ←/→ switch · Esc cancel",
147 StatusResumePicker: "↑/↓ move · Enter resume · Esc cancel",
148 AskSubmitTitle: "Submit answers",
149 AskUnanswered: "(unanswered)",
150 AskSubmitHint: "Enter submits · ← returns to edit",
151 ElicitURLHint: "o opens the link · Enter accepts · d declines · Esc cancels",
152 ElicitConfirmOnly: "Confirm with Enter; d declines; Esc cancels.",
153 ElicitUnanswered: "(unanswered)",
154 ElicitSubmit: "Submit",
155 ElicitSubmitHint: "Enter edits the field · tab advances · on Submit: Enter accepts, d declines, Esc cancels",
156 ToolApprovalPromptFmt: "Permission required\n\nWill call tool %s%s.\n%s\n%s",
157 ToolApprovalChoices: "1. Allow once\n2. Allow %s for this session\n3. Deny\nChoose [1/2/3] (y/a/n also work)",
158 BashPrefixChoices: "1. Allow once\n2. Allow %s for this session\n3. Deny\nChoose [1/2/3] (y/a/n also work)",
159 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)",
160 FreshHumanApprovalChoices: "1. Allow once\n2. Deny\nChoose [1/2] (y/n also work)",
161 RecoveryApprovalChoices: "1. Continue once\n2. Try another approach",
162 RecoveryPlanChangeChoices: "1. Adopt the new plan and continue\n2. Do not adopt; let Auto adjust",
163 RecoveryPlanDecisionPrompt: "The execution plan needs your decision",
164 RecoveryPlanBeforeFmt: "Previous plan: %s",
165 RecoveryPlanAfterFmt: "Proposed plan: %s",
166 RecoveryTaskGrantChoices: "1. Continue once\n2. Continue and allow similar actions in this task\n3. Try another approach",
167 SandboxEscapeApprovalChoices: "1. Allow once\n2. Use real environment for this session\n3. Deny\nChoose [1/2/3] (y/a/n also work)",
168 ApprovalNeededFmt: "approval needed: %s",
169 ApprovalNeededWithSubjectFmt: "approval needed: %s %s",
170 ToolApprovalSourceFmt: "Source: %s",
171 ToolApprovalBuiltIn: "built-in tool",
172 ToolApprovalImageUse: "It will read provided image input for image understanding.",
173 ApprovalToolLabelBash: "bash",
174 ApprovalToolLabelEditFile: "edit file",
175 ApprovalToolLabelWriteFile: "write file",
176 ApprovalToolLabelMultiEdit: "multi edit",
177 ApprovalToolLabelMoveFile: "move file",
178 ApprovalToolLabelWebFetch: "web fetch",
179 ApprovalToolLabelRunSkill: "run skill",
180 ApprovalToolLabelRemember: "remember",
181 ApprovalToolLabelForget: "forget",
182 ApprovalToolLabelSandboxEscape: "bash sandbox escape",
183 ApprovalToolLabelPlanModeReadOnly: "plan-mode read-only command",
184 MemoryApprovalSaveUpdate: "Save/update memory",
185 MemoryApprovalBodyLabel: "body",
186 MemoryApprovalArchiveFmt: "Archive memory %q",
187 PlanModeBashTrustSubjectFmt: "Trust %q as a read-only command prefix while planning\nCommand: %s",
188 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. Permission presets cannot answer this trust prompt.",
189 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.",
190 SandboxEscapeSubjectFallback: "run shell command unconfined once",
191 SandboxEscapeSubjectPrefix: "run unconfined once: ",
192 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.",
193 SandboxEscapeRuntimeReason: "The OS sandbox could not start this command. Run it unconfined one time? This bypasses OS isolation for this command only.",
194 SandboxEscapeDeclined: "the user declined to run this command without the OS sandbox - do not retry it unconfined; ask how they would like to proceed.",
195 ApprovalToolLabelConfigWrite: "Reasonix config write",
196 ConfigWriteSubjectPrefix: "write Reasonix config: ",
197 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.",
198 ConfigWriteDeclined: "the user declined this Reasonix config write - do not retry it; ask how they would like to proceed.",
199 ConfigWriteApprovalChoices: "1. Allow once\n2. Allow for this session\n3. Deny\nChoose [1/2/3] (y/a/n also work)",
200 WriteAccessApprovalChoices: "1. Allow once\n2. Allow this scope for the session\n3. Deny\nChoose [1/2/3] (y/a/n also work)",
201 WriteAccessHomeWarning: "This grants write access to your entire home directory. Reasonix session and runtime-state files stay protected.",
202 WriteAccessMergedPermissionHint: "This choice also authorizes the current matching tool operation.",
203 WriteAccessProjectHint: "Adding to the project writes [sandbox].allow_write (and the matching permission rule if needed) in this workspace's reasonix.toml.",
204 PermissionSavedFmt: "permission saved to %s: %s",
205 PermissionAlreadyAllowedFmt: "permission already covered in %s: %s",
206 PermissionSaveFailedFmt: "permission save failed for %s: %v",
207 PlanModeReadOnlyCommandTrustSavedFmt: "plan-mode read-only command trust saved to %s: %s",
208 PlanModeReadOnlyCommandTrustAlreadyFmt: "plan-mode read-only command trust already saved in %s: %s",
209 PlanModeReadOnlyCommandTrustFailedFmt: "plan-mode read-only command trust save failed for %s: %v",
210 DiffFoldedFmt: "… +%d more lines",
211 DiffFoldEnabledFmt: "diff folded to %d lines (/diff-fold to expand)",
212 DiffFoldDisabled: "diff expanded — showing all lines (/diff-fold to fold)",
213
214 OutputStyleNone: "no output styles available",
215 ThemeHeader: "themes:",
216 ThemeHint: "switch with /theme <auto|light|dark|style>",
217 ThemeChangedFmt: "theme switched to %s / %s",
218 ThemeUnknownFmt: "unknown theme %q",
219 LanguageHeader: "languages:",
220 LanguageHint: "switch with /language <auto|en|zh>",
221 LanguageChangedFmt: "language set to %s (resolved: %s)",
222 CurrencyHeader: "fee display currency:",
223 CurrencyHint: "switch with /currency <auto|CNY|USD>",
224 CurrencyChangedFmt: "fee display currency set to %s (resolved: %s)",
225 RuntimeRefreshBusy: "finish or cancel active work and stop background jobs before changing this setting",
226 RuntimeRefreshUnavailable: "runtime refresh is unavailable in this session",
227
228 CompactionWorking: "compacting conversation…",
229 CompactionTitle: "Context compacted",
230 CompactionUnit: "messages",
231 CompactionAuto: "auto",
232 CompactionManual: "manual",
233 CompactionStopping: "stopping compaction…",
234 CompactionSaving: "saving compaction result…",
235 CompactionNoHistory: "No history to compact",
236 CompactionStopped: "Compaction stopped",
237 CompactionStoppedPartial: "Compaction stopped; part of the context was compacted",
238 CompactionRecoveryRequired: "Compaction needs recovery",
239 CompactionInterrupted: "The previous compaction was interrupted",
240 CompactionEstimatedTokens: "estimated tokens",
241
242 ExtFormFieldsHint: "fields are collected through the usual prompts",
243 ExtRunActionFmt: "run %s",
244 SlashCompactFailed: "compaction failed",
245 SlashNewDone: "new session started — previous transcript saved",
246 SlashNewFailed: "could not start a new session",
247 SlashClearPrompt: "Clear current context without saving?",
248 SlashClearDone: "current context cleared",
249 SlashClearFailed: "could not clear current context",
250 SlashClsDone: "screen cleared",
251 SlashUnknown: "unknown command",
252 SlashUnknownSentAsMessage: "sent as a regular message",
253 SlashTodoCleared: "task list dismissed",
254
255 SkillPickerAvailableFmt: "%d available",
256 SkillPickerMatchingFmt: "%d matching · %d total",
257 SkillPickerHint: "↑↓ navigate · Space toggle · Enter save · / search · s sources · r rescan · Esc cancel",
258 SkillPickerDetailHint: "↑↓ navigate · Enter select · Space toggle · Esc back",
259 SkillPickerSearchEmpty: "No skills match your search",
260 SkillPickerSearchPlaceholder: "Search skills...",
261 SkillPickerSourceTitle: "Sources",
262 SkillPickerSourceActiveFmt: "%d active",
263 SkillPickerSourceHint: "↑↓ navigate · Enter skills · d diagnostics · s skills · r rescan · Esc close",
264 SkillPickerDiagHidden: "d show diagnostics",
265 SkillPickerDiagShown: "d hide diagnostics",
266 SkillPickerBuiltinSource: "builtin",
267 SkillPickerRescanned: "skills rescanned",
268 SkillPickerNoDescription: "(no description)",
269 SkillPickerScopeProject: "project",
270 SkillPickerScopeCustom: "custom",
271 SkillPickerScopeGlobal: "global",
272 SkillPickerScopeBuiltin: "builtin",
273 SkillPickerSubagent: "subagent",
274 SkillPickerAvailableLabel: "on",
275 SkillPickerDisabledLabel: "off",
276 SkillPickerNoChanges: "Skills dialog dismissed: No changes",
277 SkillPickerSourceSkillsHint: "↑↓ navigate · Space toggle · Enter details · Esc sources",
278 SkillPickerSourceSkillsEmpty: "No skills in this source",
279 SkillPickerActionToggle: "Toggle enabled",
280 SkillPickerActionDelete: "Delete skill",
281 SkillPickerDeleteTitleFmt: "Delete skill /%s?",
282 SkillPickerDeleteConfirm: "Delete",
283 SkillPickerDeleteCancel: "Cancel",
284 SkillPickerDeleteHint: "Enter confirm · y delete · n/Esc cancel",
285 SkillPickerDeletedFmt: "deleted skill %s",
286 SkillPickerMoreAboveFmt: "↑ %d more above",
287 SkillPickerMoreBelowFmt: "↓ %d more below",
288 SkillPickerTokenFmt: "~%d tok",
289 SkillPickerDetailMetaFmt: "Scope: %s Run as: %s",
290 SkillPickerSkillsUnit: "skills",
291 SkillPickerLinesUnit: "lines",
292 SkillPickerStatusLabel: "skill picker",
293 SkillPickerStatusOK: "ok",
294 SkillPickerStatusMissing: "missing",
295 SkillPickerStatusNotDir: "not-directory",
296 SkillPickerStatusUnreadable: "unreadable",
297 SlashPromptEmpty: "the MCP prompt returned no content to send",
298 SlashMCPNone: "no MCP servers configured — add a [[plugins]] entry in reasonix.toml",
299 CtrlCQuitHint: "press Ctrl+C again to quit",
300 CompHintSlash: "↑/↓ move · Tab/Enter select · Esc close",
301 CompHintFile: "↑/↓ move · Tab/Enter open folder or pick file · Esc close",
302 MouseCopiedHint: "copied to clipboard",
303 ClipboardCopyOSC52Hint: "copy sent via OSC 52 — terminal permission may be required",
304 ClipboardCopyFallbackHint: "native clipboard unavailable — copy sent via OSC 52",
305 ClipboardTextPasteRemoteHint: "mouse paste cannot read your local clipboard or PRIMARY selection over SSH — use the terminal paste shortcut or /mouse",
306 ClipboardTextPasteFailedFmt: "paste text failed: %v",
307 ClipboardImagePastingHint: "Pasting image…",
308 ClipboardImagePasteFailedFmt: "paste image failed: %v",
309 ClipboardPasteEmptyNotice: "clipboard holds no pasteable text or supported image (PNG/JPEG/GIF/WebP)",
310 MouseCaptureOnHint: "mouse capture on — in-app drag-select/scrollbar/wheel active",
311 MouseCaptureOffHint: "mouse capture off — your terminal now handles selection and right-click",
312 MouseCaptureTag: "native mouse",
313
314 ShellExecEmpty: "usage: !<command> (e.g. !ls -la)",
315 ShellExecFailedFmt: "shell command failed: %v",
316 ShellExecTimeoutFmt: "shell command timed out (> %s)",
317 ShellModeHint: "Enter runs shell · Esc cancels · click output to expand",
318
319 CmdNew: "start new session; save transcript",
320 CmdClear: "discard current context",
321 CmdCls: "clear screen only (keep LLM context)",
322 CmdCompact: "compact context",
323 CmdContinueChecks: "continue a paused final-readiness check",
324 CmdContext: "show context window, thresholds, and last maintenance",
325 CmdRewind: "rewind to an earlier turn",
326 CmdTree: "show conversation branches",
327 CmdBranch: "create a conversation branch",
328 CmdSwitchBranch: "switch conversation branch",
329 CmdResume: "resume a saved session",
330 CmdRename: "rename a session",
331 CmdModel: "switch model",
332 CmdStatus: "show session status",
333 CmdWorkMode: "session quality floor: standard or delivery",
334 CmdDocs: "search version-matched embedded documentation",
335 CmdMemory: "inspect instructions, memory, and recovery",
336 CmdMigrate: "retry legacy data migration",
337 CmdGoal: "set or clear the active goal",
338 CmdRemember: "save a memory note",
339 CmdForget: "archive a saved memory",
340 CmdMcp: "MCP servers",
341 CmdRemote: "remote SSH hosts",
342 CmdHooks: "manage hooks",
343 CmdPlugins: "manage plugin packages",
344 CmdPasteImage: "paste clipboard image",
345 CmdOutputStyle: "list output styles",
346 CmdTheme: "switch CLI theme",
347 CmdLanguage: "switch CLI language",
348 CmdCurrency: "switch fee display currency",
349 CmdSkill: "manage skills",
350 CmdVerbose: "toggle thinking text",
351 CmdReloadCmd: "reload custom commands",
352 CmdReload: "reload the agent runtime (tools, skills, commands, hooks, providers) keeping this session",
353 CmdDiffFold: "toggle diff fold/expand",
354 CmdSandbox: "show sandbox status",
355 CmdEffort: "set reasoning effort",
356 CmdMouse: "toggle in-app mouse capture (off = native terminal selection/right-click)",
357 CmdReasonLang: "set visible reasoning language",
358 CmdHelp: "list commands",
359 CmdWeb: "continue this session in the Web UI",
360 CmdTodo: "dismiss the task list",
361 CmdQuit: "exit the session",
362 CmdCopy: "pick a response to copy to clipboard",
363 CmdExport: "export session as markdown",
364 SlashCopyDone: "copied response to clipboard",
365 SlashCopyEmpty: "no assistant response to copy",
366 SlashCopyListHeader: "pick a response to copy:",
367 SlashExportDoneFmt: "session exported to %s",
368 SlashExportEmpty: "no messages to export",
369 ArgSkillShow: "show a skill's body",
370 ArgSkillNew: "scaffold a new skill",
371 ArgSkillPaths: "show discovery paths",
372 ArgMcpAdd: "connect a server",
373 ArgMcpRemove: "disconnect a server",
374 ArgMcpConnected: "connected",
375 ArgHooksList: "list active hooks",
376 ArgModelCurrent: "current",
377 ArgEffortAuto: "use the model default",
378 ArgEffortLow: "lighter reasoning",
379 ArgEffortMedium: "balanced reasoning",
380 ArgEffortHigh: "deeper reasoning",
381 ArgEffortXHigh: "extra deep reasoning",
382 ArgEffortMax: "maximum reasoning",
383 ArgPresetStandard: "adaptive default posture",
384 ArgPresetDelivery: "delivery completion gates",
385 ArgThemeCurrent: "current",
386 ArgLanguageAuto: "auto-detect from REASONIX_LANG / locale",
387 ArgLanguageEn: "English",
388 ArgLanguageZh: "中文",
389
390 ListModelsHeaderFmt: "models (active: %s)",
391 ListModelsHint: "switch with the model switcher, or type /model <provider/model>",
392 ListMemorySaved: "saved memories",
393 ListMemoryArchived: "archived memories",
394 ListMemoryNone: "memory: none — add with “/remember <note>” or run /init to generate AGENTS.md",
395 ListSkillsHeaderFmt: "skills (%d)",
396 ListSkillsNone: "skills: none defined — invoke a built-in like /init, or author one with install_skill",
397 ListHooksHeaderFmt: "hooks (%d active)",
398 ListHooksNone: "hooks: none active — configure in .reasonix/settings.json (project) or <Reasonix home>/settings.json (global)",
399 ListMcpHeader: "mcp servers",
400 ListMcpNone: "mcp: no servers connected — add one in reasonix.toml ([[plugins]]) or a project .mcp.json",
401
402 MemoryEditHint: "edit doc files or use “/remember <note>”; doc edits apply next session",
403 ForgetUsage: "usage: /forget <name> — the slug shown under “saved memories” in /memory",
404 ForgetDoneFmt: "forgot and archived memory: %s",
405 QuickRememberEmpty: "nothing to remember",
406 QuickRememberDoneFmt: "remembered → %s",
407 GoalEmpty: "goal: none — set one with /goal <objective>",
408 GoalCurrentFmt: "goal: %s",
409 GoalSetFmt: "goal set → %s",
410 GoalCleared: "goal cleared",
411 GoalNotRunning: "no running goal to pause",
412 GoalNotPaused: "no paused or blocked goal to resume",
413 GoalPaused: "goal paused — /goal resume continues it",
414 GoalPausedReason: "paused by the user",
415 GoalPausedFmt: "goal is paused (%s) — use /goal resume to continue",
416 GoalRuntimeFmt: "runtime: turns %d · requests %d · tokens %d · work time %s",
417 GoalRuntimeLastReason: "last reason",
418 ModelSwitchUnavailable: "model switching is unavailable in this session",
419 ModelSwitchBusy: "finish or cancel active work and stop background jobs before switching models",
420 ModelAlreadyOnFmt: "already on %s",
421 ModelSwitchingFmt: "switching to %s…",
422 ModelSwitchedFmt: "switched to %s (conversation carried over; prompt cache resets)",
423 ModelListHeader: "models (/model <provider/model> to switch)",
424 RuntimeSwitchPending: "wait for the current runtime switch to finish",
425 RuntimeReloadQueued: "reload queued — will run when the current work finishes",
426 RuntimeReloaded: "runtime reloaded",
427 RuntimeReloadedGenerationFmt: "runtime reloaded (generation %d)",
428 WorkModeUsage: "usage: /preset <legacy-value> (retired; recognized values use standard execution)",
429 WorkModeDeprecatedNotice: "Execution modes have been retired. Recognized legacy values are accepted for compatibility and use standard execution.",
430 QualityFloorApplied: "Execution modes have been retired; standard execution remains active.",
431 RewindNone: "nothing to rewind yet",
432 RewindCodeConversation: "Code + conversation",
433 RewindConversationOnly: "Conversation only",
434 RewindCodeOnly: "Code only",
435 RewindFork: "Fork",
436 RewindSummarizeFrom: "Compress after here (history kept)",
437 RewindSummarizeUpto: "Compress before here (history kept)",
438 RewindPickTitle: "⟲ Rewind — pick a turn",
439 RewindPickHint: "↑/↓ move · Enter choose · Esc close",
440 RewindRestoreTitleFmt: "⟲ Restore to turn %d ",
441 RewindApplyHint: "↑/↓ · Enter apply · Esc back",
442 RewindCoverageTitle: "⚠ Partial file coverage",
443 RewindCoverageWarningFmt: "%d coverage gap(s) mean some file changes may not be restored.",
444 RewindConfirmHint: "Enter/y confirm · Esc back",
445 RewindUnavailableFmt: "rewind unavailable: %s",
446 RewindEmpty: "(empty)",
447
448 EnterAPIKeysHeader: "Enter API keys (Enter to skip and set later):",
449 WroteFileFmt: "Wrote %s",
450 SetupComplete: "Setup complete.",
451 SetupCancelled: "setup cancelled.",
452 TryHintFmt: "Try: %s",
453 NextHint: "Next: set your API key (run `reasonix setup` or export DEEPSEEK_API_KEY=...), then run `reasonix run \"your task\"`.",
454 ConfirmReconfigureFmt: "%s already exists. Reconfigure and overwrite?",
455 NotOverwritingFmt: "%s already exists; not overwriting",
456 SetupManagerTitle: "Provider configuration",
457 SetupAddOpenAI: "Add OpenAI-compatible provider",
458 SetupAddAnthropic: "Add Anthropic-compatible provider",
459 SetupProviderExistsFmt: "Provider %q already exists. Manage the existing provider to edit its models or settings.",
460 SetupSaveExit: "Save and exit",
461 SetupSaveExitDesc: "write staged changes",
462 SetupCancel: "Cancel",
463 SetupCancelDesc: "discard all staged changes",
464 SetupModelsUnit: "models",
465 SetupKeySet: "key set",
466 SetupKeyMissing: "key missing",
467 SetupDefaultBadge: "default",
468 SetupProviderActionsFmt: "Manage %s",
469 SetupEditProvider: "Edit provider",
470 SetupUpdateKey: "Update API key",
471 SetupTestRefresh: "Test connection / refresh models",
472 SetupSetDefault: "Set default model",
473 SetupRemoveProvider: "Remove provider",
474 SetupBack: "Back",
475 SetupPromptModels: "Models (comma-separated)",
476 SetupSharedKeyWarningFmt: "%s is also used by %s at %s. Share this credential?",
477 SetupKeyEnvTakenFmt: "%s is already used by provider %s; saving this key under it would replace that provider's key.",
478 SetupKeyEnvStoredFmt: "%s already holds a saved credential; saving this key under it would overwrite that value.",
479 SetupKeyEnvSettingFmt: "%s is read by a bot or remote-host setting; saving this key under it would hand that setting your key.",
480 SetupKeyEnvShellFmt: "%s is already set in the environment Reasonix runs in; saving this key under it would override that value.",
481 SetupKeyEnvRetry: "Enter another name, or press Enter to let Reasonix choose a private variable.",
482 SetupPromptAPIKeyFmt: "Enter new value for %s",
483 SetupSelectDefaultModel: "Select default model",
484 SetupConfirmRemoveFmt: "Remove provider %s?",
485 SetupSummaryTitle: "Pending changes:",
486 SetupSummaryAddedFmt: "Added: %s",
487 SetupSummaryEditedFmt: "Edited: %s",
488 SetupSummaryRemovedFmt: "Removed: %s",
489 SetupSummaryDefaultFmt: "Default model: %s",
490 SetupSummaryKeysFmt: "API keys updated: %d",
491 SetupSummaryNoChanges: "No changes",
492 SetupConfirmSave: "Save these changes?",
493 SetupConcurrentChangeFmt: "Configuration changed while setup was open (%s). No staged setup changes were saved; run setup again to review the latest configuration.",
494
495 // model fetching
496 FetchingModelsFmt: "Fetching models for %s...",
497 FetchModelsSuccessFmt: "Found %d models for %s",
498 FetchModelsFailedFmt: "Failed to fetch models for %s: %v",
499 FetchModelsUsingPresetsFmt: "Live fetch unavailable for %s, using preset model list",
500 SelectModelsLabel: "Select models to enable for %s",
501 CustomFetchEmpty: "/models returned an empty list — falling back to manual entry",
502 AnthropicFetchEmpty: "/models returned an empty list — Anthropic-compatible providers usually don't expose one, falling back to manual entry",
503 APIKeyAlreadySetFmt: "reusing existing value for %s",
504 APIKeyResetPromptFmt: "Re-enter %s?",
505 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.",
506 RepairedAPIKeyEnvFmt: "provider %s: replaced invalid API Key variable name %q with %q",
507
508 // custom provider
509 CustomProviderDesc: "Add third-party OpenAI compatible model",
510 CustomAddMethodLabel: "Add third-party OpenAI compatible model - Select add method",
511 CustomMethodManual: "Enter model name manually",
512 CustomMethodURL: "Fetch models from URL",
513 CustomPromptModel: "Enter model name",
514 CustomPromptBaseURL: "Enter Base URL",
515 CustomPromptKeyEnv: "API Key variable name (press Enter to let Reasonix choose; not the model name)",
516 CustomPromptAPIKey: "Enter API Key",
517 CustomPromptWindow: "Context window in tokens (a value below the model's real window makes compaction fire early)",
518 CustomAddedFmt: "Added custom model: %s",
519
520 // Anthropic compatible provider
521 AnthropicProviderDesc: "Add third-party Anthropic compatible model",
522 AnthropicAddMethodLabel: "Add third-party Anthropic compatible model - Select add method",
523 AnthropicMethodManual: "Enter model name manually",
524 AnthropicMethodURL: "Fetch models from URL",
525 AnthropicPromptModel: "Enter model name",
526 AnthropicPromptBaseURL: "Enter Base URL",
527 AnthropicPromptKeyEnv: "API Key variable name (press Enter to let Reasonix choose; not the model name)",
528 AnthropicPromptAPIKey: "Enter API Key",
529 AnthropicAddedFmt: "Added Anthropic compatible model: %s",
530 AnthropicFetchingModelsFmt: "Fetching models for %s...",
531 AnthropicFetchModelsSuccessFmt: "Found %d models for %s",
532 AnthropicFetchModelsFailedFmt: "Failed to fetch models for %s: %v",
533 AnthropicSelectModelsLabel: "Select models to enable for %s",
534
535 RemoteConnectingFmt: "connecting to %s…",
536 RemoteConnectedFmt: "connected to %s",
537 RemoteReconnectingFmt: "reconnecting to %s (attempt %d)…",
538 RemoteDegradedFmt: "connected to %s, but some forwards are down",
539 RemoteDisconnected: "disconnected (remote serve keeps running)",
540 RemoteServeReadyFmt: "remote serve ready: %s",
541 RemoteHostKeyPromptFmt: "unknown host key for %s\n type: %s\n fingerprint: %s",
542 RemotePassphrasePromptFmt: "passphrase for %s:",
543 RemotePasswordPromptFmt: "password for %s:",
544 RemoteBootstrapStepFmt: "remote serve: %s %s",
545 RemoteNoHostsHint: "no remote hosts configured; add one with `reasonix remote add <name> [user@]host`",
546
547 UnknownCommandFmt: "unknown command %q",
548 UsageRunHint: "usage: reasonix -p [--model NAME] <task>",
549 ErrorPrefix: "error:",
550 ReconfigureOnUnknownModel: "Configured model is no longer available — re-running setup.",
551 WriteConfigErr: "write config:",
552 WriteEnvErr: "write .env:",
553
554 ProviderErrBadRequest: "Malformed request (HTTP 400): the request body was rejected. This is likely a bug — please report it if it persists.",
555 ProviderErrContextOverflowFmt: "This request exceeds the shared context window: prompt %d + completion %d = %d tokens, but the window is %d. Compact, retry with a smaller output cap, fork, or rewind, then send again.",
556 ProviderErrAuth: "Authentication failed (HTTP 401): your API key is missing or unset. Add it to .env or run `reasonix setup`.",
557 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. Try again shortly, or check the key in .env / run `reasonix setup`.",
558 ProviderErrModelFormatMismatch: "Model/API format mismatch: the server does not support this model on the selected provider route. This is not an invalid API key; choose a provider route that supports the model.",
559 ProviderErrOpenCodeGoGrokRoute: "For OpenCode Go, use the OpenCode Go Responses preset with `grok-4.5`.",
560 ProviderErrQuotaExhaustedFmt: "%s: provider credits or subscription quota exhausted (HTTP %d). Check your account allowance before continuing.",
561 ProviderErrReasonMissing: "The upstream rejected the request but did not provide a specific reason.",
562 ProviderErrStreamInterruptedFmt: "Model stream interrupted. The partial response was kept; send again when ready.\nDetails: %s",
563 ProviderErrDisconnectedFmt: "Model connection closed before completion. Check the provider or proxy before sending again.\nDetails: %s",
564 ProviderErrNonStreamingFmt: "The model endpoint answered with a complete page instead of a stream. Point request_url or base_url at a full API endpoint, not a gateway root, before sending again.\nDetails: %s",
565 SearchSourcesNotProvided: "Search completed; the provider did not supply usable structured sources.",
566 SearchModelUnavailable: "Assigned web search model is unavailable; no other account will be used.",
567 ProtocolRecoveryLabel: "Recover from valid history",
568 ProviderErrInsufficientBalance: "Insufficient balance (HTTP 402): your account is out of credit. Top up your account, then retry.",
569 ProviderErrNotFound: "Request endpoint not found (HTTP 404). Check the API format and request address.",
570 ProviderErrUnprocessable: "Invalid parameters (HTTP 422): a request parameter was rejected. This is likely a bug — please report it if it persists.",
571 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.",
572 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.",
573 ProviderErrRateLimited: "Rate limit reached (HTTP 429): too many requests (TPM/RPM). Slow down or try again shortly.",
574 ProviderErrServer: "Server error (HTTP 500): the provider hit an internal fault. Please try again later.",
575 ProviderErrServerBusy: "Server busy (HTTP 503): the provider is overloaded. Please try again shortly.",
576 ProviderErrWaitExhaustedFmt: "Reasonix stopped waiting after %s: the provider stayed unreachable through every retry. Check your network, proxy, or the provider's status page, then send the message again.",
577
578 SelectOneHint: "(↑/↓ · Enter · q to cancel; / to search)",
579 SelectManyHint: "(↑/↓ · Space · Enter · q; / to search)",
580
581 SelectMoreAboveFmt: " ↑ %d more above",
582 SelectMoreBelowFmt: " ↓ %d more below",
583 SelectSearchHint: "/ to search · type to filter · Esc cancel search",
584
585 CmdProvider: "switch provider",
586 ProviderListHeader: "providers (/provider <name> to switch)",
587 ProviderAlreadyOnFmt: "already using provider %s",
588 ProviderUnknownFmt: "unknown provider %q",
589 ProviderPickLabel: "Select a model from %s",
590 ProviderNoModelsFmt: "provider %s has no configured models",
591
592 // self-update
593 UpgradeChecking: "Checking for updates…",
594 UpgradeChannelDeprecated: "Release channels are retired; using the official release.",
595 UpgradeDevBuild: "dev builds cannot self-update",
596 UpgradeFetchFailed: "failed to check for updates: %v",
597 UpgradeInvalidVersion: "remote version is not valid semver",
598 UpgradeAlreadyLatest: "Already on the latest version.",
599 UpgradeForcing: "Reinstalling the same version…",
600 UpgradeAvailableFmt: "Current: %s → Latest: %s",
601 UpgradeNoAssetFmt: "no binary found for %s",
602 UpgradeDownloadingFmt: "Downloading %s (%s)…",
603 UpgradeDownloadFailed: "download failed: %v",
604 UpgradeVerifying: "Verifying checksum…",
605 UpgradeChecksumFailed: "could not fetch checksum file: %v",
606 UpgradeChecksumMismatchFmt: "SHA256 mismatch: got %s, want %s",
607 UpgradeChecksumNotFoundFmt: "%s not found in SHA256SUMS",
608 UpgradeExtractFailed: "failed to extract binary: %v",
609 UpgradeApplying: "Replacing binary…",
610 UpgradeApplyFailed: "failed to apply update: %v",
611 UpgradeSuccessFmt: "Updated %s → %s",
612
613 ReportNoPending: "No pending CLI crash reports.",
614 ReportHeaderFmt: "CLI crash report %s",
615 ReportCapturedFmt: "Captured: %s",
616 ReportPreviewOnlyFmt: "Preview only. Run `reasonix report send %s` to send this report.",
617 ReportSendPrompt: "Send this sanitized report to crash.reasonix.io?",
618 ReportKept: "Report kept locally.",
619 ReportDeletedFmt: "Deleted CLI crash report %s.",
620 ReportSentFmt: "Sent CLI crash report %s.",
621 ReportConfigFailedFmt: "cannot load network configuration: %v",
622 ReportUploadFailedFmt: "report upload failed; the local report was kept: %v",
623 ReportSentDeleteFailedFmt: "report was sent but the local copy could not be deleted: %v",
624 ReportUsageBody: `Usage:
625 reasonix report preview the newest local report and confirm sending
626 reasonix report list list local CLI crash reports
627 reasonix report show [ID] preview a report (newest when ID is omitted)
628 reasonix report send [ID] send a reviewed report and delete it after success
629 reasonix report delete [ID] delete a local report without sending`,
630
631 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`.",
632 CLITelemetryConsentPrompt: "Allow anonymous CLI usage statistics?",
633 CLITelemetryConsentInvalid: "Please answer y or n.",
634 CLITelemetryConsentSaveFailedFmt: "CLI telemetry remains disabled because the preference could not be saved: %v",
635 CLITelemetryConsentCleanupFailedFmt: "CLI telemetry is disabled, but pending statistics could not be deleted: %v",
636
637 UsageBody: `reasonix — a config- and plugin-driven coding agent (multi-model)
638
639 Usage:
640 reasonix [--model NAME] [-c|--continue] [-r|--resume [QUERY]] [--permission-mode MODE] [--effort LEVEL] [--add-dir PATH] interactive session
641 reasonix -p|--print [--model NAME] [--output-format text|json|stream-json] [--allowed-tools RULES] [--add-dir PATH] <task>
642 reasonix run [--model NAME] [--max-steps N] [-c|--continue] [--resume PATH] [--copy] [--output-format FORMAT] <task>
643 reasonix run --events-jsonl [--model NAME] <task> emit redacted structured events as JSONL
644 reasonix review [--base BRANCH] [--commit SHA] [--model NAME] AI-powered code review on local diffs
645 reasonix web [--model NAME] [--addr HOST:PORT] [--no-open] start the local Web UI and open it in the default browser
646 reasonix serve [--model NAME] [--addr HOST:PORT] [--auth none|token|password] [--token STR] [--password STR] [--hash-password] serve over HTTP+SSE (with optional auth)
647 reasonix acp [--model NAME] serve Agent Client Protocol over stdio (also: reasonix --acp)
648 reasonix setup [path] interactive config wizard; writes reasonix.toml (+ .env)
649 reasonix config reasoning-language [auto|zh|en] configure visible reasoning language
650 reasonix config compact-ratio [--local] [30..85] configure automatic compaction threshold
651 reasonix config telemetry [auto|on|off] configure content-free CLI usage metrics
652 reasonix report [list|show|send|delete] [ID] review and explicitly send local CLI crash reports
653 reasonix mcp <add|remove|list|import> manage MCP servers in reasonix.toml
654 reasonix subagent <list|create|edit|delete|try|run> manage and run isolated subagent profiles
655 reasonix init show how to generate project memory (AGENTS.md)
656 reasonix doctor [--json] print redacted local diagnostics
657 reasonix doctor session <branch-id> [--zip] [--out PATH] export a session conflict diagnostic zip
658 reasonix session list --json [--dir PATH] list redacted sessions for machine clients
659 reasonix session show|status <machine-session-id> --json [--dir PATH] query one redacted session
660 reasonix session recovery [<machine-session-id>] --json [--dir PATH] query redacted recovery state
661 reasonix hook list|status --json [--dir PATH] inspect redacted hook state
662 reasonix trust [--dir PATH] [--yes|--revoke] review and approve programs this project runs
663 reasonix task list|show|status|events|stop|cancel|monitor|tmux --json [--dir PATH]
664 inspect or control redacted tasks
665 reasonix bot start|doctor|weixin-login multi-channel IM bot gateway
666 reasonix upgrade [--check] [--force] update to the latest official release (also: reasonix update)
667 reasonix completion bash|zsh|fish print a shell completion script to stdout
668 reasonix version [--verbose|--json] print version (single line) or build metadata
669 reasonix --version | -v single-line version (script-safe)
670 reasonix help
671
672 Examples:
673 reasonix
674 reasonix --continue
675 reasonix --resume provider-config
676 reasonix web
677 reasonix run "implement the TODOs in main.go"
678 reasonix run --model mimo-pro "add unit tests for this function"
679 reasonix -p "summarize this repository" --output-format json
680 reasonix subagent run review "review the current changes"
681 echo "explain this code" | reasonix run
682
683 Configuration:
684 Resolution: flag > ./reasonix.toml > <Reasonix home>/config.toml > built-in defaults
685 Secrets come from the environment via api_key_env (e.g. DEEPSEEK_API_KEY).
686 Run 'reasonix setup' to scaffold a config; see docs/SPEC.md.
687 `,
688 }
689
689 lines GO