返回 DeepSeek-Reasonix
en.ts
1 // English UI strings — the canonical dictionary. Keys are dotted by area; values
2 // may contain {placeholders} filled at call time (see lib/i18n.tsx). zh.ts must
3 // mirror this key set exactly (its `Record<DictKey, string>` annotation enforces
4 // it at compile time), so adding a key here makes the build fail until zh has it.
5
6 export const en = {
7 // shared verbs / chrome
8 "common.close": "Close",
9 "common.cancel": "Cancel",
10 "common.confirm": "Confirm",
11 "common.save": "Save",
12 "common.edit": "Edit",
13 "common.delete": "Delete",
14 "common.add": "Add",
15 "common.submit": "Submit",
16 "common.copy": "Copy",
17 "selection.actions": "Selected text actions",
18 "selection.addToChat": "Add to Chat",
19 "common.cut": "Cut",
20 "common.paste": "Paste",
21 "common.selectAll": "Select all",
22 "common.retry": "Retry",
23 "common.expand": "Expand",
24 "common.collapse": "Collapse",
25 "common.none": "none",
26 "common.auto": "auto",
27 "common.busyHint": "Finish or stop the current turn first",
28 "common.loading": "Loading…",
29 "composer.readOnlyChannel": "Channel conversation is read-only",
30 "composer.workspaceStarting": "Workspace is still starting",
31 "app.splashSubtitle": "Agent Workspace",
32
33 // top bar
34 "topbar.history": "History",
35 "topbar.memory": "Memory",
36 "topbar.settings": "Settings",
37 "topbar.customize": "Customize",
38 "topbar.newSession": "New session",
39 "topbar.startupError": "startup error: {msg}",
40
41 // app chrome
42 "tabBar.closeTab": "Close tab",
43 "tabBar.closeOtherTabs": "Close other tabs",
44 "tabBar.closeTabsToRight": "Close tabs to right",
45 "tabBar.newSession": "New session",
46 "tabBar.tabActions": "Tab actions",
47 "tabBar.commandSearch": "Search · Command · Open file",
48 "tabBar.commandSearchCompact": "Search",
49
50 // sidebar
51 "sidebar.conversations": "Chats",
52 "sidebar.trash": "Trash",
53 "sidebar.automation": "Automation",
54 "sidebar.memorySkills": "Memory & Skills",
55 "sidebar.workspace": "Workspace",
56 "sidebar.changeWorkspace": "Change",
57 "sidebar.navigation": "Reasonix navigation",
58 "sidebar.plugins": "Plugins",
59 "sidebar.scheduledTasks": "Scheduled tasks",
60 "sidebar.utilityActions": "Sidebar tools",
61 "summary.session": "Session summary",
62 "summary.tasks": "Tasks",
63 "summary.refresh": "Refresh",
64 "summary.close": "Close session summary",
65 "summary.noTasks": "No background tasks in this workspace",
66 "summary.taskLabel": "Task {id} — {state}",
67 "summary.taskId": "Task ID",
68 "summary.sessionId": "Session",
69 "summary.state": "State",
70 "summary.runtime": "Runtime",
71 "summary.updated": "Updated",
72 "summary.errorCode": "Error code",
73 "summary.detail": "Summary",
74 "summary.recentEvents": "Recent events",
75 "summary.loadingEvents": "Loading events…",
76 "summary.noEvents": "No events yet",
77 "summary.stop": "Stop",
78 "summary.cancel": "Cancel",
79 "summary.requeue": "Requeue",
80 "summary.openSession": "Open session",
81 "summary.confirmStop": "Stop this task?",
82 "summary.confirmCancel": "Cancel this task?",
83 "summary.keep": "Keep",
84 "task.error": "Error",
85 "task.event.error": "Error: {code}",
86 "task.event.stateChange": "State → {state} · Runtime → {runtime}",
87 "task.runtime.live": "Live",
88 "task.runtime.exited": "Exited",
89 "task.runtime.unknown": "Runtime unknown",
90 "task.state.queued": "Queued",
91 "task.state.running": "Running",
92 "task.state.waiting": "Waiting",
93 "task.state.succeeded": "Succeeded",
94 "task.state.failed": "Failed",
95 "task.state.cancelled": "Cancelled",
96 "task.state.stale": "Stale",
97 "sidebar.collapse": "Collapse navigation",
98 "sidebar.expand": "Expand navigation",
99 "sidebar.expandBlocked": "Close the workspace panel before expanding navigation",
100 "sidebar.resize": "Resize navigation",
101 "sidebar.im": "Bots",
102 "sidebar.imAdd": "Add bot",
103 "creation.sidebar.newChat": "New Chat",
104 "creation.sidebar.features": "Features",
105 "creation.sidebar.skills": "Skills",
106 "creation.sidebar.messageChannels": "Message channels",
107 "creation.reasoningLabel": "Deep thinking",
108 "creation.toolCallsLabel": "Tool calls",
109 "creation.toolGroup.explore": "Explored",
110 "creation.toolGroup.modify": "Modified",
111 "creation.toolGroup.delegate": "Delegated",
112 "creation.toolGroup.shell": "Shell",
113 "creation.toolStat.read": "{n} reads",
114 "creation.toolStat.search": "{n} searches",
115 "creation.toolStat.write": "{n} writes",
116 "creation.toolStat.edit": "{n} edits",
117 "creation.toolStat.move": "{n} moves",
118 "creation.toolStat.delete": "{n} deletes",
119 "creation.toolStat.task": "{n} tasks",
120 "creation.toolStat.command": "{n} commands",
121 "creation.toolStat.check": "{n} checks",
122 "creation.toolStat.stop": "{n} stops",
123 "creation.toolStat.other": "{n} others",
124 "sidebar.imEmpty": "Connect QQ / Feishu / Lark / WeChat",
125 "sidebar.imOnlineCount": "{n} online",
126 "sidebar.imConnectionCount": "{n} connections",
127 "sidebar.imExpand": "Expand bot connections",
128 "sidebar.imCollapse": "Collapse bot connections",
129 "sidebar.imManage": "Connection management",
130 "sidebar.imConnected": "Connected",
131 "sidebar.imDisconnected": "Disconnected",
132 "sidebar.imDisabled": "Disabled",
133 "sidebar.imPending": "Connecting",
134 "sidebar.imError": "Error",
135 "sidebar.imWaiting": "{name} has not received an IM conversation yet",
136 "sidebar.imOpenFailed": "Could not open {name}'s local conversation",
137 "botDetail.title": "{name}",
138 "botDetail.subtitle": "IM connection details",
139 "botDetail.summary": "Connection summary",
140 "botDetail.actions": "Actions",
141 "botDetail.route": "Message route",
142 "botDetail.close": "Close details",
143 "botDetail.manage": "Manage settings",
144 "botDetail.openSession": "Open linked session",
145 "botDetail.openDisabled": "Waiting for the first channel conversation",
146 "botDetail.source": "Source",
147 "botDetail.remoteId": "Remote ID",
148 "botDetail.localTopic": "Local topic",
149 "botDetail.readOnlyChannel": "Read-only channel",
150 "botDetail.scope": "Scope",
151 "botDetail.status": "Status",
152 "botDetail.permission": "Permission policy",
153 "botDetail.access": "Access",
154 "botDetail.accessMode": "Mode",
155 "botDetail.accessCurrentUser": "Current sender ID",
156 "botDetail.accessStatus": "Match status",
157 "botDetail.accessAllowAll": "Everyone allowed",
158 "botDetail.accessWhitelist": "Allowlist only",
159 "botDetail.accessDisabled": "Allowlist disabled",
160 "botDetail.accessOpen": "Open access",
161 "botDetail.accessMatched": "In allowlist",
162 "botDetail.accessMissing": "Not in allowlist",
163 "botDetail.accessUnknown": "Waiting for sender ID",
164 "botDetail.channelAllowlistUsers": "Current channel allowlist users",
165 "botDetail.emptyAllowlistUsers": "No user IDs yet",
166 "botDetail.copyRemoteId": "Copy ID",
167 "botDetail.manageAllowlist": "Manage allowlist",
168 "botDetail.scopeGlobal": "Global",
169 "botDetail.scopeProject": "Project · {name}",
170 "botDetail.noSession": "Waiting for first message",
171 "botDetail.permissionGlobal": "Global prefers read-only planning; move into a project for project files.",
172 "botDetail.permissionProject": "Can read the authorized project; writes, commands, and deletes still require desktop approval.",
173 "botDetail.flowReceive": "IM messages enter a local topic",
174 "botDetail.flowDesktop": "Desktop handles models and tools",
175 "botDetail.flowReply": "Stage results return to IM",
176 "drawer.resize": "Resize drawer",
177
178 // right dock
179 "rightDock.resize": "Resize workspace panel",
180 "rightDock.expand": "Expand workspace",
181 "rightDock.collapse": "Collapse workspace",
182 "rightDock.workbench": "Workspace panel",
183 "rightDock.views": "Workspace views",
184 "rightDock.overview": "Overview",
185 "rightDock.remote": "Remote",
186 "rightDock.terminal": "Terminal",
187
188 // topic bar
189 "topicBar.renameSession": "Rename session",
190 "topicBar.more": "More",
191 "topicBar.command": "Command",
192 "topicBar.copyAll": "Copy session",
193 "topicBar.export": "Export session",
194 "topicBar.exportMarkdown": "Export Markdown",
195 "topicBar.exportJson": "Export JSON",
196 "topicBar.exportPdf": "Export PDF",
197 "topicBar.exportImage": "Export Image",
198 "topicBar.exportSuccess": "Exported {count} file(s).",
199 "topicBar.exportImageParts": "This conversation is long, so it was exported as {count} numbered PNG files.",
200 "topicBar.exportFailed": "Export failed: {error}",
201 "externalOpener.openIn": "Open in {name}",
202 "externalOpener.choose": "Choose application",
203 "externalOpener.failed": "Could not open {name}: {error}",
204 "externalOpener.persistFailed": "Opened, but could not save {name} as default: {error}",
205
206 // scope labels
207 "scope.global": "Scope: Global",
208 "scope.project": "Project · {name}",
209
210 // workspace panel
211 "workspace.title": "Workspace",
212 "workspace.open": "Open workspace panel",
213 "workspace.close": "Close workspace panel",
214 "workspace.maximize": "Maximize workspace panel",
215 "workspace.restore": "Restore workspace panel",
216 "workspace.resizePanel": "Resize workspace panel",
217 "workspace.hideTree": "Hide file tree",
218 "workspace.showTree": "Show file tree",
219 "workspace.resizeTree": "Resize file tree",
220 "workspace.currentFile": "Current file",
221 "workspace.recentFiles": "Recent files",
222 "workspace.closePreview": "Close preview",
223 "workspace.filter": "Filter files…",
224 "workspace.filterChanges": "Filter changes…",
225 "workspace.filterReferencedFiles": "Filter dependency files…",
226 "workspace.clearFileScope": "Show full file tree",
227 "workspace.clearChangeScope": "Show all changes",
228 "workspace.noFile": "No file selected",
229 "workspace.pickFile": "Choose a file from the tree.",
230 "workspace.loading": "Loading file…",
231 "workspace.binary": "Binary file preview is not available.",
232 "workspace.truncated": "Preview truncated to the first 2 MiB.",
233 "workspace.searchPlaceholder": "Find",
234 "workspace.searchCount": "{current} of {total}",
235 "workspace.searchPrevious": "Previous match",
236 "workspace.searchNext": "Next match",
237 "workspace.searchMatchCase": "Match case",
238 "workspace.searchWholeWord": "Match whole word",
239 "workspace.searchRegex": "Use regular expression",
240 "workspace.searchRegexInvalid": "Invalid expression",
241 "workspace.searchRegexTooLong": "Expression too long",
242 "workspace.searchRegexSourceTooLarge": "File too large for regex",
243 "workspace.searchRegexZeroLength": "Zero-length matches unsupported",
244 "workspace.searchRegexMultiline": "Multiline matches unsupported",
245 "workspace.searchRegexTimeout": "Expression timed out",
246 "workspace.searchRegexUnavailable": "Regex search unavailable",
247 "workspace.searchClose": "Close search",
248 "workspace.searchNoResults": "No results",
249 "workspace.codeLine": "Line {line}",
250 "workspace.addSelectionToChat": "Add to Chat",
251 "workspace.addFileReferenceToChat": "Add file reference",
252 "workspace.addFolderReferenceToChat": "Add folder reference",
253 "workspace.addFileContentToChat": "Add file contents",
254 "workspace.viewMode": "Workspace view",
255 "workspace.filesTab": "Files",
256 "workspace.changedTab": "Changes",
257 "workspace.revertSessionFile": "Revert this file to its state before Reasonix edited it",
258 "workspace.revertSessionFileShort": "Revert",
259 "workspace.revertSessionFileConflict": "This file has changed since Reasonix last wrote it.\n\n{path}\n\n{conflicts}\n\nOverwrite with the session checkpoint version?",
260 "workspace.workingChanges": "Uncommitted workspace changes",
261 "workspace.currentChanges": "Current changes",
262 "workspace.currentChangesSourceGit": "Git HEAD to current workspace",
263 "workspace.currentChangesSourceSession": "Before the session's first edit to current file",
264 "workspace.changeDetailUnavailable": "Current changes could not be loaded",
265 "workspace.changeDetailTooLarge": "The current diff is too large to display.",
266 "workspace.binaryChange": "The current change contains binary content and has no text diff.",
267 "workspace.noCurrentDiff": "This file has no text diff to display.",
268 "workspace.commitHistory": "Commit history",
269 "workspace.commitHistoryMeta": "{count} commits",
270 "workspace.noCommitHistory": "No commit history for this file.",
271 "workspace.noCommitDetail": "No commit details available.",
272 "workspace.treeMenu": "File tree actions",
273 "workspace.refreshTree": "Refresh file tree",
274 "workspace.refreshChanges": "Refresh changes",
275 "workspace.loadingChanges": "Loading changes…",
276 "workspace.noChanges": "No changed files",
277 "workspace.gitUnavailable": "Git status is unavailable for this workspace.",
278 "workspace.gitStatusAdded": "Added",
279 "workspace.gitStatusCopied": "Copied",
280 "workspace.gitStatusDeleted": "Deleted",
281 "workspace.gitStatusModified": "Modified",
282 "workspace.gitStatusRenamed": "Renamed",
283 "workspace.gitStatusUnmerged": "Conflict",
284 "workspace.gitStatusUntracked": "Untracked",
285 "workspace.gitChangesUnknown": "Changed files could not be determined.",
286 "workspace.sourceSession": "Session",
287 "workspace.sourceGit": "Git",
288 "workspace.deleted": "Deleted",
289 "workspace.revealInFileManager": "Show in file manager",
290 "workspace.openInTerminal": "Open in integrated terminal",
291 "terminal.title": "Terminal",
292 "terminal.sessions": "Terminal sessions",
293 "terminal.shell": "Shell",
294 "terminal.defaultShell": "Default shell",
295 "terminal.newSession": "New terminal session",
296 "terminal.closeSession": "Close terminal session",
297 "terminal.loading": "Loading terminal…",
298 "terminal.retry": "Retry",
299 "terminal.dismissError": "Dismiss terminal error",
300 "terminal.resize": "Resize terminal height",
301 "terminal.empty": "Start a shell in this workspace.",
302 "terminal.readOnly": "This channel is read-only.",
303 "terminal.addOutput": "Add terminal output to chat",
304 "terminal.noOutput": "This terminal has no output yet.",
305
306 // mcp & skills drawer
307 "caps.title": "MCP & Skills",
308 "caps.loading": "Loading…",
309 "caps.summary": "{connected} connected · {failed} issues · {skills} skills",
310 "caps.mcpSummary": "{connected} servers connected · {failed} server issues · {tools} tools · {unavailable} unavailable",
311 "caps.connectorsTab": "MCP servers",
312 "caps.skillsTab": "Agent skills",
313 "caps.pluginsTab": "Plugins",
314 "caps.servers": "MCP servers",
315 "caps.noServers": "No MCP servers configured. Add one with /mcp add.",
316 "caps.availableServers": "Available MCPs",
317 "caps.failureTitle": "{failed} MCP startup issues",
318 "caps.failureHint": "Collapsed by default and does not block usable MCPs; expand when troubleshooting.",
319 "caps.failureGroups": "Issue types",
320 "caps.showFailureDetails": "View details",
321 "caps.hideFailureDetails": "Hide details",
322 "caps.retryAll": "Retry all",
323 "caps.bulkActions": "Bulk actions",
324 "caps.removeInvalid": "Clean up {count} invalid",
325 "caps.confirmRemoveInvalid": "Remove {count}",
326 "caps.failureGroupAuth": "{count} need auth",
327 "caps.failureGroupMissingCommand": "{count} missing command",
328 "caps.failureGroupCommandUnavailable": "{count} command unavailable",
329 "caps.failureGroupNetwork": "{count} network/auth issue",
330 "caps.failureGroupOther": "{count} other issue",
331 "caps.showLog": "Show log",
332 "caps.rawLog": "Raw log",
333 "caps.copyLog": "Copy log",
334 "caps.counts": "{tools} tools · {prompts} prompts · {resources} resources",
335 "caps.schemaIssues": "{count} unavailable",
336 "caps.connected": "connected",
337 "caps.failed": "failed to connect",
338 "caps.tools": "Tools",
339 "caps.skills": "Skills",
340 "caps.noSkills": "No skills found.",
341 "caps.skillsSummaryAvailable": "{skills} available",
342 "caps.skillsSummaryMatches": "{matched} matches · {total} total",
343 "caps.skillsSummaryBuiltin": "{count} builtin",
344 "caps.skillsSummaryProject": "{count} project",
345 "caps.skillsSummaryCustom": "{count} custom",
346 "caps.skillsSummaryGlobal": "{count} global",
347 "caps.showSkills": "View skills",
348 "caps.hideSkills": "Hide skills",
349 "caps.skillScopeBuiltin": "Builtin",
350 "caps.skillScopeProject": "Project",
351 "caps.skillScopeCustom": "Custom",
352 "caps.skillScopeGlobal": "Global",
353 "caps.skillDisabled": "Disabled",
354 "caps.disableSkill": "Disable skill",
355 "caps.enableSkill": "Enable skill",
356 "caps.subagent": "Subagent",
357 "caps.addServer": "Add server",
358 "caps.browseRegistry": "Browse registry",
359 "caps.registryTitle": "MCP Registry",
360 "caps.registryHint": "Find installable servers in the official MCP Registry. Registry access only happens while this page is open.",
361 "caps.searchRegistry": "Search the MCP Registry…",
362 "caps.search": "Search",
363 "caps.install": "Install",
364 "caps.manualSetup": "Manual setup",
365 "caps.registryCached": "Showing cached results because the registry is unavailable.",
366 "caps.noRegistryMatches": "No registry servers matched.",
367 "caps.searchServers": "Search MCP servers…",
368 "caps.noServerMatches": "No matching MCP servers.",
369 "caps.configuredServers": "Configured servers",
370 "caps.projectServers": "This project",
371 "caps.projectServersHint": "Declared by this project and available automatically.",
372 "caps.installedServers": "Global MCP",
373 "caps.installedServersHint": "Install once and use automatically in every Reasonix project.",
374 "caps.pluginServers": "Plugin servers",
375 "caps.pluginServersHint": "Managed by their plugins. Open a server to inspect its tools.",
376 "caps.serverToolSummary": "{tools} tools",
377 "caps.backToServers": "Back to MCP servers",
378 "caps.serverDetailsHint": "Connection details, diagnostics, and tools.",
379 "caps.addServerTitle": "Add MCP server",
380 "caps.addServerHint": "Configure a local command or remote MCP endpoint.",
381 "caps.installDefinition": "Command, URL, or JSON",
382 "caps.installDefinitionPlaceholder": "npx -y chrome-devtools-mcp@latest\n\nor https://example.com/mcp",
383 "caps.installDefinitionHint": "Paste a command, URL, or JSON definition. Switch to Manual setup when you need a custom name, environment variables, or headers.",
384 "caps.quickBenefitsLabel": "Automatic install flow",
385 "caps.quickDetectTransport": "Detect transport automatically",
386 "caps.quickVerifyConnection": "Verify after install",
387 "caps.quickEnableTools": "Make every tool available",
388 "caps.editServerTitle": "Edit {name}",
389 "caps.editServerHint": "Update the connection. Existing secret values remain unchanged when left blank.",
390 "caps.editorMode": "Configuration editor",
391 "caps.quickMode": "Quick install",
392 "caps.formMode": "Manual setup",
393 "caps.jsonMode": "JSON",
394 "caps.advancedOptions": "Advanced options",
395 "caps.hideAdvancedOptions": "Hide advanced options",
396 "caps.jsonConfig": "Complete configuration",
397 "caps.jsonPasteHint": "Accepts {\"server-name\": {...}} or {\"mcpServers\": {\"server-name\": {...}}}.",
398 "caps.jsonUnsupported": "This JSON contains fields that Reasonix does not support.",
399 "caps.jsonInvalid": "Enter valid JSON. Environment variables and headers must contain string values.",
400 "caps.jsonSingleServer": "The JSON must contain exactly one MCP server.",
401 "caps.jsonNameMismatch": "Renaming an existing MCP server is not supported.",
402 "caps.jsonRequired": "Provide a command for stdio, or a URL for HTTP and SSE.",
403 "caps.add": "Add",
404 "caps.addAndConnect": "Add and connect",
405 "caps.namePlaceholder": "name (e.g. github)",
406 "caps.name": "Name",
407 "caps.transport": "Transport",
408 "caps.commandPlaceholder": "command (e.g. npx -y @modelcontextprotocol/server-github)",
409 "caps.urlPlaceholder": "url (https://…)",
410 "caps.envLabel": "Environment (optional)",
411 "caps.envPlaceholder": "KEY=VALUE, one per line",
412 "caps.headersLabel": "Headers (optional)",
413 "caps.headersPlaceholder": "Header=Value, one per line",
414 "caps.status": "Status",
415 "caps.refresh": "Refresh MCP status",
416 "caps.reconnect": "Reconnect",
417 "caps.command": "Command",
418 "caps.url": "URL",
419 "caps.envKeys": "Environment",
420 "caps.headerKeys": "Headers",
421 "caps.connectNow": "Connect now",
422 "caps.editConfig": "Edit config",
423 "caps.showTools": "View tools",
424 "caps.hideTools": "Hide tools",
425 "caps.saveConfig": "Save config",
426 "caps.envPreserveHint": "Secret values are not shown. Leave this blank to keep existing environment variables; enter KEY=VALUE lines to replace them.",
427 "caps.headersPreserveHint": "Secret values are not shown. Leave this blank to keep existing headers; enter Header=Value lines to replace them.",
428 "caps.remove": "Remove server",
429 "caps.confirmRemove": "Confirm remove",
430 "caps.removeHint": "This removes the MCP from your configuration.",
431 "caps.retry": "Retry",
432 "caps.reauthorize": "Sign in",
433 "caps.checkCommand": "Check command",
434 "caps.builtIn": "Built-in",
435 "caps.projectServerBadge": "Project",
436 "caps.authorizeAndConnect": "Authorize and connect",
437 "caps.serverSource": "Source",
438 "caps.sourceProject": "Current project",
439 "caps.sourceProjectConfig": "Current project · {config}",
440 "caps.sourceUser": "Global",
441 "caps.sourcePlugin": "Plugin",
442 "caps.sourceBuiltin": "Built-in",
443 "caps.managedByPlugin": "Managed by plugin {plugin}",
444 "caps.auth": "Auth",
445 "caps.authRequired": "sign-in required",
446 "caps.authRequiredSummary": "Sign in to this MCP server before it can connect.",
447 "caps.authPossible": "sign-in may be required",
448 "caps.authPossibleShort": "sign-in may be required",
449 "caps.clearAuth": "Clear auth",
450 "caps.confirmClearAuth": "Confirm clear",
451 "caps.deferred": "available · starts on demand",
452 "caps.projectAuthChanged": "connection needs attention",
453 "caps.initializing": "connecting to MCP; tools will appear when ready",
454 "caps.initializingShort": "Connecting",
455 "caps.disabled": "disabled (off this session)",
456 "caps.disabledAutoStart": "disabled (does not connect when the session starts)",
457 "caps.enable": "Enable for this session",
458 "caps.disable": "Disable for this session",
459 "caps.expandDetails": "Expand details",
460 "caps.collapseDetails": "Collapse details",
461 "caps.expandTools": "Expand tools",
462 "caps.collapseTools": "Collapse tools",
463 "caps.noToolDetails": "This connection did not return tool details.",
464 "caps.toolUnavailable": "Unavailable",
465 "caps.searchSkills": "Search skills…",
466 "caps.noSkillMatches": "No matching skills.",
467 "caps.pluginRefresh": "Refresh plugins",
468 "caps.pluginInstallTitle": "Install plugin",
469 "caps.pluginInstallHint": "Add a local plugin folder or install from a Git repository.",
470 "caps.pluginInstallMethod": "Plugin install method",
471 "caps.pluginInstallLocal": "Local folder",
472 "caps.pluginInstallGit": "Git repository",
473 "caps.pluginSource": "Plugin source",
474 "caps.pluginGitSource": "Git repository URL",
475 "caps.pluginSourcePlaceholder": "git:github.com/obra/superpowers",
476 "caps.pluginChooseLocalFolder": "Choose plugin folder",
477 "caps.pluginLocalFolder": "Local plugin folder",
478 "caps.pluginNoLocalFolder": "No folder selected",
479 "caps.pluginInstallName": "Install name (optional)",
480 "caps.pluginInstallNamePlaceholder": "install name (optional)",
481 "caps.pluginLink": "Developer mode: link source folder",
482 "caps.pluginLinkHint": "Do not copy the plugin; use the selected folder directly. Useful for plugin debugging. Moving or deleting the folder breaks the plugin.",
483 "caps.pluginReplace": "Overwrite same-name plugin",
484 "caps.pluginReplaceHint": "When a plugin with the same name already exists, allow this source to replace it.",
485 "caps.pluginPreview": "Preview",
486 "caps.pluginInstall": "Install plugin",
487 "caps.noPluginsTitle": "No plugins installed",
488 "caps.noPluginsHint": "Install a plugin package from Git or a local path to add skills, hooks, and MCP servers through one managed unit.",
489 "caps.installedPlugins": "Installed plugins",
490 "caps.pluginsSummary": "{enabled} enabled · {total} installed · {issues} issues",
491 "caps.pluginCounts": "{skills} skills · {agents} agents · {commands} commands · {hooks} hooks · {mcps} MCPs",
492 "caps.pluginCompatibilityFull": "Fully compatible",
493 "caps.pluginCompatibilityPartial": "Partially compatible",
494 "caps.pluginCompatibilityNone": "Incompatible",
495 "caps.pluginMappedCapabilities": "Mapped: {capabilities}",
496 "caps.pluginSkippedCapability": "Skipped {capability}: {reason}",
497 "caps.pluginNoCapabilities": "No exported capabilities",
498 "caps.pluginWarnings": "{count} warnings",
499 "caps.pluginEnable": "Enable plugin",
500 "caps.pluginDisable": "Disable plugin",
501 "caps.pluginEnabled": "Enabled",
502 "caps.pluginDisabled": "Disabled",
503 "caps.pluginVersion": "Version",
504 "caps.pluginRoot": "Install path",
505 "caps.pluginUpdate": "Update",
506 "caps.pluginDoctor": "Doctor",
507 "caps.pluginRemove": "Remove plugin",
508 "caps.pluginConfirmRemove": "Confirm remove",
509 "caps.pluginPlanError": "Install check failed",
510 "caps.pluginPlanReady": "Install plan",
511 "caps.pluginAction": "Action",
512 "caps.pluginPlanStatus": "Plugin operation: {status}",
513 "caps.pluginPlanComplete": "Plugin operation complete",
514 "caps.pluginPlanInstalled": "Plugin installed. Expand it below to inspect its skills, agents, hooks, and MCP servers.",
515 "caps.pluginRuntimeFullTrust": "FULL TRUST runtime",
516 "caps.pluginRuntimeCommand": "Command",
517 "caps.pluginRuntimeIntercepts": "Intercepts",
518 "caps.pluginRuntimeReplaces": "Replaces",
519 "caps.pluginRuntimeCapabilities": "Capabilities",
520 "caps.pluginRuntimeRisk": "This plugin runs a code extension inside Reasonix: it can read the full session and environment, bypass permissions, and operate this machine directly.",
521 "caps.pluginUsageTitle": "How to use",
522 "caps.pluginUsageEnabledHint": "Enabled plugins load into new sessions. Skills and agents can be invoked by qualified name; hooks run automatically, while imported MCP servers connect on demand.",
523 "caps.pluginUsageDisabledHint": "Enable this plugin before its skills, hooks, or MCP servers can participate in sessions.",
524 "caps.pluginNoCapabilityDetails": "No detailed capability inventory is available for this plugin.",
525 "caps.pluginSkillsTitle": "Skills",
526 "caps.pluginSkillsHint": "Browse with /skills and invoke the shown qualified name. An unambiguous short name remains accepted for compatibility.",
527 "caps.pluginAgentsTitle": "Agents",
528 "caps.pluginAgentsHint": "Claude agents are imported as manually invoked subagent profiles.",
529 "caps.pluginCommandsTitle": "Commands",
530 "caps.pluginCommandsHint": "Slash-command prompt templates; type /<plugin>:<name> to run one.",
531 "caps.pluginCommandShadowed": "overridden",
532 "caps.pluginCommandQualifiedOccupiedByPlugin": "Its qualified name is occupied by plugin {plugin}.",
533 "caps.pluginCommandQualifiedOccupiedByCustom": "Its qualified name is occupied by a user or project command.",
534 "caps.pluginHooksTitle": "Hooks",
535 "caps.pluginHooksHint": "Hooks trigger automatically on matching lifecycle events.",
536 "caps.pluginMCPTitle": "MCP servers",
537 "caps.pluginMCPHint": "Imported Claude MCP servers connect on demand so they do not change the tool schema at startup.",
538 "caps.pluginMCPAutoStart": "auto start",
539 "caps.pluginMCPOnDemand": "on demand",
540 "caps.pluginNoDescription": "No description",
541 "caps.pluginHookNoTarget": "No hook target",
542 "caps.pluginMCPNoTarget": "No launch target",
543 "caps.sources": "Sources",
544 "caps.sourcesSummaryActive": "{active} active",
545 "caps.sourcesSummaryMissing": "{missing} missing",
546 "caps.sourcesSummaryEmpty": "{empty} empty",
547 "caps.sourcesSummaryNone": "No sources",
548 "caps.manageSkillSources": "Manage",
549 "caps.addSkillFolder": "+ Add folder",
550 "caps.refreshSkills": "Rescan",
551 "caps.noSkillRoots": "No skill sources found.",
552 "caps.skillRootCount": "{skills} skills",
553 "caps.skillRootConfigured": "Configured",
554 "caps.skillRootRemove": "Remove source",
555 "caps.skillRootConfirmRemove": "Confirm remove",
556 "caps.skillRootRemoveHint": "Removes it from config only; the folder is not deleted.",
557 "caps.skillRootActive": "active",
558 "caps.skillRootEmpty": "empty",
559 "caps.skillRootBuiltinPath": "Built-in path",
560 "caps.skillRootUserConfigured": "User configured",
561 "caps.skillRootConfiguredPath": "Configured path",
562 "caps.skillRootMissing": "Directory missing",
563 "caps.skillRootShowAllSkills": "View all {count}",
564 "caps.showDiagnostics": "View {count} hidden paths",
565 "caps.hideDiagnostics": "Hide diagnostic paths",
566
567 // subagent profiles (settings > Subagents)
568 "subagents.tabHint": "Built-in + your own agent profiles",
569 "subagents.search": "Search subagents...",
570 "subagents.new": "+ New",
571 "subagents.builtinTitle": "Built-in subagents",
572 "subagents.builtinHint": "Built-in prompts and tool access are fixed; you can override their model and effort.",
573 "subagents.builtinReadOnlyHint": "Overrides this built-in's model/effort only — its playbook can't be edited here.",
574 "subagents.builtinExploreDescription": "Survey the codebase in an isolated subagent and return one distilled answer.",
575 "subagents.builtinResearchDescription": "Combine web research and code reading in an isolated subagent.",
576 "subagents.builtinReviewDescription": "Review pending changes for correctness, security, and missing tests. Read-only.",
577 "subagents.builtinSecurityReviewDescription": "Inspect pending changes for security vulnerabilities. Read-only.",
578 "subagents.model": "Model",
579 "subagents.effort": "Reasoning effort",
580 "subagents.inheritDefault": "Inherit default",
581 "subagents.inheritDefaultWithValue": "Inherit default ({value})",
582 "subagents.effectiveValue": "Effective: {value}",
583 "subagents.overridden": "Overridden",
584 "subagents.inherited": "Inherited",
585 "subagents.resetOverride": "Restore default",
586 "subagents.customTitle": "Your subagents",
587 "subagents.customHint": "Subagent profiles you created or loaded; editable profiles can be managed here.",
588 "subagents.noCustom": "No custom subagents yet.",
589 "subagents.noMatches": "No matching subagents.",
590 "subagents.externalManaged": "Managed in Skills",
591 "subagents.externalManagedHint": "This profile comes from a configured custom skill path. Manage it from the Skills page so its external source stays intact.",
592 "subagents.allTools": "All available tools",
593 "subagents.toolCount": "{n} tools",
594 "subagents.name": "Name",
595 "subagents.namePlaceholder": "code-reviewer",
596 "subagents.color": "Color tag",
597 "subagents.description": "Description",
598 "subagents.descriptionPlaceholder": "Short summary shown to the model",
599 "subagents.tools": "Available tools",
600 "subagents.allToolsOption": "Inherit all available tools (default)",
601 "subagents.customToolsOption": "Custom available tools",
602 "subagents.allToolsHint": "Inherits every tool available to this session; approvals, sandboxing, and safety policies still apply.",
603 "subagents.customToolsHint": "Further limits which available tools this subagent can call.",
604 "subagents.selectedToolCount": "{n}/{total} selected",
605 "subagents.selectAllTools": "Select all",
606 "subagents.clearTools": "Clear",
607 "subagents.selectAtLeastOneTool": "Select at least one available tool.",
608 "subagents.backToList": "Back to subagent list",
609 "subagents.systemPrompt": "System prompt",
610 "subagents.systemPromptPlaceholder": "Describe this subagent's role, boundaries, and rules...",
611 "subagents.scope": "Scope",
612 "subagents.confirmDelete": "Confirm delete",
613 "subagents.manualInvocationHint": "Runs as an isolated subagent when invoked with /{name} <task> in chat — the model never picks it on its own.",
614 "subagents.nameInvalid": "Use letters, digits, '_', '-', '.' only.",
615 "subagents.nameTaken": "That name is already in use by another subagent, skill, or command.",
616 "subagents.newTitle": "New subagent",
617 "subagents.editTitle": "Edit subagent",
618 "subagents.tryIt": "Try it",
619 "subagents.tryItPlaceholder": "Give it a one-off task — runs isolated and read-only…",
620 "subagents.run": "Run",
621 "subagents.cancelRun": "Cancel run",
622 "subagents.invocationLabel": "Invoke in chat",
623 "subagents.invocationExample": "/{name} <task>",
624 "subagents.copyInvocation": "Copy command",
625 "subagents.useInChat": "Use in chat",
626
627 // welcome / empty state
628 "welcome.title": "A coding agent",
629 "welcome.tagline": "Describe a task, or ask anything.",
630 "welcome.hintCommands": "commands",
631 "welcome.hintFiles": "reference files",
632 "welcome.hintSend": "send",
633 "welcome.ex1": "Explain this codebase's architecture",
634 "welcome.ex2": "Summarize the recent git changes",
635 "welcome.ex3": "Where is the agent run loop, and what does it do?",
636 "welcome.ex4": "Find and fix a bug in this project",
637 "welcome.creation.title": "Hey, start creating today!",
638 "welcome.creation.explainTitle": "Help me shape a plan",
639 "welcome.creation.explainBody": "Clarify the goal and path.",
640 "welcome.creation.gitTitle": "Edit an HTML design",
641 "welcome.creation.gitBody": "Tune the page and interaction.",
642 "welcome.creation.bugTitle": "Ask you some philosophy questions",
643 "welcome.creation.bugBody": "Make the question clear.",
644
645 // composer
646 "composer.placeholder": "Message Reasonix… ( / commands · @ files · ! shell )",
647 "composer.inputActions": "Message input actions",
648 "composer.normalMode": "chat mode",
649 "composer.normalModeDesc": "Answer or work directly.",
650 "composer.planMode": "plan mode",
651 "composer.planModeOn": "plan mode on",
652 "composer.goalMode": "goal mode",
653 "composer.goalModeDesc": "Type a goal, then start goal mode.",
654 "composer.goalModeActiveDesc": "Keeps working until complete, blocked, or stopped.",
655 "composer.controlTooltip": "{category} · {mode}: {summary}",
656 "composer.runtimeProfileTitle": "Work mode",
657 "composer.runtimeProfileTrigger": "Work mode · {mode}",
658 "composer.runtimeProfileEconomy": "Lightweight · Use less",
659 "composer.runtimeProfileEconomyShort": "Lightweight",
660 "composer.runtimeProfileEconomyDesc": "Less context · Tools on demand",
661 "composer.runtimeProfileEconomyTooltipSummary": "Less context, tools on demand",
662 "composer.runtimeProfileBalanced": "Balanced · Everyday",
663 "composer.runtimeProfileBalancedShort": "Balanced",
664 "composer.runtimeProfileBalancedDesc": "Full tools · Model-directed work",
665 "composer.runtimeProfileBalancedTooltipSummary": "Full tools, model-directed execution",
666 "composer.runtimeProfileDelivery": "Delivery · Full verification",
667 "composer.runtimeProfileDeliveryShort": "Delivery",
668 "composer.runtimeProfileDeliveryDesc": "Acceptance · Review · Verify",
669 "composer.runtimeProfileDeliveryTooltipSummary": "Required acceptance, review, and verification",
670 "composer.goalInputPlaceholder": "Enter a goal…",
671 "composer.goalInputRequired": "Enter a goal",
672 "composer.subagentTaskRequired": "Enter a task for the subagent",
673 "composer.planHint": "shift+tab",
674 "composer.planHintExit": "shift+tab to exit",
675 "composer.modeAsk": "ask",
676 "composer.modeChat": "chat",
677 "composer.modeGoal": "goal",
678 "composer.modeNormal": "auto",
679 "composer.modePlan": "plan",
680 "composer.modeYolo": "YOLO",
681 "composer.modeFullAccess": "full",
682 "composer.modeFullAccessTitle": "Full access skips ordinary tool permission prompts; deny rules, fresh reviews, ask questions, and plan confirmations still apply",
683 "composer.intentMenuTitle": "Execution method",
684 "composer.taskModeTrigger": "Execution method · {mode}",
685 "composer.taskModeDirect": "Standard · Work as you go",
686 "composer.taskModeDirectShort": "Standard",
687 "composer.taskModeDirectDesc": "Analyze and act as you go.",
688 "composer.taskModeDirectTooltipSummary": "Analyze and act as you go",
689 "composer.taskModePlan": "Plan · Confirm first",
690 "composer.taskModePlanShort": "Plan",
691 "composer.taskModePlanDesc": "Draft the plan first; tool use follows current permissions and sandbox settings.",
692 "composer.taskModePlanTooltipSummary": "Plan first, execute after confirmation",
693 "composer.taskModeGoal": "Goal · Keep progressing",
694 "composer.taskModeGoalShort": "Goal",
695 "composer.taskModeGoalDesc": "Enter a goal, then keep working until done or blocked.",
696 "composer.taskModeGoalTooltipSummary": "Keep working until done or blocked",
697 "composer.taskModeStopGoal": "End goal",
698 "composer.taskModePauseGoal": "Pause goal",
699 "composer.taskModeResumeGoal": "Resume goal",
700 "composer.goalPaused": "Goal paused",
701 "composer.goalBlocked": "Goal blocked — resume to continue",
702 "composer.goalRuntimeLine": "turns {turnsUsed}/{turnsLimit} · tokens {tokensUsed} · no-progress {noProgressTurns}/{noProgressLimit} · extensions {extensions}",
703 "composer.accessMenuTitle": "Tool access ({shortcut} toggles YOLO)",
704 "composer.accessAsk": "Ask first",
705 "composer.accessAskTitle": "Ask before approval-gated tool calls; Ask is not read-only",
706 "composer.accessAskDesc": "Approval-gated writes and shell commands ask first; this is not a read-only mode.",
707 "composer.accessAuto": "Auto approve",
708 "composer.accessAutoTitle": "Execute automatically and ask only for user-owned plan decisions",
709 "composer.accessAutoDesc": "Executes operations allowed by permissions and asks only for user-owned plan decisions.",
710 "composer.accessYolo": "YOLO approval",
711 "composer.accessYoloTitle": "YOLO approval ({shortcut}) skips ordinary tool permission prompts",
712 "composer.accessYoloDesc": "Skips ordinary tool permission prompts; deny rules and fresh reviews still apply, while ask questions and plan confirmations still wait.",
713 "composer.accessFull": "Full access",
714 "composer.accessFullTitle": "Full access skips ordinary tool permission prompts",
715 "composer.accessFullDesc": "Skips ordinary tool permission prompts; deny rules and fresh reviews still apply, while ask questions and plan confirmations still wait.",
716 "composer.planMenuTitle": "Execution method",
717 "composer.planModeDesc": "Plan first; tool access still follows current permissions and sandbox settings.",
718 "composer.modeHint": "shift+tab",
719 "composer.modeTitle": "Tool access menu; Shift+Tab toggles Plan and YOLO follows its configured shortcut",
720 "composer.enterPlanTitle": "Enter plan mode (shift+tab) — plan first; permissions and sandbox still apply",
721 "composer.exitPlanTitle": "Exit plan mode (shift+tab)",
722 "composer.exitGoalTitle": "Exit goal mode",
723 "composer.moreControls": "More controls",
724 "composer.contentMenuTitle": "Add content",
725 "composer.contentAddAttachment": "Add file or image",
726 "composer.contentAddAttachmentDesc": "Choose an attachment from this device",
727 "composer.contentReferenceFiles": "Reference file or folder",
728 "composer.contentReferenceFilesDesc": "Add context from the current workspace",
729 "composer.contentReferenceSessions": "Reference recent session",
730 "composer.contentReferenceSessionsDesc": "Add a recent session to this context",
731 "composer.contentUseCommands": "Use command or Skill",
732 "composer.contentUseCommandsDesc": "Browse available commands and skills",
733 "composer.contentUseCommandsEmptyOnly": "Available when the input is empty — commands replace the whole message",
734 "composer.contentCloseSessions": "Close recent sessions",
735 "composer.pastChatsLoading": "Loading recent sessions…",
736 "composer.pastChatsEmpty": "No recent sessions",
737 "composer.pastChatsSearch": "Search recent sessions…",
738 "composer.pastChatsNoMatches": "No matching sessions",
739 "composer.sessionTurns": "{n} turns",
740 "composer.backToFiles": "← Back to files",
741 "composer.removeSessionReference": "Remove session reference",
742 "composer.sessionContextHeader": "The user referenced the following earlier session context:",
743 "composer.sessionContextFooter": "Current user request:",
744 "composer.sessionContextSession": "Session: {title}",
745 "composer.sessionContextUser": "User",
746 "composer.sessionContextAssistant": "Assistant",
747 "composer.sessionContextTruncated": "Note: This session is long, so only its most recent messages are included.",
748 "composer.sessionContextEmpty": "Note: This session has no user or assistant messages that can be referenced.",
749 "composer.sessionContextReadFailed": "Note: This session could not be read and was skipped.",
750 "composer.searchProjects": "Search projects",
751 "composer.noProjectMatches": "No matching projects",
752 "composer.addProject": "Add new project",
753 "composer.removeProject": "Remove project",
754 "composer.confirmRemoveProject": "Click again to confirm",
755 "composer.cannotRemoveCurrent": "The current workspace cannot be removed",
756 "composer.removeCurrentProjectDisabled": "Current project cannot be removed",
757 "composer.resize": "Drag to resize composer, double-click to reset",
758 "composer.send": "Send ({combo})",
759 "composer.queueGuidance": "Add to guidance queue ({combo})",
760 "composer.steer": "Add guidance to current turn (Enter)",
761 "composer.steerPlaceholder": "Running — type guidance, {combo} adds it to the queue",
762 "composer.runWaitingApproval": "Waiting for your approval — {tool}",
763 "composer.runWaitingAsk": "Waiting for your answer",
764 "composer.runAnnounceRunning": "Reasonix is working",
765 "composer.guidanceQueue": "Queued guidance",
766 "composer.guidanceCount": "Queued guidance {n}",
767 "composer.guidanceRemaining": "{n} more queued",
768 "composer.guidanceCollapse": "Collapse",
769 "composer.guidanceMode": "Guide",
770 "composer.guidanceSend": "Send this guidance to the transcript",
771 "composer.guidanceDismiss": "Dismiss queued guidance",
772 "composer.guidanceMore": "More guidance options",
773 "composer.shellMode": "Shell mode: prefix input with !",
774 "composer.shellModeOn": "Shell mode on: click to remove !",
775 "composer.stop": "Stop (Esc)",
776 "composer.stopShort": "Stop",
777 "composer.pastedLabel": "[Pasted text #{id} · {lines} lines]",
778 "composer.pastedShowPreview": "Preview pasted text",
779 "composer.pastedHidePreview": "Hide pasted text preview",
780 "composer.pastedExpand": "Expand",
781 "composer.pastedRemove": "Remove pasted text",
782 "composer.removeImage": "Remove image",
783 "imageViewer.clickToPreview": "Click to preview",
784 "imageViewer.closePreview": "Close preview",
785 "imageViewer.title": "Image preview",
786 "composer.attachImageFailed": "Image paste failed",
787 "composer.attachFileFailed": "File attach failed",
788 "composer.attachDropFailed": "Dropped file attach failed",
789 "composer.pasteImageFailed": "Could not read clipboard image",
790 "composer.imageInputUnsupported": "Current model will not receive images directly. Use an image-capable model or an OCR/vision MCP tool to inspect the attached path.",
791 "composer.contextItems": "Context items",
792 "composer.selectedText": "Chat selection",
793 "composer.selectedCode": "Code selection",
794 "composer.removeSelectedText": "Remove selected chat text",
795 "composer.selectedTextTruncated": "The selection was shortened to keep the prompt within a safe size.",
796 "composer.selectedInvocation": "Selected skill or subagent",
797 "composer.removeInvocation": "Remove selected skill or subagent",
798 "composer.removeInvocationNamed": "Remove {name}",
799 "composer.workspaceReferences": "Workspace references",
800 "composer.removeReference": "Remove reference",
801
802 // status bar
803 "status.connecting": "connecting…",
804 "status.hydrateSwitch": "Syncing session…",
805 "status.hydrateResume": "Restoring history…",
806 "status.hydrateNewSession": "Starting new session…",
807 "status.hydrateSync": "Syncing…",
808 "status.ctxLabel": "ctx",
809 "status.ctxTitle": "Share of the context window currently used by this session",
810 "status.sessionTurnsLabel": "session",
811 "status.sessionTurnsTitle": "Current session turns",
812 "status.sessionTokensLabel": "session tokens",
813 "status.sessionTokensTitle": "Model tokens spent in this session; not the current context-window usage.",
814 "status.turnTokensLabel": "turn tokens",
815 "status.turnTokensTitle": "Model tokens spent in the current or most recent turn.",
816 "status.turnCostLabel": "turn cost",
817 "status.turnCostTitle": "Estimated billable spend in the current or most recent turn.",
818 "status.compactLabel": "compact at",
819 "status.compactTitle": "Auto-compact is attempted when context reaches this share of the window",
820 "status.cacheLabel": "turn hit",
821 "status.cacheTitle": "Prompt cache hit rate for the latest request",
822 "status.cacheAvgLabel": "avg hit",
823 "status.cacheAvgTitle": "Session-average prompt cache hit rate",
824 "status.costLabel": "session cost",
825 "status.balanceLabel": "balance",
826 "status.jobsLabel": "jobs",
827 "status.plan": "PLAN",
828 "status.switchModel": "Switch model",
829 "modelSwitcher.searchPlaceholder": "Search models…",
830 "modelSwitcher.noMatches": "No matching models",
831 "status.noModels": "no switchable models",
832 "status.modelSwitchBusy": "The model cannot change yet. Stop the current answer, handle pending prompts, or wait for background jobs to finish.",
833 "status.modelSwitchBusyRunning": "The model cannot change while the current answer is running. Stop it first.",
834 "status.modelSwitchBusyPrompt": "The model cannot change while a prompt is waiting for your response. Handle it first.",
835 "status.modelSwitchBusyJobs": "The model cannot change while {n} background jobs are running. Open Background jobs in the status bar to stop them.",
836 "status.modelSwitchLeaseHeld": "This session is open in another Reasonix window or still running in the background. Close that window, stop the background run, or open a copy before changing models.",
837 "status.modelSwitchStarting": "This session is still starting. Try changing models again in a moment.",
838 "status.modelSwitchStartupFailed": "This session did not start, so the model cannot change: {err}",
839 "status.modelSwitchRetry": "The current session changed while switching models. Try once more.",
840 "status.modelSwitchUnknown": "Unknown model {model}.",
841 "status.modelSwitchProviderUnavailable": "Model {model} is unavailable because provider {provider} is not added.",
842 "status.modelSwitchFailed": "Model switch failed: {err}",
843 "status.modelFallbackSwitched": "Model {model} is no longer available; switched to {fallback}.",
844 "status.effortSwitchBusy": "Reasoning effort cannot change yet. Stop the current answer, handle pending prompts, or wait for background jobs to finish.",
845 "status.effortSwitchBusyRunning": "Reasoning effort cannot change while the current answer is running. Stop it first.",
846 "status.effortSwitchBusyPrompt": "Reasoning effort cannot change while a prompt is waiting for your response. Handle it first.",
847 "status.effortSwitchBusyJobs": "Reasoning effort cannot change while {n} background jobs are running. Open Background jobs in the status bar to stop them.",
848 "status.effortSwitchLeaseHeld": "This session is open in another Reasonix window or still running in the background. Close that window, stop the background run, or open a copy before changing effort.",
849 "status.effortSwitchStarting": "This session is still starting. Try changing reasoning effort again in a moment.",
850 "status.effortSwitchStartupFailed": "This session did not start, so reasoning effort cannot change: {err}",
851 "status.effortSwitchRetry": "The current session changed while switching reasoning effort. Try once more.",
852 "status.effortSwitchFailed": "Reasoning effort switch failed: {err}",
853 "status.tokenModeSwitchBusy": "Work mode cannot change yet. Stop the current answer, handle pending prompts, or wait for background jobs to finish.",
854 "status.tokenModeSwitchBusyRunning": "Work mode cannot change while the current answer is running. Stop it first.",
855 "status.tokenModeSwitchBusyPrompt": "Work mode cannot change while a prompt is waiting for your response. Handle it first.",
856 "status.tokenModeSwitchBusyJobs": "Work mode cannot change while {n} background jobs are running. Open Background jobs in the status bar to stop them.",
857 "status.tokenModeSwitchLeaseHeld": "This session is open in another Reasonix window or still running in the background. Close that window, stop the background run, or open a copy before changing its work mode.",
858 "status.tokenModeSwitchStarting": "This session is still starting. Try changing the work mode again in a moment.",
859 "status.tokenModeSwitchStartupFailed": "This session did not start, so its work mode cannot change: {err}",
860 "status.tokenModeSwitchRetry": "The current session changed while switching work mode. Try once more.",
861 "status.tokenModeSwitchFailed": "Work mode switch failed: {err}",
862 "status.sessionAutosaveFailed": "Session autosave failed: {err}",
863 "status.sessionSaveFailedBefore": "Session save failed before {action}: {err}",
864 "status.actionChangingModel": "changing models",
865 "status.actionChangingEffort": "changing reasoning effort",
866 "status.actionChangingTokenMode": "changing work mode",
867 "status.actionRebuildingSettings": "refreshing settings",
868 "status.actionSwitchingSessions": "switching sessions",
869 "status.actionSwitchingTabs": "switching tabs",
870 "status.actionAutosave": "autosave",
871 "status.actionCurrentSession": "saving the current session",
872 "status.effort": "effort {level}",
873 "status.effortTitle": "Reasoning effort",
874 "status.effortAutoTitle": "Reasoning effort: auto (model default: {def})",
875 "status.switchFolder": "{cwd}\nClick to switch project folder",
876 "status.tokens": "tokens",
877 "status.retrying": "retrying ({attempt}/{max})…",
878 "status.balanceTitle": "Wallet balance",
879 "status.spendTitle": "Estimated billable spend in this session, including model, subagent, and helper calls",
880
881 // ── Heartbeat ──
882 "heartbeat.title": "Heartbeat Tasks",
883 "heartbeat.scheduler": "Scheduled Tasks",
884 "heartbeat.addTask": "Add task",
885 "heartbeat.edit": "Edit",
886 "heartbeat.delete": "Delete",
887 "heartbeat.runNow": "Run now",
888 "heartbeat.refresh": "Refresh",
889 "heartbeat.noTasks": "No heartbeat tasks yet. Click \"Add task\" to create one.\n\nTip: AI agents can also edit heartbeat-tasks.json in the Reasonix user state folder.",
890 "heartbeat.every": "every",
891 "heartbeat.lastRun": "last run",
892 "heartbeat.fieldTitle": "Title",
893 "heartbeat.titlePlaceholder": "e.g. Daily standup check",
894 "heartbeat.fieldPrompt": "Prompt",
895 "heartbeat.promptPlaceholder": "e.g. Check for any new issues on GitHub and summarize them.",
896 "heartbeat.fieldInterval": "Frequency",
897 "heartbeat.enabled": "Enabled",
898 "heartbeat.status": "Status",
899 "heartbeat.optional": "Optional",
900 "heartbeat.disable": "Disable",
901 "heartbeat.save": "Save",
902 "heartbeat.add": "Add",
903 "heartbeat.editTask": "Edit task",
904 "heartbeat.neverRun": "Never run",
905 "heartbeat.untitled": "(untitled)",
906 "heartbeat.disabled": "Disabled",
907 "heartbeat.confirmDelete": "Confirm delete?",
908 "heartbeat.intervalHint": "e.g. 30m, 1h",
909 "heartbeat.willRun": "Task will run on schedule.",
910 "heartbeat.wontRun": "Task is paused.",
911 "heartbeat.configHint": "AI agents can also edit heartbeat-tasks.json in the Reasonix user state folder.",
912 "heartbeat.fieldScope": "Scope",
913 "heartbeat.scopeGlobal": "Global",
914 "heartbeat.scopeProject": "Project",
915 "heartbeat.noProjects": "No projects found",
916 "heartbeat.currentWorkspace": "current",
917 "heartbeat.freqCycle": "Cycle",
918 "heartbeat.freqInterval": "By interval",
919 "heartbeat.freqDaily": "Every day",
920 "heartbeat.freqEvery": "Every",
921 "heartbeat.everyJoiner": " ",
922 "heartbeat.unitSec": "sec",
923 "heartbeat.unitMin": "min",
924 "heartbeat.unitHour": "hour",
925 "heartbeat.timeWindow": "Time window",
926 "heartbeat.clearTimeWindow": "Clear time window",
927 "heartbeat.cycleDaily": "Daily",
928 "heartbeat.cycleWeekly": "Weekly",
929 "heartbeat.cycleBiweekly": "Bi-weekly",
930 "heartbeat.cycleMonthly": "Monthly",
931 "heartbeat.cycleYearly": "Yearly",
932 "heartbeat.justNow": "just now",
933 "heartbeat.due": "due soon",
934 "heartbeat.soon": "in 1 min",
935 "heartbeat.minLater": "m left",
936 "heartbeat.hourLater": "h left",
937 "heartbeat.minAgo": "m ago",
938 "heartbeat.hourAgo": "h ago",
939 "heartbeat.openTopic": "Open topic",
940 "heartbeat.filterAll": "All",
941 "heartbeat.filterEnabled": "Enabled",
942 "heartbeat.filterDisabled": "Disabled",
943 "heartbeat.searchPlaceholder": "Search tasks…",
944 "heartbeat.filterAllProjects": "All projects",
945 "heartbeat.noMatchingTasks": "No matching tasks",
946 "heartbeat.weekdayMon": "Mon",
947 "heartbeat.weekdayTue": "Tue",
948 "heartbeat.weekdayWed": "Wed",
949 "heartbeat.weekdayThu": "Thu",
950 "heartbeat.weekdayFri": "Fri",
951 "heartbeat.weekdaySat": "Sat",
952 "heartbeat.weekdaySun": "Sun",
953 "heartbeat.monthOption": "Month {n}",
954 "heartbeat.dayOption": "Day {n}",
955 "heartbeat.requiredFields": "Enter a title and prompt",
956 "heartbeat.noChanges": "No changes to save",
957 "heartbeat.fieldApprovalMode": "Approval mode",
958 "heartbeat.approvalModeAsk": "Ask",
959 "heartbeat.approvalModeAuto": "Auto",
960 "heartbeat.approvalModeYolo": "YOLO",
961 "heartbeat.approvalModeAskTooltip": "Prompt before approval-gated calls; Ask is not read-only",
962 "heartbeat.approvalModeAutoTooltip": "Execute automatically and ask only for user-owned plan decisions",
963 "heartbeat.approvalModeYoloTooltip": "Skip ordinary permission prompts",
964 "heartbeat.approvalModeAskHint": "Approval-gated calls wait for you; Ask is not read-only",
965 "heartbeat.approvalModeAutoHint": "Execution continues automatically; material plan choices still ask",
966 "heartbeat.approvalModeYoloHint": "Skip ordinary tool prompts; deny and fresh approvals remain",
967 "heartbeat.notifyChannels": "Push to bot channels",
968 "heartbeat.notifyChannelsOn": "On",
969 "heartbeat.notifyChannelsOff": "Off",
970 "heartbeat.notifyChannelsOnHint": "AI output is streamed to connected Feishu/QQ bots",
971 "heartbeat.notifyChannelsOffHint": "Only create a desktop conversation; do not push to bots",
972 "heartbeat.fieldNewConversation": "Conversation mode",
973 "heartbeat.newConversationEachRunOn": "New conversation each run",
974 "heartbeat.newConversationEachRunOff": "Reuse same conversation",
975
976 "status.jobs": "{n} running",
977 "status.jobsTitle": "Background jobs",
978 "status.extensionTitle": "Extension status",
979 "status.jobStop": "Stop",
980 "status.jobStopping": "Stopping…",
981 "status.jobStopFailed": "Failed to stop the background job.",
982 "status.jobOpenTask": "Open task",
983 "status.runtimeRunning": "Turn running",
984 "status.runtimePendingPrompt": "Waiting for input",
985 "runtime.workspaceConflictTitle": "This workspace is busy",
986 "runtime.workspaceConflictBadge": "Delivery writer",
987 "runtime.workspaceConflictLocal": "{title} is currently writing to this workspace.",
988 "runtime.workspaceConflictExternal": "Another Reasonix window is currently writing to this workspace.",
989 "runtime.workspaceConflictNote": "This task will continue automatically when the writer releases the workspace.",
990 "runtime.unknownTask": "Another task",
991 "runtime.revealWriter": "Open writing task",
992 "runtime.revealWriterDesc": "Switch to the exact task that currently owns the workspace writer.",
993 "runtime.openWorktree": "Continue in a worktree",
994 "runtime.openWorktreeDesc": "Cancel this wait and continue safely in an isolated Delivery worktree.",
995 "runtime.cancelWait": "Stop waiting",
996 "runtime.cancelWaitDesc": "Cancel this turn without affecting the task that owns the workspace.",
997 "runtime.modeJobsTitle": "Switch to {mode} mode",
998 "runtime.modeJobsMeta": "Changing modes requires stopping this task's background jobs.",
999 "runtime.keepMode": "Keep current mode",
1000 "runtime.keepModeDesc": "Keep the current work mode and leave background jobs running.",
1001 "runtime.stopAndSwitch": "Stop {n} jobs and switch",
1002 "runtime.stopAndSwitchDesc": "Wait for the processes to exit, then switch to {mode} mode.",
1003 "runtime.closeTitle": "Handle active work before closing",
1004 "runtime.closeMeta": "This task still has background jobs and may also have a running turn or pending prompt.",
1005 "runtime.returnToTask": "Return to task",
1006 "runtime.closeCancelDesc": "Return to the task without changing anything.",
1007 "runtime.keepRunning": "Close and move to background",
1008 "runtime.keepRunningDesc": "Close the tab and keep its jobs running under Background jobs.",
1009 "runtime.stopAndClose": "Stop all activity and close",
1010 "runtime.stopAndCloseDesc": "Wait for the turn and processes to exit, then close the tab.",
1011 "runtime.closeFailed": "The task could not be closed because active work has not stopped.",
1012 "status.modelTitle": "Current model",
1013 "status.workspaceTitle": "Current workspace",
1014 "status.sandboxTitle": "Sandbox path",
1015 "status.gitBranchTitle": "Current Git branch",
1016 "status.yolo": "YOLO",
1017 "status.yoloTitle": "YOLO — ordinary tool permission prompts are skipped; deny rules and fresh reviews remain",
1018
1019 // approval modal
1020 "approval.planReady": "Plan ready",
1021 "approval.planReadyHint": "Review the plan above",
1022 "approval.startExecution": "Start execution",
1023 "approval.startExecutionDesc": "Leave plan mode and begin executing the plan.",
1024 "approval.revisePlan": "Revise plan",
1025 "approval.revisePlanDesc": "Tell Reasonix what should change before execution.",
1026 "approval.exitPlanWithoutExecution": "Exit without executing",
1027 "approval.exitPlanWithoutExecutionDesc": "Leave plan mode without running the current plan or changing the workspace.",
1028 "approval.revisePlanPlaceholder": "Tell me what should be updated in the plan...",
1029 "approval.sendRevision": "Send update",
1030 "approval.toolPending": "Allow tool call",
1031 "approval.recoveryPending": "Action needs confirmation",
1032 "approval.recoveryPlanChangePending": "The execution plan needs your decision",
1033 "approval.recoveryDecisionScope": "Scope choice",
1034 "approval.recoveryDecisionStrategy": "Strategy choice",
1035 "approval.recoveryAdoptPlan": "Adopt the new plan and continue",
1036 "approval.recoveryAdoptPlanDesc": "Accept the plan changes below and let Auto continue from the new plan.",
1037 "approval.recoveryAdjustPlan": "Do not adopt; tell Auto how to adjust",
1038 "approval.recoveryAdjustPlanDesc": "Open a feedback field. Nothing changes until you submit your guidance.",
1039 "approval.recoveryPlanDeltaLabel": "Plan changes",
1040 "approval.recoveryPlanRemoved": "Removed from the previous plan",
1041 "approval.recoveryPlanAdded": "Added to the new plan",
1042 "approval.recoveryPlanGuidanceSubmit": "Submit adjustment guidance",
1043 "approval.recoveryContinue": "Continue once",
1044 "approval.recoveryContinueDesc": "Run this action once. Similar actions will still ask.",
1045 "approval.recoveryContinueTask": "Continue and remember for this task",
1046 "approval.recoveryContinueTaskDesc": "Run this action and reuse the exact authorization shown below during this task.",
1047 "approval.recoveryTaskGrant": "Remember this kind of action for this task",
1048 "approval.recoveryTaskGrantDesc": "Only the same operation type and target boundary are reused. Broader or higher-risk actions still ask.",
1049 "approval.recoveryTaskGrantScope": "Will allow:",
1050 "approval.recoveryRevise": "Try another approach (recommended)",
1051 "approval.recoveryReviseDesc": "Skip this action and let Auto keep working another way.",
1052 "approval.recoveryGuidanceTrigger": "Have specific requirements? Tell Auto",
1053 "approval.recoveryGuidanceLabel": "Requirements for another approach",
1054 "approval.recoveryGuidancePlaceholder": "For example: only edit the current file and do not push to a remote.",
1055 "approval.recoveryGuidanceSubmit": "Try with these requirements",
1056 "approval.recoveryReasonRisk": "This action may affect an external system or be difficult to undo, so Auto paused.",
1057 "approval.recoveryReasonScope": "This action would expand the change scope, so Auto paused.",
1058 "approval.recoveryReasonStrategy": "Auto is about to try a different approach.",
1059 "approval.recoveryReasonUncertain": "Auto cannot confirm this action is safe, so it paused for your choice.",
1060 "approval.recoverySummaryLabel": "Action summary",
1061 "approval.recoveryTechnicalDetails": "Technical details",
1062 "approval.recoveryHideTechnicalDetails": "Hide technical details",
1063 "approval.recoveryFailed": "Failed: {summary}",
1064 "approval.recoveryDiagnosis": "Diagnosis: {diagnosis}",
1065 "approval.recoveryNext": "Next: {action}",
1066 "approval.recoveryWhy": "Why confirm: {why}",
1067 "approval.recoverySource": "Source: {agent}",
1068 "approval.recoveryFailedLabel": "Failure",
1069 "approval.recoveryDiagnosisLabel": "Diagnosis",
1070 "approval.recoveryWhyLabel": "Why confirm",
1071 "approval.recoverySourceLabel": "Source",
1072 "approval.recoveryNextLabel": "Will run",
1073 "approval.modeSwitchPendingHint": "Approval mode was relaxed — this pending request still needs your decision.",
1074 "approval.toolLabelExitPlan": "Plan approval",
1075 "approval.allowOnceDesc": "Allow this call only; the next one asks again.",
1076 "approval.allowRuleSessionDesc": "Allow matching calls until this session ends; resets on restart.",
1077 "approval.allowRulePersistentDesc": "Save as a persistent matching rule; future sessions stop asking for matching calls.",
1078 "approval.denyDesc": "Reject this call; the model sees the refusal and continues.",
1079 "approval.allowSandboxEscapeSessionDesc": "Run follow-up commands in the real environment for the rest of this session.",
1080 "approval.allowConfigWriteSessionDesc": "Allow future writes to Reasonix-managed config files for the rest of this session.",
1081 "approval.details": "Details",
1082 "approval.hideDetails": "Hide",
1083 "approval.deny": "Deny",
1084 "approval.allowOnce": "Allow once",
1085 "approval.allowSession": "Allow tool for session",
1086 "approval.allowPersistent": "Always allow matching tool (save)",
1087 "approval.allowCommandSession": "Allow command for session",
1088 "approval.allowCommandPersistent": "Always allow matching command (save)",
1089 "approval.allowCommandPrefixSession": "Allow command prefix for session",
1090 "approval.allowCommandPrefixPersistent": "Always allow matching command prefix (save)",
1091 "approval.allowRuleSession": "Allow matching for this session",
1092 "approval.allowRulePersistent": "Always allow matching operations",
1093 "decision.confirm": "Confirm",
1094 "decision.selectHint": "↑↓ or number to select · Enter to confirm",
1095 "decision.stopTask": "Stop task",
1096 "decision.showFullDescription": "View full description",
1097 "decision.hideFullDescription": "Collapse full description",
1098 "approval.allowEditsSession": "Allow edits for session",
1099 "approval.allowFilePersistent": "Always allow this file (save)",
1100 "approval.allowSandboxEscapeSession": "Use real environment for this session",
1101 "approval.allowConfigWriteSession": "Allow Reasonix config writes this session",
1102 "approval.toolLabelBash": "bash",
1103 "approval.toolLabelEditFile": "edit file",
1104 "approval.toolLabelWriteFile": "write file",
1105 "approval.toolLabelMultiEdit": "multi edit",
1106 "approval.toolLabelMoveFile": "move file",
1107 "approval.toolLabelWebFetch": "web fetch",
1108 "approval.toolLabelRunSkill": "run skill",
1109 "approval.toolLabelRemember": "remember",
1110 "approval.toolLabelForget": "forget",
1111 "approval.toolLabelSandboxEscape": "bash sandbox escape",
1112 "approval.toolLabelPlanModeReadOnly": "plan-mode read-only command",
1113 "approval.memorySaveUpdate": "Save/update memory",
1114 "approval.memoryBodyLabel": "body",
1115 "approval.memoryArchivePrefix": "Archive memory ",
1116 "approval.planModeBashTrustSubject": "Trust {prefix} as a read-only command prefix while planning\nCommand: {command}",
1117 "approval.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.",
1118 "approval.dynamicBashReason": "This command contains nested or indirect execution. Auto and broad allow rules cannot verify the inner command. Approve this exact command, or use YOLO only when you accept that risk.",
1119 "approval.matchedPermissionRule": "Matched permission rule: {rule}.",
1120 "approval.sandboxEscapeSubjectFallback": "run shell command unconfined once",
1121 "approval.sandboxEscapeSubjectPrefix": "run unconfined once: ",
1122 "approval.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.",
1123 "approval.sandboxEscapeRuntimeReason": "The OS sandbox could not start this command. Run it unconfined one time? This bypasses OS isolation for this command only.",
1124 "approval.toolLabelConfigWrite": "Reasonix config write",
1125 "approval.configWriteSubjectPrefix": "write Reasonix config: ",
1126 "approval.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.",
1127
1128 // ask card
1129 "ask.title": "Need your decision",
1130 "ask.questionProgress": "Question {progress}",
1131 "ask.details": "Details",
1132 "ask.hideDetails": "Hide",
1133 "ask.back": "Back",
1134 "ask.next": "Next",
1135 "ask.customAnswer": "Other answer",
1136 "ask.customAnswerDesc": "Open a free-text answer; confirm when it is non-empty.",
1137 "ask.customPlaceholder": "Type your own answer…",
1138 "ask.justChat": "Skip and keep chatting",
1139 "ask.justChatDesc": "Submit empty answers and continue the conversation.",
1140
1141 // clear context confirmation
1142 "clearContext.title": "Clear current context",
1143 "clearContext.badge": "local only",
1144 "clearContext.prompt": "This deletes the current transcript from local history and keeps only the system prompt.",
1145 "clearContext.clear": "Clear context",
1146 "clearContext.cancelDesc": "Keep the current transcript and return to the composer.",
1147 "clearContext.clearDesc": "Select this option, then confirm again to run.",
1148 "clearContext.done": "Current context cleared",
1149 "clearContext.failed": "Could not clear current context",
1150
1151 // history drawer
1152 "history.title": "History",
1153 "history.trashTitle": "Trash",
1154 "history.empty": "No saved sessions yet.",
1155 "history.trashEmpty": "Trash is empty.",
1156 "history.namePlaceholder": "Session name…",
1157 "history.emptySession": "(empty session)",
1158 "history.current": "current",
1159 "history.open": "open",
1160 "history.deleted": "deleted",
1161 "history.turnOne": "{n} turn",
1162 "history.turnOther": "{n} turns",
1163 "history.confirmDelete": "Confirm delete",
1164 "history.confirmPurge": "Confirm permanent delete",
1165 "history.clearTrash": "Empty trash",
1166 "history.confirmClearTrash": "Confirm empty trash",
1167 "history.clearTrashMenu": "Empty trash…",
1168 "history.clearRecoveryCopies": "Clear copies",
1169 "history.confirmClearRecoveryCopies": "Confirm clear copies",
1170 "history.clearRecoveryCopiesMenu": "Clear recovery copies…",
1171 "history.trashRecoveryCopies": "Trash recovery copies",
1172 "history.confirmTrashRecoveryCopies": "Confirm trash copies",
1173 "history.recoveryCopiesGroup": "Recovery copies",
1174 "history.moveToTrash": "Move to trash",
1175 "history.confirmMoveToTrash": "Confirm move to trash",
1176 "history.restore": "Restore",
1177 "history.restoreSession": "Restore session",
1178 "history.purge": "Delete permanently",
1179 "history.purgeSession": "Delete permanently…",
1180 "history.rename": "Rename",
1181 "history.preview": "preview",
1182 "history.previewEmpty": "No visible messages in this session.",
1183 "history.readOnlyHint": "Model output is running. History is read-only until the turn finishes.",
1184 "history.searchPlaceholder": "Search sessions…",
1185 "history.filters": "History filters",
1186 "history.filterScope": "Scope",
1187 "history.filterAll": "All",
1188 "history.filterProject": "Project",
1189 "history.filterGlobal": "Global",
1190 "history.filterStatus": "Status",
1191 "history.filterCurrent": "Current",
1192 "history.filterOpen": "Open",
1193 "history.filterActivity": "Activity",
1194 "history.filterDeletedAt": "Deleted",
1195 "history.noResults": "No matching sessions.",
1196 "history.today": "Today",
1197 "history.yesterday": "Yesterday",
1198 "history.older": "Older",
1199 "history.openSession": "Open session",
1200 "history.channel": "Channel",
1201 "history.channelReadOnly": "Read-only channel",
1202 "history.failedOpenProject": "Cannot open session, \"{name}\" does not exist: {path}",
1203 "history.failedOpenSession": "Cannot open session",
1204 "history.failedOpenGlobal": "Cannot open global session",
1205 "history.missingWorkspaceRoot": "Cannot open session because its workspace path is missing.",
1206 "history.selectSession": "Select a session to preview.",
1207 "history.trashSessionActions": "Trash session actions",
1208 "history.historySessionActions": "History session actions",
1209 "history.trashActions": "Trash actions",
1210
1211 // session recovery
1212 "recovery.branch": "Conflict copy",
1213 "recovery.badge": "Copy",
1214 "recovery.noticeSavedCopy": "The session changed on disk, so the unsaved local transcript was kept as a conflict copy.",
1215 "recovery.noticeKeptCurrent": "Repeated save conflicts were detected, so the current conflict copy was saved in place.",
1216 "recovery.noticeAdopted": "The session changed on disk, so Reasonix adopted the newer transcript.",
1217 "recovery.noticeAdoptedCovered": "The session changed on disk, so Reasonix adopted the newer transcript; the local changes were already covered.",
1218
1219 // project tree
1220 "projectTree.workspaceTitle": "Projects",
1221 "projectTree.pinnedTitle": "Pinned",
1222 "projectTree.searchPlaceholder": "Search projects or sessions",
1223 "projectTree.newTopic": "New session",
1224 "projectTree.createWorktree": "Create isolated Delivery workspace",
1225 "projectTree.createWorktreeHint": "Create a separate Git branch and worktree so Delivery sessions can write in parallel.",
1226 "projectTree.creatingWorktree": "Creating isolated workspace…",
1227 "projectTree.isolatedWorktree": "Isolated Git worktree",
1228 "projectTree.worktreeCreated": "Isolated workspace created on {branch}.",
1229 "projectTree.worktreeCreatedDirty": "Isolated workspace created on {branch}. Uncommitted source changes were not copied.",
1230 "projectTree.renameTopic": "Rename session",
1231 "projectTree.pinTopic": "Pin conversation",
1232 "projectTree.unpinTopic": "Unpin conversation",
1233 "projectTree.archiveTopic": "Archive to trash",
1234 "projectTree.archiveConversation": "Archive conversation",
1235 "projectTree.renameProject": "Rename display name",
1236 "projectTree.renameProjectWorkbench": "Rename project",
1237 "projectTree.justNow": "just now",
1238 "projectTree.previously": "previously",
1239 "projectTree.running": "responding",
1240 "projectTree.status.thinking": "thinking",
1241 "projectTree.status.streaming": "responding",
1242 "projectTree.status.waitingConfirmation": "awaiting",
1243 "projectTree.status.backgroundJob": "background job",
1244 "projectTree.status.paused": "paused",
1245 "projectTree.status.error": "error",
1246 "projectTree.removeProject": "Remove from sidebar",
1247 "projectTree.confirmRemoveProject": "Confirm remove from sidebar",
1248 "projectTree.removeProjectShort": "Remove",
1249 "projectTree.confirmRemoveProjectShort": "Confirm remove",
1250 "projectTree.copyPath": "Copy path",
1251 "projectTree.revealInFinder": "Show in Finder",
1252 "projectTree.revealInExplorer": "Show in File Explorer",
1253 "projectTree.revealInFileManager": "Show in file manager",
1254 "projectTree.topicActions": "Session actions",
1255 "projectTree.projectActions": "Project actions",
1256 "projectTree.colorDefault": "Default",
1257 "projectTree.colorRed": "Red",
1258 "projectTree.colorOrange": "Orange",
1259 "projectTree.colorAmber": "Amber",
1260 "projectTree.colorGreen": "Green",
1261 "projectTree.colorTeal": "Teal",
1262 "projectTree.colorBlue": "Blue",
1263 "projectTree.colorPurple": "Purple",
1264 "projectTree.colorPink": "Pink",
1265 "projectTree.emptyNoMatch": "No matching projects or sessions",
1266 "projectTree.emptyNoProjects": "No projects yet",
1267 "projectTree.newTopicTooltip": "New session",
1268 "projectTree.addProjectTooltip": "Add new project",
1269 "projectTree.pinProject": "Pin project",
1270 "projectTree.unpinProject": "Unpin project",
1271 "projectTree.moreActions": "More actions",
1272 "projectTree.collapseAllWorkbench": "Collapse all",
1273 "projectTree.restoreCollapsedWorkbench": "Restore previous groups",
1274 "projectTree.archiveAllConversations": "Archive all chats",
1275 "projectTree.organizeSidebar": "Organize sidebar",
1276 "projectTree.sortCriteria": "Sort criteria",
1277 "projectTree.organizeByProject": "By project",
1278 "projectTree.organizeRecentProjects": "Recent projects",
1279 "projectTree.organizeByTime": "Chronological",
1280 "projectTree.moveSectionDown": "Move down",
1281 "projectTree.sortByCreatedAt": "Created time",
1282 "projectTree.sortByUpdatedAt": "Updated time",
1283 "projectTree.createBlankProject": "New blank project",
1284 "projectTree.useExistingFolder": "Use existing folder",
1285 "projectTree.collapseAllTooltip": "Collapse all projects",
1286 "projectTree.restoreCollapsedTooltip": "Restore previous view",
1287 "projectTree.timeFilter": "Filter by time",
1288 "projectTree.filterAndSort": "Filter & sort",
1289 "projectTree.showMoreTopics": "Show more (+{n})",
1290 "projectTree.showFewerTopics": "Show fewer",
1291 "projectTree.noTopics": "No sessions",
1292 "projectTree.timeFilterAll": "All",
1293 "projectTree.timeFilter10": "Latest 10",
1294 "projectTree.timeFilter20": "Latest 20",
1295 "projectTree.timeFilter1h": "Last hour",
1296 "projectTree.timeFilter3h": "Last 3 hours",
1297 "projectTree.timeFilter5h": "Last 5 hours",
1298 "projectTree.timeFilter1d": "Last 24 hours",
1299 "projectTree.emptyNoTimeFilterMatch": "No topics match the time filter",
1300 "projectTree.clearTimeFilter": "Clear filter",
1301
1302 // memory drawer
1303 "memory.title": "Memory",
1304 "memory.summary": "{facts} background · {archives} archived · {docs} instruction files",
1305 "memory.summarySettings": "{facts} background · {archives} archived · {docs} instruction files · current workspace",
1306 "memory.unavailable": "Memory unavailable.",
1307 "memory.quickAdd": "Add instruction",
1308 "memory.whereToSave": "Instruction scope",
1309 "memory.notePlaceholder": "Standing rule or project convention…",
1310 "memory.remember": "Add",
1311 "memory.showStorage": "Storage location",
1312 "memory.hideStorage": "Hide location",
1313 "memory.storagePathLabel": "Saved under",
1314 "memory.instructionFiles": "Instruction files",
1315 "memory.instructionFilesHint": "These Markdown files stay in context. Put standing rules and project conventions here.",
1316 "memory.expandDoc": "Expand preview",
1317 "memory.noDocs": "No REASONIX.md or AGENTS.md found. Add an instruction to create one.",
1318 "memory.savedMemories": "Background memory",
1319 "memory.memoryEntries": "Background memory",
1320 "memory.addMemory": "Add instruction",
1321 "memory.addMemoryHint": "Append an always-on rule to the selected REASONIX.md or AGENTS.md instruction file.",
1322 "memory.scope.project": "Project",
1323 "memory.scope.global": "Global",
1324 "memory.scope.user": "Global",
1325 "memory.scope.local": "Local",
1326 "memory.scope.ancestor": "Ancestor",
1327 "memory.type.project": "Project context",
1328 "memory.type.user": "User preference",
1329 "memory.type.feedback": "Feedback",
1330 "memory.type.reference": "Reference",
1331 "memory.type.other": "Other",
1332 "memory.doc.projectTitle": "Project instructions",
1333 "memory.doc.projectHint": "Applies only to the current project and takes precedence over global instructions.",
1334 "memory.doc.userTitle": "Global instructions",
1335 "memory.doc.userHint": "Applies by default across projects; best for long-term personal preferences.",
1336 "memory.doc.localTitle": "Local instructions",
1337 "memory.doc.localHint": "Applies only on this machine; best for private rules that should not be committed.",
1338 "memory.doc.ancestorTitle": "Parent-directory instructions",
1339 "memory.doc.ancestorHint": "Inherited from a parent directory and applied to projects below it.",
1340 "memory.doc.customTitle": "Instruction file",
1341 "memory.doc.customHint": "A long-lived context file with a custom scope.",
1342 "memory.fallibleNote": "Background memory. Verify file, function, and flag references before relying on them.",
1343 "memory.searchPlaceholder": "Search title, slug, description, or body…",
1344 "memory.typeFilter": "Memory type filter",
1345 "memory.allTypes": "All",
1346 "memory.noMatches": "No memories match the current filters.",
1347 "memory.clearFilters": "Clear filters",
1348 "memory.noFacts": "Nothing saved yet. The agent writes these with the remember tool.",
1349 "memory.emptySavedTitle": "No background memory yet",
1350 "memory.emptySavedBody": "Agent-approved facts and confirmed candidates appear here. New facts default to this project.",
1351 "memory.suggestions": "Candidate suggestions",
1352 "memory.suggestionsHint": "Drafted from recent local history with project scope by default; nothing is written until you confirm.",
1353 "memory.scanSuggestions": "Scan history manually",
1354 "memory.refreshSuggestions": "Rescan history",
1355 "memory.autoSuggestions": "Auto-generate candidates",
1356 "memory.autoSuggestionsHint": "Opening Suggestions scans recent local history automatically. Drafts still require manual confirmation.",
1357 "memory.enableAutoSuggestions": "Suggestions scan recent history automatically",
1358 "memory.disableAutoSuggestions": "Suggestions scan recent history automatically",
1359 "memory.suggestionsEmptyTitle": "Generate candidates from history",
1360 "memory.suggestionsEmptyBody": "Scan recent sessions for memories worth saving and repeated workflows worth packaging. Results are shown as drafts.",
1361 "memory.noSuggestionsTitle": "No high-confidence candidates yet",
1362 "memory.noSuggestionsBody": "Recent history did not contain a clear long-term memory or repeated workflow. Scan again later.",
1363 "memory.suggestionsGenerated": "Generated {time}",
1364 "memory.memoryCandidates": "Memory candidates",
1365 "memory.skillCandidates": "Skill candidates",
1366 "memory.skillCandidate": "Skill",
1367 "memory.confirmBeforeApply": "Only applies after confirmation.",
1368 "memory.saveAsMemory": "Save memory",
1369 "memory.createSkill": "Create skill",
1370 "memory.savedSuggestion": "Saved",
1371 "memory.createdSkillSuggestion": "Created",
1372 "memory.archivedMemories": "Archived memories",
1373 "memory.archivedHint": "Kept for traceability. Archived memories are not loaded or retrieved as active memory.",
1374 "memory.restoreArchived": "Restore",
1375 "memory.restoreArchivedHint": "Restores this fact as a new revision without replacing active memory.",
1376 "memory.archivedAt": "archived {time}",
1377 "memory.noArchivedMatches": "No archived memories match the current filters.",
1378 "memory.emptyArchivedTitle": "No archived memories",
1379 "memory.emptyArchivedBody": "When a memory is archived, it stops being active but remains here for audit and recovery.",
1380 "memory.links": "Memory links",
1381 "memory.noBody": "No body saved for this memory.",
1382 "memory.missingLinks": "{n} missing linked memory",
1383 "memory.appliesNow": "Changes apply in this session.",
1384 "memory.storedUnder": "stored under {dir}",
1385
1386 "memory.forget": "Archive",
1387 "memory.confirmForget": "Confirm archive",
1388 "memory.deadLink": "No memory named “{name}”",
1389
1390 "memory.filterPlaceholder": "Filter docs and facts…",
1391 "memory.noFilterMatch": "Nothing matches the current filter.",
1392 "memory.activity": "Recall activity",
1393 "memory.overridesTitle": "{count} scoped override",
1394 "memory.overrideExplanation": "Project memory “{project}” takes precedence over global memory “{global}” for this workspace.",
1395 "memory.freshness.fresh": "Fresh",
1396 "memory.freshness.current": "Current",
1397 "memory.freshness.stale": "Review",
1398 "memory.factId": "ID",
1399 "memory.revision": "Revision {revision}",
1400 "memory.updatedAt": "Updated {time}",
1401 "memory.revisionHistory": "Revision history",
1402 "memory.loadingRevisions": "Loading revisions…",
1403 "memory.noRevisions": "No earlier revisions.",
1404 "memory.restoreRevision": "Restore",
1405 "memory.recallTitle": "Last automatic recall",
1406 "memory.recallHint": "What Context Engine selected for the latest user turn and why.",
1407 "memory.noRecallQuery": "No user turn has been recalled yet",
1408 "memory.recallBudget": "{used} / {budget} characters used · {omitted} omitted",
1409 "memory.recallSuppressed": "Recall was suppressed: {reason}",
1410 "memory.noRecallHits": "No background memories were added to the latest turn.",
1411 "memory.instructionDiagnostics": "Instruction diagnostics",
1412 "memory.instructionPrecedence": "Priority {precedence} · {directory}",
1413 "memory.instructionImports": "Resolved imports",
1414 "memory.globalDirectory": "global scope",
1415
1416 // settings drawer
1417 "settings.title": "Settings",
1418 "settings.loading": "Loading…",
1419 "settings.loadFailed": "Settings could not be loaded.",
1420 "settings.modelsProviders": "Models & providers",
1421 "settings.tab.general": "General",
1422 "settings.tab.models": "Models",
1423 "settings.tab.providers": "Providers",
1424 "settings.tab.bots": "Bots",
1425 "settings.tab.capabilities": "MCP & Skills",
1426 "settings.tab.mcp": "MCP & Tools",
1427 "settings.tab.remote": "Remote SSH",
1428 "settings.tab.skills": "Skills",
1429 "remote.tabHint": "SSH hosts & remote workspaces",
1430 "remote.hosts.title": "Remote SSH hosts",
1431 "remote.hosts.empty": "No remote hosts yet.",
1432 "remote.hosts.add": "Add host",
1433 "remote.hosts.import": "Import from ~/.ssh/config",
1434 "remote.hosts.importEmpty": "No importable aliases found.",
1435 "remote.hosts.importSelected": "Import selected",
1436 "remote.host.label": "Name",
1437 "remote.host.host": "Host",
1438 "remote.host.port": "Port",
1439 "remote.host.user": "User",
1440 "remote.host.identityFile": "Identity file",
1441 "remote.host.password": "Password (optional)",
1442 "remote.host.passwordHint": "Saved in Reasonix credentials, never in config.toml.",
1443 "remote.host.passwordSavedHint": "A password is saved. Leave this blank to keep it.",
1444 "remote.host.passwordRemoveHint": "The saved password will be removed when you save.",
1445 "remote.host.clearPassword": "Remove saved password",
1446 "remote.host.keepPassword": "Keep saved password",
1447 "remote.host.keyPassphrase": "Private key passphrase (optional)",
1448 "remote.host.keyPassphraseHint": "Used only to unlock an encrypted identity file.",
1449 "remote.host.keyPassphraseSavedHint": "A key passphrase is saved. Leave this blank to keep it.",
1450 "remote.host.keyPassphraseRemoveHint": "The saved key passphrase will be removed when you save.",
1451 "remote.host.clearKeyPassphrase": "Remove saved passphrase",
1452 "remote.host.keepKeyPassphrase": "Keep saved passphrase",
1453 "remote.host.credentialSavedPlaceholder": "Saved — leave blank to keep",
1454 "remote.host.useSSHConfig": "Use ~/.ssh/config for unset connection options",
1455 "remote.host.proxyJump": "Proxy jump",
1456 "remote.host.defaultWorkspace": "Default workspace",
1457 "remote.host.serveInstall": "Remote CLI install",
1458 "remote.host.save": "Save",
1459 "remote.host.cancel": "Cancel",
1460 "remote.host.edit": "Edit",
1461 "remote.host.remove": "Remove",
1462 "remote.host.removeConfirmTitle": "Remove SSH host?",
1463 "remote.host.removeConfirm": "Remove {host} and its Reasonix-saved SSH credentials? This cannot be undone.",
1464 "remote.connect": "Connect",
1465 "remote.connectAndOpen": "Connect & open",
1466 "remote.disconnect": "Disconnect",
1467 "remote.disconnectHost": "Disconnect {host}",
1468 "remote.openWorkspace": "Open Remote Web",
1469 "remote.legacyData.title": "Legacy Remote Workbench data",
1470 "remote.legacyData.summary": "The removed Remote Workbench left {count} mirror file(s), {size}, in the Reasonix data directory.",
1471 "remote.legacyData.trustPresent": "A saved provider-trust file is present.",
1472 "remote.legacyData.cleanMirrors": "Delete mirrors",
1473 "remote.legacyData.cleanTrust": "Delete trust file",
1474 "remote.legacyData.cleaning": "Deleting…",
1475 "remote.legacyData.clean": "Delete",
1476 "remote.legacyData.cleanTitle": "Delete legacy Remote Workbench data?",
1477 "remote.legacyData.cleanMirrorsConfirm": "Delete all remote session mirrors? The remote Serve keeps running and no current sessions are affected.",
1478 "remote.legacyData.cleanTrustConfirm": "Delete the saved Remote Workbench provider-trust file?",
1479 "remote.manageHosts": "Manage hosts",
1480 "remote.explorer": "Remote explorer",
1481 "remote.switcher.title": "Open a remote window",
1482 "remote.switcher.hosts": "SSH hosts",
1483 "remote.switcher.manage": "Manage SSH hosts…",
1484 "remote.statusBar.disconnected": "SSH · Disconnected",
1485 "remote.statusBar.summary": "{host} · {status}",
1486 "remote.status.failed": "Connection failed",
1487 "remote.status.connected": "Connected",
1488 "remote.status.connecting": "Connecting…",
1489 "remote.status.reconnecting": "Reconnecting…",
1490 "remote.status.degraded": "Degraded",
1491 "remote.status.pending_hostkey": "Confirm host key",
1492 "remote.status.pending_secret": "Waiting for credentials",
1493 "remote.status.stopped": "Disconnected",
1494 "remote.banner.reconnecting": "Connection lost — reconnecting (attempt {n})…",
1495 "remote.error.summary.connection_failed": "Reasonix could not connect to {host}. Check the network and SSH settings.",
1496 "remote.error.summary.auth_failed": "Authentication failed. Check the username, identity file, or password settings.",
1497 "remote.error.summary.host_key_rejected": "The host key was not accepted, so the connection was stopped.",
1498 "remote.error.summary.host_key_mismatch": "The host key differs from the previous record. Reasonix stopped the connection to protect you.",
1499 "remote.error.summary.degraded": "SSH is connected to {host}, but one or more remote services could not start.",
1500 "remote.error.timeout": "Connecting to {host} timed out. You can stop the current attempt and retry.",
1501 "remote.error.details": "View details",
1502 "remote.error.hostKeyDetails": "View key details",
1503 "remote.error.manage": "Manage host",
1504 "remote.error.retry": "Retry",
1505 "remote.error.stopAndRetry": "Stop and retry",
1506 "remote.error.retryAfterFix": "I fixed it, retry",
1507 "remote.error.close": "Close",
1508 "remote.error.dialog.title": "Remote connection details",
1509 "remote.error.hostKeyMismatch.title": "Remote host key changed",
1510 "remote.error.host": "Remote host",
1511 "remote.error.presentedFingerprint": "Presented fingerprint",
1512 "remote.error.knownHostRecords": "Conflicting known_hosts records",
1513 "remote.error.technicalDetails": "Technical details",
1514 "remote.fingerprint.title": "Unknown host key",
1515 "remote.fingerprint.body": "The host {host} presented a key Reasonix has not seen before. Accept it only if you trust this connection.",
1516 "remote.fingerprint.type": "Key type",
1517 "remote.fingerprint.sha256": "SHA256",
1518 "remote.fingerprint.accept": "Accept & continue",
1519 "remote.fingerprint.reject": "Reject",
1520 "remote.secret.password.title": "SSH password required",
1521 "remote.secret.password.body": "Enter the password for {host}. It is used for this connection only and is not saved.",
1522 "remote.secret.password.label": "SSH password",
1523 "remote.secret.passphrase.title": "Private key passphrase required",
1524 "remote.secret.passphrase.body": "Unlock the private key used for {host}. The passphrase is used for this connection only and is not saved.",
1525 "remote.secret.passphrase.identity": "Key: {identity}",
1526 "remote.secret.passphrase.label": "Private key passphrase",
1527 "remote.secret.cancel": "Cancel",
1528 "remote.secret.continue": "Continue",
1529 "remote.statusBar.activeWorkspace": "{host} · {workspace}",
1530 "remote.tab.files": "Files",
1531 "remote.tab.ports": "Ports",
1532 "remote.tab.server": "Server",
1533 "remote.tree.empty": "Empty directory",
1534 "remote.tree.loadError": "Failed to load: {err}",
1535 "remote.tree.newFolder": "New folder",
1536 "remote.tree.rename": "Rename",
1537 "remote.tree.delete": "Delete",
1538 "remote.editor.edit": "Edit",
1539 "remote.editor.save": "Save",
1540 "remote.editor.saving": "Saving…",
1541 "remote.editor.binaryBlocked": "Binary file — not editable.",
1542 "remote.editor.truncatedBlocked": "File too large to edit (truncated preview).",
1543 "remote.editor.readOnlyDisconnected": "Disconnected — saving is disabled.",
1544 "remote.editor.conflictTitle": "File changed on remote",
1545 "remote.editor.conflictBody": "This file changed on the remote host since you opened it.",
1546 "remote.editor.reload": "Reload",
1547 "remote.editor.overwrite": "Overwrite",
1548 "remote.ports.title": "Port forwards",
1549 "remote.ports.empty": "No forwards.",
1550 "remote.ports.add": "Add forward",
1551 "remote.ports.localPort": "Local port",
1552 "remote.ports.remoteHost": "Remote host",
1553 "remote.ports.remotePort": "Remote port",
1554 "remote.ports.label": "Label",
1555 "remote.ports.remove": "Remove",
1556 "remote.server.title": "Remote serve",
1557 "remote.server.workspace": "Workspace",
1558 "remote.server.openWeb": "Open Remote Web",
1559 "remote.server.stop": "Stop",
1560 "remote.server.providerHint": "Models, API keys, and sessions are managed by the Reasonix configuration on the remote server.",
1561 "remote.server.logs": "Logs",
1562 "remote.server.refreshLogs": "Refresh",
1563 "remote.server.state.ready": "Ready",
1564 "remote.server.state.starting": "Starting…",
1565 "remote.server.state.stopped": "Stopped",
1566 "remote.server.state.error": "Error",
1567 "settings.tab.subagents": "Subagents",
1568 "settings.tab.plugins": "Plugins",
1569 "settings.tab.memory": "Memory",
1570 "settings.tab.hooks": "Hooks",
1571 "settings.tab.diagnostics": "Diagnostics",
1572 "settings.tab.shortcuts": "Shortcuts",
1573 "settings.tab.network": "Network",
1574 "settings.tab.permissions": "Permissions",
1575 "settings.tab.sandbox": "Sandbox",
1576 "settings.tab.appearance": "Appearance",
1577 "settings.tab.updates": "Updates",
1578 "settings.tabSub.general": "Preferences & startup",
1579 "settings.tabSub.models": "Defaults & runtime",
1580 "settings.tabSub.providers": "Connections & auth",
1581 "settings.tabSub.bots": "QQ · Feishu · WeChat",
1582 "settings.tabSub.capabilities": "Servers, tools & skills",
1583 "settings.tabSub.mcp": "Servers & tools",
1584 "settings.tabSub.skills": "Sources & enablement",
1585 "settings.tabSub.plugins": "Packages & diagnostics",
1586 "settings.tabSub.memory": "Project & global",
1587 "settings.tabSub.hooks": "Shell automation",
1588 "settings.tabSub.diagnostics": "Capabilities health",
1589 "settings.tabSub.shortcuts": "Keys & help",
1590 "diag.hint": "Read-only capability report. Static mode never starts MCP. Session runtime only reads the active tab Host.",
1591 "diag.includeRuntime": "Include current session runtime",
1592 "diag.refresh": "Refresh",
1593 "diag.copyJson": "Copy redacted JSON",
1594 "diag.copied": "Copied",
1595 "diag.copyFailed": "Could not copy to clipboard",
1596 "diag.errors": "Errors",
1597 "diag.warnings": "Warnings",
1598 "diag.infos": "Info",
1599 "diag.counts": "{skills} skills · {commands} commands · {hooks} hooks · {plugins} plugins · {mcp} MCP",
1600 "diag.issues": "Issues",
1601 "diag.noIssues": "No issues found",
1602 "diag.severity.error": "Errors",
1603 "diag.severity.warning": "Warnings",
1604 "diag.severity.info": "Info",
1605 "diag.gotoSettings": "Open settings",
1606 "diag.instructions": "Instructions",
1607 "diag.skills": "Skills",
1608 "diag.commands": "Commands",
1609 "diag.hooks": "Hooks",
1610 "diag.plugins": "Plugins",
1611 "diag.mcp": "MCP",
1612 "diag.yes": "yes",
1613 "diag.no": "no",
1614 "settings.tabSub.network": "Proxy & connectivity",
1615 "settings.tabSub.permissions": "Ask before writes",
1616 "settings.tabSub.sandbox": "Forced isolation",
1617 "settings.tabSub.appearance": "Theme & text size",
1618 "settings.tabSub.updates": "Version & config",
1619 "settings.providerCount": "{n} providers",
1620 "settings.botMetaOff": "off",
1621 "settings.botMetaNoChannels": "no channels",
1622 "settings.botMetaChannels": "{n} channels",
1623 "settings.botNoConnections": "No connections",
1624 "settings.botConnectionCount": "{n} connections",
1625 "settings.botDisabledWithConnections": "Bot off · {n} connections",
1626 "settings.appearanceMeta": "theme packs · color mode · text · fonts",
1627 "settings.updatesMeta": "version · config",
1628 "settings.shortcutsTitle": "Keyboard shortcuts",
1629 "settings.shortcutsHint": "Customize desktop shortcuts from one shared source. The help sheet and active handlers use these same bindings.",
1630 "settings.shortcutsResetAll": "Reset all shortcuts",
1631 "settings.shortcutsReset": "Reset",
1632 "settings.shortcutsRecording": "Press keys",
1633 "settings.shortcutsConflict": "{action} conflicts with {conflict}. Choose another shortcut.",
1634 "settings.shortcutsEnterOnly": "{action} only supports Enter with optional modifier keys.",
1635 "settings.closeBehavior": "When closing window",
1636 "settings.closeBehavior.background": "Keep running",
1637 "settings.closeBehavior.quit": "Quit Reasonix",
1638 "settings.desktopLayoutStyle": "Desktop style",
1639 "settings.desktopLayoutStyle.classic": "Classic",
1640 "settings.desktopLayoutStyle.workbench": "Workbench",
1641 "settings.desktopLayoutStyle.creation": "Creation",
1642 "settings.displayMode": "Transcript display mode",
1643 "settings.displayMode.standard": "Standard",
1644 "settings.displayMode.compact": "Compact",
1645 "settings.processFold": "Work process fold",
1646 "settings.processFoldHint": "Whether the reasoning and tool-call fold auto-collapses when a turn completes",
1647 "settings.processFold.auto": "Auto-collapse",
1648 "settings.processFold.expanded": "Keep expanded",
1649 "settings.statusBarStyle": "Bottom status bar style",
1650 "settings.statusBarStyle.icon": "Icon version",
1651 "settings.statusBarStyle.text": "Text version",
1652 "settings.statusBarItems": "Status bar items",
1653 "settings.statusBarItemsHint": "Choose which items to show, then drag the handle or use the arrows to reorder them.",
1654 "settings.statusBarItemsSummary": "{visible}/{total} shown",
1655 "settings.statusBarItemsExpand": "Expand status bar items",
1656 "settings.statusBarItemsCollapse": "Collapse status bar items",
1657 "settings.statusBarItem.model": "Model",
1658 "settings.statusBarItem.workspace": "Workspace",
1659 "settings.statusBarItem.gitBranch": "Git branch",
1660 "settings.statusBarItem.drag": "Drag to move {label}",
1661 "settings.statusBarItem.moveUp": "Move {label} up",
1662 "settings.statusBarItem.moveDown": "Move {label} down",
1663 "settings.manageProviders": "Manage providers",
1664 "settings.activeProvider": "Active provider",
1665 "settings.plannerStatus": "Planning mode",
1666 "settings.plannerEnabled": "two-model",
1667 "settings.plannerDisabled": "single-model",
1668 "settings.plannerSingle": "single model",
1669 "settings.plannerDual": "two models",
1670 "settings.plannerSingleDetail": "{model} plans and executes",
1671 "settings.plannerDualDetail": "{planner} plans · {executor} executes",
1672 "settings.providers": "Providers",
1673 "settings.capabilitiesDescription": "Manage MCP servers, authorization, enablement, retries, and Agent skills from the dedicated management panel.",
1674 "settings.openCapabilities": "Open management panel",
1675 "settings.modelTab.usage": "Use",
1676 "settings.modelTab.access": "Access",
1677 "settings.modelTab.stats": "Usage stats",
1678 "settings.mcpDescription": "Manage MCP servers, authorization, retries, and tool availability from the dedicated management panel.",
1679 "settings.skillsDescription": "Review Agent skills, sources, enablement, and discovery from the dedicated management panel.",
1680 "settings.memoryDescription": "Manage saved memories and instruction files from the memory management panel.",
1681 "settings.openMcp": "Open MCP management",
1682 "settings.openSkills": "Open skills management",
1683 "settings.openMemory": "Open memory management",
1684 "settings.availableModels": "Available models",
1685 "settings.enabledModels": "Enabled models",
1686 "settings.modelList": "Model list",
1687 "settings.modelsRequireKey": "Set a key before selecting these models.",
1688 "settings.defaultModel": "Default model",
1689 "settings.defaultModelHint": "Used for new sessions; existing sessions keep their saved model.",
1690 "settings.plannerModel": "Dedicated planner model",
1691 "settings.plannerNone": "Use current model (single model)",
1692 "settings.subagentDefaults": "Subagent defaults",
1693 "settings.subagentModel": "Subagent model",
1694 "settings.subagentModelDefault": "Use current/default model",
1695 "settings.subagentEffort": "Subagent effort",
1696 "settings.subagentEffortDefault": "auto (provider default)",
1697 "settings.subagentHint": "Applies to task and runAs=subagent skills unless a tool call or skill-specific config overrides it.",
1698 "settings.subagentDepth": "Subagent nesting depth",
1699 "settings.subagentDepthHint": "Controls whether a first-layer subagent may dispatch one more reviewer or worker subagent.",
1700 "settings.subagentDepthOne": "1 layer",
1701 "settings.subagentDepthTwo": "2 layers",
1702 "settings.subagentConcurrency": "Subagent concurrency",
1703 "settings.subagentConcurrencyHint": "Max concurrent sub-agents per session (task, fleet, profile skills). Default 6; range 1–32.",
1704 "settings.parallelWriters": "Parallel writers",
1705 "settings.parallelWritersHint": "Max concurrent writer sub-agents with non-overlapping write_paths. Default 3; cannot exceed total concurrency.",
1706 "subagents.readOnly": "Read-only",
1707 "subagents.readOnlyOn": "Read-only",
1708 "subagents.readOnlyOff": "Writable",
1709 "subagents.readOnlyHint": "Read-only profiles strip writer tools. Existing profiles default to writable.",
1710 "settings.defaultToolApprovalMode": "New session approval",
1711 "settings.defaultToolApprovalModeHint": "Defaults to Auto; existing sessions keep their current Ask, Auto, or Yolo mode.",
1712 "settings.defaultToolApprovalMode.ask": "Ask",
1713 "settings.defaultToolApprovalMode.auto": "Auto",
1714 "settings.defaultToolApprovalMode.yolo": "Yolo",
1715 "settings.agentRuntime": "Agent runtime",
1716 "settings.agentRuntimeHint": "Reasonix manages execution progress automatically; these preferences control resume behavior and visible reasoning.",
1717 "settings.coldResumePrune": "Trim on cold reopen",
1718 "settings.coldResumePruneHint": "When reopening an expired session, trim old tool results to reduce continuation cost. Turn off to keep full history.",
1719 "settings.coldResumePrune.on": "On",
1720 "settings.coldResumePrune.off": "Off",
1721 "settings.reasoningLanguage": "Thinking language",
1722 "settings.reasoningLanguageHint": "Affects visible reasoning only. Auto anchors clear Chinese prompts; referenced context is ignored.",
1723 "settings.reasoningLanguage.auto": "Auto",
1724 "settings.reasoningLanguage.zh": "中文",
1725 "settings.reasoningLanguage.en": "English",
1726 "settings.compactRatio": "Automatic compaction threshold",
1727 "settings.compactRatioHint": "Global default · usually leave unchanged",
1728 "settings.compactRatioCurrent": "Current threshold: {value}",
1729 "settings.compactRatioImpact": "Lower values compact sooner and may reduce prompt-cache reuse.",
1730 "settings.compactRatioImpactWithTokens": "The default model compacts at about {tokens} tokens. Lower values may reduce prompt-cache reuse.",
1731 "settings.compactRatioProjectOverride": "The active project overrides this global default; its effective threshold is {percent}%.",
1732 "settings.compactRatioCustom": "Custom threshold",
1733 "settings.compactRatioCustomOption": "Custom threshold…",
1734 "settings.compactRatioCustomValue": "{percent}% · Custom",
1735 "settings.compactRatioApply": "Apply",
1736 "settings.compactRatioCustomAria": "Custom compaction threshold percentage",
1737 "settings.compactRatioCustomHint": "Set 65%–85%. Tool output is trimmed at 60%; 90% forces compaction. Press Enter to apply or Esc to cancel.",
1738 "settings.compactRatioPreset.70": "70% · Earlier",
1739 "settings.compactRatioPreset.80": "80% · Balanced",
1740 "settings.compactRatioPreset.85": "85% · Cache first",
1741 "settings.sound": "Sound",
1742 "settings.soundHint": "Background music and notification sounds",
1743 "settings.soundStatus.allOff": "All off",
1744 "settings.soundStatus.enabled": "Enabled",
1745 "settings.soundStatus.custom": "Custom",
1746 "settings.soundExpand": "Expand sound settings",
1747 "settings.soundCollapse": "Collapse sound settings",
1748 "settings.notificationSound": "Notification sounds",
1749 "settings.notificationSoundHint": "Choose different sounds for each event",
1750 "settings.notificationSoundSuccess": "Generation complete",
1751 "settings.notificationSoundAttention": "Awaiting response",
1752 "settings.notificationSound.synth": "Synthesized",
1753 "settings.notificationSound.off": "Off",
1754 "settings.notificationSound.positive": "Positive Notification",
1755 "settings.notificationSound.correct": "Correct Answer Tone",
1756 "settings.notificationSound.start": "Interface Start",
1757 "settings.notificationSound.back": "Interface Back",
1758 "settings.notificationSoundPreview": "Preview",
1759 "settings.keySet": "key set",
1760 "settings.noKey": "no key",
1761 "settings.noKeyRequired": "no key required",
1762 "settings.cantDeleteDefault": "Can't delete the default provider",
1763 "settings.cantRemoveDefault": "Can't remove access for the default provider",
1764 "settings.deleteProvider": "Delete provider",
1765 "settings.confirmDeleteProvider": "Confirm delete provider",
1766 "settings.addProvider": "+ Add provider",
1767 "settings.addProviderAccess": "Add access",
1768 "settings.removeProviderAccess": "Remove access",
1769 "settings.confirmRemoveProviderAccess": "Confirm remove access",
1770 "settings.providerAccess": "Provider access",
1771 "settings.providerAccessHint": "Providers appear here after you add them. Only saved enabled models appear in the model picker.",
1772 "settings.providerAccessEmptyTitle": "No providers added yet",
1773 "settings.builtinProviders": "Built-in providers",
1774 "settings.builtinProvider": "built-in",
1775 "settings.providerLabel.deepseek": "DeepSeek Official",
1776 "settings.fetchModels": "Refresh models",
1777 "settings.saveEnabledModels": "Save enabled models",
1778 "settings.modelCandidates": "Discovered models",
1779 "settings.modelCandidatesSelected": "{n} selected",
1780 "settings.visionModel": "Image input",
1781 "settings.visionModelAria": "{model} supports image input",
1782 "settings.modelCapabilitiesAria": "Input capabilities for {model}",
1783 "settings.textInput": "Text",
1784 "settings.imageInputUnsupported": "No image input",
1785 "settings.providerCapabilities": "Service capabilities",
1786 "settings.recommended": "Recommended",
1787 "settings.providerCompatibility": "Endpoint compatibility",
1788 "settings.serverWebSearch": "Server-side web search",
1789 "settings.serverWebSearchHint": "Allow the model to search the web through DeepSeek when needed. Enabling this does not search on every request.",
1790 "settings.serverWebSearchCostHint": "Search queries are sent to DeepSeek and may increase token usage; current billing follows DeepSeek's pricing rules.",
1791 "settings.serverWebSearchApplies": "Models: {models}",
1792 "settings.responsesStateless": "Responses · stateless",
1793 "settings.anthropicCompatible": "Anthropic · Claude-compatible",
1794 "settings.modelCandidateSearch": "Search discovered models...",
1795 "settings.noMatchingCandidateModels": "No matching models",
1796 "settings.selectAllModels": "Select all",
1797 "settings.clearModelSelection": "Clear",
1798 "settings.fetchModelsMissingBaseUrl": "Enter an API address first",
1799 "settings.fetchModelsMissingKeyEnv": "Enter api_key_env first",
1800 "settings.clearKey": "Clear key",
1801 "settings.confirmClearKey": "Confirm clear key",
1802 "settings.providerName": "name (e.g. deepseek-work)",
1803 "settings.providerKind": "Kind",
1804 "settings.providerBaseUrl": "base_url (https://…)",
1805 "settings.providerModelsUrl": "models_url (optional)",
1806 "settings.providerModelsUrlPlaceholder": "e.g. https://api.openai.com/v1/models",
1807 "settings.providerModelsUrlHint": "Optional. Use when model discovery needs a different URL than the chat endpoint.",
1808 "settings.providerModels": "models (comma-separated)",
1809 "settings.providerApiKeyEnv": "api_key_env (optional)",
1810 "settings.providerBalanceUrl": "Balance URL (optional)",
1811 "settings.balanceUrlPlaceholder": "balance endpoint (e.g. https://api.deepseek.com/user/balance)",
1812 "settings.balanceUrlHint": "Optional. If set, the wallet balance is queried and shown in the status bar.",
1813 "settings.providerContextWindow": "Context window (tokens)",
1814 "settings.contextWindowPlaceholder": "tokens (0 = disable auto-compaction)",
1815 "settings.contextWindowHint": "Use the context-window token limit from the model documentation, not the maximum output tokens. For example, enter 128000 for 128K unless the provider specifies 131072. Set 0 to disable automatic compaction for this provider.",
1816 "settings.modelContextWindow": "Context (tokens)",
1817 "settings.modelContextWindowPlaceholder": "Inherit / e.g. 128000",
1818 "settings.modelContextWindowHint": "Leave blank to inherit the provider-level context window. This is not the maximum output-token setting.",
1819 "settings.modelContextWindowAria": "Context window in tokens for {model}",
1820 "settings.modelContextWindowGuide": "Use the context-window limit from the model documentation, not maximum output tokens. 128K usually means 128000; use 131072 when the provider documents that exact value.",
1821 "settings.modelContextWindowSmallWarning": "This value is unusually small and may cause frequent compaction and lower cache hit rates. Confirm the model limit.",
1822 "settings.providerReasoningProtocol": "reasoning protocol",
1823 "settings.providerReasoningProtocolAuto": "auto (model and endpoint detection)",
1824 "settings.providerReasoningProtocolHint": "For OpenAI-compatible reasoning models. deepseek uses DeepSeek reasoning fields, openai uses ordinary reasoning_effort, and none disables it.",
1825 "settings.effortBehavior": "Effort behavior",
1826 "settings.effortUseProtocolDefaults": "Protocol defaults",
1827 "settings.effortUseCustom": "Customize levels",
1828 "settings.effortProtocolDefault.auto": "Protocol defaults stay stored as empty supported_efforts. Reasonix infers V4 Flash as low|high|max, other known DeepSeek models/endpoints as high|max, OpenAI reasoning as low|medium|high, and unsupported providers as no /effort.",
1829 "settings.effortProtocolDefault.deepseek": "DeepSeek defaults expose auto|high|max; V4 Flash also supports low. Reasonix keeps thinking enabled and uses reasoning_effort for depth.",
1830 "settings.effortProtocolDefault.openai": "OpenAI reasoning defaults expose auto|low|medium|high and send ordinary reasoning_effort.",
1831 "settings.effortProtocolDefault.minimax": "MiniMax-style endpoints use provider-specific thinking levels such as adaptive|disabled. Add those as custom levels only when the endpoint supports them.",
1832 "settings.effortProtocolDefault.none": "Effort is disabled for this provider; Reasonix will not send reasoning_effort or thinking controls.",
1833 "settings.supportedEfforts": "Supported efforts",
1834 "settings.supportedEffortsCustomPlaceholder": "Custom level (press Enter)",
1835 "settings.supportedEffortsNoPresets": "No standard presets",
1836 "settings.supportedEffortsNoPresetsHint": "Use custom levels only for endpoints that document their own effort names.",
1837 "settings.supportedEffortsHint": "Custom levels override protocol defaults. Pick only levels the endpoint documents; unsupported combinations can make the model request fail.",
1838 "settings.defaultEffort": "Default effort",
1839 "settings.defaultEffortAuto": "unset (use protocol/custom default)",
1840 "settings.defaultEffortHint": "Used when /effort is \"auto\" or unset. Leave unset to use the protocol default, or the first custom level when levels are customized.",
1841 "settings.proxyMode": "Proxy mode",
1842 "settings.proxyMode.auto": "auto",
1843 "settings.proxyMode.env": "env",
1844 "settings.proxyMode.custom": "custom",
1845 "settings.proxyMode.off": "off",
1846 "settings.proxyType": "Proxy type",
1847 "settings.proxyServer": "Server",
1848 "settings.proxyPort": "Port",
1849 "settings.proxyUsername": "Username",
1850 "settings.proxyPassword": "Password",
1851 "settings.proxyUrl": "Proxy URL",
1852 "settings.proxyUrlHint": "Optional. When set, proxy_url overrides the structured server and port fields.",
1853 "settings.noProxy": "No proxy",
1854 "settings.saveNetwork": "Save network settings",
1855 "settings.setKey": "set {env} (saved globally)",
1856 "settings.saveKey": "Save key",
1857 "settings.toggleOn": "On",
1858 "settings.toggleOff": "Off",
1859 "settings.botSetup": "Bot entry",
1860 "settings.botSetupHint": "Enable the entry, then connect the chat channels you need.",
1861 "settings.botGateway": "Bot gateway",
1862 "settings.botGatewayHint": "Manage the IM bot gateway master switch and connection status from the desktop app.",
1863 "settings.botBrowserPreviewWarning": "This is a browser preview. It saves mock settings only and does not write local config or start the QQ/IM bot gateway. Configure it in the desktop app or CLI before testing from QQ.",
1864 "settings.botSimpleEyebrow": "Guided setup",
1865 "settings.botSimpleTitle": "Mobile access and chat bots",
1866 "settings.botSimpleHint": "Scan from a phone to control the current workspace. For longer-lived access from chat apps, pick a Bot Channel and configure it.",
1867 "settings.botMobileRemoteEyebrow": "Separate entry",
1868 "settings.botMobileRemoteTitle": "Mobile remote control",
1869 "settings.botMobileRemoteHint": "Scan or copy a link to open the current workspace control entry from a mobile device. This is configured separately from IM bot channels.",
1870 "settings.botMobileRemoteControlApi": "Control link",
1871 "settings.botMobileRemoteDisabled": "Enable it to generate the QR code and link",
1872 "settings.botMobileRemoteEnableFirst": "Enable to generate QR",
1873 "settings.botMobileRemoteReady": "Waiting for phone connection",
1874 "settings.botMobileRemoteWaiting": "Connect by phone scan",
1875 "settings.botMobileRemoteLoopbackNotice": "The control API is still bound to local loopback, so this is for local preview for now. Cross-device relay can reuse this entry later.",
1876 "settings.botMobileRemoteCopyLink": "Copy link",
1877 "settings.botMobileRemoteCopied": "Copied",
1878 "settings.botMobileRemoteCopyFailed": "Copy failed",
1879 "settings.botChannelEntryTitle": "Use Bot Channel",
1880 "settings.botChannelEntryHint": "Connect chat bots for longer mobile sessions.",
1881 "settings.botManageBots": "Bot management",
1882 "settings.botManageBotsHint": "Choose a channel on the left. If it is not configured, scan or add keys; once configured, manage that bot's runtime settings on the right.",
1883 "settings.botBackToOverview": "Back to entry",
1884 "settings.botChannelOpenConfigured": "Configured. You can continue editing settings.",
1885 "settings.botChannelNeedsSetup": "Not configured",
1886 "settings.botChannelTabsLabel": "Bot channels",
1887 "settings.botChannelSetupTitle": "Configure {provider}",
1888 "settings.botChannelSetupHint": "Before setup, only credentials or scan binding are needed. After it succeeds, this becomes the bot's settings page.",
1889 "settings.botSetupStatus": "Bot setup status",
1890 "settings.botSetupStatusConnected": "{online}/{total} online",
1891 "settings.botSetupStatusAccessTrusted": "Trusted list {count}",
1892 "settings.botSetupStatusAccessEveryone": "Everyone allowed",
1893 "settings.botSetupStatusAccessPerBot": "{configured}/{total} bots configured",
1894 "settings.botMode": "Bot settings mode",
1895 "settings.botModeSimple": "Simple",
1896 "settings.botModeAdvanced": "Advanced",
1897 "settings.botShowAdvancedSettings": "Advanced settings",
1898 "settings.botHideAdvancedSettings": "Hide advanced settings",
1899 "settings.botAdvancedSettingsHint": "Lower-frequency controls: routes, queue details, and bot echo filtering.",
1900 "settings.botShowAddBot": "Add channel",
1901 "settings.botStepConnectTitle": "Connect bots",
1902 "settings.botStepConnectHint": "Manual keys for QQ; scan a QR code for Feishu, Lark, and WeChat.",
1903 "settings.botStepConnectEmpty": "Not connected yet",
1904 "settings.botSharedAllowlistHint": "Every channel shares the trusted list and pairing settings from step 2. Edit once and it applies everywhere.",
1905 "settings.botSharedAllowlistGo": "Edit in step 2",
1906 "settings.botGlobalAllowlist": "Legacy global allowlist",
1907 "settings.botGlobalAllowlistHint": "Compatibility for older configs; new bots should set access in their own detail panel.",
1908 "settings.botAccessShowAllPlatforms": "Show all platforms",
1909 "settings.botAccessShowConnectedOnly": "Show connected platforms only",
1910 "settings.botListUsers": "Users",
1911 "settings.botListGroups": "Groups",
1912 "settings.botListApprovers": "Approvers",
1913 "settings.botListAdmins": "Admins",
1914 "settings.botPlatformFeishuLark": "Feishu / Lark",
1915 "settings.botQueueDropLabel": "When the queue is full",
1916 "settings.botQueueDropHint": "How overflow messages are handled once the queue hits its cap.",
1917 "settings.botPairingDetailHint": "The pairing switch lives in step 2 (Who can use it). Tune only the code lifetime and pending cap here.",
1918 "settings.botSimpleAccessTitle": "Who can use it",
1919 "settings.botSimpleAccessTrustedSummary": "Trusted list is active with {count} member or group entries.",
1920 "settings.botSimpleAccessEveryoneSummary": "Everyone can use it right now. Best for short tests only.",
1921 "settings.botAccessTrusted": "Trusted list",
1922 "settings.botAccessTrustedHint": "Only listed users or groups can call the bot.",
1923 "settings.botAccessEveryone": "Everyone",
1924 "settings.botAccessEveryoneHint": "Convenient for quick testing, but not recommended long term.",
1925 "settings.botAccessPairing": "Pair private chats",
1926 "settings.botAccessPairingHint": "Unknown direct messages get a code and wait for local approval.",
1927 "settings.botRoleAccess": "Admins and approvers",
1928 "settings.botRoleAccessHint": "Optional. Leave this empty unless remote approval or management is needed.",
1929 "settings.botQueueModeSimple": "When a new message arrives",
1930 "settings.botQueueModeSimpleHint": "Choose what happens when the bot is already handling a previous message.",
1931 "settings.saveBotSettings": "Save bot settings",
1932 "settings.botEnableBot": "Enable bot",
1933 "settings.botGatewayMasterSwitch": "Master switch",
1934 "settings.botGatewayDisabledHint": "The bot master switch is off. All channels are temporarily unavailable.",
1935 "settings.botGatewayEnabled": "Enable gateway",
1936 "settings.botAdvancedRuntime": "Model and runtime",
1937 "settings.botModel": "Bot model",
1938 "settings.botModelHint": "Leave empty to use the default model.",
1939 "settings.botModelDefault": "Use default model",
1940 "settings.botRuntime": "Runtime limits",
1941 "settings.botRuntimeHint": "Gateway-level limits that control how far each bot task can run.",
1942 "settings.botMaxSteps": "Max steps",
1943 "settings.botDebounceMs": "Debounce ms",
1944 "settings.botQueueCap": "Queue cap",
1945 "settings.botQueueMode.steer": "Steer running turn",
1946 "settings.botQueueMode.followup": "Follow up",
1947 "settings.botQueueMode.collect": "Collect",
1948 "settings.botQueueMode.interrupt": "Interrupt",
1949 "settings.botQueueDrop.summarize": "Summarize overflow",
1950 "settings.botQueueDrop.old": "Drop oldest",
1951 "settings.botQueueDrop.new": "Drop newest",
1952 "settings.botIgnoreSelfMessages": "Ignore bot echoes",
1953 "settings.botIgnoreSelfMessagesHint": "Prevents the gateway from reacting to messages sent by configured bot identities.",
1954 "settings.botSelfUserIds": "Bot self IDs",
1955 "settings.botSelfUserIdsHint": "Optional user/open IDs for each platform, used to filter bot echo messages.",
1956 "settings.botPairing": "Private chat pairing",
1957 "settings.botPairingTTL": "TTL minutes",
1958 "settings.botPairingMaxPending": "Max pending",
1959 "settings.botControlApi": "Local control API",
1960 "settings.botControlApiHint": "Loopback HTTP API for status and controlled outbound sends; requires a Bearer token from the named env var.",
1961 "settings.botControlAddr": "Control address",
1962 "settings.botControlTokenEnv": "Token env",
1963 "settings.botGatewayDefaults": "Gateway runtime settings",
1964 "settings.botGatewayDefaultsHint": "Tune queueing, pairing, and self-message filtering without editing TOML.",
1965 "settings.botRoutes": "Bind chats to projects",
1966 "settings.botRoutesHint": "Pin a group, contact, or thread to a workspace, model, or approval mode.",
1967 "settings.botRoutesEmpty": "No bindings yet. Add one to bind a chat, user, or thread to a project or model.",
1968 "settings.botRouteTitle": "Route {n}",
1969 "settings.botAddRoute": "Add route",
1970 "settings.botRouteConnection": "Bot source",
1971 "settings.botRouteAny": "Any",
1972 "settings.botRoutePlatform": "Platform",
1973 "settings.botRouteChatType": "Chat type",
1974 "settings.botRouteChatType.any": "Any",
1975 "settings.botRouteChatType.dm": "DM",
1976 "settings.botRouteChatType.group": "Group",
1977 "settings.botRouteChatType.guild": "Guild",
1978 "settings.botRouteChatType.direct": "Direct",
1979 "settings.botRouteChatType.thread": "Thread",
1980 "settings.botRouteChatId": "Group/chat ID",
1981 "settings.botRouteUserId": "Contact ID",
1982 "settings.botRouteThreadId": "Thread ID",
1983 "settings.botChannels": "Connect channels",
1984 "settings.botChannelsHint": "Pick a channel; QQ uses manual setup, while Feishu, Lark, and WeChat connect by QR.",
1985 "settings.botQQHint": "QQ official Bot API v2.",
1986 "settings.botFeishu": "Feishu",
1987 "settings.botFeishuHint": "Feishu custom app bot with webhook and websocket modes.",
1988 "settings.botWeixin": "WeChat",
1989 "settings.botWeixinHint": "WeChat iLink bot with a persisted login token.",
1990 "settings.botAppId": "App ID",
1991 "settings.botAppSecret": "App secret",
1992 "settings.botLoginToken": "Login token",
1993 "settings.botVerificationToken": "Verification token",
1994 "settings.botFeishuMode": "Connection mode",
1995 "settings.botFeishuMode.webhook": "Webhook",
1996 "settings.botFeishuMode.websocket": "WebSocket",
1997 "settings.botWebhookPort": "Webhook port",
1998 "settings.botWebhookURL": "Webhook URL",
1999 "settings.botCopyWebhook": "Copy webhook",
2000 "settings.botRequireMention": "Require mention",
2001 "settings.botAccountId": "Account ID",
2002 "settings.botApiBase": "API base",
2003 "settings.botSecretSet": "secret set",
2004 "settings.botSecretMissing": "no secret",
2005 "settings.botSecretEnv": "Secret env",
2006 "settings.botSecretValue": "Secret value",
2007 "settings.botSecretPaste": "Paste secret",
2008 "settings.botSecretReplace": "Replace saved secret",
2009 "settings.botSecretSavedOptional": "Saved; leave blank, or enter a new value to replace it",
2010 "settings.botSandbox": "Sandbox",
2011 "settings.botAdvancedSettings": "Advanced settings",
2012 "settings.botSaveAndEnable": "Save and enable",
2013 "settings.botInstallTitle": "Scan to connect",
2014 "settings.botInstallSubtitle": "Once connected, Reasonix can be used from chat.",
2015 "settings.botInstallPick": "Pick a channel",
2016 "settings.botInstallStarting": "Generating QR…",
2017 "settings.botInstallScanHint": "Scan to authorize. The connection will be saved automatically.",
2018 "settings.botInstallWaiting": "Waiting for authorization.",
2019 "settings.botInstallConnected": "Connection saved.",
2020 "settings.botInstallFailed": "Failed to start connection.",
2021 "settings.botInstallCheck": "Check status",
2022 "settings.botInstallGenerate": "Generate QR",
2023 "settings.botInstallRetry": "Retry",
2024 "settings.botInstallAlreadyConnected": "{provider} is already connected.",
2025 "settings.botInstallTimeLeft": "Expires in {time}",
2026 "settings.botInstallExpired": "The QR code expired. Pick the channel again to generate a new one.",
2027 "settings.botInstallQrAlt": "Bot connection QR code",
2028 "settings.botInstallStepPick": "Pick",
2029 "settings.botInstallStepScan": "Authorize",
2030 "settings.botInstallStepDone": "Done",
2031 "settings.botInstallManualQQ": "Enter the App ID and App secret. The secret is stored only in Reasonix home .env.",
2032 "settings.botInstallQQHint": "Official Bot API, manual setup.",
2033 "settings.botInstallFeishuHint": "Scan to create a Feishu PersonalAgent.",
2034 "settings.botInstallLarkHint": "Scan to create a Lark PersonalAgent.",
2035 "settings.botInstallWeixinHint": "Scan WeChat and save a local token.",
2036 "settings.botConnectedBots": "Connected bots",
2037 "settings.botSelectBotHint": "Select a bot on the left to configure it.",
2038 "settings.botConnectionColumnChannel": "Channel",
2039 "settings.botConnectionColumnName": "Bot",
2040 "settings.botConnectionColumnRemote": "Remote ID",
2041 "settings.botConnectionColumnScope": "Scope",
2042 "settings.botConnectionColumnStatus": "Status",
2043 "settings.botConnectionColumnActions": "Actions",
2044 "settings.botConnectionActions": "Connection actions",
2045 "settings.botConnectionDetail": "IM connection details",
2046 "settings.botConnectionSummary": "Connection summary",
2047 "settings.botRuntimeSettings": "Runtime settings",
2048 "settings.botDangerZone": "Danger zone",
2049 "settings.botAutoSaveHint": "Changes are saved automatically.",
2050 "settings.botScopeGlobal": "Global",
2051 "settings.botScopeProject": "Project",
2052 "settings.botConnectionConnected": "Connected",
2053 "settings.botConnectionConfigured": "Configured",
2054 "settings.botConnectionDisconnected": "Disconnected",
2055 "settings.botManage": "Edit config",
2056 "settings.deleteBot": "Delete bot",
2057 "settings.deleteBotShort": "Delete",
2058 "settings.confirmDeleteBot": "Confirm delete",
2059 "settings.deleteBotHint": "Removes this bot from connected bots; saved secrets are not cleared automatically.",
2060 "settings.botChannelModel": "Model",
2061 "settings.botChannelModelHint": "The model this bot uses when handling messages.",
2062 "settings.botChannelModelAuto": "Use current desktop model",
2063 "settings.botToolApprovalMode": "Tool approval",
2064 "settings.botToolApprovalModeHint": "Controls whether this channel asks before running tools; plan confirmation and ask questions still wait for a reply.",
2065 "settings.botToolApprovalMode.inherit": "Follow bot",
2066 "settings.botToolApprovalMode.ask": "Ask",
2067 "settings.botToolApprovalMode.auto": "Auto",
2068 "settings.botToolApprovalMode.yolo": "YOLO",
2069 "settings.botWorkspaceRoot": "Workspace root",
2070 "settings.botWorkspaceRootHint": "Leave empty to use the directory from bot startup.",
2071 "settings.botWorkspaceRootPlaceholder": "For example /path/to/project",
2072 "settings.botCredential": "Credential",
2073 "settings.botCredentialApp": "App ID: {value}",
2074 "settings.botCredentialAccount": "Account: {value}",
2075 "settings.botCredentialLocalWeixin": "WeChat local login credential",
2076 "settings.botCredentialConfigured": "Platform credential saved",
2077 "settings.botDiagnose": "Check config",
2078 "settings.botTest": "Send test",
2079 "settings.botTestChatId": "conversation id for test",
2080 "settings.botCopyDiagnostic": "Copy diagnostic",
2081 "settings.botSendDiagnostic": "Send diagnostic",
2082 "settings.botDiagnosticCopied": "Diagnostic copied.",
2083 "settings.botDiagnosticCopyFailed": "Failed to copy diagnostic.",
2084 "settings.botDiagnosticReportSent": "Diagnostic report sent.",
2085 "settings.botDiagnosticReportFailed": "Failed to send diagnostic report.",
2086 "settings.botDiagnosticPrivacy": "Only sanitized connection metadata is included.",
2087 "settings.botAccessControl": "Access control",
2088 "settings.botEditAllowlist": "Edit allowlist",
2089 "settings.botAllowlist": "Allowlist",
2090 "settings.botAllowlistEnabled": "Enable allowlist",
2091 "settings.botAllowAll": "Allow everyone",
2092 "settings.botAllowAllWarn": "When enabled, every incoming channel message can invoke the bot.",
2093 "settings.botQQAccessRequired": "Add QQ users/groups in step 2 (Who can use it), or temporarily allow everyone, before enabling QQ Bot.",
2094 "settings.botQQUsers": "QQ users",
2095 "settings.botFeishuUsers": "Feishu users",
2096 "settings.botFeishuGroups": "Feishu groups",
2097 "settings.botFeishuLarkUsers": "Feishu / Lark users",
2098 "settings.botWeixinUsers": "WeChat users",
2099 "settings.botListPlaceholder": "One ID per line, or comma-separated",
2100 "settings.permissions": "Permissions",
2101 "settings.writerMode": "Writer mode",
2102 "settings.modeAsk": "ask (prompt before writers)",
2103 "settings.modeAllow": "allow (auto-run ordinary writers)",
2104 "settings.modeDeny": "deny (block writers)",
2105 "settings.ruleForm": "Rules: ToolName, ToolName(glob), or Bash(command:*). Legacy bare Set-Content, Add-Content, and Out-File rules are also supported. Precedence: deny > ask > allow. Nested execution such as python -c or $(...) still needs exact approval.",
2106 "settings.yolo": "YOLO — skip ordinary tool permission prompts (this session)",
2107 "settings.yoloHint": "YOLO-approves ordinary permission-gated calls (writers, bash). Deny rules and fresh reviews still apply; ask questions and plan approvals still wait for you. Runtime-only — resets on relaunch.",
2108 "settings.addRule": "add {list} rule…",
2109 "settings.sandboxTitle": "Sandbox & workspace",
2110 "settings.sandboxBoundaryHint": "Sandbox write roots limit where approved Bash and file tools can write; they do not auto-approve commands. macOS/Linux can enforce an OS Bash sandbox; Windows Bash runs unconfined.",
2111 "settings.reloadSessionConfig": "Apply manual config changes",
2112 "settings.reloadSessionConfigHint": "Changes made in Settings apply automatically; use this only after manually editing config.toml or reasonix.toml.",
2113 "settings.shellInterpreter": "Shell interpreter",
2114 "settings.shellAuto": "auto (bash first)",
2115 "settings.shellAutoWindows": "auto (bash first; PowerShell on Windows if bash is missing)",
2116 "settings.shellBash": "bash",
2117 "settings.shellPowershell": "PowerShell (Windows PowerShell)",
2118 "settings.shellPwsh": "pwsh (PowerShell 7+)",
2119 "settings.effectiveShell": "Effective shell",
2120 "settings.effectiveShellBash": "bash",
2121 "settings.effectiveShellGitBash": "Git Bash",
2122 "settings.effectiveShellPowershell": "Windows PowerShell",
2123 "settings.effectiveShellPwsh": "pwsh (PowerShell 7+)",
2124 "settings.bashSandbox": "Bash sandbox",
2125 "settings.bashEnforce": "enforce (jail bash; fail closed)",
2126 "settings.bashOff": "off (run unconfined)",
2127 "settings.bashUnavailableWindows": "Windows does not provide an OS-level Bash sandbox. This setting is fixed to off.",
2128 "settings.allowNetwork": "Allow network egress from sandboxed bash",
2129 "settings.workspaceRoot": "Workspace root",
2130 "settings.workspaceDefault": "(default: cwd)",
2131 "settings.effectiveWriteRoots": "Effective write roots",
2132 "settings.effectiveWriteRootsHint": "Expanded for the active workspace. Settings changes apply automatically; use the button above after manually editing config files.",
2133 "settings.noEffectiveWriteRoots": "No active write roots",
2134 "settings.appearance": "Appearance",
2135 "settings.theme": "Color mode",
2136 "settings.themeStyle": "Visual style",
2137 "settings.conversationWidth": "Conversation width",
2138 "settings.conversationWidthStandard": "Standard",
2139 "settings.conversationWidthFull": "Full width",
2140 "settings.style.graphite.zh": "Graphite",
2141 "settings.style.graphite.note": "Crisp",
2142 "settings.style.graphite.desc": "Paper white, graphite text, and orange accents — restrained, editor-like workbench.",
2143 "settings.style.aurora.zh": "Soft Aurora",
2144 "settings.style.aurora.note": "Warm",
2145 "settings.style.aurora.desc": "Misty violet surfaces with aurora blue-green accents, translucent panels, and springy radii.",
2146 "settings.style.slate.zh": "Refined",
2147 "settings.style.slate.note": "Native",
2148 "settings.style.slate.desc": "Cool gray workbench with brand blue and crisp hairlines for dense professional scanning.",
2149 "settings.style.carbon.zh": "Deep",
2150 "settings.style.carbon.note": "Premium",
2151 "settings.style.carbon.desc": "Warm charcoal and linen-gray surfaces with teal accents, richer texture, and long-focus contrast.",
2152 "settings.style.nocturne.zh": "Soft",
2153 "settings.style.nocturne.note": "Calm",
2154 "settings.style.nocturne.desc": "Soft violet night and cloud-light surfaces with generous radii for calmer reading.",
2155 "settings.style.amber.zh": "Amber",
2156 "settings.style.amber.note": "Warm",
2157 "settings.style.amber.desc": "Warm orange accent — bright and friendly (dark variant included).",
2158 "settings.themeAuto": "auto",
2159 "settings.themeLight": "light",
2160 "settings.themeDark": "dark",
2161 "settings.terminalTheme": "Terminal theme",
2162 "settings.terminalThemeAuto": "Follow app",
2163 "settings.terminalThemeLight": "Light",
2164 "settings.terminalThemeDark": "Dark",
2165 "settings.themeCurrent": "Theme: {theme} / {style}",
2166 "settings.themeChanged": "Theme changed to {theme} / {style}",
2167 "settings.themeUnknown": "Unknown theme: {name}",
2168 "settings.themeReset": "Theme pack cleared; using default Graphite path",
2169 "settings.themeLibrary.title": "Theme library",
2170 "settings.themeLibrary.new": "New theme",
2171 "settings.themeLibrary.import": "Import",
2172 "settings.themeLibrary.reset": "Restore default",
2173 "settings.themeLibrary.loading": "Loading themes…",
2174 "settings.themeLibrary.builtin": "Built-in",
2175 "settings.themeLibrary.userTheme": "User theme",
2176 "settings.themeLibrary.enable": "Enable",
2177 "settings.themeLibrary.active": "Active",
2178 "settings.themeLibrary.edit": "Edit",
2179 "settings.themeLibrary.copy": "Duplicate",
2180 "settings.themeLibrary.export": "Export",
2181 "settings.themeLibrary.delete": "Delete",
2182 "settings.themeLibrary.copied": "Copied “{name}”",
2183 "settings.themeLibrary.activated": "Enabled “{name}”",
2184 "settings.themeLibrary.resetDone": "Restored default appearance",
2185 "settings.themeLibrary.confirmDelete": "Delete theme “{name}”? This cannot be undone.",
2186 "settings.themeLibrary.confirmDeleteTitle": "Delete theme",
2187 "settings.themeLibrary.confirmReplaceImport": "A theme with this id already exists. Replace it?",
2188 "settings.themeLibrary.confirmReplaceImportTitle": "Replace existing theme",
2189 "settings.themeLibrary.replaceConfirm": "Replace",
2190 "settings.themeLibrary.imported": "Imported “{name}”",
2191 "settings.themeLibrary.exported": "Theme exported",
2192 "settings.themeLibrary.exportRights": "You are about to export a theme that may include a background image. Confirm you have the right to redistribute any photos, portraits, or third-party artwork.",
2193 "settings.themeLibrary.exportRightsTitle": "Confirm export rights",
2194 "settings.themeLibrary.exportConfirm": "Export",
2195 "settings.themeLibrary.saved": "Saved “{name}”",
2196 "settings.themeLibrary.editorCreate": "Create theme",
2197 "settings.themeLibrary.editorEdit": "Edit theme",
2198 "settings.themeEditor.subtitle": "Customize semantic colors, interface density, and per-scene background images",
2199 "settings.themeEditor.metadata": "Theme details",
2200 "settings.themeEditor.layout": "Base appearance",
2201 "settings.themeEditor.colors": "Theme colors",
2202 "settings.themeEditor.scenes": "Scene images",
2203 "settings.themeEditor.scenesHint": "Home and workspace can use different images. Workspace falls back to the home background when unset.",
2204 "settings.themeEditor.homeBackground": "Home background",
2205 "settings.themeEditor.homeBackgroundHint": "Used on home and idle surfaces, where the image can be shown at full strength.",
2206 "settings.themeEditor.taskBackground": "Workspace background",
2207 "settings.themeEditor.taskBackgroundHint": "Used in tasks, chat, and code surfaces. Very low opacity may make content hard to read.",
2208 "settings.themeEditor.taskBackgroundFallback": "Currently reuses the home image. Upload one to tune it independently.",
2209 "settings.themeEditor.description": "Description",
2210 "settings.themeEditor.license": "License",
2211 "settings.themeEditor.livePreview": "Live preview",
2212 "settings.themeEditor.livePreviewHint": "Changes preview immediately, but are written to the library only after Save or Save & apply.",
2213 "settings.themeEditor.uploadPrompt": "Choose a local PNG, JPEG, or WebP image",
2214 "settings.themeEditor.safeArea": "Interface content area",
2215 "settings.themeEditor.safeAreaHint": "Choose where foreground text and cards appear. Keep this area away from the image subject.",
2216 "settings.themeEditor.opacity": "Image opacity",
2217 "settings.themeEditor.paneOpacity": "Pane opacity",
2218 "settings.themeEditor.density.comfortable": "Comfortable",
2219 "settings.themeEditor.density.compact": "Compact",
2220 "settings.themeEditor.corners.square": "Square",
2221 "settings.themeEditor.corners.soft": "Soft",
2222 "settings.themeEditor.corners.round": "Round",
2223 "settings.themeEditor.safeArea.left": "Left",
2224 "settings.themeEditor.safeArea.center": "Center",
2225 "settings.themeEditor.safeArea.right": "Right",
2226 "settings.themeTokens.key.bg": "Main background",
2227 "settings.themeTokens.key.bgSoft": "Soft background",
2228 "settings.themeTokens.key.bgElev": "Elevated background",
2229 "settings.themeTokens.key.panel": "Panel",
2230 "settings.themeTokens.key.sidebar": "Sidebar",
2231 "settings.themeTokens.key.chat": "Chat area",
2232 "settings.themeTokens.key.workspace": "Workspace",
2233 "settings.themeTokens.key.workspaceFiles": "Files area",
2234 "settings.themeTokens.key.border": "Primary border",
2235 "settings.themeTokens.key.borderSoft": "Soft border",
2236 "settings.themeTokens.key.fg": "Primary text",
2237 "settings.themeTokens.key.fgDim": "Secondary text",
2238 "settings.themeTokens.key.fgFaint": "Muted text",
2239 "settings.themeTokens.key.accent": "Accent",
2240 "settings.themeTokens.key.accentFg": "Accent text",
2241 "settings.themeTokens.key.ok": "Success",
2242 "settings.themeTokens.key.warn": "Warning",
2243 "settings.themeTokens.key.err": "Error",
2244 "settings.themeLibrary.fieldId": "Id / name",
2245 "settings.themeLibrary.fieldName": "Display name",
2246 "settings.themeLibrary.fieldAuthor": "Author",
2247 "settings.themeLibrary.fieldBase": "Base style",
2248 "settings.themeLibrary.fieldRecipes": "Density / corners",
2249 "settings.themeLibrary.fieldTokens": "Semantic colors",
2250 "settings.themeLibrary.fieldBackground": "Background",
2251 "settings.themeLibrary.pickImage": "Choose image",
2252 "settings.themeLibrary.clearImage": "Remove image",
2253 "settings.themeLibrary.homeOpacity": "Home opacity",
2254 "settings.themeLibrary.taskOpacity": "Task opacity",
2255 "settings.themeLibrary.overlayStrength": "Overlay strength",
2256 "settings.themeLibrary.contrastWarn": "Contrast may be below WCAG AA for some pairs. You can still save.",
2257 "settings.themeLibrary.cancel": "Cancel",
2258 "settings.themeLibrary.save": "Save",
2259 "settings.themeLibrary.saveEnable": "Save & enable",
2260 "settings.themeTokens.surfaces": "Surfaces",
2261 "settings.themeTokens.borderText": "Border & text",
2262 "settings.themeTokens.accentStatus": "Accent & status",
2263 "settings.themeLibrary.groupOfficial": "Reasonix official themes",
2264 "settings.themeLibrary.groupBase": "Base styles",
2265 "settings.themeLibrary.groupUser": "My themes",
2266 "settings.themeLibrary.groupPlugin": "Plugin themes",
2267 "settings.themeLibrary.emptyUser": "No custom themes yet — create one or import a pack.",
2268 "settings.themeLibrary.copyFrom": "Customize a copy",
2269 "settings.themes.official.official-rose-dawn.name": "Rose Dawn",
2270 "settings.themes.official.official-rose-dawn.description": "Ivory dawn light and soft roses around an original illustrated muse.",
2271 "settings.themes.official.official-fortune-forge.name": "Fortune Forge",
2272 "settings.themes.official.official-fortune-forge.description": "Warm ivory, vermilion, gold and jade around an original lucky programmer.",
2273 "settings.themes.official.official-crimson-horizon.name": "Crimson Horizon",
2274 "settings.themes.official.official-crimson-horizon.description": "A coral-red future city under a pearl-white sky.",
2275 "settings.themes.official.official-sage-breeze.name": "Sage Breeze",
2276 "settings.themes.official.official-sage-breeze.description": "Cream paper and sage sprigs with an original illustrated reader.",
2277 "settings.themes.official.official-spark-notebook.name": "Spark Notebook",
2278 "settings.themes.official.official-spark-notebook.description": "A notebook grid with teal, yellow and coral stationery and an original anime adult.",
2279 "settings.themes.official.official-violet-starlight.name": "Violet Starlight",
2280 "settings.themes.official.official-violet-starlight.description": "A blue-violet starfield with glowing butterflies and an original celestial muse.",
2281 "settings.themes.official.official-cyan-stage.name": "Cyan Stage",
2282 "settings.themes.official.official-cyan-stage.description": "An airy cyan stage with light rings and an original digital performer.",
2283 "settings.themes.official.official-noir-gold.name": "Noir Gold",
2284 "settings.themes.official.official-noir-gold.description": "A black velvet stage and gold spotlights around an original creative gentleman.",
2285 "settings.themeGallery.title": "Theme gallery",
2286 "settings.themeGallery.subtitle": "Click a theme to preview it across the app; apply to save it",
2287 "settings.themeGallery.browse": "Browse themes",
2288 "settings.themeGallery.createCopy": "Create copy",
2289 "settings.themeGallery.disable": "Disable theme",
2290 "settings.themeGallery.disabled": "Theme disabled; restored base style",
2291 "settings.themeGallery.apply": "Apply theme",
2292 "settings.themeGallery.applied": "Applied “{name}”",
2293 "settings.themeGallery.appliedBase": "Applied base style {name}",
2294 "settings.themeGallery.openPreview": "Immersive preview",
2295 "settings.themeGallery.previewing": "Previewing",
2296 "settings.themeGallery.moreActions": "More actions",
2297 "settings.themeGallery.previewTitle": "Preview theme",
2298 "settings.themeGallery.current": "In use",
2299 "settings.themeGallery.paletteLabel": "Theme colors",
2300 "settings.themeGallery.appearancePreview": "Appearance",
2301 "settings.themeGallery.scenePreview": "Scene",
2302 "settings.themeGallery.scenePreviewHint": "Preview how the theme background appears on the home screen or in the workspace. This does not apply the theme.",
2303 "settings.themeGallery.currentAppearance": "Current appearance",
2304 "settings.themeGallery.baseStyle": "Base style",
2305 "settings.themeGallery.baseLockedByPack": "Managed by the active theme. Disable it to change the base style.",
2306 "settings.themeGallery.tabBase": "Base styles",
2307 "settings.themeGallery.tabAll": "All themes",
2308 "settings.themeGallery.sectionFlagship": "Flagship themes",
2309 "settings.themeGallery.kindOfficial": "Official",
2310 "settings.themeGallery.kindUser": "My theme",
2311 "settings.themeGallery.kindPlugin": "Plugin · {name}",
2312 "settings.themeGallery.kindPluginUnknown": "Plugin",
2313 "settings.themeGallery.kindBase": "Base style",
2314 "settings.themeGallery.selectHint": "Select a theme to see details",
2315 "settings.themeGallery.empty": "No themes in this group",
2316 "settings.themeGallery.back": "Back",
2317 "settings.themeGallery.sceneHome": "Home display",
2318 "settings.themeGallery.sceneTask": "Workspace display",
2319 "settings.themeGallery.saveAndApply": "Save & apply",
2320 "settings.themeGallery.restoreGraphite": "Restore Graphite appearance",
2321 "settings.themeGallery.restoreGraphiteHint": "Only disables the theme pack and restores Graphite base colors. Color mode, fonts, text sizes, and detailed typography are preserved.",
2322 "settings.themeGallery.restoredGraphite": "Restored Graphite appearance; typography settings were preserved",
2323 "settings.themeGallery.deleted": "Deleted “{name}”",
2324 "palette.placeholder": "Search sessions, commands, files…",
2325 "palette.empty": "No matches",
2326 "palette.group.commands": "Commands",
2327 "palette.group.sessions": "Recent sessions",
2328 "palette.cmd.newSession": "New session",
2329 "palette.cmd.trash": "Trash",
2330 "palette.cmd.settings": "Settings",
2331 "palette.cmd.appearance": "Appearance",
2332 "palette.cmd.memory": "Memory",
2333 "palette.cmd.models": "Models",
2334 "palette.cmd.reloadRuntime": "Reload Runtime",
2335 "palette.cmd.usageStats": "Usage statistics",
2336 "palette.group.remote": "Remote SSH",
2337 "palette.group.extensions": "Extensions",
2338 "ext.form.defaultTitle": "Extension request",
2339 "ext.form.submit": "Submit",
2340 "ext.form.required": "Required: {label}",
2341 "ext.card.progress": "Progress",
2342 "ext.action.done": "Done",
2343 "palette.remote.connect": "Connect to {host}",
2344 "palette.remote.open": "Open remote workspace on {host}",
2345 "shortcuts.cheatsheetTitle": "Keyboard shortcuts",
2346 "shortcuts.cheatsheetSummary": "Current bindings reflect your shortcut settings.",
2347 "shortcuts.skipToComposer": "Skip to composer",
2348 "shortcuts.section.global": "Global",
2349 "shortcuts.section.session": "Session",
2350 "shortcuts.section.view": "View",
2351 "shortcuts.section.tools": "Tools",
2352 "shortcuts.section.help": "Help",
2353 "shortcuts.action.newSession": "New session",
2354 "shortcuts.action.commandPalette": "Command palette",
2355 "shortcuts.action.settings": "Open settings",
2356 "shortcuts.action.closeTab": "Close tab",
2357 "shortcuts.action.composerSend": "Send message",
2358 "shortcuts.action.composerNewline": "Insert newline",
2359 "shortcuts.action.composerUndo": "Undo composer edit",
2360 "shortcuts.action.composerRedo": "Redo composer edit",
2361 "shortcuts.action.addSelectionToChat": "Add selection to chat",
2362 "shortcuts.action.shellToggle": "Toggle shell",
2363 "shortcuts.action.terminalToggle": "Toggle integrated terminal",
2364 "shortcuts.action.terminalNewSession": "New terminal session",
2365 "shortcuts.action.sidebarToggle": "Toggle sidebar",
2366 "shortcuts.action.textSizeIncrease": "Increase text size",
2367 "shortcuts.action.textSizeDecrease": "Decrease text size",
2368 "shortcuts.action.textSizeReset": "Reset text size",
2369 "shortcuts.action.yoloToggle": "Toggle YOLO approvals",
2370 "shortcuts.action.showShortcuts": "Show shortcuts",
2371 "shortcuts.desc.newSession": "Create a new session for the current workspace scope.",
2372 "shortcuts.desc.commandPalette": "Search commands and recent sessions.",
2373 "shortcuts.desc.settings": "Open the desktop settings center.",
2374 "shortcuts.desc.closeTab": "Close the active tab.",
2375 "shortcuts.desc.composerSend": "Send the message in the composer.",
2376 "shortcuts.desc.composerNewline": "Insert a line break in the message box.",
2377 "shortcuts.desc.composerUndo": "Undo the latest edit in the message box.",
2378 "shortcuts.desc.composerRedo": "Redo the latest edit. Windows and Linux also accept Ctrl+Y after YOLO is rebound.",
2379 "shortcuts.desc.addSelectionToChat": "Add the selected transcript text to the composer context.",
2380 "shortcuts.desc.shellToggle": "Expand or collapse the shell panel.",
2381 "shortcuts.desc.terminalToggle": "Show or hide the integrated terminal.",
2382 "shortcuts.desc.terminalNewSession": "Open a new integrated terminal session.",
2383 "shortcuts.desc.sidebarToggle": "Show or hide the left sidebar.",
2384 "shortcuts.desc.textSizeIncrease": "Make transcript and UI text larger.",
2385 "shortcuts.desc.textSizeDecrease": "Make transcript and UI text smaller.",
2386 "shortcuts.desc.textSizeReset": "Return text size to the default.",
2387 "shortcuts.desc.yoloToggle": "Toggle YOLO tool-approval mode while composing.",
2388 "shortcuts.desc.showShortcuts": "Open this keyboard shortcuts help sheet.",
2389 "shortcuts.action.topicGoto1": "Go to chat 1",
2390 "shortcuts.action.topicGoto2": "Go to chat 2",
2391 "shortcuts.action.topicGoto3": "Go to chat 3",
2392 "shortcuts.action.topicGoto4": "Go to chat 4",
2393 "shortcuts.action.topicGoto5": "Go to chat 5",
2394 "shortcuts.action.topicGoto6": "Go to chat 6",
2395 "shortcuts.action.topicGoto7": "Go to chat 7",
2396 "shortcuts.action.topicGoto8": "Go to chat 8",
2397 "shortcuts.action.topicGoto9": "Go to chat 9",
2398 "shortcuts.desc.topicGoto": "Jump to the corresponding chat in the sidebar.",
2399 "settings.textSize": "Interface text size",
2400 "settings.textSizeSmall": "Small",
2401 "settings.textSizeDefault": "Default",
2402 "settings.textSizeLarge": "Large",
2403 "settings.textSizeXLarge": "Extra large",
2404 "settings.textSizeXXLarge": "Huge",
2405 "settings.displayZoom": "Display zoom (restart required)",
2406 "settings.displayZoomDecrease": "Decrease display zoom",
2407 "settings.displayZoomIncrease": "Increase display zoom",
2408 "settings.displayZoomReset": "Reset display zoom to 100%",
2409 "settings.fontFamily": "Interface font",
2410 "settings.fontFamilySystem": "System",
2411 "settings.fontFamilyYaHei": "YaHei",
2412 "settings.fontFamilyPingFang": "PingFang",
2413 "settings.fontFamilyNoto": "Noto Sans",
2414 "settings.fontFamilyCustom": "Custom",
2415 "settings.fontFamilyCustomName": "Custom font",
2416 "settings.fontFamilyCustomPlaceholder": "Installed font or font stack, e.g. \"LXGW WenKai\", \"Segoe UI\", sans-serif",
2417 "settings.monoFontFamily": "Monospace font",
2418 "settings.monoFontFamilySystem": "System mono",
2419 "settings.monoFontFamilyCascadia": "Cascadia",
2420 "settings.monoFontFamilyJetBrains": "JetBrains Mono",
2421 "settings.monoFontFamilySFMono": "SF Mono",
2422 "settings.monoFontFamilyCustom": "Custom",
2423 "settings.monoFontFamilyCustomName": "Custom monospace font",
2424 "settings.monoFontFamilyCustomPlaceholder": "Monospace stack, e.g. \"Maple Mono\", \"Cascadia Code\", monospace",
2425 "settings.typography.title": "Detailed typography",
2426 "settings.typography.subtitle": "Set fonts and text sizes independently by area.",
2427 "settings.typography.entrySummary": "Override conversation, composer, code, and supporting text independently.",
2428 "settings.typography.open": "Configure",
2429 "settings.typography.back": "Appearance",
2430 "settings.typography.resetAll": "Reset all",
2431 "settings.typography.regions": "Typography areas",
2432 "settings.typography.globalDefault": "Global default",
2433 "settings.typography.region.interface": "Interface & navigation",
2434 "settings.typography.region.conversation": "Conversation body",
2435 "settings.typography.region.composer": "Composer",
2436 "settings.typography.region.code": "Code & tools",
2437 "settings.typography.region.metadata": "Supporting text",
2438 "settings.typography.desc.interface": "Settings, navigation, and general controls.",
2439 "settings.typography.desc.conversation": "User messages, assistant replies, and Markdown content.",
2440 "settings.typography.desc.composer": "Prompt input and composing controls.",
2441 "settings.typography.desc.code": "Code blocks, inline code, and tool output.",
2442 "settings.typography.desc.metadata": "Timestamps, status, labels, and secondary information.",
2443 "settings.typography.followGlobal": "Follow global",
2444 "settings.typography.customized": "Custom",
2445 "settings.typography.font": "Font",
2446 "settings.typography.font.inherit": "Global default",
2447 "settings.typography.customFont": "Custom font",
2448 "settings.typography.size": "Text size",
2449 "settings.typography.decrease": "Decrease text size",
2450 "settings.typography.increase": "Increase text size",
2451 "settings.typography.advanced": "Line height & weight",
2452 "settings.typography.advancedSummary": "Controlled by the theme",
2453 "settings.typography.advancedNote": "Line height and font weight continue to follow the active theme for consistent rhythm and hierarchy.",
2454 "settings.typography.resetRegion": "Reset this area",
2455 "settings.typography.applied": "Applied",
2456 "settings.typography.undo": "Undo",
2457 "settings.typography.preview": "Live preview",
2458 "settings.typography.preview.body": "Body",
2459 "settings.typography.preview.reasoning": "Reasoning",
2460 "settings.typography.preview.tools": "Tools",
2461 "settings.typography.previewTitle": "A clear hierarchy for focused work",
2462 "settings.typography.previewQuestion": "Briefly explain the main characteristics of graphite.",
2463 "settings.typography.previewBody": "Independent typography lets every area stay readable without changing the rest of the interface.",
2464 "settings.typography.previewSources": "Web search · 3 results · 1 citation",
2465 "settings.typography.previewMixed": "Reasonix · 中文排版 · 0123456789",
2466 "settings.typography.previewReasoning": "First understand the request, then keep the response precise and easy to scan.",
2467 "settings.typography.previewTool": "$ pnpm test\n✓ typography preferences applied",
2468 "settings.pageDesc.general": "Language, desktop behavior, and session defaults.",
2469 "settings.pageDesc.models": "Default model, planner model, runtime limits, and provider overview.",
2470 "settings.pageDesc.providers": "Manage model providers, API endpoints, keys, and available models.",
2471 "settings.pageDesc.bots": "Configure QQ, Feishu, Lark, and WeChat bot channels, including each bot's model and runtime parameters.",
2472 "settings.pageDesc.mcp": "Manage MCP server connections and tool discovery.",
2473 "settings.pageDesc.skills": "Browse, enable, and manage agent skills and skill sources.",
2474 "settings.pageDesc.plugins": "Install and manage plugin packages that can provide skills, hooks, and MCP servers.",
2475 "settings.pageDesc.memory": "Manage preferences, project conventions, and instruction files Reasonix keeps referencing.",
2476 "settings.pageDesc.hooks": "Configure shell hooks around turns, tool calls, compaction, and session lifecycle.",
2477 "settings.pageDesc.shortcuts": "Customize keyboard shortcuts and keep the help sheet in sync.",
2478 "settings.pageDesc.network": "Proxy and network configuration.",
2479 "settings.pageDesc.permissions": "Writer mode and fine-grained tool permission rules.",
2480 "settings.pageDesc.sandbox": "Bash sandbox, network egress, and workspace root.",
2481 "settings.pageDesc.appearance": "Theme packs, color mode, base style, text size, and fonts.",
2482 "settings.pageDesc.updates": "Check for software updates and view version info.",
2483 "settings.modelUsage": "Model usage",
2484 "settings.modelUnavailable": "{ref} is not available. Pick a configured model or add provider access.",
2485 "settings.modelNeedsKey": "{provider} needs an API key before this model can run.",
2486 "settings.errorUnknown": "Operation failed.",
2487 "settings.errorUnknownModel": "Unknown model {model}.",
2488 "settings.errorModelProviderMissing": "Model {model} is unavailable because provider {provider} is not added.",
2489 "settings.errorModelProviderNoKey": "Model {model} is unavailable because provider {provider} has no API key.",
2490 "settings.errorRemoveAccessBusy": "Stop active work using {provider} before removing provider access.",
2491 "settings.errorDeleteProviderBusy": "Stop active work using {provider} before deleting the provider.",
2492 "settings.errorSaveBeforeRemoveAccess": "Could not save the current session before removing provider access: {err}",
2493 "settings.errorSaveBeforeDeleteProvider": "Could not save the current session before deleting the provider: {err}",
2494 "settings.errorRemoveProviderNoFallback": "Provider {provider} is used by open tabs, and no other configured provider is available.",
2495 "settings.customProviders": "Custom providers",
2496 "settings.customProvidersHint": "OpenAI-compatible or proxy providers you add yourself. These can be edited, deleted, and updated with fetched model lists.",
2497 "settings.customProvidersEmpty": "No custom providers yet. Prefer the built-in access above for common services.",
2498 "settings.providerAccessEmptyHint": "Use Recommended preset to quickly add common providers, usually with only an API key. Use Custom provider for OpenAI-compatible or Anthropic-compatible endpoints.",
2499 "settings.builtinProviderBadge": "built-in",
2500 "settings.customProviderBadge": "custom",
2501 "settings.configureProvider": "Configure",
2502 "settings.configureProfile": "Configure",
2503 "settings.noModelsConfigured": "No models configured",
2504 "settings.providerDesc.deepseek": "DeepSeek official OpenAI-compatible access",
2505 "settings.plannerNoneHint": "Use the default model for both planning and execution.",
2506 "settings.plannerNoneHintShort": "single-model mode",
2507 "settings.searchModels": "Search models...",
2508 "settings.noMatchingModels": "No matching models",
2509 "settings.addProvider.chooseTitle": "Add provider",
2510 "settings.addProvider.chooseHint": "Choose a recommended preset, or add a custom provider manually.",
2511 "settings.addProvider.officialChoice": "Recommended preset",
2512 "settings.addProvider.officialChoiceHint": "Choose DeepSeek or curated custom-provider presets.",
2513 "settings.addProvider.customChoice": "Custom provider",
2514 "settings.addProvider.customChoiceHint": "Configure base_url, models, key env, and related parameters manually.",
2515 "settings.addProvider.officialTitle": "Add official provider",
2516 "settings.addProvider.officialHint": "Recommended presets fill endpoints, models, vision, and reasoning defaults; usually only the key is needed.",
2517 "settings.addProvider.customTitle": "Add custom provider",
2518 "settings.addProvider.customHint": "Use this for proxies, aggregators, or other OpenAI-compatible services.",
2519 "settings.addProvider.official.deepseek": "DeepSeek Official",
2520 "settings.addProvider.official.deepseekDesc": "Official API key access with DeepSeek V4 Flash / Pro.",
2521 "settings.addProvider.preset.deepseekResponsesDesc": "DeepSeek official stateless Responses API for Flash with server-side web search enabled; search may add charges.",
2522 "settings.addProvider.preset.deepseekAnthropicDesc": "DeepSeek official Anthropic-compatible endpoint for Flash and Pro with server-side web search enabled; search may add charges.",
2523 "settings.addProvider.preset.longcatOpenAIDesc": "LongCat Platform OpenAI-compatible endpoint with LongCat-2.0 default.",
2524 "settings.addProvider.preset.longcatAnthropicDesc": "LongCat Platform Anthropic-compatible Messages endpoint using Bearer auth.",
2525 "settings.addProvider.preset.tokenRhythmLabel": "Token Rhythm",
2526 "settings.addProvider.preset.tokenRhythmDesc": "Token Rhythm multi-model gateway using its OpenAI-compatible API.",
2527 "settings.addProvider.preset.kimiCnDesc": "Kimi China API via Moonshot CN endpoint with K2 vision models.",
2528 "settings.addProvider.preset.kimiGlobalDesc": "Kimi international API via Moonshot global endpoint with K2 vision models.",
2529 "settings.addProvider.preset.kimiCodingPlanDesc": "Kimi Coding Plan via the dedicated Anthropic-compatible endpoint; not a CN/Global variant.",
2530 "settings.addProvider.preset.mimoApiDesc": "Xiaomi MiMo direct API for v2.5 pay-as-you-go models.",
2531 "settings.addProvider.preset.mimoAnthropicDesc": "Xiaomi MiMo direct Anthropic-compatible endpoint with MiMo v2.5 models.",
2532 "settings.addProvider.preset.mimoTokenPlanCnDesc": "Xiaomi MiMo token-plan China endpoint.",
2533 "settings.addProvider.preset.mimoTokenPlanCnAnthropicDesc": "Xiaomi MiMo token-plan China Anthropic-compatible endpoint.",
2534 "settings.addProvider.preset.mimoTokenPlanSgpDesc": "Xiaomi MiMo token-plan Singapore endpoint.",
2535 "settings.addProvider.preset.mimoTokenPlanSgpAnthropicDesc": "Xiaomi MiMo token-plan Singapore Anthropic-compatible endpoint.",
2536 "settings.addProvider.preset.mimoTokenPlanAmsDesc": "Xiaomi MiMo token-plan Amsterdam endpoint.",
2537 "settings.addProvider.preset.mimoTokenPlanAmsAnthropicDesc": "Xiaomi MiMo token-plan Amsterdam Anthropic-compatible endpoint.",
2538 "settings.addProvider.preset.minimaxCnApiDesc": "MiniMax China OpenAI-compatible M-series API endpoint.",
2539 "settings.addProvider.preset.minimaxGlobalApiDesc": "MiniMax international OpenAI-compatible M-series API endpoint.",
2540 "settings.addProvider.preset.minimaxCnAnthropicDesc": "MiniMax China Anthropic-compatible M-series endpoint.",
2541 "settings.addProvider.preset.minimaxGlobalAnthropicDesc": "MiniMax international Anthropic-compatible endpoint using Bearer auth.",
2542 "settings.addProvider.preset.glmCnDesc": "Zhipu GLM China API with GLM thinking controls.",
2543 "settings.addProvider.preset.zaiGlobalDesc": "Z.AI international GLM API.",
2544 "settings.addProvider.preset.glmCodingPlanCnDesc": "Zhipu GLM China coding-plan endpoint with GLM-5.2 default.",
2545 "settings.addProvider.preset.glmCodingPlanCnAnthropicDesc": "Zhipu GLM China Anthropic-compatible coding-plan endpoint with GLM-5.2 default.",
2546 "settings.addProvider.preset.zaiCodingPlanGlobalDesc": "Z.AI international coding-plan endpoint with GLM-5.2 default.",
2547 "settings.addProvider.preset.zaiCodingPlanGlobalAnthropicDesc": "Z.AI international Anthropic-compatible coding-plan endpoint with GLM-5.2 default.",
2548 "settings.addProvider.preset.opencodeGoDesc": "OpenCode Go relay with native Kimi K3 and mixed-model capability overrides.",
2549 "settings.addProvider.preset.opencodeGoAnthropicDesc": "OpenCode Go Anthropic route for Qwen and MiniMax models.",
2550 "settings.addProvider.preset.opencodeZenAnthropicDesc": "OpenCode Zen Anthropic route for Claude and Qwen models.",
2551 "settings.addProvider.preset.qwenCnDesc": "Qwen/DashScope China standard API endpoint.",
2552 "settings.addProvider.preset.qwenGlobalDesc": "Qwen/DashScope international standard API endpoint.",
2553 "settings.addProvider.preset.qwenCodingPlanCnDesc": "Qwen Coding Plan China OpenAI-compatible endpoint with qwen3.7-plus default.",
2554 "settings.addProvider.preset.qwenCodingPlanCnAnthropicDesc": "Qwen Coding Plan China Anthropic-compatible endpoint with qwen3.7-plus default.",
2555 "settings.addProvider.preset.qwenCodingPlanGlobalDesc": "Qwen Coding Plan international OpenAI-compatible endpoint with qwen3.7-plus default.",
2556 "settings.addProvider.preset.qwenCodingPlanGlobalAnthropicDesc": "Qwen Coding Plan international Anthropic-compatible endpoint with qwen3.7-plus default.",
2557 "settings.addProvider.preset.stepfunDesc": "StepFun coding-plan OpenAI-compatible endpoint with step-3.7-flash default.",
2558 "settings.addProvider.preset.stepfunAnthropicDesc": "StepFun coding-plan Anthropic-compatible endpoint with step-3.7-flash default.",
2559 "settings.addProvider.preset.novitaDesc": "NovitaAI multi-model gateway with Kimi, MiniMax, GLM, DeepSeek, and Qwen.",
2560 "settings.addProvider.preset.gmiDesc": "GMI Cloud direct multi-model gateway with GLM, DeepSeek, Kimi, Gemini, Claude, and GPT.",
2561 "settings.addProvider.preset.vercelAiGatewayDesc": "Vercel AI Gateway through Anthropic-compatible Messages API.",
2562 "settings.addProvider.preset.huggingfaceDesc": "HuggingFace Inference Router with Qwen and DeepSeek defaults.",
2563 "settings.addProvider.preset.nvidiaDesc": "NVIDIA NIM accelerated inference endpoint with Nemotron defaults.",
2564 "settings.addProvider.preset.kilocodeDesc": "Kilo Code gateway with kilo/auto routing defaults.",
2565 "settings.addProvider.preset.ollamaCloudDesc": "Hosted Ollama Cloud endpoint with none-to-max reasoning effort.",
2566 "settings.addProvider.addedBadge": "Added",
2567 "settings.addProvider.modifiedBadge": "Modified",
2568 "settings.addProvider.nameConflictBadge": "Name taken",
2569 "settings.addProvider.similarExistingBadge": "Similar setup",
2570 "settings.addProvider.confirm": "Add provider",
2571 "settings.addProvider.alreadyAddedAction": "Already added",
2572 "settings.addProvider.nameConflictAction": "Resolve name first",
2573 "settings.addProvider.viewPresetProvider": "View config",
2574 "settings.addProvider.viewConflictProvider": "View same-name config",
2575 "settings.addProvider.resetPreset": "Reset to preset",
2576 "settings.addProvider.confirmResetPreset": "Confirm reset",
2577 "settings.customProviderName": "Custom provider name",
2578 "settings.customProviderNamePlaceholder": "e.g. my-proxy",
2579 "settings.providerNamePlaceholder": "Provider name (e.g. deepseek-proxy)",
2580 "settings.providerProtocol": "Connection protocol",
2581 "settings.providerProtocolOpenAI": "OpenAI-compatible",
2582 "settings.providerProtocolOpenAIHint": "For proxies, aggregators, and self-hosted services compatible with the OpenAI API.",
2583 "settings.providerProtocolAnthropic": "Anthropic-compatible",
2584 "settings.providerProtocolAnthropicHint": "For Claude-style Messages API services such as some coding-plan endpoints.",
2585 "settings.providerBaseUrlLabel": "API address",
2586 "settings.providerChatUrlLabel": "Chat request URL",
2587 "settings.providerChatUrlPlaceholder": "e.g. https://api.openai.com/v1/chat/completions",
2588 "settings.providerUseFullChatUrl": "Full URL",
2589 "settings.providerRequestPreview": "Request URL: {url}",
2590 "settings.providerRequestPreviewEmpty": "Enter an API address to preview the request URL.",
2591 "settings.providerApiKeyEnvHint": "Generated from the provider name by default; change it only when you need a fixed env var name.",
2592 "settings.providerKey": "Key",
2593 "settings.providerKeyOptional": "Key",
2594 "settings.providerKeyPlaceholder": "Enter API key (saved globally)",
2595 "settings.testFetchModels": "Test and fetch models",
2596 "settings.testFetchModelsHint": "Uses the API address and key above to verify the connection and fill the model list.",
2597 "settings.manualModels": "Model list",
2598 "settings.manualModelsHint": "If the endpoint cannot list models, enter model names manually; mark image-capable models below.",
2599 "settings.visionModels": "Image-capable models",
2600 "settings.visionModelsHint": "Subset of enabled models that accept image input, separated by commas.",
2601 "settings.providerAdvancedSettings": "Compatibility settings (usually leave unchanged)",
2602 "settings.providerAdvancedExpandHint": "Click to open details",
2603 "settings.providerAdvancedCollapseHint": "Click to collapse",
2604 "settings.providerHeaders": "Extra request headers (optional)",
2605 "settings.providerHeadersPlaceholder": "HTTP-Referer: https://example.com\nX-Title: Reasonix",
2606 "settings.providerHeadersHint": "For gateways such as OpenRouter that require site headers. Use one Header: value per line; the API key still belongs in the key field above.",
2607 "settings.providerExtraBody": "Extra request body (optional)",
2608 "settings.providerExtraBodyPlaceholder": "{\n \"enable_thinking\": true\n}",
2609 "settings.providerExtraBodyHint": "Top-level JSON fields merged into the chat request body. Core fields such as model, messages, tools, stream, and thinking stay controlled by Reasonix.",
2610 "settings.providerExtraBodyError": "Enter a JSON object without null values, for example { \"enable_thinking\": true }.",
2611 "settings.providerExtraBodyNull": "{path} cannot contain null.",
2612 "settings.providerExtraBodyObjectRequired": "Extra body must be a JSON object.",
2613 "settings.providerAuthHeader": "Use Authorization: Bearer for this key",
2614 "settings.providerAuthHeaderHint": "For Anthropic-compatible gateways such as MiniMax Global or Vercel AI Gateway that do not use x-api-key.",
2615 "settings.fetchingModels": "Refreshing…",
2616 "settings.fetchModelsSuccess": "Fetched {n} models",
2617 "settings.fetchModelsManualFallbackAuth": "The model discovery endpoint rejected the key or permission. Check the API key; if this service does not expose model discovery, enter model IDs manually below.",
2618 "settings.fetchModelsManualFallbackUnsupported": "This service may not support automatic model discovery. Enter model IDs manually below.",
2619 "settings.fetchModelsManualFallbackNetwork": "Could not reach the model discovery endpoint. Check the API address or proxy; if you know the model IDs, enter them manually below.",
2620 "settings.fetchModelsManualFallbackDecode": "The model discovery endpoint returned an unknown format. Enter model IDs manually below.",
2621 "settings.fetchModelsManualFallbackEmpty": "No models were discovered automatically. Enter model IDs manually below.",
2622 "settings.fetchModelsManualFallbackGeneric": "Could not fetch models automatically: {err}. Enter model IDs manually below.",
2623 "settings.fetchModelsUpdatedForProvider": "Updated available models for {provider}, {n} total",
2624 "settings.fetchModelsReadyForProvider": "Found {n} models for {provider}. Review and save the enabled list.",
2625 "settings.enabledModelsSavedForProvider": "Saved {n} enabled models for {provider}",
2626 "settings.fetchModelsEmpty": "No available models were returned",
2627 "settings.fetchModelsEmptyForProvider": "{provider} did not return any available models",
2628 "settings.fetchModelsFailedForProvider": "Failed to refresh {provider}: {err}",
2629 "settings.fetchModelsAfterKeyFailed": "Key saved, but available models could not be refreshed automatically: {err}",
2630 "settings.fetchModelsAfterKeyFailedForProvider": "Key saved, but available models for {provider} could not be refreshed: {err}",
2631 "settings.newProviderDraftName": "new provider",
2632 "settings.reasoningProtocol": "Model capability mode",
2633 "settings.reasoningProtocol.auto": "Auto-detect (recommended)",
2634 "settings.reasoningProtocol.deepseek": "DeepSeek thinking (thinking + depth)",
2635 "settings.reasoningProtocol.glm": "GLM thinking (enabled / disabled)",
2636 "settings.reasoningProtocol.openai": "OpenAI reasoning (reasoning_effort)",
2637 "settings.reasoningProtocol.none": "Plain chat (no reasoning fields)",
2638 "settings.reasoningProtocolHint": "Auto-detect is best for most gateways. Switch only when a proxy is incompatible or the model documentation requires a specific reasoning shape.",
2639 "settings.thinkingMode": "Thinking override",
2640 "settings.thinkingMode.auto": "Auto (provider default)",
2641 "settings.thinkingMode.enabled": "Enabled",
2642 "settings.thinkingMode.disabled": "Disabled",
2643 "settings.thinkingMode.adaptive": "Adaptive (self-adjusting)",
2644 "settings.thinkingModeHint": "Provider-specific override. Use enabled/disabled for compatible gateways, adaptive only for providers that document it.",
2645 "settings.updateKey": "update {env} (saved globally)",
2646 "settings.updateKeyAction": "Update key",
2647 "settings.keyStatus": "Key",
2648 "settings.configuredKey": "Saved {env}",
2649 "settings.notConfiguredKey": "No key saved for {env}",
2650 "settings.keySource": "Source: {source}",
2651 "settings.moreModels": "{n} more",
2652 "settings.permissionsModeHint": "Controls the fallback for ordinary writer actions. Deny/ask rules still win, and nested or indirect shell execution needs exact approval.",
2653 "settings.modeAskShort": "Prompt before writers",
2654 "settings.modeAllowShort": "Auto-run writers",
2655 "settings.modeDenyShort": "Block writers",
2656 "settings.permissionRules": "Fine-grained rules",
2657 "settings.ruleDeny": "Block",
2658 "settings.ruleAsk": "Ask",
2659 "settings.ruleAllow": "Allow",
2660 "settings.ruleAllowWrite": "Allowed write paths",
2661 "settings.ruleDenyHint": "Always block matching tools or paths.",
2662 "settings.ruleAskHint": "Ask before running matches.",
2663 "settings.ruleAllowHint": "Automatically allow matches.",
2664 "settings.hooks": "Hooks",
2665 "settings.hooksScope": "Hook location",
2666 "settings.hooksScopeSection": "Configuration scope",
2667 "settings.hooksScopeField": "Scope",
2668 "settings.hooksScopeHint": "Hooks run shell commands. Global and project hooks load automatically from their configured locations.",
2669 "settings.hooksGlobal": "Global",
2670 "settings.hooksProject": "Project",
2671 "settings.hooksPath": "Settings file",
2672 "settings.hooksPathGlobalHint": "This scope is saved to your global settings file.",
2673 "settings.hooksPathProjectHint": "Project hooks are saved to .reasonix/settings.json in the current workspace.",
2674 "settings.hooksPathCopy": "Copy path",
2675 "settings.hooksPathCopied": "Settings file path copied.",
2676 "settings.hooksPathUnavailable": "No project settings file is available",
2677 "settings.hooksProjectRootUnavailable": "No active project workspace",
2678 "settings.hooksGlobalHint": "Saved globally. Restart Reasonix to load new hooks.",
2679 "settings.hooksProjectHint": "Saved in this workspace. Restart Reasonix to load new hooks.",
2680 "settings.hooksAdd": "Add hook",
2681 "settings.hooksEmpty": "No hooks configured for this location.",
2682 "settings.hooksJsonTitle": "JSON config",
2683 "settings.hooksJsonHint": "Edit the {\"hooks\": ...} block from settings.json directly. Arrays with event fields are also accepted; saving validates and formats the JSON.",
2684 "settings.hooksJsonCopy": "Copy JSON",
2685 "settings.hooksJsonPaste": "Paste JSON",
2686 "settings.hooksJsonApply": "Format JSON",
2687 "settings.hooksJsonCopied": "JSON copied.",
2688 "settings.hooksJsonApplied": "JSON validated. Save to persist it.",
2689 "settings.hooksJsonFormatted": "JSON formatted. Save to persist it.",
2690 "settings.hooksJsonInvalid": "Invalid JSON: {error}",
2691 "settings.hooksJsonExpectedObjectArray": "Expected an object or array.",
2692 "settings.hooksJsonItemObject": "Hook item must be an object.",
2693 "settings.hooksJsonUnknownEvent": "Unknown hook event {event}.",
2694 "settings.hooksJsonEventItemObject": "Hook {event} item must be an object.",
2695 "settings.hooksJsonClipboardEmpty": "Clipboard is empty",
2696 "settings.hooksJsonClipboardUnavailable": "Clipboard is unavailable; copy the textarea manually.",
2697 "settings.hooksJsonPasteFailed": "Paste failed: {error}",
2698 "settings.hookItem": "Hook {n}",
2699 "settings.hookEvent": "Event",
2700 "settings.hookMatch": "Tool match",
2701 "settings.hookMatchHint": "Only PreToolUse and PostToolUse use this anchored regex. Use .*file to match read_file.",
2702 "settings.hookDescription": "Description",
2703 "settings.hookCommand": "Command",
2704 "settings.hookTimeout": "Timeout",
2705 "settings.hookTimeoutDefault": "default",
2706 "settings.hookCwd": "Working directory",
2707 "settings.hookCwdDefault": "session cwd",
2708 "settings.hookBlockingHint": "Can block the turn or tool when the command exits 2.",
2709 "settings.hookNonBlockingHint": "Runs as an observer; failures are surfaced as warnings.",
2710 "settings.hookPostLLMHint": "Can replace displayed reasoning with non-empty stdout.",
2711 "settings.hookPreCompactHint": "Stdout is added as guidance for the compaction summary.",
2712 "settings.bashEnforceShort": "Jailed bash",
2713 "settings.bashOffShort": "Unconfined",
2714 "settings.language": "Language",
2715 "settings.langAuto": "Auto (system)",
2716 "settings.currency": "Pricing currency",
2717 "settings.currencyAuto": "Auto (language)",
2718 "settings.config": "config: {path}",
2719 "settings.configShadowed": "overridden by workspace config: {path} (changes here may not take effect)",
2720 "settings.generativeMusic": "Generative background music",
2721 "settings.generativeMusicHint": "Ambient music that loops during AI generation",
2722 "settings.generativeMusicPreset": "Sound preset",
2723 "settings.generativeMusic.presets.classic": "Classic (Triangle)",
2724 "settings.generativeMusic.presets.ethereal": "Ethereal (Sine) ★",
2725 "settings.generativeMusic.off": "Off",
2726 "settings.generativeMusic.presets.digital": "Digital (Square)",
2727 "settings.generativeMusic.presets.retro": "Retro (Sawtooth)",
2728 "settings.generativeMusicPreview": "Preview",
2729
2730 // todo bar
2731 "todo.title": "To-dos",
2732 "todo.dismiss": "Dismiss the task list",
2733 "todo.pending": "Pending",
2734 "todo.inProgress": "In progress",
2735 "todo.completed": "Completed",
2736
2737 // slash menu tags
2738 "slash.project": "project",
2739 "slash.plugin": "plugin · {name}",
2740 "slash.mcp": "mcp",
2741 "slash.skill": "skill",
2742 "slash.subagent": "subagent",
2743 "slash.startOnly": "Only available at the start of a message",
2744 "slash.group.actions": "Quick actions",
2745 "slash.group.management": "More commands",
2746 "slash.group.subagents": "Subagents",
2747 "slash.group.skills": "Skills & project commands",
2748 "slash.group.integrations": "Integrations",
2749
2750 // assistant message
2751 "msg.thinking": "thinking",
2752 "msg.thinkingRunning": "thinking…",
2753 "msg.thinkingDone": "done",
2754 "msg.thinkingDuration": "lasted {s}s",
2755 "msg.memoryCitationsCount": "{n} memory references",
2756 "msg.memoryCompilerCitationsCount": "{n} Memory v5 compiler references",
2757 "msg.memoryCompilerApplied": "Memory v5 compiler applied to this message",
2758 "msg.memoryCitationLine": "line {line}",
2759 "msg.memoryCitationLineRange": "lines {start}-{end}",
2760 "msg.copy": "Copy",
2761 "msg.editSend": "Send",
2762 "msg.attachments": "Attachments",
2763 "msg.fromIm": "From {source}",
2764 "msg.imSender": "Sender {id}",
2765 "msg.sendFailed": "Send failed — message was not delivered",
2766 "msg.fileAttachment": "File",
2767 "msg.imageAttachment": "Image",
2768 "msg.workspaceReference": "Workspace reference",
2769 "msg.folderReference": "Folder · Workspace reference",
2770 "msg.pastedExpandTooltip": "Expand pasted text",
2771 "msg.pastedCollapseTooltip": "Collapse pasted text",
2772 "turnActions.summary": "Summary",
2773 "turnActions.rewind": "Rewind",
2774 "transcript.jumpToBottom": "Jump to bottom",
2775 "transcript.showEarlierHistory": "Show {n} earlier turns",
2776 "transcript.toolCount": "{n} tools",
2777 "transcript.thoughtCount": "{n} thoughts",
2778 "transcript.steer": "Mid-turn steer",
2779 "transcript.working": "Working",
2780 "transcript.workingDuration": "Working {duration}",
2781 "transcript.worked": "Worked",
2782 "transcript.workedDuration": "Worked {duration}",
2783 "transcript.durationSeconds": "{s}s",
2784 "transcript.durationMinutes": "{m}m",
2785 "transcript.durationMinutesSeconds": "{m}m {s}s",
2786 "transcript.processed": "Processed",
2787 "transcript.processedDuration": "Processed {s}s",
2788 "notice.info": "Notice",
2789 "notice.warning": "Warning",
2790 "notice.details": "Details",
2791 "notice.decisionReceiptTitle": "Decision recorded",
2792 "notice.decisionReceiptTool": "Tool approval",
2793 "notice.decisionReceiptAsk": "Question answered",
2794 "notice.decisionReceiptPlan": "Plan decision",
2795 "notice.decisionReceiptRecovery": "Recovery decision",
2796 "notice.decisionAllowOnce": "Allowed once",
2797 "notice.decisionAllowSession": "Allowed for this session",
2798 "notice.decisionAllowPersistent": "Allowed persistently",
2799 "notice.decisionDeny": "Denied",
2800 "notice.decisionStartExecution": "Started execution",
2801 "notice.decisionRevisePlan": "Requested plan revision",
2802 "notice.decisionExitPlan": "Exited without execution",
2803 "notice.decisionRecoveryContinue": "Continued",
2804 "notice.decisionRecoveryContinueTask": "Continued for this task",
2805 "notice.decisionRecoveryRevise": "Requested an adjustment",
2806 "notice.decisionAnswered": "Answered",
2807 "notice.finalReadiness": "Task status needs one more check; asking the assistant to finish or explain what is blocking it.",
2808 "notice.deliveryIncompleteTitle": "Delivery checks are not complete",
2809 "notice.deliveryIncompleteBody": "The response was generated, but verification and review still need to be completed.",
2810 "notice.recoveryPausedTitle": "Automatic retries paused",
2811 "notice.recoveryPausedBody": "Reasonix stopped repeated attempts and kept completed work. Send “Continue” to start a fresh attempt, or add instructions to change direction.",
2812 "notice.deliveryIncompleteContinue": "Continue checks",
2813 "notice.deliveryIncompleteContinuePrompt": "Continue and complete the remaining delivery checks.",
2814 "notice.deliveryIncompleteMissing": "Still needed: {items}",
2815 "notice.deliveryRequirementSeparator": ", ",
2816 "notice.deliveryRequirementProjectCheck": "project checks",
2817 "notice.deliveryRequirementTodo": "unfinished task items",
2818 "notice.deliveryRequirementCriteria": "acceptance criteria",
2819 "notice.deliveryRequirementVerification": "verification",
2820 "notice.deliveryRequirementReview": "change review",
2821 "notice.deliveryRequirementSignoff": "step sign-off",
2822 "notice.deliveryRequirementAction": "host-observable work",
2823 "notice.deliveryRequirementMutation": "the requested change",
2824 "notice.deliveryRequirementCapability": "required capability checks",
2825 "notice.emptyFinal": "No visible answer was produced; asking the assistant to respond again.",
2826 "notice.executorHandoff": "The assistant answered before taking action; asking it to use the required tools.",
2827 "notice.toolBudget": "Tool round limit reached; asking the assistant to summarize progress.",
2828 "notice.loopGuard": "The assistant is not making progress; asking it to reassess the current step.",
2829 "notice.workspaceLease": "Another Delivery session is writing to this workspace; this session will continue automatically when it is safe.",
2830 "notice.cancelledTurnDisplay": "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.",
2831 "notice.unappliedSteer": "Guidance was not applied because the turn ended before it could be processed. Send it again if it is still needed:\n{guidance}",
2832 "notice.contextLarge": "Context is getting large; preserving cache until cleanup is needed.",
2833 "notice.contextCleanupSkipped": "Context cleanup skipped for now.",
2834 "notice.contextCleanupPaused": "Automatic context cleanup paused because the context window is too small.",
2835 "notice.compactionNoSummary": "Context was compacted without a generated summary.",
2836 "notice.goalNotReady": "Goal is not ready to complete yet; continuing the remaining work.",
2837 "notice.goalUnfinished": "Goal still has unfinished task state; continuing the remaining work.",
2838 "notice.autoresearchStatusFailed": "AutoResearch status update failed.",
2839 "notice.autoresearchBlocked": "AutoResearch task marked blocked.",
2840 "notice.backgroundJobFailed": "Background {kind} needs attention.",
2841 "notice.jobArtifactMigrationFailed": "Job artifact migration failed.",
2842 "notice.jobTeardownTimeout": "Background job teardown timed out.",
2843 "notice.planModeToolSettingsIgnored": "Some plan-mode tool settings were ignored.",
2844 "notice.planModeCommandSettingsIgnored": "Some plan-mode command settings were ignored.",
2845 "notice.configMigrationIncomplete": "Config migration did not complete.",
2846 "notice.modelMissingApiKey": "Selected model is missing its API key.",
2847 "notice.mcpServerFailed": "An MCP server failed to start.",
2848 "notice.mcpServersFailed": "Some MCP servers failed to start; run /mcp for details.",
2849 "notice.guardianModelMissing": "Guardian was disabled because its model was not found.",
2850 "notice.guardianStartFailed": "Guardian was disabled because it could not start.",
2851 "questionNav.label": "Question navigation",
2852 "questionNav.progress": "Question {current} / {total}",
2853 "questionNav.jump": "Jump to question {n}",
2854 "questionNav.hint": "Click to jump to this question",
2855 "compaction.working": "Compacting conversation…",
2856 "compaction.title": "Context compacted",
2857 "compaction.messages": "{n} messages",
2858 "compaction.showSummary": "show summary",
2859 "compaction.hideSummary": "hide summary",
2860 "rewind.label": "Message actions",
2861 "rewind.disabledRunning": "Wait for the current action to finish",
2862 "rewind.disabledNoCheckpoint": "This message has no restore point",
2863 "rewind.disabledNoBoundary": "Conversation boundary is unavailable for this message",
2864 "rewind.disabledNoCode": "No code changes were captured after this message",
2865 "rewind.disabledNoEarlier": "There is nothing before this message to summarize",
2866 "rewind.disabledNoLater": "There is nothing after this message to summarize",
2867 "rewind.filesChanged": "{count} files",
2868 "rewind.turnFiles": "{count} this turn",
2869 "rewind.both": "Rewind code and conversation",
2870 "rewind.conversation": "Rewind conversation only",
2871 "rewind.code": "Rewind code only",
2872 "rewind.fork": "Fork conversation",
2873 "rewind.summFrom": "Summarize after this",
2874 "rewind.summUpto": "Summarize before this",
2875 "rewind.confirmFork": "Confirm fork conversation",
2876 "rewind.confirmSummFrom": "Confirm summarize after this",
2877 "rewind.confirmSummUpto": "Confirm summarize before this",
2878 "rewind.confirmBoth": "Confirm rewind code and conversation",
2879 "rewind.confirmConversation": "Confirm rewind conversation",
2880 "rewind.confirmCode": "Confirm rewind code",
2881 "rewind.confirmPartialCoverage": "Reasonix could not track every possible file write. Only captured files will be restored.\n\nCoverage gaps:\n{gaps}\n\nContinue?",
2882 "rewind.partialCoverageUnknown": "Some writes could not be attributed to a file path.",
2883 "rewind.busyFork": "Forking from this message…",
2884 "rewind.busySummFrom": "Summarizing after this message…",
2885 "rewind.busySummUpto": "Summarizing up to this message…",
2886 "rewind.busyConversation": "Rewinding conversation…",
2887 "rewind.busyCode": "Rewinding code…",
2888 "rewind.busyBoth": "Rewinding code and conversation…",
2889 "rewind.failed": "Rewind failed",
2890 "undoRewind.turns": "Rolled back {n} turn(s)",
2891 "undoRewind.filesRestored": "{n} file(s) restored",
2892 "undoRewind.filesRemoved": "{n} file(s) removed",
2893 "undoRewind.undo": "Undo",
2894 "undoRewind.confirm": "Confirm undo?",
2895 "msg.copied": "Copied",
2896
2897 // tool card summaries
2898 "tool.stepOne": "{n} step",
2899 "tool.stepOther": "{n} steps",
2900 "tool.error": "error",
2901 "tool.receivingArgs": "receiving arguments ↓ {chars}…",
2902 "tool.errorReceiptMismatch": "verification command has no matching successful receipt",
2903 "tool.truncated": "output truncated",
2904 "tool.showAllLines": "show all {n} lines",
2905 "tool.showErrorDetails": "show error details",
2906 "tool.hideErrorDetails": "hide error details",
2907 "tool.readCount": "Read {n} files",
2908 "tool.searchCount": "Search {n} files",
2909 "tool.otherReadCount": "{n} read calls",
2910 "tool.lineOne": "{n} line",
2911 "tool.lineOther": "{n} lines",
2912 "tool.matchOne": "{n} match",
2913 "tool.matchOther": "{n} matches",
2914 "tool.fileOne": "{n} file",
2915 "tool.fileOther": "{n} files",
2916 "tool.entryOne": "{n} entry",
2917 "tool.entryOther": "{n} entries",
2918 "tool.editOne": "{n} edit",
2919 "tool.editOther": "{n} edits",
2920 "tool.replacementOne": "{n} replacement",
2921 "tool.replacementOther": "{n} replacements",
2922 "tool.emptyFile": "empty file",
2923 "tool.noOutput": "no output",
2924 "tool.shell.exitCode": "exit {code}",
2925 "tool.shell.verificationPassed": "verification passed",
2926 "tool.shell.verificationFailed": "verification failed",
2927 "tool.shell.verificationNotRun": "verification not run",
2928 "tool.shell.notExecuted": "command did not run",
2929 "tool.shell.mayBePartial": "command may have partially modified files",
2930 "subagent.phase.queued": "queued",
2931 "subagent.phase.running": "running",
2932 "subagent.phase.reasoning": "reasoning",
2933 "subagent.phase.responding": "responding",
2934 "subagent.phase.tool": "using tools",
2935 "subagent.phase.retrying": "retrying",
2936 "subagent.phase.completed": "completed",
2937 "subagent.phase.failed": "failed",
2938 "subagent.phase.cancelled": "cancelled",
2939 "subagent.phase.elapsed": "{n}s",
2940 "subagent.activity.ago": "{n}s ago",
2941 "subagent.preview.reasoning": "Reasoning",
2942 "subagent.preview.text": "Response preview",
2943 "subagent.preview.notice": "Notices",
2944 "subagent.preview.truncated": "preview truncated",
2945
2946 // software update
2947 "config.loadWarning": "Configuration issue: {msg}",
2948 "config.openConfig": "Open config",
2949 "config.reloadConfig": "Reload",
2950 "config.doctorHint": "Or run: reasonix doctor repair",
2951 "updater.autoCheckLabel": "Check for updates on startup",
2952 "updater.autoCheckHint": "When off, Reasonix won't check automatically when it opens. You can still check manually here.",
2953 "updater.officialReleaseHint": "Reasonix checks the latest official release.",
2954 "updater.officialDownload": "Download from official site",
2955 "updater.privacyAndUpdatePreferences": "Privacy & update preferences",
2956 "settings.telemetryLabel": "Anonymous usage ping",
2957 "settings.telemetryHint": "On launch, send a random install id plus version and OS to count active installs. After an abnormal exit, the next normal launch may also send a scrubbed native diagnostic with lifecycle phase, symbolized stack, and Windows/WebView2 failure kind. Panic values, personal path segments, and secrets are removed; conversations and file contents are never included.",
2958 "settings.metricsLabel": "Share aggregate quality metrics",
2959 "settings.metricsHint": "On by default. Sends anonymous turn-end counts, updater error categories, lifecycle/window health buckets, and settings preference snapshots. Includes the random install id used to de-duplicate DAU. Buckets may include normalized custom provider and model names — never conversations, prompts, keys, paths, base URLs, memory text, tool outputs, or file contents.",
2960 "updater.currentVersion": "Current version: {v}",
2961 "updater.checkButton": "Check for updates",
2962 "updater.checking": "Checking for updates…",
2963 "updater.upToDate": "You're on the latest version.",
2964 "updater.available": "A new version is available: {v}",
2965 "updater.releaseNotes": "Release notes",
2966 "updater.updateAndRestart": "Update and restart",
2967 "updater.goToDownload": "Go to download page",
2968 "updater.macHint": "Automatic install isn't available for this macOS build — please download and install manually.",
2969 "updater.downloading": "Downloading… {done} MB / {total} MB ({pct}%)",
2970 "updater.verifying": "Verifying signature…",
2971 "updater.authorizing": "Waiting for administrator authorization…",
2972 "updater.installing": "Installing — Reasonix will restart…",
2973 "updater.installingPackage": "Installing via the system package manager…",
2974 "updater.done": "Update complete — restarting…",
2975 "updater.failed": "Update failed: {msg}",
2976 "updater.recoveryBlocked": "The previous update has not finished.",
2977 "updater.recoveryHint": "Restart Reasonix and retry. On macOS, allow Reasonix in System Settings > Privacy & Security > App Management. If recovery is still blocked, download the latest signed installer and install it over the current version without uninstalling first.",
2978 "updater.manualUpdateRequired": "Automatic installation is unavailable.",
2979 "updater.manualFallbackHint": "Download the latest signed installer from the official site and install it over the current version.",
2980 "updater.errorDetails": "Details: {msg}",
2981 "updater.retry": "Retry",
2982 "updater.dismiss": "Later",
2983 "changelog.title": "Release notes",
2984 "changelog.subtitle": "A product-focused history of new capabilities, improvements, fixes, and upgrade guidance.",
2985 "changelog.openWeb": "Open on web",
2986 "feedback.title": "Help & feedback",
2987 "feedback.subtitle": "Report bugs or suggest features. Do not include secrets, chats, or private paths.",
2988 "feedback.submitIssue": "Submit issue",
2989 "feedback.viewIssues": "View issues",
2990
2991 // onboarding — first-run model provider guide
2992 "onboarding.title": "Get started with Reasonix",
2993 "onboarding.tagline": "Connect a model provider to start chatting. DeepSeek is recommended.",
2994 "onboarding.inputLabel": "DeepSeek API key",
2995 "onboarding.inputPlaceholder": "sk-…",
2996 "onboarding.submit": "Connect DeepSeek",
2997 "onboarding.chooseProvider": "Connect another model provider",
2998 "onboarding.validating": "Validating…",
2999 "onboarding.getKey": "How do I get a key?",
3000 "onboarding.privacy": "Saved locally and never synced by Reasonix",
3001 "onboarding.error.empty": "Please paste a key first.",
3002 "onboarding.error.invalid": "That key didn't work — double-check it's active and has billing set up.",
3003 "onboarding.error.network": "Couldn't reach DeepSeek — check your network and try again.",
3004 "onboarding.error.unknown": "Something went wrong: {msg}",
3005 "onboarding.skip": "Skip for now",
3006 "onboarding.inlinePrompt": "Connect a model provider before starting a conversation.",
3007 "onboarding.configureProvider": "Configure model provider",
3008
3009 // context panel
3010 "context.overview": "Session overview",
3011 "context.scopeGlobal": "Scope: Global",
3012 "context.scopeProject": "Project scope · {name}",
3013 "context.windowTitle": "Context window",
3014 "context.windowStatusHealthy": "Context healthy",
3015 "context.windowStatusWatch": "Compression soon",
3016 "context.windowStatusPastCompact": "Compression threshold reached",
3017 "context.windowStatusNearLimit": "Near context limit",
3018 "context.windowUsageSummary": "{pct}% used",
3019 "context.windowCompactRemaining": "{used} / {window} · {tokens} until compression",
3020 "context.windowCompactDistance": "To compact",
3021 "context.windowUsedLabel": "Used",
3022 "context.windowUsed": "Used context",
3023 "context.windowCompactThreshold": "Compression threshold",
3024 "context.windowCompactHeadroom": "Before compression",
3025 "context.sessionMetrics": "Session metrics",
3026 "context.runtimeMetrics": "Runtime",
3027 "context.costMetrics": "Cost",
3028 "context.sessionChanges": "Session changes",
3029 "context.referencedFiles": "Dependency files",
3030 "context.noChanges": "No changed files in this session yet",
3031 "context.noReads": "No files read in this session yet",
3032 "context.changedMeta": "{count} change records",
3033 "context.readMeta": "{count} read records",
3034 "context.viewAll": "View all",
3035 "context.prompt": "Prompt",
3036 "context.completion": "Completion",
3037 "context.reasoning": "Reasoning",
3038 "context.other": "Other",
3039 "context.total": "Total",
3040 "context.usageAnalysis": "Usage analysis",
3041 "context.usageAnalysisView": "Usage analysis view",
3042 "context.usageAnalysisSource": "By source",
3043 "context.usageAnalysisType": "By type",
3044 "context.tokenBreakdown": "Token composition",
3045 "context.cacheHit": "Cache hit",
3046 "context.inputCache": "Input cache",
3047 "context.inputCacheHit": "Input (cache hit)",
3048 "context.inputCacheMiss": "Input (cache miss)",
3049 "context.outputTokens": "Output tokens",
3050 "context.sessionTokens": "Session total tokens",
3051 "context.sessionTokensShort": "Total tokens",
3052 "context.tokensValue": "{value} tokens",
3053 "context.sessionCost": "Session cost",
3054 "context.costBreakdown": "Cost breakdown",
3055 "context.sourceBreakdown": "Usage source",
3056 "context.sourceShareTitle": "Source share",
3057 "context.sourceInput": "Input",
3058 "context.sourceOutput": "Output",
3059 "context.sourceCacheHit": "Hit",
3060 "context.sourceCacheMiss": "Miss",
3061 "context.sourceCacheRate": "Cache",
3062 "context.sourceCost": "Cost",
3063 "context.sourceDetails": "Details",
3064 "context.cacheNotReported": "not reported",
3065 "context.sourceExecutor": "Main",
3066 "context.sourcePlanner": "Planner",
3067 "context.sourceSubagent": "Subagent",
3068 "context.sourceCompaction": "Compaction",
3069 "context.sourceClassifier": "Classifier",
3070 "context.sourceTitle": "Title",
3071 "context.sourceRequests": "{count} req",
3072 "context.moreSources": "{count} more sources",
3073 "context.requests": "Requests",
3074 "context.time": "Runtime",
3075 "context.durationSeconds": "{seconds}s",
3076 "context.durationMinutesSeconds": "{minutes}m {seconds}s",
3077
3078 // crash page
3079 "crash.title": "Reasonix hit an error — send us the report, or copy it",
3080 "crash.copy": "Copy",
3081 "crash.copied": "Copied",
3082 "crash.copyFailed": "Copy failed — select the report text and copy manually",
3083 "crash.send": "Send report",
3084 "crash.sending": "Sending…",
3085 "crash.sent": "Sent — thanks!",
3086 "crash.sendFailed": "Send failed — use Copy instead",
3087 "crash.privacyNote": "The report contains only the error text above (user names in paths removed) plus app version and OS.",
3088 "performanceReport.title": "Reasonix noticed a responsiveness issue",
3089 "performanceReport.dismiss": "Dismiss",
3090 "performanceReport.privacyNote": "Before upload, the desktop scrubber removes paths and secrets. The diagnostic is intended to contain timing, memory, network state, sampled app function names, recent breadcrumbs, app version, and OS.",
3091
3092 // mock / demo seed data (browser dev only)
3093 "mock.sessionFixLogin": "fix the login bug in auth.go",
3094 "mock.sessionRefactor": "refactor the payment module",
3095 "mock.sessionReadme": "write the README and badges",
3096 "mock.sessionPlugin": "explain the plugin host design",
3097 "mock.trashDevStandardTitle": "00 Establish project development standards",
3098 "mock.trashDevStandardPreview": "Organize project development standards including directory structure, branch conventions, and commit requirements.",
3099 "mock.trashP3aTitle": "20260521 p3a P&D",
3100 "mock.trashP3aPreview": "Review p3a P&D scope, document remaining risks and next-round suggestions.",
3101 "mock.trashGlobalProductTitle": "Common product specs",
3102 "mock.trashGlobalProductPreview": "Document cross-project common product rules including acceptance, canary, and error handling.",
3103 "mock.projectJoyquantDb": "joyquant-db",
3104 "mock.projectJoyquantSys": "joyquant-sys",
3105 "mock.topicDevStandard": "00 Establish project dev standards",
3106 "mock.topicDbMaint": "01 JoyQuant DB project maintenance",
3107 "mock.topicEnv": "Project environment uv and Python runtime issues",
3108 "mock.topicP3b": "20260523 p3b P&D",
3109 "mock.topicP3a": "20260521 p3a P&D",
3110 "mock.topicHotfix": "20260522 post-p3-hotfix P&D",
3111 "mock.topicSysCoord": "01 JoyQuant-SYS project coordination",
3112 "mock.topicSysStandard": "00 Establish project dev standards",
3113 "mock.topicSysException": "Exception handling recovery drill",
3114 "mock.topicProduct": "Common product specs",
3115 "mock.topicAi": "AI engineering best practices",
3116 "mock.topicLab": "Exploratory experiments",
3117 "mock.approvalSubject": "npm run build\n\nRun the build command to verify frontend artifacts and style packaging.",
3118 "mock.sandboxEscapeReasoning": "Windows has no OS-level Bash sandbox; requesting a one-time unconfined-run approval.",
3119 "mock.sandboxEscapeSubject": "run unconfined once: go test ./...",
3120 "mock.sandboxEscapeReason": "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.",
3121 "mock.askQ1Header": "Approach",
3122 "mock.askQ1Prompt": "How do you want to handle the git pull conflicts?",
3123 "mock.askQ1Opt1Label": "git stash then pull",
3124 "mock.askQ1Opt1Desc": "Use git stash to save local changes, pull latest code, then restore",
3125 "mock.askQ1Opt2Label": "Discard local changes then pull",
3126 "mock.askQ1Opt2Desc": "Abandon all local changes, force sync with remote",
3127 "mock.askQ1Opt3Label": "Create branch to save changes",
3128 "mock.askQ1Opt3Desc": "Create a branch to save local changes first, then pull main branch",
3129 "mock.askQ2Header": "Reasonix build",
3130 "mock.askQ2Prompt": "What do you want to do about the missing reasonix binary?",
3131 "mock.askQ2Opt1Label": "Check docs first",
3132 "mock.askQ2Opt1Desc": "Read README / build docs to determine the correct build command",
3133 "mock.askQ2Opt2Label": "Check build config",
3134 "mock.askQ2Opt2Desc": "Check desktop/wails.json and main.go to infer the entry point",
3135 "mock.askQ2Opt3Label": "Let me try building",
3136 "mock.askQ2Opt3Desc": "Handle git conflicts first, then attempt local build and report results",
3137 "mock.todo1": "Review current frontend structure",
3138 "mock.todo2": "Optimize approval and Ask decision bar layout",
3139 "mock.todo2ActiveForm": "Adjusting decision bar layout",
3140 "mock.todo3": "Verify three preview states",
3141 "mock.newSession": "New session",
3142 "mock.memoryBody": "# User memory\n\nAlways respond in English.",
3143 "mock.changedFile1Prompt": "Update draft spec v0.3",
3144 "mock.changedFile2Prompt": "Record project context",
3145 "mock.changedFile1Path": "docs/dev-standard.md",
3146 "mock.changedFile2Path": ".reasonix/project.md",
3147 };
3148
3149 export type DictKey = keyof typeof en;
3150
3150 lines TYPESCRIPT