| 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 |