@vibeapi/api-helper 0.0.26 → 0.0.29

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 (72) hide show
  1. package/README.md +24 -17
  2. package/dist/__tests__/claude-code-manager.test.js +1 -1
  3. package/dist/__tests__/claude-code-manager.test.js.map +1 -1
  4. package/dist/__tests__/command.test.js +1 -1
  5. package/dist/__tests__/command.test.js.map +1 -1
  6. package/dist/__tests__/commands.test.js +1 -1
  7. package/dist/__tests__/config-profiles.test.js +1 -1
  8. package/dist/__tests__/config.test.js +1 -1
  9. package/dist/__tests__/config.test.js.map +1 -1
  10. package/dist/__tests__/env-cleanup.test.d.ts +1 -0
  11. package/dist/__tests__/env-cleanup.test.js +1 -0
  12. package/dist/__tests__/env-cleanup.test.js.map +1 -0
  13. package/dist/__tests__/extra-commands.test.js +1 -1
  14. package/dist/__tests__/i18n.test.js +1 -1
  15. package/dist/__tests__/i18n.test.js.map +1 -1
  16. package/dist/__tests__/model-registry.test.js +1 -1
  17. package/dist/__tests__/model-registry.test.js.map +1 -1
  18. package/dist/__tests__/opencode-manager.test.js +1 -1
  19. package/dist/__tests__/runtime-options.test.js +1 -1
  20. package/dist/__tests__/secret-store.test.js +1 -1
  21. package/dist/__tests__/secret-store.test.js.map +1 -1
  22. package/dist/__tests__/setup-command.test.d.ts +1 -0
  23. package/dist/__tests__/setup-command.test.js +1 -0
  24. package/dist/__tests__/setup-command.test.js.map +1 -0
  25. package/dist/__tests__/tool-adapters.test.js +1 -1
  26. package/dist/__tests__/tool-adapters.test.js.map +1 -1
  27. package/dist/__tests__/tool-manager.test.js +1 -1
  28. package/dist/__tests__/tool-manager.test.js.map +1 -1
  29. package/dist/commands/auth.js +1 -1
  30. package/dist/commands/auth.js.map +1 -1
  31. package/dist/commands/completion.js +1 -1
  32. package/dist/commands/completion.js.map +1 -1
  33. package/dist/commands/config.js +1 -1
  34. package/dist/commands/config.js.map +1 -1
  35. package/dist/commands/setup.d.ts +20 -0
  36. package/dist/commands/setup.js +1 -0
  37. package/dist/commands/setup.js.map +1 -0
  38. package/dist/commands/status.js +1 -1
  39. package/dist/commands/status.js.map +1 -1
  40. package/dist/index.d.ts +1 -1
  41. package/dist/lib/claude-code-manager.d.ts +0 -8
  42. package/dist/lib/claude-code-manager.js +1 -1
  43. package/dist/lib/claude-code-manager.js.map +1 -1
  44. package/dist/lib/command.d.ts +5 -0
  45. package/dist/lib/command.js +1 -1
  46. package/dist/lib/command.js.map +1 -1
  47. package/dist/lib/config.d.ts +36 -19
  48. package/dist/lib/config.js +1 -1
  49. package/dist/lib/config.js.map +1 -1
  50. package/dist/lib/env-cleanup.d.ts +23 -0
  51. package/dist/lib/env-cleanup.js +1 -0
  52. package/dist/lib/env-cleanup.js.map +1 -0
  53. package/dist/lib/i18n.d.ts +6 -0
  54. package/dist/lib/i18n.js +1 -1
  55. package/dist/lib/i18n.js.map +1 -1
  56. package/dist/lib/secret-store.d.ts +8 -0
  57. package/dist/lib/secret-store.js +1 -1
  58. package/dist/lib/secret-store.js.map +1 -1
  59. package/dist/lib/tool-manager.d.ts +2 -2
  60. package/dist/lib/tools/opencode.js +1 -1
  61. package/dist/lib/tools/opencode.js.map +1 -1
  62. package/dist/lib/tools/types.d.ts +5 -5
  63. package/dist/lib/tools/types.js +1 -1
  64. package/dist/lib/wizard.d.ts +5 -0
  65. package/dist/lib/wizard.js +1 -1
  66. package/dist/lib/wizard.js.map +1 -1
  67. package/dist/locales/en_US.json +42 -22
  68. package/dist/locales/zh_CN.json +42 -21
  69. package/dist/models.json +2 -2
  70. package/dist/utils/logger.js +1 -1
  71. package/models.json +2 -2
  72. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "cli": {
3
- "title": "Coding Tool Helper (chelper)",
4
- "usage": "用法: chelper <命令> [选项]",
3
+ "title": "Coding Tool Helper (vibecli)",
4
+ "usage": "用法: vibecli <命令> [选项]",
5
5
  "commands": "命令:",
6
6
  "examples": "示例:",
7
7
  "error_unknown": "未知命令: {{command}}",
@@ -16,18 +16,19 @@
16
16
  "doctor": "健康检查",
17
17
  "enter": "配置管理",
18
18
  "tool": "工具管理",
19
- "status": "显示当前配置状态"
19
+ "status": "显示当前配置状态",
20
+ "setup": "一条命令完成配置(--key 按能力自动选工具 / --claudekey --codexkey 双令牌分别配置)"
20
21
  },
21
22
  "lang": {
22
23
  "current": "当前语言",
23
- "show_usage": "chelper lang show - 显示当前语言",
24
- "set_usage": "chelper lang set <zh_CN|en_US> - 设置语言",
24
+ "show_usage": "vibecli lang show - 显示当前语言",
25
+ "set_usage": "vibecli lang set <zh_CN|en_US> - 设置语言",
25
26
  "changed": "语言已从 {{from}} 更改为 {{to}}",
26
27
  "invalid": "不支持的语言: {{lang}}",
27
28
  "available": "可用语言"
28
29
  },
29
30
  "auth": {
30
- "set_usage": "chelper auth <token> - 设置API密钥",
31
+ "set_usage": "vibecli auth <token> - 设置API密钥",
31
32
  "token_prompt": "请输入API密钥",
32
33
  "token_required": "API密钥不能为空",
33
34
  "saved": "API密钥已保存",
@@ -90,10 +91,13 @@
90
91
  "settings": "设置",
91
92
  "menu_config_api_key": "API Key 配置",
92
93
  "menu_config_models": "模型配置 (配置 Haiku/Sonnet/Opus/Reasoning 模型)",
93
- "menu_config_tool": "编码工具配置 (将 API 应用到 Claude Code/OpenCode)",
94
+ "menu_config_tool": "编码工具配置 (将 API 应用到 Claude Code/Codex 等)",
94
95
  "menu_exit": "退出",
95
96
  "select_operation": "请选择操作:",
96
- "goodbye_message": "再见! 终端输入 claude,或者 VSCode 里面安装 Claude 插件,即可顺畅使用 Claude Code 编码了!",
97
+ "goodbye_message": "再见! vibecli 配置好工具后,在终端输入对应命令即可开始编码!",
98
+ "lang_auto_zh": "检测到系统语言为中文,已自动使用中文界面(主菜单或 vibecli lang set 可随时切换)。",
99
+ "goodbye_message_tools": "再见! 终端输入 {{commands}} 即可开始编码!",
100
+ "goodbye_claude_hint": "也可以在 VSCode 安装 Claude 插件使用 Claude Code。",
97
101
  "nav_return": "返回",
98
102
  "nav_exit": "退出",
99
103
  "current_active": "当前",
@@ -101,7 +105,7 @@
101
105
  "hint_navigate": "↑↓ 选择",
102
106
  "hint_confirm": "Enter 确认",
103
107
  "detected_config_title": "Claude Code 当前配置",
104
- "chelper_config_title": "Chelper 配置",
108
+ "vibecli_config_title": "Vibecli 配置",
105
109
  "claude_code_config_title": "Claude Code 当前全局配置",
106
110
  "config_synced": "配置已同步",
107
111
  "config_out_of_sync": "配置不一致,建议刷新",
@@ -187,8 +191,8 @@
187
191
  "git_not_installed": "Git 未安装。请从 https://git-scm.com/downloads 下载安装",
188
192
  "results_title": "健康检查结果:",
189
193
  "no_tools_installed": "未安装任何工具",
190
- "suggestion_auth": "运行 \"chelper auth\" 配置 API Key",
191
- "suggestion_interactive": "运行 \"chelper\" 进入交互式配置"
194
+ "suggestion_auth": "运行 \"vibecli auth\" 配置 API Key",
195
+ "suggestion_interactive": "运行 \"vibecli\" 进入交互式配置"
192
196
  },
193
197
  "preset": {
194
198
  "claude_mix": "Claude 混合",
@@ -207,13 +211,15 @@
207
211
  "models": "模型",
208
212
  "tools": "工具",
209
213
  "config_loaded": "已应用配置",
210
- "config_not_loaded": "未应用配置"
214
+ "config_not_loaded": "未应用配置",
215
+ "tool_key_label": "{{tool}} 专属 Key"
211
216
  },
212
217
  "messages": {
213
218
  "initializing": "正在初始化...",
214
219
  "args": "参数:",
215
220
  "first_run": "检测到首次运行,启动初始化向导...",
216
- "config_saved": "配置已保存"
221
+ "config_saved": "配置已保存",
222
+ "env_vars_cleared": "检测到 shell 环境变量 {{vars}} 并已自动清除(它们会覆盖 vibecli 写入的配置)。如已写入 shell 配置文件,请重开终端生效。"
217
223
  },
218
224
  "config": {
219
225
  "profile_list_title": "Profile 列表",
@@ -242,7 +248,7 @@
242
248
  "backup_restore_dry_run": "将恢复备份 {{name}}",
243
249
  "backup_restore_aborted": "已取消恢复备份",
244
250
  "unknown_command": "未知命令: {{command}}",
245
- "usage_hint": "用法: chelper config [profile|preset|backup|tool-model|<tool-name>] [...]",
251
+ "usage_hint": "用法: vibecli config [profile|preset|backup|tool-model|<tool-name>] [...]",
246
252
  "tool_config_loaded": "{{tool}} 配置已加载",
247
253
  "unknown_action": "未知操作: {{action}}",
248
254
  "unknown_tool": "未知工具: {{tool}}",
@@ -251,7 +257,7 @@
251
257
  "tool_model_list_title": "按工具的模型覆盖",
252
258
  "tool_model_set": "已设置 {{tool}} 的 {{slot}} 模型为 {{model}}",
253
259
  "tool_model_cleared": "已清除 {{tool}} 的模型覆盖",
254
- "tool_model_usage": "用法: chelper config tool-model set <tool> [slot] <model>",
260
+ "tool_model_usage": "用法: vibecli config tool-model set <tool> [slot] <model>",
255
261
  "confirm_restore": "确定把 {{tool}} 还原到上次更改前吗?(当前状态会先自动备份)",
256
262
  "config_restored": "{{tool}} 配置已还原",
257
263
  "restore_no_backup": "{{tool}} 没有可还原的备份",
@@ -263,10 +269,10 @@
263
269
  "no_files": "暂无日志文件"
264
270
  },
265
271
  "completion": {
266
- "header": "# chelper shell 自动补全",
267
- "instructions_bash": "请将以上输出保存到 ~/.chelper-completion.bash,并在 shell rc 中添加 'source ~/.chelper-completion.bash'",
268
- "instructions_zsh": "请将以上输出保存到 ~/.chelper-completion.zsh,并在 shell rc 中添加 'source ~/.chelper-completion.zsh'",
269
- "instructions_fish": "请将以上输出保存到 ~/.config/fish/completions/chelper.fish",
272
+ "header": "# vibecli shell 自动补全",
273
+ "instructions_bash": "请将以上输出保存到 ~/.vibecli-completion.bash,并在 shell rc 中添加 'source ~/.vibecli-completion.bash'",
274
+ "instructions_zsh": "请将以上输出保存到 ~/.vibecli-completion.zsh,并在 shell rc 中添加 'source ~/.vibecli-completion.zsh'",
275
+ "instructions_fish": "请将以上输出保存到 ~/.config/fish/completions/vibecli.fish",
270
276
  "unsupported_shell": "暂不支持的 shell: {{shell}} (支持 bash/zsh/fish)"
271
277
  },
272
278
  "bench": {
@@ -278,7 +284,7 @@
278
284
  "min": "最小值",
279
285
  "max": "最大值",
280
286
  "errors": "错误",
281
- "missing_api_key": "请先通过 'chelper auth' 配置 API Key"
287
+ "missing_api_key": "请先通过 'vibecli auth' 配置 API Key"
282
288
  },
283
289
  "update": {
284
290
  "checking": "正在检查更新...",
@@ -295,6 +301,21 @@
295
301
  "non_interactive_aborted": "已中止 - 缺少必要输入"
296
302
  },
297
303
  "secret_store": {
298
- "host_changed": "本机无法解密已保存的 API Key。密钥库可能创建于其它机器或用户。请通过 'chelper auth' 重新认证以刷新。"
304
+ "host_changed": "本机无法解密已保存的 API Key。密钥库可能创建于其它机器或用户。请通过 'vibecli auth' 重新认证以刷新。"
305
+ },
306
+ "setup": {
307
+ "usage": "用法: vibecli setup --key sk-xxx 或 vibecli setup --claudekey sk-a --codexkey sk-b",
308
+ "validating": "正在验证 {{label}} 的 API Key...",
309
+ "invalid_key": "{{label}} 的 API Key 无效: {{reason}}",
310
+ "probe_failed": "{{label}} 的模型能力探测失败(网络原因),按全部可用继续",
311
+ "key_no_claude": "{{label}} 无法访问 Claude 模型(令牌分组不含 Claude),已跳过 Claude Code",
312
+ "key_no_gpt": "{{label}} 无法访问 GPT 模型(令牌分组不含 GPT),已跳过 Codex",
313
+ "key_no_family": "该 Key 探测不到 Claude 或 GPT 模型,请确认令牌分组后重试",
314
+ "skip_no_claude": "该 Key 未开通 Claude 模型分组,已跳过 Claude Code",
315
+ "skip_no_gpt": "该 Key 未开通 GPT 模型分组,已跳过 Codex",
316
+ "configured": "√ {{tool}} 配置完成(运行 `{{command}}` 即可使用)",
317
+ "apply_failed": "{{tool}} 配置写入失败: {{reason}}",
318
+ "install_hint": " 提示: 尚未检测到 {{tool}},可运行 {{install}} 安装",
319
+ "done": "完成: 已配置 {{count}} 个工具。终端输入 {{commands}} 即可开始编码!"
299
320
  }
300
321
  }
package/dist/models.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "defaultModels": {
3
3
  "haiku": "claude-haiku-4-5-20251001",
4
- "sonnet": "claude-sonnet-4-6",
4
+ "sonnet": "claude-sonnet-5[1m]",
5
5
  "opus": "claude-opus-4-8[1m]",
6
6
  "reasoning": "claude-opus-4-8[1m]"
7
7
  },
@@ -9,7 +9,7 @@
9
9
  "toolDefaults": {
10
10
  "claude-code": "",
11
11
  "opencode": "gpt-5.5",
12
- "codex": "gpt-5.5",
12
+ "codex": "gpt-5.6-sol",
13
13
  "openclaw": "gpt-5.5",
14
14
  "hermes": "gpt-5.5",
15
15
  "atomcode": "gpt-5.5"
@@ -1 +1 @@
1
- import{existsSync as e,mkdirSync as t,appendFileSync as i,readdirSync as o,statSync as r,unlinkSync as s}from"fs";import{join as g}from"path";import{homedir as n}from"os";export var LogLevel;!function(e){e[e.DEBUG=0]="DEBUG",e[e.INFO=1]="INFO",e[e.WARN=2]="WARN",e[e.ERROR=3]="ERROR"}(LogLevel||(LogLevel={}));const l=["token","apikey","api_key","api-key","auth_token","auth-token","authorization","password","secret","credential","anthropic_auth_token","anthropic_api_key","z_ai_api_key"],a=[/eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,/\b[a-zA-Z0-9]{32,}\b/g,/Bearer\s+[A-Za-z0-9._-]+/gi];export class Logger{static instance;logLevel=LogLevel.INFO;fileLogLevel=LogLevel.WARN;logDir;fileLoggingEnabled=!0;retentionDays=14;constructor(){this.logDir=g(n(),".chelper"),this.ensureLogDir(),this.rotateOldLogs()}static getInstance(){return Logger.instance||(Logger.instance=new Logger),Logger.instance}ensureLogDir(){try{e(this.logDir)||t(this.logDir,{recursive:!0})}catch{this.fileLoggingEnabled=!1}}getLogFilePath(){const e=(new Date).toISOString().split("T")[0];return g(this.logDir,`${e}.log`)}rotateOldLogs(){if(this.fileLoggingEnabled&&e(this.logDir))try{const e=Date.now()-24*this.retentionDays*60*60*1e3,t=o(this.logDir).filter(e=>/^\d{4}-\d{2}-\d{2}\.log$/.test(e));for(const i of t){const t=g(this.logDir,i);try{r(t).mtimeMs<e&&s(t)}catch{}}}catch{}}setRetentionDays(e){e>=0&&Number.isFinite(e)&&(this.retentionDays=Math.floor(e),this.rotateOldLogs())}sanitizeValue(e){if(null==e)return e;if("string"==typeof e){let t=e;for(const e of a)t=t.replace(e,"[REDACTED]");return t}if(Array.isArray(e))return e.map(e=>this.sanitizeValue(e));if("object"==typeof e){const t={};for(const[i,o]of Object.entries(e)){const e=i.toLowerCase(),r=l.some(t=>e.includes(t));t[i]=r?"[REDACTED]":this.sanitizeValue(o)}return t}return e}sanitize(e,t){return{message:this.sanitizeValue(e),args:t.map(e=>this.sanitizeValue(e))}}formatArgs(e){return 0===e.length?"":" "+e.map(e=>{if("object"==typeof e)try{return JSON.stringify(e)}catch{return String(e)}return String(e)}).join(" ")}writeToFile(e,t,o){if(this.fileLoggingEnabled)try{const{message:r,args:s}=this.sanitize(t,o),g=`${(new Date).toISOString()} [${e}] ${r}${this.formatArgs(s)}\n`;i(this.getLogFilePath(),g,"utf-8")}catch{}}setLogLevel(e){this.logLevel=e}setFileLogLevel(e){this.fileLogLevel=e}setFileLoggingEnabled(e){this.fileLoggingEnabled=e}debug(e,...t){this.logLevel<=LogLevel.DEBUG&&console.debug(`[DEBUG] ${e}`,...t),this.fileLoggingEnabled&&this.fileLogLevel<=LogLevel.DEBUG&&this.writeToFile("DEBUG",e,t)}info(e,...t){this.logLevel<=LogLevel.INFO&&console.info(`[INFO] ${e}`,...t),this.fileLoggingEnabled&&this.fileLogLevel<=LogLevel.INFO&&this.writeToFile("INFO",e,t)}warn(e,...t){this.logLevel<=LogLevel.WARN&&console.warn(`[WARN] ${e}`,...t),this.fileLoggingEnabled&&this.fileLogLevel<=LogLevel.WARN&&this.writeToFile("WARN",e,t)}error(e,...t){this.logLevel<=LogLevel.ERROR&&console.error(`[ERROR] ${e}`,...t),this.fileLoggingEnabled&&this.fileLogLevel<=LogLevel.ERROR&&this.writeToFile("ERROR",e,t)}logError(e,t){const i=t instanceof Error?t.message:String(t),o=t instanceof Error?t.stack:void 0;this.writeToFile("ERROR",`[${e}] ${i}`,o?[{stack:o}]:[])}getLogDir(){return this.logDir}}export const logger=Logger.getInstance();
1
+ import{existsSync as e,mkdirSync as t,appendFileSync as i,readdirSync as o,statSync as r,unlinkSync as s}from"fs";import{join as g}from"path";import{homedir as n}from"os";export var LogLevel;!function(e){e[e.DEBUG=0]="DEBUG",e[e.INFO=1]="INFO",e[e.WARN=2]="WARN",e[e.ERROR=3]="ERROR"}(LogLevel||(LogLevel={}));const l=["token","apikey","api_key","api-key","auth_token","auth-token","authorization","password","secret","credential","anthropic_auth_token","anthropic_api_key","z_ai_api_key"],a=[/eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,/\b[a-zA-Z0-9]{32,}\b/g,/Bearer\s+[A-Za-z0-9._-]+/gi];export class Logger{static instance;logLevel=LogLevel.INFO;fileLogLevel=LogLevel.WARN;logDir;fileLoggingEnabled=!0;retentionDays=14;constructor(){this.logDir=g(n(),".vibecli"),this.ensureLogDir(),this.rotateOldLogs()}static getInstance(){return Logger.instance||(Logger.instance=new Logger),Logger.instance}ensureLogDir(){try{e(this.logDir)||t(this.logDir,{recursive:!0})}catch{this.fileLoggingEnabled=!1}}getLogFilePath(){const e=(new Date).toISOString().split("T")[0];return g(this.logDir,`${e}.log`)}rotateOldLogs(){if(this.fileLoggingEnabled&&e(this.logDir))try{const e=Date.now()-24*this.retentionDays*60*60*1e3,t=o(this.logDir).filter(e=>/^\d{4}-\d{2}-\d{2}\.log$/.test(e));for(const i of t){const t=g(this.logDir,i);try{r(t).mtimeMs<e&&s(t)}catch{}}}catch{}}setRetentionDays(e){e>=0&&Number.isFinite(e)&&(this.retentionDays=Math.floor(e),this.rotateOldLogs())}sanitizeValue(e){if(null==e)return e;if("string"==typeof e){let t=e;for(const e of a)t=t.replace(e,"[REDACTED]");return t}if(Array.isArray(e))return e.map(e=>this.sanitizeValue(e));if("object"==typeof e){const t={};for(const[i,o]of Object.entries(e)){const e=i.toLowerCase(),r=l.some(t=>e.includes(t));t[i]=r?"[REDACTED]":this.sanitizeValue(o)}return t}return e}sanitize(e,t){return{message:this.sanitizeValue(e),args:t.map(e=>this.sanitizeValue(e))}}formatArgs(e){return 0===e.length?"":" "+e.map(e=>{if("object"==typeof e)try{return JSON.stringify(e)}catch{return String(e)}return String(e)}).join(" ")}writeToFile(e,t,o){if(this.fileLoggingEnabled)try{const{message:r,args:s}=this.sanitize(t,o),g=`${(new Date).toISOString()} [${e}] ${r}${this.formatArgs(s)}\n`;i(this.getLogFilePath(),g,"utf-8")}catch{}}setLogLevel(e){this.logLevel=e}setFileLogLevel(e){this.fileLogLevel=e}setFileLoggingEnabled(e){this.fileLoggingEnabled=e}debug(e,...t){this.logLevel<=LogLevel.DEBUG&&console.debug(`[DEBUG] ${e}`,...t),this.fileLoggingEnabled&&this.fileLogLevel<=LogLevel.DEBUG&&this.writeToFile("DEBUG",e,t)}info(e,...t){this.logLevel<=LogLevel.INFO&&console.info(`[INFO] ${e}`,...t),this.fileLoggingEnabled&&this.fileLogLevel<=LogLevel.INFO&&this.writeToFile("INFO",e,t)}warn(e,...t){this.logLevel<=LogLevel.WARN&&console.warn(`[WARN] ${e}`,...t),this.fileLoggingEnabled&&this.fileLogLevel<=LogLevel.WARN&&this.writeToFile("WARN",e,t)}error(e,...t){this.logLevel<=LogLevel.ERROR&&console.error(`[ERROR] ${e}`,...t),this.fileLoggingEnabled&&this.fileLogLevel<=LogLevel.ERROR&&this.writeToFile("ERROR",e,t)}logError(e,t){const i=t instanceof Error?t.message:String(t),o=t instanceof Error?t.stack:void 0;this.writeToFile("ERROR",`[${e}] ${i}`,o?[{stack:o}]:[])}getLogDir(){return this.logDir}}export const logger=Logger.getInstance();
package/models.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "defaultModels": {
3
3
  "haiku": "claude-haiku-4-5-20251001",
4
- "sonnet": "claude-sonnet-4-6",
4
+ "sonnet": "claude-sonnet-5[1m]",
5
5
  "opus": "claude-opus-4-8[1m]",
6
6
  "reasoning": "claude-opus-4-8[1m]"
7
7
  },
@@ -9,7 +9,7 @@
9
9
  "toolDefaults": {
10
10
  "claude-code": "",
11
11
  "opencode": "gpt-5.5",
12
- "codex": "gpt-5.5",
12
+ "codex": "gpt-5.6-sol",
13
13
  "openclaw": "gpt-5.5",
14
14
  "hermes": "gpt-5.5",
15
15
  "atomcode": "gpt-5.5"
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@vibeapi/api-helper",
3
- "version": "0.0.26",
4
- "description": "CLI tool for managing AI coding assistants (Claude Code, OpenCode, Codex, OpenClaw, Hermes, AtomCode) with one unified config",
3
+ "version": "0.0.29",
4
+ "description": "CLI tool for managing AI coding assistants (Claude Code, Codex, OpenClaw, Hermes, AtomCode) with one unified config",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "bin": {
8
8
  "api-helper": "dist/cli.js",
9
- "chelper": "dist/cli.js"
9
+ "vibecli": "dist/cli.js"
10
10
  },
11
11
  "homepage": "https://www.vibeapi.cn/",
12
12
  "bugs": {