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) • 2.78 kB
JavaScript
import u from"node:path";import{appendRotatingFile as h}from"./rotation.js";const l=128*1024*1024,m=5,d=200,p=500;class f{filePath;rotationOptions;writeChain=Promise.resolve();contextSamples=new Map;constructor(e,t){this.filePath=u.join(e,"agentapi-packets.jsonl"),this.rotationOptions={maxBytes:t?.maxBytes??l,maxFiles:t?.maxFiles??m}}logInbound(e){this.writeEntry({...e,direction:"inbound",ts:new Date().toISOString()})}logOutbound(e){this.writeEntry({...e,direction:"outbound",ts:new Date().toISOString()})}logInboundPacket(e,t,s){if(e==="local_action"&&g(s)){const n=i(s,"session_id")??"",c=Date.now(),_=this.contextSamples.get(n)??0;if(c-_<p)return;this.contextSamples.set(n,c)}if(e==="local_action_ack")return;const o=s;this.writeEntry({direction:"inbound",ts:new Date().toISOString(),cmd:e,seq:t,eventId:i(o,"event_id"),sessionId:i(o,"session_id"),threadId:i(o,"thread_id"),msgId:i(o,"msg_id"),actionId:i(o,"action_id"),codexMethod:i(o,"codex_method"),invokeId:i(o,"invoke_id"),payloadSummary:r(e,s)})}logOutboundPacket(e,t,s,o){const n=s;this.writeEntry({direction:"outbound",ts:new Date().toISOString(),cmd:e,seq:t,sendStatus:o,eventId:i(n,"event_id"),sessionId:i(n,"session_id"),threadId:i(n,"thread_id"),msgId:i(n,"msg_id"),actionId:i(n,"action_id"),codexMethod:i(n,"codex_method"),invokeId:i(n,"invoke_id"),payloadSummary:r(e,s)})}writeEntry(e){const t=this.writeChain;this.writeChain=t.catch(()=>{}).then(async()=>{e.payloadSummary&&e.payloadSummary.length>d&&(e.payloadSummary=e.payloadSummary.slice(0,d)+"..."),await h(this.filePath,`${JSON.stringify(e)}
`,this.rotationOptions)}).catch(()=>{})}async close(){await this.writeChain}}function g(a){return a?.action_type==="get_context"}function i(a,e){const t=a?.[e];if(typeof t=="string"&&t.trim())return t.trim()}function r(a,e){const t=e;if(!t)return"";switch(a){case"auth":return`agent_id=${t.agent_id??""} client_type=${t.client_type??""}`;case"auth_ack":return`code=${t.code??""} adapter_id=${t.adapter_id??""}`;case"event_msg":case"event_ack":case"event_result":return`event_id=${t.event_id??""} status=${t.status??""}`;case"send_msg":case"client_stream_chunk":return`session_id=${t.session_id??""} is_finish=${t.is_finish??""}`;case"local_action":return`action_type=${t.action_type??""} action_id=${t.action_id??""}`;case"local_action_result":return`action_id=${t.action_id??""} status=${t.status??""}`;case"codex_event":return`codex_method=${t.codex_method??""} seq=${t.codex_sequence??""}`;case"agent_invoke":return`action=${t.action??""} invoke_id=${t.invoke_id??""}`;case"agent_invoke_result":return`invoke_id=${t.invoke_id??""} code=${t.code??""}`;case"session_activity_set":return`session_id=${t.session_id??""} kind=${t.kind??""} active=${t.active??""}`;default:return""}}export{f as AgentApiPacketLog};