@qt4798/pi-web 0.18.2 → 0.18.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +16 -16
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_not-found.html +1 -1
  15. package/.next/server/app/_not-found.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/server/app/api/app-update/route.js +1 -1
  20. package/.next/server/app/api/web-auth/route.js +1 -1
  21. package/.next/server/app/index.html +1 -1
  22. package/.next/server/app/index.rsc +4 -4
  23. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  24. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  25. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  26. package/.next/server/app/login/page.js +1 -1
  27. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  28. package/.next/server/app/login.html +1 -1
  29. package/.next/server/app/login.rsc +3 -3
  30. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  31. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  32. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
  33. package/.next/server/app/page.js +8 -8
  34. package/.next/server/app/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app-paths-manifest.json +16 -16
  36. package/.next/server/chunks/1352.js +1 -1
  37. package/.next/server/chunks/7915.js +1 -1
  38. package/.next/server/middleware-build-manifest.js +1 -1
  39. package/.next/server/middleware.js +1 -1
  40. package/.next/server/pages/404.html +1 -1
  41. package/.next/server/pages/500.html +1 -1
  42. package/.next/server/server-reference-manifest.json +1 -1
  43. package/.next/static/chunks/9247-dcc0a4a11fc397aa.js +1 -0
  44. package/.next/static/chunks/app/login/page-e1fac573b9938b39.js +1 -0
  45. package/.next/static/chunks/app/{page-50a9e41a58131529.js → page-bf524eccd13171ca.js} +8 -8
  46. package/.next/static/css/5418f5ea5454ad72.css +1 -0
  47. package/.next/trace +83 -83
  48. package/.next/trace-build +1 -1
  49. package/package.json +1 -1
  50. package/.next/static/chunks/9247-73909cdf73bbd00f.js +0 -1
  51. package/.next/static/chunks/app/login/page-c650af893ba4020b.js +0 -1
  52. package/.next/static/css/c0232b3573a8328c.css +0 -1
  53. /package/.next/static/{XcXXtGVAqjwcdqdapxZTc → _xksA4ZQaCVW_rYzSdTTL}/_buildManifest.js +0 -0
  54. /package/.next/static/{XcXXtGVAqjwcdqdapxZTc → _xksA4ZQaCVW_rYzSdTTL}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9247],{39247:(e,t,s)=>{s.d(t,{I18nProvider:()=>p,s:()=>c});var o=s(95155),i=s(12115);let n=new Map;function a(e){if(!e.id.trim())throw Error("Locale id must not be empty");if(n.has(e.id))throw Error(`Locale already registered: ${e.id}`);n.set(e.id,e)}function d(e){return n.get(e)}a({id:"en",label:"English",messages:{"i18n.close":"Close","i18n.cancel":"Cancel","i18n.checking":"Checking…","desktop.settings":"Settings","desktop.settingsSections":"Settings sections","desktop.closeSettings":"Close settings","desktop.display":"Display","desktop.server":"Server","desktop.serverCurrent":"Current server","desktop.serverSwitch":"Switch server","desktop.serverSwitchHint":"Open Pi Web Desktop connection manager: switch between saved servers or add a new server (URL + password).","desktop.reloadPage":"Reload page","desktop.serverHintTitle":"Need a remote server or an access password?","desktop.serverHintBody":"The desktop app now connects to your local server automatically. Switch servers, reach it from your phone, or add an access password from this top-right icon.","desktop.serverHintAction":"Open connection manager","desktop.serverHintDismiss":"Got it","desktop.chat":"Chat","desktop.models":"Models","desktop.skills":"Skills","desktop.plugins":"Plugins","desktop.subagents":"Subagents","desktop.proxy":"Proxy","desktop.proxyEnable":"Enable Proxy","desktop.proxyProtocol":"Protocol","desktop.proxyHost":"Host","desktop.proxyPort":"Port","desktop.proxyUsername":"Username (optional)","desktop.proxyPassword":"Password (optional)","desktop.proxyNoProxy":"No-Proxy (comma-separated, optional)","desktop.proxySave":"Save","desktop.proxySaving":"Saving…","desktop.proxyTest":"Test Connection","desktop.proxyTesting":"Testing…","desktop.proxySaved":"Proxy configuration saved","desktop.proxySaveFailed":"Failed to save","desktop.proxyTestSuccess":"Connected","desktop.proxyTestFailed":"Connection failed","desktop.proxyUnsaved":"Unsaved changes","desktop.features":"Features","desktop.logs":"Logs","desktop.snippets":"Snippets","desktop.snippetsDesc":"Reusable text/code snippets — type # in the composer to autocomplete","desktop.snippetNew":"New snippet","desktop.snippetName":"Name","desktop.snippetContent":"Content","desktop.snippetSave":"Save","desktop.snippetEdit":"Edit","desktop.snippetDelete":"Delete","desktop.snippetEmpty":"No snippets yet — create one to get started.","desktop.snippetNameRequired":"Snippet name is required","desktop.snippetHint":"Type #name in the composer to autocomplete; Enter expands it to the snippet content.","desktop.logsAllCodes":"All error codes","desktop.logsAllLevels":"All levels","desktop.logsAllSources":"All sources","desktop.logsSearch":"Search error logs","desktop.logsClear":"Clear logs","desktop.logsCopy":"Copy log","desktop.logsEmpty":"No error logs","desktop.mcpVisionTitle":"DeepSeek Vision module","desktop.mcpVisionDesc":"Dedicated configuration for the deepseek-vision module (image analysis / OCR). Both the MCP registration and the model settings can be edited here.","desktop.mcpVisionRegistered":"Registered","desktop.mcpVisionNotRegistered":"Not registered","desktop.mcpVisionRegistration":"MCP registration","desktop.mcpVisionCommand":"Command","desktop.mcpVisionCommandRequired":"Command is required","desktop.mcpVisionLifecycle":"Lifecycle","desktop.mcpVisionTransport":"Transport","desktop.mcpVisionTransportFixed":"stdio (fixed)","desktop.mcpVisionSaveReg":"Save registration","desktop.mcpVisionSavedReg":"Registration saved — takes effect in a new session or after restarting pi.","desktop.mcpVisionRemove":"Remove from MCP config","desktop.mcpVisionRemoved":"Registration removed","desktop.mcpVisionModelConfig":"Model configuration","desktop.mcpVisionModelNote":'Model settings are written to .env immediately. Use "Restart server" below to apply them right away.',"desktop.mcpVisionProvider":"Provider","desktop.mcpVisionBaseUrl":"Base URL","desktop.mcpVisionApiKey":"API key","desktop.mcpVisionModel":"Vision model","desktop.mcpVisionMaxTokens":"Max output tokens","desktop.mcpVisionSaveModel":"Save model configuration","desktop.mcpVisionSavedModel":"Model configuration saved","desktop.mcpVisionNameReserved":"This name is reserved for the built-in DeepSeek Vision configuration — pick another name.","desktop.mcpVisionRestart":"Restart server (apply now)","desktop.mcpVisionRestarting":"Restarting…","desktop.mcpVisionRestarted":"Restart command sent — takes effect shortly","desktop.mcpVisionRestartTitle":"Restart the deepseek-vision server so .env changes take effect immediately","desktop.mcpVisionRestartNoSession":"Open a session first to restart the server","desktop.applyNow":"Apply now","desktop.applyNowApplying":"Reloading…","desktop.applyNowDone":"Reloaded — changes applied","desktop.applyNowTitle":"Reload the current session so changes take effect immediately (no pi restart needed)","desktop.applyNowNoSession":"Open a session first to apply changes now","desktop.featuresDesc":"Manage optional Pi Web features. Disabling one hides its entry points.","desktop.featuresTasksBoard":"Task Board","desktop.featuresTasksBoardDesc":"Show the Task Board entry in the top toolbar to manage cross-project tasks.","desktop.featuresLoading":"Loading…","desktop.featuresSaving":"Saving…","desktop.featuresCollabDefault":"Default task mode","desktop.featuresCollabDefaultDesc":"Default collaboration mode for new chats (Normal / Plan / Goal)","desktop.featuresTokenDefault":"Default token profile","desktop.featuresTokenDefaultDesc":"Default token profile for new chats (Lite / Balanced / Delivery)","desktop.featuresApprovalDefault":"Default tool approval","desktop.featuresApprovalDefaultDesc":"Default tool approval for new chats (Ask / Auto / Yolo)","desktop.usage":"Usage","desktop.usageSession":"Current session","desktop.usageGlobal":"Global","desktop.usageContext":"Context {used} / {window} tokens","desktop.usageContextHint":"Live context usage of the current session","desktop.usageNoSessionData":"No usage data for the current session","desktop.usageNoSession":"No session open","desktop.usageTotal":"Estimated total","desktop.usageMessages":"Messages","desktop.usageMessagesHint":"across all sessions","desktop.usageSessions":"sessions","desktop.usageDaily":"Daily usage trend","desktop.usageTopSessions":"Top sessions by usage","desktop.usageNoData":"No data yet","desktop.mcp":"MCP","desktop.mcpServers":"MCP servers","desktop.mcpAddServer":"Add server","desktop.mcpNewServer":"New MCP server","desktop.mcpEditServer":'Edit MCP server "{name}"',"desktop.mcpRestartNote":"MCP servers are loaded when pi starts. Changes made here take effect after restarting pi.","desktop.mcpEmpty":"No MCP servers configured yet — add one to expose tools to the agent.","desktop.mcpEmptyOther":"No other MCP servers configured — DeepSeek Vision is managed in the card above.","desktop.mcpServerName":"Name","desktop.mcpCommand":"Command","desktop.mcpArgs":"Arguments (one per line)","desktop.mcpUrl":"URL","desktop.mcpHeaders":"Headers (JSON)","desktop.mcpTransport":"Transport","desktop.mcpLifecycle":"Lifecycle","desktop.mcpRequestTimeoutMs":"Request timeout (ms)","desktop.mcpEnv":"Environment (JSON)","desktop.mcpEdit":"Edit","desktop.mcpDelete":"Delete","desktop.mcpSave":"Save","desktop.saving":"Saving…","desktop.mcpCancel":"Cancel","desktop.mcpSavedRestart":"Saved — restart pi to apply changes.","desktop.tools":"Tools","desktop.refreshSession":"Refresh session","desktop.shellTool":"Shell tool","desktop.usePowerShell":"Use PowerShell for shell commands","desktop.shellToolDescription":"On Windows, prefer PowerShell over bash for the shell tool. Saves to defaultTools in settings.json.","desktop.shellToolWindowsOnly":"PowerShell is only configurable on Windows.","desktop.shellToolMacOnly":"Shell tool settings are only available on Windows.","desktop.toolsListHint":"Tools actually loaded by the current session. MCP and extension tools stay active regardless of the composer's tool preset.","desktop.toolsListNoSession":"Open a session to inspect its loaded tools.","desktop.extensionToolsTitle":"Extension tool switches","desktop.extensionToolsHint":"Extension and MCP tools are always injected, independent of the composer's tool preset. Switch off any tool that writes files to make a session genuinely read-only (plan mode, for example).","desktop.extensionToolsEmpty":"No extension tools are currently loaded.","desktop.extensionToolsApplyNote":"Toggling reloads the current session so the change takes effect.","desktop.subagentCardProcessing":"Processing","desktop.transcriptRoleUser":"User","desktop.transcriptRoleAssistant":"Assistant","desktop.transcriptRoleResult":"Result","desktop.transcriptRoleBash":"Bash","desktop.backup":"Backup","desktop.backupExportTitle":"Export backup","desktop.backupExportDescription":"Package all global configuration: providers, models, credentials, settings, MCP servers, skills and local plugins.","desktop.backupIncludeSecrets":"Include API keys and credentials","desktop.backupSecretsWarning":"Warning: the backup will contain plaintext API keys (models.json) and OAuth credentials (auth.json). Keep it safe.","desktop.backupIncludeSessions":"Include session history","desktop.backupSessionsHint":"Sessions can be large and may contain sensitive conversation content.","desktop.backupExportButton":"Export backup","desktop.backupExporting":"Exporting…","desktop.backupExportFailed":"Backup export failed","desktop.backupImportTitle":"Import backup","desktop.backupImportButton":"Choose backup file","desktop.backupImportDescription":"Restore from a pi-backup zip. Paths are remapped to this machine and MCP commands are adapted per platform.","desktop.backupImportFailed":"Failed to read the backup file","desktop.backupRestoreFailed":"Restore failed","desktop.backupManifest":"Backup created","desktop.backupNoSecrets":"no credentials included","desktop.backupCategories":"Restore categories","desktop.backupCategorycore":"Core config","desktop.backupCategoryskills":"Skills","desktop.backupCategorypackages":"Plugins","desktop.backupCategorymcp":"MCP servers","desktop.backupCategorysessions":"Sessions","desktop.backupMcpServers":"MCP servers","desktop.backupNpmPackages":"npm packages","desktop.backupReinstallNpm":"Reinstall these npm packages after restore","desktop.backupReinstallNpmHint":"Install scripts run code shipped with the backup; only enable this if you trust its source","desktop.backupInstallModel":"Model for the install session","desktop.backupInstallSession":"Create install session","desktop.backupOpenSession":"Open session","desktop.backupInstallSessionFailed":"Failed to create the install session","desktop.backupRestoreButton":"Restore","desktop.backupRestoring":"Restoring…","desktop.backupRestoreReport":"Restore report","desktop.backupReportRestored":"Restored","desktop.backupReportRestart":"Needs restart to take effect","desktop.backupReportManual":"Needs manual attention","desktop.backupRestartHint":"Settings, models, credentials and MCP config take effect after restarting pi-web / pi.","desktop.importSessions":"Import Sessions","desktop.importSessionsDesc":"Import conversation history from other AI coding tools into pi-web. Currently supports Reasonix, with more tools coming soon.","desktop.comingSoon":"Coming soon","desktop.projects":"projects","desktop.importSelectProjects":"Select projects to import","desktop.importSelectAll":"Select all","desktop.importDeselectAll":"Deselect all","desktop.importMerged":"Merge into existing project","desktop.importNewProject":"New project","desktop.importExistingCount":"{count} existing","desktop.importStart":"Start import","desktop.importing":"Importing…","desktop.importDone":"Import complete","desktop.importedSummary":"Successfully imported {imported} sessions","desktop.importSkippedCount":"{skipped} skipped","desktop.importErrorsCount":"{errors} errors","desktop.importGeneratingTitles":"Generating titles…","desktop.importGenerateTitles":"Generate titles for imported sessions","desktop.importAgain":"Import again","desktop.importNoData":"No Reasonix data found. Make sure ~/.reasonix/projects/ exists with session files.","desktop.importFromReasonix":"from Reasonix","desktop.importFromCodex":"from Codex","desktop.builtinModelsTitle":"Model configuration","desktop.builtinModelsFetchNew":"Fetch new models","desktop.builtinModelsLoadFailed":"Failed to load models","desktop.builtinModelsEmpty":"No models available for this provider.","desktop.builtinModelsContext":"Context","desktop.builtinModelsMaxTokens":"Max output","desktop.builtinModelsReasoning":"Reasoning model","desktop.builtinModelsThinking":"Thinking levels (thinkingLevelMap)","desktop.builtinModelsDirty":"{count} unsaved change(s)","desktop.builtinModelsHide":"Hide this model","desktop.builtinModelsManualAdd":"+ Add model manually","desktop.builtinModelsManualHint":"Adding manually writes a real request model ID (it must exist upstream). Note: the display name above only changes the label — requests always use the model ID.","desktop.builtinModelsManualIdRequired":"Model ID is required.","desktop.builtinModelsManualDuplicate":"That model ID already exists.","desktop.builtinModelsManualBadge":"custom","desktop.inputShortcut":"Input shortcut","desktop.inputShortcutDescription":"Choose how to send messages with the Enter key.","desktop.useCtrlEnter":"Ctrl+Enter to send","desktop.useCtrlEnterDescription":"Enter inserts a newline, Ctrl+Enter sends the message.","desktop.useEnter":"Enter to send","desktop.useEnterDescription":"Enter sends the message, Shift+Enter inserts a newline.","desktop.theme":"Theme","desktop.themes":"Themes","desktop.language":"Language","desktop.light":"Light","desktop.dark":"Dark","desktop.system":"System","desktop.english":"English","desktop.chinese":"简体中文","desktop.themeDescription":"Choose the appearance of Pi Web.","desktop.languageDescription":"Choose the display language for the interface.","desktop.accessDescription":"Password protection is enabled. Signing out requires this browser to enter the password again.","desktop.colorScheme":"Color Scheme","desktop.openThemeFolder":"Open Pi theme folder","desktop.learnPiThemes":"Learn about Pi themes","desktop.defaultTheme":"Default","desktop.appearanceMode":"Appearance Mode","desktop.loadingThemes":"Loading themes…","desktop.borderVisibility":"Border Visibility","desktop.borderSubtle":"Subtle","desktop.borderBold":"Bold","desktop.noCustomThemes":"No custom themes installed.","desktop.noCustomThemesHint":"Add JSON files to","desktop.noCustomThemesHint2":"to see them here.","desktop.darkVariant":"Dark variant available","desktop.lightVariant":"Light variant available","desktop.switchToLight":"Switch to light mode","desktop.switchToDark":"Switch to dark mode","desktop.showSidebar":"Show sidebar","desktop.hideSidebar":"Hide sidebar","desktop.resizeSidebar":"Resize sidebar","desktop.resizeFilePanel":"Resize file panel","desktop.trustProject":"Trust project","desktop.trustingProject":"Trusting…","desktop.projectResourcesRestricted":"Project resources are restricted","desktop.projectSkillsRestricted":"Project skills are unavailable until you trust this project.","desktop.projectSkillInstallUnavailable":"Trust this project before installing project skills.","desktop.shellCommand":"Shell command","desktop.shellOutputLocal":"output stays local","desktop.shellOutputModel":"output is available to the model","desktop.runningShellCommand":"Running shell command…","desktop.loadFullOutput":"Load full output","desktop.download":"Download","desktop.trustProjectTitle":"Trust this project?","desktop.trustProjectBody":"Project extensions, skills, prompts, and package resources can execute code. Trust this project only if you recognize its contents.","desktop.minimize":"Minimize","desktop.maximize":"Maximize","desktop.restore":"Restore","desktop.islandLabel":"Window controls","desktop.islandResetHint":"Drag to move, double-click to reset","desktop.islandDrag":"Drag to move","desktop.close":"Close","desktop.viewFullHistory":"View full history","desktop.fullHistoryAvailableAfterSave":"Full history is available after the session is saved","desktop.systemPrompt":"System prompt","desktop.sessionInfo":"Session info","desktop.hideFilePanel":"Hide file panel","desktop.showFilePanel":"Show file panel","desktop.sessionInfoTitle":"Session Info","desktop.sessionInfoFile":"File","desktop.sessionInfoId":"ID","desktop.sessionInfoInMemory":"In-memory","desktop.sessionInfoMessages":"Messages","desktop.sessionInfoTokens":"Tokens","desktop.sessionInfoActiveTime":"Estimated Active Time","desktop.sessionInfoUser":"User","desktop.sessionInfoAssistant":"Assistant","desktop.sessionInfoToolCalls":"Tool Calls","desktop.sessionInfoToolResults":"Tool Results","desktop.sessionInfoTotal":"Total","desktop.sessionInfoInput":"Input","desktop.sessionInfoOutput":"Output","desktop.sessionInfoCacheRead":"Cache Read","desktop.sessionInfoCacheWrite":"Cache Write","desktop.sessionInfoCost":"Cost","desktop.sessionInfoCostOfficial":"Cost (official)","desktop.sessionInfoContext":"Context","desktop.turnUsageTitle":"This turn","desktop.turnUsageByOfficialPrice":"priced at official rates","desktop.copyFilePath":"Copy file path","desktop.copySessionId":"Copy session ID","desktop.projectDir":"Project","desktop.gitBranch":"Git branch","desktop.gitWorktree":"Worktree","desktop.projectSection":"Project Info","desktop.copyProjectDir":"Copy project path","desktop.copyGitBranch":"Copy git branch","desktop.copyGitWorktree":"Copy worktree path","desktop.sendMessageForSessionInfo":"Send a message or run /session to load session info","desktop.selectSessionFromSidebar":"Select a session from the sidebar","desktop.getStarted":"Get Started","desktop.selectProjectDirectory":"Select a project directory from the sidebar","desktop.addModelsFromBottom":"Add models via the Models button at the bottom","desktop.loadingSession":"Loading session...","desktop.scrollToLoadEarlierMessages":"Scroll up to load earlier messages ({count} hidden)","desktop.scrollToBottom":"Scroll to latest","desktop.filesWritten":"Files changed","desktop.openWrittenFile":"Open {name}","desktop.taskRunning":"running","desktop.taskTodo":"todo","desktop.taskStatusHint":"Task progress for the current project — click to open the board","desktop.runningTool":"Running tool...","desktop.runningTools":"Running {tools}...","desktop.waitingForModel":"Waiting for model...","desktop.runningCommand":"Running command...","desktop.thinking":"Thinking...","desktop.extensionRequest":"extension request","desktop.extensionPanel":"Extension panel","desktop.cancel":"Cancel","desktop.confirm":"Confirm","desktop.submit":"Submit","desktop.queued":"Queued","desktop.queueMoveUp":"Move up","desktop.queueMoveDown":"Move down","desktop.queueRecallOne":"Recall to input","desktop.queueRemove":"Remove queued message","desktop.recalledEditing":"Editing a queued message. Sending puts it back at its original position.","desktop.steer":"Steer","desktop.followUp":"Follow-up","desktop.recallToInput":"Recall to input","desktop.recallQueuedMessages":"Remove all queued messages and put them back into the input box for editing","desktop.retrying":"Retrying","desktop.compacted":"Compacted","desktop.tokens":"tokens","desktop.saved":"saved","desktop.removeImage":"Remove image","desktop.loadingCommands":"Loading commands...","desktop.slashCommands":"Slash commands","desktop.tabOrEnter":"Tab / Enter","desktop.noSlashCommands":"No extension, prompt, or skill commands found","desktop.builtIn":"Built-in","desktop.extensions":"Extensions","desktop.prompts":"Prompts","desktop.commandSkills":"Skills","desktop.match":"match","desktop.matches":"matches","desktop.snippetMatches":"snippet matches","desktop.command":"command","desktop.commands":"commands","desktop.loadingFiles":"Loading files...","desktop.files":"Files","desktop.searchingAllFiles":"searching all files...","desktop.indexTruncated":"index truncated","desktop.searching":"Searching...","desktop.search":"Search","desktop.noMatchingFiles":"No matching files","desktop.steerOrQueueFollowUp":"Steer now / queue follow-up...","desktop.agentRunning":"Agent is running...","desktop.messageWithCommands":"Message... Type / for commands, @ for files","desktop.inputHistory":"Input history","desktop.quickChanges":"Quick Changes","desktop.changedFiles":"{count} changed files","desktop.imageAttachmentsCannotQueue":"Image attachments cannot be queued while the agent is running","desktop.injectMessageNow":"Interrupt the current run and inject this message now","desktop.queueMessageAfterFinish":"Queue this message after the agent finishes","desktop.attachImage":"Attach image","desktop.push":"Push current branch","desktop.pushOk":"Push succeeded","desktop.pushFailed":"Push failed","desktop.stash":"Stash","desktop.stashTitle":"Stash manager","desktop.stashPush":"Stash changes","desktop.stashList":"Stash list","desktop.stashEmpty":"No stashes","desktop.stashPop":"Pop","desktop.stashDrop":"Drop","desktop.stashMessagePlaceholder":"Stash message (optional)…","desktop.stashDone":"Done","desktop.attachMenu":"Choose input mode","desktop.attachUpload":"Upload file","desktop.attachUploadDesc":"Attach images and other files","desktop.imageInputUnsupported":"The selected model does not accept image input. Switch to a vision model.","desktop.attachReference":"Reference files","desktop.attachReferenceDesc":"Reference workspace files with @","desktop.attachSessions":"Reference sessions","desktop.attachSessionsDesc":"Reference past conversations with #","desktop.attachCommands":"Use commands","desktop.attachCommandsDesc":"Use commands and skills with /","desktop.planModeBadge":"Plan mode","desktop.planModeLabel":"Plan mode","desktop.planModeHint":"Plan mode: read-only analysis, no file modifications. Confirm execution or exit when done.","desktop.disableCompletionSound":"Disable completion sound","desktop.enableCompletionSound":"Enable completion sound","desktop.soundLabelOn":"Sound: On","desktop.soundLabelOff":"Sound: Off","desktop.changeReasoningLevel":"Change reasoning level: {level}","desktop.reasoningLevel":"Change reasoning level","desktop.moreControls":"More controls","desktop.more":"More","modes.collabNormal":"Normal","modes.collabPlan":"Plan","modes.collabGoal":"Goal","modes.tokenEconomy":"Lite","modes.tokenFull":"Balanced","modes.tokenDelivery":"Delivery","modes.approvalAsk":"Ask","modes.approvalAuto":"Auto","modes.approvalYolo":"Yolo","modes.collabNormalTitle":"Normal \xb7 act as you go","modes.collabNormalDesc":"Execute directly, advancing as you go","modes.collabPlanTitle":"Plan \xb7 confirm before executing","modes.collabPlanDesc":"Produce a plan first; tool execution still follows permissions","modes.collabGoalTitle":"Goal \xb7 keep pushing","modes.collabGoalDesc":"Work continuously until done or blocked","modes.chatBuildTitle":"Ask before changes","modes.chatBuildDesc":"Ask before editing files","modes.chatEditTitle":"Edit automatically","modes.chatEditDesc":"Edit files automatically; commands still ask first","modes.chatYoloTitle":"Full access","modes.chatYoloDesc":"Fewer confirmations; skips most approvals","modes.tokenEconomyTitle":"Lite \xb7 fast, token-saving","modes.tokenEconomyDesc":"Less context, tools enabled on demand","modes.tokenFullTitle":"Balanced \xb7 daily general use","modes.tokenFullDesc":"Full tools, autonomous execution","modes.tokenDeliveryTitle":"Delivery \xb7 full verification","modes.tokenDeliveryDesc":"Mandatory acceptance, recheck and verify","modes.approvalAskTitle":"Require approval","modes.approvalAskDesc":"Writes and commands needing approval ask first","modes.approvalAutoTitle":"Auto-approve","modes.approvalAutoDesc":"Auto-execute what the policy allows","modes.approvalYoloTitle":"Yolo approve","modes.approvalYoloDesc":"Skip normal tool prompts (this session only)","desktop.goalRunning":"Goal","desktop.goalComplete":"Goal complete","desktop.goalBlocked":"Goal blocked","desktop.goalPaused":"Goal paused","desktop.goalNoProgress":"{n} no-progress turns","desktop.goalPause":"Pause goal","desktop.goalPauseShort":"Ⅱ","desktop.goalResume":"Resume goal","desktop.goalResumeShort":"▶","desktop.goalStop":"Stop goal","desktop.goalEdit":"Edit","desktop.goalSave":"Save","desktop.goalCancel":"Cancel","desktop.goalEditHint":"Cmd+Enter to save \xb7 Esc to cancel","desktop.goalBudget":"budget","desktop.goalTurns":"turns","desktop.goalBudgetLimited":"budget exhausted","approval.title":"Tool approval required","approval.subtitle":"The agent wants to run this tool. Choose Allow to run it, or Deny to send a blocked result back.","approval.queued":"more waiting","approval.allow":"Allow","approval.deny":"Deny","approval.allowAlways":"Always allow","approval.denyAlways":"Always deny","approval.allowOnceDescription":"Allow only this time","approval.allowAlwaysDescription":"Do not ask again for {rule}","approval.denyOnceDescription":"Reject it for now","approval.denyAlwaysDescription":"Always reject {rule}","approval.scopeAlways":"Remembered","approval.keyboardHint":"Press 1-4 or arrow keys to choose, Enter to confirm","approval.denyWithReason":"Deny with reason","approval.hideReason":"Hide reason","approval.reasonPlaceholder":"Reason shown to the agent (optional)","desktop.stopCompaction":"Stop compaction","desktop.compactContext":"Compact context","desktop.compacting":"Compacting...","desktop.compact":"Compact","desktop.changeToolPreset":"Change tool preset: {preset}","desktop.toolPreset":"Change tool preset","desktop.sendMessage":"Send message","desktop.stopAgent":"Stop agent","desktop.stop":"Stop","desktop.collapseControls":"Collapse controls","desktop.usePiDefault":"Use pi default","desktop.reasoningOff":"Reasoning off","desktop.minimalReasoning":"Minimal reasoning","desktop.lowReasoning":"Low reasoning","desktop.mediumReasoning":"Medium reasoning","desktop.highReasoning":"High reasoning","desktop.extraHighReasoning":"Extra-high reasoning","desktop.maxReasoning":"Max reasoning","desktop.noToolsReadOnly":"No tools, read-only","desktop.fourBuiltInTools":"4 built-in tools","desktop.allBuiltInTools":"All built-in tools","desktop.toolOff":"off","desktop.toolDefault":"default","desktop.toolFull":"full","desktop.thinkingAuto":"auto","desktop.thinkingOff":"off","desktop.thinkingMinimal":"minimal","desktop.thinkingLow":"low","desktop.thinkingMedium":"medium","desktop.thinkingHigh":"high","desktop.thinkingExtraHigh":"xhigh","desktop.thinkingMax":"max","desktop.compactCommandDescription":"Compress context, optionally with instructions","desktop.reloadCommandDescription":"Reload extensions, skills, prompts, and tools","desktop.nameCommandDescription":"Set the session display name","desktop.sessionCommandDescription":"Show session message, token, and cost stats","desktop.copyCommandDescription":"Copy the last assistant message","desktop.selectModel":"Select model","desktop.modelsLoadFailed":"Failed to load model list","desktop.noModelsConfigured":"No models configured — add a provider in Model settings","desktop.selectProject":"Select project","desktop.selectProjectFirst":"Select a project first","desktop.noMatchingProjects":"No matching projects","desktop.noProjectsYet":"No projects yet","desktop.useDefaultDirectory":"Use default directory","desktop.customPath":"Custom path…","desktop.projectPathPlaceholder":"/path/to/project","desktop.filterProjects":"Filter projects…","desktop.searchProjects":"Search projects…","desktop.recentProjects":"Recent Projects","desktop.addProjectTab":"Add project tab","desktop.maxProjectTabs":"Up to 4 project tabs (1 dropdown + 4 tabs)","desktop.branch":"Branch","desktop.editProjectAlias":"Rename project","desktop.projectAliasPlaceholder":"Add a remark for this project…","desktop.quickWorkspace":"Quick workspace","desktop.selectFolder":"Select folder","desktop.checking":"Checking…","desktop.open":"Open","common.ok":"OK","common.language":"Language","common.models":"Models","common.skills":"Skills","common.agents":"Sub-agents","common.plugins":"Plugins","common.settings":"Settings","settings.title":"Settings","settings.general":"General","settings.generalDescription":"Choose how Pi Web looks and which language it uses.","settings.appearance":"Appearance","settings.appearanceDescription":"Select a theme or follow your system preference.","settings.chatContentWidth":"Chat content width","settings.chatContentFontSize":"Chat font size","settings.resetChatContentWidth":"Reset chat content width","settings.resetChatContentFontSize":"Reset chat font size","settings.chatContentWidthDescription":"Set the maximum width of messages and the composer.","settings.themeLight":"Light","settings.themeDark":"Dark","settings.themeSystem":"System","settings.thinkingDisplay":"Thinking display","settings.thinkingDisplayDescription":"Choose whether model reasoning blocks are expanded when messages load.","settings.thinkingExpandedDefault":"Expand thinking blocks by default","settings.chat":"Chat","settings.quoteSelection":"Show actions for selected text","settings.languageDescription":"Choose the language used throughout the interface.","settings.shellTool":"Shell tool","settings.shellToolDescription":"Choose which shell the model uses for commands. Direct ! and !! commands still use Bash.","settings.usePowerShell":"Use PowerShell instead of Bash","settings.projectRequired":"Open a project to configure this section","skills.scope.global":"global","skills.scope.project":"project","skills.scope.path":"path","agents.close":"Close","agents.builtInTitle":"Enable Pi Web built-in sub-agents","agents.builtInDescription":"Provides Pi Web's integrated Agent tools and disables a conflicting pi-subagents extension.","agents.reloadRequired":"Reload the current session to apply this change.","agents.reloadSession":"Reload session","agents.maxConcurrent":"Concurrent sub-agents","agents.maxConcurrentDescription":"Maximum tasks running at once per parent session.","agents.reloading":"Reloading...","agents.loading":"Loading sub-agents...","agents.new":"New sub-agent","agents.empty":"Select or create a sub-agent profile","agents.saveScope":"Save to","agents.name":"Sub-agent ID","agents.displayName":"Display name","agents.description":"Description","agents.prompt":"System instructions","agents.tools":"Tools","agents.resources":"Resources","agents.loadSkills":"Load skills","agents.loadExtensions":"Load extensions","agents.model":"Model override","agents.modelsLoading":"Loading models...","agents.modelUnavailable":"{model} (unavailable)","agents.thinking":"Thinking","agents.maxTurns":"Max turns","agents.inherit":"Parent default","agents.enable":"Enable sub-agent","agents.disable":"Disable sub-agent","agents.builtinPath":"Built-in profile","agents.inheritContext":"Inherit parent context","agents.background":"Run in background by default","agents.duplicate":"Duplicate","agents.copyName":"{name} copy","agents.delete":"Delete","agents.deleteConfirm":"Delete {name}?","agents.save":"Save","agents.saving":"Saving...","agents.scope.builtin":"built-in","agents.scope.global":"global","agents.scope.workspace":"workspace","agents.scope.project":"project","agents.overridden":"Overridden","subagent.readOnlyNotice":"Sub-agent sessions are read-only","subagent.open":"Open sub-agent session","subagent.openTranscript":"View run in the side panel","subagent.transcriptTitle":"Sub-agent run","subagent.transcriptEmpty":"Nothing recorded yet.","subagent.transcriptWaiting":"Running — no output recorded yet.","subagent.transcriptLoading":"Loading run…","subagent.transcriptFailed":"Could not load this run: {error}","agentSwitcher.title":"Agents","agentSwitcher.main":"Main agent","agentSwitcher.subagent":"Sub-agent","agentSwitcher.current":"Current","agentSwitcher.count":"{count} sub-agents","agentSwitcher.runningCount":"{count} running","agentSwitcher.search":"Search agents","agentSwitcher.noFamily":"No agent family for this session","agentSwitcher.noMatches":"No matching agents","agentSwitcher.status.starting":"Starting","agentSwitcher.status.queued":"Queued","agentSwitcher.status.running":"Running","agentSwitcher.status.completed":"Completed","agentSwitcher.status.failed":"Failed","agentSwitcher.status.aborted":"Aborted","agentSwitcher.status.interrupted":"Interrupted","appUpdate.releaseNotes":"Pi Web v{version} is available. View release notes","sidebar.hide":"Hide sidebar","sidebar.show":"Show sidebar","theme.light":"Light mode (click for dark)","theme.dark":"Dark mode (click for system)","theme.auto":"System theme (click for light)","history.full":"Full history","history.unsaved":"Full history is available after the session is saved","history.label":"Full history","title.generating":"Generating...","title.updated":"Title updated","title.failed":"Generation failed","title.generate":"Generate title","title.unsaved":"Title generation is available after the session is saved","title.noMessages":"Send a message before naming this session","title.generateSession":"Generate a session title","system.prompt":"System prompt","system.empty":"System prompt is empty (tools are disabled)","system.load":"System prompt has not loaded yet","system.loading":"Loading system prompt…","system.label":"System","tools.label":"Tools","tools.title":"Tool definitions","tools.details":"Tool definition details","tools.load":"Tool definitions have not loaded yet","tools.loading":"Loading tool definitions…","tools.noTools":"No active tools","tools.description":"Description","tools.parameters":"Parameters","tools.parameterCount":"{count} parameters","tools.noParameters":"No parameters","tools.required":"Required","tools.optional":"Optional","tools.allowedValues":"Allowed","tools.defaultValue":"Default","tools.guidelines":"Prompt guidelines","session.info":"Session info","session.name":"Name","session.file":"Session File","session.inMemory":"In-memory","session.id":"ID","session.user":"User","session.assistant":"Assistant","session.toolCalls":"Tool Calls","session.toolResults":"Tool Results","session.total":"Total","session.input":"Input","session.output":"Output","session.cacheRead":"Cache Read","session.cacheWrite":"Cache Write","session.cost":"Cost","session.context":"Context","session.cacheHitRate":"Avg cache hit rate","session.copy":"Copy {value}","session.copied":"Copied","session.title":"Session info","session.load":"Send a message or run /session to load session info","session.infoSection":"Session Info","session.projectSection":"Project Info","session.messages":"Messages","session.tokens":"Tokens","session.totalActive":"Active Time","session.copyFile":"Copy file path","session.copyId":"Copy session ID","session.projectDir":"Project Dir","session.gitBranch":"Git Branch","session.gitWorktree":"Worktree","session.copyProjectDir":"Copy project directory","session.copyGitBranch":"Copy git branch","session.copyGitWorktree":"Copy worktree path","workspace.opening":"Opening workspace...","workspace.unable":"Unable to open workspace","workspace.selectSession":"Select a session from the sidebar","workspace.getStarted":"Get Started","workspace.selectProject":"Select a project directory from the sidebar","workspace.addModels":"Open Settings at the bottom, then choose Models","workspace.stepProject":"Select a project directory from the sidebar","workspace.stepModels":"Open Settings at the bottom, then choose Models","files.hidePanel":"Hide file panel","files.showPanel":"Show file panel","files.noneOpen":"No file open","layout.resizeSidebar":"Resize sidebar","layout.resizeFilePanel":"Resize file panel","layout.resizeHint":"Drag to resize. Double-click or press Enter to reset.","sidebar.new":"New","sidebar.newSessionTitle":"New session in {path}","sidebar.refresh":"Refresh","sidebar.selectProject":"Select project…","sidebar.filterProjects":"Filter projects…","sidebar.noMatchingProjects":"No matching projects","sidebar.searchFiles":"Search files","sidebar.searchFilesPlaceholder":"Search files…","sidebar.clearSearch":"Clear search","sidebar.searchingFiles":"Searching…","sidebar.noMatchingFiles":"No matching files","sidebar.useDefaultDirectory":"Use default directory","sidebar.customPath":"Custom path…","directoryPicker.selectDirectory":"Select directory","directoryPicker.goToParent":"Go to parent directory","directoryPicker.loadingDirectories":"Loading directories…","directoryPicker.noSubdirectories":"No subdirectories","directoryPicker.noMatchingDirectories":"No matching subdirectories","directoryPicker.filterPlaceholder":"Filter subdirectories…","directoryPicker.selectCurrentDirectory":"Select current directory","directoryPicker.selectThisFolder":"Select this folder","directoryPicker.noDrives":"No drives found","desktop.switchWorktree":"Switch worktree","desktop.switchWorktreeWithPath":"Switch worktree: {path}","desktop.openRepoRoot":"Open repo root","desktop.openRepoRootDescription":"Open the repository root to manage worktrees.","desktop.gitRepoRootOnly":"Git repo root only","desktop.gitRepoRootOnlyDescription":"Worktrees are available in Git repository roots.","desktop.checkingWorktrees":"Checking worktrees for this directory.","desktop.worktreesLoading":"Worktrees...","desktop.createWorktree":"Create a worktree checkout for a branch","desktop.newWorktree":"New worktree…","desktop.branchName":"branch name","desktop.creating":"Creating…","desktop.create":"Create","desktop.main":"main","desktop.removeWorktree":"Remove worktree checkout {path}; the branch is kept","desktop.uncommittedChanges":"Uncommitted changes. Force remove checkout?","desktop.force":"Force","desktop.sessions":"Sessions","desktop.newSession":"New","desktop.newSessionIn":"New session in {cwd}","desktop.refresh":"Refresh","desktop.loading":"Loading...","desktop.noModels":"No models available","desktop.noSessionsFound":"No sessions found","desktop.explorer":"Explorer","desktop.uploadFiles":"Upload files","desktop.uploadFilesToProjectRoot":"Upload files to project root","desktop.refreshExplorer":"Refresh explorer","desktop.agentRunningLabel":"Agent running","desktop.newActivity":"New activity","desktop.newSessionActivity":"New session activity","desktop.deleteSession":"Delete {title}?","desktop.delete":"Delete","desktop.deleteWithShift":"Delete (Shift-click to skip confirmation)","desktop.openingWorkspace":"Opening workspace…","desktop.unableToOpenWorkspace":"Unable to open this workspace","desktop.rename":"Rename","desktop.titleGenerationFailed":"Title generation failed","desktop.retryTitleGeneration":"Retry title generation","desktop.retry":"Retry","desktop.changeTitleModel":"Change model","desktop.pastedLabel":"[Pasted text #{id} \xb7 {lines} lines]","desktop.pastedShowPreview":"Preview pasted text","desktop.pastedHidePreview":"Collapse pasted text preview","desktop.pastedRemove":"Remove pasted text","desktop.pastedMissingContent":"A pasted-text placeholder lost its original content — send blocked. Please paste that content again.","desktop.generateTitle":"Generate title","desktop.generateAllTitles":"Generate titles for all sessions in this project","desktop.generatingTitlesProgress":"Generating titles… {done}/{total}","desktop.generatingTitle":"Generating title...","desktop.titleNeedsMessages":"No messages to generate a title from","desktop.expandForks":"Expand forks","desktop.collapseForks":"Collapse forks","desktop.sessionViewList":"List","desktop.sessionViewGroups":"Groups","desktop.searchSessions":"Search sessions, branches...","desktop.noSearchResults":"No matching sessions","desktop.pinned":"Pinned","desktop.today":"Today","desktop.yesterday":"Yesterday","desktop.older":"Older","desktop.collapseGroup":"Collapse","desktop.expandGroup":"Expand","desktop.pin":"Pin to top","desktop.unpin":"Unpin","desktop.forkedFrom":"Forked from {title}","desktop.messagesCount":"{count} msgs","desktop.worktree":"Worktree: {cwd}","desktop.justNow":"just now","desktop.minutesAgo":"{count}m ago","desktop.hoursAgo":"{count}h ago","desktop.daysAgo":"{count}d ago","desktop.panelGroupBubble":"Grouped","desktop.panelProjectBubble":"Projects","desktop.rowStyleToggle":"Toggle row style","desktop.sidebarModeCycle":"Cycle sidebar mode","desktop.panelFormLabel":"Panel","desktop.expandAllFolders":"Expand all folders","desktop.collapseAllFolders":"Collapse all folders","desktop.filterMenu":"Filter","desktop.moreActions":"More actions","desktop.viewSection":"View","desktop.viewByProject":"By project","desktop.viewTimeline":"Timeline","desktop.sortSection":"Sort by","desktop.sortUpdated":"Updated","desktop.sortCreated":"Created","desktop.hiddenProjectsSection":"Hidden projects","desktop.noHiddenProjects":"No hidden projects","desktop.restoreProject":"Restore","desktop.archivedView":"Archived","desktop.archiveSession":"Archive","desktop.archiveSessionConfirm":"Archive {title}?","desktop.unarchiveSession":"Unarchive","desktop.deleteForever":"Delete forever","desktop.deleteArchivedConfirm":"Permanently delete this archived session? Its file will be removed and this cannot be undone.","desktop.removeProject":"Remove project","desktop.removeProjectConfirm":"Project {name} will be removed from the sidebar, but files on disk are not deleted.","desktop.removeProjectRunningConfirm":"This project still has running sessions. Remove it anyway?","desktop.showMore":"Show more","desktop.viewFiles":"View files","desktop.backToSessions":"Back to sessions","desktop.newSessionHere":"New session in this project","desktop.newTask":"New task","desktop.showAllProjects":"Show all projects","desktop.showCurrentProject":"Show current project","desktop.sidebarModeHintTitle":"Two list layouts","desktop.sidebarModeHintDesc":"This button switches between the current-project dropdown and the all-projects panel (grouped / project / timeline views, archiving and per-project file trees).","desktop.sidebarModeHintOk":"Got it","desktop.noProjects":"No projects yet","desktop.noArchivedSessions":"No archived sessions","desktop.searchArchived":"Search archived sessions...","desktop.projectSectionHeader":"Projects","desktop.closeTab":"Close","desktop.closeTabWithLabel":"Close {label}","desktop.modelsHideApiKey":"Hide API key","desktop.modelsShowApiKey":"Show API key","desktop.modelsInheritNone":"— inherit / none —","desktop.modelsProvider":"Provider","desktop.modelsProviderName":"Provider name","desktop.modelsBaseUrl":"Base URL","desktop.modelsApiKey":"API Key","desktop.modelsApiKeyHelp":"Prefix with ! to run a shell command, or use an env var name","desktop.modelsApiKeyPlaceholder":"ENV_VAR_NAME, !shell-command, or literal key","desktop.modelsApi":"API","desktop.modelsDefault":"Default","desktop.modelsDisabled":"Disabled","desktop.modelsCustom":"Custom","desktop.modelsModelSection":"Model","desktop.modelsTestingConnection":"Testing model connection...","desktop.modelsConnected":"Connected","desktop.modelsFailed":"Failed","desktop.modelsTestConnection":"Test model connection","desktop.modelsTesting":"Testing…","desktop.modelsTest":"Test","desktop.modelsOk":"OK","desktop.modelsRemove":"Remove","desktop.modelsIdRequired":"ID *","desktop.modelsName":"Name","desktop.modelsDisplayName":"Display name","desktop.modelsApiOverride":"API override","desktop.modelsReasoningThinking":"Reasoning / thinking","desktop.modelsImageInput":"Image input","desktop.modelsDeepSeekCompat":"DeepSeek thinking compat","desktop.modelsThinkingLevelMap":"Thinking level map","desktop.modelsClearAll":"clear all","desktop.modelsDiscoveryFetching":"Importing models…","desktop.modelsDiscoveryFetch":"Import models…","desktop.modelsDiscoveryFilterPlaceholder":"Filter {count} models…","desktop.modelsDiscoveryFilter":"Filter upstream models","desktop.modelsDiscoverySelectShown":"Select shown","desktop.modelsDiscoveryNoMatches":"No matching models.","desktop.modelsDiscoveryAdded":"added","desktop.modelsDiscoveryShowing":"Showing first {shown} of {total}","desktop.modelsDiscoveryFetched":"{count} models fetched","desktop.modelsDiscoveryAddSelected":"Add selected","desktop.modelsDiscoveryAddSelectedCount":"Add selected ({count})","desktop.modelsCatalogSource":"source: models.dev ↗","desktop.modelsCatalogFilling":"Filling details…","desktop.modelsCatalogFill":"Fill model details","desktop.modelsCatalogFilled":"{count} fields filled","desktop.modelsCatalogNoEmptyFields":"No empty fields to fill","desktop.modelsCatalogNoExactMatch":"No exact models.dev match","desktop.modelsCatalogPriceProvider":"Price matched Provider {provider}","desktop.modelsCatalogPriceBaseUrl":"Price matched Base URL to {provider}","desktop.modelsCatalogPriceConsensus":"Price agreed by {support}/{total} records","desktop.modelsCatalogPriceUnreliable":"No reliable price found","desktop.modelsCatalogUndo":"Undo","desktop.modelsContextWindow":"Context window (tokens)","desktop.modelsMaxOutputTokens":"Max output tokens","desktop.modelsCostPerMillionTokens":"Cost (per million tokens)","desktop.modelsSubscription":"Subscription","desktop.titleModel":"Title generation model","desktop.titleModelDescription":'Model used to auto-generate session titles. Keep "Follow session model" to use each session\'s own model.',"desktop.titleModelFollowSession":"Follow session model (default)","desktop.titleModelInvalid":"no longer imported — title generation falls back to the session model","desktop.titleModelSaved":"Saved","desktop.titleModelSaveError":"Failed to save title model setting","desktop.modelsNotConnected":"not connected","desktop.modelsAlreadyConnected":"Already connected. You can re-login or disconnect.","desktop.modelsConnectAccount":"Connect your {provider} account.","desktop.modelsOpeningBrowser":"Opening browser…","desktop.modelsCompleteSignIn":"Complete sign-in in the browser, then copy the redirect URL from the address bar and paste it below.","desktop.modelsBrowserDidNotOpen":"If the browser window did not open,","desktop.modelsOpenLoginPage":"click here to open the login page","desktop.modelsEnterValue":"Enter value…","desktop.modelsOpenVerificationPage":"Open the verification page and enter this code:","desktop.modelsExpiresInMinutes":"Expires in {count} minutes.","desktop.modelsConnectedSuccessfully":"Connected successfully.","desktop.modelsReLogin":"Re-login","desktop.modelsLogin":"Login","desktop.modelsDisconnect":"Disconnect","desktop.modelsConnectionLost":"Connection lost","desktop.modelsAuthenticationStateChanged":"Authentication state changed. Please refresh and try again.","providerUsage.usage":"Usage","providerUsage.notQueried":"Not queried","providerUsage.refresh":"Refresh usage","providerUsage.refreshing":"Refreshing usage","providerUsage.updated":"Updated {time}","providerUsage.queryFailed":"Usage query failed.","providerUsage.available":"Available","desktop.modelsVerifying":"Verifying…","desktop.modelsContinuing":"Continuing…","desktop.modelsServerError":"Server error {status}","desktop.modelsNetworkError":"Network error","desktop.modelsConfigured":"configured","desktop.modelsNotConfigured":"not configured","desktop.modelsApiKeyStored":"API key is stored. Enter a new key below to replace it, or disconnect to remove it.","desktop.modelsEnableModels":"Enter your {provider} API key to enable {count} {models}.","desktop.modelsSingular":"model","desktop.modelsPlural":"models","desktop.modelsEnterNewKey":"Enter new key to replace…","desktop.modelsSaving":"Saving…","desktop.modelsSaved":"Saved","desktop.modelsRemoving":"Removing…","desktop.modelsSearchProviders":"Search providers…","desktop.modelsNoProvidersMatch":"No providers match","desktop.modelsCompatibleProvider":"OpenAI / Anthropic compatible","desktop.modelsCustomEndpointFormat":"Custom endpoint format","desktop.modelsAddCustomTitle":"Add custom provider","desktop.modelsProviderNameOptional":"Provider name (optional)","desktop.modelsCallFormat":"Call format","desktop.modelsCallFormatHelp":"Choose one of the existing call formats","desktop.modelsCustomCallFormat":"Custom call format","desktop.modelsCustomCallFormatHelp":"Custom endpoints use the OpenAI-compatible protocol (openai-completions) by default. Pick another format above if your API speaks a different protocol.","desktop.modelsFullUrl":"Full URL","desktop.modelsAddModelManual":"Add model","desktop.modelsImportProvider":"Import from existing provider","desktop.modelsImportProviderPlaceholder":"— import existing provider config —","desktop.modelsImported":"imported","desktop.modelsAddUrl":"+ Add URL","desktop.modelsUrlPlaceholder":"https://api.example.com/v1","desktop.modelsUrlInvalid":"URL must start with http:// or https://","desktop.modelsCustomRequest":"Custom request","desktop.modelsRequestModelId":"Request model ID","desktop.modelsRequestModelIdHelp":"Optional — creates the first model with these request settings","desktop.modelsRequestContextLength":"Context length (tokens)","desktop.modelsRequestOutputLength":"Output length (tokens)","desktop.modelsAdd":"Add","desktop.modelsSubscriptions":"Subscriptions","desktop.modelsCount":"{count} models","desktop.modelsLoading":"Loading…","desktop.modelsNewModel":"new model","desktop.modelsAddModel":"+ model","desktop.modelsAddProvider":"+ Add provider","desktop.modelsSelectProviderOrModel":"Select a provider or model","desktop.modelsClose":"Close models","desktop.modelsSave":"Save","desktop.searchModels":"Search models…","desktop.noModelsMatch":"No matching models","desktop.global":"global","desktop.project":"project","desktop.path":"path","desktop.addPlugin":"Add plugin","desktop.addPluginTitle":"Add Plugin","desktop.pluginSource":"Source","desktop.install":"Install","desktop.installing":"Installing...","desktop.examples":"Examples","desktop.disabled":"Disabled","desktop.filtered":"filtered","desktop.noResources":"No resources","desktop.packageDisabled":"Package disabled","desktop.noResolvedResources":"No resolved resources","desktop.unknown":"Unknown","desktop.installedVersion":"installed {version}","desktop.configuredVersion":"configured {version}","desktop.enablePackage":"Enable package","desktop.disablePackage":"Disable package","desktop.update":"Update","desktop.updating":"Updating...","desktop.reloadSession":"Reload session","desktop.reloading":"Reloading...","desktop.reloadCurrentSession":"Reload current session","desktop.openSessionToReload":"Open a session to reload","desktop.remove":"Remove","desktop.removing":"Removing...","desktop.status":"Status","desktop.version":"Version","desktop.package":"Package","desktop.resources":"Resources","desktop.installedPath":"Installed path","desktop.notFound":"Not found","desktop.cwd":"Cwd","desktop.resolvedResources":"Resolved Resources","desktop.packageRemoved":"Package removed.","desktop.packageInstalled":"Package installed.","desktop.packageUpdated":"Package updated.","desktop.packageDisabledMessage":"Package disabled.","desktop.packageEnabled":"Package enabled.","desktop.sessionReloaded":"Session reloaded.","desktop.noPluginsConfigured":"No plugins configured","desktop.selectPackage":"Select a package","desktop.diagnosticsCount":"{count} diagnostic{suffix}","desktop.pluginResourceTotals":"{extensions} ext \xb7 {skills} skills \xb7 {prompts} prompts \xb7 {themes} themes","desktop.extensionsCount":"{count} ext","desktop.skillsCount":"{count} skills","desktop.promptsCount":"{count} prompts","desktop.themesCount":"{count} themes","desktop.addSkill":"Add skill","desktop.addSkillTitle":"Add Skill","desktop.skillSearchPlaceholder":"e.g. react, testing, deploy","desktop.noSkillsFound":"No skills found","desktop.skillSearchHint":"Search skills.sh to discover and install skills for your agent.","desktop.visibleInModelPrompt":"Visible in model prompt — click to disable","desktop.hiddenFromModelPrompt":"Hidden from model prompt — click to enable","desktop.dormant":"Dormant","desktop.hiddenButInvocable":"Hidden from the model, still manually invocable","desktop.check":"Check","desktop.upToDate":"Up to date","desktop.automaticChecksUnavailable":"Automatic checks unavailable","desktop.checkFailed":"Check failed","desktop.name":"Name","desktop.description":"Description","desktop.selectSkill":"Select a skill","desktop.checkUpdates":"Check updates","desktop.updateAvailable":"Update available","desktop.installed":"Installed","desktop.updatesCount":"{count} update{suffix}","desktop.downloadFile":"Download file","desktop.loadingFile":"Loading...","desktop.noChanges":"No changes","desktop.unchangedLines":"... {count} unchanged lines ...","desktop.lines":"{count} lines","desktop.mentionFile":"Mention file","desktop.mentionSelectedLines":"Mention selected lines {start}-{end}","desktop.source":"Source","desktop.diff":"Diff","desktop.enableWordWrap":"Enable word wrap","desktop.disableWordWrap":"Disable word wrap","desktop.wrap":"wrap","desktop.code":"Code","desktop.preview":"Preview","desktop.raw":"Raw","desktop.htmlPreview":"HTML preview","desktop.image":"image","desktop.audio":"audio","desktop.docxPreview":"docx preview","desktop.failedToLoadImage":"Failed to load image","desktop.failedToLoadAudio":"Failed to load audio","desktop.docxTooLargeForPreview":"DOCX too large for preview (>10MB)","desktop.previewFile":"Preview {file}","desktop.branches":"Branches","desktop.noActiveSession":"No active session","desktop.sessionHasNoBranches":"No branches yet — use Edit from here or Fork on a message to create one","desktop.copyMessage":"Copy message","desktop.copyPlainText":"Copy as plain text","desktop.createTaskFromMessage":"Create task from message","desktop.editFromHere":"Edit from here — branches within this session","desktop.creatingNewSession":"Creating new session…","desktop.newSessionFromHere":"New session — creates an independent copy from here","desktop.estimatedStreamingTokenCount":"Estimated token count while streaming","desktop.tokensPerSecond":"{count} t/s","desktop.thinkingContentUnavailable":"Thinking content unavailable","desktop.loadingThinking":"Loading thinking...","desktop.conversationCompacted":"Conversation compacted","desktop.compactionSummaryDescription":"The conversation history before this point was compacted into the following summary:","desktop.noSummary":"(no summary)","desktop.fileContext":"File context: {context}","desktop.readFilesCount":"{count} read","desktop.modifiedFilesCount":"{count} modified","desktop.modifiedFiles":"Modified files","desktop.readFiles":"Read files","desktop.hiddenExtensionMessage":"hidden extension message","desktop.noMessage":"(no message)","desktop.showExtensionMessage":"Show extension message","desktop.copied":"Copied","desktop.copy":"Copy","desktop.collapse":"Collapse","desktop.expand":"Expand","desktop.hideDetails":"Hide details","desktop.showDetails":"Show details","desktop.before":"Before","desktop.after":"After","desktop.noOutput":"(no output)","desktop.extension":"extension","desktop.assistant":"assistant","desktop.favorites":"Favorites","desktop.favorite":"Favorite","desktop.unfavorite":"Unfavorite","desktop.processStepThinking":"Thinking","desktop.processStepFileRead":"Read","desktop.processStepFileCreate":"Create","desktop.processStepFileEdit":"Edit","desktop.processStepFileDelete":"Delete","desktop.processStepSearch":"Search","desktop.processStepFind":"Find","desktop.processStepList":"List","desktop.processStepRead":"Read","desktop.processStepFetch":"Fetch","desktop.processStepDelete":"Delete","desktop.processStepCopy":"Copy","desktop.processStepCommand":"Run","desktop.processStepTool":"Tool","desktop.processStepTodo":"Todo","desktop.processStepArtifact":"Artifact","desktop.processStepCompaction":"Compaction","desktop.processStepError":"Error","desktop.processWorking":"Working...","desktop.processUsed":"Used {summary}","desktop.processToolCount":"{count} tool","desktop.processToolsCount":"{count} tools","desktop.processFailedCount":" ({failed} failed)","desktop.processThoughtCount":"{count} thought","desktop.processThoughtsCount":"{count} thoughts","desktop.processThoughtDone":"Thought {duration}s","desktop.processThoughtDoneNoDuration":"Thought","desktop.processCustomCount":"{count} event","desktop.processCustomsCount":"{count} events","desktop.processCompleted":"Process complete","desktop.processOutput":"Process output","desktop.processTabMode":"Tab mode","desktop.processTimelineMode":"Timeline mode","desktop.processFailedStep":"failed","desktop.markdownPreviewAvailableAfterStreaming":"Preview available after streaming","desktop.markdownPreviewMermaidDiagram":"Preview Mermaid diagram","desktop.markdownInvalidMermaidDiagram":"Invalid Mermaid diagram","desktop.markdownRenderingMermaidDiagram":"Rendering Mermaid diagram","desktop.openMermaidViewer":"Open Mermaid viewer","desktop.mermaidDiagram":"Mermaid diagram","desktop.mermaidViewer":"Mermaid diagram viewer","desktop.zoomPanHint":"Drag to pan \xb7 Scroll to zoom","desktop.selectText":"Select text","desktop.zoomOut":"Zoom out","desktop.resetZoom":"Reset to 100% (fit)","desktop.zoomIn":"Zoom in","desktop.fitToViewport":"Fit to viewport","desktop.quoteReply":"Quote reply","desktop.quoteReplyHint":"Click to quote reply","desktop.openFile":"Open","desktop.queueRecoveryTitle":"Recover queued messages","desktop.queueImportTitle":"Imported queued messages","desktop.queueRecoveryDescription":"These messages were saved before the previous server session ended. Choose what to re-queue; nothing is sent automatically.","desktop.queueImportDescription":"Choose which imported messages to re-queue. Nothing is sent automatically.","desktop.selectAll":"Select all","desktop.selectNone":"Select none","desktop.import":"Import","desktop.queueImages":"Image attachment","desktop.queueNoText":"(image-only message)","desktop.queueExported":"Exported {count} message(s)","desktop.queueImportEmpty":"No valid queued messages found","desktop.queueImported":"Imported {count} message(s) for review","desktop.dismiss":"Dismiss","desktop.discard":"Discard","desktop.requeue":"Re-queue","desktop.requeueAndContinue":"Re-queue & continue","desktop.markdownPlainText":"text","desktop.hideTaskBoard":"Hide task board","desktop.showTaskBoard":"Show task board","tasks.actionArchive":"Archive","tasks.actionCancel":"Cancel","tasks.actionEdit":"Edit","tasks.actionMerge":"Merge","tasks.stashDone":"Changes stashed successfully","tasks.actionRequeue":"Re-queue","tasks.actionRetry":"Retry","tasks.actionReturn":"Return with feedback","tasks.actionStart":"Start","tasks.actionComplete":"Complete","tasks.actionUnarchive":"Unarchive","tasks.actionViewSession":"View session","tasks.allFolders":"All projects","tasks.archiveAllDone":"Archive all","tasks.badgeCleanupFailed":"cleanup failed","tasks.badgeWorktreeKept":"worktree kept","tasks.beta":"Beta","tasks.cancelDescription":"The task will stop. You can leave a reason for whoever requeues it later (optional).","tasks.cancelKeep":"Keep task","tasks.cancelReasonLabel":"Cancel reason (optional)","tasks.cancelReasonPlaceholder":"e.g. wrong approach, requirements changed…","tasks.cancelSubmit":"Cancel task","tasks.cancelTitle":"Cancel task","tasks.changedFiles":"Changed files","tasks.colAttention":"Attention","tasks.colDone":"Done","tasks.colInProgress":"In progress","tasks.colTodo":"Todo","tasks.delete":"Delete","tasks.deleteConfirm":"Delete","tasks.deleteTemplate":"Delete template","tasks.deleteWorktree":"Also delete the worktree","tasks.diff":"Diff","tasks.dropToStart":"Drop to start","tasks.editTitle":"Edit task","tasks.empty":"No tasks yet","tasks.emptyColAttention":"Nothing needs you","tasks.emptyColDone":"Nothing completed yet","tasks.emptyColInProgress":"Nothing running","tasks.emptyColTodo":"No pending tasks","tasks.emptyHint":"Create a task and the board walks it through execution — start it and a worktree branch runs the agent to completion.","tasks.errorView":"View","tasks.event_archived":"archived","tasks.event_canceled":"canceled","tasks.event_created":"created","tasks.event_failed":"failed","tasks.event_interrupted":"interrupted","tasks.event_merge_failed":"merge failed","tasks.event_merge_requested":"merge requested","tasks.event_merged":"merged","tasks.event_merging":"merging","tasks.event_preflight_failed":"preflight failed","tasks.event_preflight_passed":"preflight passed","tasks.event_preflight_start":"preflight running","tasks.event_preparing":"preparing","tasks.event_queued":"queued","tasks.event_recovered":"recovered","tasks.event_requeued":"re-queued","tasks.event_return_feedback":"feedback","tasks.event_returned":"returned","tasks.event_review":"review","tasks.event_started":"started","tasks.event_unarchived":"unarchived","tasks.event_updated":"updated","tasks.fieldProject":"Project","tasks.fieldPrompt":"Prompt","tasks.fieldPromptPlaceholder":"Describe the work the agent should complete…","tasks.fieldTitle":"Title","tasks.fieldTitlePlaceholder":"Short title for the task","tasks.filter":"Filter","tasks.loading":"Loading…","tasks.mergeAutoMessage":"Let the agent write the commit message","tasks.mergeConfirm":"Merge","tasks.mergeDeleteWorktree":"Delete the worktree after merging","tasks.mergeManualMessage":"Provide a commit message","tasks.mergeMessagePlaceholder":"Commit message…","tasks.mergeStrategyMerge":"Merge commit","tasks.mergeStrategySquash":"Squash","tasks.mergeTitle":"Merge task","tasks.completeDeleteWorktree":"Delete worktree on completion","tasks.completeDescription":"This task produced no file changes, so there is nothing to merge. Confirm to mark it done.","tasks.completeSubmit":"Complete","tasks.completeTitle":"Complete task","tasks.followUpPlaceholderRequeue":"Note for the agent (optional)…","tasks.followUpPlaceholderRetry":"Note for the agent (optional)…","tasks.actionAddNote":"Note (optional)","tasks.restartDescription":"The note is injected into the next run's prompt (optional).","tasks.restartTitleRequeue":"Requeue","tasks.restartTitleRetry":"Retry","tasks.planReviewTitle":"Plan complete","tasks.planReviewDescription":"The plan-mode analysis has finished. Confirm to execute the plan, send suggestions for another pass, or exit plan mode.","tasks.planReviewShowPlan":"View plan","tasks.planReviewHidePlan":"Collapse plan","tasks.planReviewExecute":"Execute","tasks.planReviewExecutePrompt":"Please execute the following plan:\n\n{plan}","tasks.planReviewSuggest":"Suggest","tasks.planReviewSendFeedback":"Send suggestions","tasks.planReviewFeedbackLabel":"Suggestions (sent back to the agent to refine the plan)","tasks.planReviewFeedbackPlaceholder":"e.g. add risk analysis first, split into smaller steps…","tasks.planReviewExit":"Exit plan mode","tasks.metaCommit":"Commit","tasks.metaCreated":"Created","tasks.metaProject":"Project","tasks.new":"New task","tasks.newTitle":"New task","tasks.noDiff":"No diff available","tasks.noEvents":"No events yet","tasks.notifyFailed":"{title} failed","tasks.notifyReview":"{title} is ready for review","tasks.returnPlaceholder":"Feedback for the agent…","tasks.returnSubmit":"Send back","tasks.save":"Save","tasks.saveAsTemplate":"Save as template","tasks.sessionFile":"Session file","tasks.sessionHint":"The task's agent conversation is stored like any other session. Open it from the sessions list to read or continue it.","tasks.sessionId":"Session id","tasks.sessionTitle":"Task session","tasks.settingsAutoProcess":"Auto-process queued tasks","tasks.settingsDeleteWorktree":"Delete worktree after merge (default)","tasks.settingsInitCommand":"Init command (run in the worktree before the agent)","tasks.settingsInitPlaceholder":"e.g. pnpm install","tasks.settingsMaxConcurrent":"Max concurrent tasks (0 = unlimited)","tasks.settingsMergeStrategy":"Merge strategy","tasks.settingsNoProject":"Create a task first to pick a project.","tasks.settingsPreflightCommand":"Preflight command (acceptance check)","tasks.settingsPreflightPlaceholder":"e.g. npm test","tasks.settingsProject":"Project","tasks.settingsReset":"Reset to defaults","tasks.settingsStagePrompts":"Stage prompts (extra instructions)","tasks.settingsTitle":"Task settings","tasks.showArchived":"Show archived","tasks.showCanceled":"Show canceled","tasks.stage_merge":"Merge","tasks.stage_retry":"Retry","tasks.stage_return":"Return","tasks.stage_work":"Work","tasks.startAll":"Start all","tasks.statusAwaitingInput":"Awaiting input","tasks.statusCanceled":"Canceled","tasks.statusDone":"Done","tasks.statusFailed":"Failed","tasks.statusInterrupted":"Interrupted","tasks.statusMerging":"Merging","tasks.statusPreparing":"Preparing","tasks.statusQueued":"Queued","tasks.statusReview":"Review","tasks.statusRunning":"Running","tasks.statusTodo":"Todo","tasks.templateNamePlaceholder":"Template name…","tasks.templates":"Templates","tasks.timeline":"Timeline","tasks.title":"Tasks","tasks.attentionBadge":"needs you","sidebar.checking":"Checking…","sidebar.open":"Open","sidebar.cancel":"Cancel","sidebar.openRepoRoot":"Open repo root","sidebar.openRepoRootTitle":"Open the repository root to manage worktrees.","sidebar.gitRepoRootOnly":"Git repo root only","sidebar.gitRepoRootOnlyTitle":"Worktrees are available in Git repository roots.","sidebar.worktrees":"Worktrees...","sidebar.checkingWorktrees":"Checking worktrees for this directory.","sidebar.filterWorktrees":"Filter worktrees…","sidebar.noMatchingWorktrees":"No matching worktrees","sidebar.switchWorktree":"Switch worktree","sidebar.switchWorktreeTitle":"Switch worktree: {path}","sidebar.main":"main","sidebar.forceRemoveCheckout":"Uncommitted changes. Force remove checkout?","sidebar.force":"Force","sidebar.createWorktreeTitle":"Create a worktree checkout for a branch","sidebar.newWorktree":"New worktree…","sidebar.branchName":"branch name","sidebar.creating":"Creating…","sidebar.create":"Create","sidebar.uploadFilesTitle":"Upload files to project root","sidebar.uploadFiles":"Upload files","sidebar.refreshExplorer":"Refresh explorer","sidebar.searchSessions":"Search all conversations...","sidebar.toggleSessionSearch":"Search conversations","sidebar.sessionSearching":"Searching...","sidebar.sessionSearchEmpty":"No matching conversations","sidebar.sessionSearchCount":"{count} matching conversations","sidebar.sessionSearchPartial":"Search limit reached. Results may be incomplete.","sidebar.sessionSearchFailed":"Could not search conversations","sidebar.changedFiles":"{count} changed files","sidebar.loading":"Loading...","sidebar.noSessions":"No sessions found","sidebar.agentRunning":"Agent running…","sidebar.newActivity":"New activity","sidebar.newSessionActivity":"New session activity","sidebar.deleteSession":"Delete {title}?","sidebar.rename":"Rename","sidebar.delete":"Delete","sidebar.deleteWithShiftClick":"Delete (Shift+click to delete without confirmation)","sidebar.messagesCount":"{count} msgs","sidebar.worktreePath":"Worktree: {path}","sidebar.removeWorktreeTitle":"Remove worktree checkout {path}; the branch is kept","files.modified":"Modified","files.added":"Added","files.deleted":"Deleted","files.renamed":"Renamed","files.untracked":"Untracked","files.conflict":"Conflict","files.newlyUploaded":"Newly uploaded","files.containsChangedFiles":"Contains changed files","files.insertPath":"Insert path into chat","files.mention":"mention","files.download":"Download file","files.dismissError":"Dismiss error","files.addUploadedFile":"Add uploaded file to chat","files.addAllUploadedFiles":"Add all uploaded files to chat","files.dismissUploadResults":"Dismiss upload results","files.loading":"Loading files...","files.noFiles":"No files found","files.explorer":"Explorer","files.changedCount":"{count} files","files.changeStats":"{count} changed files, {additions} lines added, {deletions} lines deleted","files.conflictSummary":"{count} file{countSuffix} already exist: {files}","files.cannotReplace":"Cannot replace: {files}","files.replace":"Replace","files.skipExisting":"Skip existing","files.cancel":"Cancel","files.checking":"Checking files","files.uploading":"Uploading, {progress}%","files.edit":"Edit","files.save":"Save","files.saveHint":"Save (Cmd/Ctrl+S)","files.cancelEdit":"Cancel edit","files.saveFailed":"Save failed: {error}","files.unsavedChanges":"Discard unsaved changes?","files.externalModified":"This file was modified outside the editor. Reload to load the latest version.","files.reload":"Reload","files.reloadOverwriteConfirm":"Overwrite your unsaved edits with the version on disk?","files.newFile":"New file","files.newFolder":"New folder","files.delete":"Delete","files.promptFileName":"File name","files.promptFolderName":"Folder name","files.confirmDeleteFile":'Delete "{name}"? This cannot be undone.',"files.confirmDeleteDirectory":'Delete "{name}" and all its contents? This cannot be undone.',"chat.loadingSession":"Loading session...","chat.runningTool":"Running tool...","chat.generatingToolInput":"Generating parameters...","chat.runningNamedTool":"Running {name}...","chat.runningTools":"Running {names}...","chat.runningToolsMore":"Running {names} (+{count})...","chat.waitingModel":"Waiting for model...","chat.runningCommand":"Running command...","chat.thinking":"Thinking...","chat.processDetails":"Process details","chat.message":"message","chat.messages":"messages","chat.toolCall":"tool call","chat.toolCalls":"tool calls","chat.collapseProcess":"Collapse process details","chat.expandProcess":"Expand process details","chat.filesWritten":"Files changed","chat.openWrittenFile":"Open {name}","chat.loadEarlier":"Scroll up to load earlier messages","chat.extensionRequest":"extension request","chat.extensionExpiresIn":"expires in {seconds}s","chat.extensionPending":"Awaiting response","chat.extensionCollapse":"Collapse","chat.extensionExpand":"Expand","chat.cancel":"Cancel","chat.confirm":"Confirm","chat.submit":"Submit","chat.extensionInput":"Extension terminal input","chat.extensionPanel":"Extension panel","chat.extensionWidgets":"Extension widgets","chat.extensionWidgetAbove":"Above editor widget","chat.extensionWidgetBelow":"Below editor widget","chat.extensionWidgetLine":"{count} line","chat.extensionWidgetLines":"{count} lines","chat.close":"Close","chat.queued":"Queued \xb7 {count}","chat.recall":"Recall to input","chat.recallTitle":"Remove all queued messages and put them back into the input box for editing","chat.retrying":"Retrying ({attempt}/{max})…","chat.loadingCommands":"Loading commands...","chat.slashCommands":"Slash commands \xb7 {label}","chat.tabEnter":"Tab / Enter","chat.noCommands":"No extension, prompt, or skill commands found","chat.match":"1 match","chat.matches":"{count} matches","chat.command":"1 command","chat.commands":"{count} commands","chat.loadingFiles":"Loading files...","chat.files":"Files \xb7 {label}{hint}","chat.searching":"Searching…","chat.noMatchingFiles":"No matching files","chat.searchingAll":" \xb7 searching all files…","chat.indexTruncated":" \xb7 index truncated","chat.steerPlaceholder":"Steer now / queue follow-up...","chat.agentPlaceholder":"Agent is running…","chat.messagePlaceholder":"Message… Type / for commands, @ for files","chat.steer":"Steer","chat.followUp":"Follow-up","chat.steerHint":"Interrupt the current run and inject this message now","chat.followUpHint":"Queue this message after the agent finishes","chat.inputHistory":"Input history","chat.modelError":"Model error","chat.modelScopeWarning":"Model scope warning","chat.modelScopeWarnings":"Model scope warnings","chat.send":"Send","chat.askSelection":"Ask about selected text","chat.askInCurrent":"Ask here","chat.askInNewChat":"Ask in new chat","chat.newQuoteChat":"New chat about selected text","chat.quoteIntro":"About this passage:","chat.quoteQuestion":"My question:","chat.quoteForkFailed":"Unable to create a branch from this message.","chat.attachImage":"Attach image","chat.previewImage":"Preview image","chat.filterModels":"Filter models…","chat.noMatchingModels":"No matching models","chat.moreControls":"More controls","chat.collapseControls":"Collapse controls","chat.shell":"Shell","terminal.title":"Terminal","terminal.tabLabel":"Terminal: {name}","terminal.open":"Open workspace terminal","terminal.close":"Terminate terminal","terminal.restart":"Restart terminal","terminal.reconnect":"Reconnect terminal","terminal.connecting":"Connecting","terminal.ready":"Connected","terminal.exited":"Terminal closed","terminal.error":"Connection error","terminal.exitCode":"Process exited with code {code}","chat.outputLocal":"output stays local","chat.outputModel":"output sent to model","chat.chatOnly":"Chat only","chat.readOnlyTools":"{count} read-only built-in tools","chat.builtInTools":"{count} built-in tools","chat.allBuiltInTools":"All built-in tools","chat.changeReasoning":"Change reasoning level: {level}","chat.changeReasoningLabel":"Change reasoning level","chat.changeToolPreset":"Change tool preset","chat.stopCompaction":"Stop compaction","chat.compactContext":"Compact context","chat.compacting":"Compacting…","chat.compact":"Compact","chat.stopAgent":"Stop agent","chat.stop":"Stop","chat.disableSound":"Disable completion sound","chat.enableSound":"Enable completion sound","chat.thinkingUseDefault":"Use pi default","chat.thinkingOff":"Reasoning off","chat.thinkingMinimal":"Minimal reasoning","chat.thinkingLow":"Low reasoning","chat.thinkingMedium":"Medium reasoning","chat.thinkingHigh":"High reasoning","chat.thinkingXhigh":"Extra-high reasoning","chat.thinkingMax":"Max reasoning","chat.builtIn":"Built-in","chat.extensions":"Extensions","chat.prompts":"Prompts","chat.skills":"Skills","chat.dormant":"dormant","chat.commandCompact":"Compress context, optionally with instructions","chat.commandReload":"Reload extensions, skills, prompts, and tools","chat.commandName":"Set the session display name","chat.commandSession":"Show session message, token, and cost stats","chat.commandCopy":"Copy the last assistant message","chat.commandClone":"Clone the current branch into a new session","chat.compacted":"Compacted","chat.imageNotSupportedTitle":"Images may not be sent","chat.imageNotSupportedBody":"The selected model ({model}) does not support image input. The attached images will likely be ignored.","chat.tokensSaved":"{saved} saved","i18n.copy":"Copy","i18n.copied":"Copied","i18n.save":"Save","i18n.saving":"Saving…","i18n.saved":"Saved","i18n.remove":"Remove","i18n.removing":"Removing…","i18n.delete":"Delete","i18n.loading":"Loading...","i18n.loadMore":"Load more","auth.brand":"Pi Agent Web","auth.prompt":"Sign in to continue","auth.password":"Password","auth.logIn":"Sign in","auth.loggingIn":"Signing in...","auth.invalidPassword":"Incorrect password","auth.loginFailed":"Sign-in failed. Please try again.","auth.cookieNotSaved":"The password was accepted, but the browser refused to save the session cookie. Allow cookies for this site or leave private/incognito mode, then try again.","auth.sessionExpired":"Your session expired — enter the password again.","auth.sessionMissing":"The browser did not return this site's session cookie: private/incognito browsing, or the site's data was cleared (Safari tracking prevention and clear-on-exit both cause this).","auth.logOut":"Sign out","auth.loggingOut":"Signing out...","auth.logoutFailed":"Sign-out failed. Please try again.","i18n.search":"Search","i18n.refresh":"Refresh","i18n.update":"Update","i18n.updating":"Updating...","i18n.check":"Check","i18n.install":"Install","i18n.installing":"Installing...","i18n.noResults":"No results","i18n.searchProviders":"Search providers…","i18n.noProviders":"No providers match","i18n.newModel":"new model","i18n.addProvider":"Add provider","i18n.selectProviderModel":"Select a provider or model","i18n.visibleInPrompt":"Visible in model prompt — click to disable","i18n.hiddenFromPrompt":"Hidden from model prompt — click to enable","i18n.dormant":"Dormant","i18n.hiddenButInvocable":"Hidden from model, still manually invocable","i18n.skillSearchPlaceholder":"e.g. react, testing, deploy","i18n.searching":"Searching…","i18n.noSkills":"No skills found","i18n.checkUpdates":"Check updates","i18n.updates":"updates","i18n.noResolvedResources":"No resolved resources","i18n.enablePackage":"Enable package","i18n.disablePackage":"Disable package","i18n.filtered":"filtered","i18n.openSessionToReload":"Open a session to reload","i18n.notFound":"Not found","i18n.noPlugins":"No plugins configured","trust.resourcesNotLoaded":"Restricted mode","trust.trustProject":"Trust project","trust.trusting":"Trusting...","trust.cancel":"Cancel","trust.dialogTitle":"Trust this project?","trust.dialogBody":"Project resources can run local code. Trust only projects whose contents you know.","trust.skillsNotLoaded":"Project skills are not loaded because this project is not trusted.","trust.pluginsNotLoaded":"Project plugins are not loaded because this project is not trusted.","trust.projectScopeUnavailable":"Project installs are unavailable while project resources are not loaded.","i18n.creatingSession":"Creating new session…","i18n.creating":"Creating…","i18n.subscription":"Subscription","i18n.subscriptions":"Subscriptions","i18n.customEndpoint":"Custom endpoint format","i18n.noChanges":"No changes","i18n.branches":"Branches","i18n.noActiveSession":"No active session","i18n.noBranches":"This session has no branches","i18n.source":"Source","i18n.preview":"Preview","i18n.diff":"Diff","i18n.downloadFile":"Download file","i18n.liveSync":"Live sync active","i18n.notWatching":"Not watching","i18n.fileViewMode":"File view mode","i18n.compareHead":"Compare working tree with HEAD","i18n.mentionSelectedLines":"Mention selected lines","i18n.disableWrap":"Disable word wrap","i18n.enableWrap":"Enable word wrap","i18n.htmlPreview":"HTML preview","i18n.previewFile":"Preview {file}","i18n.invalidMermaid":"Invalid Mermaid diagram","i18n.renderingMermaid":"Rendering Mermaid diagram","i18n.previewAfterStreaming":"Preview available after streaming","i18n.showMermaidSource":"Show Mermaid source","i18n.previewMermaid":"Preview Mermaid diagram","i18n.openMermaidViewer":"Open diagram viewer","i18n.mermaidViewer":"Mermaid diagram viewer","i18n.mermaidDiagram":"Mermaid diagram","i18n.zoomOut":"Zoom out","i18n.zoomIn":"Zoom in","i18n.fitToWidth":"Fit to width","models.discoveryFetching":"Importing models…","models.discoveryFetch":"Import models…","models.discoveryFilterPlaceholder":"Filter {count} models…","models.discoveryFilter":"Filter upstream models","models.discoverySelectShown":"Select shown","models.discoveryNoMatches":"No matching models.","models.discoveryAdded":"added","models.discoveryShowing":"Showing first {shown} of {total}","models.discoveryFetched":"{count} models fetched","models.discoveryAddSelected":"Add selected","models.discoveryAddSelectedCount":"Add selected ({count})","models.catalogSource":"source: models.dev ↗","models.catalogFilling":"Filling details…","models.catalogFill":"Fill model details","models.catalogFilled":"{count} fields filled","models.catalogNoEmptyFields":"No empty fields to fill","models.catalogNoExactMatch":"No exact models.dev match","models.catalogPriceProvider":"Price matched Provider {provider}","models.catalogPriceBaseUrl":"Price matched Base URL to {provider}","models.catalogPriceConsensus":"Price agreed by {support}/{total} records","models.catalogPriceUnreliable":"No reliable price found","models.catalogUndo":"Undo","models.capabilities":"Capabilities","models.reasoning":"Reasoning / thinking","models.imageInput":"Image input","models.modelSpecs":"Model specifications","models.contextWindow":"Context window (tokens)","models.maxOutputTokens":"Max output tokens","models.costPerMillion":"Cost per million tokens","models.costInput":"Input","models.costOutput":"Output","models.costCacheRead":"Cache read","models.costCacheWrite":"Cache write","models.notProvided":"Not provided","models.editCosts":"Edit prices","models.finishEditingCosts":"Done","models.costAllRequired":"Enter a valid non-negative price; blank fields are saved as 0.","models.advancedSettings":"Advanced settings","models.providerDefaults":"Using provider defaults","models.headersSummary":"Headers: {count}","models.compatSummary":"Compatibility: {count}","models.thinkingSummary":"Thinking levels: {count}","models.apiOverride":"API override","models.headers":"Headers","models.headersHelp":"Added to this model's requests and overrides provider headers.","models.compatibility":"Compatibility","models.deepSeekThinkingCompat":"DeepSeek thinking compatibility","models.developerRole":"Use the developer role for the system prompt","models.thinkingLevelMap":"Thinking level map","models.clearAll":"Clear all","i18n.testingModel":"Testing model connection...","i18n.connected":"Connected","i18n.failed":"Failed","i18n.test":"Test","i18n.testConnection":"Test model connection","i18n.provider":"Provider","i18n.model":"Model","i18n.providerName":"Provider name","i18n.rename":"Rename","i18n.default":"Default","i18n.disabled":"Disabled","i18n.noResources":"No resources","i18n.unknown":"Unknown","i18n.installedVersion":"installed {version}","i18n.configuredVersion":"configured {version}","i18n.extensions":"Extensions","i18n.prompts":"Prompts","i18n.themes":"Themes","i18n.resourceCount":"{count} {label}","i18n.extensionShort":"ext","i18n.skillShort":"skills","i18n.promptShort":"prompts","i18n.themeShort":"themes","i18n.custom":"Custom","i18n.clearAll":"clear all","i18n.connectedSuccessfully":"Connected successfully.","i18n.notConnected":"not connected","i18n.configured":"configured","i18n.notConfigured":"not configured","i18n.openingBrowser":"Opening browser…","i18n.submit":"Submit","i18n.login":"Login","i18n.relogin":"Re-login","i18n.disconnect":"Disconnect","i18n.networkError":"Network error","i18n.continuing":"Continuing…","i18n.skills":"Skills","i18n.plugins":"Plugins","i18n.addSkill":"Add skill","i18n.addPlugin":"Add plugin","i18n.selectSkill":"Select a skill","i18n.selectPackage":"Select a package","i18n.updateAvailable":"Update available","i18n.upToDate":"Up to date","i18n.automaticChecksUnavailable":"Automatic checks unavailable","i18n.checkFailed":"Check failed","i18n.installed":"Installed","i18n.status":"Status","i18n.version":"Version","i18n.package":"Package","i18n.resources":"Resources","i18n.installedPath":"Installed path","i18n.cwd":"CWD","i18n.resolvedResources":"Resolved Resources","i18n.reloadSession":"Reload session","i18n.reloading":"Reloading...","i18n.packageRemoved":"Package removed.","i18n.packageInstalled":"Package installed.","i18n.packageUpdated":"Package updated.","i18n.packagesUpdated":"Packages updated.","i18n.updateAllPlugins":"Update all","i18n.updateAllPluginsHint":"Updates all configured plugins","i18n.packageDisabled":"Package disabled.","i18n.packageEnabled":"Package enabled.","i18n.sessionReloaded":"Session reloaded.","i18n.thinking":"Thinking","i18n.largeMessageReveal":"Message content is very large ({size}). Click to view as plain text — markdown rendering is disabled to keep the page responsive.","i18n.loadingThinking":"Loading thinking...","i18n.copyMessage":"Copy message","i18n.editFromHere":"Edit from here","i18n.editFromHereTitle":"Edit from here — branches within this session","i18n.newSession":"New session","i18n.newSessionTitle":"New session — creates an independent copy from here","i18n.estimatedTokens":"Estimated token count while streaming","i18n.noOutput":"(no output)","i18n.openImage":"Open image","i18n.noSummary":"(no summary)","i18n.conversationCompacted":"Conversation compacted","i18n.compactionDescription":"The conversation history before this point was compacted into the following summary:","i18n.fileContext":"File context: {details}","i18n.readFiles":"Read files","i18n.modifiedFiles":"Modified files","i18n.hiddenExtensionMessage":"hidden extension message","i18n.noMessage":"(no message)","i18n.showExtensionMessage":"Show extension message","i18n.collapse":"Collapse","i18n.expand":"Expand","i18n.hideDetails":"Hide details","i18n.showDetails":"Show details","i18n.thinkingUnavailable":"Thinking content unavailable","i18n.before":"Before","i18n.after":"After","i18n.sessionComplete":"Session complete","i18n.taskFinished":"Task finished.","i18n.attentionNeeded":"Pi needs your attention","i18n.extensionInputNeeded":"An extension is waiting for your input."}}),a({id:"zh-CN",label:"简体中文",messages:{"i18n.close":"关闭","i18n.cancel":"取消","i18n.checking":"正在检查…","desktop.settings":"设置","desktop.settingsSections":"设置分类","desktop.closeSettings":"关闭设置","desktop.display":"显示","desktop.server":"服务器","desktop.serverCurrent":"当前服务器","desktop.serverSwitch":"切换服务器","desktop.serverSwitchHint":"打开 Pi Web 桌面端连接管理:可切换已保存的服务器,或添加新的服务器地址(URL + 密码)。","desktop.reloadPage":"重新加载页面","desktop.serverHintTitle":"想连远程服务器,或设置访问密码?","desktop.serverHintBody":"桌面端已默认直连本机服务,打开即用。需要换服务器、从手机连接或给本机加访问密码,都在右上角这个图标里。","desktop.serverHintAction":"打开连接管理","desktop.serverHintDismiss":"知道了","desktop.chat":"聊天","desktop.models":"模型","desktop.skills":"技能","desktop.plugins":"插件","desktop.subagents":"子代理","desktop.proxy":"代理","desktop.proxyEnable":"启用代理","desktop.proxyProtocol":"协议","desktop.proxyHost":"主机","desktop.proxyPort":"端口","desktop.proxyUsername":"用户名(可选)","desktop.proxyPassword":"密码(可选)","desktop.proxyNoProxy":"绕过代理(逗号分隔,可选)","desktop.proxySave":"保存","desktop.proxySaving":"保存中…","desktop.proxyTest":"测试连接","desktop.proxyTesting":"测试中…","desktop.proxySaved":"代理配置已保存","desktop.proxySaveFailed":"保存失败","desktop.proxyTestSuccess":"连接成功","desktop.proxyTestFailed":"连接失败","desktop.proxyUnsaved":"有未保存的更改","desktop.features":"功能","desktop.logs":"日志","desktop.snippets":"片段","desktop.snippetsDesc":"常用代码/文本片段,输入 # 号即可补全插入","desktop.snippetNew":"新增片段","desktop.snippetName":"名称","desktop.snippetContent":"内容","desktop.snippetSave":"保存","desktop.snippetEdit":"编辑","desktop.snippetDelete":"删除","desktop.snippetEmpty":"还没有片段,先新增一个吧。","desktop.snippetNameRequired":"请输入片段名称","desktop.snippetHint":"在输入框输入 #名称 即可弹出补全,Enter 展开为片段内容。","desktop.logsAllCodes":"全部错误码","desktop.logsAllLevels":"全部级别","desktop.logsAllSources":"全部来源","desktop.logsSearch":"搜索错误日志","desktop.logsClear":"清空日志","desktop.logsCopy":"复制日志","desktop.logsEmpty":"暂无错误日志","desktop.mcpVisionTitle":"DeepSeek Vision 视觉模块","desktop.mcpVisionDesc":"deepseek-vision 视觉模块(图像分析 / OCR)的独立配置,MCP 注册与模型配置均可在此修改。","desktop.mcpVisionRegistered":"已注册","desktop.mcpVisionNotRegistered":"未注册","desktop.mcpVisionRegistration":"MCP 注册","desktop.mcpVisionCommand":"命令","desktop.mcpVisionCommandRequired":"命令不能为空","desktop.mcpVisionLifecycle":"生命周期","desktop.mcpVisionTransport":"传输方式","desktop.mcpVisionTransportFixed":"stdio(固定)","desktop.mcpVisionSaveReg":"保存注册","desktop.mcpVisionSavedReg":"注册已保存 — 新开会话或重启 pi 后生效","desktop.mcpVisionRemove":"从 MCP 配置移除","desktop.mcpVisionRemoved":"已移除注册","desktop.mcpVisionModelConfig":"模型配置","desktop.mcpVisionModelNote":"模型配置保存后立即写入 .env,点击“重启服务器”即可立即生效。","desktop.mcpVisionProvider":"Provider","desktop.mcpVisionBaseUrl":"Base URL","desktop.mcpVisionApiKey":"API Key","desktop.mcpVisionModel":"视觉模型","desktop.mcpVisionMaxTokens":"最大输出 tokens","desktop.mcpVisionSaveModel":"保存模型配置","desktop.mcpVisionSavedModel":"模型配置已保存","desktop.mcpVisionNameReserved":"该名称由内置的 DeepSeek Vision 配置使用,请换一个名称。","desktop.mcpVisionRestart":"重启服务器(立即生效)","desktop.mcpVisionRestarting":"重启中…","desktop.mcpVisionRestarted":"已发送重启指令,稍候生效","desktop.mcpVisionRestartTitle":"重启 deepseek-vision 服务器,使 .env 配置立即生效","desktop.mcpVisionRestartNoSession":"请先打开一个会话,才能重启服务器","desktop.applyNow":"立即生效","desktop.applyNowApplying":"重载中…","desktop.applyNowDone":"已重载,改动已生效","desktop.applyNowTitle":"重载当前会话,使改动立即生效(无需重启 pi)","desktop.applyNowNoSession":"请先打开一个会话,才能立即生效","desktop.featuresDesc":"管理 Pi Web 的可选功能。关闭后相关入口将不再显示。","desktop.featuresTasksBoard":"任务看板","desktop.featuresTasksBoardDesc":"在顶部工具栏显示任务看板入口,用于管理多项目任务。","desktop.featuresLoading":"加载中…","desktop.featuresSaving":"保存中…","desktop.featuresCollabDefault":"默认任务模式","desktop.featuresCollabDefaultDesc":"新建对话默认的协作模式(常规 / 计划 / 目标)","desktop.featuresTokenDefault":"默认运行档位","desktop.featuresTokenDefaultDesc":"新建对话默认的档位(轻量 / 均衡 / 交付)","desktop.featuresApprovalDefault":"默认工具权限","desktop.featuresApprovalDefaultDesc":"新建对话默认的工具权限(批准 / 自动 / Yolo)","desktop.usage":"用量","desktop.usageSession":"当前会话","desktop.usageGlobal":"全局","desktop.usageContext":"上下文占用 {used} / {window} tokens","desktop.usageContextHint":"当前会话实时上下文占用","desktop.usageNoSessionData":"当前会话暂无用量数据","desktop.usageNoSession":"未打开会话","desktop.usageTotal":"预估总用量","desktop.usageMessages":"消息数","desktop.usageMessagesHint":"全部会话","desktop.usageSessions":"个会话","desktop.usageDaily":"每日用量趋势","desktop.usageTopSessions":"用量最高的会话","desktop.usageNoData":"暂无数据","desktop.mcp":"MCP","desktop.mcpServers":"MCP 服务器","desktop.mcpAddServer":"添加服务器","desktop.mcpNewServer":"新增 MCP 服务器","desktop.mcpEditServer":'编辑 MCP 服务器 "{name}"',"desktop.mcpRestartNote":"MCP 服务器在 pi 启动时加载,此处修改需重启 pi 后生效。","desktop.mcpEmpty":"尚未配置 MCP 服务器 — 添加一个即可向 Agent 暴露工具。","desktop.mcpEmptyOther":"未配置其他 MCP 服务器 — DeepSeek Vision 的配置见上方卡片。","desktop.mcpServerName":"名称","desktop.mcpCommand":"命令","desktop.mcpArgs":"参数(每行一个)","desktop.mcpUrl":"URL","desktop.mcpHeaders":"请求头(JSON)","desktop.mcpTransport":"传输方式","desktop.mcpLifecycle":"生命周期","desktop.mcpRequestTimeoutMs":"请求超时(毫秒)","desktop.mcpEnv":"环境变量(JSON)","desktop.mcpEdit":"编辑","desktop.mcpDelete":"删除","desktop.mcpSave":"保存","desktop.saving":"保存中…","desktop.mcpCancel":"取消","desktop.mcpSavedRestart":"已保存 — 重启 pi 后生效。","desktop.tools":"工具","desktop.refreshSession":"刷新会话","desktop.shellTool":"Shell 工具","desktop.usePowerShell":"Shell 命令使用 PowerShell","desktop.shellToolDescription":"在 Windows 上,shell 工具优先使用 PowerShell 而非 bash。写入 settings.json 的 defaultTools。","desktop.shellToolWindowsOnly":"PowerShell 仅可在 Windows 上配置。","desktop.shellToolMacOnly":"Shell 工具设置仅适用于 Windows。","desktop.toolsListHint":"以下是当前会话实际加载的工具。MCP 与扩展工具不随输入框的工具预设开关变化,始终可用。","desktop.toolsListNoSession":"打开一个会话后可查看已加载的工具。","desktop.extensionToolsTitle":"扩展工具开关","desktop.extensionToolsHint":"扩展与 MCP 工具不受输入框工具预设影响,会一直被注入。若要让某个会话真正只读(例如计划模式),在这里关掉会写文件的工具。","desktop.extensionToolsEmpty":"当前没有加载到扩展工具。","desktop.extensionToolsApplyNote":"切换后会自动重新加载当前会话生效。","desktop.subagentCardProcessing":"正在处理","desktop.transcriptRoleUser":"用户","desktop.transcriptRoleAssistant":"助手","desktop.transcriptRoleResult":"结果","desktop.transcriptRoleBash":"Bash","desktop.backup":"备份","desktop.backupExportTitle":"导出备份","desktop.backupExportDescription":"打包全部全局配置:供应商、模型、凭证、设置、MCP 服务器、技能与本地插件。","desktop.backupIncludeSecrets":"包含 API 密钥与登录凭证","desktop.backupSecretsWarning":"警告:备份将包含明文 API 密钥(models.json)与 OAuth 凭证(auth.json),请妥善保管。","desktop.backupIncludeSessions":"包含会话历史","desktop.backupSessionsHint":"会话历史可能较大,且含敏感对话内容。","desktop.backupExportButton":"导出备份","desktop.backupExporting":"导出中…","desktop.backupExportFailed":"备份导出失败","desktop.backupImportTitle":"导入备份","desktop.backupImportButton":"选择备份文件","desktop.backupImportDescription":"从 pi-backup zip 恢复。路径会自动重映射到本机,MCP 命令按平台适配。","desktop.backupImportFailed":"读取备份文件失败","desktop.backupRestoreFailed":"恢复失败","desktop.backupManifest":"备份创建于","desktop.backupNoSecrets":"不含凭证","desktop.backupCategories":"恢复类别","desktop.backupCategorycore":"核心配置","desktop.backupCategoryskills":"技能","desktop.backupCategorypackages":"插件","desktop.backupCategorymcp":"MCP 服务器","desktop.backupCategorysessions":"会话","desktop.backupMcpServers":"MCP 服务器","desktop.backupNpmPackages":"npm 插件包","desktop.backupReinstallNpm":"恢复后重新安装这些 npm 包","desktop.backupReinstallNpmHint":"安装脚本将执行备份包自带的代码,仅在你信任该备份来源时勾选","desktop.backupInstallModel":"安装会话使用的模型","desktop.backupInstallSession":"创建安装会话","desktop.backupOpenSession":"打开会话","desktop.backupInstallSessionFailed":"创建安装会话失败","desktop.backupRestoreButton":"开始恢复","desktop.backupRestoring":"恢复中…","desktop.backupRestoreReport":"恢复报告","desktop.backupReportRestored":"已恢复","desktop.backupReportRestart":"需重启生效","desktop.backupReportManual":"需人工确认","desktop.backupRestartHint":"设置、模型、凭证与 MCP 配置需重启 pi-web / pi 后生效。","desktop.importSessions":"导入会话","desktop.importSessionsDesc":"从其他 AI 编码工具导入历史对话记录到 pi-web。目前支持 Reasonix,更多工具陆续支持中。","desktop.comingSoon":"即将支持","desktop.projects":"个项目","desktop.importSelectProjects":"选择要导入的项目","desktop.importSelectAll":"全选","desktop.importDeselectAll":"取消全选","desktop.importMerged":"合并到现有项目","desktop.importNewProject":"新建项目","desktop.importExistingCount":"{count} 个已有","desktop.importStart":"开始导入","desktop.importing":"导入中…","desktop.importDone":"导入完成","desktop.importedSummary":"成功导入 {imported} 个会话","desktop.importSkippedCount":"{skipped} 个跳过","desktop.importErrorsCount":"{errors} 个失败","desktop.importGeneratingTitles":"正在生成标题…","desktop.importGenerateTitles":"为导入的会话生成标题","desktop.importAgain":"再次导入","desktop.importNoData":"未找到 Reasonix 数据。请确认 ~/.reasonix/projects/ 目录存在且包含会话文件。","desktop.importFromReasonix":"来自 Reasonix","desktop.importFromCodex":"来自 Codex","desktop.builtinModelsTitle":"模型配置","desktop.builtinModelsFetchNew":"获取新模型","desktop.builtinModelsLoadFailed":"加载模型失败","desktop.builtinModelsEmpty":"该供应商暂无可用模型。","desktop.builtinModelsContext":"上下文","desktop.builtinModelsMaxTokens":"最大返回","desktop.builtinModelsReasoning":"思考模型","desktop.builtinModelsThinking":"思考强度(thinkingLevelMap)","desktop.builtinModelsDirty":"{count} 处未保存修改","desktop.builtinModelsHide":"隐藏此模型","desktop.builtinModelsManualAdd":"+ 手动添加模型","desktop.builtinModelsManualHint":"手动添加会写入一个真正的请求模型 ID(上游必须存在该 ID)。注意:上面的「显示名称」只影响界面展示,请求时使用的始终是模型 ID。","desktop.builtinModelsManualIdRequired":"请填写模型 ID。","desktop.builtinModelsManualDuplicate":"该模型 ID 已存在。","desktop.builtinModelsManualBadge":"自定义","desktop.inputShortcut":"输入快捷键","desktop.inputShortcutDescription":"选择使用 Enter 键发送消息的方式。","desktop.useCtrlEnter":"使用 Ctrl+Enter 发送","desktop.useCtrlEnterDescription":"Enter 用于换行,Ctrl+Enter 发送消息。","desktop.useEnter":"使用 Enter 发送","desktop.useEnterDescription":"Enter 发送消息,Shift+Enter 用于换行。","desktop.theme":"主题","desktop.themes":"主题","desktop.language":"语言","desktop.light":"浅色","desktop.dark":"深色","desktop.system":"跟随系统","desktop.english":"English","desktop.chinese":"简体中文","desktop.themeDescription":"选择 Pi Web 的外观。","desktop.languageDescription":"选择界面的显示语言。","desktop.accessDescription":"已启用密码保护。退出登录后本浏览器需重新输入密码。","desktop.colorScheme":"配色方案","desktop.openThemeFolder":"打开本地 Pi theme 文件夹","desktop.learnPiThemes":"了解 Pi theme","desktop.defaultTheme":"默认","desktop.appearanceMode":"外观模式","desktop.loadingThemes":"加载主题中…","desktop.borderVisibility":"边框可见度","desktop.borderSubtle":"浅淡","desktop.borderBold":"浓重","desktop.noCustomThemes":"未安装自定义主题。","desktop.noCustomThemesHint":"将 JSON 文件放入","desktop.noCustomThemesHint2":"即可在此处看到。","desktop.darkVariant":"深色变体可用","desktop.lightVariant":"浅色变体可用","desktop.switchToLight":"切换至浅色模式","desktop.switchToDark":"切换至深色模式","desktop.showSidebar":"显示侧边栏","desktop.hideSidebar":"隐藏侧边栏","desktop.resizeSidebar":"调整侧边栏宽度","desktop.resizeFilePanel":"调整文件面板宽度","desktop.trustProject":"信任项目","desktop.trustingProject":"正在信任…","desktop.projectResourcesRestricted":"项目资源已受限","desktop.projectSkillsRestricted":"信任此项目后才能使用项目技能。","desktop.projectSkillInstallUnavailable":"请先信任此项目,再安装项目技能。","desktop.shellCommand":"Shell 命令","desktop.shellOutputLocal":"输出仅保留在本地","desktop.shellOutputModel":"输出将提供给模型","desktop.runningShellCommand":"正在运行 Shell 命令…","desktop.loadFullOutput":"加载完整输出","desktop.download":"下载","desktop.trustProjectTitle":"信任此项目?","desktop.trustProjectBody":"项目扩展、技能、提示词和软件包资源可能执行代码。仅在确认项目内容可信时授予信任。","desktop.minimize":"最小化","desktop.maximize":"最大化","desktop.restore":"还原","desktop.islandLabel":"窗口控制","desktop.islandResetHint":"拖动调整位置,双击复位","desktop.islandDrag":"按住拖动","desktop.close":"关闭","desktop.viewFullHistory":"查看完整历史","desktop.fullHistoryAvailableAfterSave":"保存会话后可查看完整历史","desktop.systemPrompt":"系统提示词","desktop.sessionInfo":"会话信息","desktop.hideFilePanel":"隐藏文件面板","desktop.showFilePanel":"显示文件面板","desktop.sessionInfoTitle":"会话信息","desktop.sessionInfoFile":"文件","desktop.sessionInfoId":"ID","desktop.sessionInfoInMemory":"内存中","desktop.sessionInfoMessages":"消息","desktop.sessionInfoTokens":"令牌","desktop.sessionInfoActiveTime":"估算活跃耗时","desktop.sessionInfoUser":"用户","desktop.sessionInfoAssistant":"助手","desktop.sessionInfoToolCalls":"工具调用","desktop.sessionInfoToolResults":"工具结果","desktop.sessionInfoTotal":"总计","desktop.sessionInfoInput":"输入","desktop.sessionInfoOutput":"输出","desktop.sessionInfoCacheRead":"缓存读取","desktop.sessionInfoCacheWrite":"缓存写入","desktop.sessionInfoCost":"费用","desktop.sessionInfoCostOfficial":"费用(官网价)","desktop.sessionInfoContext":"上下文","desktop.turnUsageTitle":"本次回复","desktop.turnUsageByOfficialPrice":"按官网价折算","desktop.copyFilePath":"复制文件路径","desktop.copySessionId":"复制会话 ID","desktop.projectDir":"项目","desktop.gitBranch":"Git 分支","desktop.gitWorktree":"工作树","desktop.projectSection":"项目信息","desktop.copyProjectDir":"复制项目路径","desktop.copyGitBranch":"复制 Git 分支","desktop.copyGitWorktree":"复制工作树路径","desktop.sendMessageForSessionInfo":"发送消息或运行 /session 以加载会话信息","desktop.selectSessionFromSidebar":"请从侧边栏选择会话","desktop.getStarted":"开始使用","desktop.selectProjectDirectory":"从侧边栏选择项目目录","desktop.addModelsFromBottom":"通过底部的“模型”按钮添加模型","desktop.loadingSession":"正在加载会话...","desktop.scrollToLoadEarlierMessages":"向上滚动以加载更早的消息(隐藏了 {count} 条)","desktop.scrollToBottom":"滚动到底部","desktop.filesWritten":"改动的文件","desktop.openWrittenFile":"打开 {name}","desktop.taskRunning":"进行中","desktop.taskTodo":"待办","desktop.taskStatusHint":"当前项目的任务进度,点击打开任务看板","desktop.runningTool":"正在运行工具...","desktop.runningTools":"正在运行 {tools}...","desktop.waitingForModel":"正在等待模型...","desktop.runningCommand":"正在运行命令...","desktop.thinking":"思考中...","desktop.extensionRequest":"扩展请求","desktop.extensionPanel":"扩展面板","desktop.cancel":"取消","desktop.confirm":"确认","desktop.submit":"提交","desktop.queued":"已排队","desktop.queueMoveUp":"上移","desktop.queueMoveDown":"下移","desktop.queueRecallOne":"取回到输入框","desktop.queueRemove":"移除排队消息","desktop.recalledEditing":"正在编辑一条已取回的排队消息;发送后会回到原来的队列位置。","desktop.steer":"引导","desktop.followUp":"后续消息","desktop.recallToInput":"恢复到输入框","desktop.recallQueuedMessages":"移除所有排队消息,并将其放回输入框以便编辑","desktop.retrying":"正在重试","desktop.compacted":"已压缩","desktop.tokens":"令牌","desktop.saved":"已节省","desktop.removeImage":"移除图片","desktop.loadingCommands":"正在加载命令...","desktop.slashCommands":"斜杠命令","desktop.tabOrEnter":"Tab / Enter","desktop.noSlashCommands":"未找到扩展、提示词或技能命令","desktop.builtIn":"内置","desktop.extensions":"扩展","desktop.prompts":"提示词","desktop.commandSkills":"技能","desktop.match":"个匹配项","desktop.matches":"个匹配项","desktop.snippetMatches":"个片段匹配","desktop.command":"个命令","desktop.commands":"个命令","desktop.loadingFiles":"正在加载文件...","desktop.files":"文件","desktop.searchingAllFiles":"正在搜索所有文件...","desktop.indexTruncated":"索引已截断","desktop.searching":"正在搜索...","desktop.search":"搜索","desktop.noMatchingFiles":"没有匹配的文件","desktop.steerOrQueueFollowUp":"立即引导 / 排队后续消息...","desktop.agentRunning":"Agent 正在运行...","desktop.messageWithCommands":"输入消息... 输入 / 查看命令,@ 查看文件","desktop.inputHistory":"输入历史","desktop.quickChanges":"快速变更","desktop.changedFiles":"{count} 个变更文件","desktop.imageAttachmentsCannotQueue":"Agent 运行时无法将图片附件加入队列","desktop.injectMessageNow":"中断当前运行并立即注入此消息","desktop.queueMessageAfterFinish":"在 Agent 完成后将此消息加入队列","desktop.attachImage":"添加图片","desktop.push":"推送当前分支","desktop.pushOk":"推送成功","desktop.pushFailed":"推送失败","desktop.stash":"Stash 管理","desktop.stashTitle":"Stash 管理","desktop.stashPush":"保存到 Stash","desktop.stashList":"Stash 列表","desktop.stashEmpty":"暂无 stash","desktop.stashPop":"恢复","desktop.stashDrop":"删除","desktop.stashMessagePlaceholder":"stash 说明(可选)…","desktop.stashDone":"操作成功","desktop.attachMenu":"选择输入模式","desktop.attachUpload":"上传文件","desktop.attachUploadDesc":"附加图片等文件","desktop.imageInputUnsupported":"当前模型不支持图片输入,请切换到支持图片的模型。","desktop.attachReference":"引用文件","desktop.attachReferenceDesc":"通过 @ 引用工作区文件","desktop.attachSessions":"引用会话","desktop.attachSessionsDesc":"通过 # 引用过去的对话","desktop.attachCommands":"使用命令","desktop.attachCommandsDesc":"通过 / 使用命令和技能","desktop.planModeBadge":"计划模式","desktop.planModeLabel":"计划模式","desktop.planModeHint":"当前为计划模式:只读分析,不修改文件。结束后可确认执行或退出。","desktop.disableCompletionSound":"关闭完成提示音","desktop.enableCompletionSound":"开启完成提示音","desktop.soundLabelOn":"提示音:开启","desktop.soundLabelOff":"提示音:关闭","desktop.changeReasoningLevel":"更改推理级别:{level}","desktop.reasoningLevel":"更改推理级别","desktop.moreControls":"更多控件","desktop.more":"更多","modes.collabNormal":"常规","modes.collabPlan":"计划","modes.collabGoal":"目标","modes.tokenEconomy":"轻量","modes.tokenFull":"均衡","modes.tokenDelivery":"交付","modes.approvalAsk":"批准","modes.approvalAuto":"自动","modes.approvalYolo":"Yolo","modes.collabNormalTitle":"常规 \xb7 边做边推进","modes.collabNormalDesc":"直接执行,边做边推进","modes.collabPlanTitle":"计划 \xb7 确认后执行","modes.collabPlanDesc":"先产出计划;工具执行仍由权限与沙箱决定","modes.collabGoalTitle":"目标 \xb7 持续推进","modes.collabGoalDesc":"输入目标后持续工作,直到完成或阻塞","modes.chatBuildTitle":"变更前确认","modes.chatBuildDesc":"改文件前先询问","modes.chatEditTitle":"自动编辑","modes.chatEditDesc":"自动编辑文件,写命令前仍会确认","modes.chatYoloTitle":"完全访问","modes.chatYoloDesc":"减少确认次数,跳过大部分审批","modes.tokenEconomyTitle":"轻量 \xb7 快速省用量","modes.tokenEconomyDesc":"少上下文,工具按需启用","modes.tokenFullTitle":"均衡 \xb7 日常通用","modes.tokenFullDesc":"完整工具,模型自主执行","modes.tokenDeliveryTitle":"交付 \xb7 完整验证","modes.tokenDeliveryDesc":"强制验收,复查验证","modes.approvalAskTitle":"需要批准","modes.approvalAskDesc":"需审批的写入与命令会先询问","modes.approvalAutoTitle":"自动批准","modes.approvalAutoDesc":"自动执行权限策略允许的操作","modes.approvalYoloTitle":"Yolo 批准","modes.approvalYoloDesc":"跳过普通工具权限提示(仅本会话)","desktop.goalRunning":"目标","desktop.goalComplete":"目标完成","desktop.goalBlocked":"目标阻塞","desktop.goalPaused":"目标暂停","desktop.goalNoProgress":"{n} 轮无进展","desktop.goalPause":"暂停目标","desktop.goalPauseShort":"Ⅱ","desktop.goalResume":"恢复目标","desktop.goalResumeShort":"▶","desktop.goalStop":"结束目标","desktop.goalEdit":"编辑","desktop.goalSave":"保存","desktop.goalCancel":"取消","desktop.goalEditHint":"Cmd+Enter 保存 \xb7 Esc 取消","desktop.goalBudget":"预算","desktop.goalTurns":"轮次","desktop.goalBudgetLimited":"预算耗尽","approval.title":"需要工具审批","approval.subtitle":"Agent 想执行此工具。选择「允许」执行,或「拒绝」向 Agent 返回被阻止的结果。","approval.queued":"个待处理","approval.allow":"允许","approval.deny":"拒绝","approval.allowAlways":"始终允许","approval.denyAlways":"始终拒绝","approval.allowOnceDescription":"仅允许这一次","approval.allowAlwaysDescription":"今后不再询问 {rule}","approval.denyOnceDescription":"这次先拒绝","approval.denyAlwaysDescription":"今后直接拒绝 {rule}","approval.scopeAlways":"记住此选择","approval.keyboardHint":"使用 1-4 或方向键选择,回车确认","approval.denyWithReason":"附理由拒绝","approval.hideReason":"隐藏理由","approval.reasonPlaceholder":"展示给 Agent 的理由(可选)","desktop.stopCompaction":"停止压缩","desktop.compactContext":"压缩上下文","desktop.compacting":"正在压缩...","desktop.compact":"压缩","desktop.changeToolPreset":"更改工具预设:{preset}","desktop.toolPreset":"更改工具预设","desktop.sendMessage":"发送消息","desktop.stopAgent":"停止 Agent","desktop.stop":"停止","desktop.collapseControls":"收起控件","desktop.usePiDefault":"使用 pi 默认设置","desktop.reasoningOff":"关闭推理","desktop.minimalReasoning":"最小推理","desktop.lowReasoning":"低推理","desktop.mediumReasoning":"中等推理","desktop.highReasoning":"高推理","desktop.extraHighReasoning":"超高推理","desktop.maxReasoning":"最高推理","desktop.noToolsReadOnly":"不使用工具,只读","desktop.fourBuiltInTools":"4 个内置工具","desktop.allBuiltInTools":"所有内置工具","desktop.toolOff":"关闭","desktop.toolDefault":"默认","desktop.toolFull":"完整","desktop.thinkingAuto":"自动","desktop.thinkingOff":"关闭","desktop.thinkingMinimal":"最小","desktop.thinkingLow":"低","desktop.thinkingMedium":"中等","desktop.thinkingHigh":"高","desktop.thinkingExtraHigh":"超高","desktop.thinkingMax":"最高","desktop.compactCommandDescription":"压缩上下文,可选择附加指令","desktop.reloadCommandDescription":"重新加载扩展、技能、提示词和工具","desktop.nameCommandDescription":"设置会话显示名称","desktop.sessionCommandDescription":"显示会话消息、令牌和费用统计","desktop.copyCommandDescription":"复制最后一条助手消息","desktop.selectModel":"选择模型","desktop.modelsLoadFailed":"模型列表加载失败","desktop.noModelsConfigured":"未配置可用模型,请到「模型」设置添加供应商","desktop.selectProject":"选择项目","desktop.selectProjectFirst":"请先选择项目","desktop.noMatchingProjects":"没有匹配的项目","desktop.noProjectsYet":"尚无项目","desktop.useDefaultDirectory":"使用默认目录","desktop.customPath":"自定义路径…","desktop.projectPathPlaceholder":"/path/to/project","desktop.filterProjects":"筛选项目…","desktop.searchProjects":"搜索项目…","desktop.recentProjects":"最近项目","desktop.addProjectTab":"新增项目 tab","desktop.maxProjectTabs":"最多 4 个项目 tab(下拉框 1 个 + tab 4 个)","desktop.branch":"分支","desktop.editProjectAlias":"修改项目备注","desktop.projectAliasPlaceholder":"给项目加个备注…","desktop.quickWorkspace":"快速工作区","desktop.selectFolder":"选择文件夹","desktop.checking":"正在检查…","desktop.open":"打开","common.ok":"确定","common.language":"语言","common.models":"模型","common.skills":"技能","common.agents":"子代理","common.plugins":"插件","common.settings":"设置","settings.title":"设置","settings.general":"常规","settings.generalDescription":"选择 Pi Web 的显示方式和界面语言。","settings.appearance":"外观","settings.appearanceDescription":"选择浅色或深色主题,也可以跟随系统设置。","settings.chatContentWidth":"聊天内容宽度","settings.chatContentFontSize":"聊天字体大小","settings.resetChatContentWidth":"重置聊天内容宽度","settings.resetChatContentFontSize":"重置聊天字体大小","settings.chatContentWidthDescription":"设置消息内容和输入框的最大宽度。","settings.themeLight":"浅色","settings.themeDark":"深色","settings.themeSystem":"跟随系统","settings.thinkingDisplay":"思考过程显示","settings.thinkingDisplayDescription":"选择消息加载时模型思考块是否默认展开。","settings.thinkingExpandedDefault":"默认展开思考块","settings.chat":"对话","settings.quoteSelection":"选中文字时显示提问浮窗","settings.languageDescription":"选择整个界面使用的语言。","settings.shellTool":"Shell 工具","settings.shellToolDescription":"选择模型执行命令时使用的 Shell。直接输入的 ! 和 !! 命令仍使用 Bash。","settings.usePowerShell":"使用 PowerShell 替代 Bash","settings.projectRequired":"打开项目后才能配置此项","skills.scope.global":"全局","skills.scope.project":"项目","skills.scope.path":"路径","agents.close":"关闭","agents.builtInTitle":"启用 Pi Web 内置子代理","agents.builtInDescription":"提供 Pi Web 集成的 Agent 工具,并停用发生冲突的 pi-subagents 扩展。","agents.reloadRequired":"重新加载当前会话后生效。","agents.reloadSession":"重新加载会话","agents.maxConcurrent":"并发子代理数","agents.maxConcurrentDescription":"每个父会话同时运行的最大任务数。","agents.reloading":"正在重新加载...","agents.loading":"正在加载子代理...","agents.new":"新建子代理","agents.empty":"选择或创建一个子代理配置","agents.saveScope":"保存到","agents.name":"子代理 ID","agents.displayName":"显示名称","agents.description":"描述","agents.prompt":"系统指令","agents.tools":"工具","agents.resources":"资源","agents.loadSkills":"加载技能","agents.loadExtensions":"加载扩展","agents.model":"指定模型","agents.modelsLoading":"正在加载模型...","agents.modelUnavailable":"{model}(不可用)","agents.thinking":"思考级别","agents.maxTurns":"最大轮次","agents.inherit":"跟随父会话","agents.enable":"启用子代理","agents.disable":"停用子代理","agents.builtinPath":"内置配置","agents.inheritContext":"继承父会话上下文","agents.background":"默认在后台运行","agents.duplicate":"创建副本","agents.copyName":"{name} 副本","agents.delete":"删除","agents.deleteConfirm":"删除 {name}?","agents.save":"保存","agents.saving":"正在保存...","agents.scope.builtin":"内置","agents.scope.global":"全局","agents.scope.workspace":"工作区","agents.scope.project":"项目","agents.overridden":"被覆盖","subagent.readOnlyNotice":"子代理会话为只读视图","subagent.open":"打开子代理会话","subagent.openTranscript":"在侧边栏查看运行过程","subagent.transcriptTitle":"子代理运行","subagent.transcriptEmpty":"暂无记录。","subagent.transcriptWaiting":"运行中,尚无输出记录。","subagent.transcriptLoading":"正在加载运行过程…","subagent.transcriptFailed":"无法加载该运行过程:{error}","agentSwitcher.title":"子代理","agentSwitcher.main":"主 Agent","agentSwitcher.subagent":"子代理","agentSwitcher.current":"当前","agentSwitcher.count":"{count} 个子代理","agentSwitcher.runningCount":"{count} 个运行中","agentSwitcher.search":"搜索子代理","agentSwitcher.noFamily":"当前会话没有子代理族谱","agentSwitcher.noMatches":"没有匹配的子代理","agentSwitcher.status.starting":"正在启动","agentSwitcher.status.queued":"排队中","agentSwitcher.status.running":"运行中","agentSwitcher.status.completed":"已完成","agentSwitcher.status.failed":"失败","agentSwitcher.status.aborted":"已中止","agentSwitcher.status.interrupted":"已中断","appUpdate.releaseNotes":"Pi Web v{version} 可用,查看更新说明","sidebar.hide":"隐藏侧边栏","sidebar.show":"显示侧边栏","theme.light":"浅色模式(点击切换到深色)","theme.dark":"深色模式(点击切换到跟随系统)","theme.auto":"跟随系统(点击切换到浅色)","history.full":"完整历史","history.unsaved":"会话保存后才能查看完整历史","history.label":"完整历史","title.generating":"正在生成...","title.updated":"标题已更新","title.failed":"生成失败","title.generate":"生成标题","title.unsaved":"会话保存后才能生成标题","title.noMessages":"请先发送消息,再为会话命名","title.generateSession":"生成会话标题","system.prompt":"系统提示词","system.empty":"系统提示词为空(工具已禁用)","system.load":"系统提示词尚未加载","system.loading":"正在加载系统提示词…","system.label":"系统","tools.label":"工具","tools.title":"工具定义","tools.details":"工具定义详情","tools.load":"工具定义尚未加载","tools.loading":"正在加载工具定义…","tools.noTools":"没有启用的工具","tools.description":"描述","tools.parameters":"参数","tools.parameterCount":"{count} 个参数","tools.noParameters":"无参数","tools.required":"必填","tools.optional":"可选","tools.allowedValues":"可选值","tools.defaultValue":"默认值","tools.guidelines":"提示词规则","session.info":"会话信息","session.name":"名称","session.file":"会话文件","session.inMemory":"内存中","session.id":"ID","session.user":"用户","session.assistant":"助手","session.toolCalls":"工具调用","session.toolResults":"工具结果","session.total":"总计","session.input":"输入","session.output":"输出","session.cacheRead":"缓存读取","session.cacheWrite":"缓存写入","session.cost":"费用","session.context":"上下文","session.cacheHitRate":"平均缓存命中率","session.copy":"复制{value}","session.copied":"已复制","session.title":"会话信息","session.load":"发送消息或运行 /session 以加载会话信息","session.infoSection":"会话信息","session.projectSection":"项目信息","session.messages":"消息","session.tokens":"Token","session.totalActive":"活跃时长","session.copyFile":"复制文件路径","session.copyId":"复制会话 ID","session.projectDir":"项目目录","session.gitBranch":"Git 分支","session.gitWorktree":"Worktree","session.copyProjectDir":"复制项目目录","session.copyGitBranch":"复制 Git 分支","session.copyGitWorktree":"复制 Worktree 路径","workspace.opening":"正在打开工作区...","workspace.unable":"无法打开工作区","workspace.selectSession":"从侧边栏选择一个会话","workspace.getStarted":"开始使用","workspace.selectProject":"从侧边栏选择项目目录","workspace.addModels":"打开底部的“设置”,然后选择“模型”","workspace.stepProject":"从侧边栏选择项目目录","workspace.stepModels":"打开底部的“设置”,然后选择“模型”","files.hidePanel":"隐藏文件面板","files.showPanel":"显示文件面板","files.noneOpen":"没有打开的文件","layout.resizeSidebar":"调整侧边栏宽度","layout.resizeFilePanel":"调整文件面板宽度","layout.resizeHint":"拖动调整宽度。双击或按 Enter 恢复默认值。","sidebar.new":"新建","sidebar.newSessionTitle":"在 {path} 中新建会话","sidebar.refresh":"刷新","sidebar.selectProject":"选择项目…","sidebar.filterProjects":"筛选项目…","sidebar.noMatchingProjects":"没有匹配的项目","sidebar.searchFiles":"搜索文件","sidebar.searchFilesPlaceholder":"搜索文件…","sidebar.clearSearch":"清除搜索","sidebar.searchingFiles":"搜索中…","sidebar.noMatchingFiles":"没有匹配的文件","sidebar.useDefaultDirectory":"使用默认目录","sidebar.customPath":"自定义路径…","directoryPicker.selectDirectory":"选择目录","directoryPicker.goToParent":"转到上级目录","directoryPicker.loadingDirectories":"正在加载目录…","directoryPicker.noSubdirectories":"没有子目录","directoryPicker.noMatchingDirectories":"没有匹配的子目录","directoryPicker.filterPlaceholder":"筛选子目录…","directoryPicker.selectCurrentDirectory":"选择当前目录","directoryPicker.selectThisFolder":"选择此文件夹","directoryPicker.noDrives":"未找到盘符","desktop.switchWorktree":"切换工作树","desktop.switchWorktreeWithPath":"切换工作树:{path}","desktop.openRepoRoot":"打开仓库根目录","desktop.openRepoRootDescription":"打开仓库根目录以管理工作树。","desktop.gitRepoRootOnly":"仅 Git 仓库根目录","desktop.gitRepoRootOnlyDescription":"工作树仅在 Git 仓库根目录可用。","desktop.checkingWorktrees":"正在检查此目录的工作树。","desktop.worktreesLoading":"工作树…","desktop.createWorktree":"为分支创建工作树检出","desktop.newWorktree":"新建工作树…","desktop.branchName":"分支名称","desktop.creating":"正在创建…","desktop.create":"创建","desktop.main":"主工作树","desktop.removeWorktree":"移除工作树检出 {path};分支将保留","desktop.uncommittedChanges":"存在未提交的更改。要强制移除检出吗?","desktop.force":"强制移除","desktop.sessions":"会话","desktop.newSession":"新建","desktop.newSessionIn":"在 {cwd} 中新建会话","desktop.refresh":"刷新","desktop.loading":"正在加载…","desktop.noModels":"没有可用模型","desktop.noSessionsFound":"未找到会话","desktop.explorer":"资源管理器","desktop.uploadFiles":"上传文件","desktop.uploadFilesToProjectRoot":"上传文件到项目根目录","desktop.refreshExplorer":"刷新资源管理器","desktop.agentRunningLabel":"Agent 正在运行","desktop.newActivity":"有新动态","desktop.newSessionActivity":"会话有新动态","desktop.deleteSession":"删除“{title}”?","desktop.delete":"删除","desktop.deleteWithShift":"删除(按住 Shift 点击跳过确认)","desktop.openingWorkspace":"正在打开工作区…","desktop.unableToOpenWorkspace":"无法打开此工作区","desktop.rename":"重命名","desktop.titleGenerationFailed":"标题生成失败","desktop.retryTitleGeneration":"重新生成标题","desktop.retry":"重试","desktop.changeTitleModel":"换模型","desktop.pastedLabel":"[已粘贴文本 #{id} \xb7 {lines} 行]","desktop.pastedShowPreview":"预览粘贴文本","desktop.pastedHidePreview":"收起粘贴文本预览","desktop.pastedRemove":"删除粘贴文本","desktop.pastedMissingContent":"消息中残留未还原的粘贴占位符(原文已丢失),已阻止发送,请重新粘贴该段内容。","desktop.generateTitle":"生成标题","desktop.generateAllTitles":"批量生成当前项目所有会话的标题","desktop.generatingTitlesProgress":"正在批量生成标题… {done}/{total}","desktop.generatingTitle":"正在生成标题…","desktop.titleNeedsMessages":"会话暂无消息,无法生成标题","desktop.expandForks":"展开分支","desktop.collapseForks":"折叠分支","desktop.sessionViewList":"列表","desktop.sessionViewGroups":"分组","desktop.searchSessions":"搜索会话、分支...","desktop.noSearchResults":"未找到匹配会话","desktop.pinned":"置顶","desktop.today":"今天","desktop.yesterday":"昨天","desktop.older":"更早","desktop.collapseGroup":"收起","desktop.expandGroup":"展开","desktop.pin":"置顶","desktop.unpin":"取消置顶","desktop.forkedFrom":"从「{title}」分叉","desktop.messagesCount":"{count} 条消息","desktop.worktree":"工作树:{cwd}","desktop.justNow":"刚刚","desktop.minutesAgo":"{count} 分钟前","desktop.hoursAgo":"{count} 小时前","desktop.daysAgo":"{count} 天前","desktop.panelGroupBubble":"分组","desktop.panelProjectBubble":"项目","desktop.rowStyleToggle":"切换行样式","desktop.sidebarModeCycle":"切换侧边栏模式","desktop.panelFormLabel":"面板","desktop.expandAllFolders":"展开全部文件夹","desktop.collapseAllFolders":"收起全部文件夹","desktop.filterMenu":"筛选","desktop.moreActions":"更多操作","desktop.viewSection":"视图","desktop.viewByProject":"按项目","desktop.viewTimeline":"时间线","desktop.sortSection":"排序方式","desktop.sortUpdated":"更新时间","desktop.sortCreated":"创建时间","desktop.hiddenProjectsSection":"已隐藏项目","desktop.noHiddenProjects":"无已隐藏项目","desktop.restoreProject":"恢复显示","desktop.archivedView":"归档","desktop.archiveSession":"归档","desktop.archiveSessionConfirm":"归档“{title}”?","desktop.unarchiveSession":"取消归档","desktop.deleteForever":"彻底删除","desktop.deleteArchivedConfirm":"彻底删除这个归档会话?会话文件将被移除,此操作不可恢复。","desktop.removeProject":"移除项目","desktop.removeProjectConfirm":"项目“{name}”会从侧边栏移除,但不会删除磁盘上的文件。","desktop.removeProjectRunningConfirm":"该项目仍有会话在运行,确定移除吗?","desktop.showMore":"显示更多","desktop.viewFiles":"查看文件","desktop.backToSessions":"返回会话","desktop.newSessionHere":"在此项目新建会话","desktop.newTask":"新建任务","desktop.showAllProjects":"显示所有项目","desktop.showCurrentProject":"显示当前项目","desktop.sidebarModeHintTitle":"两种列表展示方式","desktop.sidebarModeHintDesc":"点这个按钮可在「当前项目下拉」与「全部项目面板」之间切换;面板还支持分组 / 时间线视图、归档和按项目查看文件树。","desktop.sidebarModeHintOk":"知道了","desktop.noProjects":"暂无项目","desktop.noArchivedSessions":"暂无归档会话","desktop.searchArchived":"搜索归档会话...","desktop.projectSectionHeader":"项目","desktop.closeTab":"关闭","desktop.closeTabWithLabel":"关闭 {label}","desktop.modelsHideApiKey":"隐藏 API 密钥","desktop.modelsShowApiKey":"显示 API 密钥","desktop.modelsInheritNone":"— 继承 / 无 —","desktop.modelsProvider":"提供商","desktop.modelsProviderName":"提供商名称","desktop.modelsBaseUrl":"基础 URL","desktop.modelsApiKey":"API 密钥","desktop.modelsApiKeyHelp":"使用 ! 前缀运行 shell 命令,或使用环境变量名称","desktop.modelsApiKeyPlaceholder":"环境变量名称、!shell 命令或原始密钥","desktop.modelsApi":"API","desktop.modelsDefault":"默认","desktop.modelsDisabled":"已禁用","desktop.modelsCustom":"自定义","desktop.modelsModelSection":"模型","desktop.modelsTestingConnection":"正在测试模型连接...","desktop.modelsConnected":"已连接","desktop.modelsFailed":"失败","desktop.modelsTestConnection":"测试模型连接","desktop.modelsTesting":"测试中…","desktop.modelsTest":"测试","desktop.modelsOk":"正常","desktop.modelsRemove":"移除","desktop.modelsIdRequired":"ID *","desktop.modelsName":"名称","desktop.modelsDisplayName":"显示名称","desktop.modelsApiOverride":"覆盖 API","desktop.modelsReasoningThinking":"推理 / 思考","desktop.modelsImageInput":"图片输入","desktop.modelsDeepSeekCompat":"DeepSeek 思考兼容模式","desktop.modelsThinkingLevelMap":"思考级别映射","desktop.modelsClearAll":"清除全部","desktop.modelsDiscoveryFetching":"正在导入模型…","desktop.modelsDiscoveryFetch":"导入模型…","desktop.modelsDiscoveryFilterPlaceholder":"筛选 {count} 个模型…","desktop.modelsDiscoveryFilter":"筛选上游模型","desktop.modelsDiscoverySelectShown":"选择当前结果","desktop.modelsDiscoveryNoMatches":"没有匹配的模型。","desktop.modelsDiscoveryAdded":"已添加","desktop.modelsDiscoveryShowing":"显示前 {shown} 个,共 {total} 个","desktop.modelsDiscoveryFetched":"已获取 {count} 个模型","desktop.modelsDiscoveryAddSelected":"添加所选模型","desktop.modelsDiscoveryAddSelectedCount":"添加所选模型({count})","desktop.modelsCatalogSource":"来源:models.dev ↗","desktop.modelsCatalogFilling":"正在填入模型信息…","desktop.modelsCatalogFill":"填入模型信息","desktop.modelsCatalogFilled":"已填入 {count} 个字段","desktop.modelsCatalogNoEmptyFields":"没有需要填入的空字段","desktop.modelsCatalogNoExactMatch":"models.dev 中没有精确匹配","desktop.modelsCatalogPriceProvider":"价格已匹配 Provider {provider}","desktop.modelsCatalogPriceBaseUrl":"价格已按 Base URL 匹配 {provider}","desktop.modelsCatalogPriceConsensus":"价格得到 {support}/{total} 条记录支持","desktop.modelsCatalogPriceUnreliable":"未找到可靠价格","desktop.modelsCatalogUndo":"撤销","desktop.modelsContextWindow":"上下文窗口(令牌)","desktop.modelsMaxOutputTokens":"最大输出令牌数","desktop.modelsCostPerMillionTokens":"费用(每百万令牌)","desktop.modelsSubscription":"订阅","desktop.titleModel":"标题生成模型","desktop.titleModelDescription":'用于自动生成会话标题的模型。保持"跟随会话模型"则使用每个会话自身的模型。',"desktop.titleModelFollowSession":"跟随会话模型(默认)","desktop.titleModelInvalid":"已不再导入——标题生成将回退到会话模型","desktop.titleModelSaved":"已保存","desktop.titleModelSaveError":"保存标题生成模型设置失败","desktop.modelsNotConnected":"未连接","desktop.modelsAlreadyConnected":"已连接。你可以重新登录或断开连接。","desktop.modelsConnectAccount":"连接你的 {provider} 账户。","desktop.modelsOpeningBrowser":"正在打开浏览器…","desktop.modelsCompleteSignIn":"请在浏览器中完成登录,然后复制地址栏中的重定向 URL 并粘贴到下方。","desktop.modelsBrowserDidNotOpen":"如果浏览器窗口未打开,","desktop.modelsOpenLoginPage":"点击此处打开登录页面","desktop.modelsEnterValue":"输入值…","desktop.modelsOpenVerificationPage":"打开验证页面并输入此代码:","desktop.modelsExpiresInMinutes":"将在 {count} 分钟后过期。","desktop.modelsConnectedSuccessfully":"连接成功。","desktop.modelsReLogin":"重新登录","desktop.modelsLogin":"登录","desktop.modelsDisconnect":"断开连接","desktop.modelsConnectionLost":"连接已断开","desktop.modelsAuthenticationStateChanged":"认证状态已变化,请刷新后重试。","providerUsage.usage":"用量","providerUsage.notQueried":"尚未查询","providerUsage.refresh":"刷新用量","providerUsage.refreshing":"正在刷新用量","providerUsage.updated":"更新于 {time}","providerUsage.queryFailed":"用量查询失败。","providerUsage.available":"可用","desktop.modelsVerifying":"验证中…","desktop.modelsContinuing":"正在继续…","desktop.modelsServerError":"服务器错误 {status}","desktop.modelsNetworkError":"网络错误","desktop.modelsConfigured":"已配置","desktop.modelsNotConfigured":"未配置","desktop.modelsApiKeyStored":"API 密钥已保存。请在下方输入新密钥以替换它,或断开连接以移除它。","desktop.modelsEnableModels":"输入你的 {provider} API 密钥以启用 {count} 个{models}。","desktop.modelsSingular":"模型","desktop.modelsPlural":"模型","desktop.modelsEnterNewKey":"输入新密钥以替换…","desktop.modelsSaving":"保存中…","desktop.modelsSaved":"已保存","desktop.modelsRemoving":"移除中…","desktop.modelsSearchProviders":"搜索提供商…","desktop.modelsNoProvidersMatch":"没有匹配的提供商","desktop.modelsCompatibleProvider":"兼容 OpenAI / Anthropic","desktop.modelsCustomEndpointFormat":"自定义端点格式","desktop.modelsAddCustomTitle":"添加自定义提供商","desktop.modelsProviderNameOptional":"提供商名称(可选)","desktop.modelsCallFormat":"调用格式","desktop.modelsCallFormatHelp":"选择一种现有的调用格式","desktop.modelsCustomCallFormat":"自定义调用格式","desktop.modelsCustomCallFormatHelp":"自定义端点默认按 OpenAI 兼容协议(openai-completions)请求;若你的接口是其它协议,请在上方格式下拉中改选。","desktop.modelsFullUrl":"完整 URL","desktop.modelsAddModelManual":"添加模型","desktop.modelsImportProvider":"从已有提供商导入","desktop.modelsImportProviderPlaceholder":"— 导入现有提供商配置 —","desktop.modelsImported":"已导入","desktop.modelsAddUrl":"+ 添加 URL","desktop.modelsUrlPlaceholder":"https://api.example.com/v1","desktop.modelsUrlInvalid":"URL 必须以 http:// 或 https:// 开头","desktop.modelsCustomRequest":"自定义请求","desktop.modelsRequestModelId":"请求模型 ID","desktop.modelsRequestModelIdHelp":"可选 — 创建带这些请求设置的首个模型","desktop.modelsRequestContextLength":"上下文长度(令牌)","desktop.modelsRequestOutputLength":"输出长度(令牌)","desktop.modelsAdd":"添加","desktop.modelsSubscriptions":"订阅","desktop.modelsCount":"{count} 个模型","desktop.modelsLoading":"加载中…","desktop.modelsNewModel":"新模型","desktop.modelsAddModel":"+ 添加模型","desktop.modelsAddProvider":"+ 添加提供商","desktop.modelsSelectProviderOrModel":"选择提供商或模型","desktop.modelsClose":"关闭模型设置","desktop.modelsSave":"保存","desktop.searchModels":"搜索模型…","desktop.noModelsMatch":"没有匹配的模型","desktop.global":"全局","desktop.project":"项目","desktop.path":"路径","desktop.addPlugin":"添加插件","desktop.addPluginTitle":"添加插件","desktop.pluginSource":"来源","desktop.install":"安装","desktop.installing":"正在安装...","desktop.examples":"示例","desktop.disabled":"已禁用","desktop.filtered":"已筛选","desktop.noResources":"没有资源","desktop.packageDisabled":"软件包已禁用","desktop.noResolvedResources":"没有已解析的资源","desktop.unknown":"未知","desktop.installedVersion":"已安装 {version}","desktop.configuredVersion":"已配置 {version}","desktop.enablePackage":"启用软件包","desktop.disablePackage":"禁用软件包","desktop.update":"更新","desktop.updating":"正在更新...","desktop.reloadSession":"重新加载会话","desktop.reloading":"正在重新加载...","desktop.reloadCurrentSession":"重新加载当前会话","desktop.openSessionToReload":"打开一个会话以重新加载","desktop.remove":"移除","desktop.removing":"正在移除...","desktop.status":"状态","desktop.version":"版本","desktop.package":"软件包","desktop.resources":"资源","desktop.installedPath":"安装路径","desktop.notFound":"未找到","desktop.cwd":"当前目录","desktop.resolvedResources":"已解析资源","desktop.packageRemoved":"软件包已移除。","desktop.packageInstalled":"软件包已安装。","desktop.packageUpdated":"软件包已更新。","desktop.packageDisabledMessage":"软件包已禁用。","desktop.packageEnabled":"软件包已启用。","desktop.sessionReloaded":"会话已重新加载。","desktop.noPluginsConfigured":"未配置插件","desktop.selectPackage":"选择一个软件包","desktop.diagnosticsCount":"{count} 条诊断信息","desktop.pluginResourceTotals":"{extensions} 个扩展 \xb7 {skills} 个技能 \xb7 {prompts} 个提示词 \xb7 {themes} 个主题","desktop.extensionsCount":"{count} 个扩展","desktop.skillsCount":"{count} 个技能","desktop.promptsCount":"{count} 个提示词","desktop.themesCount":"{count} 个主题","desktop.addSkill":"添加技能","desktop.addSkillTitle":"添加技能","desktop.skillSearchPlaceholder":"例如:react、testing、deploy","desktop.noSkillsFound":"未找到技能","desktop.skillSearchHint":"搜索 skills.sh,发现并为你的 Agent 安装技能。","desktop.visibleInModelPrompt":"在模型提示词中可见 — 点击以禁用","desktop.hiddenFromModelPrompt":"在模型提示词中隐藏 — 点击以启用","desktop.dormant":"休眠","desktop.hiddenButInvocable":"已从模型中隐藏,仍可手动调用","desktop.check":"检查","desktop.upToDate":"已是最新","desktop.automaticChecksUnavailable":"无法自动检查更新","desktop.checkFailed":"检查失败","desktop.name":"名称","desktop.description":"描述","desktop.selectSkill":"选择一个技能","desktop.checkUpdates":"检查更新","desktop.updateAvailable":"有可用更新","desktop.installed":"已安装","desktop.updatesCount":"{count} 个更新","desktop.downloadFile":"下载文件","desktop.loadingFile":"正在加载...","desktop.noChanges":"没有更改","desktop.unchangedLines":"... {count} 行未更改 ...","desktop.lines":"{count} 行","desktop.mentionFile":"提及文件","desktop.mentionSelectedLines":"提及所选行 {start}-{end}","desktop.source":"源文件","desktop.diff":"差异","desktop.enableWordWrap":"启用自动换行","desktop.disableWordWrap":"禁用自动换行","desktop.wrap":"换行","desktop.code":"代码","desktop.preview":"预览","desktop.raw":"原始内容","desktop.htmlPreview":"HTML 预览","desktop.image":"图片","desktop.audio":"音频","desktop.docxPreview":"DOCX 预览","desktop.failedToLoadImage":"加载图片失败","desktop.failedToLoadAudio":"加载音频失败","desktop.docxTooLargeForPreview":"DOCX 文件过大,无法预览(超过 10MB)","desktop.previewFile":"预览 {file}","desktop.branches":"分支","desktop.noActiveSession":"没有活动会话","desktop.sessionHasNoBranches":"此会话暂无分支 —— 对任意消息点「从这里继续」或「分叉」后会出现分支树","desktop.copyMessage":"复制消息","desktop.copyPlainText":"复制纯文本","desktop.createTaskFromMessage":"创建任务","desktop.editFromHere":"从此处编辑 — 在此会话内创建分支","desktop.creatingNewSession":"正在创建新会话…","desktop.newSessionFromHere":"新建会话 — 从此处创建独立副本","desktop.estimatedStreamingTokenCount":"流式输出期间的预估令牌数","desktop.tokensPerSecond":"{count} 令牌/秒","desktop.thinkingContentUnavailable":"思考内容不可用","desktop.loadingThinking":"正在加载思考内容...","desktop.conversationCompacted":"对话已压缩","desktop.compactionSummaryDescription":"此处之前的对话历史已压缩为以下摘要:","desktop.noSummary":"(无摘要)","desktop.fileContext":"文件上下文:{context}","desktop.readFilesCount":"已读取 {count} 个","desktop.modifiedFilesCount":"已修改 {count} 个","desktop.modifiedFiles":"已修改的文件","desktop.readFiles":"已读取的文件","desktop.hiddenExtensionMessage":"隐藏的扩展消息","desktop.noMessage":"(无消息)","desktop.showExtensionMessage":"显示扩展消息","desktop.copied":"已复制","desktop.copy":"复制","desktop.collapse":"收起","desktop.expand":"展开","desktop.hideDetails":"隐藏详情","desktop.showDetails":"显示详情","desktop.before":"之前","desktop.after":"之后","desktop.noOutput":"(无输出)","desktop.extension":"扩展","desktop.assistant":"助手","desktop.favorites":"收藏","desktop.favorite":"收藏","desktop.unfavorite":"取消收藏","desktop.processStepThinking":"思考","desktop.processStepFileRead":"读取","desktop.processStepFileCreate":"创建","desktop.processStepFileEdit":"编辑","desktop.processStepFileDelete":"删除","desktop.processStepSearch":"搜索","desktop.processStepFind":"查找","desktop.processStepList":"列出","desktop.processStepRead":"读取","desktop.processStepFetch":"抓取","desktop.processStepDelete":"删除","desktop.processStepCopy":"复制","desktop.processStepCommand":"运行","desktop.processStepTool":"工具","desktop.processStepTodo":"待办","desktop.processStepArtifact":"产物","desktop.processStepCompaction":"压缩","desktop.processStepError":"错误","desktop.processWorking":"工作中...","desktop.processUsed":"使用了 {summary}","desktop.processToolCount":"{count} 个工具","desktop.processToolsCount":"{count} 个工具","desktop.processFailedCount":"({failed} 个失败)","desktop.processThoughtCount":"{count} 条思考","desktop.processThoughtsCount":"{count} 条思考","desktop.processThoughtDone":"已思考 {duration}s","desktop.processThoughtDoneNoDuration":"已思考","desktop.processCustomCount":"{count} 个事件","desktop.processCustomsCount":"{count} 个事件","desktop.processCompleted":"处理完成","desktop.processOutput":"处理输出","desktop.processTabMode":"标签页模式","desktop.processTimelineMode":"时间线模式","desktop.processFailedStep":"失败","desktop.markdownPreviewAvailableAfterStreaming":"流式输出结束后可预览","desktop.markdownPreviewMermaidDiagram":"预览 Mermaid 图表","desktop.markdownInvalidMermaidDiagram":"无效的 Mermaid 图表","desktop.markdownRenderingMermaidDiagram":"正在渲染 Mermaid 图表","desktop.openMermaidViewer":"打开 Mermaid 查看器","desktop.mermaidDiagram":"Mermaid 图表","desktop.mermaidViewer":"Mermaid 图表查看器","desktop.zoomPanHint":"拖动平移 \xb7 滚轮缩放","desktop.selectText":"选择文本","desktop.zoomOut":"缩小","desktop.resetZoom":"重置为 100%(适应窗口)","desktop.zoomIn":"放大","desktop.fitToViewport":"适应窗口","desktop.quoteReply":"引用回复","desktop.quoteReplyHint":"点击引用回复","desktop.openFile":"打开","desktop.queueRecoveryTitle":"恢复排队消息","desktop.queueImportTitle":"导入的排队消息","desktop.queueRecoveryDescription":"这些消息在上一个服务会话结束前已保存。请选择要重新入队的消息;系统不会自动发送。","desktop.queueImportDescription":"请选择要重新入队的导入消息;系统不会自动发送。","desktop.selectAll":"全选","desktop.selectNone":"取消全选","desktop.import":"导入","desktop.queueImages":"图片附件","desktop.queueNoText":"(仅图片消息)","desktop.queueExported":"已导出 {count} 条消息","desktop.queueImportEmpty":"未找到有效的排队消息","desktop.queueImported":"已导入 {count} 条消息,等待确认","desktop.dismiss":"暂不处理","desktop.discard":"丢弃","desktop.requeue":"重新入队","desktop.requeueAndContinue":"重新入队并继续","desktop.markdownPlainText":"文本","desktop.hideTaskBoard":"隐藏任务看板","desktop.showTaskBoard":"显示任务看板","tasks.actionArchive":"归档","tasks.stashDone":"变更已成功暂存","tasks.actionCancel":"取消","tasks.actionEdit":"编辑","tasks.actionMerge":"合并","tasks.actionRequeue":"重新排队","tasks.actionRetry":"重试","tasks.actionReturn":"退回反馈","tasks.actionStart":"开始","tasks.actionComplete":"直接完成","tasks.actionUnarchive":"取消归档","tasks.actionViewSession":"查看会话","tasks.allFolders":"全部项目","tasks.archiveAllDone":"全部归档","tasks.badgeCleanupFailed":"清理失败","tasks.badgeWorktreeKept":"保留 worktree","tasks.beta":"Beta","tasks.cancelDescription":"任务将停止。可以留下取消原因,方便之后重新排队时了解背景(可选)。","tasks.cancelKeep":"保留任务","tasks.cancelReasonLabel":"取消原因(可选)","tasks.cancelReasonPlaceholder":"例如:方案不对、需求变了…","tasks.cancelSubmit":"取消任务","tasks.cancelTitle":"取消任务","tasks.changedFiles":"变更文件","tasks.colAttention":"待处理","tasks.colDone":"已完成","tasks.colInProgress":"进行中","tasks.colTodo":"待办","tasks.delete":"删除","tasks.deleteConfirm":"确认删除","tasks.deleteTemplate":"删除模板","tasks.deleteWorktree":"同时删除 worktree","tasks.diff":"差异","tasks.dropToStart":"松手启动","tasks.editTitle":"编辑任务","tasks.empty":"还没有任务","tasks.emptyColAttention":"没有需要你处理的任务","tasks.emptyColDone":"还没有完成的任务","tasks.emptyColInProgress":"没有正在执行的任务","tasks.emptyColTodo":"暂无待办任务","tasks.emptyHint":"创建一个任务,看板会驱动它完成整个流程——启动后会在 worktree 分支里运行 agent 直到结束。","tasks.errorView":"查看","tasks.event_archived":"已归档","tasks.event_canceled":"已取消","tasks.event_created":"已创建","tasks.event_failed":"失败","tasks.event_interrupted":"已中断","tasks.event_merge_failed":"合并失败","tasks.event_merge_requested":"合并请求","tasks.event_merged":"已合并","tasks.event_merging":"合并中","tasks.event_preflight_failed":"预检失败","tasks.event_preflight_passed":"预检通过","tasks.event_preflight_start":"预检运行中","tasks.event_preparing":"准备中","tasks.event_queued":"已排队","tasks.event_recovered":"已恢复","tasks.event_requeued":"已重新排队","tasks.event_return_feedback":"反馈","tasks.event_returned":"已退回","tasks.event_review":"待验收","tasks.event_started":"已启动","tasks.event_unarchived":"已取消归档","tasks.event_updated":"已更新","tasks.fieldProject":"项目","tasks.fieldPrompt":"任务说明","tasks.fieldPromptPlaceholder":"描述 agent 需要完成的工作…","tasks.fieldTitle":"标题","tasks.fieldTitlePlaceholder":"任务的简短标题","tasks.filter":"筛选","tasks.loading":"加载中…","tasks.mergeAutoMessage":"让 agent 自动写提交信息","tasks.mergeConfirm":"合并","tasks.mergeDeleteWorktree":"合并后删除 worktree","tasks.mergeManualMessage":"手动填写提交信息","tasks.mergeMessagePlaceholder":"提交信息…","tasks.mergeStrategyMerge":"合并提交","tasks.mergeStrategySquash":"压缩提交","tasks.mergeTitle":"合并任务","tasks.completeDeleteWorktree":"完成后删除 worktree","tasks.completeDescription":"该任务没有产生任何文件变更,无需合并。确认后直接标记为完成。","tasks.completeSubmit":"确认完成","tasks.completeTitle":"完成任务","tasks.followUpPlaceholderRequeue":"给 agent 的备注(可选)…","tasks.followUpPlaceholderRetry":"给 agent 的备注(可选)…","tasks.actionAddNote":"备注(可选)","tasks.restartDescription":"备注会注入下一次运行的提示词中(可选)。","tasks.restartTitleRequeue":"重新排队","tasks.restartTitleRetry":"重试","tasks.planReviewTitle":"计划已完成","tasks.planReviewDescription":"计划模式的分析已结束。你可以确认执行这份计划、提出建议继续完善,或退出计划模式。","tasks.planReviewShowPlan":"查看计划","tasks.planReviewHidePlan":"收起计划","tasks.planReviewExecute":"确认执行","tasks.planReviewExecutePrompt":"请按以下计划执行:\n\n{plan}","tasks.planReviewSuggest":"提出建议","tasks.planReviewSendFeedback":"发送建议","tasks.planReviewFeedbackLabel":"建议(将返回给 agent 继续完善计划)","tasks.planReviewFeedbackPlaceholder":"例如:先补充风险分析,拆分更细的步骤…","tasks.planReviewExit":"退出计划","tasks.metaCommit":"提交","tasks.metaCreated":"创建于","tasks.metaProject":"项目","tasks.new":"新建任务","tasks.newTitle":"新建任务","tasks.noDiff":"暂无差异","tasks.noEvents":"暂无事件","tasks.notifyFailed":"{title} 执行失败","tasks.notifyReview":"{title} 等待验收","tasks.returnPlaceholder":"给 agent 的反馈…","tasks.returnSubmit":"退回","tasks.save":"保存","tasks.saveAsTemplate":"存为模板","tasks.sessionFile":"会话文件","tasks.sessionHint":"任务的 agent 会话与其他会话一样存储。在会话列表中打开即可查看或继续。","tasks.sessionId":"会话 ID","tasks.sessionTitle":"任务会话","tasks.settingsAutoProcess":"自动处理排队任务","tasks.settingsDeleteWorktree":"合并后默认删除 worktree","tasks.settingsInitCommand":"初始化命令(agent 启动前在 worktree 中执行)","tasks.settingsInitPlaceholder":"例如 pnpm install","tasks.settingsMaxConcurrent":"最大并发任务数(0 = 不限)","tasks.settingsMergeStrategy":"合并策略","tasks.settingsNoProject":"先创建一个任务以选择项目。","tasks.settingsPreflightCommand":"预检命令(验收检查)","tasks.settingsPreflightPlaceholder":"例如 npm test","tasks.settingsProject":"项目","tasks.settingsReset":"恢复默认设置","tasks.settingsStagePrompts":"阶段提示词(附加指令)","tasks.settingsTitle":"任务设置","tasks.showArchived":"显示已归档","tasks.showCanceled":"显示已取消","tasks.stage_merge":"合并","tasks.stage_retry":"重试","tasks.stage_return":"退回","tasks.stage_work":"执行","tasks.startAll":"全部启动","tasks.statusAwaitingInput":"等待输入","tasks.statusCanceled":"已取消","tasks.statusDone":"已完成","tasks.statusFailed":"失败","tasks.statusInterrupted":"已中断","tasks.statusMerging":"合并中","tasks.statusPreparing":"准备中","tasks.statusQueued":"排队中","tasks.statusReview":"待验收","tasks.statusRunning":"运行中","tasks.statusTodo":"待办","tasks.templateNamePlaceholder":"模板名称…","tasks.templates":"模板","tasks.timeline":"时间线","tasks.title":"任务","tasks.attentionBadge":"条待处理","sidebar.checking":"检查中…","sidebar.open":"打开","sidebar.cancel":"取消","sidebar.openRepoRoot":"打开仓库根目录","sidebar.openRepoRootTitle":"打开仓库根目录以管理 worktree。","sidebar.gitRepoRootOnly":"仅 Git 仓库根目录","sidebar.gitRepoRootOnlyTitle":"只能在 Git 仓库根目录使用 worktree。","sidebar.worktrees":"Worktrees...","sidebar.checkingWorktrees":"正在检查此目录的 worktree。","sidebar.filterWorktrees":"筛选 worktree…","sidebar.noMatchingWorktrees":"没有匹配的 worktree","sidebar.switchWorktree":"切换 worktree","sidebar.switchWorktreeTitle":"切换 worktree:{path}","sidebar.main":"主分支","sidebar.forceRemoveCheckout":"存在未提交的更改。强制移除 checkout?","sidebar.force":"强制移除","sidebar.createWorktreeTitle":"为分支创建 worktree checkout","sidebar.newWorktree":"新建 worktree…","sidebar.branchName":"分支名称","sidebar.creating":"创建中…","sidebar.create":"创建","sidebar.uploadFilesTitle":"将文件上传到项目根目录","sidebar.uploadFiles":"上传文件","sidebar.refreshExplorer":"刷新文件浏览器","sidebar.searchSessions":"搜索所有对话...","sidebar.toggleSessionSearch":"搜索对话","sidebar.sessionSearching":"搜索中...","sidebar.sessionSearchEmpty":"没有匹配的对话","sidebar.sessionSearchCount":"{count} 个匹配的对话","sidebar.sessionSearchPartial":"已达到搜索上限,结果可能不完整。","sidebar.sessionSearchFailed":"无法搜索对话","sidebar.changedFiles":"{count} 个变更文件","sidebar.loading":"加载中...","sidebar.noSessions":"未找到会话","sidebar.agentRunning":"Agent 运行中…","sidebar.newActivity":"有新活动","sidebar.newSessionActivity":"会话有新活动","sidebar.deleteSession":"删除 {title}?","sidebar.rename":"重命名","sidebar.delete":"删除","sidebar.deleteWithShiftClick":"删除(按住 Shift 点击可跳过确认)","sidebar.messagesCount":"{count} 条消息","sidebar.worktreePath":"Worktree:{path}","sidebar.removeWorktreeTitle":"移除 worktree checkout {path};保留分支","files.modified":"已修改","files.added":"已添加","files.deleted":"已删除","files.renamed":"已重命名","files.untracked":"未跟踪","files.conflict":"冲突","files.newlyUploaded":"刚上传","files.containsChangedFiles":"包含已更改文件","files.insertPath":"将路径插入聊天","files.mention":"提及","files.download":"下载文件","files.dismissError":"关闭错误","files.addUploadedFile":"将上传的文件添加到聊天","files.addAllUploadedFiles":"将所有上传的文件添加到聊天","files.dismissUploadResults":"关闭上传结果","files.loading":"正在加载文件...","files.noFiles":"未找到文件","files.explorer":"文件浏览器","files.changedCount":"{count} 个文件","files.changeStats":"{count} 个变更文件,新增 {additions} 行,删除 {deletions} 行","files.conflictSummary":"已有 {count} 个文件:{files}","files.cannotReplace":"无法替换:{files}","files.replace":"替换","files.skipExisting":"跳过已有文件","files.cancel":"取消","files.checking":"正在检查文件","files.uploading":"正在上传,{progress}%","files.edit":"编辑","files.save":"保存","files.saveHint":"保存(Cmd/Ctrl+S)","files.cancelEdit":"取消编辑","files.saveFailed":"保存失败:{error}","files.unsavedChanges":"放弃未保存的改动?","files.externalModified":"文件已被外部修改。重新加载以获取最新版本。","files.reload":"重新加载","files.reloadOverwriteConfirm":"用磁盘上的版本覆盖未保存的改动?","files.newFile":"新建文件","files.newFolder":"新建文件夹","files.delete":"删除","files.promptFileName":"文件名","files.promptFolderName":"文件夹名","files.confirmDeleteFile":"删除“{name}”?此操作无法撤销。","files.confirmDeleteDirectory":"删除“{name}”及其所有内容?此操作无法撤销。","chat.loadingSession":"正在加载会话...","chat.runningTool":"正在运行工具...","chat.generatingToolInput":"正在生成参数...","chat.runningNamedTool":"正在运行 {name}...","chat.runningTools":"正在运行 {names}...","chat.runningToolsMore":"正在运行 {names}(另有 {count} 个)...","chat.waitingModel":"正在等待模型...","chat.runningCommand":"正在运行命令...","chat.thinking":"正在思考...","chat.processDetails":"处理详情","chat.message":"条消息","chat.messages":"条消息","chat.toolCall":"次工具调用","chat.toolCalls":"次工具调用","chat.collapseProcess":"收起处理详情","chat.expandProcess":"展开处理详情","chat.filesWritten":"改动的文件","chat.openWrittenFile":"打开 {name}","chat.loadEarlier":"向上滚动以加载更早的消息","chat.extensionRequest":"扩展请求","chat.extensionExpiresIn":"{seconds} 秒后过期","chat.extensionPending":"待回答","chat.extensionCollapse":"收起","chat.extensionExpand":"展开","chat.cancel":"取消","chat.confirm":"确认","chat.submit":"提交","chat.extensionInput":"扩展终端输入","chat.extensionPanel":"扩展面板","chat.extensionWidgets":"扩展组件","chat.extensionWidgetAbove":"输入框上方组件","chat.extensionWidgetBelow":"输入框下方组件","chat.extensionWidgetLine":"{count} 行","chat.extensionWidgetLines":"{count} 行","chat.close":"关闭","chat.queued":"已排队 \xb7 {count}","chat.recall":"移回输入框","chat.recallTitle":"移除所有排队消息并将其放回输入框编辑","chat.retrying":"正在重试({attempt}/{max})…","chat.loadingCommands":"正在加载命令...","chat.slashCommands":"斜杠命令 \xb7 {label}","chat.tabEnter":"Tab / Enter","chat.noCommands":"未找到扩展、提示词或技能命令","chat.match":"1 个匹配项","chat.matches":"{count} 个匹配项","chat.command":"1 个命令","chat.commands":"{count} 个命令","chat.loadingFiles":"正在加载文件...","chat.files":"文件 \xb7 {label}{hint}","chat.searching":"搜索中…","chat.noMatchingFiles":"未找到匹配的文件","chat.searchingAll":" \xb7 正在搜索所有文件…","chat.indexTruncated":" \xb7 索引不完整","chat.steerPlaceholder":"立即引导 / 排队后续消息...","chat.agentPlaceholder":"Agent 运行中…","chat.messagePlaceholder":"消息…输入 / 使用命令,输入 @ 查找文件","chat.steer":"引导","chat.followUp":"后续消息","chat.steerHint":"中断当前运行并立即注入此消息","chat.followUpHint":"在 Agent 完成后排队此消息","chat.inputHistory":"输入历史","chat.modelError":"模型错误","chat.modelScopeWarning":"模型范围警告","chat.modelScopeWarnings":"模型范围警告","chat.send":"发送","chat.askSelection":"询问选中的文字","chat.askInCurrent":"在当前对话询问","chat.askInNewChat":"在新对话询问","chat.newQuoteChat":"关于选中文字的新对话","chat.quoteIntro":"关于这段内容:","chat.quoteQuestion":"我的问题是:","chat.quoteForkFailed":"无法从这条消息创建分支。","chat.attachImage":"附加图片","chat.previewImage":"预览图片","chat.filterModels":"筛选模型…","chat.noMatchingModels":"没有匹配的模型","chat.moreControls":"更多控件","chat.collapseControls":"收起控件","chat.shell":"Shell","terminal.title":"终端","terminal.tabLabel":"终端:{name}","terminal.open":"打开工作区终端","terminal.close":"终止终端","terminal.restart":"重启终端","terminal.reconnect":"重新连接终端","terminal.connecting":"连接中","terminal.ready":"已连接","terminal.exited":"终端已关闭","terminal.error":"连接错误","terminal.exitCode":"进程已退出,退出码 {code}","chat.outputLocal":"输出保留在本地","chat.outputModel":"输出发送给模型","chat.chatOnly":"仅聊天","chat.readOnlyTools":"{count} 个只读内置工具","chat.builtInTools":"{count} 个内置工具","chat.allBuiltInTools":"全部内置工具","chat.changeReasoning":"更改推理级别:{level}","chat.changeReasoningLabel":"更改推理级别","chat.changeToolPreset":"更改工具预设","chat.stopCompaction":"停止压缩","chat.compactContext":"压缩上下文","chat.compacting":"正在压缩…","chat.compact":"压缩","chat.stopAgent":"停止 Agent","chat.stop":"停止","chat.disableSound":"关闭完成提示音","chat.enableSound":"开启完成提示音","chat.thinkingUseDefault":"使用 pi 默认设置","chat.thinkingOff":"关闭推理","chat.thinkingMinimal":"最低限度推理","chat.thinkingLow":"低强度推理","chat.thinkingMedium":"中等强度推理","chat.thinkingHigh":"高强度推理","chat.thinkingXhigh":"超高强度推理","chat.thinkingMax":"最高强度推理","chat.builtIn":"内置","chat.extensions":"扩展","chat.prompts":"提示词","chat.skills":"技能","chat.dormant":"休眠","chat.commandCompact":"压缩上下文,可选附加说明","chat.commandReload":"重新加载扩展、技能、提示词和工具","chat.commandName":"设置会话显示名称","chat.commandSession":"显示会话消息、Token 和费用统计","chat.commandCopy":"复制最后一条助手消息","chat.commandClone":"将当前分支复制为独立新会话","chat.compacted":"已压缩","chat.imageNotSupportedTitle":"图片可能无法发送","chat.imageNotSupportedBody":"当前选择的模型({model})不支持图片输入,附加的图片可能会被忽略。","chat.tokensSaved":"节省 {saved}","i18n.copy":"复制","i18n.copied":"已复制","i18n.save":"保存","i18n.saving":"保存中…","i18n.saved":"已保存","i18n.remove":"移除","i18n.removing":"移除中…","i18n.delete":"删除","i18n.loading":"加载中...","i18n.loadMore":"加载更多","auth.brand":"Pi Agent Web","auth.prompt":"登录后继续使用","auth.password":"密码","auth.logIn":"登录","auth.loggingIn":"正在登录...","auth.invalidPassword":"密码不正确","auth.loginFailed":"登录失败,请重试。","auth.cookieNotSaved":"密码正确,但浏览器没有保存登录状态(Cookie 被拒绝)。请允许本站使用 Cookie,或退出无痕/隐私模式后重试。","auth.sessionExpired":"登录状态已过期,请重新输入密码。","auth.sessionMissing":"浏览器没有返回本站的登录 Cookie:可能开启了无痕/隐私浏览,或浏览器清理了网站数据(Safari「防止跨站跟踪」/「退出时清除历史记录」都会导致)。","auth.logOut":"退出登录","auth.loggingOut":"正在退出...","auth.logoutFailed":"退出失败,请重试。","i18n.search":"搜索","i18n.refresh":"刷新","i18n.update":"更新","i18n.updating":"更新中...","i18n.check":"检查","i18n.install":"安装","i18n.installing":"安装中...","i18n.noResults":"没有结果","i18n.searchProviders":"搜索 Provider…","i18n.noProviders":"没有匹配的 Provider","i18n.newModel":"新模型","i18n.addProvider":"添加 Provider","i18n.selectProviderModel":"选择 Provider 或模型","i18n.visibleInPrompt":"在模型提示词中可见,点击以禁用","i18n.hiddenFromPrompt":"在模型提示词中隐藏,点击以启用","i18n.dormant":"休眠","i18n.hiddenButInvocable":"对模型隐藏,仍可手动调用","i18n.skillSearchPlaceholder":"例如 react、testing、deploy","i18n.searching":"搜索中…","i18n.noSkills":"未找到技能","i18n.checkUpdates":"检查更新","i18n.updates":"项更新","i18n.noResolvedResources":"没有已解析资源","i18n.enablePackage":"启用包","i18n.disablePackage":"禁用包","i18n.filtered":"已筛选","i18n.openSessionToReload":"打开会话后才能重新加载","i18n.notFound":"未找到","i18n.noPlugins":"未配置插件","trust.resourcesNotLoaded":"受限模式","trust.trustProject":"信任项目","trust.trusting":"正在信任...","trust.cancel":"取消","trust.dialogTitle":"信任此项目?","trust.dialogBody":"项目资源可以运行本地代码。请仅信任你了解其内容的项目。","trust.skillsNotLoaded":"此项目尚未受信任,项目技能未加载。","trust.pluginsNotLoaded":"此项目尚未受信任,项目插件未加载。","trust.projectScopeUnavailable":"项目资源未加载时,无法安装到项目范围。","i18n.creatingSession":"正在创建新会话…","i18n.creating":"创建中…","i18n.subscription":"订阅","i18n.subscriptions":"订阅服务","i18n.customEndpoint":"自定义端点格式","i18n.noChanges":"没有更改","i18n.branches":"分支","i18n.noActiveSession":"没有活动会话","i18n.noBranches":"此会话没有分支","i18n.source":"源代码","i18n.preview":"预览","i18n.diff":"Diff","i18n.downloadFile":"下载文件","i18n.liveSync":"实时同步已启用","i18n.notWatching":"未监视","i18n.fileViewMode":"文件视图模式","i18n.compareHead":"比较工作区与 HEAD","i18n.mentionSelectedLines":"提及所选行","i18n.disableWrap":"禁用自动换行","i18n.enableWrap":"启用自动换行","i18n.htmlPreview":"HTML 预览","i18n.previewFile":"预览 {file}","i18n.invalidMermaid":"Mermaid 图表无效","i18n.renderingMermaid":"正在渲染 Mermaid 图表","i18n.previewAfterStreaming":"流式输出完成后可预览","i18n.showMermaidSource":"显示 Mermaid 源码","i18n.previewMermaid":"预览 Mermaid 图表","i18n.openMermaidViewer":"打开图表查看器","i18n.mermaidViewer":"Mermaid 图表查看器","i18n.mermaidDiagram":"Mermaid 图表","i18n.zoomOut":"缩小","i18n.zoomIn":"放大","i18n.fitToWidth":"适应宽度","models.discoveryFetching":"正在导入模型…","models.discoveryFetch":"导入模型…","models.discoveryFilterPlaceholder":"筛选 {count} 个模型…","models.discoveryFilter":"筛选上游模型","models.discoverySelectShown":"选择当前结果","models.discoveryNoMatches":"没有匹配的模型。","models.discoveryAdded":"已添加","models.discoveryShowing":"显示前 {shown} 个,共 {total} 个","models.discoveryFetched":"已获取 {count} 个模型","models.discoveryAddSelected":"添加所选模型","models.discoveryAddSelectedCount":"添加所选模型({count})","models.catalogSource":"来源:models.dev ↗","models.catalogFilling":"正在填入模型信息…","models.catalogFill":"填入模型信息","models.catalogFilled":"已填入 {count} 个字段","models.catalogNoEmptyFields":"没有需要填入的空字段","models.catalogNoExactMatch":"models.dev 中没有精确匹配","models.catalogPriceProvider":"价格已匹配 Provider {provider}","models.catalogPriceBaseUrl":"价格已按 Base URL 匹配 {provider}","models.catalogPriceConsensus":"价格得到 {support}/{total} 条记录支持","models.catalogPriceUnreliable":"未找到可靠价格","models.catalogUndo":"撤销","models.capabilities":"能力","models.reasoning":"推理 / 思考","models.imageInput":"图片输入","models.modelSpecs":"模型规格","models.contextWindow":"上下文窗口(tokens)","models.maxOutputTokens":"最大输出 tokens","models.costPerMillion":"每百万 tokens 价格","models.costInput":"输入","models.costOutput":"输出","models.costCacheRead":"缓存读取","models.costCacheWrite":"缓存写入","models.notProvided":"未提供","models.editCosts":"编辑价格","models.finishEditingCosts":"完成","models.costAllRequired":"请输入有效的非负价格;留空项将按 0 保存。","models.advancedSettings":"高级设置","models.providerDefaults":"沿用 Provider 默认设置","models.headersSummary":"Headers:{count}","models.compatSummary":"兼容性:{count}","models.thinkingSummary":"思考等级:{count}","models.apiOverride":"API 覆盖","models.headers":"Headers","models.headersHelp":"仅添加到该模型的请求中,并覆盖 Provider 的同名 Header。","models.compatibility":"兼容性","models.deepSeekThinkingCompat":"DeepSeek 思考兼容","models.developerRole":"使用 developer role 传递系统提示词","models.thinkingLevelMap":"思考等级映射","models.clearAll":"全部清除","i18n.testingModel":"正在测试模型连接...","i18n.connected":"已连接","i18n.failed":"失败","i18n.test":"测试","i18n.testConnection":"测试模型连接","i18n.provider":"Provider","i18n.model":"模型","i18n.providerName":"Provider 名称","i18n.rename":"重命名","i18n.default":"默认","i18n.disabled":"已禁用","i18n.noResources":"没有资源","i18n.unknown":"未知","i18n.installedVersion":"已安装 {version}","i18n.configuredVersion":"已配置 {version}","i18n.extensions":"扩展","i18n.prompts":"提示词","i18n.themes":"主题","i18n.resourceCount":"{count}{label}","i18n.extensionShort":"扩展","i18n.skillShort":"技能","i18n.promptShort":"提示词","i18n.themeShort":"主题","i18n.custom":"自定义","i18n.clearAll":"清除全部","i18n.connectedSuccessfully":"连接成功。","i18n.notConnected":"未连接","i18n.configured":"已配置","i18n.notConfigured":"未配置","i18n.openingBrowser":"正在打开浏览器…","i18n.submit":"提交","i18n.login":"登录","i18n.relogin":"重新登录","i18n.disconnect":"断开连接","i18n.networkError":"网络错误","i18n.continuing":"继续中…","i18n.skills":"技能","i18n.plugins":"插件","i18n.addSkill":"添加技能","i18n.addPlugin":"添加插件","i18n.selectSkill":"选择技能","i18n.selectPackage":"选择包","i18n.updateAvailable":"有可用更新","i18n.upToDate":"已是最新","i18n.automaticChecksUnavailable":"自动检查不可用","i18n.checkFailed":"检查失败","i18n.installed":"已安装","i18n.status":"状态","i18n.version":"版本","i18n.package":"包","i18n.resources":"资源","i18n.installedPath":"安装路径","i18n.cwd":"CWD","i18n.resolvedResources":"已解析资源","i18n.reloadSession":"重新加载会话","i18n.reloading":"重新加载中...","i18n.packageRemoved":"包已移除。","i18n.packageInstalled":"包已安装。","i18n.packageUpdated":"包已更新。","i18n.packagesUpdated":"所有插件已更新。","i18n.updateAllPlugins":"更新全部","i18n.updateAllPluginsHint":"更新所有已配置的插件","i18n.packageDisabled":"包已禁用。","i18n.packageEnabled":"包已启用。","i18n.sessionReloaded":"会话已重新加载。","i18n.thinking":"思考","i18n.largeMessageReveal":"消息内容过大({size})。点击以纯文本查看 — 已禁用 markdown 渲染以避免页面卡顿。","i18n.loadingThinking":"正在加载思考内容...","i18n.copyMessage":"复制消息","i18n.editFromHere":"从此处编辑","i18n.editFromHereTitle":"从此处编辑,此会话内创建分支","i18n.newSession":"新会话","i18n.newSessionTitle":"新会话,从此处创建独立副本","i18n.estimatedTokens":"流式输出期间的估算 Token 数","i18n.noOutput":"(无输出)","i18n.openImage":"打开图片","i18n.noSummary":"(无摘要)","i18n.conversationCompacted":"会话已压缩","i18n.compactionDescription":"此处之前的会话历史已压缩为以下摘要:","i18n.fileContext":"文件上下文:{details}","i18n.readFiles":"读取的文件","i18n.modifiedFiles":"修改的文件","i18n.hiddenExtensionMessage":"隐藏的扩展消息","i18n.noMessage":"(无消息)","i18n.showExtensionMessage":"显示扩展消息","i18n.collapse":"收起","i18n.expand":"展开","i18n.hideDetails":"隐藏详情","i18n.showDetails":"显示详情","i18n.thinkingUnavailable":"思考内容不可用","i18n.before":"之前","i18n.after":"之后","i18n.sessionComplete":"任务完成","i18n.taskFinished":"任务已完成。","i18n.attentionNeeded":"Pi 需要你的操作","i18n.extensionInputNeeded":"扩展正在等待你的输入。"}});let r="pi-locale",l=(0,i.createContext)(null);function p({children:e}){let[t,s]=(0,i.useState)("en"),[a,c]=(0,i.useState)(!1);(0,i.useEffect)(()=>{let e=function(){try{let e=window.localStorage.getItem(r);if("en"===e||"zh-CN"===e)return e}catch{}for(let e of window.navigator.languages.length?window.navigator.languages:[window.navigator.language]){let t=e.toLowerCase();if("en"===t||t.startsWith("en-"))break;if("zh"===t||"zh-cn"===t||t.startsWith("zh-cn-")||"zh-sg"===t||t.startsWith("zh-sg-")||"zh-hans"===t||t.startsWith("zh-hans-")||"zh-tw"===t||t.startsWith("zh-tw-")||"zh-hk"===t||t.startsWith("zh-hk-")||"zh-mo"===t||t.startsWith("zh-mo-")||"zh-hant"===t||t.startsWith("zh-hant-")||t.startsWith("zh-"))return"zh-CN"}return"en"}();s(e),document.documentElement.lang=e,c(!0)},[]);let k=(0,i.useMemo)(()=>(function(){let e=d("en"),t=d("zh-CN");if(!e||!t)throw Error("Built-in locales must be registered before rendering I18nProvider");return{en:e.messages,"zh-CN":t.messages}})(),[]),m=(0,i.useMemo)(()=>[...n.keys()].map(e=>d(e)).filter(e=>!!e),[]),u=(0,i.useCallback)(e=>{if(d(e)){s(e);document.documentElement.lang=e,document.documentElement.dataset.language=e;try{window.localStorage.setItem(r,e)}catch{}}},[]),g=(0,i.useCallback)((e,s)=>(function(e,t,s,o={}){let i=s[e]?.[t]??s.en?.[t];return void 0===i?t:function(e,t={}){return e.replace(/\{([\w.-]+)\}/g,(e,s)=>{let o=t[s];return void 0===o?e:String(o)})}(i,o)})(t,e,k,s),[t,k]),h=(0,i.useMemo)(()=>({locale:t,setLocale:u,t:g,supportedLocales:m}),[t,u,g,m]);return(0,o.jsx)(l.Provider,{value:h,children:a?e:null})}function c(){let e=(0,i.useContext)(l);if(!e)throw Error("useI18n must be used inside I18nProvider");return e}}}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4520],{42309:(e,a,s)=>{"use strict";s.r(a),s.d(a,{default:()=>r});var t=s(95155),i=s(12115),n=s(39247);function l(){let{t:e}=(0,n.s)(),[a,s]=(0,i.useState)(""),[l,r]=(0,i.useState)(!1),[o,c]=(0,i.useState)(""),[h,d]=(0,i.useState)("");(0,i.useEffect)(()=>{let a=new URLSearchParams(window.location.search).get("reason");"invalid"===a?d(e("auth.sessionExpired")):"missing"===a&&d(e("auth.sessionMissing"))},[]);let u=async s=>{s.preventDefault(),r(!0),c("");try{let s,t=await fetch("/api/web-auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:a})});if(!t.ok)return void c(401===t.status?e("auth.invalidPassword"):e("auth.loginFailed"));let i=await fetch("/api/web-auth",{cache:"no-store"}),n=await i.json().catch(()=>null);if(!n?.authenticated)return void c(e("auth.cookieNotSaved"));window.location.replace((s=new URLSearchParams(window.location.search).get("next"),s?.startsWith("/")&&!s.startsWith("//")?s:"/"))}catch{c(e("auth.loginFailed"))}finally{r(!1)}};return(0,t.jsx)("main",{className:"web-login-page",children:(0,t.jsxs)("div",{className:"web-login-shell",children:[(0,t.jsxs)("header",{className:"web-login-brand",children:[(0,t.jsx)("img",{src:"/favicon.svg",width:56,height:56,alt:""}),(0,t.jsxs)("div",{className:"web-login-brand-copy",children:[(0,t.jsx)("h1",{children:e("auth.brand")}),(0,t.jsx)("p",{children:e("auth.prompt")})]})]}),(0,t.jsxs)("form",{className:"web-login-form",onSubmit:u,children:[(0,t.jsx)("input",{id:"web-login-password",className:"web-login-password",type:"password",value:a,onChange:e=>s(e.target.value),placeholder:e("auth.password"),"aria-label":e("auth.password"),autoComplete:"current-password",autoFocus:!0,required:!0,disabled:l}),(0,t.jsx)("button",{type:"submit",className:"web-login-submit",disabled:l||!a,children:l?e("auth.loggingIn"):e("auth.logIn")}),(0,t.jsx)("p",{className:"web-login-error",role:"alert","aria-live":"polite",children:o}),h&&!o&&(0,t.jsx)("p",{className:"web-login-hint",children:h})]})]})})}function r(){return(0,t.jsx)(n.I18nProvider,{children:(0,t.jsx)(l,{})})}},63364:(e,a,s)=>{Promise.resolve().then(s.bind(s,42309))}},e=>{e.O(0,[9247,8441,3794,7358],()=>e(e.s=63364)),_N_E=e.O()}]);