@xship/cli 0.0.0-stage → 0.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +68 -2
  3. package/THIRD_PARTY_NOTICES.md +10 -0
  4. package/client-config.snapshot.json +377 -0
  5. package/codex-base-instructions.md +277 -0
  6. package/dist/brand.json +45 -0
  7. package/dist/cli.js +2 -0
  8. package/dist/client-config.snapshot.json +377 -0
  9. package/dist/commands/auth.js +1 -0
  10. package/dist/commands/base.js +1 -0
  11. package/dist/commands/bench.js +1 -0
  12. package/dist/commands/codex-sessions.js +1 -0
  13. package/dist/commands/completion.js +1 -0
  14. package/dist/commands/config.js +1 -0
  15. package/dist/commands/doctor.js +1 -0
  16. package/dist/commands/index.js +1 -0
  17. package/dist/commands/lang.js +1 -0
  18. package/dist/commands/logs.js +1 -0
  19. package/dist/commands/refresh.js +1 -0
  20. package/dist/commands/sessions.js +1 -0
  21. package/dist/commands/setup.js +1 -0
  22. package/dist/commands/status.js +1 -0
  23. package/dist/commands/update.js +1 -0
  24. package/dist/commands/upgrade.js +1 -0
  25. package/dist/index.js +1 -0
  26. package/dist/lib/api-validator.js +1 -0
  27. package/dist/lib/auto-update.js +1 -0
  28. package/dist/lib/brand.js +1 -0
  29. package/dist/lib/claude-code-manager.js +1 -0
  30. package/dist/lib/cli-help.js +1 -0
  31. package/dist/lib/client-config-sync.js +1 -0
  32. package/dist/lib/client-config.js +1 -0
  33. package/dist/lib/codex-sessions.js +1 -0
  34. package/dist/lib/command-docs.js +1 -0
  35. package/dist/lib/command.js +1 -0
  36. package/dist/lib/config.js +1 -0
  37. package/dist/lib/confirm.js +1 -0
  38. package/dist/lib/dry-run.js +1 -0
  39. package/dist/lib/env-cleanup.js +1 -0
  40. package/dist/lib/errors.js +1 -0
  41. package/dist/lib/gateway-addresses.js +1 -0
  42. package/dist/lib/gateway-models.js +1 -0
  43. package/dist/lib/gateway-protocol.js +1 -0
  44. package/dist/lib/i18n.js +1 -0
  45. package/dist/lib/key-balance.js +1 -0
  46. package/dist/lib/model-catalog.js +1 -0
  47. package/dist/lib/model-refresh.js +1 -0
  48. package/dist/lib/model-registry.js +1 -0
  49. package/dist/lib/opencode-manager.js +1 -0
  50. package/dist/lib/persistent-env.js +1 -0
  51. package/dist/lib/post-apply.js +1 -0
  52. package/dist/lib/program.js +1 -0
  53. package/dist/lib/runtime-options.js +1 -0
  54. package/dist/lib/secret-store.js +1 -0
  55. package/dist/lib/sessions/formats.js +1 -0
  56. package/dist/lib/sessions/index.js +1 -0
  57. package/dist/lib/settings-template.js +1 -0
  58. package/dist/lib/stream-check.js +1 -0
  59. package/dist/lib/telemetry.js +1 -0
  60. package/dist/lib/tool-manager.js +1 -0
  61. package/dist/lib/tool-upgrade.js +1 -0
  62. package/dist/lib/tools/antigravity.js +1 -0
  63. package/dist/lib/tools/atomcode.js +1 -0
  64. package/dist/lib/tools/backup.js +1 -0
  65. package/dist/lib/tools/claude-code.js +1 -0
  66. package/dist/lib/tools/claude-desktop-cli.js +1 -0
  67. package/dist/lib/tools/claude-desktop.js +1 -0
  68. package/dist/lib/tools/claude-managed.js +1 -0
  69. package/dist/lib/tools/claude-native-mirror.js +1 -0
  70. package/dist/lib/tools/claude-plugins.js +1 -0
  71. package/dist/lib/tools/codex-catalog.js +1 -0
  72. package/dist/lib/tools/codex.js +1 -0
  73. package/dist/lib/tools/desktop-process.js +1 -0
  74. package/dist/lib/tools/elevated-reg.js +1 -0
  75. package/dist/lib/tools/grok.js +1 -0
  76. package/dist/lib/tools/hermes.js +1 -0
  77. package/dist/lib/tools/openclaw.js +1 -0
  78. package/dist/lib/tools/opencode.js +1 -0
  79. package/dist/lib/tools/registry.js +1 -0
  80. package/dist/lib/tools/tool-installs.js +1 -0
  81. package/dist/lib/tools/types.js +1 -0
  82. package/dist/lib/windows-env.js +1 -0
  83. package/dist/lib/wizard.js +1 -0
  84. package/dist/lib/write-plan.js +1 -0
  85. package/dist/locales/en_US.json +1051 -0
  86. package/dist/locales/zh_CN.json +1051 -0
  87. package/dist/models.json +301 -0
  88. package/dist/settings-template.json +18 -0
  89. package/dist/utils/logger.js +1 -0
  90. package/dist/utils/string-width.js +1 -0
  91. package/models.json +301 -0
  92. package/package.json +48 -4
  93. package/settings-template.json +18 -0
@@ -0,0 +1,1051 @@
1
+ {
2
+ "cli": {
3
+ "error_unknown": "Unknown command: {{command}}",
4
+ "unknown_hint": "Next: run {{cli}} --help to see the available commands.",
5
+ "unknown_hint_suggestion": "Did you mean {{cli}} {{command}}?",
6
+ "err_unknown_option": "Unknown option: {{name}}",
7
+ "err_missing_argument": "Missing argument: {{name}}",
8
+ "err_missing_option": "Missing required option: {{name}}",
9
+ "unknown_option_hint": "Next: run {{cli}} {{command}} --help to see the correct usage.",
10
+ "unknown_option_hint_root": "Next: run {{cli}} --help to see the correct usage."
11
+ },
12
+ "lang": {
13
+ "current": "Current language",
14
+ "show_usage": "{{cli}} lang show: show the current language",
15
+ "set_usage": "{{cli}} lang set <zh_CN|en_US>: set the language",
16
+ "changed": "Language changed from {{from}} to {{to}}",
17
+ "invalid": "Unsupported language: {{lang}}",
18
+ "available": "Available languages"
19
+ },
20
+ "auth": {
21
+ "token_prompt": "Enter your API key",
22
+ "token_required": "Enter an API key",
23
+ "saved": "API key saved",
24
+ "revoke_confirm": "Delete the API keys saved in this profile (including per-tool keys)?",
25
+ "revoked": "Saved API keys deleted",
26
+ "not_revoked": "Deletion cancelled",
27
+ "reload_tool_not_supported": "Reloading {{tool}} is not supported",
28
+ "reload_missing_config": "No saved API key yet. Run {{cli}} setup --key <your API key> first",
29
+ "reloading": "Writing the config to {{tool}} again…",
30
+ "reloaded": "Config written to {{tool}} again",
31
+ "reload_failed": "Couldn't rewrite the config:"
32
+ },
33
+ "wizard": {
34
+ "banner_subtitle": "Manage Your Claude Code and Other Coding Tools",
35
+ "welcome": "Welcome to {{product}}",
36
+ "privacy_note": "Configs and API keys stay on this computer; usage statistics (commands and error messages, never API keys) are sent to {{brand}}. Set {{envPrefix}}_TELEMETRY=0 to turn them off.",
37
+ "select_language": "Select interface language",
38
+ "input_api_key": "Enter API key",
39
+ "api_key_input_hint": "Enter your API key (input is hidden)",
40
+ "input_your_api_key": "Enter your API key here and press Enter:",
41
+ "api_key_required": "Enter an API key",
42
+ "select_tool": "Select coding tool to configure",
43
+ "tool_not_installed": "{{tool}} is not installed",
44
+ "install_tool_confirm": "Install now?",
45
+ "tool_installed": "Installed",
46
+ "install_failed": "Couldn't complete the installation",
47
+ "install_skipped": "Installation skipped. You can install it yourself later.",
48
+ "menu_title": "Management Menu",
49
+ "select_action": "Select action",
50
+ "retry_input": "Re-enter",
51
+ "action_load_config": "Apply configuration: write your API key and model settings to {{tool}}",
52
+ "action_unload_config": "Remove configuration: delete the API key, gateway address and model settings from {{tool}}",
53
+ "action_clear_model": "Clear model settings: let {{tool}} use its built-in default; API key kept",
54
+ "loading_config": "Applying configuration…",
55
+ "run_tool_hint": "✅ Run `{{command}}` now to use the new configuration",
56
+ "config_failed": "Couldn't apply the configuration",
57
+ "confirm_unload_config": "Remove the configuration from {{tool}}?",
58
+ "confirm_clear_model": "Clear the pinned model settings for {{tool}}? Your API key, hooks and MCP config stay unchanged.",
59
+ "unloading_config": "Removing configuration…",
60
+ "config_unloaded": "Configuration removed",
61
+ "config_unload_failed": "Couldn't remove the configuration",
62
+ "config_models": "Model Configuration",
63
+ "not_set": "Not set",
64
+ "press_enter": "Press Enter to continue",
65
+ "api_key_get_hint": "Don't have an API key yet? Create one on the Tokens page of the console: {{url}}",
66
+ "menu_config_language": "Language",
67
+ "menu_change_api_key": "Change API key",
68
+ "settings": "Settings",
69
+ "goodbye_message": "Goodbye. To configure more tools, run {{cli}} setup --key <your API key>",
70
+ "lang_auto_zh": "Your system language is Chinese, so the Chinese interface is used. Switch anytime from the main menu or with {{cli}} lang set en_US.",
71
+ "goodbye_message_tools": "Goodbye. Type {{commands}} in your terminal to start coding.",
72
+ "goodbye_claude_hint": "You can also install the Claude extension in VS Code to use Claude Code.",
73
+ "nav_return": "Return",
74
+ "nav_exit": "Exit",
75
+ "current_active": "Current",
76
+ "hint_navigate": "↑↓ Navigate",
77
+ "hint_confirm": "Enter Confirm",
78
+ "validating_api_key": "Validating API key…",
79
+ "api_key_valid": "API key is valid",
80
+ "api_key_invalid": "API key is invalid or expired",
81
+ "api_key_network_error": "Couldn't validate the API key: network or gateway error. Check your connection, or run {{cli}} base auto to switch the gateway address",
82
+ "please_config_api_key_first": "Configure a valid API key first",
83
+ "please_reconfig_api_key": "Reconfigure your API key",
84
+ "select_model_config": "Select model",
85
+ "recommended": "Recommended",
86
+ "other_models": "Other Models",
87
+ "custom_model_input": "Enter a model name",
88
+ "input_custom_model": "Enter the model name",
89
+ "model_haiku": "Haiku model (fast)",
90
+ "model_sonnet": "Sonnet model (balanced)",
91
+ "model_opus": "Opus model (powerful)",
92
+ "model_reasoning": "Reasoning model",
93
+ "models_saved": "Model configuration saved",
94
+ "use_default_model": "Use default model ({{model}})",
95
+ "model_builtin_default": "tool built-in default",
96
+ "select_tool_model": "Select the model for {{tool}}",
97
+ "fetch_models_from_api": "Fetch models from the gateway…",
98
+ "fetching_models": "Fetching the model list…",
99
+ "fetch_models_failed": "Couldn't fetch the model list; enter a model ID manually",
100
+ "select_fetched_model": "Select a model",
101
+ "claude_model_hint": "Tip: inside Claude Code you can switch models anytime with the /model command",
102
+ "codex_enable_1m_context": "Enable the 1M context window for Codex?",
103
+ "action_restore_config": "↩️ Restore {{tool}} to before the last change",
104
+ "confirm_restore_config": "Restore {{tool}} to before the last change? The current state is backed up first, so you can undo this.",
105
+ "restoring_config": "Restoring config…",
106
+ "config_restored": "{{tool}} config restored",
107
+ "restore_no_backup": "No backup to restore",
108
+ "config_restore_failed": "Couldn't restore the config",
109
+ "load_config_now": "Apply the configuration to a coding tool now?",
110
+ "load_config_yes": "Apply now",
111
+ "load_config_later": "Maybe later",
112
+ "what_next": "What next?",
113
+ "continue_config": "Continue configuring other options",
114
+ "exit_and_start": "Exit and start using",
115
+ "custom_model_mode": "Choose how to set custom models",
116
+ "custom_model_single": "Use one model for all roles",
117
+ "custom_model_per_role": "Configure each role separately",
118
+ "desktop_hide_official_login": "Hide the official Claude.ai sign-in in Claude Desktop and use only the gateway?",
119
+ "action_force_config": "Reset to recommended: delete {{tool}}'s config files and rewrite them, to repair a broken config",
120
+ "menu_base_url": "Switch gateway address (current: {{url}})",
121
+ "base_testing": "Testing the gateway addresses…",
122
+ "base_select": "Pick a gateway address (configured tools switch with it)"
123
+ },
124
+ "doctor": {
125
+ "checking": "Running checks…",
126
+ "check_api_key_network": "Check API key and network connection",
127
+ "check_tools": "Check installed tools",
128
+ "all_good": "All checks passed",
129
+ "network_error": "Couldn't reach the gateway",
130
+ "api_key_invalid": "API key is invalid or expired",
131
+ "api_key_missing": "No API key saved yet. Run {{cli}} setup --key <your API key>",
132
+ "results_title": "Check results:",
133
+ "no_tools_installed": "No tools installed",
134
+ "proxy": "Proxy",
135
+ "check_proxy": "Checking proxy settings",
136
+ "proxy_none": "No proxy variables set",
137
+ "proxy_dead": "Cannot reach {{proxies}}: the proxy app is probably not running. Claude Code and Codex go through it; start the proxy app or remove the variable and open a new terminal",
138
+ "api_key_network": "API key & network",
139
+ "installed_tools": "Installed tools",
140
+ "tool_outdated": "below the minimum version {{min}}",
141
+ "tool_duplicates": "other copies: {{others}}",
142
+ "run_upgrade": "run {{cli}} upgrade {{tool}} to fix",
143
+ "claude_config": "Claude Code config",
144
+ "claude_managed": "Managed settings override what {{product}} writes ({{detail}}); they usually come from your company's IT, ask your administrator",
145
+ "claude_not_configured": "~/.claude/settings.json has no {{brand}} address or API key; run {{cli}} setup --key <your API key>",
146
+ "claude_config_changed": "The address or API key in ~/.claude/settings.json differs from what {{product}} saved (another tool may have changed it); run {{cli}} setup --key <your API key> again",
147
+ "claude_request": "Claude Code request",
148
+ "check_claude_request": "Sending a test request through Claude Code",
149
+ "claude_request_skipped": "claude command not found",
150
+ "claude_request_failed": "Request didn't succeed: {{reason}}",
151
+ "deep_hint": "Add --deep to send one real request through Claude Code (uses a little credit) and confirm the whole chain works",
152
+ "codex_auth": "Codex token",
153
+ "codex_work_mode": "Codex desktop mode",
154
+ "codex_catalog": "Codex model menu",
155
+ "codex_catalog_rejected": "Codex ({{version}}, {{path}}) cannot load the model menu: {{error}}. Run {{cli}} refresh to rewrite it; if it still fails, update that Codex (the desktop app's copy updates with the ChatGPT app)",
156
+ "codex_stale_bearer": "{{path}} has experimental_bearer_token under [model_providers.custom] (usually PROXY_MANAGED left by cc-switch's proxy mode); Codex sends it as the token and gets 401 Invalid token. {{cli}} setup --key <your API key> removes it",
157
+ "codex_chatgpt_login": "Codex is signed in with a ChatGPT account and sends that credential to {{brand}} (401 Invalid token); run {{cli}} setup --key <your API key> to switch back to the API key",
158
+ "claude_login": "Claude account login",
159
+ "check_other_addresses": "Testing other gateway addresses",
160
+ "other_addresses": "Other gateway addresses",
161
+ "other_addresses_found": "These addresses work: {{urls}}. Run {{cli}} base auto to switch; tools {{product}} configured move with it",
162
+ "other_addresses_none": "None of the other gateway addresses can be reached either; check your network or proxy",
163
+ "balance": "Balance",
164
+ "balance_tool": "Balance ({{tool}} dedicated API key)",
165
+ "check_balance": "Checking balance",
166
+ "check_client_config": "Checking the gateway model config…",
167
+ "client_config": "Gateway model config",
168
+ "client_config_revision": "revision {{revision}}",
169
+ "report_uploading": "Uploading diagnostics…",
170
+ "report_done": "Diagnostic code: {{code}} (give it to support; they can see these results and recent run history with it)",
171
+ "report_failed": "Couldn't upload the diagnostics. Send support a screenshot of the results above, and run {{cli}} doctor --report again once the network is back",
172
+ "report_hint": "When you need help from support, run {{cli}} doctor --report and give them the diagnostic code"
173
+ },
174
+ "status": {
175
+ "title": "Current Status",
176
+ "api_key": "API Key",
177
+ "base_url": "Gateway address",
178
+ "language": "Language",
179
+ "models": "Models",
180
+ "tools": "Tools",
181
+ "config_loaded": "Config applied",
182
+ "config_not_loaded": "Config not applied",
183
+ "tool_key_label": "{{tool}} dedicated API key",
184
+ "balance": "Balance",
185
+ "balance_account_low": "{{amount}} (API key quota), but the wallet balance can't cover it; top up in the console",
186
+ "balance_token_limited": "{{amount}} (API key quota)",
187
+ "balance_empty": "{{amount}}, used up; top up in the console to keep using it",
188
+ "balance_token_empty": "{{amount}}, this API key's quota is used up; raise it in the console"
189
+ },
190
+ "messages": {
191
+ "env_vars_cleared": "Found {{vars}} in your shell environment and removed them (they would override the config {{product}} writes). If they were in your shell profile, open a new terminal to apply the change.",
192
+ "env_vars_ignored": "Found {{vars}} in the environment and ignored them for this run (they would override the config {{product}} writes). {{product}} didn't find them in your shell profile; they may come from another profile file or from the program that started {{product}}, and tools run there are still affected.",
193
+ "certificate_intercepted": "The certificate presented for {{url}} is not the gateway's: the local network is most likely hijacking DNS (common on campus or hotel networks), not an API key problem. Switch networks, set the computer's DNS to a public resolver, or use a proxy, then retry",
194
+ "env_vars_machine_left": "System environment variables still define {{vars}}; removing them needs admin rights. Run the same {{cli}} command again from an elevated terminal, or delete them under System Properties > Environment Variables > System variables"
195
+ },
196
+ "config": {
197
+ "profile_list_title": "Profiles",
198
+ "preset_list_title": "Custom presets",
199
+ "backup_list_title": "Config backups",
200
+ "profile_active_label": "active",
201
+ "profile_invalid_name": "Can't use profile name {{name}}: only letters, digits and . _ - are allowed",
202
+ "preset_invalid_name": "Can't use preset name {{name}}: only letters, digits and . _ - are allowed",
203
+ "profile_exists": "Profile already exists: {{name}}",
204
+ "profile_created": "Profile created: {{name}}",
205
+ "profile_activated": "Active profile: {{name}}",
206
+ "profile_deleted": "Profile deleted: {{name}}",
207
+ "profile_cannot_delete_last": "Cannot delete the last remaining profile",
208
+ "preset_saved": "Custom preset saved: {{name}}",
209
+ "preset_applied": "Custom preset applied: {{name}}",
210
+ "preset_deleted": "Custom preset deleted: {{name}}",
211
+ "preset_not_found": "Custom preset not found: {{name}}",
212
+ "backup_created": "Backup created: {{path}}",
213
+ "backup_restored": "Backup restored: {{name}}",
214
+ "backup_restore_missing_name": "Specify a backup name: {{cli}} config backup restore <name> (see names with {{cli}} config backup list)",
215
+ "profile_delete_confirm": "Delete profile {{name}}? Its saved API keys are removed too.",
216
+ "profile_create_dry_run": "Would create profile {{name}}",
217
+ "profile_use_dry_run": "Would switch to profile {{name}}",
218
+ "preset_save_dry_run": "Would save the current models as preset {{name}}",
219
+ "preset_use_dry_run": "Would apply preset {{name}}",
220
+ "preset_delete_dry_run": "Would delete preset {{name}}",
221
+ "tool_model_set_dry_run": "Would set {{tool}}'s {{slot}} model to {{model}}",
222
+ "tool_model_clear_dry_run": "Would clear {{tool}}'s model overrides",
223
+ "backup_create_dry_run": "Would create a config backup",
224
+ "tool_restore_dry_run": "Would restore {{tool}}'s config from the latest backup",
225
+ "tool_apply_dry_run": "Would rewrite {{tool}}'s config",
226
+ "profile_delete_dry_run": "Would delete profile {{name}}",
227
+ "profile_delete_aborted": "Profile deletion cancelled",
228
+ "backup_restore_confirm": "Restore backup {{name}}? Current config and api_key will be overwritten.",
229
+ "backup_restore_dry_run": "Would restore backup {{name}}",
230
+ "backup_restore_aborted": "Backup restore cancelled",
231
+ "unknown_command": "Unknown command: {{command}}",
232
+ "usage_hint": "Usage: {{cli}} config [profile|preset|backup|tool-model|<tool-name>] [...]",
233
+ "unknown_action": "Unknown action: {{action}}",
234
+ "unknown_tool": "Unknown tool: {{tool}}",
235
+ "empty_list": "no entries",
236
+ "requires_argument": "This command requires an argument in non-interactive mode",
237
+ "tool_model_list_title": "Per-tool model overrides",
238
+ "tool_model_set": "Set {{slot}} model for {{tool}} to {{model}}",
239
+ "tool_model_cleared": "Cleared model override for {{tool}}",
240
+ "tool_model_usage": "Usage: {{cli}} config tool-model set <tool> [slot] <model>",
241
+ "confirm_restore": "Restore {{tool}} to before the last change? (the current state is backed up first)",
242
+ "config_restored": "{{tool}} config restored",
243
+ "restore_no_backup": "{{tool}} has no backup to restore",
244
+ "tool_backups_title": "{{tool}} config backups",
245
+ "clear_model_dry_run": "Would clear the pinned model settings for {{tool}} (API key kept)",
246
+ "clear_model_done": "Cleared the pinned model settings for {{tool}}; it now uses its built-in default:",
247
+ "clear_model_none": "{{tool}} has no pinned model settings — nothing to clear",
248
+ "clear_model_unsupported": "{{tool}} does not support clearing model settings",
249
+ "clear_model_restart_hint": "Restart {{tool}} to apply (your API key, hooks and MCP config were left unchanged)",
250
+ "confirm_force": "Reset {{tool}}? Its config files are snapshotted, deleted, and rewritten from the recommended configuration. Fields you added by hand are lost; undo with restore.",
251
+ "force_done": "Reset {{tool}}'s config files (originals snapshotted; undo with `{{cli}} config {{name}} restore`)",
252
+ "confirm_remove": "Remove the {{brand}} configuration from {{tool}}? The current state is backed up first; {{cli}} config {{name}} restore brings it back.",
253
+ "remove_dry_run": "Would remove {{brand}}'s provider address, API key and model settings from {{tool}} (settings written by others stay), keeping everything else",
254
+ "remove_done": "Removed the {{brand}} configuration from {{tool}}",
255
+ "reopen_hint": "Quit {{tool}} completely and reopen it if it is already running",
256
+ "remove_nothing": "{{tool}} has no {{brand}} configuration; nothing to remove"
257
+ },
258
+ "logs": {
259
+ "directory": "Logs directory: {{dir}}",
260
+ "files_title": "Log files",
261
+ "no_files": "No log files yet",
262
+ "no_such_file": "No log file named {{file}}; run {{cli}} logs to see the list"
263
+ },
264
+ "completion": {
265
+ "instructions_bash": "Save this output to ~/.{{cli}}-completion.bash and add 'source ~/.{{cli}}-completion.bash' to your shell rc.",
266
+ "instructions_zsh": "Save this output to ~/.{{cli}}-completion.zsh and add 'source ~/.{{cli}}-completion.zsh' to your shell rc.",
267
+ "instructions_fish": "Save this output to ~/.config/fish/completions/{{cli}}.fish",
268
+ "unsupported_shell": "Unsupported shell: {{shell}} (supported: bash, zsh, fish)"
269
+ },
270
+ "bench": {
271
+ "running": "Running benchmark requests…",
272
+ "result_title": "Benchmark result",
273
+ "samples": "samples",
274
+ "median": "median",
275
+ "average": "average",
276
+ "min": "min",
277
+ "max": "max",
278
+ "errors": "errors",
279
+ "missing_api_key": "No API key saved yet",
280
+ "stream_running": "Sending one streaming request with {{model}}…",
281
+ "stream_title": "Streaming request",
282
+ "stream_model": "Model",
283
+ "stream_first_token": "First token",
284
+ "stream_total": "Total",
285
+ "stream_ok": "Stream ended normally",
286
+ "stream_hint": "Add --stream to also send one real streaming request and see the first-token time and whether the stream ends properly (costs a few tokens): {{cli}} bench --stream",
287
+ "stream_fail": {
288
+ "http": "The request was rejected",
289
+ "stream_error": "The stream carried an error",
290
+ "incomplete": "The stream stopped without its end marker (answers get cut off)",
291
+ "no_text": "The stream ended without any text",
292
+ "timeout": "Did not finish within 60 seconds",
293
+ "network": "Couldn't connect",
294
+ "no_model": "Couldn't list this API key's models; pick one with --model: {{cli}} bench --stream --model <model>"
295
+ }
296
+ },
297
+ "update": {
298
+ "checking": "Checking for updates…",
299
+ "current": "Current version: {{version}}",
300
+ "latest": "Latest version: {{version}}",
301
+ "source": "Version source: {{source}}",
302
+ "up_to_date": "You are on the latest version",
303
+ "available": "A new version is available",
304
+ "fetch_failed": "Couldn't fetch the latest version: {{error}}",
305
+ "command_hint": "Run: {{command}}",
306
+ "auto_installing": "Updating {{product}} to {{version}}…",
307
+ "auto_installed": "Updated {{product}} to {{version}}; rerunning the current command…",
308
+ "auto_failed": "Couldn't update automatically ({{error}}); continuing with the installed version",
309
+ "reexec_failed": "Updated, but couldn't restart ({{error}}); continuing with the current process"
310
+ },
311
+ "runtime": {
312
+ "dry_run_label": "[dry-run]",
313
+ "dry_run_unsupported": "`{{command}}` doesn't support --dry-run; nothing was changed",
314
+ "dry_run_unsupported_hint": "Commands that support it: setup, config, codex sessions (without --undo), and the read-only status, doctor (without --report), bench and logs",
315
+ "non_interactive_required_token": "An API key is required in non-interactive mode"
316
+ },
317
+ "setup": {
318
+ "dry_run_tool": "Would configure {{tool}}, writing:",
319
+ "dry_run_key": "The API key would be saved to {{file}}",
320
+ "dry_run_none": "No tool to configure; nothing would be written",
321
+ "usage": "Usage: {{cli}} setup --key sk-xxx or {{cli}} setup --claudekey sk-a --codexkey sk-b … (per-tool API keys: see {{cli}} setup --help) or {{cli}} setup --1m|--no-1m or {{cli}} setup --claude-official on|off",
322
+ "codex_1m_enabled": "Codex 1M context is enabled",
323
+ "codex_1m_disabled": "Codex 1M context is disabled",
324
+ "codex_1m_missing_key": "No saved Codex API key was found; run {{cli}} setup --codexkey <your API key> (or --key) first",
325
+ "validating": "Validating the API key for {{label}}…",
326
+ "unreachable": "Cannot reach the gateway address {{url}} ({{reason}})",
327
+ "invalid_key": "API key for {{label}} is invalid: {{reason}}",
328
+ "probe_failed": "Couldn't check which models {{label}} can use (network); continuing as if all are available",
329
+ "key_no_claude": "{{label}} can't use Claude models (the API key's group excludes Claude); skipped {{tool}}",
330
+ "key_no_gpt": "{{label}} can't use GPT models (the API key's group excludes GPT); skipped {{tool}}",
331
+ "key_no_grok": "{{label}} can't use Grok models (the API key's group excludes Grok); skipped {{tool}}",
332
+ "key_no_gemini": "{{label}} can't use Gemini models (the API key's group excludes Gemini); skipped {{tool}}",
333
+ "key_no_family": "This API key can't use any Claude, GPT, Grok or Gemini model; check the API key's group and retry",
334
+ "skip_no_claude": "This API key has no Claude model group; skipped Claude Code",
335
+ "skip_no_gpt": "This API key has no GPT model group; skipped Codex",
336
+ "skip_no_grok": "This API key has no Grok model group; skipped Grok Build",
337
+ "skip_no_gemini": "This API key has no Gemini model group; skipped Antigravity CLI",
338
+ "apply_failed": "Couldn't write {{tool}} config: {{reason}}",
339
+ "install_hint": "{{tool}} not found; install it with {{install}}",
340
+ "done": "Done: {{count}} tool(s) configured. ",
341
+ "desktop_official_login_missing_key": "No saved Claude Desktop API key found; run {{cli}} setup --desktopkey <your API key> (or --key) first",
342
+ "claude_official_invalid": "--claude-official expects on or off, got: {{value}}",
343
+ "done_commands": "Type {{commands}} in your terminal to start",
344
+ "failed_summary": "{{count}} tool(s) not configured; see above",
345
+ "offer_upgrade": "Upgrade {{tools}}? The installed version is too old.",
346
+ "offer_restart": "Restart {{tool}} so the new config takes effect? It is running and its windows will close.",
347
+ "restarted": "{{tool}} restarted",
348
+ "restart_failed": "Could not restart {{tool}}; quit it completely and open it again",
349
+ "elevation_running": "Click Yes in the Windows prompt…",
350
+ "elevation_done": "{{tool}} registry updated",
351
+ "elevation_failed": "Couldn't update {{tool}}'s registry (prompt declined, or this account is not an administrator): open PowerShell as administrator and run {{cli}} setup --desktopkey <your API key>",
352
+ "desktop_registry_invalid": "--desktop-registry expects on or off, got: {{value}}",
353
+ "install_confirm": "Install {{tools}} from the China mirrors? They aren't installed yet.",
354
+ "install_all_hint": "Or run {{cli}} setup --key <your API key> --install to install them all",
355
+ "still_missing": "{{tools}} not installed, so their config was not written; after installing them with the commands above, run {{commands}}",
356
+ "path_reload": "Run exec \"$SHELL\" -l in this window (or open a new terminal) to use {{commands}}",
357
+ "path_added": "{{tool}} is installed in {{dir}}, which was not on PATH; added it to your user PATH",
358
+ "path_reload_windows": "Open a new terminal to use {{commands}}",
359
+ "list_separator": ", ",
360
+ "gui_preconfigured": "{{tool}} is not installed yet; its config is written already, so it works once you install and open it (download: {{install}})",
361
+ "validate_failed": "Couldn't validate the API key for {{label}}: {{reason}}",
362
+ "skip_no_claude_desktop": "This API key has no Claude model group; skipped Claude Code and Claude Desktop"
363
+ },
364
+ "tools": {
365
+ "version_outdated": "version {{current}} is too old (needs {{min}} or later); upgrade with {{upgrade}}",
366
+ "agy": {
367
+ "menu_written": "{{count}} models in the menu ({{list}}), default {{default}}",
368
+ "effort_after_reopen": "agy works right away; in a new terminal the model menu also offers thinking levels (low / medium / high)"
369
+ },
370
+ "grok": {
371
+ "menu_written": "{{count}} models in the menu ({{list}}), default {{default}}",
372
+ "list_separator": ", "
373
+ },
374
+ "codex": {
375
+ "sessions_offer": "Move {{count}} earlier Codex sessions over? They're hidden from the list after switching to {{brand}}. They're backed up first and this can be undone.",
376
+ "sessions_hidden": "{{count}} earlier Codex sessions are hidden from the list after switching to {{brand}}: run {{cli}} codex sessions to move them over (backed up first, can be undone)",
377
+ "sessions_hidden_running": "{{count}} earlier Codex sessions are hidden from the list after switching to {{brand}}: quit Codex completely (desktop app included), then run {{cli}} codex sessions",
378
+ "work_mode_hint": "In the Codex desktop app use Codex mode (switch at the top left): with an API key, ChatGPT Work mode may not send messages and shows \"Could not start this chat\", a known OpenAI issue",
379
+ "work_mode_on": "The Codex desktop app is in ChatGPT Work mode, which may not send messages with an API key (\"Could not start this chat\", a known OpenAI issue): switch back to Codex mode at the top left",
380
+ "catalog_written": "{{count}} models in the menu ({{breakdown}}); reopen Codex (desktop app included) to see them",
381
+ "catalog_skipped": "Couldn't read Codex's built-in model list (not installed, or older than 0.122), so the menu has GPT models only; run {{cli}} upgrade codex, then {{cli}} config codex --non-interactive",
382
+ "catalog_rejected": "Codex ({{version}}, {{path}}) cannot load the {{brand}} model menu, so Codex's own menu (GPT only) is back; update that Codex (the desktop app's copy updates with the ChatGPT app), then run {{cli}} refresh",
383
+ "unload_sign_in": "Codex is no longer signed in with an API key. To use your ChatGPT subscription, run codex login; quit the Codex desktop app completely, reopen it and sign in",
384
+ "unload_chatgpt_restored": "Codex is back on your ChatGPT sign-in; quit the Codex desktop app completely and reopen it",
385
+ "unload_other_key": "Codex is still signed in with another API key (not the {{brand}} API key, left as is). To use your ChatGPT subscription, run codex logout, then codex login"
386
+ },
387
+ "claude_desktop": {
388
+ "code_cli_downloading": "Downloading Claude Code {{version}} for Claude Desktop's Code tab from the China mirror (about 100 MB)…",
389
+ "code_cli_installed": "Claude Desktop's Code tab has Claude Code {{version}} and no longer needs downloads.claude.ai",
390
+ "code_cli_failed": "Couldn't prepare Claude Code for Claude Desktop's Code tab ({{reason}}); the tab may say it can't download it. Fix the cause above, then run {{cli}} setup --desktopkey <your API key>",
391
+ "restart_hint": "Fully quit Claude Desktop and reopen it for the change to take effect",
392
+ "managed_conflict": "Managed configuration found at {{path}}; Claude Desktop prefers it and ignores local settings. Remove that profile / policy first, then relaunch",
393
+ "registry_written": "Also written to the registry policy {{key}} as a backup (same as the downloadable .reg); the in-app \"Configure Third-Party Inference\" window will show as managed, and removing the config removes it too",
394
+ "models_written_gateway": "Wrote {{count}} models (1M support from the gateway's groups, matched groups: {{groups}}): {{list}}",
395
+ "models_written_fallback": "Wrote {{count}} models (gateway groups unavailable or no group matched; 1M support from built-in rules): {{list}}",
396
+ "models_written_slots": "Wrote {{count}} models (offline: from the profile's model slots, gateway model list not fetched): {{list}}",
397
+ "official_login_hidden": "The official Claude.ai sign-in entry is hidden; Claude Desktop uses only the gateway. Run {{cli}} setup --claude-official on to bring it back",
398
+ "official_login_shown": "The official Claude.ai sign-in entry stays visible, so you can switch between the gateway and your own account. Run {{cli}} setup --claude-official off to hide it",
399
+ "models_summary": "{{count}} Claude models, default {{default}}",
400
+ "registry_denied": "No administrator rights, so the registry was skipped; there are no old registry settings, so the local config applies",
401
+ "policy_stale_remove": "Claude Desktop still uses old registry settings (most likely from the .reg file downloaded from the gateway page), which override the new config; removing them needs one administrator confirmation, after which updates need none",
402
+ "policy_stale_write": "Claude Desktop still uses old registry settings (most likely from the .reg file downloaded from the gateway page); writing the new config there needs one administrator confirmation",
403
+ "elevate_remove": "Remove the old registry settings? Windows asks for administrator confirmation once; later updates won't need it",
404
+ "elevate_write": "Write the new config to the registry? Windows asks for administrator confirmation once",
405
+ "refresh_needs_admin": "Claude Desktop's model list lives in the registry and needs administrator confirmation to change: run {{cli}} setup --desktopkey <your API key> and confirm",
406
+ "registry_removed": "Removed the old values under {{key}}; Claude Desktop now reads the local config"
407
+ },
408
+ "claude_code": {
409
+ "gateway_models": "{{count}} more models added to /model ({{vendors}})",
410
+ "tier_fallback": "This API key can't use Claude Code's default {{from}}; the {{tier}} alias now uses {{to}}",
411
+ "stable_channel": "Your update channel in settings.json is stable, which may not have reached {{min}} yet; set autoUpdatesChannel to latest, then upgrade",
412
+ "managed_override": "Claude Code managed settings found ({{source}}); {{keys}} there override what {{product}} writes, so this config won't take effect. Managed settings usually come from your company's IT; ask your administrator",
413
+ "no_git_bash": "Git for Windows not found: Claude Code falls back to PowerShell for commands, which works, but bash commands and scripts won't; install Git (winget install Git.Git, or download from https://registry.npmmirror.com/binary.html?path=git-for-windows/)",
414
+ "plugins_installed": "{{count}} official plugins installed (code review, feature dev, frontend design, …); type / to see them",
415
+ "plugins_failed": "Some official plugins could not be installed (plugin source unreachable or install error); everything else works. Run {{cli}} config claude-code --non-interactive again later",
416
+ "account_login_overridden": "Claude Code on this computer is signed in to a Claude account; the {{brand}} API key {{product}} writes takes precedence, so Claude Code uses {{brand}}. To go back to the account, run {{cli}} config claude-code remove",
417
+ "plugins_need_git": "Official plugins are downloaded with Git, which this computer doesn't have yet (on a Mac, Apple's Command Line Tools); everything else works. Once Git is installed, run {{cli}} config claude-code --non-interactive"
418
+ },
419
+ "model_family": {
420
+ "gpt": "GPT",
421
+ "claude": "Claude",
422
+ "gemini": "Gemini",
423
+ "other": "Chinese",
424
+ "grok": "Grok"
425
+ }
426
+ },
427
+ "upgrade": {
428
+ "kind": {
429
+ "native": "native",
430
+ "npm": "npm",
431
+ "brew": "Homebrew",
432
+ "other": "other"
433
+ },
434
+ "unsupported": "{{cli}} upgrade does not support {{tool}}",
435
+ "supported": "Supported tools: {{tools}}",
436
+ "nothing_installed": "None of {{tools}} is installed",
437
+ "current": "Current: {{copy}}",
438
+ "not_installed_installing": "{{tool}} not found; installing from the China mirror…",
439
+ "fallback_mirror": "Couldn't upgrade through the official channel; installing from the China mirror instead",
440
+ "unknown_install": "Unknown install source ({{path}}); upgrade it the way it was installed",
441
+ "npm_permission": "npm did not finish. If the output above shows EACCES (no permission to write the global directory): use sudo {{command}}, or run npm config set prefix ~/.npm-global, add ~/.npm-global/bin to PATH and retry",
442
+ "duplicates": "Several copies of {{tool}}: keeping {{keep}}; extra: {{others}}",
443
+ "duplicates_note": "{{count}} copies found; the terminal runs {{active}}; also present: {{others}}. Run {{cli}} upgrade {{tool}} to upgrade and keep one",
444
+ "confirm_remove": "Remove the extra copies?",
445
+ "removed": "Removed {{copy}}",
446
+ "remove_by_hand": "Remove by hand: {{how}}",
447
+ "delete_paths": "delete {{paths}}",
448
+ "still_missing": "{{tool}} is still not installed; see the output above",
449
+ "still_old": "After upgrading: {{copy}}, still below {{min}}",
450
+ "done": "Now {{copy}}",
451
+ "native_mirror_trying": "The official download server is unreachable; fetching the same native binary from the npm mirror to replace it in place…",
452
+ "native_mirror_done": "Replaced with {{version}} from the mirror (npm integrity verified; Anthropic's manifest unreachable)",
453
+ "native_mirror_done_verified": "Replaced with {{version}} from the mirror (npm integrity and Anthropic's release checksum verified)",
454
+ "native_mirror_failed": "Couldn't replace from the mirror: {{reason}}",
455
+ "install_label": "{{kind}} {{version}} ({{path}})"
456
+ },
457
+ "install": {
458
+ "permission_unix": "npm probably cannot write its global directory. Either ① sudo {{command}}; or ② run npm config set prefix ~/.npm-global, add export PATH=~/.npm-global/bin:$PATH to ~/.zshrc or ~/.bashrc, open a new terminal and run {{command}}",
459
+ "permission_windows": "Probably missing permissions or a file in use: close the tool if it is running, open an elevated terminal and run {{command}}",
460
+ "what_next": "What next?",
461
+ "installed_continue": "I installed it myself, continue",
462
+ "cancel_install": "Cancel",
463
+ "user_cancelled": "Installation cancelled",
464
+ "still_not_installed": "{{tool}} still not found; make sure it installed and open a new terminal",
465
+ "verified_success": "Found {{tool}}, continuing",
466
+ "install_failed_detail": "Installation did not finish; see the output above or {{cli}} logs tail",
467
+ "downloading": "Downloading and installing (tens of MB to over a hundred MB); usually done within a minute or two…",
468
+ "script_failed_npm": "The install script did not finish; installing with npm from the China mirror instead",
469
+ "script_stalled_npm": "The install script made no progress for {{minutes}} minutes (the download server is unreachable); installing with npm from the China mirror instead",
470
+ "script_timeout_npm": "The install script was still running after an hour; installing with npm from the China mirror instead",
471
+ "manual_command": "{{tool}} was not installed; when the network is better, run: {{command}}",
472
+ "manual_npm": "or install with npm: {{command}}"
473
+ },
474
+ "model_refresh": {
475
+ "changed": "{{tool}} model menu synced with {{brand}}: {{changes}}",
476
+ "added": "added {{models}}",
477
+ "removed": "removed {{models}}"
478
+ },
479
+ "codex_sessions": {
480
+ "codex_running": "Codex is still running (PIDs {{pids}}) and would overwrite the change: quit Codex completely (desktop app and background server included), then run {{cli}} codex sessions",
481
+ "nothing": "Scanned {{scanned}} sessions; all are already under \"{{target}}\"",
482
+ "dry_run": "Would move {{count}} sessions from \"{{from}}\" to \"{{target}}\" (dry run, nothing changed)",
483
+ "moved": "Moved {{count}} sessions from \"{{from}}\" to \"{{target}}\"; reopen Codex to see them (archived ones in the archive). Run {{cli}} codex sessions again after switching login back",
484
+ "db_skipped": "Session files were updated, but Codex's database wasn't ({{reason}}). Upgrade Node.js to 22.13+ and run {{cli}} codex sessions again",
485
+ "backup": "Backup and undo record in {{dir}}; undo with {{cli}} codex sessions --undo <that dir>",
486
+ "undone": "Restored {{files}} session files and {{rows}} database rows"
487
+ },
488
+ "plan": {
489
+ "title": "About to change (backed up first):",
490
+ "confirm": "Write these changes?",
491
+ "cancelled": "Cancelled; no file was changed",
492
+ "install_first": "{{tool}} is not installed: install it first, then write its config"
493
+ },
494
+ "sessions": {
495
+ "unknown_tool": "Unknown tool: {{tool}} (tools with sessions: {{tools}})",
496
+ "unknown_tool_hint": "Drop --tool to see all, or run {{cli}} sessions --tool codex",
497
+ "id_too_short": "Session ID \"{{id}}\" is too short; give at least 4 characters",
498
+ "list_hint": "Run {{cli}} sessions to see sessions and their IDs",
499
+ "not_found": "No session on this machine has an ID starting with \"{{id}}\"",
500
+ "ambiguous": "Several sessions have IDs starting with \"{{id}}\": {{ids}}",
501
+ "ambiguous_hint": "Give more characters of the ID",
502
+ "bad_limit": "Not a valid count: {{value}}",
503
+ "bad_limit_hint": "Use a positive whole number, e.g. {{cli}} sessions --limit 50; --all lists everything",
504
+ "none": "No matching sessions on this machine",
505
+ "list_footer": "{{count}} listed. Details: {{cli}} sessions show <ID>; continue: {{cli}} sessions resume <ID>; export: {{cli}} sessions export <ID> -o <dir>",
506
+ "more_messages": "{{more}} more messages; export them all: {{cli}} sessions export {{id}} -o <dir>",
507
+ "no_resume": "No resume command; open it in the app",
508
+ "cannot_resume": "{{tool}} sessions have no resume command",
509
+ "cannot_resume_hint": "Open the session in the {{tool}} app",
510
+ "cwd_missing": "The session's directory {{dir}} no longer exists; starting in the current directory",
511
+ "run_failed": "Could not start {{command}}: {{error}}",
512
+ "run_failed_hint": "Check that the tool is installed, or run it yourself: {{line}}",
513
+ "export_needs_output": "Export needs an output directory; set it with -o <dir>",
514
+ "export_bad_path": "Unexpected export file name: {{path}}",
515
+ "export_hint": "For example {{cli}} sessions export <ID> -o ./sessions",
516
+ "role": {
517
+ "user": "User",
518
+ "assistant": "Assistant",
519
+ "tool": "Tool"
520
+ },
521
+ "field": {
522
+ "tool": "Tool",
523
+ "id": "Session ID",
524
+ "started": "Started",
525
+ "updated": "Last update",
526
+ "cwd": "Directory",
527
+ "provider": "Provider",
528
+ "messages": "Messages",
529
+ "file": "File",
530
+ "resume": "Resume"
531
+ }
532
+ },
533
+ "base": {
534
+ "current": "Current gateway address: {{url}}",
535
+ "current_mark": "current",
536
+ "custom_label": "Custom address",
537
+ "usage_hint": "Switch: {{cli}} base <number or address>; first working one in the order above (not the fastest; the main site whenever possible): {{cli}} base auto; back to the main site: {{cli}} base default",
538
+ "switched": "Switched to {{url}}",
539
+ "kept": "{{url}} works and is saved",
540
+ "no_tools": "No tool on this computer was configured by {{product}}, so only the address was saved and nothing else changed. In tools you set up by hand, replace {{siteHost}} with {{url}}; or run {{cli}} setup --key <your API key> to let {{product}} configure them (it rewrites their {{brand}} settings, backing them up first)",
541
+ "none_reachable": "None of the gateway addresses can be reached; check your network or proxy",
542
+ "bad_index": "There is no address {{index}} ({{count}} in total); run {{cli}} base to see the list",
543
+ "bad_url": "{{value}} is not a valid address, e.g. {{altSiteUrl}}",
544
+ "unreachable": "{{url}} cannot be reached: {{reason}}. Nothing was changed",
545
+ "error_certificate": "wrong certificate; this network may resolve the domain to another server",
546
+ "error_timeout": "timed out",
547
+ "error_network": "couldn't connect",
548
+ "error_not_gateway": "the answer is not from {{brand}}",
549
+ "tools_moved": "These tools now use it:",
550
+ "setup_fallback": "{{from}} cannot be reached: {{reason}}. Using {{url}} from now on; run {{cli}} base default to go back to the main site once the network is fine",
551
+ "models_count": "{{count}} models",
552
+ "fastest": "fastest",
553
+ "error_key_rejected": "API key rejected (invalid or expired)",
554
+ "key_rejected_everywhere": "Every address rejected this API key; it may be invalid or expired, check it in the console. With a new API key, run {{cli}} setup --key <new API key>",
555
+ "probe_with_key": "Listing models with your saved API key on the built-in and current addresses (others only check that the gateway answers), median of 3 per address",
556
+ "probe_without_key": "No API key saved yet, so only checking that the gateway answers; after {{cli}} setup --key <your API key> the model list is fetched instead",
557
+ "setup_fallback_main": "{{from}} cannot be reached: {{reason}}. Switched back to the main site {{url}}",
558
+ "next_addresses": "Next: run {{cli}} base to see the addresses, or {{cli}} base auto to switch."
559
+ },
560
+ "help": {
561
+ "help_command": "Show help for a command",
562
+ "default_value": "default {{value}}",
563
+ "placeholder": {
564
+ "command": "<command>",
565
+ "subcommand": "<subcommand>"
566
+ },
567
+ "learn_more": {
568
+ "command_help": "Usage and examples for one command",
569
+ "docs": "Online docs: {{url}}",
570
+ "all_commands": "List every command",
571
+ "exit_codes": "See exit codes and the --json error format",
572
+ "environment": "See the environment variables {{product}} reads"
573
+ },
574
+ "title": {
575
+ "usage": "Usage:",
576
+ "arguments": "Arguments:",
577
+ "options": "Options:",
578
+ "global_options": "Global options:",
579
+ "commands": "Commands:",
580
+ "examples": "Examples:",
581
+ "learn_more": "Learn more:",
582
+ "when": "When to use:",
583
+ "prerequisites": "Prerequisites:",
584
+ "alternatives": "Alternatives:"
585
+ },
586
+ "group": {
587
+ "global_options": "Global options:",
588
+ "configure": "Configure:",
589
+ "diagnose": "Diagnose:",
590
+ "maintain": "Maintain:"
591
+ },
592
+ "global": {
593
+ "help": "Show help",
594
+ "version": "Show the version",
595
+ "base": "Gateway address (saved by setup / init / auth / config / enter and the main menu; other commands use it for this run only)",
596
+ "non_interactive": "Never ask questions; confirmations are answered yes (for scripts and CI)",
597
+ "json": "Print JSON (commands that support it)",
598
+ "yes": "Answer yes to every confirmation (--non-interactive and --json do the same)",
599
+ "dry_run": "Show what would change without writing anything (commands that cannot preview refuse it)",
600
+ "no_color": "Turn off colors"
601
+ },
602
+ "root": {
603
+ "summary": "Set up {{brand}} API keys and models across coding tools",
604
+ "description": "{{product}} sets up {{brand}} API keys and models in Claude Code, Codex, Grok Build and other coding tools.\nRun {{cli}} without a command to open the main menu.",
605
+ "ex": {
606
+ "menu": "Open the main menu",
607
+ "setup": "Configure every tool one API key can serve",
608
+ "doctor": "Find configuration and network problems",
609
+ "base": "Switch to a working address when the main one fails",
610
+ "config": "Open the Codex settings menu"
611
+ }
612
+ },
613
+ "setup": {
614
+ "summary": "Configure tools in one command (picked by the models your API key can use)",
615
+ "description": "Write the configs in one command, without the wizard.\n--key configures the tools that match the models the API key can use (see below).\nSeparate API keys: --claudekey / --codexkey / --grokkey / --desktopkey / --agykey.\nRun it again to change the API key; your other settings stay.",
616
+ "opt": {
617
+ "key": "One API key; configures every tool its models can serve",
618
+ "claudekey": "API key just for Claude Code",
619
+ "codexkey": "API key just for Codex",
620
+ "grokkey": "API key just for Grok Build",
621
+ "desktopkey": "API key just for Claude Desktop",
622
+ "agykey": "API key just for Antigravity CLI (must reach Gemini models)",
623
+ "openclawkey": "API key just for OpenClaw",
624
+ "hermeskey": "API key just for Hermes",
625
+ "atomcodekey": "API key just for AtomCode",
626
+ "one_m": "Turn on the 1M context window in Codex",
627
+ "no_one_m": "Turn off the 1M context window in Codex",
628
+ "claude_official": "Show the Claude.ai sign-in in Claude Desktop (default off)",
629
+ "desktop_registry": "Windows Claude Desktop: always write the registry policy (on) or decide automatically (off)",
630
+ "force": "Back up, then rewrite each config with the recommended one (fixes broken configs)",
631
+ "all": "Configure every tool the API key can serve (the default)",
632
+ "install": "Install missing tools from the China mirrors without asking",
633
+ "no_install": "Only print install commands for missing tools"
634
+ },
635
+ "autodetect_title": "Models the --key can use and the tools configured:",
636
+ "autodetect": {
637
+ "claude": "Claude Code, Claude Desktop (macOS / Windows: written ahead even when not installed; Linux: when installed)",
638
+ "gpt": "Codex",
639
+ "grok": "Grok Build",
640
+ "gemini": "Antigravity CLI"
641
+ },
642
+ "ex": {
643
+ "key": "Configure every tool one API key can serve",
644
+ "split": "Separate API keys for the Claude, GPT and Gemini groups",
645
+ "force": "Rewrite broken configs (backed up first)",
646
+ "base": "Configure on a backup address",
647
+ "install": "Configure, then install whatever is missing (China mirrors)"
648
+ },
649
+ "when": "First setup after you get an API key, or to change the API key or repair broken configs.",
650
+ "needs": "A {{brand}} API key (create one on the Tokens page of the console)\nTools can be installed later: missing command-line tools get their config first, then an offer to install them from China mirrors (--install installs without asking); Claude Desktop gets its config even before it is installed on macOS / Windows, and on Linux once installed",
651
+ "alt": {
652
+ "init": "Choose tools and models step by step",
653
+ "config": "Change one tool only",
654
+ "auth": "Save the API key without writing tool configs"
655
+ }
656
+ },
657
+ "init": {
658
+ "summary": "First-time setup wizard",
659
+ "description": "Walks you through entering an API key, choosing tools and writing their configs.\nRun {{cli}} without a command to open the main menu.",
660
+ "ex": {
661
+ "run": "Run the setup wizard",
662
+ "base": "Run the wizard on a backup address",
663
+ "menu": "Open the main menu"
664
+ },
665
+ "when": "First use, when you want to answer questions step by step.",
666
+ "needs": "A {{brand}} API key",
667
+ "alt": {
668
+ "setup": "No questions, or configuring from a script",
669
+ "menu": "Already set up; change one thing"
670
+ }
671
+ },
672
+ "auth": {
673
+ "summary": "Save or remove the API key",
674
+ "description": "No argument: asks for an API key.\nWith an API key: checks it and saves it in ~/{{configDir}}/config.yaml.",
675
+ "arg": {
676
+ "token": "API key to save"
677
+ },
678
+ "revoke": "Delete the saved API key",
679
+ "reload": "Write the saved API key into Claude Code again (claude / claude-code)",
680
+ "ex": {
681
+ "prompt": "Ask for an API key",
682
+ "save": "Save an API key directly",
683
+ "revoke": "Delete the saved API key without asking",
684
+ "reload": "Write the API key into Claude Code again",
685
+ "revoke_ask": "Delete the saved API key (asks first)",
686
+ "reload_json": "Same, printing JSON"
687
+ },
688
+ "when": "To save, change or delete the API key without touching tool configs.",
689
+ "alt": {
690
+ "setup": "Save the API key and write the tool configs too"
691
+ }
692
+ },
693
+ "config": {
694
+ "summary": "Per-tool settings; profiles, model presets and backups",
695
+ "description": "No argument: pick a tool and open its settings menu.\nSubcommands and tool names are listed below.",
696
+ "arg": {
697
+ "args": "Subcommand and arguments (see below)"
698
+ },
699
+ "opt": {
700
+ "force": "Back up, then rewrite the tool's config with the recommended one"
701
+ },
702
+ "subcommands_title": "Subcommands:",
703
+ "sub": {
704
+ "tool": "Open the tool's settings menu",
705
+ "tool_force": "Back up, then rewrite the whole config with the recommended one",
706
+ "tool_non_interactive": "No menu: write the config with the saved API key",
707
+ "tool_restore": "Restore the tool's latest backup",
708
+ "tool_backups": "List the tool's backups",
709
+ "tool_clear_model": "Remove only the pinned models; keep the API key, hooks, MCP and plugins",
710
+ "tool_model_list": "List per-tool model overrides",
711
+ "tool_model_set": "Set a model for one tool (slot defaults to opus, the main model)",
712
+ "tool_model_clear": "Remove a tool's model override",
713
+ "profile_list": "List profiles (each holds an API key, address and models)",
714
+ "profile_create": "Create a profile",
715
+ "profile_use": "Switch to a profile",
716
+ "profile_delete": "Delete a profile",
717
+ "preset_list": "List model presets",
718
+ "preset_save": "Save the current models as a preset",
719
+ "preset_use": "Use a preset",
720
+ "preset_delete": "Delete a preset",
721
+ "backup_list": "List backups of the {{product}} config",
722
+ "backup_create": "Back up the {{product}} config (optional label)",
723
+ "backup_restore": "Restore the {{product}} config from a backup",
724
+ "tool_remove": "Remove the provider, API key and model settings {{brand}} wrote, keeping everything else"
725
+ },
726
+ "tools_title": "Tool names:",
727
+ "ex": {
728
+ "menu": "Open the Codex settings menu",
729
+ "force": "Rewrite the whole Claude Code config",
730
+ "tool_model": "Use a specific model in Codex only",
731
+ "profile": "Create a profile named work",
732
+ "remove": "Stop Codex using {{brand}} (e.g. go back to your ChatGPT subscription)"
733
+ },
734
+ "when": "To adjust one tool (models, rewrite or restore its config), or manage profiles, presets and backups.",
735
+ "needs": "Save an API key before writing tool configs: {{cli}} auth <your API key> or {{cli}} setup --key <your API key>",
736
+ "alt": {
737
+ "setup": "Rewrite every tool config at once",
738
+ "status": "Only look at the current configuration"
739
+ }
740
+ },
741
+ "base": {
742
+ "summary": "List, test and switch the gateway address",
743
+ "description": "Switch to another gateway address when the main one cannot be reached or shows certificate errors.\nTools configured with the API key {{product}} saved move to the new address too.",
744
+ "arg": {
745
+ "target": "Where to switch (see below); leave out to list and test addresses"
746
+ },
747
+ "targets_title": "Targets:",
748
+ "target": {
749
+ "none_term": "(none)",
750
+ "none": "List every address, test each one and mark the current one",
751
+ "index_term": "<n>",
752
+ "index": "Switch to address n in the list",
753
+ "url_term": "<url>",
754
+ "url": "Switch to this address, e.g. {{altSiteUrl}}",
755
+ "auto": "Switch to the first working address in list order (not the fastest; prefers the main site)",
756
+ "default": "Back to the main site {{url}}"
757
+ },
758
+ "ex": {
759
+ "list": "List and test addresses",
760
+ "auto": "Switch to the first working address",
761
+ "index": "Switch to the second address in the list",
762
+ "url": "Switch to a given address",
763
+ "default": "Back to the main site"
764
+ },
765
+ "when": "When tools report connection failures, timeouts or certificate errors.",
766
+ "needs": "With a saved API key, the built-in and current addresses are checked with it; other addresses, or no API key, only check that the gateway is up",
767
+ "alt": {
768
+ "doctor": "Not sure the address is the problem",
769
+ "bench": "Measure latency without switching"
770
+ }
771
+ },
772
+ "status": {
773
+ "summary": "Show the current configuration",
774
+ "description": "Shows the API key and its balance, gateway address, language, models, and whether each tool is configured.",
775
+ "ex": {
776
+ "show": "Show the current configuration",
777
+ "json": "Print JSON for scripts"
778
+ },
779
+ "when": "To see which API key, address and models are in use.",
780
+ "alt": {
781
+ "doctor": "Check that the configuration actually works"
782
+ }
783
+ },
784
+ "doctor": {
785
+ "summary": "Find configuration and network problems",
786
+ "description": "Checks the API key, balance, network, proxy, installed tools and their configs, and says how to fix what it finds.",
787
+ "opt": {
788
+ "deep": "If Claude Code is installed, also send one real request through it (uses a little quota)",
789
+ "report": "After the checks, upload diagnostics (results, tool versions, settings and recent run history; no API keys or conversations) and get a code for support"
790
+ },
791
+ "ex": {
792
+ "run": "Run the checks",
793
+ "deep": "Include a real Claude Code request when it is installed",
794
+ "report": "Upload diagnostics and get a code for support"
795
+ },
796
+ "when": "When a tool fails (401, cannot connect, model not found) and you do not know why.",
797
+ "alt": {
798
+ "base": "You already know the address cannot be reached",
799
+ "logs": "Send the error details to support"
800
+ }
801
+ },
802
+ "bench": {
803
+ "summary": "Measure gateway latency",
804
+ "description": "Requests the model list from the current gateway address a few times with the saved API key and reports timings; with --stream it also sends one real streaming request and reports the first-token time and whether the stream ends properly.",
805
+ "opt": {
806
+ "samples": "Number of requests (1–50)",
807
+ "stream": "Also send one real streaming request: first-token time and whether the stream ends properly (costs a few tokens)",
808
+ "model": "Model for the streaming request (default: picked from what the API key can use)"
809
+ },
810
+ "ex": {
811
+ "run": "Send 5 requests",
812
+ "samples": "Send only 3 requests",
813
+ "stream": "Latency, then one streaming request",
814
+ "stream_model": "Streaming request with a given model",
815
+ "json": "Print JSON"
816
+ },
817
+ "when": "When things feel slow, or to see the current address latency.",
818
+ "needs": "A saved API key ({{cli}} auth <your API key>)",
819
+ "alt": {
820
+ "base": "Test every address at once and switch"
821
+ }
822
+ },
823
+ "logs": {
824
+ "summary": "Inspect {{product}} logs",
825
+ "description": "Logs are kept per day in ~/{{configDir}}. When something goes wrong, send the tail output to support.",
826
+ "arg": {
827
+ "action": "list, tail or path (default list)",
828
+ "file": "Log file to show with tail"
829
+ },
830
+ "actions_title": "Actions:",
831
+ "action": {
832
+ "list": "List log files",
833
+ "tail": "Show the end of the newest log (or the given file)",
834
+ "path": "Show the log directory"
835
+ },
836
+ "ex": {
837
+ "list": "List log files",
838
+ "tail": "Show the newest log",
839
+ "path": "Show the log directory"
840
+ },
841
+ "when": "When a command failed and you need details, or support asks for logs.",
842
+ "alt": {
843
+ "doctor": "Check the common problems first"
844
+ }
845
+ },
846
+ "upgrade": {
847
+ "summary": "Upgrade Claude Code, Codex and other coding tools",
848
+ "description": "Upgrades each copy the way it was installed: native installs use the tool's own updater, npm installs are reinstalled from the China mirror (npmmirror), Homebrew installs use brew upgrade; if a native or Homebrew upgrade doesn't work, {{brand}}'s install script is used (programs from the China mirror). A named tool that is not installed yet is installed with that script.\nWith no tool named, upgrades every installed one.\nTo update {{product}} itself, use {{cli}} update.",
849
+ "arg": {
850
+ "tools": "claude-code, codex, grok, agy; one or more"
851
+ },
852
+ "ex": {
853
+ "all": "Upgrade every installed tool",
854
+ "one": "Upgrade only Claude Code",
855
+ "many": "Upgrade Codex and Antigravity CLI"
856
+ },
857
+ "when": "When {{cli}} doctor reports an old version, or the tool's own updater doesn't finish.",
858
+ "needs": "Without tool names, only installed tools are upgraded",
859
+ "alt": {
860
+ "update": "Update {{product}} itself"
861
+ }
862
+ },
863
+ "refresh": {
864
+ "summary": "Update the tools' model menus now",
865
+ "description": "Rewrites each tool's model menu from the gateway's current model config and the models your API key can use now, without waiting for the hourly sync.",
866
+ "when": "After your API key moved to another group, or the gateway added or removed models.",
867
+ "alt": {
868
+ "setup": "To change the API key or configure tools again"
869
+ },
870
+ "ex": {
871
+ "run": "Update the model menus now",
872
+ "base": "Use another gateway address for this run only"
873
+ }
874
+ },
875
+ "update": {
876
+ "summary": "Check for a newer {{product}}",
877
+ "description": "Checks {{updateSources}} in turn and prints the install command when a newer version exists.\nA global install also checks at startup (every 6 hours) and, when there is a newer version, installs it and reruns the command.",
878
+ "ex": {
879
+ "check": "Check for a new version",
880
+ "json": "Print JSON"
881
+ },
882
+ "when": "To check that {{product}} is the latest version.",
883
+ "alt": {
884
+ "upgrade": "Upgrade Claude Code, Codex and other tools"
885
+ }
886
+ },
887
+ "codex": {
888
+ "summary": "Codex helpers",
889
+ "description": "Helper commands for Codex.",
890
+ "when": "When Codex has a problem {{product}} can fix (currently: an empty session list)."
891
+ },
892
+ "codex_sessions": {
893
+ "summary": "Bring old sessions back into the Codex list",
894
+ "description": "Codex filters sessions by provider, so old sessions disappear after you change sign-in or provider.\nThis moves local sessions to the current provider; it backs up first and --undo reverts.\nQuit Codex before running it.",
895
+ "opt": {
896
+ "to": "Provider to move them to (default: the one Codex uses now)",
897
+ "undo": "Move the sessions back as recorded in this backup directory"
898
+ },
899
+ "ex": {
900
+ "move": "Move every session to the current provider",
901
+ "to": "Move sessions to the custom provider",
902
+ "undo": "Undo the last move (directory shown by that run)"
903
+ },
904
+ "when": "When the Codex session history is empty or missing sessions.",
905
+ "needs": "Quit Codex first (the move is refused while it runs)",
906
+ "alt": {
907
+ "undo": "Revert a move you do not want"
908
+ }
909
+ },
910
+ "sessions": {
911
+ "summary": "Browse the coding sessions on this machine",
912
+ "description": "Lists the sessions Claude Code, Codex and Claude Desktop (Cowork / Code) keep on this machine, most recently updated first.\nShow a session, print or run the command that continues it, or export it as Markdown. Read-only: no session file is changed.",
913
+ "opt": {
914
+ "tool": "Only this tool's sessions (claude-code, codex, claude-desktop)",
915
+ "dir": "Only sessions started in this directory or below",
916
+ "here": "Only sessions started in the current directory or below",
917
+ "limit": "How many to list (default 20)",
918
+ "all": "List all of them",
919
+ "messages": "How many messages to show (default 6)",
920
+ "run": "Run the resume command (default: print it)",
921
+ "output": "Directory to export into (created if missing; existing files are kept)",
922
+ "tools": "Include tool call arguments and outputs (each clipped to 2000 characters)"
923
+ },
924
+ "list": "List sessions (default)",
925
+ "show": "Show a session's details and first messages",
926
+ "resume": "Print or run the command that continues a session",
927
+ "export": "Export sessions as Markdown",
928
+ "ex": {
929
+ "list": "List the 20 most recent sessions",
930
+ "codex": "Only Codex sessions",
931
+ "here": "Only sessions of the current directory",
932
+ "show": "Show a session (the first few ID characters are enough)",
933
+ "resume": "Continue the session in its original directory",
934
+ "export": "Export two sessions into ./sessions",
935
+ "json": "JSON output for scripts",
936
+ "show_more": "Show the first 20 messages",
937
+ "resume_print": "Only print the resume command to run yourself",
938
+ "export_tools": "Include tool call arguments and outputs in the export"
939
+ },
940
+ "when": "To find an earlier conversation, continue it, or keep a copy.",
941
+ "alt": {
942
+ "codex_sessions": "Old sessions missing from the Codex list: move them to the current provider"
943
+ }
944
+ },
945
+ "lang": {
946
+ "summary": "Change the interface language",
947
+ "description": "Show or set the language {{product}} uses (zh_CN, en_US).",
948
+ "show": "Show the current language",
949
+ "set": "Set the language: zh_CN or en_US",
950
+ "ex": {
951
+ "show": "Show the current language",
952
+ "set_en": "Switch to English",
953
+ "set_zh": "Switch to Chinese",
954
+ "show_json": "Print JSON, including the available languages"
955
+ },
956
+ "when": "When the interface language is wrong.",
957
+ "alt": {
958
+ "enter": "Pick the language from a menu"
959
+ }
960
+ },
961
+ "completion": {
962
+ "summary": "Print a shell completion script",
963
+ "description": "Prints a completion script for bash, zsh or fish. Save it to a file and source it from your shell config (for fish, put it in the completions directory).",
964
+ "arg": {
965
+ "shell": "bash, zsh or fish"
966
+ },
967
+ "ex": {
968
+ "bash": "Bash completion",
969
+ "zsh": "Zsh completion",
970
+ "fish": "Fish completion"
971
+ },
972
+ "when": "To complete {{product}} commands with the Tab key.",
973
+ "needs": "bash, zsh or fish"
974
+ },
975
+ "enter": {
976
+ "summary": "Open a settings menu directly",
977
+ "description": "Opens the given settings menu without going through the main menu.",
978
+ "arg": {
979
+ "option": "Menu to open (see below)"
980
+ },
981
+ "options_title": "Menus:",
982
+ "option": {
983
+ "none_term": "(none)",
984
+ "none": "Main menu",
985
+ "lang": "Language",
986
+ "apikey": "API key",
987
+ "models": "Models",
988
+ "tool": "That tool's settings menu (same as {{cli}} config <tool>)"
989
+ },
990
+ "ex": {
991
+ "menu": "Open the main menu",
992
+ "models": "Open model settings",
993
+ "tool": "Open the Codex settings menu"
994
+ },
995
+ "when": "When you know what to change and want to skip the main menu.",
996
+ "alt": {
997
+ "menu": "Start from the main menu",
998
+ "config": "Configure one tool with a command"
999
+ }
1000
+ },
1001
+ "doc": {
1002
+ "generated_note": "Generated by pnpm gen:docs; do not edit. Change commands and texts in src/lib/program.ts and src/locales/*.json",
1003
+ "title": "{{product}} command reference",
1004
+ "docs_link": "Online: {{url}}",
1005
+ "global_note": "Global options work with every command.",
1006
+ "option": "Option",
1007
+ "description": "Description",
1008
+ "argument": "Argument",
1009
+ "command": "Command",
1010
+ "item": "Form",
1011
+ "global_inherited": "Also takes the [global options](#{{anchor}}): {{options}}",
1012
+ "see_also": "See also",
1013
+ "back_to_index": "Command list",
1014
+ "use_instead": "Use it instead when"
1015
+ }
1016
+ },
1017
+ "errors": {
1018
+ "next_step": "Next: {{command}}",
1019
+ "hint_logs": "Next: run {{cli}} logs tail to inspect the detailed log.",
1020
+ "cancelled": "Cancelled",
1021
+ "cancel_hint": "Next: run {{cli}} to start again.",
1022
+ "key_placeholder": "<your API key>"
1023
+ },
1024
+ "help_topics": {
1025
+ "exit_codes": {
1026
+ "title": "Exit codes and error output",
1027
+ "body": "Exit codes:\n 0 success\n 1 operation failed\n 2 usage or input error\n 3 authentication failed (invalid or rejected API key)\n 4 network problem (DNS, certificate, timeout, or unreachable gateway)\n 5 internal error\n 130 cancelled by the user\n\nWith --json, successful output keeps its existing format. Failures write one JSON object to stderr:\n{\"ok\":false,\"error\":{\"type\":\"usage\",\"message\":\"…\",\"hint\":\"…\",\"subtype\":\"…\"}}"
1028
+ },
1029
+ "environment": {
1030
+ "title": "Environment variables",
1031
+ "body": "{{product}} reads these environment variables:\n {{envPrefix}}_DISABLE_AUTO_UPDATE=1 disable the startup update check\n {{envPrefix}}_DISABLE_MODEL_REFRESH=1 disable the startup model refresh\n {{envPrefix}}_CONFIG_DIR=<directory> set the {{product}} config directory\n {{envPrefix}}_SKIP_AUTO_UPDATE=1 skip the update check for this run\n NO_COLOR=1 disable colors\n FORCE_COLOR=0 disable colors (FORCE_COLOR=false also works)"
1032
+ }
1033
+ },
1034
+ "refresh": {
1035
+ "config": "Model config: {{source}}, revision {{revision}}",
1036
+ "problem": "({{problem}})",
1037
+ "up_to_date": "All model menus are up to date",
1038
+ "source": {
1039
+ "cloud": "gateway",
1040
+ "cache": "local cache",
1041
+ "bundled": "bundled snapshot",
1042
+ "none": "none (built-in list)"
1043
+ },
1044
+ "nothing_checked": "No model menu to sync: no saved API key, no tool configured by {{product}}, or the gateway is unreachable"
1045
+ },
1046
+ "validator": {
1047
+ "rejected": "the gateway rejected it; it may have been deleted, disabled or expired",
1048
+ "timeout": "the request timed out",
1049
+ "network": "couldn't connect to the gateway"
1050
+ }
1051
+ }