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.

6 lines (5 loc) 2.65 kB
import{AgentEventType as i}from"../types/events.js";import{log as c}from"../core/log/index.js";function k(o,t){if(!t||typeof t!="object")return[];const e=t,n=e.update;if(!n||typeof n!="object")return[];const s=n.sessionUpdate,r=e.sessionId||o;switch(s){case"agent_message_chunk":return a(r,n);case"tool_call":return l(r,n);case"tool_call_update":return p(r,n);case"plan":return f(r,n);case"user_message_chunk":return[];case"usage_update":return m(r,n);case"agent_message_end":case"response_complete":case"prompt_done":return c.info("event-mapper",`completion event received: kind=${s} sid=${r}`),[{type:i.Result,sessionId:r,done:!0}];default:return d(r,s,n)}}function a(o,t){const e=t?.content?.text;return e?[{type:i.Text,content:e,sessionId:o}]:[]}function l(o,t){const e=t?.title||t?.kind||"tool",n=y(t?.kind,t?.rawInput)||e;return[{type:i.ToolUse,toolName:e,toolInput:n,sessionId:o}]}function p(o,t){const e=t?.title||t?.toolCallId||"tool",n=g(t?.content),s=(t?.status??"").toLowerCase().trim();return s==="completed"||s==="failed"?s==="completed"&&!n?[]:[{type:i.ToolResult,toolName:e,content:s==="failed"&&!n?"(failed)":u(n,800),sessionId:o}]:n?[{type:i.ToolProgress,toolName:e,content:u(n,800),sessionId:o}]:[]}function f(o,t){const e=t?.entries;if(!Array.isArray(e)||e.length===0)return[];const n=e.map(s=>{const r=s.content??"";return s.status?`[${s.status}] ${r}`:r}).join(` `);return[{type:i.Thinking,content:n,sessionId:o}]}function d(o,t,e){const n=(t??"").toLowerCase();if(n==="reasoning"||n==="reasoning_chunk"||n==="thinking"||n==="agent_thinking_chunk"||n==="agent_thought_chunk"){const s=e?.content?.text||e?.text;return s?[{type:i.Thinking,content:s,sessionId:o}]:[]}return t&&c.info("event-mapper",`unmapped sessionUpdate kind="${t}" sid=${o}`),[]}function m(o,t){const e=t?.used,n=t?.size;return typeof e!="number"||typeof n!="number"||n<=0?[]:[{type:i.ContextWindowUpdate,sessionId:o,contextWindow:{used:e,size:n}}]}function g(o){return Array.isArray(o)?o.map(t=>t?.content?.text??"").filter(Boolean).join(` `):""}function y(o,t){if(!t||typeof t!="object")return"";const e=t;if(Object.keys(e).length===0)return"";const n=(o??"").toLowerCase();if(["bash","shell","terminal","execute"].includes(n)){const s=e.command,r=e.description;if(typeof s=="string")return typeof r=="string"&&r?`# ${r} ${s}`:s}if(["read","write","edit"].includes(n))return e.file_path??e.path??"";if(typeof e.command=="string"){const s=e.description;return typeof s=="string"&&s?`# ${s} ${e.command}`:e.command}return JSON.stringify(e,null,2)}function u(o,t){return t<=0||o.length<=t?o:o.slice(0,t)+"..."}export{k as mapSessionUpdate,y as summarizeToolInput};