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