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.

12 lines (9 loc) 3.06 kB
import{isAbsolute as y}from"node:path";const m="[\u5F15\u7528\u6D88\u606F]",g=/^(?:(?:[ \t]*>[^\r\n]*(?:\r?\n|$))+)(?:[ \t]*\r?\n)*[ \t]*-{3,}[ \t]*(?:\r?\n|$)(?:[ \t]*\r?\n)*/;function M(t,n){const r=_(t.extra_json),o=h(t.context_messages_json),e=A(t,r),i=b(e,n),s=x(t,e,o),c=D(e),u=O(e,"additional_directories","additionalDirectories"),f=a(e,"mode_id","modeId"),p=a(e,"model_id","modelId"),d=k(e,"timeout_ms","timeoutMs");return{cwd:i,prompt:s,mcpServers:c,additionalDirectories:u??[],modeId:f,modelId:p,timeoutMs:d}}function A(t,n){const r=[t,l(t.acp),l(t.gemini_acp)];return n&&(r.push(n),r.push(l(n.acp)),r.push(l(n.gemini_acp))),r.filter(o=>o!==null)}function _(t){if(t==null)return null;if(typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")return null;const n=t.trim();if(!n)return null;try{const r=JSON.parse(n);if(r&&typeof r=="object"&&!Array.isArray(r))return r}catch{}return null}function h(t){if(t==null)return[];if(Array.isArray(t))return t;if(typeof t!="string")return[];const n=t.trim();if(!n)return[];try{const r=JSON.parse(n);if(Array.isArray(r))return r}catch{}return[]}function b(t,n){const o=a(t,"cwd","workdir","working_directory")?.trim()||n?.trim()||"";if(!o)return process.cwd();if(!y(o))throw new Error(`CWD must be an absolute path: ${o}`);return o}function x(t,n,r){const o=E(n,"prompt");if(o&&o.length>0){const u=o.map(f=>f?.type==="text"?f.text:"").filter(Boolean);if(u.length>0)return u.join(` `)}const e=t.quoted_message_id,i=t.msg_id;let s=a(n,"text")??t.content?.trim()??"";s=I(s,r,e);const c=j(r,i);return!c&&!s?"":c?s?`Conversation context: `+c+` Latest user message: `+s:`Conversation context: `+c:s}function j(t,n){if(!t||t.length===0)return"";const r=[];for(const o of t){if(n&&o.msg_id===n)continue;const e=o.content?.trim();if(!e)continue;const i=C(e);if(i)r.push(`Quoted message: `+i);else{const s=o.sender_type===2?"Assistant message":"User message";r.push(`${s}: ${e}`)}}return r.join(` `)}function C(t){return t.startsWith(m)?t.slice(m.length).replace(/^\s*\n?/,"").trim()||m:null}function I(t,n,r){return!r||!n?.some(o=>o.msg_id===r&&o.content?.trim())?t:t.replace(g,"")}function D(t){for(const n of t){const r=n.mcp_servers??n.mcpServers,o=S(r);if(o&&o.every(e=>!!e&&typeof e=="object"&&!Array.isArray(e)))return o.map(e=>({name:e.name??"unknown",command:e.command??"",args:e.args,env:e.env}))}return[]}function a(t,...n){for(const r of t)for(const o of n){const e=r[o];if(typeof e=="string"&&e.trim())return e.trim()}return null}function E(t,n){for(const r of t){const o=r[n];if(Array.isArray(o)&&o.length>0)return o}return null}function O(t,...n){for(const r of t)for(const o of n){const e=r[o];if(!Array.isArray(e))continue;const i=e.filter(s=>typeof s=="string");if(i.length>0)return i}return null}function l(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function S(t){return Array.isArray(t)?t:null}function k(t,...n){for(const r of t)for(const o of n){const e=r[o];if(typeof e=="number"&&Number.isFinite(e)&&e>0)return Math.floor(e)}return null}export{M as extractAcpTurnInput};