@vibeapi/cli 0.0.171 → 0.0.173

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,6 +1,6 @@
1
1
  {
2
2
  "schema": 1,
3
- "revision": "2026-11-10T00:13:23Z-14",
3
+ "revision": "2026-11-11T07:56:51Z-16",
4
4
  "min_client_version": "",
5
5
  "upgrade_message": "",
6
6
  "defaults": {
@@ -1843,6 +1843,47 @@
1843
1843
  "recommended": false,
1844
1844
  "hidden": false,
1845
1845
  "context_window": 1048576,
1846
+ "max_output_tokens": 65536,
1847
+ "capabilities": {
1848
+ "functionCall": true,
1849
+ "vision": true,
1850
+ "reasoning": true,
1851
+ "imageOutput": false,
1852
+ "video": true,
1853
+ "structuredOutput": true,
1854
+ "contextWindowTokens": 1048576,
1855
+ "maxOutput": 65536,
1856
+ "inputModalities": [
1857
+ "text",
1858
+ "image",
1859
+ "video",
1860
+ "audio"
1861
+ ],
1862
+ "outputModalities": [
1863
+ "text"
1864
+ ],
1865
+ "knowledgeCutoff": "2026-03-31",
1866
+ "reasoningEfforts": [
1867
+ "low",
1868
+ "medium",
1869
+ "high"
1870
+ ]
1871
+ },
1872
+ "endpoint_types": [
1873
+ "gemini",
1874
+ "openai"
1875
+ ]
1876
+ },
1877
+ {
1878
+ "id": "gemini-4-carbon",
1879
+ "name": "Gemini 4 Carbon",
1880
+ "description": "100 万上下文 | 前沿推理 | 长程 Agent",
1881
+ "group": "",
1882
+ "group_name": "",
1883
+ "recommended": false,
1884
+ "hidden": false,
1885
+ "context_window": 1048576,
1886
+ "max_output_tokens": 65536,
1846
1887
  "capabilities": {
1847
1888
  "functionCall": true,
1848
1889
  "vision": true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": 1,
3
- "revision": "2026-11-10T00:13:23Z-14",
3
+ "revision": "2026-11-11T07:56:51Z-16",
4
4
  "min_client_version": "",
5
5
  "upgrade_message": "",
6
6
  "defaults": {
@@ -1843,6 +1843,47 @@
1843
1843
  "recommended": false,
1844
1844
  "hidden": false,
1845
1845
  "context_window": 1048576,
1846
+ "max_output_tokens": 65536,
1847
+ "capabilities": {
1848
+ "functionCall": true,
1849
+ "vision": true,
1850
+ "reasoning": true,
1851
+ "imageOutput": false,
1852
+ "video": true,
1853
+ "structuredOutput": true,
1854
+ "contextWindowTokens": 1048576,
1855
+ "maxOutput": 65536,
1856
+ "inputModalities": [
1857
+ "text",
1858
+ "image",
1859
+ "video",
1860
+ "audio"
1861
+ ],
1862
+ "outputModalities": [
1863
+ "text"
1864
+ ],
1865
+ "knowledgeCutoff": "2026-03-31",
1866
+ "reasoningEfforts": [
1867
+ "low",
1868
+ "medium",
1869
+ "high"
1870
+ ]
1871
+ },
1872
+ "endpoint_types": [
1873
+ "gemini",
1874
+ "openai"
1875
+ ]
1876
+ },
1877
+ {
1878
+ "id": "gemini-4-carbon",
1879
+ "name": "Gemini 4 Carbon",
1880
+ "description": "100 万上下文 | 前沿推理 | 长程 Agent",
1881
+ "group": "",
1882
+ "group_name": "",
1883
+ "recommended": false,
1884
+ "hidden": false,
1885
+ "context_window": 1048576,
1886
+ "max_output_tokens": 65536,
1846
1887
  "capabilities": {
1847
1888
  "functionCall": true,
1848
1889
  "vision": true,
@@ -1 +1 @@
1
- import{randomUUID as e}from"crypto";import{arch as t,homedir as r,release as o}from"os";import{format as n,stripVTControlCharacters as s}from"util";import{brand as a,brandEnv as i,CLI_NAME as c}from"./brand.js";import{clientVersion as l,installId as u}from"./client-config.js";import{configManager as p}from"./config.js";import{gatewayAddresses as f}from"./gateway-addresses.js";import{INSTALL_ID_HEADER as m,REPORT_PATH as d,TELEMETRY_PATH as h}from"./gateway-protocol.js";const g=e();let y="wizard",w=[];const T=new Set;let k=null,x=z;export function telemetryEnabled(){if(process.env.VITEST&&!$)return!1;const e=i("TELEMETRY")?.trim().toLowerCase();return!("0"===e||"false"===e||"off"===e)}let S,$=!1;export function setTelemetrySenderForTests(e){x=e??z,$=null!==e,w=[]}export function clientHeaders(){const e=`${c}/${l()} (${process.platform} ${o()}; ${t()}) node/${process.versions.node}`;return telemetryEnabled()?{"User-Agent":e,[m]:u()}:{"User-Agent":e}}export function installClientHeaders(){const e=globalThis.fetch;if(!e||e.gatewayHeaders)return;const t=(t,r)=>{try{const o=new URL("string"==typeof t||t instanceof URL?t.toString():t.url);if(new Set([p.getBaseUrl(),...f().map(e=>e.url)].map(e=>new URL(e).host)).has(o.host)){const o=new Headers(r?.headers??(t instanceof Request?t.headers:void 0));for(const[e,t]of Object.entries(clientHeaders()))o.has(e)||o.set(e,t);return e(t,{...r,headers:o})}}catch{}return e(t,r)};t.gatewayHeaders=!0,globalThis.fetch=t}export function telemetryPending(){return T.size>0}function _(){return{install_id:u(),cli_version:l(),brand:a().id,os:process.platform,os_release:o(),arch:t(),node_version:process.versions.node}}export function maskHome(e){const t=r();if(!t||t.length<2)return e;const o=new Set([t,t.replace(/\\/g,"/")]);let n=e;for(const e of o)n=n.split(e).join("~");return n}export function maskSecrets(e){return maskHome(e).replace(/(sk-[A-Za-z0-9_-]{2})[A-Za-z0-9_-]{8,}([A-Za-z0-9_-]{4})\b/g,"$1…$2").replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi,"$1…").replace(/(\b[a-z][a-z0-9+.-]*:\/\/)\S*@/gi,"$1…@").replace(/[^\s/@:]+:[^\s/]*@(?=[a-z0-9.-]+)/gi,"…@").replace(/\b((?:api[_-]?key|token|password|passwd|secret|auth)\s*[=:]\s*)("?)[^\s"&;,]{6,}\2/gi,"$1$2…$2")}let b=!1;export function noteFailureReason(e){const t=s(e).split("\n").map(e=>e.trim()).filter(Boolean).pop();t&&(S=t)}export function lastFailureReason(){return S}export function watchConsoleErrors(){if(b)return;b=!0;const e=console.error;console.error=(...t)=>{noteFailureReason(n(...t)),e.apply(console,t)}}export function setTelemetryCommand(e){y=e}export function track(e,t,r={}){if(!telemetryEnabled())return;const o=void 0===r.error?void 0:maskSecrets(r.error instanceof Error?r.error.message:String(r.error)).slice(0,2e3);w.push({ts:Date.now(),session:g,command:y,step:e,status:t,...void 0!==r.duration_ms?{duration_ms:Math.round(r.duration_ms)}:{},...o?{error:o}:{},...r.detail?{detail:r.detail}:{}}),"start"===t?v():k||(k=setTimeout(v,500),k.unref())}export async function trackStep(e,t,r){const o=Date.now();track(e,"start",r?{detail:r}:{});try{const r=await t();return track(e,"ok",{duration_ms:Date.now()-o}),r}catch(t){throw track(e,"fail",{duration_ms:Date.now()-o,error:t}),t}}function v(){if(k&&(clearTimeout(k),k=null),0===w.length)return;const e=w.splice(0,50),t=x(h,{..._(),events:e},3e3).then(()=>{},()=>{}).finally(()=>T.delete(t));T.add(t),w.length>0&&v()}export async function flushTelemetry(e=1500){v(),0!==T.size&&await Promise.race([Promise.allSettled([...T]),new Promise(t=>setTimeout(t,e).unref())])}export async function reportCrash(e,t=1500){const r=e instanceof Error?e.stack?.split("\n").map(e=>e.trim()).find(e=>e.startsWith("at ")):void 0;track("command","fail",{error:e,detail:{exit_code:1,type:"crash",...r?{at:maskHome(r).slice(0,200)}:{}}}),await flushTelemetry(t)}export async function uploadReport(e){try{const t=await x(d,{..._(),report:e},2e4),r=t?.data?.code;return"string"==typeof r&&r?r:null}catch{return null}}async function z(e,t,r){const o=p.getApiKey()?.trim(),n=await fetch(new URL(e,p.getBaseUrl()).toString(),{method:"POST",headers:{"Content-Type":"application/json",...clientHeaders(),...o?{Authorization:`Bearer ${o}`}:{}},body:JSON.stringify(t),signal:AbortSignal.timeout(r)});if(!n.ok)throw new Error(`HTTP ${n.status}`);return n.json().catch(()=>null)}
1
+ import{randomUUID as e}from"crypto";import{arch as t,homedir as r,release as o}from"os";import{format as n,stripVTControlCharacters as s}from"util";import{brand as a,brandEnv as i,CLI_NAME as c}from"./brand.js";import{clientVersion as l,installId as u}from"./client-config.js";import{configManager as p}from"./config.js";import{gatewayAddresses as f}from"./gateway-addresses.js";import{INSTALL_ID_HEADER as d,REPORT_PATH as m,TELEMETRY_PATH as h}from"./gateway-protocol.js";const g=e();let y="wizard",w=[];const T=new Set;let k=null,x=E;export function telemetryEnabled(){if(process.env.VITEST&&!$)return!1;const e=i("TELEMETRY")?.trim().toLowerCase();return!("0"===e||"false"===e||"off"===e)}let S,$=!1;export function setTelemetrySenderForTests(e){x=e??E,$=null!==e,w=[]}export function clientHeaders(){const e=`${c}/${l()} (${process.platform} ${o()}; ${t()}) node/${process.versions.node}`;return telemetryEnabled()?{"User-Agent":e,[d]:u()}:{"User-Agent":e}}export function installClientHeaders(){const e=globalThis.fetch;if(!e||e.gatewayHeaders)return;const t=(t,r)=>{try{const o=new URL("string"==typeof t||t instanceof URL?t.toString():t.url);if(new Set([p.getBaseUrl(),...f().map(e=>e.url)].map(e=>new URL(e).host)).has(o.host)){const o=new Headers(r?.headers??(t instanceof Request?t.headers:void 0));for(const[e,t]of Object.entries(clientHeaders()))o.has(e)||o.set(e,t);return e(t,{...r,headers:o})}}catch{}return e(t,r)};t.gatewayHeaders=!0,globalThis.fetch=t}export function telemetryPending(){return T.size>0}function _(){return{install_id:u(),cli_version:l(),brand:a().id,os:process.platform,os_release:o(),arch:t(),node_version:process.versions.node}}export function maskHome(e){const t=r();if(!t||t.length<2)return e;const o=new Set([t,t.replace(/\\/g,"/")]);let n=e;for(const e of o)n=n.split(e).join("~");return n}export function maskSecrets(e){return maskHome(e).replace(/(sk-[A-Za-z0-9_-]{2})[A-Za-z0-9_-]{8,}([A-Za-z0-9_-]{4})\b/g,"$1…$2").replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi,"$1…").replace(/(\b[a-z][a-z0-9+.-]*:\/\/)\S*@/gi,"$1…@").replace(/[^\s/@:]+:[^\s/]*@(?=[a-z0-9.-]+)/gi,"…@").replace(/\b((?:api[_-]?key|token|password|passwd|secret|auth)\s*[=:]\s*)("?)[^\s"&;,]{6,}\2/gi,"$1$2…$2")}let b=!1;export function noteFailureReason(e){const t=s(e).split("\n").map(e=>e.trim()).filter(Boolean).pop();t&&(S=t)}export function lastFailureReason(){return S}export function watchConsoleErrors(){if(b)return;b=!0;const e=console.error;console.error=(...t)=>{noteFailureReason(n(...t)),e.apply(console,t)}}export function setTelemetryCommand(e){y=e}export function track(e,t,r={}){if(!telemetryEnabled())return;const o=void 0===r.error?void 0:maskSecrets(r.error instanceof Error?r.error.message:String(r.error)).slice(0,2e3);w.push({ts:Date.now(),session:g,command:y,step:e,status:t,...void 0!==r.duration_ms?{duration_ms:Math.round(r.duration_ms)}:{},...o?{error:o}:{},...r.detail?{detail:r.detail}:{}}),"start"===t?z():k||(k=setTimeout(z,500),k.unref())}export async function trackStep(e,t,r){const o=Date.now();track(e,"start",r?{detail:r}:{});try{const r=await t();return track(e,"ok",{duration_ms:Date.now()-o}),r}catch(t){throw track(e,"fail",{duration_ms:Date.now()-o,error:t}),t}}function z(){if(k&&(clearTimeout(k),k=null),0===w.length)return;const e=w.splice(0,50),t=x(h,{..._(),events:e},3e3).then(()=>{},()=>{}).finally(()=>T.delete(t));T.add(t),w.length>0&&z()}export async function flushTelemetry(e=1500){z(),0!==T.size&&await Promise.race([Promise.allSettled([...T]),new Promise(t=>setTimeout(t,e).unref())])}export async function reportCrash(e,t=1500){const r=(e instanceof Error?(e.stack??"").split("\n").slice(e.message.split("\n").length):[]).map(e=>e.trim()).find(e=>/^at .+(\(.+:\d+:\d+\)|:\d+:\d+)$/.test(e));track("command","fail",{error:e,detail:{exit_code:1,type:"crash",...r?{at:maskSecrets(r).slice(0,200)}:{}}}),await flushTelemetry(t)}export async function uploadReport(e){try{const t=await x(m,{..._(),report:e},2e4),r=t?.data?.code;return"string"==typeof r&&r?r:null}catch{return null}}async function E(e,t,r){const o=p.getApiKey()?.trim(),n=await fetch(new URL(e,p.getBaseUrl()).toString(),{method:"POST",headers:{"Content-Type":"application/json",...clientHeaders(),...o?{Authorization:`Bearer ${o}`}:{}},body:JSON.stringify(t),signal:AbortSignal.timeout(r)});if(!n.ok)throw new Error(`HTTP ${n.status}`);return n.json().catch(()=>null)}
@@ -1 +1 @@
1
- import{chmodSync as t,existsSync as r,readFileSync as e}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 g}from"./backup.js";import{findInstalls as d,mirrorInstallCommand as m}from"./tool-installs.js";import{toolHome as y}from"./types.js";import{brand as f,PROVIDER_KEY as v}from"../brand.js";const A="agy",_="AGY_LLM_GATEWAY_URL",h="AGY_LLM_GATEWAY_API_KEY",E="AGY_LLM_GATEWAY_MODELS",j=["GEMINI_API_KEY","GOOGLE_GEMINI_BASE_URL"],w="gemini",K=()=>n(y(),".gemini","antigravity-cli"),b=()=>n(K(),"settings.json"),I=()=>n(K(),`${v}.env`),P=()=>n(y(),".antigravity","settings.json"),M=f().installMirror?.agy,G={command:"agy",native:{binDir:"win32"===process.platform?["AppData","Local","agy","bin"]:[".local","bin"],updateArgs:["update"],dataDirs:[]},...M?{mirrorScript:{sh:`${M}/install.sh`,ps1:`${M}/install.ps1`}}:{}};function L(t){return!!t&&"object"==typeof t&&!Array.isArray(t)}function C(t,n){if(!r(t))return{};const o=e(t,"utf-8");if(!o.trim())return{};try{const t=JSON.parse(o);if(!L(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 N=()=>C(b(),"~/.gemini/antigravity-cli/settings.json"),S=()=>C(P(),"~/.antigravity/settings.json");function Y(r,e,n){p(r),g(r,JSON.stringify(e,null,2)+"\n",n),void 0!==n&&t(r,n)}function $(t){return(t||"").replace(/\/+$/,"").replace(/\/v1(beta)?$/,"")}function k(t){const r=a().gatewayModels,e=t?r.filter(r=>t.models.includes(r)):[];return e.length>0?e:r}const O=t=>i(t.replace(/-preview$/,""));function x(t){const r=t.gateway;return L(r)&&!0===r.enabled&&"string"==typeof r.apiKey&&r.apiKey.trim()&&"string"==typeof r.url?{url:r.url,apiKey:r.apiKey}:null}function U(t){const r=t.models;return L(r)&&Array.isArray(r.list)?r.list.map(t=>L(t)&&"string"==typeof t.modelId?t.modelId:"").filter(Boolean):[]}function D(){try{if(N().modelProvider!==w)return null}catch{return null}const t=s(I()),r=t.GEMINI_API_KEY;return r&&r.trim()?{apiKey:r,url:t.GOOGLE_GEMINI_BASE_URL??""}:null}function R(t){const r=s(I());return r[_]===t.url&&r[h]===t.apiKey}function T(t,r,e){const n=N(),o=S();o.gateway={...L(o.gateway)?o.gateway:{},enabled:!0,url:r,apiKey:t,wireProtocol:"genai"},o.models={...L(o.models)?o.models:{},defaultModelId:e[0],list:e.map(t=>({modelId:t,displayName:O(t),supportsThinking:!0}))},Y(P(),o,384),j.some(t=>void 0!==s(I())[t])&&c(A,I(),j);const i=u(A,I(),{[_]:r,[h]:t,[E]:e.join(",")}).rcFiles;for(const t of j)delete process.env[t];return n.modelProvider===w&&(delete n.modelProvider,Y(b(),n)),i}let B=null,W=null;export const antigravityAdapter={name:"agy",displayName:"Antigravity CLI",command:"agy",installCommand:m(G),installSpec:G,configPath:P(),wantsModelCatalog:!0,loadPrivateConfig(t){N(),S();const r=k(t.catalog);B=T(t.apiKey,$(t.baseUrl),r),W=r},unloadPrivateConfig(){try{const t=S();x(t)&&(delete t.gateway,delete t.models,Y(P(),t,384))}catch(t){l.logError("antigravityAdapter.unloadPrivateConfig",t)}try{const t=N();t.modelProvider===w&&(delete t.modelProvider,Y(b(),t))}catch(t){l.logError("antigravityAdapter.unloadPrivateConfig",t)}c(A,I(),[_,h,E,...j])},detectCurrentConfig(){try{const t=x(S());if(t)return{apiKey:t.apiKey}}catch{return{apiKey:null}}return{apiKey:D()?.apiKey??null}},listedModels(){try{const t=S(),r=x(t);if(r)return R(r)?U(t):[]}catch{return null}return D()?[]:null},refreshModelMenu(t){const r=S(),e=x(r)??D();if(!e)return;const n=k(t.catalog),o=e.url||$(t.baseUrl),i=x(r);null!==i&&R(i)&&U(r).join(",")===n.join(",")&&s(I())[E]===n.join(",")&&null===D()||T(e.apiKey,o,n)},getConfig(){try{return S()}catch(t){return l.logError("antigravityAdapter.getConfig",t),null}},applyNotes(){const t=[];if(W&&W.length>0){const r=W.map(O);t.push({kind:"summary",text:o.t("tools.agy.menu_written",{count:String(r.length),list:r.join(o.t("tools.grok.list_separator")),default:r[0]})})}return null===B||0===d(G).length||t.push({kind:"action",text:o.t("tools.agy.open_new_terminal")}),t},backupPaths:()=>[P(),b(),I()],forceResetPaths:()=>[I()]};
1
+ import{chmodSync as t,existsSync as r,readFileSync as e}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 m}from"./backup.js";import{findInstalls as d,mirrorInstallCommand as g}from"./tool-installs.js";import{toolHome as y}from"./types.js";import{brand as f,PROVIDER_KEY as h}from"../brand.js";const v="agy",A="AGY_LLM_GATEWAY_URL",_="AGY_LLM_GATEWAY_API_KEY",E="AGY_LLM_GATEWAY_MODELS",j=["GEMINI_API_KEY","GOOGLE_GEMINI_BASE_URL"],w="gemini",K=()=>n(y(),".gemini","antigravity-cli"),b=()=>n(K(),"settings.json"),I=()=>n(K(),`${h}.env`),P=()=>n(y(),".antigravity","settings.json"),M=f().installMirror?.agy,G={command:"agy",native:{binDir:"win32"===process.platform?["AppData","Local","agy","bin"]:[".local","bin"],updateArgs:["update"],dataDirs:[]},...M?{mirrorScript:{sh:`${M}/install.sh`,ps1:`${M}/install.ps1`}}:{}};function L(t){return!!t&&"object"==typeof t&&!Array.isArray(t)}function $(t,n){if(!r(t))return{};const o=e(t,"utf-8");if(!o.trim())return{};try{const t=JSON.parse(o);if(!L(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 C=()=>$(b(),"~/.gemini/antigravity-cli/settings.json"),N=()=>$(P(),"~/.antigravity/settings.json");function S(r,e,n){p(r),m(r,JSON.stringify(e,null,2)+"\n",n),void 0!==n&&t(r,n)}function Y(t){return(t||"").replace(/\/+$/,"").replace(/\/v1(beta)?$/,"")}const x=/-(minimal|low|medium|high|xhigh|max)$/;function k(t){const r=a().gatewayModels,e=t?r.filter(r=>t.models.includes(r)||t.models.includes(r.replace(x,""))):[];return e.length>0?e:r}function O(t){const r=t.replace(/-preview$/,""),e=x.exec(r)?.[1];return e?`${i(r.replace(x,""))} (${e[0].toUpperCase()}${e.slice(1)})`:i(r)}function U(t){const r=t.gateway;return L(r)&&!0===r.enabled&&"string"==typeof r.apiKey&&r.apiKey.trim()&&"string"==typeof r.url?{url:r.url,apiKey:r.apiKey}:null}function D(t){const r=t.models;return L(r)&&Array.isArray(r.list)?r.list.map(t=>L(t)&&"string"==typeof t.modelId?t.modelId:"").filter(Boolean):[]}function R(){try{if(C().modelProvider!==w)return null}catch{return null}const t=s(I()),r=t.GEMINI_API_KEY;return r&&r.trim()?{apiKey:r,url:t.GOOGLE_GEMINI_BASE_URL??""}:null}function T(t){const r=s(I());return r[A]===t.url&&r[_]===t.apiKey}function B(t,r,e){const n=C(),o=N();o.gateway={...L(o.gateway)?o.gateway:{},enabled:!0,url:r,apiKey:t,wireProtocol:"genai"},o.models={...L(o.models)?o.models:{},defaultModelId:e[0],list:e.map(t=>({modelId:t,displayName:O(t),supportsThinking:!0}))},S(P(),o,384),j.some(t=>void 0!==s(I())[t])&&c(v,I(),j);const i=u(v,I(),{[A]:r,[_]:t,[E]:e.join(",")}).rcFiles;for(const t of j)delete process.env[t];return n.modelProvider===w&&(delete n.modelProvider,S(b(),n)),i}let W=null,J=null;export const antigravityAdapter={name:"agy",displayName:"Antigravity CLI",command:"agy",installCommand:g(G),installSpec:G,configPath:P(),wantsModelCatalog:!0,loadPrivateConfig(t){C(),N();const r=k(t.catalog);W=B(t.apiKey,Y(t.baseUrl),r),J=r},unloadPrivateConfig(){try{const t=N();U(t)&&(delete t.gateway,delete t.models,S(P(),t,384))}catch(t){l.logError("antigravityAdapter.unloadPrivateConfig",t)}try{const t=C();t.modelProvider===w&&(delete t.modelProvider,S(b(),t))}catch(t){l.logError("antigravityAdapter.unloadPrivateConfig",t)}c(v,I(),[A,_,E,...j])},detectCurrentConfig(){try{const t=U(N());if(t)return{apiKey:t.apiKey}}catch{return{apiKey:null}}return{apiKey:R()?.apiKey??null}},listedModels(){try{const t=N(),r=U(t);if(r)return T(r)?D(t):[]}catch{return null}return R()?[]:null},refreshModelMenu(t){const r=N(),e=U(r)??R();if(!e)return;const n=k(t.catalog),o=e.url||Y(t.baseUrl),i=U(r);null!==i&&T(i)&&D(r).join(",")===n.join(",")&&s(I())[E]===n.join(",")&&null===R()||B(e.apiKey,o,n)},getConfig(){try{return N()}catch(t){return l.logError("antigravityAdapter.getConfig",t),null}},applyNotes(){const t=[];if(J&&J.length>0){const r=J.map(O);t.push({kind:"summary",text:o.t("tools.agy.menu_written",{count:String(r.length),list:r.join(o.t("tools.grok.list_separator")),default:r[0]})})}return null===W||0===d(G).length||t.push({kind:"action",text:o.t("tools.agy.open_new_terminal")}),t},backupPaths:()=>[P(),b(),I()],forceResetPaths:()=>[I()]};
package/dist/models.json CHANGED
@@ -287,6 +287,7 @@
287
287
  "agy": {
288
288
  "gatewayModels": [
289
289
  "gemini-4-argon",
290
+ "gemini-4-carbon-medium",
290
291
  "gemini-3.8-flash",
291
292
  "gemini-3.7-flash",
292
293
  "gemini-3.6-flash",
package/models.json CHANGED
@@ -287,6 +287,7 @@
287
287
  "agy": {
288
288
  "gatewayModels": [
289
289
  "gemini-4-argon",
290
+ "gemini-4-carbon-medium",
290
291
  "gemini-3.8-flash",
291
292
  "gemini-3.7-flash",
292
293
  "gemini-3.6-flash",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeapi/cli",
3
- "version": "0.0.171",
3
+ "version": "0.0.173",
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",