grix-connector
Version:
Connect local AI coding agents (Claude, Codex, Gemini, Qwen, DeepSeek, Cursor, OpenCode, Pi, OpenHuman, Reasonix) to the Grix scheduling platform. Also serves as an OpenClaw plugin for Grix channel transport.
3 lines (2 loc) • 1.47 kB
JavaScript
import{spawn as c}from"node:child_process";import{log as l}from"../../core/log/index.js";const s="agy-model-list",p=3600*1e3,h=1e4,y=["Gemini 3.5 Flash (Medium)","Gemini 3.5 Flash (High)","Gemini 3.5 Flash (Low)","Gemini 3.1 Pro (Low)","Gemini 3.1 Pro (High)","Claude Sonnet 4.6 (Thinking)","Claude Opus 4.6 (Thinking)","GPT-OSS 120B (Medium)"].map(t=>({id:t,displayName:t}));let a=null,f=0,r=null;function A(t){return new Promise((e,n)=>{const o=c(t,["models"],{stdio:["ignore","pipe","pipe"]});let d="",u="";const g=setTimeout(()=>{o.kill("SIGKILL"),n(new Error("agy models timed out"))},h);o.stdout?.on("data",i=>{d+=i.toString("utf-8")}),o.stderr?.on("data",i=>{u+=i.toString("utf-8")}),o.on("error",i=>{clearTimeout(g),n(i)}),o.on("close",i=>{clearTimeout(g),i===0?e(d):n(new Error(u.trim()||`agy models exited with code ${i}`))})})}function M(t){return t.split(`
`).map(e=>e.trim()).filter(e=>e.length>0).filter(e=>!/^(Usage|Error|Flags|Available)/i.test(e)).map(e=>({id:e,displayName:e}))}function m(t){return r||(r=(async()=>{try{const e=await A(t),n=M(e);n.length>0?(a=n,f=Date.now(),l.info(s,`refreshed agy models: ${n.length} entries`)):l.info(s,"agy models returned no parsable entries, keeping fallback")}catch(e){l.info(s,`agy models failed, using fallback: ${e instanceof Error?e.message:e}`)}finally{r=null}})(),r)}function G(t){return(!a||Date.now()-f>=p)&&t&&m(t),a??y}async function S(t){t&&await m(t)}export{G as getCachedAgyModels,S as primeAgyModels};