wtagent 0.2.2 → 0.4.0
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.
- package/README.md +4 -4
- package/docs/technical-design.md +18 -11
- package/package.json +6 -6
- package/src/browser/base-web-adapter.js +2085 -202
- package/src/browser/cdp-browser.js +223 -25
- package/src/browser/cdp-state.js +8 -5
- package/src/browser/chatgpt-web-adapter.js +803 -218
- package/src/browser/claude-web-adapter.js +13 -0
- package/src/browser/deepseek-web-adapter.js +0 -106
- package/src/browser/fake-web-model-adapter.js +137 -3
- package/src/browser/gemini-web-adapter.js +10 -0
- package/src/browser/glm-web-adapter.js +4 -91
- package/src/browser/grok-web-adapter.js +145 -0
- package/src/browser/kimi-web-adapter.js +2 -74
- package/src/browser/provider-registry.js +8 -50
- package/src/cli/i18n.js +949 -0
- package/src/cli/main.js +217 -223
- package/src/cli/prompt-input.js +349 -151
- package/src/cli/render-events.js +45 -35
- package/src/cli/self-update.js +10 -3
- package/src/platform/command-launcher.js +1 -1
- package/src/platform/paths.js +19 -0
- package/src/platform/windows-diagnostics.js +9 -16
- package/src/policy/path-guard.js +5 -1
- package/src/runtime/agent-runtime.js +1065 -237
- package/src/session/agent-session.js +975 -120
- package/src/shared/limits.js +2 -9
- package/src/tools/default-tools.js +1 -1
- package/src/browser/mode-selection.js +0 -214
- package/src/cli/mode-choice.js +0 -25
package/src/cli/i18n.js
ADDED
|
@@ -0,0 +1,949 @@
|
|
|
1
|
+
const SUPPORTED_LOCALES = Object.freeze([
|
|
2
|
+
"en",
|
|
3
|
+
"zh-CN",
|
|
4
|
+
"zh-TW",
|
|
5
|
+
"ja",
|
|
6
|
+
"ko",
|
|
7
|
+
"es",
|
|
8
|
+
"fr",
|
|
9
|
+
"de",
|
|
10
|
+
"pt",
|
|
11
|
+
"ru",
|
|
12
|
+
]);
|
|
13
|
+
|
|
14
|
+
const MESSAGES = Object.freeze({
|
|
15
|
+
en: {
|
|
16
|
+
"app.description": "Turn your web AI session into a local tool-using agent.",
|
|
17
|
+
"option.home": "Application data directory",
|
|
18
|
+
"option.profileDir": "Dedicated Chrome profile directory",
|
|
19
|
+
"option.chromePath": "Chrome/Chromium executable",
|
|
20
|
+
"option.project": "Project directory",
|
|
21
|
+
"option.model": "Web AI provider: {providers} (default: {defaultProvider})",
|
|
22
|
+
"option.once": "Run a single request and exit instead of a conversation",
|
|
23
|
+
"option.timeout": "Maximum wait for one model response (default: 10 minutes)",
|
|
24
|
+
"option.noMinimize": "Keep the Chrome window visible instead of minimizing it",
|
|
25
|
+
"option.debug": "Write browser diagnostics",
|
|
26
|
+
"argument.task": "Initial request (optional; you can also type at the prompt)",
|
|
27
|
+
"command.update": "Install the latest WTAgent from npm.",
|
|
28
|
+
"command.doctor": "Check Node, Chrome, and local data directories.",
|
|
29
|
+
"command.login": "Open the dedicated Chrome profile and wait for provider login (use --model to pick a provider).",
|
|
30
|
+
"command.logout": "Delete the local Chrome profile to reset a provider session (use --model to pick a provider).",
|
|
31
|
+
"command.resume": "Continue an existing session or recover an interrupted run.",
|
|
32
|
+
"command.status": "List saved sessions or show one session as JSON.",
|
|
33
|
+
"command.export": "Export a saved session to a Codex or Claude Code session.",
|
|
34
|
+
"option.yes": "Skip the confirmation prompt",
|
|
35
|
+
"argument.sessionId": "Saved session ID",
|
|
36
|
+
"argument.instruction": "Optional follow-up instruction",
|
|
37
|
+
"option.format": "codex or claude-code",
|
|
38
|
+
"option.output": "Write to a file instead of stdout",
|
|
39
|
+
"login.openingProfile": "Opening native Chrome profile: {profileDir}",
|
|
40
|
+
"login.finishSignIn": "This window has no CDP flags. Finish until {provider} shows your signed-in home/chat history and no Log in button.",
|
|
41
|
+
"login.pressEnterVerify": "After the signed-in {provider} home is visible, press Enter here to save and verify",
|
|
42
|
+
"login.savingProfile": "Closing native Chrome and saving the dedicated profile...",
|
|
43
|
+
"login.verified": "{provider} login verified through a fresh CDP connection.",
|
|
44
|
+
"login.stillGuest": "{provider} is still in guest mode. Reopening native Chrome; complete the final {provider} sign-in/continue step.",
|
|
45
|
+
"model.chooseInBrowser": "{provider} is signed in. Choose the model you want to use in the browser if desired, then press Enter here. Press Enter immediately to keep the currently selected model.",
|
|
46
|
+
"model.setupCancelled": "Model selection confirmation cancelled.",
|
|
47
|
+
"logout.none": "No Chrome profile found at {profileDir}; already logged out.",
|
|
48
|
+
"logout.refuse": "Refusing to delete {profileDir}: it does not look like a wtagent Chrome profile.",
|
|
49
|
+
"logout.confirm": "This deletes the local {provider} session (Chrome profile at {profileDir}) and requires a new login. Continue?",
|
|
50
|
+
"logout.cancelled": "Logout cancelled.",
|
|
51
|
+
"logout.done": "Logged out. Removed {profileDir}.",
|
|
52
|
+
"logout.loginAgainDefault": "Run `wtagent login` to sign in again.",
|
|
53
|
+
"logout.loginAgainProvider": "Run `wtagent login --model {provider}` to sign in again.",
|
|
54
|
+
"approval.required": "Approval required for {tool}:",
|
|
55
|
+
"approval.how": "How should this action be handled?",
|
|
56
|
+
"approval.once": "Allow once",
|
|
57
|
+
"approval.alwaysTool": "Always allow {tool}",
|
|
58
|
+
"approval.alwaysAll": "Always allow everything",
|
|
59
|
+
"approval.deny": "Deny",
|
|
60
|
+
"approval.savedTool": "Saved for this session: {tool} will always be allowed ({file}).",
|
|
61
|
+
"approval.savedAll": "Saved for this session: every tool will always be allowed ({file}).",
|
|
62
|
+
"profileLock.how": "How should this be handled?",
|
|
63
|
+
"profileLock.kill": "Kill that session and continue",
|
|
64
|
+
"profileLock.retry": "I closed its Chrome window; retry",
|
|
65
|
+
"profileLock.quit": "Quit",
|
|
66
|
+
"profileLock.stopping": "Stopping pid={pid}...",
|
|
67
|
+
"session.forceQuit": "Force quitting.",
|
|
68
|
+
"session.savedAt": "Session saved at: {directory}",
|
|
69
|
+
"session.ctrlC": "Ctrl+C — cancelling. Press again to force quit.",
|
|
70
|
+
"session.cancelledHint": "Turn cancelled. Type a new message or quit.",
|
|
71
|
+
"session.recoveryHint": "Type /retry to recover the pending {provider} turn, or quit",
|
|
72
|
+
"session.processesRunning": "Managed processes still running:",
|
|
73
|
+
"session.resumeWith": "Resume this conversation with: wtagent resume {sessionId}",
|
|
74
|
+
"attachment.attaching": "Attaching: {files}",
|
|
75
|
+
"attachment.notAttached": "Not attached ({details})",
|
|
76
|
+
"update.prompt": "Update WTAgent from {currentVersion} to {latest} now?",
|
|
77
|
+
"task.prompt": "Task",
|
|
78
|
+
"task.required": "Please type a message.",
|
|
79
|
+
"task.youPrompt": "you ›",
|
|
80
|
+
"banner.controls": "Enter sends · Shift+Enter or Ctrl+J newline · ESC cancels processing · multiline paste · ↑/↓ history · \"exit\", Ctrl+C, or Ctrl+D quits",
|
|
81
|
+
"status.none": "No sessions found.",
|
|
82
|
+
"renderer.processing": "processing request",
|
|
83
|
+
"renderer.running": "running {tool}",
|
|
84
|
+
"renderer.chromeStarted": "Chrome started.",
|
|
85
|
+
"renderer.loginRequired": "Log in to {provider} in the opened Chrome window…",
|
|
86
|
+
"renderer.loginDetected": "{provider} login detected.",
|
|
87
|
+
"renderer.conversationReady": "Conversation ready.",
|
|
88
|
+
"renderer.noReply": "no reply from {provider}; asking it to continue ({retry}/{maxRetries})",
|
|
89
|
+
"renderer.generationFailed": "{provider} generation failed (server error); asking it to retry ({retry}/{maxRetries})",
|
|
90
|
+
"renderer.emptyResponse": "empty {provider} response; asking it to continue ({retry}/{maxRetries})",
|
|
91
|
+
"renderer.limitReached": "{provider} usage limit reached. Wait for the limit to reset or change plans.",
|
|
92
|
+
"renderer.plainAnswer": "The model answered without the XML protocol; showing the reply as the final answer.",
|
|
93
|
+
"renderer.reused": "reused prior result for {tool}",
|
|
94
|
+
"renderer.reusedUnknown": "reused (completion unknown) for {tool}",
|
|
95
|
+
"renderer.conflictingReuse": "conflicting reuse for {tool}",
|
|
96
|
+
"renderer.interrupted": "Run interrupted: {message}",
|
|
97
|
+
"renderer.recoveryOpen": "{message} The session and Chrome window remain open.",
|
|
98
|
+
"renderer.assistant": "assistant",
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
"zh-CN": {
|
|
102
|
+
"app.description": "将你的网页 AI 会话变成本地可调用工具的智能体。",
|
|
103
|
+
"option.home": "应用数据目录",
|
|
104
|
+
"option.profileDir": "专用 Chrome 配置目录",
|
|
105
|
+
"option.chromePath": "Chrome/Chromium 可执行文件",
|
|
106
|
+
"option.project": "项目目录",
|
|
107
|
+
"option.model": "网页 AI 提供商:{providers}(默认:{defaultProvider})",
|
|
108
|
+
"option.once": "只执行一次请求并退出,不进入连续对话",
|
|
109
|
+
"option.timeout": "单次模型响应最大等待时间(默认:10 分钟)",
|
|
110
|
+
"option.noMinimize": "保持 Chrome 窗口可见,不自动最小化",
|
|
111
|
+
"option.debug": "写入浏览器诊断信息",
|
|
112
|
+
"argument.task": "初始请求(可选,也可稍后在提示符中输入)",
|
|
113
|
+
"command.update": "从 npm 安装最新版本的 WTAgent。",
|
|
114
|
+
"command.doctor": "检查 Node、Chrome 和本地数据目录。",
|
|
115
|
+
"command.login": "打开专用 Chrome 配置并等待登录(使用 --model 选择提供商)。",
|
|
116
|
+
"command.logout": "删除本地 Chrome 配置以重置提供商会话(使用 --model 选择提供商)。",
|
|
117
|
+
"command.resume": "继续已有会话或恢复中断的运行。",
|
|
118
|
+
"command.status": "列出已保存会话,或以 JSON 查看指定会话。",
|
|
119
|
+
"command.export": "将已保存会话导出为 Codex 或 Claude Code 会话。",
|
|
120
|
+
"option.yes": "跳过确认提示",
|
|
121
|
+
"argument.sessionId": "已保存的会话 ID",
|
|
122
|
+
"argument.instruction": "可选的后续指令",
|
|
123
|
+
"option.format": "codex 或 claude-code",
|
|
124
|
+
"option.output": "写入文件,而不是输出到 stdout",
|
|
125
|
+
"login.openingProfile": "正在打开原生 Chrome 配置:{profileDir}",
|
|
126
|
+
"login.finishSignIn": "此窗口未启用 CDP 参数。请完成登录,直到 {provider} 显示已登录首页/聊天记录且没有“登录”按钮。",
|
|
127
|
+
"login.pressEnterVerify": "看到已登录的 {provider} 首页后,在此按 Enter 保存并验证",
|
|
128
|
+
"login.savingProfile": "正在关闭原生 Chrome 并保存专用配置...",
|
|
129
|
+
"login.verified": "已通过新的 CDP 连接验证 {provider} 登录状态。",
|
|
130
|
+
"login.stillGuest": "{provider} 仍处于访客模式。正在重新打开 Chrome;请完成最后的登录/继续步骤。",
|
|
131
|
+
"model.chooseInBrowser": "{provider} 已登录。如需切换模型,请直接在浏览器网页中人工选择;完成后在此按 Enter。若保持当前已选模型,直接按 Enter 即可。",
|
|
132
|
+
"model.setupCancelled": "模型选择确认已取消。",
|
|
133
|
+
"logout.none": "在 {profileDir} 未找到 Chrome 配置;当前已是登出状态。",
|
|
134
|
+
"logout.refuse": "拒绝删除 {profileDir}:它看起来不是 wtagent 的 Chrome 配置目录。",
|
|
135
|
+
"logout.confirm": "这会删除本地 {provider} 会话(Chrome 配置位于 {profileDir}),之后需要重新登录。继续吗?",
|
|
136
|
+
"logout.cancelled": "已取消登出。",
|
|
137
|
+
"logout.done": "已登出。已删除 {profileDir}。",
|
|
138
|
+
"logout.loginAgainDefault": "再次运行 `wtagent login` 即可登录。",
|
|
139
|
+
"logout.loginAgainProvider": "运行 `wtagent login --model {provider}` 即可再次登录。",
|
|
140
|
+
"approval.required": "{tool} 需要授权:",
|
|
141
|
+
"approval.how": "如何处理此操作?",
|
|
142
|
+
"approval.once": "仅允许这一次",
|
|
143
|
+
"approval.alwaysTool": "始终允许 {tool}",
|
|
144
|
+
"approval.alwaysAll": "始终允许所有操作",
|
|
145
|
+
"approval.deny": "拒绝",
|
|
146
|
+
"approval.savedTool": "已为本会话保存:以后始终允许 {tool}({file})。",
|
|
147
|
+
"approval.savedAll": "已为本会话保存:以后始终允许所有工具({file})。",
|
|
148
|
+
"profileLock.how": "如何处理?",
|
|
149
|
+
"profileLock.kill": "结束占用会话并继续",
|
|
150
|
+
"profileLock.retry": "我已关闭它的 Chrome 窗口;重试",
|
|
151
|
+
"profileLock.quit": "退出",
|
|
152
|
+
"profileLock.stopping": "正在停止 pid={pid}...",
|
|
153
|
+
"session.forceQuit": "强制退出。",
|
|
154
|
+
"session.savedAt": "会话已保存到:{directory}",
|
|
155
|
+
"session.ctrlC": "Ctrl+C — 正在取消。再次按下可强制退出。",
|
|
156
|
+
"session.cancelledHint": "本轮已取消。请输入新消息或退出。",
|
|
157
|
+
"session.recoveryHint": "输入 /retry 恢复待处理的 {provider} 回合,或退出",
|
|
158
|
+
"session.processesRunning": "仍在运行的托管进程:",
|
|
159
|
+
"session.resumeWith": "继续此对话:wtagent resume {sessionId}",
|
|
160
|
+
"attachment.attaching": "正在附加:{files}",
|
|
161
|
+
"attachment.notAttached": "未附加({details})",
|
|
162
|
+
"update.prompt": "现在将 WTAgent 从 {currentVersion} 更新到 {latest} 吗?",
|
|
163
|
+
"task.prompt": "任务",
|
|
164
|
+
"task.required": "请输入消息。",
|
|
165
|
+
"task.youPrompt": "你 ›",
|
|
166
|
+
"banner.controls": "Enter 发送 · Shift+Enter 或 Ctrl+J 换行 · ESC 取消处理中任务 · 支持多行粘贴 · ↑/↓ 历史 · 输入 \"exit\"、Ctrl+C 或 Ctrl+D 退出",
|
|
167
|
+
"status.none": "未找到会话。",
|
|
168
|
+
"renderer.processing": "正在处理请求",
|
|
169
|
+
"renderer.running": "正在运行 {tool}",
|
|
170
|
+
"renderer.chromeStarted": "Chrome 已启动。",
|
|
171
|
+
"renderer.loginRequired": "请在打开的 Chrome 窗口中登录 {provider}…",
|
|
172
|
+
"renderer.loginDetected": "已检测到 {provider} 登录。",
|
|
173
|
+
"renderer.conversationReady": "对话已就绪。",
|
|
174
|
+
"renderer.noReply": "{provider} 没有响应;正在请求继续({retry}/{maxRetries})",
|
|
175
|
+
"renderer.generationFailed": "{provider} 生成失败(服务器错误);正在请求重试({retry}/{maxRetries})",
|
|
176
|
+
"renderer.emptyResponse": "{provider} 返回空响应;正在请求继续({retry}/{maxRetries})",
|
|
177
|
+
"renderer.limitReached": "{provider} 已达到使用限制。请等待额度恢复或更换方案。",
|
|
178
|
+
"renderer.plainAnswer": "模型未使用 XML 协议回答;将其回复作为最终答案显示。",
|
|
179
|
+
"renderer.reused": "复用 {tool} 的先前结果",
|
|
180
|
+
"renderer.reusedUnknown": "复用 {tool} 的结果(完成状态未知)",
|
|
181
|
+
"renderer.conflictingReuse": "{tool} 的结果复用发生冲突",
|
|
182
|
+
"renderer.interrupted": "运行已中断:{message}",
|
|
183
|
+
"renderer.recoveryOpen": "{message} 会话和 Chrome 窗口仍保持打开。",
|
|
184
|
+
"renderer.assistant": "assistant",
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
"zh-TW": {
|
|
188
|
+
"app.description": "將你的網頁 AI 會話變成本機可呼叫工具的代理程式。",
|
|
189
|
+
"option.home": "應用程式資料目錄",
|
|
190
|
+
"option.profileDir": "專用 Chrome 設定檔目錄",
|
|
191
|
+
"option.chromePath": "Chrome/Chromium 執行檔",
|
|
192
|
+
"option.project": "專案目錄",
|
|
193
|
+
"option.model": "網頁 AI 提供者:{providers}(預設:{defaultProvider})",
|
|
194
|
+
"option.once": "只執行一次請求並退出,不進入連續對話",
|
|
195
|
+
"option.timeout": "單次模型回應最大等待時間(預設:10 分鐘)",
|
|
196
|
+
"option.noMinimize": "保持 Chrome 視窗可見,不自動最小化",
|
|
197
|
+
"option.debug": "寫入瀏覽器診斷資訊",
|
|
198
|
+
"argument.task": "初始請求(可選,也可稍後在提示符中輸入)",
|
|
199
|
+
"command.update": "從 npm 安裝最新版 WTAgent。",
|
|
200
|
+
"command.doctor": "檢查 Node、Chrome 與本機資料目錄。",
|
|
201
|
+
"command.login": "開啟專用 Chrome 設定檔並等待登入(使用 --model 選擇提供者)。",
|
|
202
|
+
"command.logout": "刪除本機 Chrome 設定檔以重設提供者工作階段(使用 --model 選擇提供者)。",
|
|
203
|
+
"command.resume": "繼續既有工作階段或恢復中斷的執行。",
|
|
204
|
+
"command.status": "列出已儲存工作階段,或以 JSON 查看指定工作階段。",
|
|
205
|
+
"command.export": "將已儲存工作階段匯出為 Codex 或 Claude Code 工作階段。",
|
|
206
|
+
"login.openingProfile": "正在開啟原生 Chrome 設定檔:{profileDir}",
|
|
207
|
+
"login.finishSignIn": "此視窗未啟用 CDP 參數。請完成登入,直到 {provider} 顯示已登入首頁/聊天記錄且沒有「登入」按鈕。",
|
|
208
|
+
"login.pressEnterVerify": "看到已登入的 {provider} 首頁後,在此按 Enter 儲存並驗證",
|
|
209
|
+
"login.savingProfile": "正在關閉原生 Chrome 並儲存專用設定檔...",
|
|
210
|
+
"login.verified": "已透過新的 CDP 連線驗證 {provider} 登入狀態。",
|
|
211
|
+
"login.stillGuest": "{provider} 仍處於訪客模式。正在重新開啟 Chrome;請完成最後的登入/繼續步驟。",
|
|
212
|
+
"model.chooseInBrowser": "{provider} 已登入。如需切換模型,請直接在瀏覽器頁面中自行選擇;完成後在此按 Enter。若保持目前已選模型,直接按 Enter 即可。",
|
|
213
|
+
"model.setupCancelled": "模型選擇確認已取消。",
|
|
214
|
+
"task.youPrompt": "你 ›",
|
|
215
|
+
"option.yes": "略過確認提示",
|
|
216
|
+
"argument.sessionId": "已儲存的工作階段 ID",
|
|
217
|
+
"argument.instruction": "可選的後續指令",
|
|
218
|
+
"option.format": "codex 或 claude-code",
|
|
219
|
+
"option.output": "寫入檔案,而不是輸出到 stdout",
|
|
220
|
+
"logout.none": "在 {profileDir} 找不到 Chrome 設定檔;目前已是登出狀態。",
|
|
221
|
+
"logout.refuse": "拒絕刪除 {profileDir}:它看起來不是 wtagent 的 Chrome 設定檔目錄。",
|
|
222
|
+
"logout.confirm": "這會刪除本機 {provider} 工作階段(Chrome 設定檔位於 {profileDir}),之後需要重新登入。繼續嗎?",
|
|
223
|
+
"logout.cancelled": "已取消登出。",
|
|
224
|
+
"logout.done": "已登出。已刪除 {profileDir}。",
|
|
225
|
+
"logout.loginAgainDefault": "再次執行 `wtagent login` 即可登入。",
|
|
226
|
+
"logout.loginAgainProvider": "執行 `wtagent login --model {provider}` 即可再次登入。",
|
|
227
|
+
"approval.required": "{tool} 需要授權:",
|
|
228
|
+
"approval.how": "如何處理此操作?",
|
|
229
|
+
"approval.once": "僅允許這一次",
|
|
230
|
+
"approval.alwaysTool": "永遠允許 {tool}",
|
|
231
|
+
"approval.alwaysAll": "永遠允許所有操作",
|
|
232
|
+
"approval.deny": "拒絕",
|
|
233
|
+
"approval.savedTool": "已為本工作階段儲存:之後永遠允許 {tool}({file})。",
|
|
234
|
+
"approval.savedAll": "已為本工作階段儲存:之後永遠允許所有工具({file})。",
|
|
235
|
+
"profileLock.how": "如何處理?",
|
|
236
|
+
"profileLock.kill": "結束占用工作階段並繼續",
|
|
237
|
+
"profileLock.retry": "我已關閉它的 Chrome 視窗;重試",
|
|
238
|
+
"profileLock.quit": "退出",
|
|
239
|
+
"profileLock.stopping": "正在停止 pid={pid}...",
|
|
240
|
+
"session.forceQuit": "強制退出。",
|
|
241
|
+
"session.savedAt": "工作階段已儲存到:{directory}",
|
|
242
|
+
"session.ctrlC": "Ctrl+C — 正在取消。再次按下可強制退出。",
|
|
243
|
+
"session.cancelledHint": "本輪已取消。請輸入新訊息或退出。",
|
|
244
|
+
"session.recoveryHint": "輸入 /retry 恢復待處理的 {provider} 回合,或退出",
|
|
245
|
+
"session.processesRunning": "仍在執行的受管程序:",
|
|
246
|
+
"session.resumeWith": "繼續此對話:wtagent resume {sessionId}",
|
|
247
|
+
"attachment.attaching": "正在附加:{files}",
|
|
248
|
+
"attachment.notAttached": "未附加({details})",
|
|
249
|
+
"update.prompt": "現在將 WTAgent 從 {currentVersion} 更新到 {latest} 嗎?",
|
|
250
|
+
"task.prompt": "任務",
|
|
251
|
+
"task.required": "請輸入訊息。",
|
|
252
|
+
"banner.controls": "Enter 傳送 · Shift+Enter 或 Ctrl+J 換行 · ESC 取消處理中任務 · 支援多行貼上 · ↑/↓ 歷史 · 輸入 \"exit\"、Ctrl+C 或 Ctrl+D 退出",
|
|
253
|
+
"status.none": "找不到工作階段。",
|
|
254
|
+
"renderer.noReply": "{provider} 沒有回應;正在要求繼續({retry}/{maxRetries})",
|
|
255
|
+
"renderer.generationFailed": "{provider} 產生失敗(伺服器錯誤);正在要求重試({retry}/{maxRetries})",
|
|
256
|
+
"renderer.emptyResponse": "{provider} 回傳空回應;正在要求繼續({retry}/{maxRetries})",
|
|
257
|
+
"renderer.plainAnswer": "模型未使用 XML 協定回答;將其回覆作為最終答案顯示。",
|
|
258
|
+
"renderer.reused": "重用 {tool} 的先前結果",
|
|
259
|
+
"renderer.reusedUnknown": "重用 {tool} 的結果(完成狀態未知)",
|
|
260
|
+
"renderer.conflictingReuse": "{tool} 的結果重用發生衝突",
|
|
261
|
+
"renderer.interrupted": "執行已中斷:{message}",
|
|
262
|
+
"renderer.recoveryOpen": "{message} 工作階段與 Chrome 視窗仍保持開啟。",
|
|
263
|
+
"renderer.processing": "正在處理請求",
|
|
264
|
+
"renderer.running": "正在執行 {tool}",
|
|
265
|
+
"renderer.chromeStarted": "Chrome 已啟動。",
|
|
266
|
+
"renderer.loginRequired": "請在開啟的 Chrome 視窗中登入 {provider}…",
|
|
267
|
+
"renderer.loginDetected": "已偵測到 {provider} 登入。",
|
|
268
|
+
"renderer.conversationReady": "對話已就緒。",
|
|
269
|
+
"renderer.limitReached": "{provider} 已達使用限制。請等待額度恢復或更換方案。",
|
|
270
|
+
"renderer.assistant": "assistant",
|
|
271
|
+
},
|
|
272
|
+
|
|
273
|
+
ja: {
|
|
274
|
+
"app.description": "Web AI セッションをローカルツールを使えるエージェントにします。",
|
|
275
|
+
"option.home": "アプリケーションデータディレクトリ",
|
|
276
|
+
"option.profileDir": "専用 Chrome プロファイルディレクトリ",
|
|
277
|
+
"option.chromePath": "Chrome/Chromium 実行ファイル",
|
|
278
|
+
"option.project": "プロジェクトディレクトリ",
|
|
279
|
+
"option.model": "Web AI プロバイダー: {providers}(既定: {defaultProvider})",
|
|
280
|
+
"option.once": "会話を継続せず、1 回のリクエストを実行して終了",
|
|
281
|
+
"option.timeout": "1 回のモデル応答の最大待機時間(既定: 10 分)",
|
|
282
|
+
"option.noMinimize": "Chrome ウィンドウを最小化せず表示したままにする",
|
|
283
|
+
"option.debug": "ブラウザー診断を書き出す",
|
|
284
|
+
"argument.task": "最初の依頼(省略可。後からプロンプトに入力できます)",
|
|
285
|
+
"command.update": "npm から最新の WTAgent をインストールします。",
|
|
286
|
+
"command.doctor": "Node、Chrome、ローカルデータディレクトリを確認します。",
|
|
287
|
+
"command.login": "専用 Chrome プロファイルを開き、プロバイダーへのログインを待ちます(--model で選択)。",
|
|
288
|
+
"command.logout": "ローカル Chrome プロファイルを削除してプロバイダーのセッションをリセットします。",
|
|
289
|
+
"command.resume": "既存セッションを続行、または中断した実行を復旧します。",
|
|
290
|
+
"command.status": "保存済みセッションを一覧表示、または 1 件を JSON で表示します。",
|
|
291
|
+
"command.export": "保存済みセッションを Codex または Claude Code セッションにエクスポートします。",
|
|
292
|
+
"login.openingProfile": "ネイティブ Chrome プロファイルを開いています: {profileDir}",
|
|
293
|
+
"login.finishSignIn": "このウィンドウでは CDP フラグを使用していません。{provider} にログイン済みのホーム/チャット履歴が表示され、ログインボタンが消えるまでサインインを完了してください。",
|
|
294
|
+
"login.pressEnterVerify": "{provider} のログイン済みホームが表示されたら、ここで Enter を押して保存・確認します",
|
|
295
|
+
"login.savingProfile": "ネイティブ Chrome を閉じ、専用プロファイルを保存しています...",
|
|
296
|
+
"login.verified": "新しい CDP 接続で {provider} のログインを確認しました。",
|
|
297
|
+
"login.stillGuest": "{provider} はまだゲスト状態です。Chrome を再度開きますので、最後のサインイン/続行手順を完了してください。",
|
|
298
|
+
"model.chooseInBrowser": "{provider} にログイン済みです。必要ならブラウザー上で使用するモデルを手動で選択し、ここで Enter を押してください。現在のモデルを使う場合は、そのまま Enter を押します。",
|
|
299
|
+
"model.setupCancelled": "モデル選択の確認をキャンセルしました。",
|
|
300
|
+
"task.youPrompt": "あなた ›",
|
|
301
|
+
"option.yes": "確認プロンプトを省略",
|
|
302
|
+
"argument.sessionId": "保存済みセッション ID",
|
|
303
|
+
"argument.instruction": "省略可能な追加指示",
|
|
304
|
+
"option.format": "codex または claude-code",
|
|
305
|
+
"option.output": "stdout ではなくファイルへ書き出す",
|
|
306
|
+
"logout.none": "{profileDir} に Chrome プロファイルがありません。すでにログアウト済みです。",
|
|
307
|
+
"logout.refuse": "{profileDir} の削除を拒否しました。wtagent の Chrome プロファイルには見えません。",
|
|
308
|
+
"logout.confirm": "ローカルの {provider} セッション(Chrome プロファイル: {profileDir})を削除し、再ログインが必要になります。続行しますか?",
|
|
309
|
+
"logout.cancelled": "ログアウトをキャンセルしました。",
|
|
310
|
+
"logout.done": "ログアウトしました。{profileDir} を削除しました。",
|
|
311
|
+
"logout.loginAgainDefault": "再度ログインするには `wtagent login` を実行してください。",
|
|
312
|
+
"logout.loginAgainProvider": "再度ログインするには `wtagent login --model {provider}` を実行してください。",
|
|
313
|
+
"approval.required": "{tool} には承認が必要です:",
|
|
314
|
+
"approval.how": "この操作をどう処理しますか?",
|
|
315
|
+
"approval.once": "今回のみ許可",
|
|
316
|
+
"approval.alwaysTool": "{tool} を常に許可",
|
|
317
|
+
"approval.alwaysAll": "すべてを常に許可",
|
|
318
|
+
"approval.deny": "拒否",
|
|
319
|
+
"approval.savedTool": "このセッションに保存しました: {tool} は常に許可されます({file})。",
|
|
320
|
+
"approval.savedAll": "このセッションに保存しました: すべてのツールが常に許可されます({file})。",
|
|
321
|
+
"profileLock.how": "どう処理しますか?",
|
|
322
|
+
"profileLock.kill": "そのセッションを終了して続行",
|
|
323
|
+
"profileLock.retry": "Chrome ウィンドウを閉じたので再試行",
|
|
324
|
+
"profileLock.quit": "終了",
|
|
325
|
+
"profileLock.stopping": "pid={pid} を停止しています...",
|
|
326
|
+
"session.forceQuit": "強制終了します。",
|
|
327
|
+
"session.savedAt": "セッション保存先: {directory}",
|
|
328
|
+
"session.ctrlC": "Ctrl+C — キャンセル中です。もう一度押すと強制終了します。",
|
|
329
|
+
"session.cancelledHint": "このターンはキャンセルされました。新しいメッセージを入力するか終了してください。",
|
|
330
|
+
"session.recoveryHint": "/retry で保留中の {provider} ターンを復旧するか、終了してください",
|
|
331
|
+
"session.processesRunning": "管理対象プロセスが実行中です:",
|
|
332
|
+
"session.resumeWith": "この会話を再開: wtagent resume {sessionId}",
|
|
333
|
+
"attachment.attaching": "添付中: {files}",
|
|
334
|
+
"attachment.notAttached": "添付できませんでした({details})",
|
|
335
|
+
"update.prompt": "WTAgent を {currentVersion} から {latest} に更新しますか?",
|
|
336
|
+
"task.prompt": "タスク",
|
|
337
|
+
"task.required": "メッセージを入力してください。",
|
|
338
|
+
"banner.controls": "Enter 送信 · Shift+Enter または Ctrl+J で改行 · ESC で処理をキャンセル · 複数行貼り付け · ↑/↓ 履歴 · \"exit\"、Ctrl+C、Ctrl+D で終了",
|
|
339
|
+
"status.none": "セッションが見つかりません。",
|
|
340
|
+
"renderer.noReply": "{provider} から応答がありません。続行を要求しています({retry}/{maxRetries})",
|
|
341
|
+
"renderer.generationFailed": "{provider} の生成に失敗しました(サーバーエラー)。再試行を要求しています({retry}/{maxRetries})",
|
|
342
|
+
"renderer.emptyResponse": "{provider} が空の応答を返しました。続行を要求しています({retry}/{maxRetries})",
|
|
343
|
+
"renderer.plainAnswer": "モデルが XML プロトコルを使わずに回答したため、その返信を最終回答として表示します。",
|
|
344
|
+
"renderer.reused": "{tool} の以前の結果を再利用",
|
|
345
|
+
"renderer.reusedUnknown": "{tool} の結果を再利用(完了状態は不明)",
|
|
346
|
+
"renderer.conflictingReuse": "{tool} の結果再利用が競合しました",
|
|
347
|
+
"renderer.interrupted": "実行が中断されました: {message}",
|
|
348
|
+
"renderer.recoveryOpen": "{message} セッションと Chrome ウィンドウは開いたままです。",
|
|
349
|
+
"renderer.processing": "リクエストを処理中",
|
|
350
|
+
"renderer.running": "{tool} を実行中",
|
|
351
|
+
"renderer.chromeStarted": "Chrome を起動しました。",
|
|
352
|
+
"renderer.loginRequired": "開いた Chrome ウィンドウで {provider} にログインしてください…",
|
|
353
|
+
"renderer.loginDetected": "{provider} のログインを検出しました。",
|
|
354
|
+
"renderer.conversationReady": "会話の準備ができました。",
|
|
355
|
+
"renderer.limitReached": "{provider} の利用上限に達しました。上限のリセットを待つか、プランを変更してください。",
|
|
356
|
+
"renderer.assistant": "assistant",
|
|
357
|
+
},
|
|
358
|
+
|
|
359
|
+
ko: {
|
|
360
|
+
"app.description": "웹 AI 세션을 로컬 도구를 사용할 수 있는 에이전트로 전환합니다.",
|
|
361
|
+
"option.home": "애플리케이션 데이터 디렉터리",
|
|
362
|
+
"option.profileDir": "전용 Chrome 프로필 디렉터리",
|
|
363
|
+
"option.chromePath": "Chrome/Chromium 실행 파일",
|
|
364
|
+
"option.project": "프로젝트 디렉터리",
|
|
365
|
+
"option.model": "웹 AI 제공자: {providers} (기본값: {defaultProvider})",
|
|
366
|
+
"option.once": "대화를 계속하지 않고 요청 한 번만 실행한 뒤 종료",
|
|
367
|
+
"option.timeout": "모델 응답 1회의 최대 대기 시간 (기본값: 10분)",
|
|
368
|
+
"option.noMinimize": "Chrome 창을 최소화하지 않고 표시",
|
|
369
|
+
"option.debug": "브라우저 진단 정보 기록",
|
|
370
|
+
"argument.task": "초기 요청 (선택 사항, 나중에 프롬프트에서 입력 가능)",
|
|
371
|
+
"command.update": "npm에서 최신 WTAgent를 설치합니다.",
|
|
372
|
+
"command.doctor": "Node, Chrome 및 로컬 데이터 디렉터리를 확인합니다.",
|
|
373
|
+
"command.login": "전용 Chrome 프로필을 열고 제공자 로그인을 기다립니다 (--model로 선택).",
|
|
374
|
+
"command.logout": "로컬 Chrome 프로필을 삭제해 제공자 세션을 초기화합니다.",
|
|
375
|
+
"command.resume": "기존 세션을 계속하거나 중단된 실행을 복구합니다.",
|
|
376
|
+
"command.status": "저장된 세션을 나열하거나 하나를 JSON으로 표시합니다.",
|
|
377
|
+
"command.export": "저장된 세션을 Codex 또는 Claude Code 세션으로 내보냅니다.",
|
|
378
|
+
"login.openingProfile": "네이티브 Chrome 프로필 여는 중: {profileDir}",
|
|
379
|
+
"login.finishSignIn": "이 창에는 CDP 플래그가 없습니다. {provider}에 로그인된 홈/채팅 기록이 보이고 로그인 버튼이 사라질 때까지 로그인을 완료하세요.",
|
|
380
|
+
"login.pressEnterVerify": "{provider} 로그인 홈이 보이면 여기서 Enter를 눌러 저장하고 확인하세요",
|
|
381
|
+
"login.savingProfile": "네이티브 Chrome을 닫고 전용 프로필을 저장하는 중...",
|
|
382
|
+
"login.verified": "새 CDP 연결을 통해 {provider} 로그인을 확인했습니다.",
|
|
383
|
+
"login.stillGuest": "{provider}가 아직 게스트 모드입니다. Chrome을 다시 열고 마지막 로그인/계속 단계를 완료하세요.",
|
|
384
|
+
"model.chooseInBrowser": "{provider}에 로그인되었습니다. 원하는 경우 브라우저에서 사용할 모델을 직접 선택한 뒤 여기서 Enter를 누르세요. 현재 선택된 모델을 유지하려면 바로 Enter를 누르면 됩니다.",
|
|
385
|
+
"model.setupCancelled": "모델 선택 확인이 취소되었습니다.",
|
|
386
|
+
"task.youPrompt": "나 ›",
|
|
387
|
+
"option.yes": "확인 프롬프트 건너뛰기",
|
|
388
|
+
"argument.sessionId": "저장된 세션 ID",
|
|
389
|
+
"argument.instruction": "선택적 후속 지시",
|
|
390
|
+
"option.format": "codex 또는 claude-code",
|
|
391
|
+
"option.output": "stdout 대신 파일에 쓰기",
|
|
392
|
+
"logout.none": "{profileDir}에 Chrome 프로필이 없습니다. 이미 로그아웃된 상태입니다.",
|
|
393
|
+
"logout.refuse": "{profileDir} 삭제를 거부했습니다. wtagent Chrome 프로필로 보이지 않습니다.",
|
|
394
|
+
"logout.confirm": "로컬 {provider} 세션(Chrome 프로필: {profileDir})을 삭제하며 다시 로그인해야 합니다. 계속할까요?",
|
|
395
|
+
"logout.cancelled": "로그아웃을 취소했습니다.",
|
|
396
|
+
"logout.done": "로그아웃했습니다. {profileDir}을 삭제했습니다.",
|
|
397
|
+
"logout.loginAgainDefault": "다시 로그인하려면 `wtagent login`을 실행하세요.",
|
|
398
|
+
"logout.loginAgainProvider": "다시 로그인하려면 `wtagent login --model {provider}`를 실행하세요.",
|
|
399
|
+
"approval.required": "{tool} 승인 필요:",
|
|
400
|
+
"approval.how": "이 작업을 어떻게 처리할까요?",
|
|
401
|
+
"approval.once": "한 번만 허용",
|
|
402
|
+
"approval.alwaysTool": "{tool} 항상 허용",
|
|
403
|
+
"approval.alwaysAll": "모든 작업 항상 허용",
|
|
404
|
+
"approval.deny": "거부",
|
|
405
|
+
"approval.savedTool": "이 세션에 저장됨: {tool}은 항상 허용됩니다({file}).",
|
|
406
|
+
"approval.savedAll": "이 세션에 저장됨: 모든 도구가 항상 허용됩니다({file}).",
|
|
407
|
+
"profileLock.how": "어떻게 처리할까요?",
|
|
408
|
+
"profileLock.kill": "해당 세션을 종료하고 계속",
|
|
409
|
+
"profileLock.retry": "Chrome 창을 닫았으니 다시 시도",
|
|
410
|
+
"profileLock.quit": "종료",
|
|
411
|
+
"profileLock.stopping": "pid={pid} 중지 중...",
|
|
412
|
+
"session.forceQuit": "강제 종료합니다.",
|
|
413
|
+
"session.savedAt": "세션 저장 위치: {directory}",
|
|
414
|
+
"session.ctrlC": "Ctrl+C — 취소 중입니다. 다시 누르면 강제 종료합니다.",
|
|
415
|
+
"session.cancelledHint": "이번 턴이 취소되었습니다. 새 메시지를 입력하거나 종료하세요.",
|
|
416
|
+
"session.recoveryHint": "/retry로 보류 중인 {provider} 턴을 복구하거나 종료하세요",
|
|
417
|
+
"session.processesRunning": "관리 중인 프로세스가 실행 중입니다:",
|
|
418
|
+
"session.resumeWith": "이 대화 재개: wtagent resume {sessionId}",
|
|
419
|
+
"attachment.attaching": "첨부 중: {files}",
|
|
420
|
+
"attachment.notAttached": "첨부하지 못함({details})",
|
|
421
|
+
"update.prompt": "WTAgent를 {currentVersion}에서 {latest}(으)로 업데이트할까요?",
|
|
422
|
+
"task.prompt": "작업",
|
|
423
|
+
"task.required": "메시지를 입력하세요.",
|
|
424
|
+
"banner.controls": "Enter 전송 · Shift+Enter 또는 Ctrl+J 줄바꿈 · ESC 처리 취소 · 여러 줄 붙여넣기 · ↑/↓ 기록 · \"exit\", Ctrl+C 또는 Ctrl+D 종료",
|
|
425
|
+
"status.none": "세션을 찾을 수 없습니다.",
|
|
426
|
+
"renderer.noReply": "{provider}가 응답하지 않았습니다. 계속하도록 요청 중입니다({retry}/{maxRetries})",
|
|
427
|
+
"renderer.generationFailed": "{provider} 생성 실패(서버 오류). 재시도 요청 중입니다({retry}/{maxRetries})",
|
|
428
|
+
"renderer.emptyResponse": "{provider}가 빈 응답을 반환했습니다. 계속하도록 요청 중입니다({retry}/{maxRetries})",
|
|
429
|
+
"renderer.plainAnswer": "모델이 XML 프로토콜 없이 답변했으므로 해당 응답을 최종 답변으로 표시합니다.",
|
|
430
|
+
"renderer.reused": "{tool}의 이전 결과 재사용",
|
|
431
|
+
"renderer.reusedUnknown": "{tool} 결과 재사용(완료 상태 알 수 없음)",
|
|
432
|
+
"renderer.conflictingReuse": "{tool} 결과 재사용 충돌",
|
|
433
|
+
"renderer.interrupted": "실행 중단됨: {message}",
|
|
434
|
+
"renderer.recoveryOpen": "{message} 세션과 Chrome 창은 계속 열려 있습니다.",
|
|
435
|
+
"renderer.processing": "요청 처리 중",
|
|
436
|
+
"renderer.running": "{tool} 실행 중",
|
|
437
|
+
"renderer.chromeStarted": "Chrome이 시작되었습니다.",
|
|
438
|
+
"renderer.loginRequired": "열린 Chrome 창에서 {provider}에 로그인하세요…",
|
|
439
|
+
"renderer.loginDetected": "{provider} 로그인이 감지되었습니다.",
|
|
440
|
+
"renderer.conversationReady": "대화 준비가 완료되었습니다.",
|
|
441
|
+
"renderer.limitReached": "{provider} 사용 한도에 도달했습니다. 한도가 재설정될 때까지 기다리거나 플랜을 변경하세요.",
|
|
442
|
+
"renderer.assistant": "assistant",
|
|
443
|
+
},
|
|
444
|
+
|
|
445
|
+
es: {
|
|
446
|
+
"app.description": "Convierte tu sesión de IA web en un agente local capaz de usar herramientas.",
|
|
447
|
+
"option.home": "Directorio de datos de la aplicación",
|
|
448
|
+
"option.profileDir": "Directorio de perfil dedicado de Chrome",
|
|
449
|
+
"option.chromePath": "Ejecutable de Chrome/Chromium",
|
|
450
|
+
"option.project": "Directorio del proyecto",
|
|
451
|
+
"option.model": "Proveedor de IA web: {providers} (predeterminado: {defaultProvider})",
|
|
452
|
+
"option.once": "Ejecutar una sola solicitud y salir en lugar de mantener una conversación",
|
|
453
|
+
"option.timeout": "Espera máxima por respuesta del modelo (predeterminado: 10 minutos)",
|
|
454
|
+
"option.noMinimize": "Mantener visible la ventana de Chrome",
|
|
455
|
+
"option.debug": "Guardar diagnósticos del navegador",
|
|
456
|
+
"argument.task": "Solicitud inicial (opcional; también puedes escribirla después)",
|
|
457
|
+
"command.update": "Instalar la última versión de WTAgent desde npm.",
|
|
458
|
+
"command.doctor": "Comprobar Node, Chrome y los directorios de datos locales.",
|
|
459
|
+
"command.login": "Abrir el perfil dedicado de Chrome y esperar el inicio de sesión del proveedor.",
|
|
460
|
+
"command.logout": "Eliminar el perfil local de Chrome para restablecer la sesión del proveedor.",
|
|
461
|
+
"command.resume": "Continuar una sesión existente o recuperar una ejecución interrumpida.",
|
|
462
|
+
"command.status": "Listar sesiones guardadas o mostrar una en JSON.",
|
|
463
|
+
"command.export": "Exportar una sesión guardada a Codex o Claude Code.",
|
|
464
|
+
"login.openingProfile": "Abriendo el perfil nativo de Chrome: {profileDir}",
|
|
465
|
+
"login.finishSignIn": "Esta ventana no usa indicadores CDP. Completa el inicio de sesión hasta que {provider} muestre el inicio/historial con la sesión iniciada y ya no aparezca el botón de acceso.",
|
|
466
|
+
"login.pressEnterVerify": "Cuando veas el inicio de {provider} con la sesión iniciada, pulsa Enter aquí para guardar y verificar",
|
|
467
|
+
"login.savingProfile": "Cerrando Chrome y guardando el perfil dedicado...",
|
|
468
|
+
"login.verified": "Inicio de sesión de {provider} verificado mediante una nueva conexión CDP.",
|
|
469
|
+
"login.stillGuest": "{provider} sigue en modo invitado. Se volverá a abrir Chrome; completa el último paso de inicio de sesión/continuación.",
|
|
470
|
+
"model.chooseInBrowser": "{provider} ha iniciado sesión. Si quieres, selecciona manualmente en el navegador el modelo que deseas usar y después pulsa Enter aquí. Pulsa Enter directamente para conservar el modelo actual.",
|
|
471
|
+
"model.setupCancelled": "Se canceló la confirmación de selección del modelo.",
|
|
472
|
+
"task.youPrompt": "tú ›",
|
|
473
|
+
"option.yes": "Omitir la confirmación",
|
|
474
|
+
"argument.sessionId": "ID de sesión guardada",
|
|
475
|
+
"argument.instruction": "Instrucción de seguimiento opcional",
|
|
476
|
+
"option.format": "codex o claude-code",
|
|
477
|
+
"option.output": "Escribir en un archivo en lugar de stdout",
|
|
478
|
+
"logout.none": "No se encontró un perfil de Chrome en {profileDir}; ya has cerrado sesión.",
|
|
479
|
+
"logout.refuse": "Se rechazó eliminar {profileDir}: no parece un perfil de Chrome de wtagent.",
|
|
480
|
+
"logout.confirm": "Esto elimina la sesión local de {provider} (perfil de Chrome en {profileDir}) y tendrás que volver a iniciar sesión. ¿Continuar?",
|
|
481
|
+
"logout.cancelled": "Cierre de sesión cancelado.",
|
|
482
|
+
"logout.done": "Sesión cerrada. Se eliminó {profileDir}.",
|
|
483
|
+
"logout.loginAgainDefault": "Ejecuta `wtagent login` para volver a iniciar sesión.",
|
|
484
|
+
"logout.loginAgainProvider": "Ejecuta `wtagent login --model {provider}` para volver a iniciar sesión.",
|
|
485
|
+
"approval.required": "Se requiere aprobación para {tool}:",
|
|
486
|
+
"approval.how": "¿Cómo debe gestionarse esta acción?",
|
|
487
|
+
"approval.once": "Permitir una vez",
|
|
488
|
+
"approval.alwaysTool": "Permitir siempre {tool}",
|
|
489
|
+
"approval.alwaysAll": "Permitir siempre todo",
|
|
490
|
+
"approval.deny": "Denegar",
|
|
491
|
+
"approval.savedTool": "Guardado para esta sesión: {tool} siempre estará permitido ({file}).",
|
|
492
|
+
"approval.savedAll": "Guardado para esta sesión: todas las herramientas siempre estarán permitidas ({file}).",
|
|
493
|
+
"profileLock.how": "¿Cómo debe gestionarse?",
|
|
494
|
+
"profileLock.kill": "Finalizar esa sesión y continuar",
|
|
495
|
+
"profileLock.retry": "He cerrado su ventana de Chrome; reintentar",
|
|
496
|
+
"profileLock.quit": "Salir",
|
|
497
|
+
"profileLock.stopping": "Deteniendo pid={pid}...",
|
|
498
|
+
"session.forceQuit": "Forzando la salida.",
|
|
499
|
+
"session.savedAt": "Sesión guardada en: {directory}",
|
|
500
|
+
"session.ctrlC": "Ctrl+C — cancelando. Pulsa de nuevo para forzar la salida.",
|
|
501
|
+
"session.cancelledHint": "Turno cancelado. Escribe un nuevo mensaje o sal.",
|
|
502
|
+
"session.recoveryHint": "Escribe /retry para recuperar el turno pendiente de {provider}, o sal",
|
|
503
|
+
"session.processesRunning": "Procesos administrados aún en ejecución:",
|
|
504
|
+
"session.resumeWith": "Reanuda esta conversación con: wtagent resume {sessionId}",
|
|
505
|
+
"attachment.attaching": "Adjuntando: {files}",
|
|
506
|
+
"attachment.notAttached": "No adjuntado ({details})",
|
|
507
|
+
"update.prompt": "¿Actualizar WTAgent de {currentVersion} a {latest} ahora?",
|
|
508
|
+
"task.prompt": "Tarea",
|
|
509
|
+
"task.required": "Escribe un mensaje.",
|
|
510
|
+
"banner.controls": "Enter envía · Shift+Enter o Ctrl+J nueva línea · ESC cancela el procesamiento · pegado multilínea · ↑/↓ historial · \"exit\", Ctrl+C o Ctrl+D sale",
|
|
511
|
+
"status.none": "No se encontraron sesiones.",
|
|
512
|
+
"renderer.noReply": "{provider} no respondió; pidiendo que continúe ({retry}/{maxRetries})",
|
|
513
|
+
"renderer.generationFailed": "{provider} falló al generar (error del servidor); pidiendo reintento ({retry}/{maxRetries})",
|
|
514
|
+
"renderer.emptyResponse": "Respuesta vacía de {provider}; pidiendo que continúe ({retry}/{maxRetries})",
|
|
515
|
+
"renderer.plainAnswer": "El modelo respondió sin el protocolo XML; se mostrará la respuesta como resultado final.",
|
|
516
|
+
"renderer.reused": "resultado anterior reutilizado para {tool}",
|
|
517
|
+
"renderer.reusedUnknown": "resultado reutilizado (finalización desconocida) para {tool}",
|
|
518
|
+
"renderer.conflictingReuse": "reutilización conflictiva para {tool}",
|
|
519
|
+
"renderer.interrupted": "Ejecución interrumpida: {message}",
|
|
520
|
+
"renderer.recoveryOpen": "{message} La sesión y la ventana de Chrome permanecen abiertas.",
|
|
521
|
+
"renderer.processing": "procesando solicitud",
|
|
522
|
+
"renderer.running": "ejecutando {tool}",
|
|
523
|
+
"renderer.chromeStarted": "Chrome iniciado.",
|
|
524
|
+
"renderer.loginRequired": "Inicia sesión en {provider} en la ventana de Chrome abierta…",
|
|
525
|
+
"renderer.loginDetected": "Inicio de sesión de {provider} detectado.",
|
|
526
|
+
"renderer.conversationReady": "Conversación lista.",
|
|
527
|
+
"renderer.limitReached": "{provider} alcanzó el límite de uso. Espera a que se restablezca o cambia de plan.",
|
|
528
|
+
"renderer.assistant": "assistant",
|
|
529
|
+
},
|
|
530
|
+
|
|
531
|
+
fr: {
|
|
532
|
+
"app.description": "Transformez votre session d’IA web en agent local capable d’utiliser des outils.",
|
|
533
|
+
"option.home": "Répertoire des données de l’application",
|
|
534
|
+
"option.profileDir": "Répertoire du profil Chrome dédié",
|
|
535
|
+
"option.chromePath": "Exécutable Chrome/Chromium",
|
|
536
|
+
"option.project": "Répertoire du projet",
|
|
537
|
+
"option.model": "Fournisseur d’IA web : {providers} (par défaut : {defaultProvider})",
|
|
538
|
+
"option.once": "Exécuter une seule requête puis quitter",
|
|
539
|
+
"option.timeout": "Attente maximale d’une réponse du modèle (10 minutes par défaut)",
|
|
540
|
+
"option.noMinimize": "Garder la fenêtre Chrome visible",
|
|
541
|
+
"option.debug": "Écrire les diagnostics du navigateur",
|
|
542
|
+
"argument.task": "Demande initiale (facultative ; vous pouvez aussi la saisir ensuite)",
|
|
543
|
+
"command.update": "Installer la dernière version de WTAgent depuis npm.",
|
|
544
|
+
"command.doctor": "Vérifier Node, Chrome et les répertoires de données locales.",
|
|
545
|
+
"command.login": "Ouvrir le profil Chrome dédié et attendre la connexion au fournisseur.",
|
|
546
|
+
"command.logout": "Supprimer le profil Chrome local pour réinitialiser la session du fournisseur.",
|
|
547
|
+
"command.resume": "Continuer une session existante ou récupérer une exécution interrompue.",
|
|
548
|
+
"command.status": "Lister les sessions enregistrées ou en afficher une en JSON.",
|
|
549
|
+
"command.export": "Exporter une session vers Codex ou Claude Code.",
|
|
550
|
+
"login.openingProfile": "Ouverture du profil Chrome natif : {profileDir}",
|
|
551
|
+
"login.finishSignIn": "Cette fenêtre n’utilise pas d’options CDP. Terminez la connexion jusqu’à ce que {provider} affiche l’accueil/l’historique connecté et qu’aucun bouton de connexion ne soit visible.",
|
|
552
|
+
"login.pressEnterVerify": "Lorsque l’accueil connecté de {provider} est visible, appuyez ici sur Entrée pour enregistrer et vérifier",
|
|
553
|
+
"login.savingProfile": "Fermeture de Chrome et enregistrement du profil dédié...",
|
|
554
|
+
"login.verified": "Connexion à {provider} vérifiée via une nouvelle connexion CDP.",
|
|
555
|
+
"login.stillGuest": "{provider} est encore en mode invité. Chrome va être rouvert ; terminez la dernière étape de connexion/continuation.",
|
|
556
|
+
"model.chooseInBrowser": "{provider} est connecté. Si nécessaire, choisissez manuellement dans le navigateur le modèle à utiliser, puis appuyez ici sur Entrée. Appuyez directement sur Entrée pour conserver le modèle actuel.",
|
|
557
|
+
"model.setupCancelled": "La confirmation du choix du modèle a été annulée.",
|
|
558
|
+
"task.youPrompt": "vous ›",
|
|
559
|
+
"option.yes": "Ignorer la demande de confirmation",
|
|
560
|
+
"argument.sessionId": "ID de session enregistrée",
|
|
561
|
+
"argument.instruction": "Instruction de suivi facultative",
|
|
562
|
+
"option.format": "codex ou claude-code",
|
|
563
|
+
"option.output": "Écrire dans un fichier plutôt que sur stdout",
|
|
564
|
+
"logout.none": "Aucun profil Chrome trouvé dans {profileDir} ; vous êtes déjà déconnecté.",
|
|
565
|
+
"logout.refuse": "Suppression de {profileDir} refusée : ce répertoire ne ressemble pas à un profil Chrome wtagent.",
|
|
566
|
+
"logout.confirm": "Cela supprimera la session locale {provider} (profil Chrome dans {profileDir}) et nécessitera une nouvelle connexion. Continuer ?",
|
|
567
|
+
"logout.cancelled": "Déconnexion annulée.",
|
|
568
|
+
"logout.done": "Déconnecté. {profileDir} a été supprimé.",
|
|
569
|
+
"logout.loginAgainDefault": "Exécutez `wtagent login` pour vous reconnecter.",
|
|
570
|
+
"logout.loginAgainProvider": "Exécutez `wtagent login --model {provider}` pour vous reconnecter.",
|
|
571
|
+
"approval.required": "Autorisation requise pour {tool} :",
|
|
572
|
+
"approval.how": "Comment traiter cette action ?",
|
|
573
|
+
"approval.once": "Autoriser une fois",
|
|
574
|
+
"approval.alwaysTool": "Toujours autoriser {tool}",
|
|
575
|
+
"approval.alwaysAll": "Toujours tout autoriser",
|
|
576
|
+
"approval.deny": "Refuser",
|
|
577
|
+
"approval.savedTool": "Enregistré pour cette session : {tool} sera toujours autorisé ({file}).",
|
|
578
|
+
"approval.savedAll": "Enregistré pour cette session : tous les outils seront toujours autorisés ({file}).",
|
|
579
|
+
"profileLock.how": "Comment traiter ceci ?",
|
|
580
|
+
"profileLock.kill": "Arrêter cette session et continuer",
|
|
581
|
+
"profileLock.retry": "J’ai fermé sa fenêtre Chrome ; réessayer",
|
|
582
|
+
"profileLock.quit": "Quitter",
|
|
583
|
+
"profileLock.stopping": "Arrêt de pid={pid}...",
|
|
584
|
+
"session.forceQuit": "Arrêt forcé.",
|
|
585
|
+
"session.savedAt": "Session enregistrée dans : {directory}",
|
|
586
|
+
"session.ctrlC": "Ctrl+C — annulation en cours. Appuyez encore pour forcer l’arrêt.",
|
|
587
|
+
"session.cancelledHint": "Tour annulé. Saisissez un nouveau message ou quittez.",
|
|
588
|
+
"session.recoveryHint": "Saisissez /retry pour récupérer le tour {provider} en attente, ou quittez",
|
|
589
|
+
"session.processesRunning": "Processus gérés encore actifs :",
|
|
590
|
+
"session.resumeWith": "Reprendre cette conversation avec : wtagent resume {sessionId}",
|
|
591
|
+
"attachment.attaching": "Ajout de pièces jointes : {files}",
|
|
592
|
+
"attachment.notAttached": "Non joint ({details})",
|
|
593
|
+
"update.prompt": "Mettre WTAgent à jour de {currentVersion} vers {latest} maintenant ?",
|
|
594
|
+
"task.prompt": "Tâche",
|
|
595
|
+
"task.required": "Saisissez un message.",
|
|
596
|
+
"banner.controls": "Entrée envoie · Shift+Entrée ou Ctrl+J nouvelle ligne · ESC annule le traitement · collage multiligne · ↑/↓ historique · \"exit\", Ctrl+C ou Ctrl+D quitte",
|
|
597
|
+
"status.none": "Aucune session trouvée.",
|
|
598
|
+
"renderer.noReply": "Aucune réponse de {provider} ; demande de poursuite ({retry}/{maxRetries})",
|
|
599
|
+
"renderer.generationFailed": "Échec de génération de {provider} (erreur serveur) ; nouvelle tentative demandée ({retry}/{maxRetries})",
|
|
600
|
+
"renderer.emptyResponse": "Réponse vide de {provider} ; demande de poursuite ({retry}/{maxRetries})",
|
|
601
|
+
"renderer.plainAnswer": "Le modèle a répondu sans le protocole XML ; sa réponse est affichée comme résultat final.",
|
|
602
|
+
"renderer.reused": "résultat précédent réutilisé pour {tool}",
|
|
603
|
+
"renderer.reusedUnknown": "résultat réutilisé (état final inconnu) pour {tool}",
|
|
604
|
+
"renderer.conflictingReuse": "réutilisation conflictuelle pour {tool}",
|
|
605
|
+
"renderer.interrupted": "Exécution interrompue : {message}",
|
|
606
|
+
"renderer.recoveryOpen": "{message} La session et la fenêtre Chrome restent ouvertes.",
|
|
607
|
+
"renderer.processing": "traitement de la requête",
|
|
608
|
+
"renderer.running": "exécution de {tool}",
|
|
609
|
+
"renderer.chromeStarted": "Chrome démarré.",
|
|
610
|
+
"renderer.loginRequired": "Connectez-vous à {provider} dans la fenêtre Chrome ouverte…",
|
|
611
|
+
"renderer.loginDetected": "Connexion à {provider} détectée.",
|
|
612
|
+
"renderer.conversationReady": "Conversation prête.",
|
|
613
|
+
"renderer.limitReached": "{provider} a atteint sa limite d’utilisation. Attendez sa réinitialisation ou changez d’offre.",
|
|
614
|
+
"renderer.assistant": "assistant",
|
|
615
|
+
},
|
|
616
|
+
|
|
617
|
+
de: {
|
|
618
|
+
"app.description": "Verwandelt deine Web-AI-Sitzung in einen lokalen Agenten mit Werkzeugzugriff.",
|
|
619
|
+
"option.home": "Anwendungsdatenverzeichnis",
|
|
620
|
+
"option.profileDir": "Verzeichnis des dedizierten Chrome-Profils",
|
|
621
|
+
"option.chromePath": "Chrome/Chromium-Programm",
|
|
622
|
+
"option.project": "Projektverzeichnis",
|
|
623
|
+
"option.model": "Web-AI-Anbieter: {providers} (Standard: {defaultProvider})",
|
|
624
|
+
"option.once": "Nur eine Anfrage ausführen und danach beenden",
|
|
625
|
+
"option.timeout": "Maximale Wartezeit pro Modellantwort (Standard: 10 Minuten)",
|
|
626
|
+
"option.noMinimize": "Chrome-Fenster sichtbar lassen",
|
|
627
|
+
"option.debug": "Browserdiagnose schreiben",
|
|
628
|
+
"argument.task": "Erste Anfrage (optional; kann auch später eingegeben werden)",
|
|
629
|
+
"command.update": "Neueste WTAgent-Version von npm installieren.",
|
|
630
|
+
"command.doctor": "Node, Chrome und lokale Datenverzeichnisse prüfen.",
|
|
631
|
+
"command.login": "Dediziertes Chrome-Profil öffnen und auf die Anmeldung beim Anbieter warten.",
|
|
632
|
+
"command.logout": "Lokales Chrome-Profil löschen, um die Anbieter-Sitzung zurückzusetzen.",
|
|
633
|
+
"command.resume": "Vorhandene Sitzung fortsetzen oder unterbrochenen Lauf wiederherstellen.",
|
|
634
|
+
"command.status": "Gespeicherte Sitzungen auflisten oder eine als JSON anzeigen.",
|
|
635
|
+
"command.export": "Gespeicherte Sitzung nach Codex oder Claude Code exportieren.",
|
|
636
|
+
"login.openingProfile": "Natives Chrome-Profil wird geöffnet: {profileDir}",
|
|
637
|
+
"login.finishSignIn": "Dieses Fenster verwendet keine CDP-Flags. Schließe die Anmeldung ab, bis {provider} die angemeldete Startseite/Chat-Historie zeigt und keine Anmeldeschaltfläche mehr sichtbar ist.",
|
|
638
|
+
"login.pressEnterVerify": "Wenn die angemeldete {provider}-Startseite sichtbar ist, drücke hier Enter zum Speichern und Prüfen",
|
|
639
|
+
"login.savingProfile": "Chrome wird geschlossen und das dedizierte Profil gespeichert...",
|
|
640
|
+
"login.verified": "{provider}-Anmeldung über eine neue CDP-Verbindung bestätigt.",
|
|
641
|
+
"login.stillGuest": "{provider} befindet sich noch im Gastmodus. Chrome wird erneut geöffnet; schließe den letzten Anmelde-/Fortsetzen-Schritt ab.",
|
|
642
|
+
"model.chooseInBrowser": "{provider} ist angemeldet. Wähle bei Bedarf das gewünschte Modell manuell im Browser und drücke danach hier Enter. Drücke direkt Enter, um das aktuell ausgewählte Modell beizubehalten.",
|
|
643
|
+
"model.setupCancelled": "Bestätigung der Modellauswahl abgebrochen.",
|
|
644
|
+
"task.youPrompt": "du ›",
|
|
645
|
+
"option.yes": "Bestätigungsabfrage überspringen",
|
|
646
|
+
"argument.sessionId": "ID der gespeicherten Sitzung",
|
|
647
|
+
"argument.instruction": "Optionale Folgeanweisung",
|
|
648
|
+
"option.format": "codex oder claude-code",
|
|
649
|
+
"option.output": "In eine Datei statt nach stdout schreiben",
|
|
650
|
+
"logout.none": "Kein Chrome-Profil unter {profileDir} gefunden; bereits abgemeldet.",
|
|
651
|
+
"logout.refuse": "{profileDir} wird nicht gelöscht: Es sieht nicht wie ein wtagent-Chrome-Profil aus.",
|
|
652
|
+
"logout.confirm": "Dies löscht die lokale {provider}-Sitzung (Chrome-Profil unter {profileDir}); danach ist eine erneute Anmeldung erforderlich. Fortfahren?",
|
|
653
|
+
"logout.cancelled": "Abmeldung abgebrochen.",
|
|
654
|
+
"logout.done": "Abgemeldet. {profileDir} wurde entfernt.",
|
|
655
|
+
"logout.loginAgainDefault": "Führe `wtagent login` aus, um dich erneut anzumelden.",
|
|
656
|
+
"logout.loginAgainProvider": "Führe `wtagent login --model {provider}` aus, um dich erneut anzumelden.",
|
|
657
|
+
"approval.required": "Genehmigung erforderlich für {tool}:",
|
|
658
|
+
"approval.how": "Wie soll diese Aktion behandelt werden?",
|
|
659
|
+
"approval.once": "Einmal erlauben",
|
|
660
|
+
"approval.alwaysTool": "{tool} immer erlauben",
|
|
661
|
+
"approval.alwaysAll": "Alles immer erlauben",
|
|
662
|
+
"approval.deny": "Ablehnen",
|
|
663
|
+
"approval.savedTool": "Für diese Sitzung gespeichert: {tool} wird immer erlaubt ({file}).",
|
|
664
|
+
"approval.savedAll": "Für diese Sitzung gespeichert: Alle Werkzeuge werden immer erlaubt ({file}).",
|
|
665
|
+
"profileLock.how": "Wie soll dies behandelt werden?",
|
|
666
|
+
"profileLock.kill": "Diese Sitzung beenden und fortfahren",
|
|
667
|
+
"profileLock.retry": "Chrome-Fenster geschlossen; erneut versuchen",
|
|
668
|
+
"profileLock.quit": "Beenden",
|
|
669
|
+
"profileLock.stopping": "pid={pid} wird beendet...",
|
|
670
|
+
"session.forceQuit": "Beenden wird erzwungen.",
|
|
671
|
+
"session.savedAt": "Sitzung gespeichert unter: {directory}",
|
|
672
|
+
"session.ctrlC": "Ctrl+C — wird abgebrochen. Erneut drücken, um das Beenden zu erzwingen.",
|
|
673
|
+
"session.cancelledHint": "Durchgang abgebrochen. Neue Nachricht eingeben oder beenden.",
|
|
674
|
+
"session.recoveryHint": "Gib /retry ein, um den ausstehenden {provider}-Durchlauf wiederherzustellen, oder beende",
|
|
675
|
+
"session.processesRunning": "Verwaltete Prozesse laufen noch:",
|
|
676
|
+
"session.resumeWith": "Diese Unterhaltung fortsetzen mit: wtagent resume {sessionId}",
|
|
677
|
+
"attachment.attaching": "Anhängen: {files}",
|
|
678
|
+
"attachment.notAttached": "Nicht angehängt ({details})",
|
|
679
|
+
"update.prompt": "WTAgent jetzt von {currentVersion} auf {latest} aktualisieren?",
|
|
680
|
+
"task.prompt": "Aufgabe",
|
|
681
|
+
"task.required": "Bitte eine Nachricht eingeben.",
|
|
682
|
+
"banner.controls": "Enter sendet · Shift+Enter oder Ctrl+J neue Zeile · ESC bricht Verarbeitung ab · mehrzeiliges Einfügen · ↑/↓ Verlauf · \"exit\", Ctrl+C oder Ctrl+D beendet",
|
|
683
|
+
"status.none": "Keine Sitzungen gefunden.",
|
|
684
|
+
"renderer.noReply": "Keine Antwort von {provider}; Fortsetzung wird angefordert ({retry}/{maxRetries})",
|
|
685
|
+
"renderer.generationFailed": "{provider}-Generierung fehlgeschlagen (Serverfehler); Wiederholung wird angefordert ({retry}/{maxRetries})",
|
|
686
|
+
"renderer.emptyResponse": "Leere Antwort von {provider}; Fortsetzung wird angefordert ({retry}/{maxRetries})",
|
|
687
|
+
"renderer.plainAnswer": "Das Modell antwortete ohne XML-Protokoll; die Antwort wird als Endergebnis angezeigt.",
|
|
688
|
+
"renderer.reused": "früheres Ergebnis für {tool} wiederverwendet",
|
|
689
|
+
"renderer.reusedUnknown": "Ergebnis für {tool} wiederverwendet (Abschluss unbekannt)",
|
|
690
|
+
"renderer.conflictingReuse": "widersprüchliche Wiederverwendung für {tool}",
|
|
691
|
+
"renderer.interrupted": "Lauf unterbrochen: {message}",
|
|
692
|
+
"renderer.recoveryOpen": "{message} Sitzung und Chrome-Fenster bleiben geöffnet.",
|
|
693
|
+
"renderer.processing": "Anfrage wird verarbeitet",
|
|
694
|
+
"renderer.running": "{tool} wird ausgeführt",
|
|
695
|
+
"renderer.chromeStarted": "Chrome gestartet.",
|
|
696
|
+
"renderer.loginRequired": "Melde dich im geöffneten Chrome-Fenster bei {provider} an…",
|
|
697
|
+
"renderer.loginDetected": "{provider}-Anmeldung erkannt.",
|
|
698
|
+
"renderer.conversationReady": "Unterhaltung bereit.",
|
|
699
|
+
"renderer.limitReached": "Nutzungslimit von {provider} erreicht. Warte auf die Zurücksetzung oder wechsle den Tarif.",
|
|
700
|
+
"renderer.assistant": "assistant",
|
|
701
|
+
},
|
|
702
|
+
|
|
703
|
+
pt: {
|
|
704
|
+
"app.description": "Transforma sua sessão de IA web em um agente local capaz de usar ferramentas.",
|
|
705
|
+
"option.home": "Diretório de dados do aplicativo",
|
|
706
|
+
"option.profileDir": "Diretório do perfil dedicado do Chrome",
|
|
707
|
+
"option.chromePath": "Executável do Chrome/Chromium",
|
|
708
|
+
"option.project": "Diretório do projeto",
|
|
709
|
+
"option.model": "Provedor de IA web: {providers} (padrão: {defaultProvider})",
|
|
710
|
+
"option.once": "Executar apenas uma solicitação e sair",
|
|
711
|
+
"option.timeout": "Espera máxima por uma resposta do modelo (padrão: 10 minutos)",
|
|
712
|
+
"option.noMinimize": "Manter a janela do Chrome visível",
|
|
713
|
+
"option.debug": "Gravar diagnósticos do navegador",
|
|
714
|
+
"argument.task": "Solicitação inicial (opcional; você também pode digitar depois)",
|
|
715
|
+
"command.update": "Instalar a versão mais recente do WTAgent pelo npm.",
|
|
716
|
+
"command.doctor": "Verificar Node, Chrome e diretórios de dados locais.",
|
|
717
|
+
"command.login": "Abrir o perfil dedicado do Chrome e aguardar o login no provedor.",
|
|
718
|
+
"command.logout": "Excluir o perfil local do Chrome para redefinir a sessão do provedor.",
|
|
719
|
+
"command.resume": "Continuar uma sessão existente ou recuperar uma execução interrompida.",
|
|
720
|
+
"command.status": "Listar sessões salvas ou mostrar uma em JSON.",
|
|
721
|
+
"command.export": "Exportar uma sessão salva para Codex ou Claude Code.",
|
|
722
|
+
"login.openingProfile": "Abrindo o perfil nativo do Chrome: {profileDir}",
|
|
723
|
+
"login.finishSignIn": "Esta janela não usa flags CDP. Conclua o login até que {provider} mostre a página inicial/histórico já autenticado e não haja botão de login.",
|
|
724
|
+
"login.pressEnterVerify": "Quando a página inicial autenticada de {provider} estiver visível, pressione Enter aqui para salvar e verificar",
|
|
725
|
+
"login.savingProfile": "Fechando o Chrome e salvando o perfil dedicado...",
|
|
726
|
+
"login.verified": "Login de {provider} verificado por uma nova conexão CDP.",
|
|
727
|
+
"login.stillGuest": "{provider} ainda está no modo visitante. O Chrome será reaberto; conclua a última etapa de login/continuação.",
|
|
728
|
+
"model.chooseInBrowser": "{provider} está conectado. Se quiser, escolha manualmente no navegador o modelo a usar e depois pressione Enter aqui. Pressione Enter imediatamente para manter o modelo atual.",
|
|
729
|
+
"model.setupCancelled": "A confirmação da seleção do modelo foi cancelada.",
|
|
730
|
+
"task.youPrompt": "você ›",
|
|
731
|
+
"option.yes": "Ignorar a confirmação",
|
|
732
|
+
"argument.sessionId": "ID da sessão salva",
|
|
733
|
+
"argument.instruction": "Instrução de acompanhamento opcional",
|
|
734
|
+
"option.format": "codex ou claude-code",
|
|
735
|
+
"option.output": "Gravar em arquivo em vez de stdout",
|
|
736
|
+
"logout.none": "Nenhum perfil do Chrome encontrado em {profileDir}; você já está desconectado.",
|
|
737
|
+
"logout.refuse": "Recusando excluir {profileDir}: não parece ser um perfil do Chrome do wtagent.",
|
|
738
|
+
"logout.confirm": "Isso exclui a sessão local de {provider} (perfil do Chrome em {profileDir}) e exige um novo login. Continuar?",
|
|
739
|
+
"logout.cancelled": "Logout cancelado.",
|
|
740
|
+
"logout.done": "Logout concluído. {profileDir} foi removido.",
|
|
741
|
+
"logout.loginAgainDefault": "Execute `wtagent login` para entrar novamente.",
|
|
742
|
+
"logout.loginAgainProvider": "Execute `wtagent login --model {provider}` para entrar novamente.",
|
|
743
|
+
"approval.required": "Aprovação necessária para {tool}:",
|
|
744
|
+
"approval.how": "Como esta ação deve ser tratada?",
|
|
745
|
+
"approval.once": "Permitir uma vez",
|
|
746
|
+
"approval.alwaysTool": "Sempre permitir {tool}",
|
|
747
|
+
"approval.alwaysAll": "Sempre permitir tudo",
|
|
748
|
+
"approval.deny": "Negar",
|
|
749
|
+
"approval.savedTool": "Salvo para esta sessão: {tool} será sempre permitido ({file}).",
|
|
750
|
+
"approval.savedAll": "Salvo para esta sessão: todas as ferramentas serão sempre permitidas ({file}).",
|
|
751
|
+
"profileLock.how": "Como isso deve ser tratado?",
|
|
752
|
+
"profileLock.kill": "Encerrar essa sessão e continuar",
|
|
753
|
+
"profileLock.retry": "Fechei a janela do Chrome; tentar novamente",
|
|
754
|
+
"profileLock.quit": "Sair",
|
|
755
|
+
"profileLock.stopping": "Encerrando pid={pid}...",
|
|
756
|
+
"session.forceQuit": "Forçando saída.",
|
|
757
|
+
"session.savedAt": "Sessão salva em: {directory}",
|
|
758
|
+
"session.ctrlC": "Ctrl+C — cancelando. Pressione novamente para forçar a saída.",
|
|
759
|
+
"session.cancelledHint": "Turno cancelado. Digite uma nova mensagem ou saia.",
|
|
760
|
+
"session.recoveryHint": "Digite /retry para recuperar o turno pendente do {provider}, ou saia",
|
|
761
|
+
"session.processesRunning": "Processos gerenciados ainda em execução:",
|
|
762
|
+
"session.resumeWith": "Retome esta conversa com: wtagent resume {sessionId}",
|
|
763
|
+
"attachment.attaching": "Anexando: {files}",
|
|
764
|
+
"attachment.notAttached": "Não anexado ({details})",
|
|
765
|
+
"update.prompt": "Atualizar o WTAgent de {currentVersion} para {latest} agora?",
|
|
766
|
+
"task.prompt": "Tarefa",
|
|
767
|
+
"task.required": "Digite uma mensagem.",
|
|
768
|
+
"banner.controls": "Enter envia · Shift+Enter ou Ctrl+J nova linha · ESC cancela o processamento · colagem multilinha · ↑/↓ histórico · \"exit\", Ctrl+C ou Ctrl+D sai",
|
|
769
|
+
"status.none": "Nenhuma sessão encontrada.",
|
|
770
|
+
"renderer.noReply": "{provider} não respondeu; pedindo para continuar ({retry}/{maxRetries})",
|
|
771
|
+
"renderer.generationFailed": "Falha na geração de {provider} (erro do servidor); pedindo nova tentativa ({retry}/{maxRetries})",
|
|
772
|
+
"renderer.emptyResponse": "Resposta vazia de {provider}; pedindo para continuar ({retry}/{maxRetries})",
|
|
773
|
+
"renderer.plainAnswer": "O modelo respondeu sem o protocolo XML; a resposta será exibida como resultado final.",
|
|
774
|
+
"renderer.reused": "resultado anterior reutilizado para {tool}",
|
|
775
|
+
"renderer.reusedUnknown": "resultado reutilizado (conclusão desconhecida) para {tool}",
|
|
776
|
+
"renderer.conflictingReuse": "reutilização conflitante para {tool}",
|
|
777
|
+
"renderer.interrupted": "Execução interrompida: {message}",
|
|
778
|
+
"renderer.recoveryOpen": "{message} A sessão e a janela do Chrome permanecem abertas.",
|
|
779
|
+
"renderer.processing": "processando solicitação",
|
|
780
|
+
"renderer.running": "executando {tool}",
|
|
781
|
+
"renderer.chromeStarted": "Chrome iniciado.",
|
|
782
|
+
"renderer.loginRequired": "Entre em {provider} na janela do Chrome aberta…",
|
|
783
|
+
"renderer.loginDetected": "Login de {provider} detectado.",
|
|
784
|
+
"renderer.conversationReady": "Conversa pronta.",
|
|
785
|
+
"renderer.limitReached": "{provider} atingiu o limite de uso. Aguarde a redefinição ou mude de plano.",
|
|
786
|
+
"renderer.assistant": "assistant",
|
|
787
|
+
},
|
|
788
|
+
|
|
789
|
+
ru: {
|
|
790
|
+
"app.description": "Превращает веб-сессию ИИ в локального агента с доступом к инструментам.",
|
|
791
|
+
"option.home": "Каталог данных приложения",
|
|
792
|
+
"option.profileDir": "Каталог отдельного профиля Chrome",
|
|
793
|
+
"option.chromePath": "Исполняемый файл Chrome/Chromium",
|
|
794
|
+
"option.project": "Каталог проекта",
|
|
795
|
+
"option.model": "Провайдер веб-ИИ: {providers} (по умолчанию: {defaultProvider})",
|
|
796
|
+
"option.once": "Выполнить один запрос и завершить работу",
|
|
797
|
+
"option.timeout": "Максимальное ожидание ответа модели (по умолчанию: 10 минут)",
|
|
798
|
+
"option.noMinimize": "Не сворачивать окно Chrome",
|
|
799
|
+
"option.debug": "Записывать диагностику браузера",
|
|
800
|
+
"argument.task": "Начальный запрос (необязательно; его можно ввести позже)",
|
|
801
|
+
"command.update": "Установить последнюю версию WTAgent из npm.",
|
|
802
|
+
"command.doctor": "Проверить Node, Chrome и локальные каталоги данных.",
|
|
803
|
+
"command.login": "Открыть отдельный профиль Chrome и дождаться входа у провайдера.",
|
|
804
|
+
"command.logout": "Удалить локальный профиль Chrome и сбросить сессию провайдера.",
|
|
805
|
+
"command.resume": "Продолжить существующую сессию или восстановить прерванный запуск.",
|
|
806
|
+
"command.status": "Показать сохранённые сессии или одну сессию в JSON.",
|
|
807
|
+
"command.export": "Экспортировать сессию в Codex или Claude Code.",
|
|
808
|
+
"login.openingProfile": "Открывается нативный профиль Chrome: {profileDir}",
|
|
809
|
+
"login.finishSignIn": "Это окно не использует флаги CDP. Завершите вход, пока {provider} не покажет домашнюю страницу/историю чатов авторизованного пользователя и не исчезнет кнопка входа.",
|
|
810
|
+
"login.pressEnterVerify": "Когда появится авторизованная главная страница {provider}, нажмите здесь Enter для сохранения и проверки",
|
|
811
|
+
"login.savingProfile": "Chrome закрывается, отдельный профиль сохраняется...",
|
|
812
|
+
"login.verified": "Вход в {provider} подтверждён через новое соединение CDP.",
|
|
813
|
+
"login.stillGuest": "{provider} всё ещё работает в гостевом режиме. Chrome будет открыт снова; завершите последний шаг входа/продолжения.",
|
|
814
|
+
"model.chooseInBrowser": "{provider}: вход выполнен. При необходимости вручную выберите нужную модель в браузере, затем нажмите Enter здесь. Чтобы оставить текущую модель, сразу нажмите Enter.",
|
|
815
|
+
"model.setupCancelled": "Подтверждение выбора модели отменено.",
|
|
816
|
+
"task.youPrompt": "вы ›",
|
|
817
|
+
"option.yes": "Пропустить запрос подтверждения",
|
|
818
|
+
"argument.sessionId": "ID сохранённой сессии",
|
|
819
|
+
"argument.instruction": "Необязательная последующая инструкция",
|
|
820
|
+
"option.format": "codex или claude-code",
|
|
821
|
+
"option.output": "Записать в файл вместо stdout",
|
|
822
|
+
"logout.none": "Профиль Chrome в {profileDir} не найден; вы уже вышли из системы.",
|
|
823
|
+
"logout.refuse": "Удаление {profileDir} отклонено: каталог не похож на профиль Chrome wtagent.",
|
|
824
|
+
"logout.confirm": "Будет удалена локальная сессия {provider} (профиль Chrome: {profileDir}), после чего потребуется новый вход. Продолжить?",
|
|
825
|
+
"logout.cancelled": "Выход отменён.",
|
|
826
|
+
"logout.done": "Выход выполнен. {profileDir} удалён.",
|
|
827
|
+
"logout.loginAgainDefault": "Чтобы войти снова, выполните `wtagent login`.",
|
|
828
|
+
"logout.loginAgainProvider": "Чтобы войти снова, выполните `wtagent login --model {provider}`.",
|
|
829
|
+
"approval.required": "Для {tool} требуется подтверждение:",
|
|
830
|
+
"approval.how": "Как обработать это действие?",
|
|
831
|
+
"approval.once": "Разрешить один раз",
|
|
832
|
+
"approval.alwaysTool": "Всегда разрешать {tool}",
|
|
833
|
+
"approval.alwaysAll": "Всегда разрешать всё",
|
|
834
|
+
"approval.deny": "Запретить",
|
|
835
|
+
"approval.savedTool": "Сохранено для этой сессии: {tool} всегда будет разрешён ({file}).",
|
|
836
|
+
"approval.savedAll": "Сохранено для этой сессии: все инструменты всегда будут разрешены ({file}).",
|
|
837
|
+
"profileLock.how": "Как это обработать?",
|
|
838
|
+
"profileLock.kill": "Завершить ту сессию и продолжить",
|
|
839
|
+
"profileLock.retry": "Окно Chrome закрыто; повторить",
|
|
840
|
+
"profileLock.quit": "Выйти",
|
|
841
|
+
"profileLock.stopping": "Остановка pid={pid}...",
|
|
842
|
+
"session.forceQuit": "Принудительный выход.",
|
|
843
|
+
"session.savedAt": "Сессия сохранена в: {directory}",
|
|
844
|
+
"session.ctrlC": "Ctrl+C — отмена. Нажмите ещё раз для принудительного выхода.",
|
|
845
|
+
"session.cancelledHint": "Ход отменён. Введите новое сообщение или выйдите.",
|
|
846
|
+
"session.recoveryHint": "Введите /retry, чтобы восстановить ожидающий ход {provider}, или выйдите",
|
|
847
|
+
"session.processesRunning": "Управляемые процессы всё ещё запущены:",
|
|
848
|
+
"session.resumeWith": "Продолжить этот диалог: wtagent resume {sessionId}",
|
|
849
|
+
"attachment.attaching": "Прикрепление: {files}",
|
|
850
|
+
"attachment.notAttached": "Не прикреплено ({details})",
|
|
851
|
+
"update.prompt": "Обновить WTAgent с {currentVersion} до {latest} сейчас?",
|
|
852
|
+
"task.prompt": "Задача",
|
|
853
|
+
"task.required": "Введите сообщение.",
|
|
854
|
+
"banner.controls": "Enter отправляет · Shift+Enter или Ctrl+J новая строка · ESC отменяет обработку · многострочная вставка · ↑/↓ история · \"exit\", Ctrl+C или Ctrl+D выход",
|
|
855
|
+
"status.none": "Сессии не найдены.",
|
|
856
|
+
"renderer.noReply": "{provider} не ответил; запрашивается продолжение ({retry}/{maxRetries})",
|
|
857
|
+
"renderer.generationFailed": "Ошибка генерации {provider} (ошибка сервера); запрашивается повтор ({retry}/{maxRetries})",
|
|
858
|
+
"renderer.emptyResponse": "Пустой ответ {provider}; запрашивается продолжение ({retry}/{maxRetries})",
|
|
859
|
+
"renderer.plainAnswer": "Модель ответила без XML-протокола; ответ будет показан как окончательный.",
|
|
860
|
+
"renderer.reused": "повторно использован предыдущий результат {tool}",
|
|
861
|
+
"renderer.reusedUnknown": "результат {tool} использован повторно (статус завершения неизвестен)",
|
|
862
|
+
"renderer.conflictingReuse": "конфликт повторного использования результата {tool}",
|
|
863
|
+
"renderer.interrupted": "Выполнение прервано: {message}",
|
|
864
|
+
"renderer.recoveryOpen": "{message} Сессия и окно Chrome остаются открытыми.",
|
|
865
|
+
"renderer.processing": "обработка запроса",
|
|
866
|
+
"renderer.running": "выполняется {tool}",
|
|
867
|
+
"renderer.chromeStarted": "Chrome запущен.",
|
|
868
|
+
"renderer.loginRequired": "Войдите в {provider} в открытом окне Chrome…",
|
|
869
|
+
"renderer.loginDetected": "Обнаружен вход в {provider}.",
|
|
870
|
+
"renderer.conversationReady": "Диалог готов.",
|
|
871
|
+
"renderer.limitReached": "{provider}: достигнут лимит использования. Дождитесь сброса лимита или смените тариф.",
|
|
872
|
+
"renderer.assistant": "assistant",
|
|
873
|
+
},
|
|
874
|
+
});
|
|
875
|
+
|
|
876
|
+
function normalizeLocaleTag(value) {
|
|
877
|
+
const raw = String(value ?? "").trim().replaceAll("_", "-");
|
|
878
|
+
if (!raw) return null;
|
|
879
|
+
|
|
880
|
+
const lower = raw.toLowerCase();
|
|
881
|
+
if (lower.startsWith("zh")) {
|
|
882
|
+
if (
|
|
883
|
+
lower.includes("hant")
|
|
884
|
+
|| lower.startsWith("zh-tw")
|
|
885
|
+
|| lower.startsWith("zh-hk")
|
|
886
|
+
|| lower.startsWith("zh-mo")
|
|
887
|
+
) {
|
|
888
|
+
return "zh-TW";
|
|
889
|
+
}
|
|
890
|
+
return "zh-CN";
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
const language = lower.split("-")[0];
|
|
894
|
+
return SUPPORTED_LOCALES.includes(language) ? language : null;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
function systemLocale() {
|
|
898
|
+
const candidates = [
|
|
899
|
+
process.env.WTAGENT_LANG,
|
|
900
|
+
process.env.LC_ALL,
|
|
901
|
+
process.env.LC_MESSAGES,
|
|
902
|
+
process.env.LANG,
|
|
903
|
+
Intl.DateTimeFormat().resolvedOptions().locale,
|
|
904
|
+
];
|
|
905
|
+
|
|
906
|
+
for (const candidate of candidates) {
|
|
907
|
+
const normalized = normalizeLocaleTag(candidate);
|
|
908
|
+
if (normalized) return normalized;
|
|
909
|
+
}
|
|
910
|
+
return "en";
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
function interpolate(template, variables = {}) {
|
|
914
|
+
return String(template).replace(/\{([A-Za-z0-9_]+)\}/g, (match, key) => (
|
|
915
|
+
Object.prototype.hasOwnProperty.call(variables, key)
|
|
916
|
+
? String(variables[key])
|
|
917
|
+
: match
|
|
918
|
+
));
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
export function resolveLocale(value = null) {
|
|
922
|
+
return normalizeLocaleTag(value) ?? (value == null ? systemLocale() : "en");
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
export function createI18n(locale = null) {
|
|
926
|
+
const resolvedLocale = resolveLocale(locale);
|
|
927
|
+
return Object.freeze({
|
|
928
|
+
locale: resolvedLocale,
|
|
929
|
+
t(key, variables = {}) {
|
|
930
|
+
const localized = MESSAGES[resolvedLocale]?.[key];
|
|
931
|
+
const fallback = MESSAGES.en[key];
|
|
932
|
+
return interpolate(localized ?? fallback ?? key, variables);
|
|
933
|
+
},
|
|
934
|
+
});
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
export const MESSAGE_KEYS = Object.freeze(Object.keys(MESSAGES.en));
|
|
938
|
+
|
|
939
|
+
export function hasNativeTranslation(locale, key) {
|
|
940
|
+
const resolvedLocale = resolveLocale(locale);
|
|
941
|
+
return Object.prototype.hasOwnProperty.call(
|
|
942
|
+
MESSAGES[resolvedLocale] ?? {},
|
|
943
|
+
key,
|
|
944
|
+
);
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
export const i18n = createI18n();
|
|
948
|
+
export const t = i18n.t;
|
|
949
|
+
export { SUPPORTED_LOCALES };
|