@vibeapi/cli 0.0.85 → 0.0.86
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 +6 -4
- package/dist/cli.js +1 -1
- package/dist/lib/auto-update.js +1 -1
- package/dist/lib/cli-help.d.ts +57 -0
- package/dist/lib/cli-help.js +1 -0
- package/dist/lib/command-docs.d.ts +11 -0
- package/dist/lib/command-docs.js +1 -0
- package/dist/lib/command.d.ts +7 -3
- package/dist/lib/command.js +1 -1
- package/dist/lib/model-refresh.js +1 -1
- package/dist/lib/program.d.ts +2 -0
- package/dist/lib/program.js +1 -0
- package/dist/lib/wizard.js +1 -1
- package/dist/locales/en_US.json +422 -47
- package/dist/locales/zh_CN.json +423 -48
- package/package.json +3 -2
package/dist/locales/zh_CN.json
CHANGED
|
@@ -1,28 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"cli": {
|
|
3
|
-
"title": "Coding Tool Helper (vibecli)",
|
|
4
|
-
"usage": "用法: vibecli <命令> [选项]",
|
|
5
|
-
"commands": "命令:",
|
|
6
|
-
"examples": "示例:",
|
|
7
3
|
"error_unknown": "未知命令: {{command}}",
|
|
8
4
|
"error_general": "错误:"
|
|
9
5
|
},
|
|
10
|
-
"commands": {
|
|
11
|
-
"help": "显示帮助信息",
|
|
12
|
-
"version": "显示版本信息",
|
|
13
|
-
"init": "运行交互式初始化向导",
|
|
14
|
-
"lang": "语言管理",
|
|
15
|
-
"auth": "密钥管理",
|
|
16
|
-
"doctor": "健康检查",
|
|
17
|
-
"enter": "配置管理",
|
|
18
|
-
"tool": "工具管理",
|
|
19
|
-
"status": "显示当前配置状态",
|
|
20
|
-
"setup": "一条命令完成配置(--key 按能力自动选工具 / --claudekey --codexkey 双令牌分别配置)",
|
|
21
|
-
"upgrade": "升级 Claude Code、Codex 等编码工具(官方渠道连不上时改走国内镜像)",
|
|
22
|
-
"codex": "Codex 辅助功能",
|
|
23
|
-
"codex_sessions": "让 Codex 本地所有会话都显示在列表里(换过登录方式或服务商后旧会话会被隐藏)",
|
|
24
|
-
"base": "查看、测速并切换接入地址(主域名连不上或证书报错时换一个)"
|
|
25
|
-
},
|
|
26
6
|
"lang": {
|
|
27
7
|
"current": "当前语言",
|
|
28
8
|
"show_usage": "vibecli lang show - 显示当前语言",
|
|
@@ -44,11 +24,11 @@
|
|
|
44
24
|
"reload_missing_config": "还没有保存的 API Key,先运行 vibecli setup --key <你的 Key>",
|
|
45
25
|
"reloading": "正在把配置重新写入 {{tool}}…",
|
|
46
26
|
"reloaded": "{{tool}} 的配置已重新写入",
|
|
47
|
-
"reload_failed": "重新写入配置失败,详情见 vibecli logs"
|
|
27
|
+
"reload_failed": "重新写入配置失败,详情见 vibecli logs tail"
|
|
48
28
|
},
|
|
49
29
|
"wizard": {
|
|
50
30
|
"banner_subtitle": "统一管理您的 Claude Code 等编码工具",
|
|
51
|
-
"welcome": "
|
|
31
|
+
"welcome": "欢迎使用 VibeCLI!",
|
|
52
32
|
"privacy_note": "我们重视您的隐私,所有配置信息仅保存在本地.",
|
|
53
33
|
"select_language": "请选择界面语言",
|
|
54
34
|
"input_api_key": "输入 API Key",
|
|
@@ -104,7 +84,7 @@
|
|
|
104
84
|
"menu_config_tool": "编码工具配置 (将 API 应用到 Claude Code/Codex 等)",
|
|
105
85
|
"menu_exit": "退出",
|
|
106
86
|
"select_operation": "请选择操作:",
|
|
107
|
-
"goodbye_message": "再见! 用
|
|
87
|
+
"goodbye_message": "再见! 用 VibeCLI 配置好工具后,在终端输入对应命令即可开始编码!",
|
|
108
88
|
"lang_auto_zh": "检测到系统语言为中文,已自动使用中文界面(主菜单或 vibecli lang set 可随时切换)。",
|
|
109
89
|
"goodbye_message_tools": "再见! 终端输入 {{commands}} 即可开始编码!",
|
|
110
90
|
"goodbye_claude_hint": "也可以在 VSCode 安装 Claude 插件使用 Claude Code。",
|
|
@@ -207,17 +187,17 @@
|
|
|
207
187
|
"tool_duplicates": "还有另外的安装:{{others}}",
|
|
208
188
|
"run_upgrade": "运行 vibecli upgrade {{tool}} 处理",
|
|
209
189
|
"claude_config": "Claude Code 配置",
|
|
210
|
-
"claude_managed": "托管配置会盖掉
|
|
190
|
+
"claude_managed": "托管配置会盖掉 VibeCLI 写入的设置({{detail}}),一般是公司电脑统一下发的,请联系管理员",
|
|
211
191
|
"claude_not_configured": "~/.claude/settings.json 里没有 VibeAPI 的地址或 Key,运行 vibecli setup --key <你的 Key> 重新配置",
|
|
212
|
-
"claude_config_changed": "~/.claude/settings.json 里的地址或 Key 和
|
|
192
|
+
"claude_config_changed": "~/.claude/settings.json 里的地址或 Key 和 VibeCLI 保存的不一致(可能被别的工具改过),运行 vibecli setup --key <你的 Key> 重新写入",
|
|
213
193
|
"claude_request": "Claude Code 实际请求",
|
|
214
194
|
"check_claude_request": "用 Claude Code 发一条测试请求",
|
|
215
195
|
"claude_request_skipped": "没找到 claude 命令",
|
|
216
196
|
"claude_request_failed": "请求失败:{{reason}}",
|
|
217
197
|
"deep_hint": "加上 --deep 会用 Claude Code 实际发一条请求(消耗少量额度),确认整条链路能用",
|
|
218
198
|
"codex_auth": "Codex 令牌",
|
|
219
|
-
"codex_stale_bearer": "~/.codex/config.toml 的 [model_providers.custom] 里有 experimental_bearer_token(多半是 cc-switch 等工具代理模式留下的 PROXY_MANAGED),Codex 会把它当令牌发出去,导致 401 Invalid token;运行 vibecli setup 会删掉它",
|
|
220
|
-
"codex_chatgpt_login": "Codex 当前是 ChatGPT 账号登录状态,会把 ChatGPT 的凭据发给 VibeAPI,导致 401 Invalid token;运行 vibecli setup 改回令牌登录",
|
|
199
|
+
"codex_stale_bearer": "~/.codex/config.toml 的 [model_providers.custom] 里有 experimental_bearer_token(多半是 cc-switch 等工具代理模式留下的 PROXY_MANAGED),Codex 会把它当令牌发出去,导致 401 Invalid token;运行 vibecli setup --key <你的 Key> 会删掉它",
|
|
200
|
+
"codex_chatgpt_login": "Codex 当前是 ChatGPT 账号登录状态,会把 ChatGPT 的凭据发给 VibeAPI,导致 401 Invalid token;运行 vibecli setup --key <你的 Key> 改回令牌登录",
|
|
221
201
|
"claude_login": "Claude 官方登录",
|
|
222
202
|
"check_other_addresses": "测试其他接入地址",
|
|
223
203
|
"other_addresses": "其他接入地址",
|
|
@@ -249,9 +229,9 @@
|
|
|
249
229
|
"args": "参数:",
|
|
250
230
|
"first_run": "检测到首次运行,启动初始化向导...",
|
|
251
231
|
"config_saved": "配置已保存",
|
|
252
|
-
"env_vars_cleared": "检测到 shell 环境变量 {{vars}} 并已自动清除(它们会覆盖
|
|
232
|
+
"env_vars_cleared": "检测到 shell 环境变量 {{vars}} 并已自动清除(它们会覆盖 VibeCLI 写入的配置)。如已写入 shell 配置文件,请重开终端生效。",
|
|
253
233
|
"certificate_intercepted": "连接 {{url}} 时证书不对:通常是当前网络的 DNS 被劫持(校园网、酒店网络常见),而不是 Key 有问题。请换个网络、把电脑的 DNS 改成 119.29.29.29 / 223.5.5.5,或开代理后重试",
|
|
254
|
-
"env_vars_machine_left": "系统环境变量里还有 {{vars}}
|
|
234
|
+
"env_vars_machine_left": "系统环境变量里还有 {{vars}},需要管理员权限才能删:用管理员身份打开终端再运行一次刚才的 vibecli 命令,或在「系统属性 → 环境变量 → 系统变量」里手动删除"
|
|
255
235
|
},
|
|
256
236
|
"config": {
|
|
257
237
|
"profile_list_title": "Profile 列表",
|
|
@@ -271,7 +251,7 @@
|
|
|
271
251
|
"preset_not_found": "自定义预设不存在: {{name}}",
|
|
272
252
|
"backup_created": "备份已创建: {{path}}",
|
|
273
253
|
"backup_restored": "备份已恢复: {{name}}",
|
|
274
|
-
"backup_restore_missing_name": "
|
|
254
|
+
"backup_restore_missing_name": "请指定备份名称:vibecli config backup restore <名称>(名称用 vibecli config backup list 查看)",
|
|
275
255
|
"profile_delete_confirm": "确定删除 Profile {{name}}?将同时清除其密钥",
|
|
276
256
|
"profile_delete_dry_run": "将删除 Profile {{name}}",
|
|
277
257
|
"profile_delete_aborted": "已取消删除 Profile",
|
|
@@ -306,7 +286,7 @@
|
|
|
306
286
|
"no_files": "暂无日志文件"
|
|
307
287
|
},
|
|
308
288
|
"completion": {
|
|
309
|
-
"header": "#
|
|
289
|
+
"header": "# VibeCLI shell 自动补全",
|
|
310
290
|
"instructions_bash": "请将以上输出保存到 ~/.vibecli-completion.bash,并在 shell rc 中添加 'source ~/.vibecli-completion.bash'",
|
|
311
291
|
"instructions_zsh": "请将以上输出保存到 ~/.vibecli-completion.zsh,并在 shell rc 中添加 'source ~/.vibecli-completion.zsh'",
|
|
312
292
|
"instructions_fish": "请将以上输出保存到 ~/.config/fish/completions/vibecli.fish",
|
|
@@ -321,7 +301,7 @@
|
|
|
321
301
|
"min": "最小值",
|
|
322
302
|
"max": "最大值",
|
|
323
303
|
"errors": "错误",
|
|
324
|
-
"missing_api_key": "
|
|
304
|
+
"missing_api_key": "还没有保存 API Key,先运行 vibecli auth <你的 Key>"
|
|
325
305
|
},
|
|
326
306
|
"update": {
|
|
327
307
|
"checking": "正在检查更新...",
|
|
@@ -332,8 +312,8 @@
|
|
|
332
312
|
"available": "存在新版本",
|
|
333
313
|
"fetch_failed": "获取最新版本失败: {{error}}",
|
|
334
314
|
"command_hint": "升级命令: {{command}}",
|
|
335
|
-
"auto_installing": "正在自动升级
|
|
336
|
-
"auto_installed": "
|
|
315
|
+
"auto_installing": "正在自动升级 VibeCLI 到 {{version}}...",
|
|
316
|
+
"auto_installed": "VibeCLI 已升级到 {{version}},正在重新执行当前命令...",
|
|
337
317
|
"auto_failed": "自动升级失败({{error}}),继续使用当前版本",
|
|
338
318
|
"reexec_failed": "升级成功但无法重新启动({{error}}),继续当前进程"
|
|
339
319
|
},
|
|
@@ -346,7 +326,7 @@
|
|
|
346
326
|
"usage": "用法: vibecli setup --key sk-xxx 或 vibecli setup --claudekey sk-a --codexkey sk-b --grokkey sk-c --desktopkey sk-d 或 vibecli setup --1m|--no-1m 或 vibecli setup --claude-official on|off",
|
|
347
327
|
"codex_1m_enabled": "Codex 1M 上下文已开启",
|
|
348
328
|
"codex_1m_disabled": "Codex 1M 上下文已关闭",
|
|
349
|
-
"codex_1m_missing_key": "未找到已保存的 Codex API Key
|
|
329
|
+
"codex_1m_missing_key": "未找到已保存的 Codex API Key;先运行 vibecli setup --codexkey <你的 Key>(或 --key)",
|
|
350
330
|
"validating": "正在验证 {{label}} 的 API Key...",
|
|
351
331
|
"invalid_key": "{{label}} 的 API Key 无效: {{reason}}",
|
|
352
332
|
"probe_failed": "{{label}} 的模型能力探测失败(网络原因),按全部可用继续",
|
|
@@ -362,7 +342,7 @@
|
|
|
362
342
|
"install_hint": "没检测到 {{tool}},运行 {{install}} 安装",
|
|
363
343
|
"done": "完成:已配置 {{count}} 个工具。",
|
|
364
344
|
"skip_desktop_not_installed": "未检测到已安装的 Claude Desktop,已跳过(装好后运行 vibecli setup --desktopkey sk-xxx 或在向导里配置)",
|
|
365
|
-
"desktop_official_login_missing_key": "未找到已保存的 Claude Desktop API Key
|
|
345
|
+
"desktop_official_login_missing_key": "未找到已保存的 Claude Desktop API Key;先运行 vibecli setup --desktopkey <你的 Key>(或 --key)",
|
|
366
346
|
"claude_official_invalid": "--claude-official 的值无效: {{value}}(只接受 on / off)",
|
|
367
347
|
"done_commands": "在终端输入 {{commands}} 开始使用",
|
|
368
348
|
"failed_summary": "{{count}} 个工具没有配好,原因见上方",
|
|
@@ -372,7 +352,7 @@
|
|
|
372
352
|
"restart_failed": "{{tool}} 没能自动重启,请完全退出后手动打开",
|
|
373
353
|
"elevation_running": "请在弹出的系统窗口里点「是」…",
|
|
374
354
|
"elevation_done": "{{tool}} 的注册表已更新",
|
|
375
|
-
"elevation_failed": "没能更新 {{tool}} 的注册表(系统确认被取消,或这个账号不是管理员):用管理员身份打开 PowerShell 再运行 vibecli setup",
|
|
355
|
+
"elevation_failed": "没能更新 {{tool}} 的注册表(系统确认被取消,或这个账号不是管理员):用管理员身份打开 PowerShell 再运行 vibecli setup --desktopkey <你的 Key>",
|
|
376
356
|
"desktop_registry_invalid": "--desktop-registry 只接受 on 或 off,收到的是 {{value}}"
|
|
377
357
|
},
|
|
378
358
|
"tools": {
|
|
@@ -387,7 +367,7 @@
|
|
|
387
367
|
},
|
|
388
368
|
"codex": {
|
|
389
369
|
"catalog_written": "模型菜单 {{count}} 个({{breakdown}}),Codex 桌面版重开后生效",
|
|
390
|
-
"catalog_skipped": "没读到 Codex 自带的模型列表(未安装或版本低于 0.122),模型菜单只有 GPT
|
|
370
|
+
"catalog_skipped": "没读到 Codex 自带的模型列表(未安装或版本低于 0.122),模型菜单只有 GPT;运行 vibecli upgrade codex 后再运行 vibecli config codex --non-interactive"
|
|
391
371
|
},
|
|
392
372
|
"claude_desktop": {
|
|
393
373
|
"restart_hint": "完全退出 Claude 桌面端再重新打开才会生效",
|
|
@@ -404,17 +384,17 @@
|
|
|
404
384
|
"policy_stale_write": "桌面端还在用注册表里的旧配置(多半是以前从网关页面下载 .reg 写入的);把新配置写进去需要管理员确认一次",
|
|
405
385
|
"elevate_remove": "删掉注册表里的旧配置吗?会弹出一次系统的管理员确认,之后更新桌面端不再需要管理员",
|
|
406
386
|
"elevate_write": "把新配置写进注册表吗?会弹出一次系统的管理员确认",
|
|
407
|
-
"refresh_needs_admin": "Claude 桌面端的模型列表在注册表里,更新它需要管理员确认:运行 vibecli setup
|
|
387
|
+
"refresh_needs_admin": "Claude 桌面端的模型列表在注册表里,更新它需要管理员确认:运行 vibecli setup --desktopkey <你的 Key>,按提示确认即可"
|
|
408
388
|
},
|
|
409
389
|
"claude_code": {
|
|
410
390
|
"gateway_models": "/model 菜单加入 {{count}} 个其他模型({{vendors}})",
|
|
411
391
|
"tier_fallback": "当前 Key 用不了 Claude Code 默认的 {{from}},{{tier}} 档已改用 {{to}}",
|
|
412
392
|
"stable_channel": "settings.json 里的更新渠道是 stable,这个渠道可能还没到 {{min}};把 autoUpdatesChannel 改成 latest 后再升级",
|
|
413
|
-
"managed_override": "检测到 Claude Code 的托管配置({{source}}),其中 {{keys}} 优先于
|
|
393
|
+
"managed_override": "检测到 Claude Code 的托管配置({{source}}),其中 {{keys}} 优先于 VibeCLI 写入的设置,会让这里的配置不生效;托管配置一般是公司电脑统一下发的,请联系管理员",
|
|
414
394
|
"no_git_bash": "没找到 Git for Windows:Claude Code 会改用 PowerShell 执行命令,可以用,但 bash 写法的命令和脚本跑不了;建议安装 Git(winget install Git.Git,或从国内镜像 https://registry.npmmirror.com/binary.html?path=git-for-windows/ 下载)",
|
|
415
395
|
"plugins_installed": "装好 {{count}} 个官方插件(代码审查、功能开发、前端设计等),输入 / 可以看到",
|
|
416
|
-
"plugins_failed": "官方插件没装上(多半是连不上 GitHub
|
|
417
|
-
"account_login_overridden": "这台电脑的 Claude Code 登录过 Claude 官方账号;
|
|
396
|
+
"plugins_failed": "官方插件没装上(多半是连不上 GitHub),不影响使用;网络好时再运行 vibecli config claude-code --non-interactive 即可",
|
|
397
|
+
"account_login_overridden": "这台电脑的 Claude Code 登录过 Claude 官方账号;VibeCLI 写入的 VibeAPI 令牌会优先生效,Claude Code 走 VibeAPI。要改回官方账号,用 vibecli config claude-code 移除 VibeAPI 配置"
|
|
418
398
|
},
|
|
419
399
|
"model_family": {
|
|
420
400
|
"gpt": "GPT",
|
|
@@ -462,7 +442,7 @@
|
|
|
462
442
|
"user_cancelled": "已取消安装",
|
|
463
443
|
"still_not_installed": "还是没找到 {{tool}},请确认安装成功、重开终端后再试",
|
|
464
444
|
"verified_success": "已找到 {{tool}},继续配置",
|
|
465
|
-
"install_failed_detail": "安装没有完成,详情见上面的输出或 vibecli logs"
|
|
445
|
+
"install_failed_detail": "安装没有完成,详情见上面的输出或 vibecli logs tail"
|
|
466
446
|
},
|
|
467
447
|
"model_refresh": {
|
|
468
448
|
"changed": "已按 VibeAPI 最新模型清单更新 {{tool}}:{{changes}}",
|
|
@@ -470,11 +450,11 @@
|
|
|
470
450
|
"removed": "移除 {{models}}"
|
|
471
451
|
},
|
|
472
452
|
"codex_sessions": {
|
|
473
|
-
"codex_running": "Codex 还在运行(进程 {{pids}}),它会覆盖这次修改:请先完全退出 Codex(含桌面版和后台服务)再运行",
|
|
453
|
+
"codex_running": "Codex 还在运行(进程 {{pids}}),它会覆盖这次修改:请先完全退出 Codex(含桌面版和后台服务)再运行 vibecli codex sessions",
|
|
474
454
|
"nothing": "已扫描 {{scanned}} 个会话,全都在「{{target}}」下,不用处理",
|
|
475
455
|
"dry_run": "将把 {{count}} 个会话从「{{from}}」移到「{{target}}」(试运行,未修改)",
|
|
476
|
-
"moved": "已把 {{count}} 个会话从「{{from}}」移到「{{target}}」,重开 Codex
|
|
477
|
-
"db_skipped": "Codex 的数据库没有更新({{reason}}),会话文件已改好;升级 Node.js 到 22.13
|
|
456
|
+
"moved": "已把 {{count}} 个会话从「{{from}}」移到「{{target}}」,重开 Codex 后都能在列表里看到;以后换回另一种登录方式时再运行 vibecli codex sessions",
|
|
457
|
+
"db_skipped": "Codex 的数据库没有更新({{reason}}),会话文件已改好;升级 Node.js 到 22.13 以上后再运行 vibecli codex sessions",
|
|
478
458
|
"backup": "备份与还原记录在 {{dir}},还原用 vibecli codex sessions --undo <这个目录>",
|
|
479
459
|
"undone": "已还原 {{files}} 个会话文件、{{rows}} 条数据库记录"
|
|
480
460
|
},
|
|
@@ -485,7 +465,7 @@
|
|
|
485
465
|
"usage_hint": "切换:vibecli base <序号或地址>;按上面的顺序自动选第一个能用的(不是最快的,尽量连主站):vibecli base auto;回到主站:vibecli base default",
|
|
486
466
|
"switched": "已切换到 {{url}}",
|
|
487
467
|
"kept": "当前地址 {{url}} 可用,已保存",
|
|
488
|
-
"no_tools": "这台电脑上没有用
|
|
468
|
+
"no_tools": "这台电脑上没有用 VibeCLI 配置过的工具,所以只保存了地址,其它配置都没动。自己手动配置的工具,请把里面的 www.vibeapi.cn 换成 {{url}};也可以运行 vibecli setup --key <你的 Key>,交给 VibeCLI 统一配置(会改写这些工具里的 VibeAPI 配置,改前自动备份)",
|
|
489
469
|
"none_reachable": "所有接入地址都连不上,请检查网络或代理",
|
|
490
470
|
"bad_index": "没有第 {{index}} 个地址(共 {{count}} 个),先运行 vibecli base 查看列表",
|
|
491
471
|
"bad_url": "{{value}} 不是有效的地址,示例:https://www.vibeapi.si",
|
|
@@ -500,8 +480,403 @@
|
|
|
500
480
|
"models_count": "{{count}} 个模型",
|
|
501
481
|
"fastest": "最快",
|
|
502
482
|
"error_key_rejected": "令牌被拒绝(无效或已过期)",
|
|
503
|
-
"key_rejected_everywhere": "
|
|
483
|
+
"key_rejected_everywhere": "所有地址都拒绝了这把令牌,令牌可能无效或已过期,请到控制台检查;换了新令牌后运行 vibecli setup --key <新 Key>",
|
|
504
484
|
"probe_with_key": "用你保存的令牌在每个地址拉一次模型列表,测 3 次取中位数",
|
|
505
485
|
"probe_without_key": "还没有保存令牌,只测网关能否打开;运行 vibecli setup --key <你的 Key> 后会改为实际拉模型列表"
|
|
486
|
+
},
|
|
487
|
+
"help": {
|
|
488
|
+
"help_command": "显示某个命令的帮助",
|
|
489
|
+
"default_value": "默认 {{value}}",
|
|
490
|
+
"placeholder": {
|
|
491
|
+
"command": "<命令>",
|
|
492
|
+
"subcommand": "<子命令>"
|
|
493
|
+
},
|
|
494
|
+
"learn_more": {
|
|
495
|
+
"command_help": "查看某个命令的用法和示例",
|
|
496
|
+
"docs": "在线文档:{{url}}",
|
|
497
|
+
"all_commands": "查看全部命令"
|
|
498
|
+
},
|
|
499
|
+
"title": {
|
|
500
|
+
"usage": "用法:",
|
|
501
|
+
"arguments": "参数:",
|
|
502
|
+
"options": "选项:",
|
|
503
|
+
"global_options": "全局选项:",
|
|
504
|
+
"commands": "命令:",
|
|
505
|
+
"examples": "示例:",
|
|
506
|
+
"learn_more": "了解更多:",
|
|
507
|
+
"when": "何时用:",
|
|
508
|
+
"prerequisites": "前提:",
|
|
509
|
+
"alternatives": "替代:"
|
|
510
|
+
},
|
|
511
|
+
"group": {
|
|
512
|
+
"global_options": "全局选项:",
|
|
513
|
+
"configure": "配置:",
|
|
514
|
+
"diagnose": "诊断:",
|
|
515
|
+
"maintain": "维护:"
|
|
516
|
+
},
|
|
517
|
+
"global": {
|
|
518
|
+
"help": "显示帮助",
|
|
519
|
+
"version": "显示版本号",
|
|
520
|
+
"base": "接入地址(setup / init / auth / config 会保存,其他命令只本次生效)",
|
|
521
|
+
"non_interactive": "不弹出任何提问(脚本、CI 用)",
|
|
522
|
+
"json": "输出 JSON(支持的命令)",
|
|
523
|
+
"yes": "需要确认时自动选默认答案",
|
|
524
|
+
"dry_run": "只显示会改什么,不写入",
|
|
525
|
+
"no_color": "不用颜色"
|
|
526
|
+
},
|
|
527
|
+
"root": {
|
|
528
|
+
"summary": "在多个编码工具里统一配置 VibeAPI 的 Key 和模型",
|
|
529
|
+
"description": "VibeCLI:在 Claude Code、Codex、Grok Build 等编码工具里统一配置 VibeAPI 的 Key 和模型。\n不带命令运行 vibecli 会打开主菜单。",
|
|
530
|
+
"ex": {
|
|
531
|
+
"menu": "打开主菜单",
|
|
532
|
+
"setup": "用一把 Key 配好它能用的所有工具",
|
|
533
|
+
"doctor": "检查配置和网络问题",
|
|
534
|
+
"base": "主域名连不上时换到能用的地址",
|
|
535
|
+
"config": "打开 Codex 的配置菜单"
|
|
536
|
+
}
|
|
537
|
+
},
|
|
538
|
+
"setup": {
|
|
539
|
+
"summary": "一条命令配好工具(按 Key 能用的模型自动选)",
|
|
540
|
+
"description": "不进向导,一条命令写好配置。\n--key 先用 Key 拉模型列表,按能用的模型配置对应工具(见下表)。\n不同分组的 Key 用 --claudekey / --codexkey / --grokkey / --desktopkey 分开给。\n重复执行就是换 Key,其他配置保留。",
|
|
541
|
+
"opt": {
|
|
542
|
+
"key": "一把 Key,按它能用的模型自动配置工具",
|
|
543
|
+
"claudekey": "单独给 Claude Code 的 Key",
|
|
544
|
+
"codexkey": "单独给 Codex 的 Key",
|
|
545
|
+
"grokkey": "单独给 Grok Build 的 Key",
|
|
546
|
+
"desktopkey": "单独给 Claude Desktop 的 Key",
|
|
547
|
+
"one_m": "Codex 打开 1M 上下文",
|
|
548
|
+
"no_one_m": "Codex 关闭 1M 上下文",
|
|
549
|
+
"claude_official": "Claude Desktop 是否显示 Claude.ai 登录入口(默认 off)",
|
|
550
|
+
"desktop_registry": "Windows Claude Desktop 一律写注册表策略(on)或自动判断(off)",
|
|
551
|
+
"force": "先备份,再用推荐配置整份重写(修复被改坏的配置)",
|
|
552
|
+
"all": "配置 Key 能用的全部工具(默认就是这样)"
|
|
553
|
+
},
|
|
554
|
+
"autodetect_title": "--key 能用的模型 → 自动配置的工具:",
|
|
555
|
+
"autodetect": {
|
|
556
|
+
"claude": "Claude Code(装了 Claude Desktop 也一起配)",
|
|
557
|
+
"gpt": "Codex",
|
|
558
|
+
"grok": "Grok Build",
|
|
559
|
+
"gemini": "Antigravity CLI(装了才配)"
|
|
560
|
+
},
|
|
561
|
+
"ex": {
|
|
562
|
+
"key": "用一把 Key 配好它能用的所有工具",
|
|
563
|
+
"split": "Claude 和 GPT 分组的 Key 分开配",
|
|
564
|
+
"desktop": "配 Claude Desktop,隐藏 Claude.ai 登录入口",
|
|
565
|
+
"force": "配置被改坏时整份重写(会先备份)",
|
|
566
|
+
"base": "在备用地址上配置"
|
|
567
|
+
},
|
|
568
|
+
"when": "拿到 Key 后第一次配置,或者换 Key、修复被改坏的配置时。",
|
|
569
|
+
"needs": "一把 VibeAPI 的 API Key(在控制台的「令牌」页创建)\nClaude Code、Codex、Grok Build 可以之后再装:没装也会先写好配置,并给出安装命令;Claude Desktop 和 Antigravity CLI 要先装好才会配置",
|
|
570
|
+
"alt": {
|
|
571
|
+
"init": "想一步步选工具和模型",
|
|
572
|
+
"config": "只改一个工具",
|
|
573
|
+
"auth": "只保存 Key,不写工具配置"
|
|
574
|
+
}
|
|
575
|
+
},
|
|
576
|
+
"init": {
|
|
577
|
+
"summary": "首次使用的配置向导",
|
|
578
|
+
"description": "一步步引导你填 Key、选工具并写好配置。\n直接运行 vibecli(不带命令)打开主菜单。",
|
|
579
|
+
"ex": {
|
|
580
|
+
"run": "运行配置向导",
|
|
581
|
+
"base": "在备用地址上运行向导",
|
|
582
|
+
"menu": "打开主菜单"
|
|
583
|
+
},
|
|
584
|
+
"when": "第一次使用,想一步步回答问题完成配置时。",
|
|
585
|
+
"needs": "一把 VibeAPI 的 API Key",
|
|
586
|
+
"alt": {
|
|
587
|
+
"setup": "不想回答问题,或在脚本里配置",
|
|
588
|
+
"menu": "已经配置过,只想改某一项"
|
|
589
|
+
}
|
|
590
|
+
},
|
|
591
|
+
"auth": {
|
|
592
|
+
"summary": "保存或撤销 API Key",
|
|
593
|
+
"description": "不带参数:提示你输入 Key。\n带 Key:校验后保存到 ~/.vibecli/config.yaml。",
|
|
594
|
+
"arg": {
|
|
595
|
+
"token": "要保存的 API Key"
|
|
596
|
+
},
|
|
597
|
+
"revoke": "删除已保存的 API Key",
|
|
598
|
+
"reload": "把已保存的 Key 重新写进 Claude Code(claude / claude-code)",
|
|
599
|
+
"ex": {
|
|
600
|
+
"prompt": "提示输入 Key",
|
|
601
|
+
"save": "直接保存一把 Key",
|
|
602
|
+
"revoke": "删除已保存的 Key,不再询问",
|
|
603
|
+
"reload": "把 Key 重新写进 Claude Code",
|
|
604
|
+
"revoke_ask": "删除已保存的 Key(会先确认)",
|
|
605
|
+
"reload_json": "同上,输出 JSON"
|
|
606
|
+
},
|
|
607
|
+
"when": "只想保存、更换或删除 Key,不动工具配置时。",
|
|
608
|
+
"alt": {
|
|
609
|
+
"setup": "保存 Key 并同时写好工具配置"
|
|
610
|
+
}
|
|
611
|
+
},
|
|
612
|
+
"config": {
|
|
613
|
+
"summary": "按工具配置;管理 profile、模型预设和备份",
|
|
614
|
+
"description": "不带参数:选一个工具,打开它的配置菜单。\n子命令和工具名见下表。",
|
|
615
|
+
"arg": {
|
|
616
|
+
"args": "子命令和参数(见下表)"
|
|
617
|
+
},
|
|
618
|
+
"opt": {
|
|
619
|
+
"force": "先备份,再用推荐配置整份重写该工具的配置"
|
|
620
|
+
},
|
|
621
|
+
"subcommands_title": "子命令:",
|
|
622
|
+
"sub": {
|
|
623
|
+
"tool": "打开该工具的配置菜单",
|
|
624
|
+
"tool_force": "先备份,再用推荐配置整份重写",
|
|
625
|
+
"tool_non_interactive": "不弹菜单,用已保存的 Key 直接写配置",
|
|
626
|
+
"tool_restore": "还原该工具最近一次备份",
|
|
627
|
+
"tool_backups": "列出该工具的备份",
|
|
628
|
+
"tool_clear_model": "只清除写死的模型设置,保留 Key、hooks、MCP 和插件",
|
|
629
|
+
"tool_model_list": "列出各工具单独设的模型",
|
|
630
|
+
"tool_model_set": "给某个工具单独设模型(slot 默认 opus,即主模型)",
|
|
631
|
+
"tool_model_clear": "清除某个工具单独设的模型",
|
|
632
|
+
"profile_list": "列出 profile(一套 Key + 地址 + 模型)",
|
|
633
|
+
"profile_create": "新建 profile",
|
|
634
|
+
"profile_use": "切换到某个 profile",
|
|
635
|
+
"profile_delete": "删除 profile",
|
|
636
|
+
"preset_list": "列出模型预设",
|
|
637
|
+
"preset_save": "把当前模型组合存成预设",
|
|
638
|
+
"preset_use": "使用某个预设",
|
|
639
|
+
"preset_delete": "删除预设",
|
|
640
|
+
"backup_list": "列出 VibeCLI 配置的备份",
|
|
641
|
+
"backup_create": "备份 VibeCLI 配置(可加标签)",
|
|
642
|
+
"backup_restore": "从备份还原 VibeCLI 配置"
|
|
643
|
+
},
|
|
644
|
+
"tools_title": "工具名:",
|
|
645
|
+
"ex": {
|
|
646
|
+
"menu": "打开 Codex 的配置菜单",
|
|
647
|
+
"force": "把 Claude Code 的配置整份重写",
|
|
648
|
+
"tool_model": "Codex 单独用某个模型",
|
|
649
|
+
"profile": "新建一个叫 work 的 profile",
|
|
650
|
+
"backup": "升级前备份 VibeCLI 配置"
|
|
651
|
+
},
|
|
652
|
+
"when": "调整单个工具(换模型、重写或还原配置),或管理 profile、模型预设和备份时。",
|
|
653
|
+
"needs": "写工具配置前要先保存 Key:vibecli auth <key> 或 vibecli setup --key <key>",
|
|
654
|
+
"alt": {
|
|
655
|
+
"setup": "一次重写所有工具的配置",
|
|
656
|
+
"status": "只看当前配置,不修改"
|
|
657
|
+
}
|
|
658
|
+
},
|
|
659
|
+
"base": {
|
|
660
|
+
"summary": "查看、测速并切换接入地址",
|
|
661
|
+
"description": "主域名连不上或证书报错时,换一个接入地址。\n切换后,用 VibeCLI 保存的 Key 配过的工具会一起改到新地址。",
|
|
662
|
+
"arg": {
|
|
663
|
+
"target": "切换到哪里(见下表),不填就列出地址并测试"
|
|
664
|
+
},
|
|
665
|
+
"targets_title": "目标写法:",
|
|
666
|
+
"target": {
|
|
667
|
+
"none_term": "(不填)",
|
|
668
|
+
"none": "列出全部地址并逐个测试,标出当前地址",
|
|
669
|
+
"index_term": "<序号>",
|
|
670
|
+
"index": "切到列表里的第 n 个地址",
|
|
671
|
+
"url_term": "<地址>",
|
|
672
|
+
"url": "切到指定地址,如 https://www.vibeapi.si",
|
|
673
|
+
"auto": "按列表顺序切到第一个能用的(不是最快的,尽量连主站)",
|
|
674
|
+
"default": "回到主站 {{url}}"
|
|
675
|
+
},
|
|
676
|
+
"ex": {
|
|
677
|
+
"list": "列出地址并测试",
|
|
678
|
+
"auto": "自动换到第一个能用的地址",
|
|
679
|
+
"index": "切到列表里的第 2 个地址",
|
|
680
|
+
"url": "切到指定地址",
|
|
681
|
+
"default": "回到主站"
|
|
682
|
+
},
|
|
683
|
+
"when": "工具报连接失败、超时或证书错误时。",
|
|
684
|
+
"needs": "保存过 Key 时会用它确认线路真的能用;没有 Key 只测网关是否在线",
|
|
685
|
+
"alt": {
|
|
686
|
+
"doctor": "不确定是不是地址的问题",
|
|
687
|
+
"bench": "只测延迟,不切换"
|
|
688
|
+
}
|
|
689
|
+
},
|
|
690
|
+
"status": {
|
|
691
|
+
"summary": "查看当前配置",
|
|
692
|
+
"description": "显示当前的 Key、接入地址、语言、模型,以及各工具是否已配置。",
|
|
693
|
+
"ex": {
|
|
694
|
+
"show": "查看当前配置",
|
|
695
|
+
"json": "输出 JSON,给脚本读"
|
|
696
|
+
},
|
|
697
|
+
"when": "想确认现在用的是哪个 Key、地址和模型时。",
|
|
698
|
+
"alt": {
|
|
699
|
+
"doctor": "要检查配置能不能用,而不只是查看"
|
|
700
|
+
}
|
|
701
|
+
},
|
|
702
|
+
"doctor": {
|
|
703
|
+
"summary": "检查配置和网络问题",
|
|
704
|
+
"description": "检查 Key、网络、代理、已安装的工具和它们的配置,并给出处理办法。",
|
|
705
|
+
"opt": {
|
|
706
|
+
"deep": "再用 Claude Code 真实发一条请求(消耗少量额度)"
|
|
707
|
+
},
|
|
708
|
+
"ex": {
|
|
709
|
+
"run": "做一次检查",
|
|
710
|
+
"deep": "连 Claude Code 实际请求一起检查"
|
|
711
|
+
},
|
|
712
|
+
"when": "工具报错(401、连不上、找不到模型)又不知道原因时。",
|
|
713
|
+
"alt": {
|
|
714
|
+
"base": "已经确定是接入地址连不上",
|
|
715
|
+
"logs": "要把出错细节发给客服"
|
|
716
|
+
}
|
|
717
|
+
},
|
|
718
|
+
"bench": {
|
|
719
|
+
"summary": "测接入地址的延迟",
|
|
720
|
+
"description": "用已保存的 Key 向当前接入地址请求几次模型列表,统计耗时。",
|
|
721
|
+
"opt": {
|
|
722
|
+
"samples": "请求次数"
|
|
723
|
+
},
|
|
724
|
+
"ex": {
|
|
725
|
+
"run": "请求 5 次",
|
|
726
|
+
"samples": "只请求 3 次",
|
|
727
|
+
"json": "输出 JSON"
|
|
728
|
+
},
|
|
729
|
+
"when": "感觉变慢,或想看当前地址的延迟时。",
|
|
730
|
+
"needs": "已保存 Key(vibecli auth <key>)",
|
|
731
|
+
"alt": {
|
|
732
|
+
"base": "一次测试全部地址,并可切换"
|
|
733
|
+
}
|
|
734
|
+
},
|
|
735
|
+
"logs": {
|
|
736
|
+
"summary": "查看 VibeCLI 日志",
|
|
737
|
+
"description": "日志按天存在 ~/.vibecli 目录。出问题时可以把 tail 的输出发给客服。",
|
|
738
|
+
"arg": {
|
|
739
|
+
"action": "list / tail / path(默认 list)",
|
|
740
|
+
"file": "tail 时指定日志文件"
|
|
741
|
+
},
|
|
742
|
+
"actions_title": "动作:",
|
|
743
|
+
"action": {
|
|
744
|
+
"list": "列出日志文件",
|
|
745
|
+
"tail": "显示最新日志的末尾(或指定文件)",
|
|
746
|
+
"path": "显示日志目录"
|
|
747
|
+
},
|
|
748
|
+
"ex": {
|
|
749
|
+
"list": "列出日志文件",
|
|
750
|
+
"tail": "看最新日志",
|
|
751
|
+
"path": "显示日志目录"
|
|
752
|
+
},
|
|
753
|
+
"when": "命令出错想看细节,或客服要日志时。",
|
|
754
|
+
"alt": {
|
|
755
|
+
"doctor": "先自查常见问题"
|
|
756
|
+
}
|
|
757
|
+
},
|
|
758
|
+
"upgrade": {
|
|
759
|
+
"summary": "升级 Claude Code、Codex 等编码工具",
|
|
760
|
+
"description": "先走工具自己的官方更新;失败时改用 VibeAPI 一键安装脚本(程序取自国内镜像)。\n不填工具名就升级已安装的全部。\n升级 VibeCLI 自己用 vibecli update。",
|
|
761
|
+
"arg": {
|
|
762
|
+
"tools": "claude-code / codex / agy,可以写多个"
|
|
763
|
+
},
|
|
764
|
+
"ex": {
|
|
765
|
+
"all": "升级已安装的全部工具",
|
|
766
|
+
"one": "只升级 Claude Code",
|
|
767
|
+
"many": "升级 Codex 和 Antigravity CLI"
|
|
768
|
+
},
|
|
769
|
+
"when": "vibecli doctor 提示版本过低,或工具自带的更新失败时。",
|
|
770
|
+
"needs": "不写工具名时只升级已经安装的工具",
|
|
771
|
+
"alt": {
|
|
772
|
+
"update": "升级 VibeCLI 自己"
|
|
773
|
+
}
|
|
774
|
+
},
|
|
775
|
+
"update": {
|
|
776
|
+
"summary": "检查 VibeCLI 有没有新版本",
|
|
777
|
+
"description": "依次查 CNB、npmjs、npmmirror、Yarn 源,有新版时给出安装命令。\n全局安装的 VibeCLI 启动时也会自动检查(6 小时一次)。",
|
|
778
|
+
"ex": {
|
|
779
|
+
"check": "检查新版本",
|
|
780
|
+
"json": "输出 JSON"
|
|
781
|
+
},
|
|
782
|
+
"when": "想确认 VibeCLI 是不是最新版时。",
|
|
783
|
+
"alt": {
|
|
784
|
+
"upgrade": "升级 Claude Code、Codex 等工具"
|
|
785
|
+
}
|
|
786
|
+
},
|
|
787
|
+
"codex": {
|
|
788
|
+
"summary": "Codex 辅助功能",
|
|
789
|
+
"description": "Codex 相关的辅助命令。",
|
|
790
|
+
"when": "Codex 出现 VibeCLI 能修的问题时(目前是会话列表变空)。"
|
|
791
|
+
},
|
|
792
|
+
"codex_sessions": {
|
|
793
|
+
"summary": "让旧会话重新出现在 Codex 列表里",
|
|
794
|
+
"description": "Codex 按服务商筛选会话,换过登录方式或服务商后旧会话会被隐藏。\n这个命令把本地会话改到当前服务商;会先备份,可用 --undo 撤销。\n运行前请先退出 Codex。",
|
|
795
|
+
"opt": {
|
|
796
|
+
"to": "改到哪个服务商(默认 Codex 当前用的)",
|
|
797
|
+
"undo": "按这个备份目录把会话改回去"
|
|
798
|
+
},
|
|
799
|
+
"ex": {
|
|
800
|
+
"move": "把所有会话改到当前服务商",
|
|
801
|
+
"to": "把会话改到 custom 服务商",
|
|
802
|
+
"undo": "撤销上一次修改(目录见上次输出)"
|
|
803
|
+
},
|
|
804
|
+
"when": "Codex 的历史会话列表变空或少了时。",
|
|
805
|
+
"needs": "先退出 Codex(运行中会拒绝修改)",
|
|
806
|
+
"alt": {
|
|
807
|
+
"undo": "改完不满意,想改回去"
|
|
808
|
+
}
|
|
809
|
+
},
|
|
810
|
+
"lang": {
|
|
811
|
+
"summary": "切换界面语言",
|
|
812
|
+
"description": "查看或设置 VibeCLI 的界面语言(zh_CN / en_US)。",
|
|
813
|
+
"show": "显示当前语言",
|
|
814
|
+
"set": "设置语言:zh_CN 或 en_US",
|
|
815
|
+
"ex": {
|
|
816
|
+
"show": "显示当前语言",
|
|
817
|
+
"set_en": "改成英文",
|
|
818
|
+
"set_zh": "改成中文",
|
|
819
|
+
"show_json": "输出 JSON,含可选语言"
|
|
820
|
+
},
|
|
821
|
+
"when": "界面语言不对时。",
|
|
822
|
+
"alt": {
|
|
823
|
+
"enter": "用菜单选择语言"
|
|
824
|
+
}
|
|
825
|
+
},
|
|
826
|
+
"completion": {
|
|
827
|
+
"summary": "输出命令补全脚本",
|
|
828
|
+
"description": "输出 bash / zsh / fish 的补全脚本。保存到文件后在 shell 配置里 source 它(fish 放进补全目录即可)。",
|
|
829
|
+
"arg": {
|
|
830
|
+
"shell": "bash / zsh / fish"
|
|
831
|
+
},
|
|
832
|
+
"ex": {
|
|
833
|
+
"bash": "生成 bash 补全",
|
|
834
|
+
"zsh": "生成 zsh 补全",
|
|
835
|
+
"fish": "生成 fish 补全"
|
|
836
|
+
},
|
|
837
|
+
"when": "想按 Tab 键补全 VibeCLI 的命令时。",
|
|
838
|
+
"needs": "使用 bash、zsh 或 fish"
|
|
839
|
+
},
|
|
840
|
+
"enter": {
|
|
841
|
+
"summary": "直接打开某个配置菜单",
|
|
842
|
+
"description": "不经过主菜单,直接打开指定的配置菜单。",
|
|
843
|
+
"arg": {
|
|
844
|
+
"option": "要打开的菜单(见下表)"
|
|
845
|
+
},
|
|
846
|
+
"options_title": "菜单:",
|
|
847
|
+
"option": {
|
|
848
|
+
"none_term": "(不填)",
|
|
849
|
+
"none": "主菜单",
|
|
850
|
+
"lang": "语言设置",
|
|
851
|
+
"apikey": "API Key 设置",
|
|
852
|
+
"models": "模型设置",
|
|
853
|
+
"tool": "该工具的配置菜单(同 vibecli config <tool>)"
|
|
854
|
+
},
|
|
855
|
+
"ex": {
|
|
856
|
+
"menu": "打开主菜单",
|
|
857
|
+
"models": "打开模型设置",
|
|
858
|
+
"tool": "打开 Codex 的配置菜单"
|
|
859
|
+
},
|
|
860
|
+
"when": "知道要改哪一项,想跳过主菜单时。",
|
|
861
|
+
"alt": {
|
|
862
|
+
"menu": "从主菜单开始选",
|
|
863
|
+
"config": "直接用命令配置某个工具"
|
|
864
|
+
}
|
|
865
|
+
},
|
|
866
|
+
"doc": {
|
|
867
|
+
"generated_note": "由 pnpm gen:docs 生成,请勿手改。改命令或说明请改 src/lib/program.ts 和 src/locales/*.json",
|
|
868
|
+
"title": "VibeCLI 命令参考",
|
|
869
|
+
"docs_link": "在线版:{{url}}",
|
|
870
|
+
"global_note": "全局选项可以和任何命令一起用。",
|
|
871
|
+
"option": "选项",
|
|
872
|
+
"description": "说明",
|
|
873
|
+
"argument": "参数",
|
|
874
|
+
"command": "命令",
|
|
875
|
+
"item": "写法",
|
|
876
|
+
"global_inherited": "另可使用[全局选项](#{{anchor}}):{{options}}",
|
|
877
|
+
"see_also": "另见",
|
|
878
|
+
"back_to_index": "命令列表",
|
|
879
|
+
"use_instead": "什么情况下改用它"
|
|
880
|
+
}
|
|
506
881
|
}
|
|
507
882
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeapi/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.86",
|
|
4
4
|
"description": "CLI tool for managing AI coding assistants (Claude Code, Codex, OpenClaw, Hermes, AtomCode, Grok Build) with one unified config",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@iarna/toml": "^2.2.5",
|
|
52
52
|
"chalk": "^5.3.0",
|
|
53
|
-
"commander": "^
|
|
53
|
+
"commander": "^14.0.3",
|
|
54
54
|
"inquirer": "^9.2.12",
|
|
55
55
|
"js-yaml": "^4.3.2",
|
|
56
56
|
"ora": "^8.0.1",
|
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"test:watch": "vitest",
|
|
88
88
|
"test:coverage": "vitest run --coverage",
|
|
89
89
|
"typecheck": "tsc --noEmit",
|
|
90
|
+
"gen:docs": "tsx scripts/gen-command-docs.mjs",
|
|
90
91
|
"lint": "eslint .",
|
|
91
92
|
"lint:fix": "eslint . --fix",
|
|
92
93
|
"format": "prettier --write .",
|