@vibeapi/api-helper 0.0.92 → 0.0.93

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.
@@ -1 +1 @@
1
- import{existsSync as t,readFileSync as r}from"fs";import{join as e}from"path";import{i18n as n}from"../i18n.js";import{prettyModelName as o}from"../gateway-models.js";import{getAgyRules as i}from"../model-registry.js";import{logger as a}from"../../utils/logger.js";import{readPersistentEnvFile as s,removePersistentEnv as l,writePersistentEnv as c}from"../persistent-env.js";import{backupBeforeWrite as p,atomicWriteFile as g}from"./backup.js";import{mirrorInstallCommand as m}from"./tool-installs.js";import{toolHome as u}from"./types.js";const d="GEMINI_API_KEY",f="GOOGLE_GEMINI_BASE_URL",y="AGY_LLM_GATEWAY_URL",v="AGY_LLM_GATEWAY_API_KEY",h="AGY_LLM_GATEWAY_MODELS",A=[d,f,y,v,h],_="gemini",j=()=>e(u(),".gemini","antigravity-cli"),b=()=>e(j(),"settings.json"),E=()=>e(j(),"vibeapi.env"),w="https://cnb.cool/vibeapi/agy/-/releases/latest/download",P={command:"agy",native:{binDir:"win32"===process.platform?["AppData","Local","agy","bin"]:[".local","bin"],updateArgs:["update"],dataDirs:[]},mirrorScript:{sh:`${w}/install.sh`,ps1:`${w}/install.ps1`}};function C(){if(!t(b()))return{};const e=r(b(),"utf-8");if(!e.trim())return{};try{const t=JSON.parse(e);if(!(n=t)||"object"!=typeof n||Array.isArray(n))throw new Error("settings.json root must be an object");return t}catch(t){throw new Error(`Existing ~/.gemini/antigravity-cli/settings.json cannot be parsed, back it up and fix it first: ${t instanceof Error?t.message:String(t)}`)}var n}function L(t){p(b()),g(b(),JSON.stringify(t,null,2)+"\n")}function M(t){return(t||"").replace(/\/+$/,"").replace(/\/v1(beta)?$/,"")}function G(t){const r=i().gatewayModels,e=t?r.filter(r=>t.models.includes(r)):[];return e.length>0?e:r}function K(t,r,e){return c("agy",E(),{[d]:t,[f]:r,[y]:r,[v]:t,[h]:e.join(",")}).rcFiles}const S=t=>o(t.replace(/-preview$/,""));let Y=null,k=null;export const antigravityAdapter={name:"agy",displayName:"Antigravity CLI",command:"agy",installCommand:m(P),installSpec:P,configPath:b(),wantsModelCatalog:!0,loadPrivateConfig(t){const r=C(),e=G(t.catalog);Y=K(t.apiKey,M(t.baseUrl),e),k=e,r.modelProvider!==_&&(r.modelProvider=_,L(r))},unloadPrivateConfig(){try{const t=C();t.modelProvider===_&&(delete t.modelProvider,L(t))}catch(t){a.logError("antigravityAdapter.unloadPrivateConfig",t)}l("agy",E(),A)},listedModels(){if(null===antigravityAdapter.detectCurrentConfig().apiKey)return null;const t=s(E())[h];return t?t.split(",").filter(Boolean):[]},refreshModelMenu(t){const r=s(E()),e=G(t.catalog),n=r[f]||M(t.baseUrl),o=r[d]||t.apiKey;r[h]===e.join(",")&&r[y]===n&&r[v]===o||K(o,n,e)},detectCurrentConfig(){try{if(C().modelProvider!==_)return{apiKey:null}}catch{return{apiKey:null}}const t=s(E())[d];return{apiKey:t&&t.trim()?t:null}},getConfig(){try{return C()}catch(t){return a.logError("antigravityAdapter.getConfig",t),null}},applyNotes(){const t=[];if(k&&k.length>0){const r=k.map(S);t.push({kind:"summary",text:n.t("tools.agy.menu_written",{count:String(r.length),list:r.join(n.t("tools.grok.list_separator")),default:r[0]})})}return null===Y||(0===Y.length?t.push({kind:"action",text:n.t("tools.agy.reopen_terminal_windows")}):t.push({kind:"action",text:n.t("tools.agy.reopen_terminal",{rc:Y.join(", ")})})),t},backupPaths:()=>[b(),E()],forceResetPaths:()=>[E()]};
1
+ import{chmodSync as t,existsSync as e,readFileSync as r}from"fs";import{join as n}from"path";import{i18n as o}from"../i18n.js";import{prettyModelName as i}from"../gateway-models.js";import{getAgyRules as a}from"../model-registry.js";import{logger as l}from"../../utils/logger.js";import{readPersistentEnvFile as s,removePersistentEnv as c,writePersistentEnv as u}from"../persistent-env.js";import{backupBeforeWrite as p,atomicWriteFile as d}from"./backup.js";import{mirrorInstallCommand as g}from"./tool-installs.js";import{toolHome as m}from"./types.js";const y="agy",f="AGY_LLM_GATEWAY_MODELS",v=["GEMINI_API_KEY","GOOGLE_GEMINI_BASE_URL","AGY_LLM_GATEWAY_URL","AGY_LLM_GATEWAY_API_KEY"],A="gemini",_=()=>n(m(),".gemini","antigravity-cli"),h=()=>n(_(),"settings.json"),E=()=>n(_(),"vibeapi.env"),j=()=>n(m(),".antigravity","settings.json"),b="https://cnb.cool/vibeapi/agy/-/releases/latest/download",w={command:"agy",native:{binDir:"win32"===process.platform?["AppData","Local","agy","bin"]:[".local","bin"],updateArgs:["update"],dataDirs:[]},mirrorScript:{sh:`${b}/install.sh`,ps1:`${b}/install.ps1`}};function I(t){return!!t&&"object"==typeof t&&!Array.isArray(t)}function K(t,n){if(!e(t))return{};const o=r(t,"utf-8");if(!o.trim())return{};try{const t=JSON.parse(o);if(!I(t))throw new Error(`${n} root must be an object`);return t}catch(t){throw new Error(`Existing ${n} cannot be parsed, back it up and fix it first: ${t instanceof Error?t.message:String(t)}`)}}const P=()=>K(h(),"~/.gemini/antigravity-cli/settings.json"),G=()=>K(j(),"~/.antigravity/settings.json");function L(e,r,n){p(e),d(e,JSON.stringify(r,null,2)+"\n",n),void 0!==n&&t(e,n)}function M(t){return(t||"").replace(/\/+$/,"").replace(/\/v1(beta)?$/,"")}function C(t){const e=a().gatewayModels,r=t?e.filter(e=>t.models.includes(e)):[];return r.length>0?r:e}const N=t=>i(t.replace(/-preview$/,""));function S(t){const e=t.gateway;return I(e)&&!0===e.enabled&&"string"==typeof e.apiKey&&e.apiKey.trim()&&"string"==typeof e.url?{url:e.url,apiKey:e.apiKey}:null}function Y(t){const e=t.models;return I(e)&&Array.isArray(e.list)?e.list.map(t=>I(t)&&"string"==typeof t.modelId?t.modelId:"").filter(Boolean):[]}function $(){try{if(P().modelProvider!==A)return null}catch{return null}const t=s(E()),e=t.GEMINI_API_KEY;return e&&e.trim()?{apiKey:e,url:t.GOOGLE_GEMINI_BASE_URL??""}:null}function k(t,e,r){const n=P(),o=G();o.gateway={...I(o.gateway)?o.gateway:{},enabled:!0,url:e,apiKey:t,wireProtocol:"genai"},o.models={...I(o.models)?o.models:{},defaultModelId:r[0],list:r.map(t=>({modelId:t,displayName:N(t),supportsThinking:!0}))},L(j(),o,384),v.some(t=>void 0!==s(E())[t])&&c(y,E(),v);const i=u(y,E(),{[f]:r.join(",")}).rcFiles;for(const t of v)delete process.env[t];return n.modelProvider===A&&(delete n.modelProvider,L(h(),n)),i}let O=null,x=null;export const antigravityAdapter={name:"agy",displayName:"Antigravity CLI",command:"agy",installCommand:g(w),installSpec:w,configPath:j(),wantsModelCatalog:!0,loadPrivateConfig(t){P(),G();const e=C(t.catalog);O=k(t.apiKey,M(t.baseUrl),e),x=e},unloadPrivateConfig(){try{const t=G();S(t)&&(delete t.gateway,delete t.models,L(j(),t,384))}catch(t){l.logError("antigravityAdapter.unloadPrivateConfig",t)}try{const t=P();t.modelProvider===A&&(delete t.modelProvider,L(h(),t))}catch(t){l.logError("antigravityAdapter.unloadPrivateConfig",t)}c(y,E(),[f,...v])},detectCurrentConfig(){try{const t=S(G());if(t)return{apiKey:t.apiKey}}catch{return{apiKey:null}}return{apiKey:$()?.apiKey??null}},listedModels(){try{const t=G();if(S(t))return Y(t)}catch{return null}return $()?[]:null},refreshModelMenu(t){const e=G(),r=S(e)??$();if(!r)return;const n=C(t.catalog),o=r.url||M(t.baseUrl);null!==S(e)&&Y(e).join(",")===n.join(",")&&s(E())[f]===n.join(",")&&null===$()||k(r.apiKey,o,n)},getConfig(){try{return G()}catch(t){return l.logError("antigravityAdapter.getConfig",t),null}},applyNotes(){const t=[];if(x&&x.length>0){const e=x.map(N);t.push({kind:"summary",text:o.t("tools.agy.menu_written",{count:String(e.length),list:e.join(o.t("tools.grok.list_separator")),default:e[0]})})}return null===O||t.push({kind:"action",text:o.t("tools.agy.effort_after_reopen")}),t},backupPaths:()=>[j(),h(),E()],forceResetPaths:()=>[E()]};
@@ -367,8 +367,7 @@
367
367
  "version_outdated": "version {{current}} is too old (needs {{min}} or later); upgrade with {{upgrade}}",
368
368
  "agy": {
369
369
  "menu_written": "{{count}} models in the menu ({{list}}), default {{default}}",
370
- "reopen_terminal": "Key and address were added to {{rc}}; open a new terminal before running agy",
371
- "reopen_terminal_windows": "Key and address were saved as user environment variables; reopen the terminal before running agy"
370
+ "effort_after_reopen": "agy works right away; in a new terminal the model menu also offers thinking levels (low / medium / high)"
372
371
  },
373
372
  "grok": {
374
373
  "menu_written": "{{count}} models in the menu ({{list}}), default {{default}}",
@@ -367,8 +367,7 @@
367
367
  "version_outdated": "版本 {{current}} 过旧,需要 {{min}} 及以上,运行 {{upgrade}} 升级",
368
368
  "agy": {
369
369
  "menu_written": "模型菜单 {{count}} 个({{list}}),默认 {{default}}",
370
- "reopen_terminal": "Key 与地址已写入 {{rc}},新开一个终端再运行 agy",
371
- "reopen_terminal_windows": "Key 与地址已写入用户环境变量,重新打开终端再运行 agy"
370
+ "effort_after_reopen": "现在就能运行 agy;新开的终端里模型菜单还会带思考档位(低 / 中 / 高)"
372
371
  },
373
372
  "grok": {
374
373
  "menu_written": "模型菜单 {{count}} 个({{list}}),默认 {{default}}",
package/dist/models.json CHANGED
@@ -296,7 +296,7 @@
296
296
  "codex": "0.122.0",
297
297
  "claude-code": "2.1.291",
298
298
  "claude-desktop": "2.2553.0",
299
- "agy": "1.2.2"
299
+ "agy": "1.3.5"
300
300
  },
301
301
  "gatewayAddresses": [
302
302
  {
package/models.json CHANGED
@@ -296,7 +296,7 @@
296
296
  "codex": "0.122.0",
297
297
  "claude-code": "2.1.291",
298
298
  "claude-desktop": "2.2553.0",
299
- "agy": "1.2.2"
299
+ "agy": "1.3.5"
300
300
  },
301
301
  "gatewayAddresses": [
302
302
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeapi/api-helper",
3
- "version": "0.0.92",
3
+ "version": "0.0.93",
4
4
  "description": "CLI tool for managing AI coding assistants (Claude Code, Codex, OpenClaw, Hermes, AtomCode, Grok Build) with one unified config",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",