@neuralnomads/codenomad-dev 0.20.0-dev-20260905-52f0e629 → 0.20.0-dev-20260907-e9e94a67

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 (110) hide show
  1. package/dist/api-types.js +1 -0
  2. package/dist/api-types.js.map +1 -1
  3. package/dist/opencode/automation-plugin.test.js +14 -1
  4. package/dist/opencode/automation-plugin.test.js.map +1 -1
  5. package/dist/server/routes/binary-validation.test.js +41 -0
  6. package/dist/server/routes/binary-validation.test.js.map +1 -0
  7. package/dist/server/routes/settings.js +2 -3
  8. package/dist/server/routes/settings.js.map +1 -1
  9. package/dist/workspaces/__tests__/binary-probe-fixture.js +46 -0
  10. package/dist/workspaces/__tests__/binary-probe-fixture.js.map +1 -0
  11. package/dist/workspaces/__tests__/binary-probe.test.js +81 -0
  12. package/dist/workspaces/__tests__/binary-probe.test.js.map +1 -0
  13. package/dist/workspaces/__tests__/spawn.test.js +39 -1
  14. package/dist/workspaces/__tests__/spawn.test.js.map +1 -1
  15. package/dist/workspaces/host-opencode-service.test.js +25 -0
  16. package/dist/workspaces/host-opencode-service.test.js.map +1 -1
  17. package/dist/workspaces/opencode-cli-compatibility.js +32 -0
  18. package/dist/workspaces/opencode-cli-compatibility.js.map +1 -0
  19. package/dist/workspaces/opencode-cli-compatibility.test.js +35 -0
  20. package/dist/workspaces/opencode-cli-compatibility.test.js.map +1 -0
  21. package/dist/workspaces/opencode-cli-service.js +14 -2
  22. package/dist/workspaces/opencode-cli-service.js.map +1 -1
  23. package/dist/workspaces/spawn.js +94 -31
  24. package/dist/workspaces/spawn.js.map +1 -1
  25. package/dist/workspaces/wsl-opencode-service.test.js +18 -0
  26. package/dist/workspaces/wsl-opencode-service.test.js.map +1 -1
  27. package/package.json +1 -1
  28. package/public/assets/{App-CqjB0XCD.js → App-lAZZOE--.js} +8 -8
  29. package/public/assets/App-lAZZOE--.js.map +1 -0
  30. package/public/assets/{FilesTab-5DFefbXn.js → FilesTab-CgfwF6tR.js} +2 -2
  31. package/public/assets/{FilesTab-5DFefbXn.js.map → FilesTab-CgfwF6tR.js.map} +1 -1
  32. package/public/assets/{GitChangesTab-DpT-MHU0.js → GitChangesTab-r1JoAD9n.js} +2 -2
  33. package/public/assets/{GitChangesTab-DpT-MHU0.js.map → GitChangesTab-r1JoAD9n.js.map} +1 -1
  34. package/public/assets/{SplitFilePanel-BbE1LzCe.js → SplitFilePanel-D9FfoZUZ.js} +2 -2
  35. package/public/assets/{SplitFilePanel-BbE1LzCe.js.map → SplitFilePanel-D9FfoZUZ.js.map} +1 -1
  36. package/public/assets/{StatusTab-BFoX-V9X.js → StatusTab-DMnWj5WS.js} +2 -2
  37. package/public/assets/{StatusTab-BFoX-V9X.js.map → StatusTab-DMnWj5WS.js.map} +1 -1
  38. package/public/assets/{align-justify-qrXM4H3l.js → align-justify-Dc1gjAkp.js} +2 -2
  39. package/public/assets/{align-justify-qrXM4H3l.js.map → align-justify-Dc1gjAkp.js.map} +1 -1
  40. package/public/assets/{bundle-full-unk5xR1Y.js → bundle-full-CXK0RpEe.js} +2 -2
  41. package/public/assets/{bundle-full-unk5xR1Y.js.map → bundle-full-CXK0RpEe.js.map} +1 -1
  42. package/public/assets/{client-state-CHCvxsCU.js → client-state-DmImbmIC.js} +2 -2
  43. package/public/assets/{client-state-CHCvxsCU.js.map → client-state-DmImbmIC.js.map} +1 -1
  44. package/public/assets/{diff-viewer-RKOl9AXZ.js → diff-viewer-CbJWj99J.js} +2 -2
  45. package/public/assets/{diff-viewer-RKOl9AXZ.js.map → diff-viewer-CbJWj99J.js.map} +1 -1
  46. package/public/assets/index-AwBa5De4.js +2 -0
  47. package/public/assets/index-AwBa5De4.js.map +1 -0
  48. package/public/assets/index-BJSdILt0.js +2 -0
  49. package/public/assets/index-BJSdILt0.js.map +1 -0
  50. package/public/assets/index-BfORYhCR.js +3 -0
  51. package/public/assets/index-BfORYhCR.js.map +1 -0
  52. package/public/assets/{index-CEAIa6p2.js → index-Bv4cVEdt.js} +2 -2
  53. package/public/assets/{index-CEAIa6p2.js.map → index-Bv4cVEdt.js.map} +1 -1
  54. package/public/assets/{index-Cld6pmhN.js → index-C1AVy0gw.js} +2 -2
  55. package/public/assets/{index-Cld6pmhN.js.map → index-C1AVy0gw.js.map} +1 -1
  56. package/public/assets/index-C8aIk3bb.js +2 -0
  57. package/public/assets/index-C8aIk3bb.js.map +1 -0
  58. package/public/assets/index-CF7UTwOC.js +2 -0
  59. package/public/assets/index-CF7UTwOC.js.map +1 -0
  60. package/public/assets/index-D5cfewGV.js +2 -0
  61. package/public/assets/index-D5cfewGV.js.map +1 -0
  62. package/public/assets/index-Dggdc5Fz.js +2 -0
  63. package/public/assets/index-Dggdc5Fz.js.map +1 -0
  64. package/public/assets/index-UtSy15g1.js +2 -0
  65. package/public/assets/index-UtSy15g1.js.map +1 -0
  66. package/public/assets/index-kaTj6a0V.js +2 -0
  67. package/public/assets/index-kaTj6a0V.js.map +1 -0
  68. package/public/assets/{index-DtTSGKVJ.js → index-xkTcWbMt.js} +2 -2
  69. package/public/assets/index-xkTcWbMt.js.map +1 -0
  70. package/public/assets/{loading-D3uPMfMu.js → loading-CLjF2dnt.js} +2 -2
  71. package/public/assets/{loading-D3uPMfMu.js.map → loading-CLjF2dnt.js.map} +1 -1
  72. package/public/assets/{main-BwbZb3g5.js → main-CA9pw_Mr.js} +24 -24
  73. package/public/assets/main-CA9pw_Mr.js.map +1 -0
  74. package/public/assets/{markdown-BJLcfdun.js → markdown-DP0osupz.js} +4 -4
  75. package/public/assets/{markdown-BJLcfdun.js.map → markdown-DP0osupz.js.map} +1 -1
  76. package/public/assets/{startup-state-settings-card-B4gPI-c4.js → startup-state-settings-card-Bc27wplD.js} +2 -2
  77. package/public/assets/{startup-state-settings-card-B4gPI-c4.js.map → startup-state-settings-card-Bc27wplD.js.map} +1 -1
  78. package/public/assets/{terminal-square-B5KdW_c-.js → terminal-square-4t6I40X6.js} +2 -2
  79. package/public/assets/{terminal-square-B5KdW_c-.js.map → terminal-square-4t6I40X6.js.map} +1 -1
  80. package/public/assets/{tool-call-B9DCPGVo.js → tool-call-BIHyGWIy.js} +4 -4
  81. package/public/assets/{tool-call-B9DCPGVo.js.map → tool-call-BIHyGWIy.js.map} +1 -1
  82. package/public/assets/{unified-picker-BvxdLAJQ.js → unified-picker-CpvYPG8V.js} +2 -2
  83. package/public/assets/{unified-picker-BvxdLAJQ.js.map → unified-picker-CpvYPG8V.js.map} +1 -1
  84. package/public/assets/{wrap-text-NfrmWiEu.js → wrap-text-Dq8UDb8D.js} +2 -2
  85. package/public/assets/{wrap-text-NfrmWiEu.js.map → wrap-text-Dq8UDb8D.js.map} +1 -1
  86. package/public/index.html +2 -2
  87. package/public/loading.html +2 -2
  88. package/public/sw.js +1 -1
  89. package/public/sw.js.map +1 -1
  90. package/public/assets/App-CqjB0XCD.js.map +0 -1
  91. package/public/assets/index-BOrPHA7t.js +0 -2
  92. package/public/assets/index-BOrPHA7t.js.map +0 -1
  93. package/public/assets/index-BaPs8N0o.js +0 -2
  94. package/public/assets/index-BaPs8N0o.js.map +0 -1
  95. package/public/assets/index-BrjHffsb.js +0 -2
  96. package/public/assets/index-BrjHffsb.js.map +0 -1
  97. package/public/assets/index-C-CjhNjl.js +0 -2
  98. package/public/assets/index-C-CjhNjl.js.map +0 -1
  99. package/public/assets/index-CvrBisww.js +0 -2
  100. package/public/assets/index-CvrBisww.js.map +0 -1
  101. package/public/assets/index-DDpJlsfl.js +0 -3
  102. package/public/assets/index-DDpJlsfl.js.map +0 -1
  103. package/public/assets/index-DViQvmpk.js +0 -2
  104. package/public/assets/index-DViQvmpk.js.map +0 -1
  105. package/public/assets/index-DtTSGKVJ.js.map +0 -1
  106. package/public/assets/index-DvRzkWiJ.js +0 -2
  107. package/public/assets/index-DvRzkWiJ.js.map +0 -1
  108. package/public/assets/index-HuQOubUd.js +0 -2
  109. package/public/assets/index-HuQOubUd.js.map +0 -1
  110. package/public/assets/main-BwbZb3g5.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-xkTcWbMt.js","sources":["../../../lib/i18n/messages/zh-Hans/advancedSettings.ts","../../../lib/i18n/messages/zh-Hans/app.ts","../../../lib/i18n/messages/zh-Hans/commands.ts","../../../lib/i18n/messages/zh-Hans/dialogs.ts","../../../lib/i18n/messages/zh-Hans/filesystem.ts","../../../lib/i18n/messages/zh-Hans/folderSelection.ts","../../../lib/i18n/messages/zh-Hans/instance.ts","../../../lib/i18n/messages/zh-Hans/loadingScreen.ts","../../../lib/i18n/messages/zh-Hans/logs.ts","../../../lib/i18n/messages/zh-Hans/markdown.ts","../../../lib/i18n/messages/zh-Hans/messaging.ts","../../../lib/i18n/messages/zh-Hans/remoteAccess.ts","../../../lib/i18n/messages/zh-Hans/session.ts","../../../lib/i18n/messages/zh-Hans/settings.ts","../../../lib/i18n/messages/zh-Hans/time.ts","../../../lib/i18n/messages/zh-Hans/toolCall.ts","../../../lib/i18n/messages/zh-Hans/index.ts"],"sourcesContent":["export const advancedSettingsMessages = {\n \"advancedSettings.title\": \"高级设置\",\n \"advancedSettings.environmentVariables.title\": \"环境变量\",\n \"advancedSettings.environmentVariables.subtitle\": \"每当启动新的 OpenCode 实例时应用\",\n \"advancedSettings.actions.close\": \"关闭\",\n} as const\n","export const appMessages = {\n \"window.title.main\": \"CodeNomad\",\n \"window.controls.minimize\": \"最小化窗口\",\n \"window.controls.maximize\": \"最大化或还原窗口\",\n \"window.controls.close\": \"关闭窗口\",\n \"window.menu.ariaLabel\": \"应用程序菜单\",\n \"window.menu.file\": \"文件\",\n \"window.menu.edit\": \"编辑\",\n \"window.menu.view\": \"视图\",\n \"window.menu.window\": \"窗口\",\n \"window.menu.help\": \"帮助\",\n \"app.launchError.title\": \"无法启动 OpenCode\",\n \"app.launchError.description\": \"OpenCode 无法启动此工作区。请查看下面的错误输出或检查 OpenCode 设置。\",\n \"app.launchError.binaryPathLabel\": \"可执行文件路径\",\n \"app.launchError.errorOutputLabel\": \"错误输出\",\n \"app.launchError.openAdvancedSettings\": \"打开 OpenCode 设置\",\n \"app.launchError.close\": \"关闭\",\n \"app.launchError.closeTitle\": \"关闭 (Esc)\",\n \"app.launchError.fallbackMessage\": \"启动工作区失败\",\n \"app.launchError.invalidConfig\": \"OpenCode 配置无效\",\n\n \"app.stopInstance.confirmMessage\": \"停止 OpenCode 实例?这将停止服务器。\",\n \"app.stopInstance.title\": \"停止实例\",\n \"app.stopInstance.confirmLabel\": \"停止\",\n \"app.stopInstance.cancelLabel\": \"继续运行\",\n \"app.stopInstance.toast.error\": \"无法停止工作区。\",\n\n \"emptyState.logoAlt\": \"CodeNomad 徽标\",\n \"emptyState.brandTitle\": \"CodeNomad\",\n \"emptyState.tagline\": \"选择文件夹,开始与 AI 一起编码\",\n \"emptyState.actions.selectFolder\": \"选择文件夹\",\n \"emptyState.actions.selecting\": \"正在选择...\",\n \"emptyState.keyboardShortcut\": \"键盘快捷键:{shortcut}\",\n \"emptyState.examples\": \"示例:{example}\",\n \"emptyState.multipleInstances\": \"同一个文件夹可以同时打开多个实例\",\n\n \"releases.upgradeRequired.title\": \"需要升级\",\n \"releases.upgradeRequired.message.withVersion\": \"更新到 CodeNomad {version} 以使用最新的 UI。\",\n \"releases.upgradeRequired.message.noVersion\": \"更新 CodeNomad 以使用最新的 UI。\",\n \"releases.upgradeRequired.action.getUpdate\": \"获取更新\",\n\n \"releases.uiUpdated.title\": \"UI 已更新\",\n \"releases.uiUpdated.message\": \"UI 已更新到 {version}。\",\n\n \"releases.devUpdateAvailable.title\": \"可用的开发版\",\n \"releases.devUpdateAvailable.message\": \"有新的开发版可用:{version}。\",\n \"releases.devUpdateAvailable.action\": \"查看发布\",\n\n \"theme.mode.system\": \"系统\",\n \"theme.mode.light\": \"浅色\",\n \"theme.mode.dark\": \"深色\",\n \"theme.toggle.title\": \"主题:{mode}\",\n \"theme.toggle.ariaLabel\": \"主题:{mode}\",\n} as const\n","export const commandMessages = {\n \"commandPalette.title\": \"命令面板\",\n \"commandPalette.description\": \"搜索并执行命令\",\n \"commandPalette.searchPlaceholder\": \"输入命令或搜索...\",\n \"commandPalette.empty\": \"未找到与 \\\"{query}\\\" 匹配的命令\",\n \"commandPalette.category.customCommands\": \"自定义命令\",\n \"commandPalette.category.instance\": \"实例\",\n \"commandPalette.category.session\": \"会话\",\n \"commandPalette.category.agentModel\": \"智能体与模型\",\n \"commandPalette.category.inputFocus\": \"输入与焦点\",\n \"commandPalette.category.system\": \"系统\",\n \"commandPalette.category.other\": \"其他\",\n\n \"commands.newInstance.label\": \"新建实例\",\n \"commands.newInstance.description\": \"打开文件夹选择器以创建新实例\",\n \"commands.newInstance.keywords\": \"folder, project, workspace, 文件夹, 项目, 工作区\",\n \"commands.openWorkspace.folder.label\": \"打开项目文件夹\",\n \"commands.openWorkspace.folder.description\": \"在文件管理器中打开当前项目文件夹\",\n \"commands.openWorkspace.folder.keywords\": \"文件夹, 资源管理器, 文件\",\n \"commands.openWorkspace.terminal.label\": \"在此处打开终端\",\n \"commands.openWorkspace.terminal.description\": \"在当前项目文件夹中打开外部终端\",\n \"commands.openWorkspace.terminal.keywords\": \"终端, shell, 控制台\",\n \"commands.openWorkspace.editor.label\": \"在{editor}中打开项目\",\n \"commands.openWorkspace.editor.description\": \"在{editor}中打开当前项目文件夹\",\n \"commands.openWorkspace.editor.keywords\": \"编辑器, ide, 代码\",\n \"commands.openWorkspace.failed.title\": \"无法打开项目\",\n \"commands.openWorkspace.failed.message\": \"{message}\",\n \"commands.openWorkspace.projectRequired.title\": \"没有打开的项目\",\n \"commands.openWorkspace.projectRequired.message\": \"请先打开一个项目。\",\n\n \"commands.closeInstance.label\": \"关闭标签页\",\n \"commands.closeInstance.description\": \"关闭当前顶层标签页\",\n \"commands.closeInstance.keywords\": \"stop, quit, close, 停止, 退出, 关闭, 标签\",\n \"commands.stopInstance.label\": \"停止工作区\",\n \"commands.stopInstance.description\": \"为所有窗口停止共享工作区\",\n \"commands.stopInstance.keywords\": \"停止, 工作区, 服务器, 共享\",\n\n \"commands.nextInstance.label\": \"下一个标签页\",\n \"commands.nextInstance.description\": \"切换到下一个顶层标签页\",\n \"commands.nextInstance.keywords\": \"switch, navigate, 切换, 导航, 标签\",\n\n \"commands.previousInstance.label\": \"上一个标签页\",\n \"commands.previousInstance.description\": \"切换到上一个顶层标签页\",\n \"commands.previousInstance.keywords\": \"switch, navigate, 切换, 导航, 标签\",\n\n \"commands.newSession.label\": \"新建会话\",\n \"commands.newSession.description\": \"创建新的父会话\",\n \"commands.newSession.keywords\": \"create, start, 创建, 开始\",\n\n \"commands.closeSession.label\": \"关闭会话\",\n \"commands.closeSession.description\": \"关闭当前父会话\",\n \"commands.closeSession.keywords\": \"close, stop, 关闭, 停止\",\n\n \"commands.scrubSessions.label\": \"清理会话\",\n \"commands.scrubSessions.description\": \"移除空会话、已完成主任务的子智能体会话,以及多余的分叉会话。\",\n \"commands.scrubSessions.keywords\": \"cleanup, blank, empty, sessions, remove, delete, scrub, 清理, 空白, 会话, 删除, 整理\",\n\n \"commands.instanceInfo.label\": \"实例信息\",\n \"commands.instanceInfo.description\": \"打开实例概览以查看日志和状态\",\n \"commands.instanceInfo.keywords\": \"info, logs, console, output, 信息, 日志, 控制台, 输出\",\n\n \"commands.nextSession.label\": \"下一个会话\",\n \"commands.nextSession.description\": \"切换到下一个会话标签页\",\n \"commands.nextSession.keywords\": \"switch, navigate, 切换, 导航\",\n\n \"commands.previousSession.label\": \"上一个会话\",\n \"commands.previousSession.description\": \"切换到上一个会话标签页\",\n \"commands.previousSession.keywords\": \"switch, navigate, 切换, 导航\",\n\n \"commands.compactSession.label\": \"压缩会话\",\n \"commands.compactSession.description\": \"总结并压缩当前会话\",\n \"commands.compactSession.keywords\": \"summarize, compress, 总结, 压缩\",\n \"commands.compactSession.errorFallback\": \"压缩会话失败\",\n \"commands.compactSession.alert.title\": \"压缩失败\",\n \"commands.compactSession.alert.message\": \"压缩失败:{message}\",\n \"commands.removeSessionTechnicalParts.label\": \"删除会话工具和推理\",\n \"commands.removeSessionTechnicalParts.description\": \"保留最终回复并删除已完成的工具输出和推理\",\n \"commands.removeSessionTechnicalParts.keywords\": \"清理, 工具, 推理, 删除, 会话\",\n \"commands.removeSessionTechnicalParts.empty.title\": \"没有可删除的内容\",\n \"commands.removeSessionTechnicalParts.empty.message\": \"此会话没有已完成的工具输出或推理块。\",\n \"commands.removeSessionTechnicalParts.confirm.title\": \"删除工具和推理?\",\n \"commands.removeSessionTechnicalParts.confirm.message\": \"工具输出:{toolCount};推理块:{reasoningCount}。最终回复文本将保留。\",\n \"commands.removeSessionTechnicalParts.confirm.label\": \"删除\",\n \"commands.removeSessionTechnicalParts.failed.title\": \"删除失败\",\n \"commands.removeSessionTechnicalParts.failed.message\": \"无法清理 {count} 个回复。\",\n\n \"commands.undoLastMessage.label\": \"撤销上一条消息\",\n \"commands.undoLastMessage.description\": \"回退上一条消息\",\n \"commands.undoLastMessage.keywords\": \"revert, undo, 回退, 撤销\",\n \"commands.undoLastMessage.none.title\": \"没有可撤销的操作\",\n \"commands.undoLastMessage.none.message\": \"没有可撤销的内容\",\n \"commands.undoLastMessage.failed.title\": \"撤销失败\",\n \"commands.undoLastMessage.failed.message\": \"回退消息失败\",\n \"commands.redoLastMessage.label\": \"重做上一条消息\",\n \"commands.redoLastMessage.description\": \"清除已暂存的撤销\",\n \"commands.redoLastMessage.keywords\": \"重做, 恢复, 清除撤销\",\n \"commands.redoLastMessage.failed.title\": \"重做失败\",\n \"commands.redoLastMessage.failed.message\": \"无法清除已暂存的撤销\",\n\n \"commands.openModelSelector.label\": \"打开模型选择器\",\n \"commands.openModelSelector.description\": \"选择其他模型\",\n \"commands.openModelSelector.keywords\": \"model, llm, ai, 模型\",\n\n \"commands.selectModelVariant.label\": \"选择模型变体\",\n \"commands.selectModelVariant.description\": \"为当前模型选择思考强度\",\n \"commands.selectModelVariant.keywords\": \"variant, thinking, reasoning, effort, 变体, 思考, 推理, 强度\",\n\n \"commands.openAgentSelector.label\": \"打开智能体选择器\",\n \"commands.openAgentSelector.description\": \"选择其他智能体\",\n \"commands.openAgentSelector.keywords\": \"agent, mode, 智能体, 模式\",\n\n \"commands.clearInput.label\": \"清空输入\",\n \"commands.clearInput.description\": \"清空 prompt 输入框\",\n \"commands.clearInput.keywords\": \"clear, reset, 清空, 重置\",\n\n \"commands.promptSubmitShortcut.label.default\": \"Enter: 换行, Cmd/Ctrl+Enter: 提交提示词\",\n \"commands.promptSubmitShortcut.label.swapped\": \"Enter: 提交提示词, Cmd/Ctrl+Enter: 换行\",\n \"commands.promptSubmitShortcut.description\": \"在提示词输入框中交换 Enter 与 Cmd/Ctrl+Enter 的行为\",\n \"commands.promptSubmitShortcut.keywords\": \"enter, 换行, 提交, 发送, 快捷键, cmd, ctrl, 提示词\",\n\n \"commands.thinkingBlocks.label.show\": \"显示思考\",\n \"commands.thinkingBlocks.label.hide\": \"隐藏思考\",\n \"commands.thinkingBlocks.description\": \"显示或隐藏 AI 思考部分\",\n \"commands.thinkingBlocks.keywords\": \"thinking, reasoning, toggle, show, hide, 思考, 推理, 切换, 显示, 隐藏\",\n\n \"commands.timelineToolCalls.label.show\": \"显示时间轴工具调用\",\n \"commands.timelineToolCalls.label.hide\": \"隐藏时间轴工具调用\",\n \"commands.timelineToolCalls.description\": \"切换消息时间轴中的工具调用条目\",\n \"commands.timelineToolCalls.keywords\": \"timeline, tool, toggle, 时间轴, 工具, 切换\",\n\n \"commands.keyboardShortcutHints.label.show\": \"显示键盘快捷键提示\",\n \"commands.keyboardShortcutHints.label.hide\": \"隐藏键盘快捷键提示\",\n \"commands.keyboardShortcutHints.description\": \"显示或隐藏界面中的键盘快捷键提示\",\n \"commands.keyboardShortcutHints.description.disabledWeb\": \"WebUI 中已禁用(提示始终隐藏)\",\n \"commands.keyboardShortcutHints.keywords\": \"shortcuts, keyboard, hints, 快捷键, 键盘, 提示\",\n\n \"commands.common.expanded\": \"展开\",\n \"commands.common.collapsed\": \"折叠\",\n \"commands.common.visible\": \"可见\",\n \"commands.common.hidden\": \"隐藏\",\n \"commands.common.enabled\": \"启用\",\n \"commands.common.disabled\": \"禁用\",\n\n \"commands.thinkingBlocksDefault.label\": \"思考视图: {state}\",\n \"commands.thinkingBlocksDefault.description\": \"在显示时折叠 / 展开 AI 思考部分\",\n \"commands.thinkingBlocksDefault.keywords\": \"thinking, reasoning, expand, collapse, default, 思考, 推理, 展开, 折叠, 默认\",\n\n \"commands.diffViewSplit.label\": \"使用分栏 Diff 视图\",\n \"commands.diffViewSplit.description\": \"并排显示工具调用的 diff\",\n \"commands.diffViewSplit.keywords\": \"diff, split, view, 差异, 分栏, 视图\",\n\n \"commands.diffViewUnified.label\": \"使用统一 Diff 视图\",\n \"commands.diffViewUnified.description\": \"以内联方式显示工具调用的 diff\",\n \"commands.diffViewUnified.keywords\": \"diff, unified, view, 差异, 统一, 视图\",\n\n \"commands.toolOutputsDefault.label\": \"工具输出默认 · {state}\",\n \"commands.toolOutputsDefault.description\": \"设置工具输出的默认可见性\",\n \"commands.toolOutputsDefault.keywords\": \"tool, output, hide, expand, collapse, 工具, 输出, 隐藏, 展开, 折叠\",\n\n \"commands.diagnosticsDefault.label\": \"诊断默认 · {state}\",\n \"commands.diagnosticsDefault.description\": \"设置诊断输出的默认可见性\",\n \"commands.diagnosticsDefault.keywords\": \"diagnostics, hide, expand, collapse, 诊断, 隐藏, 展开, 折叠\",\n\n \"commands.toolInputsVisibility.label\": \"工具输入可见性 · {state}\",\n \"commands.toolInputsVisibility.description\": \"设置工具调用输入参数的默认可见性\",\n \"commands.toolInputsVisibility.keywords\": \"工具, 输入, 参数, 可见性, 隐藏, 显示, 展开, 折叠, tool, inputs, arguments, visibility, hide, show, expand, collapse\",\n\n \"commands.tokenUsageDisplay.label\": \"Token 使用显示 · {state}\",\n \"commands.tokenUsageDisplay.description\": \"显示或隐藏助手消息的 token 和费用统计\",\n \"commands.tokenUsageDisplay.keywords\": \"token, usage, cost, stats, 令牌, 用量, 费用, 统计\",\n\n \"commands.autoCleanupBlankSessions.label\": \"自动清理空白会话 · {state}\",\n \"commands.autoCleanupBlankSessions.description\": \"在创建新会话时自动清理空白会话\",\n \"commands.autoCleanupBlankSessions.keywords\": \"auto, cleanup, blank, sessions, toggle, 自动, 清理, 空白, 会话, 切换\",\n\n \"commands.showHelp.label\": \"显示帮助\",\n \"commands.showHelp.description\": \"显示键盘快捷键与帮助\",\n \"commands.showHelp.keywords\": \"shortcuts, help, 快捷键, 帮助\",\n\n \"commands.custom.argumentsPrompt.message\": \"/{name} 的参数\",\n \"commands.custom.argumentsPrompt.title\": \"自定义命令\",\n \"commands.custom.argumentsPrompt.inputLabel\": \"参数\",\n \"commands.custom.argumentsPrompt.inputPlaceholder\": \"例如 foo bar\",\n \"commands.custom.argumentsPrompt.confirmLabel\": \"运行\",\n \"commands.custom.argumentsPrompt.cancelLabel\": \"取消\",\n \"commands.custom.argumentsPrompt.openFailed.message\": \"无法打开参数输入框。\",\n \"commands.custom.argumentsPrompt.openFailed.title\": \"命令参数\",\n \"commands.custom.entries.descriptionFallback\": \"自定义命令\",\n \"commands.custom.sessionRequired.message\": \"运行自定义命令前请先选择一个会话。\",\n \"commands.custom.sessionRequired.title\": \"需要会话\",\n \"commands.custom.runFailed.message\": \"运行自定义命令失败。请查看控制台了解详情。\",\n \"commands.custom.runFailed.title\": \"命令失败\",\n\n \"unifiedPicker.loading.searching\": \"正在搜索...\",\n \"unifiedPicker.loading.loadingWorkspace\": \"正在加载工作区...\",\n \"unifiedPicker.title.command\": \"选择命令\",\n \"unifiedPicker.title.mention\": \"选择智能体或文件\",\n \"unifiedPicker.empty\": \"未找到结果\",\n \"unifiedPicker.sections.commands\": \"命令\",\n \"unifiedPicker.sections.agents\": \"智能体\",\n \"unifiedPicker.sections.files\": \"文件\",\n \"unifiedPicker.sections.workspaceRoot\": \"工作区根目录\",\n \"unifiedPicker.badge.subagent\": \"子智能体\",\n \"unifiedPicker.footer.navigate\": \"导航\",\n \"unifiedPicker.footer.select\": \"选择\",\n \"unifiedPicker.footer.close\": \"关闭\",\n} as const\n","export const dialogMessages = {\n \"alertDialog.fallbackTitle.info\": \"提示\",\n \"alertDialog.fallbackTitle.warning\": \"请确认\",\n \"alertDialog.fallbackTitle.error\": \"出错了\",\n \"alertDialog.actions.confirm\": \"确认\",\n \"alertDialog.actions.run\": \"运行\",\n \"alertDialog.actions.ok\": \"确定\",\n \"alertDialog.actions.cancel\": \"取消\",\n \"alertDialog.prompt.inputLabel\": \"输入\",\n\n \"backgroundProcessOutputDialog.title\": \"后台输出\",\n \"backgroundProcessOutputDialog.actions.close\": \"关闭\",\n \"backgroundProcessOutputDialog.loading\": \"正在加载输出...\",\n \"backgroundProcessOutputDialog.truncatedNotice\": \"为便于显示,输出已截断。\",\n \"backgroundProcessOutputDialog.loadErrorFallback\": \"加载输出失败。\",\n} as const\n","export const filesystemMessages = {\n \"directoryBrowser.defaultDescription\": \"浏览已配置的工作区根目录下的文件夹。\",\n \"directoryBrowser.close\": \"关闭\",\n \"directoryBrowser.currentFolder\": \"选择文件夹或输入路径\",\n \"directoryBrowser.currentFolder.inputAriaLabel\": \"文件夹路径\",\n \"directoryBrowser.currentFolder.inputPlaceholder\": \"输入或粘贴文件夹路径\",\n \"directoryBrowser.openCurrent\": \"打开\",\n \"directoryBrowser.selectCurrent\": \"选择当前\",\n \"directoryBrowser.newFolder\": \"新建文件夹\",\n \"directoryBrowser.creating\": \"正在创建…\",\n \"directoryBrowser.loadingFolders\": \"正在加载文件夹…\",\n \"directoryBrowser.noFolders\": \"没有可用的文件夹。\",\n \"directoryBrowser.upOneLevel\": \"上一级\",\n \"directoryBrowser.select\": \"选择\",\n \"directoryBrowser.load.errorFallback\": \"无法加载文件系统\",\n \"directoryBrowser.createFolder.promptMessage\": \"在当前目录中新建文件夹。\",\n \"directoryBrowser.createFolder.title\": \"新建文件夹\",\n \"directoryBrowser.createFolder.inputLabel\": \"文件夹名称\",\n \"directoryBrowser.createFolder.inputPlaceholder\": \"例如 my-new-project\",\n \"directoryBrowser.createFolder.confirmLabel\": \"创建\",\n \"directoryBrowser.createFolder.cancelLabel\": \"取消\",\n \"directoryBrowser.createFolder.invalidNameMessage\": \"请输入单个文件夹名称。\",\n \"directoryBrowser.createFolder.invalidNameDetail\": \"文件夹名称不能包含斜杠、\\\"..\\\" 或 \\\"~\\\"。\",\n \"directoryBrowser.createFolder.errorFallback\": \"无法创建文件夹\",\n\n \"filesystemBrowser.descriptionFallback\": \"在已配置的工作区根目录下搜索路径。\",\n \"filesystemBrowser.rootLabel\": \"根目录:{root}\",\n \"filesystemBrowser.actions.close\": \"关闭\",\n \"filesystemBrowser.actions.retry\": \"重试\",\n \"filesystemBrowser.actions.select\": \"选择\",\n \"filesystemBrowser.filterLabel\": \"筛选\",\n \"filesystemBrowser.search.placeholder.directories\": \"搜索文件夹\",\n \"filesystemBrowser.search.placeholder.files\": \"搜索文件\",\n \"filesystemBrowser.currentFolder.label\": \"当前文件夹\",\n \"filesystemBrowser.currentFolder.selectCurrent\": \"选择当前\",\n \"filesystemBrowser.loading.filesystem\": \"文件系统\",\n \"filesystemBrowser.loading.workspaceRoot\": \"工作区根目录\",\n \"filesystemBrowser.loading.loadingWithPath\": \"正在加载 {path}…\",\n \"filesystemBrowser.empty.noEntries\": \"未找到任何条目。\",\n \"filesystemBrowser.navigation.upOneLevel\": \"上一级\",\n \"filesystemBrowser.hints.navigate\": \"导航\",\n \"filesystemBrowser.hints.select\": \"选择\",\n \"filesystemBrowser.hints.close\": \"关闭\",\n \"filesystemBrowser.errors.loadFilesystemFallback\": \"无法加载文件系统\",\n \"filesystemBrowser.errors.openDirectoryFallback\": \"无法打开目录\",\n} as const\n","export const folderSelectionMessages = {\n \"folderSelection.language.ariaLabel\": \"语言\",\n\n \"folderSelection.logoAlt\": \"CodeNomad 徽标\",\n \"folderSelection.tagline\": \"选择文件夹,开始与 AI 一起编码\",\n\n \"folderSelection.links.github\": \"CodeNomad 的 GitHub\",\n \"folderSelection.links.githubStars\": \"CodeNomad GitHub Star 数\",\n \"folderSelection.links.discord\": \"CodeNomad 的 Discord\",\n\n \"folderSelection.empty.title\": \"没有最近的文件夹\",\n \"folderSelection.empty.description\": \"浏览并选择文件夹以开始使用\",\n\n \"folderSelection.recent.title\": \"最近的文件夹\",\n \"folderSelection.recent.subtitle.one\": \"{count} 个文件夹可用\",\n \"folderSelection.recent.subtitle.other\": \"{count} 个文件夹可用\",\n \"folderSelection.recent.rename\": \"重命名工作区\",\n \"folderSelection.recent.remove\": \"从最近列表移除\",\n \"folderSelection.recent.openBadge\": \"已打开\",\n \"folderSelection.recent.openNewInstance\": \"打开新实例\",\n \"folderSelection.recent.switchToOpenProject\": \"切换到已打开的项目\",\n\n \"folderSelection.browse.title\": \"浏览文件夹\",\n \"folderSelection.browse.subtitle\": \"选择你电脑上的任意文件夹\",\n \"folderSelection.browse.button\": \"浏览文件夹\",\n \"folderSelection.browse.buttonOpening\": \"正在打开...\",\n \"folderSelection.clone.button\": \"克隆 Git 仓库\",\n \"folderSelection.clone.destination.title\": \"选择克隆目标位置\",\n \"folderSelection.clone.destination.description\": \"选择要将仓库克隆到的文件夹。\",\n \"folderSelection.clone.dialog.title\": \"克隆 Git 仓库\",\n \"folderSelection.clone.dialog.description\": \"将 Git 仓库克隆到本地文件夹,然后作为工作区打开。\",\n \"folderSelection.clone.dialog.repositoryUrl\": \"仓库 URL\",\n \"folderSelection.clone.dialog.repositoryUrlPlaceholder\": \"https://github.com/user/repo.git\",\n \"folderSelection.clone.dialog.destinationPath\": \"目标文件夹\",\n \"folderSelection.clone.dialog.destinationPathPlaceholder\": \"选择或输入目标文件夹\",\n \"folderSelection.clone.dialog.browseDestination\": \"浏览\",\n \"folderSelection.clone.dialog.cleanupDestination\": \"如果目标文件夹已存在,先将其删除。\",\n \"folderSelection.clone.dialog.cancel\": \"取消\",\n \"folderSelection.clone.dialog.clone\": \"克隆\",\n \"folderSelection.clone.dialog.cloning\": \"正在克隆...\",\n \"folderSelection.clone.dialog.errorRequired\": \"仓库 URL 和目标文件夹为必填项。\",\n \"folderSelection.actions.title\": \"打开文件夹或连接服务器\",\n \"folderSelection.actions.subtitle\": \"打开本地文件夹或连接到 CodeNomad 服务器\",\n \"folderSelection.actions.connectButton\": \"连接 CodeNomad 服务器\",\n\n \"folderSelection.advancedSettings\": \"高级设置\",\n \"folderSelection.opencode\": \"OpenCode\",\n\n \"folderSelection.hints.navigate\": \"导航\",\n \"folderSelection.hints.select\": \"选择\",\n \"folderSelection.hints.remove\": \"移除\",\n \"folderSelection.hints.browse\": \"浏览\",\n\n \"folderSelection.loading.title\": \"正在启动实例...\",\n \"folderSelection.loading.subtitle\": \"正在准备你的工作区,请稍候。\",\n\n \"folderSelection.drop.title\": \"拖放文件夹以打开\",\n \"folderSelection.drop.subtitle\": \"在拖放的文件夹中启动一个新实例。\",\n \"folderSelection.drop.invalidTitle\": \"无法打开拖放的项目\",\n \"folderSelection.drop.invalidMessage\": \"请拖放一个文件夹来启动新实例。\",\n\n \"folderSelection.dialog.title\": \"选择工作区\",\n \"folderSelection.dialog.description\": \"选择工作区以开始编码。\",\n\n \"folderSelection.tabs.local\": \"本地文件夹\",\n \"folderSelection.tabs.servers\": \"服务器\",\n \"folderSelection.servers.title\": \"已保存的服务器\",\n \"folderSelection.servers.subtitle\": \"在新窗口中打开已保存的远程 CodeNomad 服务器\",\n \"folderSelection.servers.count\": \"{count} 个服务器\",\n \"folderSelection.servers.empty.title\": \"没有已保存的服务器\",\n \"folderSelection.servers.empty.description\": \"添加远程服务器,以便在此设备上快速重新连接\",\n \"folderSelection.servers.connectTitle\": \"连接到服务器\",\n \"folderSelection.servers.connectSubtitle\": \"保存远程 CodeNomad 服务器并在新窗口中打开它\",\n \"folderSelection.servers.connectButton\": \"连接到服务器\",\n \"folderSelection.servers.remove\": \"删除已保存服务器\",\n \"folderSelection.servers.skipTls\": \"自签名 TLS\",\n \"folderSelection.servers.errorTitle\": \"远程连接失败\",\n \"folderSelection.servers.dialog.title\": \"连接到服务器\",\n \"folderSelection.servers.dialog.description\": \"添加远程 CodeNomad 服务器,并可选择立即打开。\",\n \"folderSelection.servers.dialog.name\": \"服务器名称\",\n \"folderSelection.servers.dialog.namePlaceholder\": \"生产服务器\",\n \"folderSelection.servers.dialog.url\": \"服务器 URL\",\n \"folderSelection.servers.dialog.urlPlaceholder\": \"https://server.example.com\",\n \"folderSelection.servers.dialog.skipTls\": \"为自签名证书跳过 TLS 验证。\",\n \"folderSelection.servers.dialog.cancel\": \"取消\",\n \"folderSelection.servers.dialog.save\": \"保存\",\n \"folderSelection.servers.dialog.connect\": \"连接\",\n \"folderSelection.servers.dialog.connecting\": \"连接中...\",\n \"folderSelection.servers.dialog.errorRequired\": \"服务器名称和 URL 为必填项。\",\n \"folderSelection.servers.dialog.errorConnect\": \"无法连接到远程服务器。\",\n \"folderSelection.servers.certificateInstall.title\": \"安装本地证书\",\n \"folderSelection.servers.certificateInstall.confirmMessage\": \"CodeNomad 需要安装本地证书,才能打开使用自签名 HTTPS 的远程窗口。此证书仅用于你这台设备上的本地桌面代理流量。之后你的操作系统可能还会显示第二个证书提示。\",\n \"folderSelection.servers.certificateInstall.confirmLabel\": \"继续\",\n \"folderSelection.servers.certificateInstall.cancelLabel\": \"取消\",\n \"folderSelection.servers.certificateInstall.cancelled\": \"CodeNomad 需要先信任本地证书,才能打开使用自签名 HTTPS 的远程窗口。\",\n \"folderSelection.sidecars.button\": \"打开 SideCar\",\n\n \"projectRenameDialog.title\": \"重命名工作区\",\n \"projectRenameDialog.description.withLabel\": \"更新“{label}”的工作区名称。\",\n \"projectRenameDialog.description.default\": \"为此文件夹设置工作区名称。\",\n \"projectRenameDialog.input.label\": \"工作区名称\",\n \"projectRenameDialog.input.placeholder\": \"输入工作区名称\",\n \"projectRenameDialog.actions.cancel\": \"取消\",\n \"projectRenameDialog.actions.rename\": \"重命名\",\n \"projectRenameDialog.actions.renaming\": \"正在重命名...\",\n} as const\n","export const instanceMessages = {\n \"instanceTabs.new.title\": \"新建实例 (Cmd/Ctrl+N)\",\n \"instanceTabs.new.ariaLabel\": \"新建实例\",\n \"instanceTabs.remote.title\": \"远程连接\",\n \"instanceTabs.remote.ariaLabel\": \"远程连接\",\n \"instanceTabs.developerMode.enableTitle\": \"启用开发者模式\",\n \"instanceTabs.developerMode.disableTitle\": \"禁用开发者模式\",\n \"instanceTabs.developerMode.restartTitle\": \"{action};重启 CodeNomad 后生效\",\n \"instanceTabs.developerMode.enabledToast\": \"开发者模式已启用。请重启 CodeNomad 以应用更改。\",\n \"instanceTabs.developerMode.disabledToast\": \"开发者模式已禁用。请重启 CodeNomad 以应用更改。\",\n \"instanceTabs.developerMode.error\": \"无法访问开发者模式。\",\n\n \"instanceInfo.title\": \"实例信息\",\n \"instanceInfo.labels.folder\": \"文件夹\",\n \"instanceInfo.labels.project\": \"项目\",\n \"instanceInfo.labels.versionControl\": \"版本控制\",\n \"instanceInfo.labels.opencodeVersion\": \"OpenCode 版本\",\n \"instanceInfo.labels.binaryPath\": \"可执行文件路径\",\n \"instanceInfo.labels.environmentVariables\": \"环境变量({count})\",\n \"instanceInfo.loading\": \"正在加载...\",\n \"instanceInfo.server.title\": \"服务器\",\n \"instanceInfo.server.port\": \"端口:\",\n \"instanceInfo.server.pid\": \"PID:\",\n \"instanceInfo.server.status\": \"状态:\",\n\n \"instanceTab.status.permission\": \"等待权限\",\n \"instanceTab.status.compacting\": \"压缩中\",\n \"instanceTab.status.working\": \"工作中\",\n \"instanceTab.status.idle\": \"空闲\",\n \"instanceTab.status.ariaLabel\": \"实例状态:{status}\",\n \"instanceTab.actions.close.ariaLabel\": \"关闭实例\",\n\n \"instanceShell.leftPanel.sessionsTitle\": \"会话\",\n \"instanceShell.leftPanel.instanceInfo\": \"实例信息\",\n \"instanceShell.leftDrawer.pin\": \"固定左侧抽屉\",\n \"instanceShell.leftDrawer.unpin\": \"取消固定左侧抽屉\",\n \"instanceShell.leftDrawer.toggle.pinned\": \"左侧抽屉已固定\",\n \"instanceShell.leftDrawer.toggle.open\": \"打开左侧抽屉\",\n \"instanceShell.leftDrawer.toggle.close\": \"关闭左侧抽屉\",\n\n \"instanceShell.rightDrawer.pin\": \"固定右侧抽屉\",\n \"instanceShell.rightDrawer.unpin\": \"取消固定右侧抽屉\",\n \"instanceShell.rightDrawer.toggle.pinned\": \"右侧抽屉已固定\",\n \"instanceShell.rightDrawer.toggle.open\": \"打开右侧抽屉\",\n \"instanceShell.rightDrawer.toggle.close\": \"关闭右侧抽屉\",\n\n \"instanceShell.fullscreen.enter\": \"全屏\",\n \"instanceShell.fullscreen.exit\": \"退出全屏\",\n\n \"instanceShell.metrics.usedLabel\": \"已用\",\n \"instanceShell.metrics.availableLabel\": \"可用\",\n\n \"instanceShell.commandPalette.openAriaLabel\": \"打开命令面板\",\n \"instanceShell.commandPalette.button\": \"命令面板\",\n \"instanceShell.chatSearch.openAriaLabel\": \"搜索聊天历史\",\n\n \"instanceShell.connection.ariaLabel\": \"连接 {status}\",\n \"instanceShell.connection.connected\": \"已连接\",\n \"instanceShell.connection.connecting\": \"连接中...\",\n \"instanceShell.connection.disconnected\": \"已断开\",\n \"instanceShell.connection.unknown\": \"未知\",\n\n \"instanceWelcome.shortcuts.newSession\": \"新建会话\",\n \"instanceWelcome.empty.title\": \"没有历史会话\",\n \"instanceWelcome.empty.description\": \"在下方创建新会话以开始使用\",\n \"instanceWelcome.loading.title\": \"正在启动工作区\",\n \"instanceWelcome.loading.description\": \"正在为此工作区启动 OpenCode...\",\n \"instanceWelcome.resume.title\": \"继续会话\",\n \"instanceWelcome.resume.subtitle.one\": \"{count} 个会话可用\",\n \"instanceWelcome.resume.subtitle.other\": \"{count} 个会话可用\",\n \"instanceWelcome.session.untitled\": \"未命名会话\",\n \"instanceWelcome.new.title\": \"开始新会话\",\n \"instanceWelcome.new.subtitle\": \"将自动沿用上一次的智能体/模型\",\n \"instanceWelcome.new.createButton\": \"创建会话\",\n \"instanceWelcome.overlay.close\": \"关闭\",\n \"instanceWelcome.actions.viewInstanceInfo\": \"查看实例信息\",\n \"instanceWelcome.actions.renameTitle\": \"重命名会话\",\n \"instanceWelcome.actions.deleteTitle\": \"删除会话\",\n \"instanceWelcome.hints.navigate\": \"导航\",\n \"instanceWelcome.hints.jump\": \"跳转\",\n \"instanceWelcome.hints.firstLast\": \"首/末\",\n \"instanceWelcome.hints.resume\": \"继续\",\n \"instanceWelcome.hints.delete\": \"删除\",\n \"instanceWelcome.toasts.renameError\": \"无法重命名会话\",\n\n \"instanceDisconnected.title\": \"实例已断开连接\",\n \"instanceDisconnected.folderFallback\": \"此工作区\",\n \"instanceDisconnected.reasonFallback\": \"服务器停止响应\",\n \"instanceDisconnected.description\": \"{folder} 已无法访问。关闭此标签页以继续工作。\",\n \"instanceDisconnected.details.title\": \"详情\",\n \"instanceDisconnected.details.folderLabel\": \"文件夹:\",\n \"instanceDisconnected.actions.closeInstance\": \"关闭实例\",\n\n \"instanceShell.empty.title\": \"未选择会话\",\n \"instanceShell.empty.description\": \"在下方发送消息以创建新会话,或选择现有会话继续。\",\n\n \"instanceShell.rightPanel.title\": \"状态面板\",\n \"instanceShell.rightPanel.tabs.gitChanges\": \"Git 更改\",\n \"instanceShell.rightPanel.tabs.files\": \"文件\",\n \"instanceShell.rightPanel.tabs.status\": \"状态\",\n \"instanceShell.rightPanel.tabs.ariaLabel\": \"右侧面板标签页\",\n \"instanceShell.rightPanel.modules.core\": \"CodeNomad 核心\",\n \"instanceShell.rightPanel.modules.core.description\": \"内置 Git、文件和状态面板。\",\n \"instanceShell.rightPanel.customize.toggle\": \"自定义右侧面板\",\n \"instanceShell.rightPanel.customize.title\": \"自定义右侧面板\",\n \"instanceShell.rightPanel.customize.description\": \"显示或隐藏右侧面板模块。\",\n \"instanceShell.rightPanel.customize.reset\": \"重置\",\n \"instanceShell.rightPanel.customize.tabs\": \"标签页\",\n \"instanceShell.rightPanel.customize.sections\": \"自定义分区\",\n \"instanceShell.rightPanel.customize.statusSections\": \"状态分区\",\n \"instanceShell.rightPanel.customize.dragToReorder\": \"拖动以重新排序。\",\n \"instanceShell.rightPanel.customize.alwaysVisible\": \"始终可见\",\n \"instanceShell.rightPanel.customize.unavailableModules\": \"不可用模块\",\n \"instanceShell.rightPanel.customize.moduleUnavailable\": \"{module} 不可用\",\n \"instanceShell.rightPanel.customize.moveUp\": \"上移\",\n \"instanceShell.rightPanel.customize.moveDown\": \"下移\",\n \"instanceShell.rightPanel.customize.moveTabUp\": \"上移 {label} 标签页\",\n \"instanceShell.rightPanel.customize.moveTabDown\": \"下移 {label} 标签页\",\n \"instanceShell.rightPanel.customize.moveStatusSectionUp\": \"上移 {label} 状态分区\",\n \"instanceShell.rightPanel.customize.moveStatusSectionDown\": \"下移 {label} 状态分区\",\n \"instanceShell.rightPanel.actions.refresh\": \"刷新\",\n \"instanceShell.rightPanel.actions.save\": \"保存 (Ctrl+S)\",\n \"instanceShell.rightPanel.actions.saveConfirm.message\": \"切换前是否保存对 \\\"{path}\\\" 的更改?\",\n \"instanceShell.rightPanel.actions.saveConfirm.confirmLabel\": \"保存\",\n \"instanceShell.rightPanel.actions.saveConfirm.cancelLabel\": \"放弃更改\",\n \"instanceShell.rightPanel.actions.conflict.message\": \"文件已被智能体修改。是否覆盖智能体的更改?\",\n \"instanceShell.rightPanel.actions.conflict.confirmLabel\": \"覆盖\",\n \"instanceShell.rightPanel.actions.conflict.cancelLabel\": \"取消\",\n \"instanceShell.rightPanel.actions.refreshDirty.message\": \"文件有未保存的更改。刷新将放弃您的编辑。继续?\",\n \"instanceShell.rightPanel.actions.refreshDirty.confirmLabel\": \"刷新\",\n \"instanceShell.rightPanel.actions.refreshDirty.cancelLabel\": \"取消\",\n \"instanceShell.rightPanel.toast.saveSuccess\": \"文件保存成功\",\n \"instanceShell.rightPanel.toast.saveError\": \"保存文件失败\",\n \"instanceShell.rightPanel.sections.yoloMode\": \"Yolo 模式\",\n \"instanceShell.rightPanel.sections.yoloMode.tooltip\": \"自动批准当前会话的权限请求。仅在你信任正在运行的工具时启用。\",\n \"instanceShell.rightPanel.sections.plan\": \"计划\",\n \"instanceShell.rightPanel.sections.plan.tooltip\": \"智能体在此会话中的路线图。跟踪任务、子任务及其完成状态。\",\n \"instanceShell.rightPanel.sections.backgroundProcesses\": \"后台 Shell\",\n \"instanceShell.rightPanel.sections.backgroundProcesses.tooltip\": \"当前工作区或 worktree 的 OpenCode 原生后台 Shell。\",\n \"instanceShell.backgroundProcesses.loading\": \"正在加载后台 Shell...\",\n \"instanceShell.backgroundProcesses.error\": \"无法加载后台 Shell。\",\n \"instanceShell.backgroundProcesses.empty\": \"没有后台 Shell。\",\n \"instanceShell.backgroundProcesses.status.running\": \"运行中\",\n \"instanceShell.backgroundProcesses.status.exited\": \"已退出\",\n \"instanceShell.backgroundProcesses.status.timeout\": \"已超时\",\n \"instanceShell.backgroundProcesses.status.killed\": \"已终止\",\n \"instanceShell.backgroundProcesses.pid\": \"PID {pid}\",\n \"instanceShell.backgroundProcesses.exitCode\": \"退出码 {code}\",\n \"instanceShell.backgroundProcesses.actions.stopRemove\": \"停止并移除\",\n \"instanceShell.backgroundProcesses.actions.remove\": \"移除\",\n \"instanceShell.backgroundProcesses.actions.output\": \"查看输出\",\n \"instanceShell.backgroundProcesses.remove.title\": \"移除后台 Shell\",\n \"instanceShell.backgroundProcesses.remove.message\": \"移除“{title}”?正在运行的进程将被停止。\",\n \"instanceShell.rightPanel.sections.mcp\": \"MCP 服务器\",\n \"instanceShell.rightPanel.sections.mcp.tooltip\": \"模型上下文协议服务器,使用外部工具和服务扩展代理能力。\",\n \"instanceShell.rightPanel.sections.lsp\": \"LSP 服务器\",\n \"instanceShell.rightPanel.sections.lsp.tooltip\": \"语言服务器协议服务器,提供代码智能、诊断和语言特定的功能。\",\n \"instanceShell.rightPanel.sections.plugins\": \"插件\",\n \"instanceShell.rightPanel.sections.plugins.tooltip\": \"自定义 UI 和服务器行为的插件,添加超出 MCP 和 LSP 的功能。\",\n\n \"instanceShell.gitChanges.noSessionSelected\": \"选择会话以查看 Git 更改。\",\n \"instanceShell.gitChanges.loading\": \"正在加载 Git 更改...\",\n \"instanceShell.gitChanges.empty\": \"暂无 Git 更改。\",\n \"instanceShell.gitChanges.deleted\": \"已删除\",\n \"instanceShell.gitChanges.binaryViewer\": \"无法显示二进制文件\",\n \"instanceShell.gitChanges.sections.staged\": \"已暂存的更改\",\n \"instanceShell.gitChanges.sections.unstaged\": \"更改\",\n \"instanceShell.gitChanges.actions.insertContext\": \"添加到提示词\",\n \"instanceShell.gitChanges.actions.stage\": \"暂存文件\",\n \"instanceShell.gitChanges.actions.unstage\": \"取消暂存\",\n \"instanceShell.gitChanges.commit.placeholder\": \"输入提交信息\",\n \"instanceShell.gitChanges.commit.submit\": \"提交\",\n \"instanceShell.gitChanges.commit.submitting\": \"正在提交...\",\n \"instanceShell.gitChanges.commit.success\": \"提交已成功创建\",\n \"instanceShell.gitChanges.commit.error\": \"无法创建提交\",\n\n \"instanceShell.filesShell.fileListTitle\": \"文件列表\",\n \"instanceShell.filesShell.mobileSelectorLabel\": \"选择文件\",\n \"instanceShell.filesShell.mobileSelectorEmpty\": \"请选择文件\",\n \"instanceShell.filesShell.viewerTitle\": \"更改查看器\",\n \"instanceShell.filesShell.viewerPlaceholder\": \"详细更改渲染将在下一步中添加。\",\n \"instanceShell.filesShell.viewerEmpty\": \"未选择文件。\",\n \"instanceShell.filesShell.listEmpty\": \"此文件夹中没有文件。\",\n \"instanceShell.filesShell.hideFiles\": \"隐藏文件\",\n \"instanceShell.filesShell.resizeFiles\": \"调整文件列表大小\",\n \"instanceShell.filesShell.showFiles\": \"显示文件\",\n \"instanceShell.filesShell.search.placeholder\": \"筛选此文件夹中的文件\",\n \"instanceShell.filesShell.search.ariaLabel\": \"筛选此文件夹中的文件\",\n \"instanceShell.filesShell.search.empty\": \"没有匹配的文件。\",\n \"instanceShell.filesShell.actions.copyPath\": \"复制路径\",\n \"instanceShell.filesShell.actions.more\": \"{name}的更多操作\",\n \"instanceShell.filesShell.actions.openDefault\": \"使用默认应用打开\",\n \"instanceShell.filesShell.actions.editDefault\": \"使用默认应用编辑\",\n \"instanceShell.filesShell.actions.chooseApplication\": \"打开方式...\",\n \"instanceShell.filesShell.actions.showInFolder\": \"在文件夹中显示\",\n \"instanceShell.filesShell.actions.openFolder\": \"在文件管理器中打开\",\n \"instanceShell.filesShell.actions.openTerminal\": \"在此处打开终端\",\n \"instanceShell.filesShell.actions.openEditor\": \"在{editor}中打开\",\n \"instanceShell.filesShell.toast.openError\": \"无法打开:{message}\",\n \"instanceShell.filesShell.toast.copyPathSuccess\": \"路径已复制\",\n \"instanceShell.filesShell.toast.copyPathError\": \"无法复制路径\",\n \"instanceShell.filesShell.previewMarkdown\": \"Markdown 预览\",\n \"instanceShell.filesShell.showSource\": \"显示源码\",\n \"instanceShell.filesShell.enableWordWrap\": \"启用自动换行\",\n \"instanceShell.filesShell.disableWordWrap\": \"禁用自动换行\",\n \"instanceShell.diff.hideUnchanged\": \"隐藏未更改区域\",\n \"instanceShell.diff.showFull\": \"显示完整文件\",\n \"instanceShell.diff.switchToSplit\": \"切换到分栏视图\",\n \"instanceShell.diff.switchToUnified\": \"切换到统一视图\",\n \"instanceShell.diff.enableWordWrap\": \"启用自动换行\",\n \"instanceShell.diff.disableWordWrap\": \"禁用自动换行\",\n \"instanceShell.worktree.create\": \"+ 创建 worktree\",\n\n \"instanceShell.plan.noSessionSelected\": \"选择会话以查看计划。\",\n \"instanceShell.plan.empty\": \"暂无计划。\",\n\n \"instanceShell.yoloMode.noSessionSelected\": \"请选择一个会话来配置 Yolo 模式。\",\n \"instanceShell.yoloMode.title\": \"Yolo 模式\",\n \"instanceShell.yoloMode.description\": \"自动批准此会话的权限请求。\",\n \"instanceShell.yoloMode.badge\": \"Yolo\",\n \"instanceShell.yoloMode.badgeAriaLabel\": \"Yolo 模式已启用\",\n\n \"instanceShell.worktree.delete.error.title\": \"删除失败\",\n \"instanceShell.worktree.delete.error.fallback\": \"删除 worktree 失败\",\n \"instanceShell.worktree.delete.error.causeLabel\": \"可能原因:\",\n \"instanceShell.worktree.delete.error.nextStepLabel\": \"建议的下一步:\",\n \"instanceShell.worktree.delete.error.summary.localChanges\": \"Git 拒绝删除这个 worktree,因为其中包含已修改或未跟踪的文件。\",\n \"instanceShell.worktree.delete.error.summary.inUse\": \"CodeNomad 无法删除这个 worktree,因为目录中的文件仍在被某些进程使用。\",\n \"instanceShell.worktree.delete.error.summary.notFound\": \"CodeNomad 无法删除这个 worktree,因为目录或 worktree 记录未找到。\",\n \"instanceShell.worktree.delete.error.summary.permissionDenied\": \"CodeNomad 无法删除这个 worktree,因为目录访问被拒绝。\",\n \"instanceShell.worktree.delete.error.summary.unknown\": \"CodeNomad 无法删除这个 worktree。\",\n \"instanceShell.worktree.delete.error.cause.localChanges\": \"本地更改\",\n \"instanceShell.worktree.delete.error.cause.inUse\": \"另一个进程正在使用这个 worktree\",\n \"instanceShell.worktree.delete.error.cause.notFound\": \"worktree 目录或记录缺失\",\n \"instanceShell.worktree.delete.error.cause.permissionDenied\": \"文件系统权限不足\",\n \"instanceShell.worktree.delete.error.cause.unknown\": \"后端返回了未分类的删除错误\",\n \"instanceShell.worktree.delete.error.nextStep.localChanges\": \"如果你想丢弃本地更改,请启用强制删除,或者先清理 worktree 后再重试。\",\n \"instanceShell.worktree.delete.error.nextStep.inUse\": \"关闭正在使用这个 worktree 的终端、编辑器、watcher 或后台进程,然后再试一次。\",\n \"instanceShell.worktree.delete.error.nextStep.notFound\": \"刷新 worktree 列表后再试一次。如果仍然失败,请检查磁盘上的 worktree 路径。\",\n \"instanceShell.worktree.delete.error.nextStep.permissionDenied\": \"检查文件系统权限,并关闭可能锁定此目录的应用程序,然后再试一次。\",\n \"instanceShell.worktree.delete.error.nextStep.unknown\": \"查看下方原始错误详情,并在处理提示的问题后再次重试。\",\n \"instanceShell.worktree.delete.error.copyRaw\": \"复制错误\",\n \"instanceShell.worktree.delete.error.copySanitized\": \"复制脱敏内容\",\n \"instanceShell.worktree.delete.error.copySuccess\": \"已复制删除错误\",\n \"instanceShell.worktree.delete.error.copySanitizedSuccess\": \"已复制脱敏后的删除错误\",\n \"instanceShell.worktree.delete.error.copyFailure\": \"复制删除错误失败\",\n\n \"versionPill.appWithVersion\": \"应用 {version}\",\n \"versionPill.ui\": \"UI\",\n \"versionPill.uiWithVersion\": \"UI {version}\",\n \"versionPill.source\": \" ({source})\",\n\n \"opencodeBinarySelector.title\": \"OpenCode 可执行文件\",\n \"opencodeBinarySelector.subtitle\": \"选择 OpenCode 要运行的可执行文件\",\n \"opencodeBinarySelector.customPath.placeholder\": \"输入 {name} 可执行文件路径…\",\n \"opencodeBinarySelector.actions.add\": \"添加\",\n \"opencodeBinarySelector.actions.browse\": \"浏览可执行文件…\",\n \"opencodeBinarySelector.actions.removeTitle\": \"移除可执行文件\",\n \"opencodeBinarySelector.badge.systemPath\": \"使用系统 PATH 中的可执行文件\",\n \"opencodeBinarySelector.status.checkingVersions\": \"正在检查版本…\",\n \"opencodeBinarySelector.status.checking\": \"正在检查…\",\n \"opencodeBinarySelector.dialog.title\": \"选择 OpenCode 可执行文件\",\n \"opencodeBinarySelector.dialog.description\": \"浏览 CLI 服务器暴露的文件。\",\n \"opencodeBinarySelector.validation.invalidBinary\": \"无效的 OpenCode 可执行文件\",\n \"opencodeBinarySelector.validation.v2Required\": \"CodeNomad 需要 OpenCode V2。请安装并选择 opencode2 可执行文件。\",\n \"opencodeBinarySelector.validation.alreadyValidating\": \"正在验证中\",\n \"opencodeBinarySelector.display.systemPath\": \"{name}(系统 PATH)\",\n \"opencodeBinarySelector.versionLabel\": \"v{version}\",\n} as const\n","export const loadingScreenMessages = {\n \"loadingScreen.logoAlt\": \"CodeNomad 徽标\",\n \"loadingScreen.status.issue\": \"遇到问题\",\n \"loadingScreen.actions.showAnother\": \"换一句\",\n \"loadingScreen.errors.missingRoot\": \"未找到加载根元素\",\n\n \"loadingScreen.phrases.neurons\": \"正在热身 AI 神经元…\",\n \"loadingScreen.phrases.daydreaming\": \"正在劝 AI 别再走神…\",\n \"loadingScreen.phrases.goggles\": \"正在擦亮 AI 的代码护目镜…\",\n \"loadingScreen.phrases.reorganizingFiles\": \"正在请求 AI 别再帮你重排文件…\",\n \"loadingScreen.phrases.coffee\": \"正在给 AI 加杯咖啡…\",\n \"loadingScreen.phrases.nodeModules\": \"正在教 AI 别再删除 node_modules(又一次)…\",\n \"loadingScreen.phrases.actNatural\": \"正在提醒 AI 在你到来前表现自然点…\",\n \"loadingScreen.phrases.rewritingHistory\": \"正在请 AI 别再重写历史…\",\n \"loadingScreen.phrases.stretch\": \"正在让 AI 在编码冲刺前伸个懒腰…\",\n \"loadingScreen.phrases.keyboardControl\": \"正在说服 AI 把键盘控制权交给你…\",\n} as const\n","export const logMessages = {\n \"logsView.title\": \"服务器日志\",\n \"logsView.actions.show\": \"显示服务器日志\",\n \"logsView.actions.hide\": \"隐藏服务器日志\",\n \"logsView.actions.clear\": \"清除日志\",\n \"logsView.actions.back\": \"返回对话\",\n \"logsView.envVars.title\": \"环境变量({count})\",\n \"logsView.paused.title\": \"服务器日志已暂停\",\n \"logsView.paused.description\": \"启用流式输出以查看 OpenCode 服务器活动。\",\n \"logsView.empty.waiting\": \"正在等待服务器输出...\",\n \"logsView.scrollToTop\": \"滚动到顶部\",\n \"logsView.scrollToBottom\": \"滚动到底部\",\n\n \"infoView.logs.title\": \"服务器日志\",\n \"infoView.logs.actions.show\": \"显示服务器日志\",\n \"infoView.logs.actions.hide\": \"隐藏服务器日志\",\n \"infoView.logs.actions.clear\": \"清除日志\",\n \"infoView.logs.actions.back\": \"返回对话\",\n \"infoView.logs.paused.title\": \"服务器日志已暂停\",\n \"infoView.logs.paused.description\": \"启用流式输出以查看 OpenCode 服务器活动。\",\n \"infoView.logs.empty.waiting\": \"正在等待服务器输出...\",\n \"infoView.logs.scrollToTop\": \"滚动到顶部\",\n \"infoView.logs.scrollToBottom\": \"滚动到底部\",\n\n \"infoView.dispose.actions.dispose\": \"释放实例\",\n \"infoView.dispose.actions.disposing\": \"正在释放...\",\n \"infoView.dispose.confirm.title\": \"要释放实例吗?\",\n \"infoView.dispose.confirm.message\": \"这将清除此目录的项目缓存状态,并重新加载实例。\",\n \"infoView.dispose.confirm.confirmLabel\": \"释放\",\n \"infoView.dispose.confirm.cancelLabel\": \"取消\",\n \"infoView.dispose.toast.success\": \"实例已释放。正在重新加载...\",\n \"infoView.dispose.toast.error\": \"释放实例失败。\",\n} as const\n","export const markdownMessages = {\n \"markdown.codeBlock.copy.label\": \"复制\",\n \"markdown.codeBlock.copy.copied\": \"已复制!\",\n \"markdown.codeBlock.copy.failed\": \"失败\",\n \"markdown.codeBlock.wrap.enable\": \"启用自动换行\",\n \"markdown.codeBlock.wrap.disable\": \"禁用自动换行\",\n\n \"markdown.copy\": \"复制\",\n} as const\n","export const messagingMessages = {\n \"messageListHeader.sidebar.openSessionListAriaLabel\": \"打开会话列表\",\n \"messageListHeader.metrics.usedLabel\": \"已用\",\n \"messageListHeader.metrics.availableLabel\": \"可用\",\n \"messageListHeader.commandPalette.ariaLabel\": \"打开命令面板\",\n \"messageListHeader.commandPalette.button\": \"命令面板\",\n \"messageListHeader.connection.connected\": \"已连接\",\n \"messageListHeader.connection.connecting\": \"连接中...\",\n \"messageListHeader.connection.disconnected\": \"已断开\",\n\n \"messageSection.empty.logoAlt\": \"CodeNomad 徽标\",\n \"messageSection.empty.brandTitle\": \"CodeNomad\",\n \"messageSection.empty.title\": \"开始对话\",\n \"messageSection.empty.description\": \"在下方输入消息,或打开命令面板:\",\n \"messageSection.empty.tips.commandPalette\": \"命令面板\",\n \"messageSection.empty.tips.askAboutCodebase\": \"询问你的代码库\",\n \"messageSection.empty.tips.attachFilesPrefix\": \"通过以下方式附加文件\",\n \"messageSection.loading.messages\": \"正在加载消息...\",\n \"messageSection.loadError.title\": \"无法加载消息\",\n \"messageSection.loadError.detail\": \"OpenCode 未返回会话消息。\",\n \"messageSection.loadError.reload\": \"重新加载消息\",\n \"messageSection.scroll.toFirstAriaLabel\": \"滚动到第一条消息\",\n \"messageSection.scroll.toLatestAriaLabel\": \"滚动到最新消息\",\n \"messageSection.scroll.showControlsAriaLabel\": \"显示滚动控件\",\n \"messageSection.scroll.enableHoldAriaLabel\": \"启用长助手回复保持\",\n \"messageSection.scroll.disableHoldAriaLabel\": \"禁用长助手回复保持\",\n \"messageSection.quote.addAsQuote\": \"作为引用添加\",\n \"messageSection.quote.addAsCode\": \"作为代码添加\",\n \"messageSection.quote.copy\": \"复制\",\n \"messageSection.quote.copied\": \"已复制!\",\n \"messageSection.quote.copyFailed\": \"无法复制\",\n \"messageSection.search.ariaLabel\": \"搜索聊天历史\",\n \"messageSection.search.placeholder\": \"搜索当前聊天...\",\n \"messageSection.search.count.empty\": \"搜索\",\n \"messageSection.search.count.minChars\": \"{count}+ 个字符\",\n \"messageSection.search.count.searching\": \"正在搜索...\",\n \"messageSection.search.count.none\": \"无匹配项\",\n \"messageSection.search.count.matches\": \"{current} / {total}\",\n \"messageSection.search.previousAriaLabel\": \"上一个匹配项\",\n \"messageSection.search.nextAriaLabel\": \"下一个匹配项\",\n \"messageSection.search.closeAriaLabel\": \"关闭搜索\",\n \"messageSection.search.searching\": \"正在搜索...\",\n \"messageSection.search.failed\": \"搜索失败\",\n \"messageSection.search.retry\": \"重试\",\n \"messageSection.search.noVisibleMatches\": \"没有可见匹配项\",\n\n \"messageTimeline.ariaLabel\": \"消息时间线\",\n \"messageTimeline.segment.user.label\": \"你\",\n \"messageTimeline.segment.assistant.label\": \"助手\",\n \"messageTimeline.segment.compaction.label\": \"压缩\",\n \"messageTimeline.tool.fallbackLabel\": \"工具调用\",\n \"messageTimeline.tooltip.userFallback\": \"用户消息\",\n \"messageTimeline.tooltip.assistantFallback\": \"助手回复\",\n \"messageTimeline.tooltip.compaction.auto\": \"自动压缩\",\n \"messageTimeline.tooltip.compaction.manual\": \"手动压缩\",\n \"messageTimeline.text.filePrefix\": \"[文件] {filename}\",\n \"messageTimeline.text.attachment\": \"附件\",\n\n \"messageBlock.tool.header\": \"工具调用\",\n \"messageBlock.tool.unknown\": \"未知\",\n \"messageBlock.tool.goToSession.label\": \"前往会话\",\n \"messageBlock.tool.goToSession.title\": \"前往会话\",\n \"messageBlock.tool.goToSession.unavailableTitle\": \"会话尚不可用\",\n\n \"messageBlock.compaction.ariaLabel\": \"会话压缩\",\n \"messageBlock.compaction.autoLabel\": \"会话已自动压缩\",\n \"messageBlock.compaction.manualLabel\": \"会话已由你压缩\",\n \"messageBlock.usage.input\": \"输入\",\n \"messageBlock.usage.output\": \"输出\",\n \"messageBlock.usage.reasoning\": \"推理\",\n \"messageBlock.usage.cacheRead\": \"缓存读取\",\n \"messageBlock.usage.cacheWrite\": \"缓存写入\",\n \"messageBlock.usage.cost\": \"费用\",\n \"messageBlock.usage.expandAriaLabel\": \"展开令牌指标\",\n \"messageBlock.usage.collapseAriaLabel\": \"折叠令牌指标\",\n \"messageBlock.step.agentLabel\": \"智能体:{agent}\",\n \"messageBlock.step.modelLabel\": \"模型:{model}\",\n \"messageBlock.reasoning.thinkingLabel\": \"思考\",\n \"messageBlock.reasoning.thoughtLabel\": \"思考\",\n \"messageBlock.reasoning.steps.one\": \"{count} 个步骤\",\n \"messageBlock.reasoning.steps.other\": \"{count} 个步骤\",\n \"messageBlock.exploration.completed\": \"已探索:{tools}\",\n \"messageBlock.exploration.active\": \"正在探索:{tools}\",\n \"messageBlock.exploration.read.one\": \"{count} 次读取\",\n \"messageBlock.exploration.read.other\": \"{count} 次读取\",\n \"messageBlock.exploration.search.one\": \"{count} 次搜索\",\n \"messageBlock.exploration.search.other\": \"{count} 次搜索\",\n \"messageBlock.shell.completed\": \"终端: {count}\",\n \"messageBlock.shell.active\": \"终端: {count}\",\n \"messageBlock.reasoning.expandAriaLabel\": \"展开思考\",\n \"messageBlock.reasoning.collapseAriaLabel\": \"折叠思考\",\n \"messageBlock.reasoning.indicator.hide\": \"隐藏\",\n \"messageBlock.reasoning.indicator.view\": \"查看\",\n \"messageBlock.reasoning.detailsAriaLabel\": \"推理详情\",\n \"messageBlock.reasoning.thoughtsFallback\": \"思考\",\n \"messageBlock.reasoning.thoughtFor.seconds.one\": \"思考了 {count} 秒\",\n \"messageBlock.reasoning.thoughtFor.seconds.other\": \"思考了 {count} 秒\",\n \"messageBlock.reasoning.thoughtFor.minutes.one\": \"思考了 {count} 分钟\",\n \"messageBlock.reasoning.thoughtFor.minutes.other\": \"思考了 {count} 分钟\",\n \"messageBlock.reasoning.thoughtFor.hours.one\": \"思考了 {count} 小时\",\n \"messageBlock.reasoning.thoughtFor.hours.other\": \"思考了 {count} 小时\",\n \"messageBlock.reasoning.copyTitle\": \"复制思考\",\n \"messageBlock.reasoning.copyAriaLabel\": \"复制思考\",\n\n \"codeBlockInline.actions.copy\": \"复制\",\n \"codeBlockInline.actions.copied\": \"已复制!\",\n\n \"messageItem.speaker.you\": \"你\",\n \"messageItem.speaker.assistant\": \"助手\",\n \"messageItem.actions.revert\": \"回退\",\n \"messageItem.actions.revertTitle\": \"撤销到此处的更改(会删除消息)\",\n \"messageItem.actions.fork\": \"分叉\",\n \"messageItem.actions.forkTitle\": \"从这条消息分叉\",\n \"messageItem.actions.copy\": \"复制\",\n \"messageItem.actions.copyTitle\": \"复制消息\",\n \"messageItem.actions.copied\": \"已复制!\",\n \"messageItem.actions.more\": \"更多操作\",\n \"messageItem.actions.speak\": \"朗读消息\",\n \"messageItem.actions.generatingSpeech\": \"正在生成语音\",\n \"messageItem.actions.stopSpeech\": \"停止播放\",\n \"messageItem.actions.speak.error.title\": \"语音播放失败\",\n \"messageItem.actions.speak.error.unsupported\": \"此浏览器不支持语音播放。\",\n \"messageItem.actions.speak.error.unavailable\": \"语音设置完成前,语音播放不可用。\",\n \"messageItem.actions.speak.error.generate\": \"无法为这条消息生成语音。\",\n \"messageItem.actions.deleteTechnicalParts\": \"从此回复中删除工具和推理\",\n \"messageItem.actions.deleteTechnicalParts.confirmTitle\": \"删除工具和推理?\",\n \"messageItem.actions.deleteTechnicalParts.confirmMessage\": \"工具输出:{toolCount};推理块:{reasoningCount}。最终文本将保留。\",\n \"messageItem.actions.deleteTechnicalParts.confirmLabel\": \"删除\",\n \"messageItem.actions.deleteTechnicalParts.failedTitle\": \"删除失败\",\n \"messageItem.actions.deleteTechnicalParts.failedMessage\": \"无法从此回复中删除工具和推理\",\n\n \"messageItem.duration.workedFor.seconds.one\": \"工作了 {count} 秒\",\n \"messageItem.duration.workedFor.seconds.other\": \"工作了 {count} 秒\",\n \"messageItem.duration.workedFor.minutes.one\": \"工作了 {count} 分钟\",\n \"messageItem.duration.workedFor.minutes.other\": \"工作了 {count} 分钟\",\n \"messageItem.duration.workedFor.hours.one\": \"工作了 {count} 小时\",\n \"messageItem.duration.workedFor.hours.other\": \"工作了 {count} 小时\",\n\n \"messageItem.status.queued\": \"排队中\",\n \"messageItem.status.generating\": \"正在生成...\",\n \"messageItem.status.sending\": \"正在发送...\",\n \"messageItem.status.failedToSend\": \"消息发送失败\",\n \"messagePart.actions.delete\": \"删除\",\n \"messagePart.actions.deleting\": \"正在删除...\",\n \"messagePart.actions.deleteFailedTitle\": \"删除失败\",\n \"messagePart.actions.deleteFailedMessage\": \"删除失败\",\n \"messagePart.pastedText.summary\": \"粘贴的文本\",\n \"messagePart.pastedText.lines.one\": \"{count} 行\",\n \"messagePart.pastedText.lines.other\": \"{count} 行\",\n \"messagePart.pastedText.copyAriaLabel\": \"复制粘贴文本块\",\n \"messageItem.attachment.defaultName\": \"附件\",\n \"messageItem.attachment.downloadAriaLabel\": \"下载 {name}\",\n \"messageItem.agentMeta.agentLabel\": \"智能体:{agent}\",\n \"messageItem.agentMeta.modelLabel\": \"模型:{model}\",\n \"messageItem.errors.authenticationFallback\": \"认证错误\",\n \"messageItem.errors.outputLengthExceeded\": \"消息输出长度超限\",\n \"messageItem.errors.requestAborted\": \"请求已中止\",\n \"messageItem.errors.unknownFallback\": \"发生未知错误\",\n\n \"attachmentChip.removeAriaLabel\": \"移除附件\",\n\n \"expandButton.toggleAriaLabel\": \"切换聊天输入框高度\",\n\n \"promptInput.placeholder.shell\": \"运行 shell 命令(Esc 退出)...\",\n \"promptInput.placeholder.default\": \"输入消息、@file、@agent,或粘贴图片与文本...\",\n \"promptInput.hints.shell.exit\": \"退出 shell 模式\",\n \"promptInput.hints.shell.enable\": \"Shell 模式\",\n \"promptInput.hints.commands\": \"命令\",\n \"promptInput.history.previousAriaLabel\": \"上一条 prompt\",\n \"promptInput.history.nextAriaLabel\": \"下一条 prompt\",\n \"promptInput.overlay.newLine\": \"换行\",\n \"promptInput.overlay.send\": \"发送\",\n \"promptInput.overlay.filesAgents\": \"文件/智能体\",\n \"promptInput.overlay.history\": \"历史\",\n \"promptInput.overlay.attachments\": \"• 已附加 {count} 个文件\",\n \"promptInput.overlay.shellModeActive\": \"Shell 模式已启用\",\n \"promptInput.overlay.press\": \"按下\",\n \"promptInput.overlay.againToAbort\": \"再次按下以中止会话\",\n \"promptInput.stopSession.ariaLabel\": \"停止会话\",\n \"promptInput.stopSession.title\": \"停止会话\",\n \"promptInput.background.title\": \"将阻塞工具移至后台 (Cmd/Ctrl+B)\",\n \"promptInput.background.error.title\": \"后台操作失败\",\n \"promptInput.background.error.message\": \"无法将阻塞工具移至后台\",\n \"promptInput.attachFiles.ariaLabel\": \"附加文件\",\n \"promptInput.attachFiles.title\": \"附加文件\",\n \"promptInput.attachFiles.dialogTitle\": \"附加文件\",\n \"promptInput.attachFiles.errorTitle\": \"附加失败\",\n \"promptInput.attachFiles.skipped.title\": \"部分文件未附加\",\n \"promptInput.attachFiles.skipped.one\": \"由于当前环境未提供文件路径或支持的预览数据,1 个选中的文件无法附加。\",\n \"promptInput.attachFiles.skipped.other\": \"由于当前环境未提供文件路径或支持的预览数据,{count} 个选中的文件无法附加。\",\n \"promptInput.attachFiles.tooLarge.one\": \"由于超过 5 MB 附件大小限制,1 个选中的文件无法附加。\",\n \"promptInput.clear.ariaLabel\": \"清除输入框文本\",\n \"promptInput.clear.title\": \"清除输入框文本\",\n \"promptInput.send.ariaLabel\": \"发送消息\",\n \"promptInput.send.queueAriaLabel\": \"将消息加入队列\",\n \"promptQueue.title\": \"提示词队列({count})\",\n \"promptQueue.delivery.queue\": \"已排队\",\n \"promptQueue.delivery.steer\": \"正在插入\",\n \"promptQueue.attachments.one\": \"{count} 个附件\",\n \"promptQueue.attachments.other\": \"{count} 个附件\",\n \"promptQueue.actions.steer\": \"立即插入\",\n \"promptQueue.actions.queue\": \"移至队列\",\n \"promptQueue.actions.edit\": \"编辑排队提示词\",\n \"promptQueue.actions.cancelEdit\": \"取消编辑\",\n \"promptQueue.actions.remove\": \"移除排队提示词\",\n \"promptQueue.error.title\": \"队列操作失败\",\n \"promptQueue.error.message\": \"无法更新提示词队列\",\n \"promptInput.send.errorFallback\": \"发送消息失败\",\n \"promptInput.send.errorTitle\": \"发送失败\",\n \"promptInput.conversationMode.enable.title\": \"开启对话模式\",\n \"promptInput.conversationMode.disable.title\": \"关闭对话模式\",\n \"promptInput.conversationMode.error.title\": \"对话播报失败\",\n \"promptInput.conversationMode.error.message\": \"无法继续播报助手回复。\",\n \"promptInput.voiceInput.start.title\": \"开始语音输入\",\n \"promptInput.voiceInput.stop.title\": \"停止录音并转写\",\n \"promptInput.voiceInput.transcribing.title\": \"正在转写音频\",\n \"promptInput.voiceInput.error.title\": \"语音输入失败\",\n \"promptInput.voiceInput.error.permission\": \"录制语音输入需要麦克风访问权限。\",\n \"promptInput.voiceInput.error.permissionDenied\": \"macOS 已拒绝麦克风访问。\",\n \"promptInput.voiceInput.error.unsupported\": \"此浏览器不支持语音输入。\",\n \"promptInput.voiceInput.error.transcribe\": \"无法转写录制的音频。\",\n \"promptInput.resizeHandle.title\": \"拖动以调整输入框高度\",\n} as const\n","export const remoteAccessMessages = {\n \"remoteAccess.eyebrow\": \"远程接管\",\n \"remoteAccess.title\": \"远程连接到 CodeNomad\",\n \"remoteAccess.subtitle\": \"使用下面的地址从其他设备打开 CodeNomad。\",\n \"remoteAccess.close\": \"关闭远程访问\",\n \"remoteAccess.refresh\": \"刷新\",\n\n \"remoteAccess.sections.listeningMode.label\": \"监听模式\",\n \"remoteAccess.sections.listeningMode.help\": \"通过绑定到所有接口或仅 localhost 来允许或限制远程接管。\",\n \"remoteAccess.toggle.on\": \"开\",\n \"remoteAccess.toggle.off\": \"关\",\n \"remoteAccess.toggle.title\": \"允许其他 IP 连接\",\n \"remoteAccess.toggle.caption.all\": \"绑定到 0.0.0.0\",\n \"remoteAccess.toggle.caption.local\": \"绑定到 127.0.0.1\",\n \"remoteAccess.toggle.note\": \"更改此项需要重启,并会暂时停止所有活动实例。服务器重启后再分享下方地址。\",\n \"remoteAccess.listeningMode.restartConfirm.message\": \"重启以应用监听模式?这将停止所有正在运行的实例。\",\n \"remoteAccess.listeningMode.restartConfirm.title.all\": \"对其他设备开放\",\n \"remoteAccess.listeningMode.restartConfirm.title.local\": \"仅限此设备\",\n \"remoteAccess.listeningMode.restartConfirm.confirmLabel\": \"立即重启\",\n \"remoteAccess.listeningMode.restartConfirm.cancelLabel\": \"取消\",\n \"remoteAccess.restart.errorManual\": \"无法自动重启。请手动重启应用以应用更改。\",\n\n \"remoteAccess.sections.serverPassword.label\": \"服务器密码\",\n \"remoteAccess.sections.serverPassword.help\": \"远程接管需要密码。设置一个易记的密码,以允许其他设备登录。\",\n \"remoteAccess.authStatus.unavailable\": \"无法获取认证状态。\",\n \"remoteAccess.username\": \"用户名:{username}\",\n \"remoteAccess.password.status.set\": \"已为远程访问设置密码。\",\n \"remoteAccess.password.status.unset\": \"尚未设置易记密码。设置后可允许远程接管登录。\",\n \"remoteAccess.password.actions.cancel\": \"取消\",\n \"remoteAccess.password.actions.change\": \"修改密码\",\n \"remoteAccess.password.actions.set\": \"设置密码\",\n \"remoteAccess.password.form.newPassword\": \"新密码\",\n \"remoteAccess.password.form.confirmPassword\": \"确认密码\",\n \"remoteAccess.password.form.placeholder\": \"至少 8 个字符\",\n \"remoteAccess.password.error.tooShort\": \"密码至少需要 8 个字符。\",\n \"remoteAccess.password.error.mismatch\": \"两次输入的密码不一致。\",\n \"remoteAccess.password.save.saving\": \"正在保存…\",\n \"remoteAccess.password.save.label\": \"保存密码\",\n\n \"remoteAccess.sections.addresses.label\": \"可访问地址\",\n \"remoteAccess.sections.addresses.help\": \"从另一台设备打开或扫描,以接管控制权。\",\n \"remoteAccess.addresses.loading\": \"正在加载地址…\",\n \"remoteAccess.addresses.none\": \"暂时没有可用地址。\",\n \"remoteAccess.addresses.actions.showOther\": \"显示另外 {count} 个地址\",\n \"remoteAccess.addresses.actions.hideOther\": \"隐藏其他地址\",\n \"remoteAccess.address.scope.network\": \"网络\",\n \"remoteAccess.address.scope.loopback\": \"回环\",\n \"remoteAccess.address.scope.internal\": \"内部\",\n \"remoteAccess.address.open\": \"打开\",\n \"remoteAccess.address.showQr\": \"显示二维码\",\n \"remoteAccess.address.hideQr\": \"隐藏二维码\",\n \"remoteAccess.address.qrAlt\": \"{url} 的二维码\",\n} as const\n","export const sessionMessages = {\n \"sessionPicker.title\": \"OpenCode • {folder}\",\n \"sessionPicker.empty.noPrevious\": \"没有历史会话\",\n \"sessionPicker.resume.title\": \"继续会话({count}):\",\n \"sessionPicker.session.untitled\": \"未命名\",\n \"sessionPicker.divider.or\": \"或\",\n \"sessionPicker.new.title\": \"开始新会话:\",\n \"sessionPicker.agents.loading\": \"正在加载智能体...\",\n \"sessionPicker.actions.creating\": \"正在创建...\",\n \"sessionPicker.actions.createSession\": \"创建会话\",\n \"sessionPicker.actions.cancel\": \"取消\",\n\n \"sessionList.header.title\": \"会话\",\n \"sessionList.session.untitled\": \"未命名\",\n \"sessionList.status.working\": \"工作中\",\n \"sessionList.status.compacting\": \"压缩中\",\n \"sessionList.status.idle\": \"空闲\",\n \"sessionList.status.interrupted\": \"已中断\",\n \"sessionList.status.retrying\": \"重试中\",\n \"sessionList.status.retryingIn\": \"{seconds} 秒后重试\",\n \"sessionList.status.retryTooltip\": \"{message}(第 {attempt} 次尝试)\",\n \"sessionList.status.retryToast\": \"{countdown}: {message}(第 {attempt} 次尝试)\",\n \"sessionList.status.needsPermission\": \"需要权限\",\n \"sessionList.status.needsInput\": \"需要输入\",\n \"sessionList.expand.collapseAriaLabel\": \"折叠会话\",\n \"sessionList.expand.expandAriaLabel\": \"展开会话\",\n \"sessionList.expand.collapseTitle\": \"折叠\",\n \"sessionList.expand.expandTitle\": \"展开\",\n \"sessionList.actions.newSession.ariaLabel\": \"新建会话\",\n \"sessionList.actions.newSession.title\": \"新建会话\",\n \"sessionList.actions.copyId.ariaLabel\": \"复制会话 ID\",\n \"sessionList.actions.copyId.title\": \"复制会话 ID\",\n \"sessionList.actions.reload.ariaLabel\": \"重新加载会话\",\n \"sessionList.actions.reload.title\": \"重新加载会话\",\n \"sessionList.actions.rename.ariaLabel\": \"重命名会话\",\n \"sessionList.actions.rename.title\": \"重命名会话\",\n \"sessionList.actions.delete.ariaLabel\": \"删除会话\",\n \"sessionList.actions.delete.title\": \"删除会话\",\n \"sessionList.copyId.success\": \"已复制会话 ID\",\n \"sessionList.copyId.error\": \"无法复制会话 ID\",\n \"sessionList.reload.error\": \"无法重新加载会话\",\n \"sessionList.delete.error\": \"无法删除会话\",\n \"sessionList.delete.title\": \"删除会话\",\n \"sessionList.delete.confirmMessage\": \"删除“{label}”?此操作无法撤销。\",\n \"sessionList.delete.confirmLabel\": \"删除\",\n \"sessionList.delete.cancelLabel\": \"取消\",\n \"sessionList.rename.error\": \"无法重命名会话\",\n\n \"sessionList.filter.placeholder\": \"搜索会话…\",\n \"sessionList.filter.ariaLabel\": \"搜索会话\",\n \"sessionList.loading.more\": \"正在加载更多会话…\",\n \"sessionList.loading.initial\": \"正在加载会话…\",\n \"sessionList.loadError.title\": \"无法加载会话\",\n \"sessionList.loadError.detail\": \"OpenCode 未返回会话列表。\",\n \"sessionList.loadError.retry\": \"重试\",\n \"sessionList.selection.selectAllLabel\": \"全选\",\n \"sessionList.selection.selectAllAriaLabel\": \"选择所有会话\",\n \"sessionList.selection.clearLabel\": \"清除\",\n \"sessionList.selection.clearAriaLabel\": \"清除选择\",\n \"sessionList.selection.checkboxAriaLabel\": \"选择会话\",\n \"sessionList.bulkDelete.button\": \"删除 {count}\",\n \"sessionList.bulkDelete.ariaLabel\": \"删除已选择的 {count} 个会话\",\n \"sessionList.bulkDelete.title\": \"删除会话\",\n \"sessionList.bulkDelete.confirmMessage\": \"删除已选择的 {count} 个会话?此操作无法撤销。\",\n \"sessionList.bulkDelete.confirmLabel\": \"删除\",\n \"sessionList.bulkDelete.cancelLabel\": \"取消\",\n \"sessionList.bulkDelete.error\": \"无法删除 {count} 个会话\",\n\n \"sessionRenameDialog.title\": \"重命名会话\",\n \"sessionRenameDialog.description.withLabel\": \"更新“{label}”的标题。\",\n \"sessionRenameDialog.description.default\": \"为此会话设置新标题。\",\n \"sessionRenameDialog.input.label\": \"会话名称\",\n \"sessionRenameDialog.input.placeholder\": \"输入会话名称\",\n \"sessionRenameDialog.actions.cancel\": \"取消\",\n \"sessionRenameDialog.actions.rename\": \"重命名\",\n \"sessionRenameDialog.actions.renaming\": \"正在重命名…\",\n\n \"sessionView.fallback.sessionNotFound\": \"未找到会话\",\n \"sessionView.alerts.abortFailed.message\": \"停止会话失败\",\n \"sessionView.alerts.abortFailed.title\": \"停止失败\",\n \"sessionView.alerts.revertFailed.message\": \"回退到消息失败\",\n \"sessionView.alerts.revertFailed.title\": \"回退失败\",\n \"sessionView.alerts.deleteUpToFailed.message\": \"无法删除消息\",\n \"sessionView.alerts.deleteUpToFailed.title\": \"删除失败\",\n \"sessionView.alerts.forkFailed.message\": \"分叉会话失败\",\n \"sessionView.alerts.forkFailed.title\": \"分叉失败\",\n \"sessionView.attachments.expandPastedTextAriaLabel\": \"展开粘贴的文本\",\n \"sessionView.attachments.insertPastedTextTitle\": \"插入粘贴的文本\",\n \"sessionView.attachments.removeAriaLabel\": \"移除附件\",\n\n \"sessionPreview.title\": \"网页预览\",\n \"sessionPreview.backToChat\": \"返回聊天\",\n \"sessionPreview.close\": \"关闭预览\",\n \"sessionPreview.chat.button\": \"返回聊天\",\n \"sessionPreview.open.button\": \"打开网页预览\",\n \"sessionPreview.open.title\": \"打开网页预览\",\n \"sessionPreview.open.prompt\": \"输入可信的本地或预发布 URL,以便在此会话中预览。\",\n \"sessionPreview.open.label\": \"预览 URL\",\n \"sessionPreview.open.placeholder\": \"https://staging.example.com\",\n \"sessionPreview.open.confirm\": \"打开预览\",\n \"sessionPreview.open.cancel\": \"取消\",\n \"sessionPreview.comment.mode\": \"评论模式\",\n \"sessionPreview.comment.title\": \"添加预览评论\",\n \"sessionPreview.comment.prompt\": \"描述所选元素需要更改的内容。\",\n \"sessionPreview.comment.label\": \"评论\",\n \"sessionPreview.comment.add\": \"添加评论\",\n \"sessionPreview.comment.cancel\": \"取消\",\n \"browserFrame.viewport\": \"视口大小\",\n \"browserFrame.viewport.responsive\": \"响应式视口\",\n \"browserFrame.viewport.desktop\": \"桌面视口 (1440 x 900)\",\n \"browserFrame.viewport.tablet\": \"平板视口 (768 x 1024)\",\n \"browserFrame.viewport.tabletLandscape\": \"平板横屏 (1024 x 768)\",\n \"browserFrame.viewport.mobile\": \"移动视口 (390 x 844)\",\n \"browserFrame.viewport.mobileLandscape\": \"移动横屏 (844 x 390)\",\n\n \"sessionEvents.sessionCompactedToast\": \"会话 {label} 已被压缩\",\n \"sessionEvents.sessionError.unknown\": \"未知错误\",\n \"sessionEvents.sessionError.title\": \"会话错误\",\n \"sessionEvents.sessionError.message\": \"错误:{message}\",\n\n \"sessionState.cleanup.deepConfirm.message\": \"此清理可能较慢,并且可能删除你并不想删除的会话。确定要继续吗?\",\n \"sessionState.cleanup.deepConfirm.title\": \"深度清理会话\",\n \"sessionState.cleanup.deepConfirm.detail\": \"深度清理会话将删除所有没有消息的会话、移除已完成的子智能体会话,并清除会话中未使用的分叉。\",\n \"sessionState.cleanup.deepConfirm.confirmLabel\": \"继续\",\n \"sessionState.cleanup.deepConfirm.cancelLabel\": \"取消\",\n \"sessionState.cleanup.toast.one\": \"已清理 {count} 个空白会话\",\n \"sessionState.cleanup.toast.other\": \"已清理 {count} 个空白会话\",\n} as const\n","export const settingsMessages = {\n \"instanceServiceStatus.sections.lsp\": \"LSP 服务器\",\n \"instanceServiceStatus.sections.mcp\": \"MCP 服务器\",\n \"instanceServiceStatus.sections.plugins\": \"插件\",\n \"instanceServiceStatus.lsp.loading\": \"正在加载 LSP 服务器...\",\n \"instanceServiceStatus.lsp.empty\": \"未检测到 LSP 服务器。\",\n \"instanceServiceStatus.lsp.status.connected\": \"已连接\",\n \"instanceServiceStatus.lsp.status.error\": \"错误\",\n \"instanceServiceStatus.mcp.loading\": \"正在加载 MCP 服务器...\",\n \"instanceServiceStatus.mcp.empty\": \"未检测到 MCP 服务器。\",\n \"instanceServiceStatus.mcp.toggleAriaLabel\": \"切换 {name} MCP 服务器\",\n \"instanceServiceStatus.plugins.loading\": \"正在加载插件...\",\n \"instanceServiceStatus.plugins.empty\": \"没有活动插件。\",\n\n \"permissionBanner.pendingRequests.one\": \"{count} 个待处理请求\",\n \"permissionBanner.pendingRequests.other\": \"{count} 个待处理请求\",\n \"permissionBanner.detail.permission.one\": \"{count} 项权限\",\n \"permissionBanner.detail.permission.other\": \"{count} 项权限\",\n \"permissionBanner.detail.question.one\": \"{count} 个问题\",\n \"permissionBanner.detail.question.other\": \"{count} 个问题\",\n \"permissionBanner.detail.form.one\": \"{count} 个表单\",\n \"permissionBanner.detail.form.other\": \"{count} 个表单\",\n \"permissionBanner.detail.wrapper\": \" ({detail})\",\n\n \"agentSelector.placeholder\": \"选择智能体...\",\n \"agentSelector.badge.subagent\": \"子智能体\",\n \"agentSelector.none\": \"无\",\n \"agentSelector.trigger.primary\": \"智能体:{agent}\",\n\n \"modelSelector.placeholder.search\": \"搜索模型...\",\n \"modelSelector.none\": \"无\",\n \"modelSelector.trigger.primary\": \"模型:{model}\",\n \"modelSelector.trigger.ariaLabel\": \"模型:{model},提供商:{provider},ID:{id}\",\n \"modelSelector.favoritesOnly.toggle.ariaLabel\": \"仅显示收藏\",\n \"modelSelector.favoritesOnly.showAll\": \"显示所有模型\",\n \"modelSelector.favorite.add\": \"添加到收藏\",\n \"modelSelector.favorite.remove\": \"从收藏移除\",\n \"modelSelector.manageProviders\": \"管理提供商\",\n \"modelSelector.unavailableModel\": \"{model}(不可用)\",\n \"settings.providers.actions.manageModels\": \"管理模型\",\n \"settings.providers.modelVisibility.back\": \"返回提供商列表\",\n \"settings.providers.modelVisibility.title\": \"{provider} 的模型\",\n \"settings.providers.modelVisibility.subtitle\": \"选择 CodeNomad 在模型选择器中显示的模型。\",\n \"settings.providers.modelVisibility.search.label\": \"搜索提供商模型\",\n \"settings.providers.modelVisibility.search.placeholder\": \"按模型名称或 ID 搜索...\",\n \"settings.providers.modelVisibility.count.visible\": \"显示 {visible}/{total}\",\n \"settings.providers.modelVisibility.actions.showAll\": \"全部显示\",\n \"settings.providers.modelVisibility.actions.hideAll\": \"全部隐藏\",\n \"settings.providers.modelVisibility.list.empty\": \"没有与搜索匹配的模型。\",\n \"settings.providers.modelVisibility.list.label\": \"{provider} 的模型\",\n \"settings.providers.modelVisibility.save.failed\": \"无法保存模型可见性设置。\",\n\n \"thinkingSelector.variant.default\": \"默认\",\n \"thinkingSelector.label\": \"思考:{variant}\",\n\n \"envEditor.title\": \"环境变量\",\n \"envEditor.count.one\": \"({count} 个变量)\",\n \"envEditor.count.other\": \"({count} 个变量)\",\n \"envEditor.fields.name.placeholder\": \"变量名\",\n \"envEditor.fields.name.readOnlyTitle\": \"变量名(只读)\",\n \"envEditor.fields.value.placeholder\": \"变量值\",\n \"envEditor.fields.secure.enabled\": \"值已隐藏(安全)\",\n \"envEditor.fields.secure.disabled\": \"点击隐藏值\",\n \"envEditor.fields.secure.masked\": \"值已隐藏(安全)\",\n \"envEditor.actions.remove.title\": \"移除变量\",\n \"envEditor.actions.add.title\": \"添加变量\",\n \"envEditor.empty\": \"未配置环境变量。在上方添加变量以自定义 OpenCode 环境。\",\n \"envEditor.help\": \"启动实例时,这些变量将在 OpenCode 环境中可用。\",\n\n \"contextUsagePanel.headings.tokens\": \"令牌\",\n \"contextUsagePanel.headings.context\": \"上下文\",\n \"contextUsagePanel.labels.input\": \"输入\",\n \"contextUsagePanel.labels.output\": \"输出\",\n \"contextUsagePanel.labels.cost\": \"费用\",\n \"contextUsagePanel.included\": \"已包含\",\n \"contextUsagePanel.labels.totalInput\": \"总输入\",\n \"contextUsagePanel.labels.totalOutput\": \"总输出\",\n \"contextUsagePanel.labels.totalCost\": \"总费用\",\n \"contextUsagePanel.labels.totalReasoning\": \"总推理\",\n \"contextUsagePanel.labels.used\": \"已用\",\n \"contextUsagePanel.labels.available\": \"可用\",\n \"contextUsagePanel.unavailable\": \"--\",\n\n \"providerUsage.title\": \"用量\",\n \"providerUsage.tooltip\": \"活动会话所选提供商的用量和重置周期。\",\n \"providerUsage.noSession\": \"请选择一个会话以查看套餐用量。\",\n \"providerUsage.loading\": \"正在加载用量...\",\n \"providerUsage.unsupported\": \"此提供商不支持用量查询。\",\n \"providerUsage.notConfigured\": \"未找到兼容的订阅凭据。\",\n \"providerUsage.unavailable\": \"用量暂时不可用。\",\n \"providerUsage.unavailableValue\": \"--\",\n \"providerUsage.usedPercent\": \"已使用 {percent}%\",\n \"providerUsage.resets\": \"重置时间 {time}\",\n \"providerUsage.progressLabel\": \"{window} 套餐用量\",\n \"providerUsage.windows.fiveHours\": \"5 小时\",\n \"providerUsage.windows.sevenDays\": \"7 天\",\n \"providerUsage.windows.sevenDaysSonnet\": \"7 天 · Sonnet\",\n \"providerUsage.windows.sevenDaysOpus\": \"7 天 · Opus\",\n \"providerUsage.windows.weekly\": \"每周\",\n \"providerUsage.windows.daily\": \"每日\",\n \"providerUsage.windows.monthly\": \"每月\",\n \"providerUsage.windows.credits\": \"额度\",\n \"providerUsage.windows.billingCycle\": \"计费周期\",\n \"providerUsage.windows.session\": \"会话\",\n \"providerUsage.windows.premium\": \"高级请求\",\n \"providerUsage.windows.chat\": \"聊天\",\n \"providerUsage.windows.completions\": \"补全\",\n \"providerUsage.windows.mcpTools\": \"MCP 工具\",\n\n \"settings.title\": \"设置\",\n \"settings.navigationAriaLabel\": \"设置分区\",\n \"settings.close\": \"关闭设置\",\n \"settings.content.eyebrow\": \"工作区偏好设置\",\n \"settings.open.title\": \"打开设置\",\n \"settings.open.ariaLabel\": \"打开设置\",\n \"settings.nav.appearance\": \"外观\",\n \"settings.nav.general\": \"常规\",\n \"settings.nav.chat\": \"聊天\",\n \"settings.nav.voice\": \"语音\",\n \"settings.nav.connections\": \"连接\",\n \"settings.nav.runtime\": \"运行时\",\n \"settings.nav.advanced\": \"高级\",\n \"settings.nav.about\": \"关于\",\n \"settings.general.language.subtitle\": \"选择整个应用程序使用的语言。\",\n \"settings.behavior.holdLongAssistantReplies.title\": \"暂停跟随较长的助手回复\",\n \"settings.behavior.holdLongAssistantReplies.subtitle\": \"当流式回复超出视口时停止自动跟随。\",\n \"settings.nav.notifications\": \"通知\",\n \"settings.nav.remote\": \"远程访问\",\n \"settings.nav.speech\": \"语音\",\n \"settings.nav.providers\": \"提供商\",\n \"settings.nav.opencode\": \"OpenCode\",\n \"settings.nav.configFiles\": \"配置文件\",\n \"settings.nav.info\": \"信息\",\n \"settings.scope.device\": \"此设备\",\n \"settings.scope.server\": \"服务器设置\",\n \"settings.common.enabled\": \"已启用\",\n \"settings.common.disabled\": \"已禁用\",\n \"settings.section.appearance.title\": \"外观\",\n \"settings.section.appearance.subtitle\": \"调整此设备上的应用外观。\",\n \"settings.appearance.theme.title\": \"主题\",\n \"settings.appearance.theme.subtitle\": \"选择整个应用使用的颜色模式。\",\n \"settings.appearance.theme.option.system\": \"跟随操作系统设置\",\n \"settings.appearance.theme.option.light\": \"使用浅色外观\",\n \"settings.appearance.theme.option.dark\": \"使用深色外观\",\n \"settings.appearance.colorScheme.title\": \"配色方案\",\n \"settings.appearance.colorScheme.subtitle\": \"选择连接到此 CodeNomad 服务器的客户端所用配色。\",\n \"settings.appearance.colorScheme.option.system\": \"系统\",\n \"settings.appearance.colorScheme.option.light\": \"浅色\",\n \"settings.appearance.colorScheme.option.codeNomadClassic\": \"CodeNomad 经典\",\n \"settings.appearance.colorScheme.option.basalt\": \"玄武岩\",\n \"settings.appearance.colorScheme.option.fjord\": \"峡湾\",\n \"settings.appearance.colorScheme.option.lichen\": \"地衣\",\n \"settings.appearance.colorScheme.option.velvet\": \"天鹅绒\",\n \"settings.appearance.colorScheme.option.ember\": \"余烬\",\n \"settings.appearance.colorScheme.option.custom\": \"自定义\",\n \"settings.appearance.colorScheme.description.system\": \"跟随操作系统外观。\",\n \"settings.appearance.colorScheme.description.light\": \"明亮、中性的配色。\",\n \"settings.appearance.colorScheme.description.codeNomadClassic\": \"CodeNomad 原版深色配色。\",\n \"settings.appearance.colorScheme.description.basalt\": \"中性炭灰搭配冷蓝色强调色。\",\n \"settings.appearance.colorScheme.description.fjord\": \"深蓝灰搭配海绿色强调色。\",\n \"settings.appearance.colorScheme.description.lichen\": \"大地绿灰搭配苔绿色强调色。\",\n \"settings.appearance.colorScheme.description.velvet\": \"深梅紫搭配暖桃色强调色。\",\n \"settings.appearance.colorScheme.description.ember\": \"暖棕黑搭配铜色强调色。\",\n \"settings.appearance.colorScheme.description.custom\": \"创建并保存自己的配色。\",\n \"settings.appearance.colorScheme.custom.appearance\": \"自定义外观\",\n \"settings.appearance.colorScheme.custom.appearance.light\": \"浅色\",\n \"settings.appearance.colorScheme.custom.appearance.dark\": \"深色\",\n \"settings.appearance.colorScheme.custom.colors\": \"颜色\",\n \"settings.appearance.colorScheme.custom.field.surfaceBase\": \"基础表面\",\n \"settings.appearance.colorScheme.custom.field.surfaceSecondary\": \"次级表面\",\n \"settings.appearance.colorScheme.custom.field.surfaceMuted\": \"弱化表面\",\n \"settings.appearance.colorScheme.custom.field.borderBase\": \"边框\",\n \"settings.appearance.colorScheme.custom.field.textPrimary\": \"主要文本\",\n \"settings.appearance.colorScheme.custom.field.textMuted\": \"弱化文本\",\n \"settings.appearance.colorScheme.custom.field.accentPrimary\": \"强调色\",\n \"settings.appearance.colorScheme.custom.field.statusSuccess\": \"成功\",\n \"settings.appearance.colorScheme.custom.field.statusWarning\": \"警告\",\n \"settings.appearance.colorScheme.custom.field.statusError\": \"错误\",\n \"settings.appearance.colorScheme.custom.field.userAccent\": \"用户\",\n \"settings.appearance.colorScheme.custom.field.agentAccent\": \"智能体\",\n \"settings.appearance.colorScheme.custom.field.compactionAccent\": \"压缩\",\n \"settings.appearance.colorScheme.custom.field.yoloAccent\": \"YOLO 模式\",\n \"settings.appearance.colorScheme.custom.pickerAriaLabel\": \"选择{name}\",\n \"settings.appearance.colorScheme.custom.valueAriaLabel\": \"{name}的十六进制值\",\n \"settings.appearance.colorScheme.custom.warning.format\": \"请使用大写的 #RRGGBB 格式。\",\n \"settings.appearance.colorScheme.custom.warning.contrast\": \"请先提高颜色对比度再保存。\",\n \"settings.appearance.colorScheme.custom.reset\": \"重置\",\n \"settings.appearance.colorScheme.custom.save\": \"保存\",\n \"settings.appearance.colorScheme.custom.saveError\": \"无法保存调色板。\",\n \"settings.appearance.startup.title\": \"启动\",\n \"settings.appearance.startup.subtitle\": \"选择 CodeNomad 启动时在此设备上恢复的内容。\",\n \"settings.appearance.startup.restore.title\": \"恢复上次状态\",\n \"settings.appearance.startup.restore.subtitle\": \"重新打开工作区和边栏标签页、活动会话和未发送的消息,并恢复滚动位置、面板布局、窗口位置和缩放级别。\",\n \"settings.appearance.startup.clear.title\": \"已保存的启动状态\",\n \"settings.appearance.startup.clear.subtitle\": \"移除已保存的标签页、草稿、滚动位置和面板布局。不会删除 CodeNomad 或 OpenCode 数据。\",\n \"settings.appearance.startup.clear.action\": \"清除已保存状态\",\n \"settings.appearance.startup.clearSuccess\": \"已清除保存的启动状态。\",\n \"settings.appearance.startup.clearError\": \"无法清除保存的启动状态。\",\n \"settings.appearance.startup.updateError\": \"无法更新启动恢复设置。\",\n \"settings.section.notifications.title\": \"通知\",\n \"settings.section.notifications.subtitle\": \"控制会话活动的系统级通知。\",\n \"settings.notifications.permission.granted\": \"已授予\",\n \"settings.notifications.permission.denied\": \"已拒绝\",\n \"settings.notifications.permission.default\": \"未授予\",\n \"settings.notifications.permission.unsupported\": \"不支持\",\n \"settings.notifications.messages.unsupportedEnvironment\": \"此环境不支持系统通知。\",\n \"settings.notifications.messages.permissionDenied\": \"通知权限已被拒绝。请在系统或浏览器设置中启用通知。\",\n \"settings.notifications.messages.permissionNotGranted\": \"尚未授予通知权限。\",\n \"settings.notifications.messages.unsupportedGeneral\": \"此环境不支持通知。\",\n \"settings.notifications.messages.permissionGranted\": \"权限已授予。你现在可以启用通知。\",\n \"settings.notifications.messages.permissionRequestDenied\": \"权限被拒绝。你可能需要在系统或浏览器设置中启用通知。\",\n \"settings.notifications.sessionStatus.title\": \"会话状态通知\",\n \"settings.notifications.sessionStatus.subtitle\": \"当会话需要你关注时接收提醒。\",\n \"settings.notifications.enable.title\": \"启用通知\",\n \"settings.notifications.enable.permission\": \"权限:{permission}\",\n \"settings.notifications.requestPermission.title\": \"请求权限\",\n \"settings.notifications.requestPermission.subtitle\": \"允许应用在此设备上发送通知。\",\n \"settings.notifications.requestPermission.action\": \"请求\",\n \"settings.notifications.allowVisible.title\": \"应用获得焦点时也通知\",\n \"settings.notifications.allowVisible.subtitle\": \"即使此窗口可见,也保持提醒启用。\",\n \"settings.notifications.unsupportedNote\": \"此环境不支持通知。通知控制项将保持禁用。\",\n \"settings.notifications.events.title\": \"在以下情况通知我\",\n \"settings.notifications.events.subtitle\": \"选择哪些会话事件应发送提醒。\",\n \"settings.notifications.events.needsInput\": \"会话需要输入\",\n \"settings.notifications.events.idle\": \"会话变为空闲\",\n \"settings.notifications.status.enabled\": \"通知已启用\",\n \"settings.notifications.status.disabled\": \"通知已禁用\",\n \"settings.notifications.status.unsupported\": \"不支持通知\",\n \"settings.section.remote.title\": \"远程访问\",\n \"settings.section.remote.subtitle\": \"查看此服务器如何暴露到网络,以及安全访问凭据。\",\n \"settings.section.opencode.title\": \"OpenCode\",\n \"settings.section.opencode.subtitle\": \"选择新实例使用的 OpenCode 可执行文件和环境。\",\n \"settings.opencode.runtime.title\": \"运行时\",\n \"settings.opencode.runtime.subtitle\": \"配置新实例启动时使用的 OpenCode 可执行文件。\",\n \"settings.opencode.logLevel.title\": \"OpenCode 日志级别\",\n \"settings.opencode.logLevel.subtitle\": \"设置启动新的 OpenCode 实例时使用的日志级别。\",\n \"settings.opencode.logLevel.selector.title\": \"日志详细程度\",\n \"settings.opencode.logLevel.selector.subtitle\": \"选择新的 OpenCode 实例应输出多少日志信息。\",\n \"settings.opencode.logLevel.option.debug\": \"调试\",\n \"settings.opencode.logLevel.option.info\": \"信息\",\n \"settings.opencode.logLevel.option.warn\": \"警告\",\n \"settings.opencode.logLevel.option.error\": \"错误\",\n \"settings.opencode.update.title\": \"OpenCode 版本\",\n \"settings.opencode.update.subtitle\": \"已配置 OpenCode 可执行文件的已安装版本。\",\n \"settings.opencode.update.checking\": \"正在读取已安装版本...\",\n \"settings.opencode.update.checkFailed\": \"无法读取已安装的 OpenCode 版本。\",\n \"settings.opencode.update.retry\": \"重试\",\n \"settings.opencode.update.installed\": \"已安装版本\",\n \"settings.opencode.update.upToDate\": \"OpenCode 已是最新版本。\",\n \"settings.opencode.update.availableUnsupported\": \"OpenCode {version} 已可用。OpenCode V2 不支持自动安装。\",\n \"settings.opencode.update.action\": \"更新到 OpenCode {version}\",\n \"settings.opencode.update.updating\": \"正在更新 OpenCode...\",\n \"settings.opencode.update.requiresInstance\": \"请使用此可执行文件启动工作区以安装更新。\",\n \"settings.opencode.update.success\": \"OpenCode {version} 已安装。新实例将使用更新后的版本。\",\n \"settings.opencode.update.failed\": \"OpenCode 更新失败。已安装的版本未更改。\",\n \"settings.configFiles.title\": \"配置文件\",\n \"settings.configFiles.subtitle\": \"编辑此服务器允许列表中的全局配置文件。\",\n \"settings.configFiles.selector.label\": \"文件\",\n \"settings.configFiles.selector.placeholder\": \"选择配置文件\",\n \"settings.configFiles.actions.save\": \"保存\",\n \"settings.configFiles.actions.reload\": \"重新加载\",\n \"settings.configFiles.state.unsaved\": \"未保存的更改\",\n \"settings.configFiles.state.notCreated\": \"保存时将创建此文件\",\n \"settings.configFiles.empty\": \"未选择配置文件。\",\n \"settings.configFiles.errors.loadList\": \"加载配置文件失败。\",\n \"settings.configFiles.errors.loadContent\": \"加载配置文件内容失败。\",\n \"settings.configFiles.errors.save\": \"保存配置文件失败。\",\n \"settings.configFiles.toast.saveSuccess\": \"配置文件已保存。\",\n \"settings.configFiles.toast.saveError\": \"保存配置文件失败。\",\n \"settings.configFiles.confirmDiscard.message\": \"继续前要放弃未保存的更改吗?\",\n \"settings.configFiles.confirmDiscard.confirmLabel\": \"放弃更改\",\n \"settings.configFiles.confirmDiscard.cancelLabel\": \"继续编辑\",\n\n \"settings.providers.title\": \"提供商认证\",\n \"settings.providers.target\": \"OpenCode 实例:{workspace}\",\n \"settings.providers.subtitle\": \"为当前 OpenCode 实例连接 API 密钥或 OAuth 账号。\",\n \"settings.providers.refresh\": \"刷新\",\n \"settings.providers.selectProvider\": \"选择提供商\",\n \"settings.providers.available.title\": \"可用提供商\",\n \"settings.providers.configured.title\": \"已配置提供商\",\n \"settings.providers.loading\": \"正在加载提供商认证方式...\",\n \"settings.providers.empty.noInstance\": \"请先启动 OpenCode 工作区,再管理提供商认证。\",\n \"settings.providers.empty.noProviders\": \"此 OpenCode 实例没有可用的提供商。\",\n \"settings.providers.empty.noConfiguredProviders\": \"此 OpenCode 实例当前未配置任何提供商。\",\n \"settings.providers.models.one\": \"{count} 个模型\",\n \"settings.providers.models.other\": \"{count} 个模型\",\n \"settings.providers.actions.connect\": \"连接\",\n \"settings.providers.actions.disconnect\": \"断开连接\",\n \"settings.providers.actions.remove\": \"移除已保存认证\",\n \"settings.providers.actions.close\": \"关闭\",\n \"settings.providers.actions.continue\": \"继续\",\n \"settings.providers.actions.working\": \"处理中...\",\n \"settings.providers.method.title\": \"认证方式\",\n \"settings.providers.method.subtitle\": \"选择 OpenCode 为此提供商暴露的流程。\",\n \"settings.providers.method.api\": \"API 密钥\",\n \"settings.providers.method.oauth\": \"OAuth\",\n \"settings.providers.method.command\": \"命令\",\n \"settings.providers.method.mixed\": \"API 密钥、OAuth 或命令\",\n \"settings.providers.method.fallback\": \"API 密钥\",\n \"settings.providers.status.available\": \"可用\",\n \"settings.providers.auth.title\": \"连接 {provider}\",\n \"settings.providers.auth.subtitle\": \"认证信息会保存在当前 OpenCode 服务器中。\",\n \"settings.providers.apiKey.label\": \"API 密钥\",\n \"settings.providers.apiKey.placeholder\": \"粘贴提供商 API 密钥\",\n \"settings.providers.oauth.noPrompts\": \"此 OAuth 方式在打开浏览器前不需要额外信息。\",\n \"settings.providers.oauth.promptsUnsupported\": \"此 OAuth 方式需要提供商专属的提示输入,但当前 SDK 构建不支持。\",\n \"settings.providers.oauth.enterCode\": \"完成浏览器流程后,粘贴授权码。\",\n \"settings.providers.oauth.openPage\": \"打开授权页面\",\n \"settings.providers.oauth.openHere\": \"在此标签页打开\",\n \"settings.providers.oauth.copyLink\": \"复制链接\",\n \"settings.providers.oauth.linkCopied\": \"链接已复制\",\n \"settings.providers.oauth.popupBlocked\": \"你的浏览器可能拦截了授权页面。请使用上方操作继续登录流程。\",\n \"settings.providers.oauth.popup.loadingTitle\": \"OpenCode 授权\",\n \"settings.providers.oauth.popup.loadingBody\": \"正在准备授权页面...\",\n \"settings.providers.oauth.codeLabel\": \"授权码\",\n \"settings.providers.oauth.codePlaceholder\": \"粘贴提供商返回的代码\",\n \"settings.providers.oauth.submitCode\": \"提交代码\",\n \"settings.providers.oauth.waitingTitle\": \"等待授权\",\n \"settings.providers.oauth.cancelWait\": \"取消\",\n \"settings.providers.prompt.selectPlaceholder\": \"选择一个选项\",\n \"settings.providers.prompt.customValuesPlaceholder\": \"其他值,以逗号分隔\",\n \"settings.providers.command.description\": \"OpenCode 将运行此提供商的原生身份验证命令。\",\n \"settings.providers.command.waitingTitle\": \"正在等待命令身份验证\",\n \"settings.providers.command.waitingMessage\": \"请完成身份验证命令显示的说明。\",\n \"settings.providers.success\": \"提供商认证已保存。提供商数据已刷新。\",\n \"settings.providers.source.api\": \"已保存的提供商认证\",\n \"settings.providers.source.config\": \"在 opencode.jsonc 中配置\",\n \"settings.providers.source.custom\": \"由自定义提供商逻辑配置\",\n \"settings.providers.source.env\": \"由环境变量配置\",\n \"settings.providers.source.unknown\": \"已配置的提供商来源\",\n \"settings.providers.errors.loadFailed\": \"加载提供商认证方式失败。\",\n \"settings.providers.errors.noAuthorization\": \"提供商未返回授权数据。\",\n \"settings.providers.errors.authorizationFailed\": \"授权失败。\",\n \"settings.providers.errors.removeFailed\": \"移除提供商认证失败。\",\n \"settings.providers.errors.envDisconnectUnavailable\": \"此提供商由环境变量配置,无法从界面断开连接。\",\n\n \"settings.appearance.behavior.title\": \"交互\",\n \"settings.appearance.behavior.subtitle\": \"统一控制消息、工具、诊断和用量详情。\",\n \"settings.behavior.expansionPresets.ariaLabel\": \"对话详情预设\",\n \"settings.behavior.expansionPreset.minimal.title\": \"Minimal\",\n \"settings.behavior.expansionPreset.minimal.description\": \"Keep most generated detail tucked away until needed.\",\n \"settings.behavior.expansionPreset.balanced.title\": \"Balanced\",\n \"settings.behavior.expansionPreset.balanced.description\": \"Show important actions while keeping noisy reads and fetches compact.\",\n \"settings.behavior.expansionPreset.detailed.title\": \"Detailed\",\n \"settings.behavior.expansionPreset.detailed.description\": \"Open most tool and thinking output for a fuller transcript.\",\n \"settings.behavior.expansionPreset.everything.title\": \"Everything\",\n \"settings.behavior.expansionPreset.everything.description\": \"Expand all tool and thinking output by default.\",\n \"settings.behavior.expansionPreset.custom.title\": \"Custom\",\n \"settings.behavior.expansionPreset.custom.description\": \"Your customized transcript detail defaults.\",\n \"settings.behavior.expansionDefaults.title\": \"Expansion defaults\",\n \"settings.behavior.expansionDefaults.itemColumn\": \"Item\",\n \"settings.behavior.expansionDefaults.stateColumn\": \"Default state\",\n \"settings.behavior.expansionDefaults.thinking\": \"thinking\",\n \"settings.behavior.expansionDefaults.otherTools\": \"Other tools\",\n \"settings.behavior.expansionDefaults.rowAriaLabel\": \"Default state for {item}\",\n \"settings.behavior.keyboardHints.title\": \"键盘快捷键提示\",\n \"settings.behavior.keyboardHints.subtitle\": \"在整个界面中显示键盘快捷键提示。\",\n \"settings.behavior.thinking.title\": \"思考区块\",\n \"settings.behavior.thinking.subtitle\": \"在消息中显示或隐藏AI的思考区块。\",\n \"settings.behavior.thinkingDefault.title\": \"思考默认状态\",\n \"settings.behavior.thinkingDefault.subtitle\": \"选择思考区块默认是展开还是折叠。\",\n \"settings.behavior.messageTimeline.title\": \"消息时间线\",\n \"settings.behavior.messageTimeline.subtitle\": \"显示或隐藏消息时间线侧边栏。\",\n \"settings.behavior.timelineTools.title\": \"时间线工具调用\",\n \"settings.behavior.timelineTools.subtitle\": \"在消息时间线中显示或隐藏工具调用条目。\",\n \"settings.behavior.diffView.title\": \"差异视图\",\n \"settings.behavior.diffView.subtitle\": \"选择工具调用差异的显示方式。\",\n \"settings.behavior.diffView.option.split\": \"分栏\",\n \"settings.behavior.diffView.option.unified\": \"统一\",\n \"settings.behavior.toolOutputsDefault.title\": \"工具输出默认状态\",\n \"settings.behavior.toolOutputsDefault.subtitle\": \"选择工具输出默认是展开还是折叠。\",\n \"settings.behavior.diagnosticsDefault.title\": \"诊断默认状态\",\n \"settings.behavior.diagnosticsDefault.subtitle\": \"选择诊断输出默认是展开还是折叠。\",\n \"settings.behavior.toolInputsVisibility.title\": \"工具输入可见性\",\n \"settings.behavior.toolInputsVisibility.subtitle\": \"设置工具调用输入参数的默认可见性。\",\n \"settings.behavior.usageMetrics.title\": \"令牌用量指标\",\n \"settings.behavior.usageMetrics.subtitle\": \"显示或隐藏助手消息的令牌与成本统计。\",\n \"settings.behavior.providerUsageCreditBalance.title\": \"提供商额度余额\",\n \"settings.behavior.providerUsageCreditBalance.subtitle\": \"在用量面板中显示提供商的额外额度余额。\",\n \"settings.behavior.autoCleanup.title\": \"自动清理空会话\",\n \"settings.behavior.autoCleanup.subtitle\": \"创建新会话时自动清理空会话。\",\n \"settings.behavior.keepUnseenSubagentIdle.title\": \"保留子智能体 idle 标记\",\n \"settings.behavior.keepUnseenSubagentIdle.subtitle\": \"让子智能体 idle 标记保持可见直到查看,而不是 5 秒后隐藏。\",\n \"settings.behavior.focusExistingWindowOnSecondLaunch.title\": \"再次启动时聚焦现有窗口\",\n \"settings.behavior.focusExistingWindowOnSecondLaunch.subtitle\": \"将最近使用的 CodeNomad 窗口置于前台,而不是打开新窗口。\",\n \"settings.behavior.promptVoiceInput.title\": \"提示词语音输入\",\n \"settings.behavior.promptVoiceInput.subtitle\": \"语音已配置时,显示用于语音转文字提示词输入的麦克风控件。\",\n \"settings.behavior.promptSubmit.title\": \"回车发送\",\n \"settings.behavior.promptSubmit.subtitle\": \"使用回车发送;Cmd/Ctrl+回车插入新行。\",\n \"settings.behavior.followUpBehavior.title\": \"后续提示行为\",\n \"settings.behavior.followUpBehavior.subtitle\": \"选择任务运行时提示的发送方式;Cmd/Ctrl+Shift+Enter 使用另一种方式。\",\n \"settings.behavior.followUpBehavior.option.steer\": \"引导\",\n \"settings.behavior.followUpBehavior.option.queue\": \"排队\",\n \"settings.speech.title\": \"语音\",\n \"settings.speech.subtitle\": \"立即配置语音转文字,并为后续功能预留文字转语音基础。\",\n \"settings.speech.provider.title\": \"提供商\",\n \"settings.speech.provider.subtitle\": \"语音请求使用服务器端语音适配器。\",\n \"settings.speech.provider.openaiCompatible\": \"兼容 OpenAI\",\n \"settings.speech.status.loading\": \"正在检查配置...\",\n \"settings.speech.status.configured\": \"已配置\",\n \"settings.speech.status.missing\": \"缺少 API 密钥\",\n \"settings.speech.status.partial\": \"部分已配置\",\n \"settings.speech.status.error\": \"语音服务不可用\",\n \"settings.speech.apiKey.title\": \"API 密钥\",\n \"settings.speech.apiKey.subtitle\": \"用于 CodeNomad 管理的语音请求。\",\n \"settings.speech.apiKey.placeholder\": \"输入新的 API 密钥\",\n \"settings.speech.apiKey.storedNote\": \"已保存的 API 密钥会被隐藏。输入新值可替换它,留空则保留当前密钥。\",\n \"settings.speech.apiKey.clearAction\": \"清除已保存的密钥\",\n \"settings.speech.apiKey.clearPending\": \"保存后将删除已保存的 API 密钥。\",\n \"settings.speech.baseUrl.title\": \"基础 URL\",\n \"settings.speech.baseUrl.subtitle\": \"可选,用于覆盖 OpenAI 兼容语音端点的基础地址。\",\n \"settings.speech.baseUrl.placeholder\": \"https://api.openai.com/v1\",\n \"settings.speech.sttModel.title\": \"转写模型\",\n \"settings.speech.sttModel.subtitle\": \"用于提示框语音转文字请求的模型。\",\n \"settings.speech.ttsModel.title\": \"语音模型\",\n \"settings.speech.ttsModel.subtitle\": \"为未来播放功能预留的默认文字转语音模型。\",\n \"settings.speech.ttsVoice.title\": \"默认语音\",\n \"settings.speech.ttsVoice.subtitle\": \"为未来播放功能预留的默认文字转语音音色。\",\n \"settings.speech.playbackMode.title\": \"播放模式\",\n \"settings.speech.playbackMode.subtitle\": \"选择在音频流入时开始播放,还是在整个文件生成完成后再播放。\",\n \"settings.speech.playbackMode.streaming\": \"流式\",\n \"settings.speech.playbackMode.buffered\": \"缓冲后播放\",\n \"settings.speech.ttsFormat.title\": \"输出格式\",\n \"settings.speech.ttsFormat.subtitle\": \"选择语音合成的音频格式。流式支持取决于你的提供商和浏览器。\",\n \"settings.speech.help\": \"当语音转写已配置且受支持时,提示框语音输入会显示。消息播放会使用这里选择的 TTS 模式和格式。\",\n \"settings.speech.compatibility.streamingUnavailable\": \"你当前的语音提供商配置没有声明支持流式 TTS。如果你现在就想让播放可用,请把播放模式切换为 buffered。\",\n \"settings.speech.compatibility.browserStreamingUnavailable\": \"你当前的浏览器无法流式播放所选的 TTS 格式。请选择 buffered 播放,或切换到其他格式。\",\n \"settings.speech.compatibility.runtimeNote\": \"在流式模式下仍然可以选择所有格式,但某些浏览器与提供商的组合在播放时仍可能失败。\",\n \"settings.speech.testPlayback.action\": \"测试播放\",\n \"settings.speech.testPlayback.generating\": \"正在生成示例\",\n \"settings.speech.testPlayback.stop\": \"停止示例\",\n \"settings.speech.testPlayback.sample\": \"感谢你使用 CodeNomad,你的语音设置工作正常。\",\n \"settings.speech.testPlayback.note\": \"测试会立即使用当前播放模式和格式。如果你也想测试 API key、Base URL、模型或音色的更改,请先保存。\",\n \"settings.speech.testInput.action\": \"测试输入\",\n \"settings.speech.testInput.stop\": \"停止录音\",\n \"settings.speech.testInput.transcribing\": \"转录中\",\n \"settings.speech.testInput.requesting\": \"启动中…\",\n \"settings.speech.testInput.empty\": \"未检测到语音\",\n \"settings.speech.save.action\": \"保存\",\n \"settings.speech.save.saving\": \"保存中...\",\n \"settings.speech.save.saved\": \"已保存\",\n \"settings.speech.save.unsaved\": \"有未保存的更改\",\n \"settings.speech.save.error\": \"保存失败\",\n \"settings.speech.separateProviders.title\": \"为输入和输出使用不同供应商\",\n \"settings.speech.separateProviders.subtitle\": \"为语音输入 (STT) 和语音输出 (TTS) 使用不同的 API 密钥和端点。\",\n \"settings.speech.stt.section.title\": \"语音输入 (语音转文字)\",\n \"settings.speech.tts.section.title\": \"语音输出 (文字转语音)\",\n \"settings.speech.stt.apiKey.title\": \"输入 API 密钥\",\n \"settings.speech.stt.apiKey.subtitle\": \"用于语音转文字请求。\",\n \"settings.speech.stt.apiKey.placeholder\": \"输入新的输入 API 密钥\",\n \"settings.speech.stt.apiKey.storedNote\": \"已保存的输入 API 密钥已隐藏。输入新值可替换,留空则保留当前密钥。\",\n \"settings.speech.stt.apiKey.usingShared\": \"正在使用共享 API 密钥。输入新密钥可覆盖。\",\n \"settings.speech.stt.apiKey.clearAction\": \"清除已保存的输入密钥\",\n \"settings.speech.stt.apiKey.clearPending\": \"保存后将删除已保存的输入 API 密钥。\",\n \"settings.speech.stt.baseUrl.title\": \"输入基础 URL\",\n \"settings.speech.stt.baseUrl.subtitle\": \"用于语音转文字的 OpenAI 兼容端点。\",\n \"settings.speech.stt.baseUrl.placeholder\": \"https://api.openai.com/v1\",\n \"settings.speech.stt.model.title\": \"输入模型\",\n \"settings.speech.stt.model.subtitle\": \"用于语音转文字的模型。\",\n \"settings.speech.tts.apiKey.title\": \"输出 API 密钥\",\n \"settings.speech.tts.apiKey.subtitle\": \"用于文字转语音请求。\",\n \"settings.speech.tts.apiKey.placeholder\": \"输入新的输出 API 密钥\",\n \"settings.speech.tts.apiKey.storedNote\": \"已保存的输出 API 密钥已隐藏。输入新值可替换,留空则保留当前密钥。\",\n \"settings.speech.tts.apiKey.usingShared\": \"正在使用共享 API 密钥。输入新密钥可覆盖。\",\n \"settings.speech.tts.apiKey.clearAction\": \"清除已保存的输出密钥\",\n \"settings.speech.tts.apiKey.clearPending\": \"保存后将删除已保存的输出 API 密钥。\",\n \"settings.speech.tts.baseUrl.title\": \"输出基础 URL\",\n \"settings.speech.tts.baseUrl.subtitle\": \"用于文字转语音的 OpenAI 兼容端点。\",\n \"settings.speech.tts.baseUrl.placeholder\": \"https://api.openai.com/v1\",\n \"settings.speech.tts.model.title\": \"输出模型\",\n \"settings.speech.tts.model.subtitle\": \"用于文字转语音的模型。\",\n \"settings.nav.sidecars\": \"SideCars\",\n \"settings.section.sidecars.eyebrow\": \"服务器服务\",\n \"settings.section.sidecars.title\": \"SideCars\",\n \"settings.section.sidecars.subtitle\": \"配置监听固定端口的本地服务,服务器可将其代理到标签页中。\",\n \"sidecars.form.name\": \"名称\",\n \"sidecars.form.validation\": \"请输入有效的 SideCar 名称和端口。\",\n \"sidecars.form.port\": \"端口\",\n \"sidecars.form.insecure\": \"使用 HTTP\",\n \"sidecars.form.protocol\": \"协议\",\n \"sidecars.form.protocol.help\": \"选择代理连接到本地服务的方式。\",\n \"sidecars.form.protocol.https\": \"HTTPS\",\n \"sidecars.form.protocol.http\": \"HTTP\",\n \"sidecars.form.prefixMode\": \"前缀模式\",\n \"sidecars.form.prefixMode.help\": \"选择 SideCar 是否接收公开的 /sidecars 路径前缀。\",\n \"sidecars.form.prefixMode.strip\": \"移除前缀\",\n \"sidecars.form.prefixMode.preserve\": \"保留前缀\",\n \"sidecars.form.add\": \"添加 SideCar\",\n \"sidecars.kind.port\": \"端口\",\n \"sidecars.status.running\": \"运行中\",\n \"sidecars.status.stopped\": \"已停止\",\n \"sidecars.basePath\": \"基础路径\",\n \"sidecars.settings.listTitle\": \"已配置的 SideCar\",\n \"sidecars.settings.listSubtitle\": \"查看选择器中可用的基于端口的 SideCar。\",\n \"sidecars.settings.empty\": \"尚未配置 SideCar。\",\n \"sidecars.picker.title\": \"打开 SideCar\",\n \"sidecars.picker.loading\": \"正在加载 SideCar...\",\n \"sidecars.picker.subtitle\": \"选择一个可用的 SideCar,在新标签页中打开。\",\n \"sidecars.picker.empty\": \"目前没有可用的基于端口的 SideCar。\",\n \"sidecars.picker.close\": \"关闭\",\n \"sidecars.open.errorTitle\": \"无法打开 SideCar\",\n \"sidecars.open.notFound\": \"未找到 SideCar。\",\n \"sidecars.open.notRunning\": \"无法通过配置的端口访问 SideCar。\",\n \"sidecars.back\": \"返回\",\n \"sidecars.refresh\": \"刷新\",\n \"sidecars.path\": \"路径\",\n \"sidecars.go\": \"前往\",\n\n // Toast History Panel\n \"toastHistory.title\": \"通知历史\",\n \"toastHistory.empty\": \"暂无通知\",\n \"toastHistory.empty.filter\": \"没有符合此筛选条件的通知\",\n \"toastHistory.clearAll\": \"清除全部\",\n \"toastHistory.markAllRead\": \"全部已读\",\n \"toastHistory.filter.label\": \"筛选通知\",\n \"toastHistory.filter.all\": \"全部\",\n \"toastHistory.filter.info\": \"信息\",\n \"toastHistory.filter.success\": \"成功\",\n \"toastHistory.filter.warning\": \"警告\",\n \"toastHistory.filter.error\": \"错误\",\n \"toastHistory.today\": \"今天\",\n \"toastHistory.yesterday\": \"昨天\",\n \"toastHistory.earlier\": \"更早\",\n \"toastHistory.unread\": \"{count} 条未读\",\n \"toastHistory.viewSettings\": \"设置\",\n \"toastHistory.close\": \"关闭\",\n \"toastHistory.deleteItem\": \"删除通知\",\n\n // Info Section\n \"settings.section.info.title\": \"关于\",\n \"settings.section.info.subtitle\": \"查看版本、运行时,并收集诊断信息。\",\n \"settings.info.version.server\": \"服务器版本\",\n \"settings.info.version.ui\": \"UI 版本\",\n \"settings.info.version.uiSource\": \"UI 来源\",\n \"settings.info.runtime.type\": \"运行时\",\n \"settings.info.runtime.platform\": \"平台\",\n \"settings.info.runtime.os\": \"操作系统\",\n \"settings.info.server.url\": \"服务器 URL\",\n \"settings.info.server.root\": \"工作区根目录\",\n \"settings.info.updates.title\": \"更新\",\n \"settings.info.updates.subtitle\": \"检查 CodeNomad 的新版本。\",\n \"settings.info.updates.latest\": \"最新版本\",\n \"settings.info.updates.download\": \"下载更新\",\n \"settings.info.updates.refresh\": \"刷新\",\n \"settings.info.diagnostics.copyFailed\": \"剪贴板访问被拒绝。请改用下载按钮。\",\n \"settings.info.diagnostics.title\": \"诊断\",\n \"settings.info.diagnostics.subtitle\": \"收集系统和版本信息,用于错误报告。\",\n \"settings.info.diagnostics.copy\": \"复制到剪贴板\",\n \"settings.info.diagnostics.download\": \"下载 .txt\",\n \"settings.info.diagnostics.copied\": \"诊断信息已复制到剪贴板。\",\n} as const\n","export const timeMessages = {\n \"time.relative.justNow\": \"刚刚\",\n \"time.relative.daysAgoShort\": \"{count} 天前\",\n \"time.relative.hoursAgoShort\": \"{count} 小时前\",\n \"time.relative.minutesAgoShort\": \"{count} 分钟前\",\n} as const\n","export const toolCallMessages = {\n \"toolCall.pending.waitingToRun\": \"等待运行...\",\n \"toolCall.error.label\": \"错误:\",\n\n \"toolCall.header.copyTitle\": \"复制工具调用标题\",\n \"toolCall.header.copyAriaLabel\": \"复制工具调用标题\",\n \"toolCall.header.copyOutputTitle\": \"复制工具输出\",\n \"toolCall.header.copyOutputAriaLabel\": \"复制工具输出\",\n\n \"toolCall.header.showInputTitle\": \"显示工具参数\",\n \"toolCall.header.showInputAriaLabel\": \"显示工具参数\",\n \"toolCall.header.hideInputTitle\": \"隐藏工具参数\",\n \"toolCall.header.hideInputAriaLabel\": \"隐藏工具参数\",\n\n \"toolCall.io.input\": \"工具输入\",\n \"toolCall.io.output\": \"工具输出\",\n \"toolCall.io.copyInputTitle\": \"复制工具输入\",\n \"toolCall.io.copyInputAriaLabel\": \"复制工具输入\",\n \"toolCall.io.copyOutputTitle\": \"复制工具输出\",\n \"toolCall.io.copyOutputAriaLabel\": \"复制工具输出\",\n\n \"toolCall.diff.label\": \"差异\",\n \"toolCall.diff.label.withPath\": \"差异 · {path}\",\n \"toolCall.diff.viewMode.ariaLabel\": \"Diff 视图模式\",\n \"toolCall.diff.viewMode.split\": \"分栏\",\n \"toolCall.diff.viewMode.unified\": \"统一\",\n \"toolCall.diff.switchToSplit\": \"切换到分栏视图\",\n \"toolCall.diff.switchToUnified\": \"切换到统一视图\",\n \"toolCall.diff.enableWordWrap\": \"启用自动换行\",\n \"toolCall.diff.disableWordWrap\": \"禁用自动换行\",\n \"toolCall.diff.copyPatch\": \"复制补丁\",\n\n \"toolCall.diagnostics.title\": \"诊断\",\n \"toolCall.diagnostics.ariaLabel\": \"诊断\",\n \"toolCall.diagnostics.ariaLabel.withLabel\": \"诊断 {label}\",\n \"toolCall.diagnostics.severity.error.short\": \"ERR\",\n \"toolCall.diagnostics.severity.warning.short\": \"WARN\",\n \"toolCall.diagnostics.severity.info.short\": \"INFO\",\n\n \"toolCall.renderer.toolName.shell\": \"终端\",\n \"toolCall.renderer.toolName.fetch\": \"获取\",\n \"toolCall.renderer.toolName.invalid\": \"无效\",\n \"toolCall.renderer.toolName.plan\": \"计划\",\n \"toolCall.renderer.toolName.applyPatch\": \"应用补丁\",\n\n \"toolCall.renderer.action.working\": \"处理中...\",\n \"toolCall.renderer.action.writingCommand\": \"正在编写命令...\",\n \"toolCall.renderer.action.preparingEdit\": \"正在准备编辑...\",\n \"toolCall.renderer.action.readingFile\": \"正在读取文件...\",\n \"toolCall.renderer.action.preparingWrite\": \"正在准备写入...\",\n \"toolCall.renderer.action.preparingPatch\": \"正在准备补丁...\",\n \"toolCall.renderer.action.planning\": \"正在规划...\",\n \"toolCall.renderer.action.fetchingFromWeb\": \"正在从网络获取...\",\n \"toolCall.renderer.action.findingFiles\": \"正在查找文件...\",\n \"toolCall.renderer.action.searchingContent\": \"正在搜索内容...\",\n \"toolCall.renderer.action.listingDirectory\": \"正在列出目录...\",\n\n \"toolCall.renderer.bash.title.timeout\": \"超时:{timeout}\",\n \"toolCall.renderer.read.detail.offset\": \"偏移:{offset}\",\n \"toolCall.renderer.read.detail.limit\": \"限制:{limit}\",\n\n \"toolCall.renderer.todo.empty\": \"暂无已计划项目\",\n \"toolCall.renderer.todo.status.pending\": \"待处理\",\n \"toolCall.renderer.todo.status.inProgress\": \"进行中\",\n \"toolCall.renderer.todo.status.completed\": \"已完成\",\n \"toolCall.renderer.todo.status.cancelled\": \"已取消\",\n \"toolCall.renderer.todo.title.plan\": \"计划\",\n \"toolCall.renderer.todo.title.creating\": \"正在创建计划\",\n \"toolCall.renderer.todo.title.completing\": \"正在完成计划\",\n \"toolCall.renderer.todo.title.updating\": \"正在更新计划\",\n\n \"toolCall.permission.status.required\": \"需要权限\",\n \"toolCall.permission.status.queued\": \"权限已排队\",\n \"toolCall.permission.requestedDiff.label\": \"请求的 Diff\",\n \"toolCall.permission.requestedDiff.withPath\": \"请求的 Diff · {path}\",\n \"toolCall.permission.queuedText\": \"正在等待更早的权限响应。\",\n \"toolCall.permission.actions.allowOnce\": \"仅允许一次\",\n \"toolCall.permission.actions.alwaysAllow\": \"始终允许\",\n \"toolCall.permission.actions.deny\": \"拒绝\",\n \"toolCall.permission.shortcuts.allowOnce\": \"仅允许一次\",\n \"toolCall.permission.shortcuts.alwaysAllow\": \"始终允许\",\n \"toolCall.permission.rejectReason.placeholder\": \"拒绝时的可选反馈,例如使用更安全的命令...\",\n \"toolCall.permission.errors.unableToUpdate\": \"无法更新权限\",\n\n \"permissionApproval.title\": \"请求\",\n \"permissionApproval.empty\": \"暂无待处理请求。\",\n \"permissionApproval.kind.permission\": \"权限\",\n \"permissionApproval.kind.question\": \"问题\",\n \"permissionApproval.kind.form\": \"表单\",\n \"formRequest.selectPlaceholder\": \"选择一个选项\",\n \"formRequest.openExternal\": \"打开外部表单\",\n \"formRequest.cancel\": \"取消\",\n \"formRequest.submit\": \"提交\",\n \"formRequest.submitting\": \"正在提交...\",\n \"formRequest.errors.reply\": \"无法提交表单\",\n \"formRequest.errors.cancel\": \"无法取消表单\",\n \"formRequest.errors.validation\": \"请填写所有必填字段。\",\n \"formRequest.customValuesPlaceholder\": \"其他值,用逗号分隔\",\n \"permissionApproval.questionCount.one\": \"{count} 个问题\",\n \"permissionApproval.questionCount.other\": \"{count} 个问题\",\n \"permissionApproval.status.active\": \"活动\",\n \"permissionApproval.actions.closeAriaLabel\": \"关闭\",\n \"permissionApproval.actions.goToSession\": \"前往会话\",\n \"permissionApproval.actions.loadingSession\": \"正在加载…\",\n \"permissionApproval.actions.loadSession\": \"加载会话\",\n \"permissionApproval.actions.allowOnce\": \"仅允许一次\",\n \"permissionApproval.actions.alwaysAllow\": \"始终允许\",\n \"permissionApproval.actions.deny\": \"拒绝\",\n \"permissionApproval.rejectReason.placeholder\": \"拒绝时的可选反馈,例如使用更安全的命令...\",\n \"permissionApproval.fallbackHint\": \"加载会话以查看更多信息。\",\n \"permissionApproval.errors.unableToUpdatePermission\": \"无法更新权限\",\n\n \"toolCall.question.status.required\": \"需要回答问题\",\n \"toolCall.question.status.queued\": \"问题已排队\",\n \"toolCall.question.status.questions\": \"问题\",\n \"toolCall.question.action.awaitingAnswers\": \"等待回答...\",\n \"toolCall.question.title.questions\": \"问题\",\n \"toolCall.question.title.askingQuestions\": \"正在提问\",\n \"toolCall.question.type.one\": \"问题\",\n \"toolCall.question.type.other\": \"问题\",\n \"toolCall.question.number\": \"Q{number}:\",\n \"toolCall.question.multiple\": \"多个\",\n \"toolCall.question.custom.title\": \"输入自定义答案\",\n \"toolCall.question.custom.label\": \"自定义答案\",\n \"toolCall.question.custom.placeholder\": \"输入你的答案\",\n \"toolCall.question.actions.submit\": \"提交\",\n \"toolCall.question.actions.dismiss\": \"忽略\",\n \"toolCall.question.shortcuts.submit\": \"提交\",\n \"toolCall.question.shortcuts.dismiss\": \"忽略\",\n \"toolCall.question.queuedText\": \"正在等待更早的响应。\",\n \"toolCall.question.validation.answerAll\": \"请先回答所有问题再提交。\",\n \"toolCall.question.errors.unableToReply\": \"无法回复\",\n \"toolCall.question.errors.unableToDismiss\": \"无法忽略\",\n\n \"toolCall.task.action.delegating\": \"正在委派...\",\n \"toolCall.task.sections.prompt\": \"提示词\",\n \"toolCall.task.sections.steps\": \"步骤\",\n \"toolCall.task.sections.output\": \"输出\",\n \"toolCall.task.steps.count\": \"{count} 个步骤\",\n \"toolCall.task.meta.agentModel\": \"智能体:{agent} • 模型:{model}\",\n \"toolCall.task.meta.agent\": \"智能体:{agent}\",\n \"toolCall.task.meta.model\": \"模型:{model}\",\n\n \"toolCall.status.pending\": \"待处理\",\n \"toolCall.status.running\": \"运行中\",\n \"toolCall.status.completed\": \"已完成\",\n \"toolCall.status.error\": \"错误\",\n \"toolCall.status.unknown\": \"未知\",\n\n \"toolCall.applyPatch.action.preparing\": \"正在准备 apply_patch...\",\n \"toolCall.applyPatch.title.withFileCount.one\": \"{tool}({count} 个文件)\",\n \"toolCall.applyPatch.title.withFileCount.other\": \"{tool}({count} 个文件)\",\n \"toolCall.applyPatch.fileFallback\": \"文件 {number}\",\n} as const\n","import { advancedSettingsMessages } from \"./advancedSettings\"\nimport { appMessages } from \"./app\"\nimport { commandMessages } from \"./commands\"\nimport { dialogMessages } from \"./dialogs\"\nimport { filesystemMessages } from \"./filesystem\"\nimport { folderSelectionMessages } from \"./folderSelection\"\nimport { instanceMessages } from \"./instance\"\nimport { loadingScreenMessages } from \"./loadingScreen\"\nimport { logMessages } from \"./logs\"\nimport { markdownMessages } from \"./markdown\"\nimport { messagingMessages } from \"./messaging\"\nimport { remoteAccessMessages } from \"./remoteAccess\"\nimport { sessionMessages } from \"./session\"\nimport { settingsMessages } from \"./settings\"\nimport { timeMessages } from \"./time\"\nimport { toolCallMessages } from \"./toolCall\"\nimport { mergeMessageParts } from \"../merge\"\n\nexport const zhHansMessages = mergeMessageParts(\n folderSelectionMessages,\n advancedSettingsMessages,\n loadingScreenMessages,\n timeMessages,\n appMessages,\n dialogMessages,\n filesystemMessages,\n instanceMessages,\n logMessages,\n sessionMessages,\n messagingMessages,\n toolCallMessages,\n markdownMessages,\n settingsMessages,\n remoteAccessMessages,\n commandMessages,\n)\n"],"names":["advancedSettingsMessages","appMessages","commandMessages","dialogMessages","filesystemMessages","folderSelectionMessages","instanceMessages","loadingScreenMessages","logMessages","markdownMessages","messagingMessages","remoteAccessMessages","sessionMessages","settingsMessages","timeMessages","toolCallMessages","zhHansMessages","mergeMessageParts"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{t as g,b as P,l as b,i as A,r as v}from"./index-DDpJlsfl.js";import{V as M,e as N,t as _,d as w,i as n,m as H}from"./monaco-viewer-BB3_mBkA.js";import{k as E,e as S,n as T,o as U,S as I,a as R}from"./git-diff-vendor-ChbWBukG.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";const z="/assets/CodeNomad-Icon-bmTWNPXy.png";var B=_("<div class=loading-wrapper role=status aria-live=polite><img class=loading-logo width=180 height=180><div class=loading-heading><h1 class=loading-title>CodeNomad</h1></div><div class=loading-card><div class=loading-row><div class=spinner aria-hidden=true></div><span></span></div><div class=phrase-controls><button type=button>"),D=_("<p class=loading-status>"),F=_("<div class=loading-error>");const C=["loadingScreen.phrases.neurons","loadingScreen.phrases.daydreaming","loadingScreen.phrases.goggles","loadingScreen.phrases.reorganizingFiles","loadingScreen.phrases.coffee","loadingScreen.phrases.nodeModules","loadingScreen.phrases.actNatural","loadingScreen.phrases.rewritingHistory","loadingScreen.phrases.stretch","loadingScreen.phrases.keyboardControl"];function y(h){const o=C.filter(m=>m!==h),i=o.length>0?o:C,a=Math.floor(Math.random()*i.length);return i[a]}function G(){typeof document>"u"||(document.documentElement.dataset.runtimeHost=v.host,document.documentElement.dataset.runtimePlatform=v.platform)}function L(){const[h,o]=S(y()),[i,a]=S(null),[m,l]=S(null),K=()=>o(y(h()));return T(()=>{G(),o(y());const c=[];async function d(){try{const r=await b("cli:error",t=>{const e=(t==null?void 0:t.payload)||{};e.error&&(a(e.error),l("loadingScreen.status.issue"))}),p=await b("cli:status",t=>{const e=(t==null?void 0:t.payload)||{};if(e.state==="error"&&e.error){a(e.error),l("loadingScreen.status.issue");return}e.state&&e.state!=="ready"&&(a(null),l(null))});c.push(r,p);const s=await A("cli_get_status");(s==null?void 0:s.state)==="error"&&s.error&&(a(s.error),l("loadingScreen.status.issue"))}catch(r){a(String(r)),l("loadingScreen.status.issue")}}P()&&d(),U(()=>{c.forEach(r=>{try{r()}catch{}})})}),(()=>{var c=B(),d=c.firstChild,r=d.nextSibling;r.firstChild;var p=r.nextSibling,s=p.firstChild,t=s.firstChild,e=t.nextSibling,x=s.nextSibling,$=x.firstChild;return w(d,"src",z),n(r,E(I,{get when(){return m()},children:f=>(()=>{var u=D();return n(u,()=>g(f())),u})()}),null),n(e,()=>g(h())),$.$$click=K,n($,()=>g("loadingScreen.actions.showAnother")),n(p,(()=>{var f=H(()=>!!i());return()=>f()&&(()=>{var u=F();return n(u,i),u})()})(),null),R(()=>w(d,"alt",g("loadingScreen.logoAlt"))),c})()}const k=document.getElementById("loading-root");if(!k)throw new Error(g("loadingScreen.errors.missingRoot"));M(()=>E(L,{}),k);N(["click"]);
2
- //# sourceMappingURL=loading-D3uPMfMu.js.map
1
+ import{t as g,b as P,l as b,i as A,r as v}from"./index-BfORYhCR.js";import{V as M,e as N,t as _,d as w,i as n,m as H}from"./monaco-viewer-BB3_mBkA.js";import{k as E,e as S,n as T,o as U,S as I,a as R}from"./git-diff-vendor-ChbWBukG.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";const z="/assets/CodeNomad-Icon-bmTWNPXy.png";var B=_("<div class=loading-wrapper role=status aria-live=polite><img class=loading-logo width=180 height=180><div class=loading-heading><h1 class=loading-title>CodeNomad</h1></div><div class=loading-card><div class=loading-row><div class=spinner aria-hidden=true></div><span></span></div><div class=phrase-controls><button type=button>"),D=_("<p class=loading-status>"),F=_("<div class=loading-error>");const C=["loadingScreen.phrases.neurons","loadingScreen.phrases.daydreaming","loadingScreen.phrases.goggles","loadingScreen.phrases.reorganizingFiles","loadingScreen.phrases.coffee","loadingScreen.phrases.nodeModules","loadingScreen.phrases.actNatural","loadingScreen.phrases.rewritingHistory","loadingScreen.phrases.stretch","loadingScreen.phrases.keyboardControl"];function y(h){const o=C.filter(m=>m!==h),i=o.length>0?o:C,a=Math.floor(Math.random()*i.length);return i[a]}function G(){typeof document>"u"||(document.documentElement.dataset.runtimeHost=v.host,document.documentElement.dataset.runtimePlatform=v.platform)}function L(){const[h,o]=S(y()),[i,a]=S(null),[m,l]=S(null),K=()=>o(y(h()));return T(()=>{G(),o(y());const c=[];async function d(){try{const r=await b("cli:error",t=>{const e=(t==null?void 0:t.payload)||{};e.error&&(a(e.error),l("loadingScreen.status.issue"))}),p=await b("cli:status",t=>{const e=(t==null?void 0:t.payload)||{};if(e.state==="error"&&e.error){a(e.error),l("loadingScreen.status.issue");return}e.state&&e.state!=="ready"&&(a(null),l(null))});c.push(r,p);const s=await A("cli_get_status");(s==null?void 0:s.state)==="error"&&s.error&&(a(s.error),l("loadingScreen.status.issue"))}catch(r){a(String(r)),l("loadingScreen.status.issue")}}P()&&d(),U(()=>{c.forEach(r=>{try{r()}catch{}})})}),(()=>{var c=B(),d=c.firstChild,r=d.nextSibling;r.firstChild;var p=r.nextSibling,s=p.firstChild,t=s.firstChild,e=t.nextSibling,x=s.nextSibling,$=x.firstChild;return w(d,"src",z),n(r,E(I,{get when(){return m()},children:f=>(()=>{var u=D();return n(u,()=>g(f())),u})()}),null),n(e,()=>g(h())),$.$$click=K,n($,()=>g("loadingScreen.actions.showAnother")),n(p,(()=>{var f=H(()=>!!i());return()=>f()&&(()=>{var u=F();return n(u,i),u})()})(),null),R(()=>w(d,"alt",g("loadingScreen.logoAlt"))),c})()}const k=document.getElementById("loading-root");if(!k)throw new Error(g("loadingScreen.errors.missingRoot"));M(()=>E(L,{}),k);N(["click"]);
2
+ //# sourceMappingURL=loading-CLjF2dnt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loading-D3uPMfMu.js","sources":["../../../images/CodeNomad-Icon.png","../../loading/main.tsx"],"sourcesContent":["export default \"__VITE_ASSET__CffOZ5O3__\"","import { invoke } from \"@tauri-apps/api/core\"\nimport { listen } from \"@tauri-apps/api/event\"\nimport { Show, createSignal, onCleanup, onMount } from \"solid-js\"\nimport { render } from \"solid-js/web\"\nimport iconUrl from \"../../images/CodeNomad-Icon.png\"\nimport { tGlobal } from \"../../lib/i18n\"\nimport { runtimeEnv, isTauriHost } from \"../../lib/runtime-env\"\nimport \"../../index.css\"\nimport \"./loading.css\"\n\nconst phraseKeys = [\n \"loadingScreen.phrases.neurons\",\n \"loadingScreen.phrases.daydreaming\",\n \"loadingScreen.phrases.goggles\",\n \"loadingScreen.phrases.reorganizingFiles\",\n \"loadingScreen.phrases.coffee\",\n \"loadingScreen.phrases.nodeModules\",\n \"loadingScreen.phrases.actNatural\",\n \"loadingScreen.phrases.rewritingHistory\",\n \"loadingScreen.phrases.stretch\",\n \"loadingScreen.phrases.keyboardControl\",\n] as const\n\ntype PhraseKey = (typeof phraseKeys)[number]\n\ninterface CliStatus {\n state?: string\n error?: string | null\n}\n\nfunction pickPhraseKey(previous?: PhraseKey) {\n const filtered = phraseKeys.filter((key) => key !== previous)\n const source = filtered.length > 0 ? filtered : phraseKeys\n const index = Math.floor(Math.random() * source.length)\n return source[index]\n}\n\nfunction annotateDocument() {\n if (typeof document === \"undefined\") {\n return\n }\n document.documentElement.dataset.runtimeHost = runtimeEnv.host\n document.documentElement.dataset.runtimePlatform = runtimeEnv.platform\n}\n\nfunction LoadingApp() {\n const [phraseKey, setPhraseKey] = createSignal<PhraseKey>(pickPhraseKey())\n const [error, setError] = createSignal<string | null>(null)\n const [statusKey, setStatusKey] = createSignal<string | null>(null)\n\n const changePhrase = () => setPhraseKey(pickPhraseKey(phraseKey()))\n\n onMount(() => {\n annotateDocument()\n setPhraseKey(pickPhraseKey())\n const unsubscribers: Array<() => void> = []\n\n async function bootstrapTauri() {\n try {\n const errorUnlisten = await listen(\"cli:error\", (event) => {\n const payload = (event?.payload as CliStatus) || {}\n if (payload.error) {\n setError(payload.error)\n setStatusKey(\"loadingScreen.status.issue\")\n }\n })\n const statusUnlisten = await listen(\"cli:status\", (event) => {\n const payload = (event?.payload as CliStatus) || {}\n if (payload.state === \"error\" && payload.error) {\n setError(payload.error)\n setStatusKey(\"loadingScreen.status.issue\")\n return\n }\n if (payload.state && payload.state !== \"ready\") {\n setError(null)\n setStatusKey(null)\n }\n })\n unsubscribers.push(errorUnlisten, statusUnlisten)\n\n const result = await invoke<CliStatus>(\"cli_get_status\")\n if (result?.state === \"error\" && result.error) {\n setError(result.error)\n setStatusKey(\"loadingScreen.status.issue\")\n }\n } catch (err) {\n setError(String(err))\n setStatusKey(\"loadingScreen.status.issue\")\n }\n }\n\n if (isTauriHost()) {\n void bootstrapTauri()\n }\n\n onCleanup(() => {\n unsubscribers.forEach((unsubscribe) => {\n try {\n unsubscribe()\n } catch {\n /* noop */\n }\n })\n })\n })\n\n return (\n <div class=\"loading-wrapper\" role=\"status\" aria-live=\"polite\">\n <img src={iconUrl} alt={tGlobal(\"loadingScreen.logoAlt\")} class=\"loading-logo\" width=\"180\" height=\"180\" />\n <div class=\"loading-heading\">\n <h1 class=\"loading-title\">CodeNomad</h1>\n <Show when={statusKey()}>\n {(key) => <p class=\"loading-status\">{tGlobal(key())}</p>}\n </Show>\n </div>\n <div class=\"loading-card\">\n <div class=\"loading-row\">\n <div class=\"spinner\" aria-hidden=\"true\" />\n <span>{tGlobal(phraseKey())}</span>\n </div>\n <div class=\"phrase-controls\">\n <button type=\"button\" onClick={changePhrase}>\n {tGlobal(\"loadingScreen.actions.showAnother\")}\n </button>\n </div>\n {error() && <div class=\"loading-error\">{error()}</div>}\n </div>\n </div>\n )\n}\n\nconst root = document.getElementById(\"loading-root\")\n\nif (!root) {\n throw new Error(tGlobal(\"loadingScreen.errors.missingRoot\"))\n}\n\nrender(() => <LoadingApp />, root)\n"],"names":["iconUrl","phraseKeys","pickPhraseKey","previous","filtered","filter","key","source","length","index","Math","floor","random","annotateDocument","document","documentElement","dataset","runtimeHost","runtimeEnv","host","runtimePlatform","platform","LoadingApp","phraseKey","setPhraseKey","createSignal","error","setError","statusKey","setStatusKey","changePhrase","onMount","unsubscribers","bootstrapTauri","errorUnlisten","listen","event","payload","statusUnlisten","state","push","result","invoke","err","String","isTauriHost","onCleanup","forEach","unsubscribe","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$5","_el$6","_el$7","_el$8","_el$9","_el$0","_$setAttribute","_$insert","_$createComponent","Show","when","children","_el$1","_tmpl$2","tGlobal","$$click","_c$","_$memo","_el$10","_tmpl$3","_$effect","root","getElementById","Error","render","_$delegateEvents"],"mappings":"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"}
1
+ {"version":3,"file":"loading-CLjF2dnt.js","sources":["../../../images/CodeNomad-Icon.png","../../loading/main.tsx"],"sourcesContent":["export default \"__VITE_ASSET__CffOZ5O3__\"","import { invoke } from \"@tauri-apps/api/core\"\nimport { listen } from \"@tauri-apps/api/event\"\nimport { Show, createSignal, onCleanup, onMount } from \"solid-js\"\nimport { render } from \"solid-js/web\"\nimport iconUrl from \"../../images/CodeNomad-Icon.png\"\nimport { tGlobal } from \"../../lib/i18n\"\nimport { runtimeEnv, isTauriHost } from \"../../lib/runtime-env\"\nimport \"../../index.css\"\nimport \"./loading.css\"\n\nconst phraseKeys = [\n \"loadingScreen.phrases.neurons\",\n \"loadingScreen.phrases.daydreaming\",\n \"loadingScreen.phrases.goggles\",\n \"loadingScreen.phrases.reorganizingFiles\",\n \"loadingScreen.phrases.coffee\",\n \"loadingScreen.phrases.nodeModules\",\n \"loadingScreen.phrases.actNatural\",\n \"loadingScreen.phrases.rewritingHistory\",\n \"loadingScreen.phrases.stretch\",\n \"loadingScreen.phrases.keyboardControl\",\n] as const\n\ntype PhraseKey = (typeof phraseKeys)[number]\n\ninterface CliStatus {\n state?: string\n error?: string | null\n}\n\nfunction pickPhraseKey(previous?: PhraseKey) {\n const filtered = phraseKeys.filter((key) => key !== previous)\n const source = filtered.length > 0 ? filtered : phraseKeys\n const index = Math.floor(Math.random() * source.length)\n return source[index]\n}\n\nfunction annotateDocument() {\n if (typeof document === \"undefined\") {\n return\n }\n document.documentElement.dataset.runtimeHost = runtimeEnv.host\n document.documentElement.dataset.runtimePlatform = runtimeEnv.platform\n}\n\nfunction LoadingApp() {\n const [phraseKey, setPhraseKey] = createSignal<PhraseKey>(pickPhraseKey())\n const [error, setError] = createSignal<string | null>(null)\n const [statusKey, setStatusKey] = createSignal<string | null>(null)\n\n const changePhrase = () => setPhraseKey(pickPhraseKey(phraseKey()))\n\n onMount(() => {\n annotateDocument()\n setPhraseKey(pickPhraseKey())\n const unsubscribers: Array<() => void> = []\n\n async function bootstrapTauri() {\n try {\n const errorUnlisten = await listen(\"cli:error\", (event) => {\n const payload = (event?.payload as CliStatus) || {}\n if (payload.error) {\n setError(payload.error)\n setStatusKey(\"loadingScreen.status.issue\")\n }\n })\n const statusUnlisten = await listen(\"cli:status\", (event) => {\n const payload = (event?.payload as CliStatus) || {}\n if (payload.state === \"error\" && payload.error) {\n setError(payload.error)\n setStatusKey(\"loadingScreen.status.issue\")\n return\n }\n if (payload.state && payload.state !== \"ready\") {\n setError(null)\n setStatusKey(null)\n }\n })\n unsubscribers.push(errorUnlisten, statusUnlisten)\n\n const result = await invoke<CliStatus>(\"cli_get_status\")\n if (result?.state === \"error\" && result.error) {\n setError(result.error)\n setStatusKey(\"loadingScreen.status.issue\")\n }\n } catch (err) {\n setError(String(err))\n setStatusKey(\"loadingScreen.status.issue\")\n }\n }\n\n if (isTauriHost()) {\n void bootstrapTauri()\n }\n\n onCleanup(() => {\n unsubscribers.forEach((unsubscribe) => {\n try {\n unsubscribe()\n } catch {\n /* noop */\n }\n })\n })\n })\n\n return (\n <div class=\"loading-wrapper\" role=\"status\" aria-live=\"polite\">\n <img src={iconUrl} alt={tGlobal(\"loadingScreen.logoAlt\")} class=\"loading-logo\" width=\"180\" height=\"180\" />\n <div class=\"loading-heading\">\n <h1 class=\"loading-title\">CodeNomad</h1>\n <Show when={statusKey()}>\n {(key) => <p class=\"loading-status\">{tGlobal(key())}</p>}\n </Show>\n </div>\n <div class=\"loading-card\">\n <div class=\"loading-row\">\n <div class=\"spinner\" aria-hidden=\"true\" />\n <span>{tGlobal(phraseKey())}</span>\n </div>\n <div class=\"phrase-controls\">\n <button type=\"button\" onClick={changePhrase}>\n {tGlobal(\"loadingScreen.actions.showAnother\")}\n </button>\n </div>\n {error() && <div class=\"loading-error\">{error()}</div>}\n </div>\n </div>\n )\n}\n\nconst root = document.getElementById(\"loading-root\")\n\nif (!root) {\n throw new Error(tGlobal(\"loadingScreen.errors.missingRoot\"))\n}\n\nrender(() => <LoadingApp />, root)\n"],"names":["iconUrl","phraseKeys","pickPhraseKey","previous","filtered","filter","key","source","length","index","Math","floor","random","annotateDocument","document","documentElement","dataset","runtimeHost","runtimeEnv","host","runtimePlatform","platform","LoadingApp","phraseKey","setPhraseKey","createSignal","error","setError","statusKey","setStatusKey","changePhrase","onMount","unsubscribers","bootstrapTauri","errorUnlisten","listen","event","payload","statusUnlisten","state","push","result","invoke","err","String","isTauriHost","onCleanup","forEach","unsubscribe","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$5","_el$6","_el$7","_el$8","_el$9","_el$0","_$setAttribute","_$insert","_$createComponent","Show","when","children","_el$1","_tmpl$2","tGlobal","$$click","_c$","_$memo","_el$10","_tmpl$3","_$effect","root","getElementById","Error","render","_$delegateEvents"],"mappings":"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"}