@vibeapi/cli 0.0.82 → 0.0.83
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 e,mkdirSync as o,readFileSync as t,writeFileSync as r}from"fs";import{dirname as n,join as s}from"path";import i from"chalk";import{configManager as l}from"./config.js";import{i18n as f}from"./i18n.js";import{resolveModelCatalog as d}from"./model-catalog.js";import{listAdapters as c}from"./tools/registry.js";import{UserActionNeeded as a}from"./tools/types.js";import{logger as u}from"../utils/logger.js";import{resolveUpdateCachePath as m}from"./auto-update.js";export const MODEL_REFRESH_INTERVAL_MS=36e5;const h=new Set(["setup","init","config","auth","enter","completion","update","lang","logs"]),p=["--json","--dry-run","--help","-h","--version","-v"],g=[];export function shouldSkipModelRefresh(e,o=process.env){if("1"===o.VIBECLI_DISABLE_MODEL_REFRESH)return!0;if(p.some(o=>e.includes(o)))return!0;const t=e.find(e=>!e.startsWith("-"));return void 0
|
|
1
|
+
import{existsSync as e,mkdirSync as o,readFileSync as t,writeFileSync as r}from"fs";import{dirname as n,join as s}from"path";import i from"chalk";import{configManager as l}from"./config.js";import{i18n as f}from"./i18n.js";import{resolveModelCatalog as d}from"./model-catalog.js";import{listAdapters as c}from"./tools/registry.js";import{UserActionNeeded as a}from"./tools/types.js";import{logger as u}from"../utils/logger.js";import{resolveUpdateCachePath as m}from"./auto-update.js";export const MODEL_REFRESH_INTERVAL_MS=36e5;const h=new Set(["setup","init","config","auth","enter","completion","update","lang","logs"]),p=["--json","--dry-run","--help","-h","--version","-v"],g=[];export function shouldSkipModelRefresh(e,o=process.env){if("1"===o.VIBECLI_DISABLE_MODEL_REFRESH)return!0;if(p.some(o=>e.includes(o)))return!0;const t=e.find(e=>!e.startsWith("-"));return void 0!==t&&h.has(t)}export async function refreshModelMenus(){const e=new Map,o=[];g.length=0;for(const t of c())if(t.refreshModelMenu&&t.listedModels)try{const r=l.getApiKeyForTool(t.name);if(!r||t.detectCurrentConfig().apiKey!==r)continue;const n=t.listedModels();if(null===n)continue;e.has(r)||e.set(r,await d(r));const s=e.get(r);if(!s)continue;t.refreshModelMenu({apiKey:r,baseUrl:l.getBaseUrl(),models:l.getModelsForTool(t.name),settings:l.getToolSettings(t.name),catalog:s});const i=t.listedModels()??[],f=i.filter(e=>!n.includes(e)),c=n.filter(e=>!i.includes(e));(f.length>0||c.length>0)&&o.push({tool:t.displayName,added:f,removed:c})}catch(e){u.logError(`modelRefresh(${t.name})`,e),e instanceof a&&g.push(e.message)}return o}export async function runModelRefresh(l,d={}){const c=d.env??process.env;if(shouldSkipModelRefresh(l,c))return[];const a=d.now??Date.now(),h=function(e){return s(n(m(e)),"model-refresh.json")}(c);if(a-function(e){try{const o=JSON.parse(t(e,"utf-8")).refreshed_at;return"number"==typeof o?o:0}catch{return 0}}(h)<36e5)return[];let p=[];try{p=await refreshModelMenus(),e(n(h))||o(n(h),{recursive:!0}),r(h,JSON.stringify({refreshed_at:a})+"\n")}catch(e){u.logError("runModelRefresh",e)}const M=d.output??(e=>console.log(i.gray(e)));for(const e of g)M(e);for(const e of p){const o=[e.added.length>0?f.t("model_refresh.added",{models:e.added.join(", ")}):"",e.removed.length>0?f.t("model_refresh.removed",{models:e.removed.join(", ")}):""].filter(Boolean);M(f.t("model_refresh.changed",{tool:e.tool,changes:o.join(";")}))}return p}
|
package/dist/lib/tools/grok.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as e,readFileSync as t}from"fs";import{join as o}from"path";import*as r from"@iarna/toml";import{logger as n}from"../../utils/logger.js";import{PROVIDER_KEY as i}from"../brand.js";import{backupBeforeWrite as
|
|
1
|
+
import{existsSync as e,readFileSync as t}from"fs";import{join as o}from"path";import*as r from"@iarna/toml";import{logger as n}from"../../utils/logger.js";import{PROVIDER_KEY as i}from"../brand.js";import{backupBeforeWrite as s,atomicWriteFile as l}from"./backup.js";import{pickModel as d,toolHome as a,withV1 as f}from"./types.js";import{getToolDefaultModel as m}from"../model-registry.js";import{gatewayModelSpecs as c,modelBlurb as g,modelFamily as u,prettyModelName as p}from"../gateway-models.js";const y=()=>o(o(a(),".grok"),"config.toml"),h=i,k=`${i}-`,b=["low","medium","high","xhigh"],w=e=>`${k}${e}`,_=e=>e===h||e.startsWith(k),j="win32"===process.platform?'powershell -c "irm https://x.ai/cli/install.ps1 | iex"':"curl -fsSL https://x.ai/cli/install.sh | bash";function x(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function C(e,t){return x(e[t])||(e[t]={}),e[t]}function v(){if(!e(y()))return{};const o=t(y(),"utf-8");if(!o.trim())return{};try{const e=r.parse(o);if(!x(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)}`)}}function M(e){return x(e.model)?Object.entries(e.model).filter(e=>_(e[0])&&x(e[1])):[]}function E(e,t){let o=c("grok",e.catalog?.clientModels);if(e.catalog){const t=new Set(e.catalog.models);o=o.filter(e=>t.has(e.id))}return o.some(e=>e.id===t)?o:[{id:t},...o]}function A(e,t,o){C(e,"endpoints").models_base_url=f(t.baseUrl);const r=C(e,"model"),n=new Map(M(e));for(const e of n.keys())delete r[e];for(const e of o){const o=w(e.id),i={...n.get(o)??{},name:e.name??p(e.id),model:e.id,base_url:f(t.baseUrl),api_key:t.apiKey,context_window:e.contextWindow??5e5,api_backend:"responses",reasoning_summary:"concise"};"grok"===u(e.id)&&(i.supports_reasoning_effort=!0,i.reasoning_efforts=b);const s=g(e.description);s?i.description=s:delete i.description,r[o]=i}}export const grokAdapter={name:"grok",displayName:"Grok Build",command:"grok",installCommand:j,configPath:y(),wantsModelCatalog:!0,loadPrivateConfig(e){const t=v(),o=d(e.models,m("grok"));A(t,e,E(e,o)),C(t,"models").default=w(o),s(y()),l(y(),r.stringify(t))},unloadPrivateConfig(){if(!e(y()))return;let t;try{t=v()}catch(e){return void n.logError("grokAdapter.unloadPrivateConfig",e)}if(x(t.model)){for(const[e]of M(t))delete t.model[e];0===Object.keys(t.model).length&&delete t.model}x(t.models)&&"string"==typeof t.models.default&&_(t.models.default)&&(delete t.models.default,0===Object.keys(t.models).length&&delete t.models),x(t.endpoints)&&(delete t.endpoints.models_base_url,0===Object.keys(t.endpoints).length&&delete t.endpoints),s(y()),l(y(),r.stringify(t))},detectCurrentConfig(){try{const e=v(),t=M(e),o=x(e.models)?e.models.default:void 0,r=t.find(([e])=>e===o)?.[1]??t[0]?.[1],n=r?r.api_key:null;return{apiKey:"string"==typeof n&&n.trim()?n:null}}catch{return{apiKey:null}}},listedModels(){try{const e=M(v());return e.length>0?e.map(([,e])=>String(e.model)):null}catch{return null}},refreshModelMenu(e){const t=v(),o=C(t,"models"),n="string"==typeof o.default?o.default:void 0,i=n?M(t).find(([e])=>e===n)?.[1].model:void 0,a="string"==typeof i&&n!==h&&e.catalog.models.includes(i)?i:d(e.models,m("grok")),f=r.stringify(t);A(t,e,E(e,a)),(void 0===n||_(n))&&(o.default=w(a)),r.stringify(t)!==f&&(s(y()),l(y(),r.stringify(t)))},getConfig(){try{return v()}catch(e){return n.logError("grokAdapter.getConfig",e),null}}};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeapi/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.83",
|
|
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",
|