UNPKG

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.

2 lines (1 loc) 2.22 kB
import{resolveCliPath as b,getCliVersion as g}from"../core/util/cli-probe.js";const C=3e4,S=6e4,y=1e4,p=Symbol("probe_timeout");function T(e,o){return e.cli.installed?o.conversation&&e.conversation.attempted&&!e.conversation.ok&&e.conversation.error?.code!=="unsupported"?"degraded":"healthy":"unavailable"}async function h(e){const o=e.command??e.type,i=await b(o),l=i!==null;let r=null,n;if(l){const c=await g(o);r=c.version,c.error&&(n=c.error)}else n={code:"cli_not_found",message:`command not found: ${o}`};const s=e.getStatus();return{cli:{command:o,installed:l,path:i,version:r,...n?{error:n}:{}},conversation:{attempted:!1,ok:!1,latency_ms:null},config:{model:null,base_url:null,source:{model:"unknown",base_url:"unknown"}},process:{started:s.alive,alive:s.alive,busy:s.busy}}}function w(e,o){return new Promise((i,l)=>{const r=setTimeout(()=>{const n=Object.assign(new Error(`probe timed out after ${o}ms`),{[p]:!0});l(n)},o);e.then(n=>{clearTimeout(r),i(n)},n=>{clearTimeout(r),l(n)})})}function E(e){return!!(e&&typeof e=="object"&&e[p])}async function M(e){const{adapter:o,agentName:i,clientType:l,adapterType:r,providerBaseUrl:n,opts:s,launchConversationProbe:c}=e,m=s.timeoutMs??y,f=Date.now(),d=!!c&&(s.conversation??!1);let t,u=!1;try{const a=typeof o.probe=="function"?o.probe({conversation:d?!1:s.conversation??!1,timeoutMs:m}):h(o);t=await w(a,m)}catch(a){u=E(a),t={cli:{command:r,installed:!1,path:null,version:null,error:{code:"internal",message:a.message??String(a)}},conversation:{attempted:!1,ok:!1,latency_ms:null},config:{model:null,base_url:null,source:{model:"unknown",base_url:"unknown"}},process:{started:!1,alive:!1,busy:!1}}}if(d&&!u&&t.cli.installed)try{t={...t,conversation:await c()}}catch(a){t={...t,conversation:{attempted:!0,ok:!1,latency_ms:null,error:{code:"conversation_failed",message:a?.message??String(a)}}}}n&&!t.config.base_url&&(t={...t,config:{...t.config,base_url:n,source:{...t.config.source,base_url:"config"}}});const v=Date.now()-f,_=u?"error":T(t,s);return{...t,agent_name:i,client_type:l,adapter_type:r,ok:_==="healthy",status:_,probed_at:f,duration_ms:v,cached:!1}}export{S as PROBE_CACHE_TTL_FULL_MS,C as PROBE_CACHE_TTL_STATIC_MS,M as buildAgentProbeResult};