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) • 1.44 kB
JavaScript
import{AibotClient as f}from"./client.js";import{AibotConnectionHandleImpl as g}from"./connection-handle.js";import{log as r}from"../log/index.js";class _{_status="closed";get status(){return this._status}async connect(o,m={}){const{maxRetries:d,aborted:l,label:h,packetLog:p}=m,s=h??o.agentId;this._status="connecting";let a=0;const u=o.apiKey.length>8?o.apiKey.slice(0,4)+"****"+o.apiKey.slice(-4):"****";for(;;){if(l?.())throw this._status="closed",new Error("connection aborted");const i=new f(o,{packetLog:p});try{const t=await i.connect();this._status="ready",r.info("connection-manager",`Connected: agent=${o.agentId} key=${u} adapter=${t.adapter_id??""}`);const e=new g(i);return e.onError(n=>{r.error(s,`Aibot connection error: ${n instanceof Error?n.message:n}`)}),e.onClose((n,c)=>{r.info(s,`Aibot connection closed: code=${n} reason=${c}`)}),e.onDisconnected(()=>{r.info(s,"Aibot disconnected, attempting reconnect...")}),e}catch(t){if(a++,i.disconnect(),d!==void 0&&a>d)throw this._status="closed",new Error(`connection failed after ${a} attempts: ${t instanceof Error?t.message:t}`);if(l?.())throw this._status="closed",new Error("connection aborted");const e=Math.min(1e3*2**Math.min(a-1,5),3e4),n=Math.floor(e*.2*Math.random());r.error("connection-manager",`Connect failed (attempt ${a}), retrying in ${e+n}ms: ${t instanceof Error?t.message:t}`),await new Promise(c=>setTimeout(c,e+n))}}}}export{_ as ConnectionManager};