@vibeapi/api-helper 0.0.39 → 0.0.40

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @vibeapi/api-helper
2
2
 
3
- > 一条命令,在 Claude Code / Codex / OpenClaw / Hermes / AtomCode 之间统一配置 API Key 与模型。
3
+ > 一条命令,在 Claude Code / Codex / OpenClaw / Hermes / AtomCode / Grok Build 之间统一配置 API Key 与模型。
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/@vibeapi/api-helper.svg)](https://www.npmjs.com/package/@vibeapi/api-helper)
6
6
  [![Node](https://img.shields.io/node/v/@vibeapi/api-helper.svg)](https://nodejs.org)
@@ -76,9 +76,9 @@ vibecli config claude-code clear-model # 模型选择被钉住时,交还给
76
76
 
77
77
  ## 能做什么
78
78
 
79
- - **多工具一键配置**:把当前 API Key / 模型注入 Claude Code、Codex、OpenClaw、Hermes、AtomCode(OpenCode 暂时下架,`vibecli config opencode` 仍可用)。
79
+ - **多工具一键配置**:把当前 API Key / 模型注入 Claude Code、Codex、OpenClaw、Hermes、AtomCode、Grok Build(OpenCode 暂时下架,`vibecli config opencode` 仍可用)。
80
80
  - **按工具选模型**:使用默认 / 实时从 API 拉取 / 内置预设 / 手动输入;每个工具可用不同模型。
81
- - Claude Code 用默认模型时不写 `ANTHROPIC_*_MODEL` 环境变量,顶层 `model` 由 `settings-template.json` 提供(当前为 `opus[1m]`);显式选择其它模型时会覆盖该模板值。Codex 默认 `gpt-5.6-sol`,其余工具默认 `gpt-5.5`。
81
+ - Claude Code 用默认模型时不写 `ANTHROPIC_*_MODEL` 环境变量,顶层 `model` 由 `settings-template.json` 提供(当前为 `opus[1m]`);显式选择其它模型时会覆盖该模板值。Codex 默认 `gpt-6-astra`,其余工具默认 `gpt-5.5`。
82
82
  - Codex 默认启用 1M 上下文窗口(自动压缩阈值 900K);交互配置 Codex 时可取消。
83
83
  - **不动你的其它配置**:只改本工具的 provider 字段,你的 hooks、MCP、插件、权限设置原样保留。
84
84
  - **改前自动备份 + 一键还原**:覆盖配置前先快照(每文件留 10 份),`vibecli config <tool> restore` 随时回退;还原本身也可再撤销。
@@ -91,7 +91,7 @@ vibecli config claude-code clear-model # 模型选择被钉住时,交还给
91
91
  vibecli config <tool> # 配置某工具(选模型 → 应用 / 移除 / 还原)
92
92
  vibecli config <tool> restore # 还原该工具到上次更改前
93
93
  vibecli config <tool> clear-model # 清掉钉死的模型设置,回到工具自带默认(保留 API Key)
94
- vibecli config tool-model set codex gpt-5.6-sol # 单独给某工具指定模型
94
+ vibecli config tool-model set codex gpt-6-astra # 单独给某工具指定模型
95
95
  vibecli config profile use work # 切换 profile
96
96
  vibecli doctor # 健康巡检
97
97
  ```
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Brand identity used when this CLI writes provider entries into third-party
3
- * tool config files (Codex, OpenClaw, Hermes, AtomCode, ...).
3
+ * tool config files (Codex, OpenClaw, Hermes, AtomCode, Grok Build, ...).
4
4
  *
5
5
  * Keeping these in one place makes a rebrand (or a white-label fork) a single-file
6
6
  * change instead of a grep-and-replace across every tool adapter.
@@ -14,7 +14,7 @@ export interface ModelPreset {
14
14
  }
15
15
  export interface ModelRegistryData {
16
16
  defaultModels: Models;
17
- /** Default model for non-Claude tools (Codex/OpenCode/OpenClaw/Hermes/AtomCode). */
17
+ /** Default model for non-Claude tools (Codex/OpenCode/OpenClaw/Hermes/AtomCode/Grok). */
18
18
  defaultToolModel?: string;
19
19
  /** Per-tool default model. Empty string (e.g. claude-code) means "use the tool's built-in default". */
20
20
  toolDefaults?: Record<string, string>;
@@ -0,0 +1,2 @@
1
+ import { type ToolAdapter } from './types.js';
2
+ export declare const grokAdapter: ToolAdapter;
@@ -0,0 +1 @@
1
+ import{existsSync as e,readFileSync as t}from"fs";import{join as r}from"path";import*as o from"@iarna/toml";import{logger as n}from"../../utils/logger.js";import{BRAND_NAME as i,PROVIDER_KEY as l}from"../brand.js";import{backupBeforeWrite as s,atomicWriteFile as a}from"./backup.js";import{pickModel as m,toolHome as d,withV1 as f}from"./types.js";import{getToolDefaultModel as c}from"../model-registry.js";const p=()=>r(r(d(),".grok"),"config.toml"),g=l,u="win32"===process.platform?'powershell -c "irm https://x.ai/cli/install.ps1 | iex"':"curl -fsSL https://x.ai/cli/install.sh | bash";function y(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function h(e,t){return y(e[t])||(e[t]={}),e[t]}function k(){if(!e(p()))return{};const r=t(p(),"utf-8");if(!r.trim())return{};try{const e=o.parse(r);if(!y(e))throw new Error("config.toml root must be a TOML table");return e}catch(e){throw new Error(`Existing ~/.grok/config.toml cannot be parsed, back it up and fix it first: ${e instanceof Error?e.message:String(e)}`)}}export const grokAdapter={name:"grok",displayName:"Grok Build",command:"grok",installCommand:u,configPath:p(),loadPrivateConfig(e){const t=k();h(t,"endpoints").models_base_url=f(e.baseUrl),h(t,"models").default=g;const r=h(t,"model"),n=y(r[g])?{...r[g]}:{};r[g]={...n,name:i,model:m(e.models,c("grok")),api_key:e.apiKey,context_window:256e3},s(p()),a(p(),o.stringify(t))},unloadPrivateConfig(){if(!e(p()))return;let t;try{t=k()}catch(e){return void n.logError("grokAdapter.unloadPrivateConfig",e)}y(t.model)&&(delete t.model[g],0===Object.keys(t.model).length&&delete t.model),y(t.models)&&t.models.default===g&&(delete t.models.default,0===Object.keys(t.models).length&&delete t.models),y(t.endpoints)&&(delete t.endpoints.models_base_url,0===Object.keys(t.endpoints).length&&delete t.endpoints),s(p()),a(p(),o.stringify(t))},detectCurrentConfig(){try{const e=k(),t=y(e.model)?e.model:{},r=y(t[g])?t[g]:null,o=r?r.api_key:null;return{apiKey:"string"==typeof o&&o.trim()?o:null}}catch{return{apiKey:null}}},getConfig(){try{return k()}catch(e){return n.logError("grokAdapter.getConfig",e),null}}};
@@ -1 +1 @@
1
- import{claudeCodeAdapter as o}from"./claude-code.js";import{opencodeAdapter as r}from"./opencode.js";import{codexAdapter as t}from"./codex.js";import{openclawAdapter as e}from"./openclaw.js";import{hermesAdapter as m}from"./hermes.js";import{atomcodeAdapter as p}from"./atomcode.js";const n=[o,r,t,e,m,p];export const TOOL_ADAPTERS=Object.fromEntries(n.map(o=>[o.name,o]));export function getAdapter(o){return TOOL_ADAPTERS[o]}export function listAdapters(){return[...n]}
1
+ import{claudeCodeAdapter as o}from"./claude-code.js";import{opencodeAdapter as r}from"./opencode.js";import{codexAdapter as t}from"./codex.js";import{openclawAdapter as e}from"./openclaw.js";import{hermesAdapter as m}from"./hermes.js";import{atomcodeAdapter as p}from"./atomcode.js";import{grokAdapter as s}from"./grok.js";const n=[o,r,t,e,m,p,s];export const TOOL_ADAPTERS=Object.fromEntries(n.map(o=>[o.name,o]));export function getAdapter(o){return TOOL_ADAPTERS[o]}export function listAdapters(){return[...n]}
package/dist/models.json CHANGED
@@ -9,10 +9,11 @@
9
9
  "toolDefaults": {
10
10
  "claude-code": "",
11
11
  "opencode": "gpt-5.5",
12
- "codex": "gpt-5.6-sol",
12
+ "codex": "gpt-6-astra",
13
13
  "openclaw": "gpt-5.5",
14
14
  "hermes": "gpt-5.5",
15
- "atomcode": "gpt-5.5"
15
+ "atomcode": "gpt-5.5",
16
+ "grok": "gpt-5.5"
16
17
  },
17
18
  "presets": [
18
19
  { "name": "GPT-5.5", "model": "gpt-5.5" },
package/models.json CHANGED
@@ -9,10 +9,11 @@
9
9
  "toolDefaults": {
10
10
  "claude-code": "",
11
11
  "opencode": "gpt-5.5",
12
- "codex": "gpt-5.6-sol",
12
+ "codex": "gpt-6-astra",
13
13
  "openclaw": "gpt-5.5",
14
14
  "hermes": "gpt-5.5",
15
- "atomcode": "gpt-5.5"
15
+ "atomcode": "gpt-5.5",
16
+ "grok": "gpt-5.5"
16
17
  },
17
18
  "presets": [
18
19
  { "name": "GPT-5.5", "model": "gpt-5.5" },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vibeapi/api-helper",
3
- "version": "0.0.39",
4
- "description": "CLI tool for managing AI coding assistants (Claude Code, Codex, OpenClaw, Hermes, AtomCode) with one unified config",
3
+ "version": "0.0.40",
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",
7
7
  "bin": {