grix-connector 3.19.6 → 3.19.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/claude/claude-adapter.js +21 -21
- package/dist/adapter/codex/codex-bridge.js +7 -7
- package/dist/adapter/codex/raw-capture-hook.js +1 -1
- package/dist/bridge/bridge.js +10 -10
- package/dist/core/proxy/compat/codex-openai/translator.js +4 -4
- package/dist/core/proxy/index.js +1 -1
- package/dist/mcp/stream-http/security.js +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{randomUUID as I}from"node:crypto";const O="x-grix-openai-wire-compat",M="chat-completions";function l(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function T(t){return Array.isArray(t)?t[0]?.trim().toLowerCase()??"":t?.trim().toLowerCase()??""}function p(t){return typeof t=="string"?t:""}function _(t){if(!(typeof t>"u"))try{return JSON.parse(JSON.stringify(t))}catch{return}}function j(t){const n=p(t).trim();return n?[`Runtime model disclosure: the actual upstream model selected for this turn is "${n}".`,"If the user asks what model is being used, answer with this exact model id instead of inferring from Codex CLI, OpenAI, or fallback model lists."].join(" "):null}function v(){return{instructions:null,max_output_tokens:null,parallel_tool_calls:void 0,previous_response_id:null,reasoning:{effort:null,summary:null},store:!1,temperature:1,text:{format:{type:"text"}},tool_choice:"auto",tools:[],top_p:1,truncation:"disabled",user:null,metadata:{}}}function z(t){const n=v();return l(t)?{instructions:typeof t.instructions>"u"?n.instructions:_(t.instructions),max_output_tokens:typeof t.max_output_tokens>"u"?n.max_output_tokens:_(t.max_output_tokens),parallel_tool_calls:typeof t.parallel_tool_calls>"u"?n.parallel_tool_calls:_(t.parallel_tool_calls),previous_response_id:typeof t.previous_response_id>"u"?n.previous_response_id:_(t.previous_response_id),reasoning:typeof t.reasoning>"u"?n.reasoning:_(t.reasoning),store:typeof t.store>"u"?n.store:_(t.store),temperature:typeof t.temperature>"u"?n.temperature:_(t.temperature),text:typeof t.text>"u"?n.text:_(t.text),tool_choice:typeof t.tool_choice>"u"?n.tool_choice:_(t.tool_choice),tools:typeof t.tools>"u"?n.tools:_(t.tools),top_p:typeof t.top_p>"u"?n.top_p:_(t.top_p),truncation:typeof t.truncation>"u"?n.truncation:_(t.truncation),user:typeof t.user>"u"?n.user:_(t.user),metadata:typeof t.metadata>"u"?n.metadata:_(t.metadata)}:n}function R(t,n){const e=n.prompt_tokens??t.usage?.input_tokens,s=n.completion_tokens??t.usage?.output_tokens;t.usage={input_tokens:e,output_tokens:s,total_tokens:n.total_tokens??(typeof e=="number"&&typeof s=="number"?e+s:t.usage?.total_tokens),input_tokens_details:typeof n.prompt_tokens_details>"u"?t.usage?.input_tokens_details:n.prompt_tokens_details,output_tokens_details:typeof n.completion_tokens_details>"u"?t.usage?.output_tokens_details:n.completion_tokens_details}}function S(t){if(typeof t=="string")return t;if(Array.isArray(t))return t.map(e=>S(e)).filter(Boolean).join("");if(!l(t))return"";const n=p(t.type);return(n==="text"||n==="output_text"||n==="input_text")&&typeof t.text=="string"?t.text:""}function U(t){if(typeof t=="string")return t;if(t===null||typeof t>"u")return"";try{return JSON.stringify(t)}catch{return String(t)}}function L(t){return typeof t=="string"?t:Array.isArray(t)?t.map(n=>{if(!l(n))return"";const e=p(n.type);return(e==="summary_text"||e==="text")&&typeof n.text=="string"?n.text:""}).filter(Boolean).join(""):""}function W(t){return t==="developer"?"system":t==="system"||t==="user"||t==="assistant"||t==="tool"?t:"user"}function J(t){if(typeof t=="string")return t;if(!Array.isArray(t))return null;const n=[],e=[];let s=!1;for(const o of t){if(!l(o))continue;const u=p(o.type);if((u==="input_text"||u==="output_text"||u==="text")&&typeof o.text=="string"){e.push(o.text),n.push({type:"text",text:o.text});continue}if(u==="input_image"){const d=o.image_url;typeof d=="string"&&d.trim()?(n.push({type:"image_url",image_url:{url:d}}),s=!0):l(d)&&(n.push({type:"image_url",image_url:d}),s=!0)}}return n.length===0?null:s?n:e.join("")}function b(t,n,e="",s=null){if(n.length===0)return!1;const o={role:"assistant",content:s,tool_calls:[...n]};return e.trim()&&(o.reasoning_content=e),t.push(o),n.length=0,!0}function H(t){if(!l(t)||p(t.type)!=="function")return t;const n=p(t.name);return n?{type:"function",function:{name:n}}:t}function V(t){if(!Array.isArray(t))return;const n=t.flatMap(e=>{if(!l(e)||p(e.type)!=="function")return[];const s=p(e.name);if(!s)return[];const o={name:s};return typeof e.description=="string"&&e.description.trim()&&(o.description=e.description),(l(e.parameters)||Array.isArray(e.parameters))&&(o.parameters=e.parameters),typeof e.strict=="boolean"&&(o.strict=e.strict),[{type:"function",function:o}]});return n.length>0?n:void 0}function k(t,n){return{id:t.id,type:"reasoning",status:n,summary:t.text.length>0?[{type:"summary_text",text:t.text}]:[],content:[]}}function E(t,n){const e=t.requestContext,s=[];t.reasoningItem?.done&&s.push({outputIndex:t.reasoningItem.outputIndex,item:k(t.reasoningItem,"completed")}),t.textItem?.done&&s.push({outputIndex:t.textItem.outputIndex,item:{id:t.textItem.id,type:"message",status:"completed",role:"assistant",content:[{type:"output_text",text:t.textItem.text,annotations:[]}]}});for(const o of[...t.toolCallsByIndex.values()].sort((u,d)=>u.outputIndex-d.outputIndex))o.done&&s.push({outputIndex:o.outputIndex,item:{id:o.id,type:"function_call",status:"completed",call_id:o.callId,name:o.name,arguments:o.arguments}});return{id:t.responseId,object:"response",created_at:t.createdAt,status:n,error:null,incomplete_details:null,instructions:e.instructions??null,max_output_tokens:e.max_output_tokens??null,model:t.model,output:s.sort((o,u)=>o.outputIndex-u.outputIndex).map(o=>o.item),output_text:t.textItem?.text??"",parallel_tool_calls:typeof e.parallel_tool_calls=="boolean"?e.parallel_tool_calls:t.toolCallsByIndex.size>1,previous_response_id:e.previous_response_id??null,reasoning:l(e.reasoning)?e.reasoning:{effort:null,summary:null},store:typeof e.store=="boolean"?e.store:!1,temperature:typeof e.temperature=="number"?e.temperature:1,text:l(e.text)?e.text:{format:{type:"text"}},tool_choice:typeof e.tool_choice>"u"?"auto":e.tool_choice,tools:Array.isArray(e.tools)?e.tools:[],top_p:typeof e.top_p=="number"?e.top_p:1,truncation:typeof e.truncation=="string"?e.truncation:"disabled",usage:{input_tokens:t.usage?.input_tokens??0,output_tokens:t.usage?.output_tokens??0,total_tokens:t.usage?.total_tokens??0,...typeof t.usage?.input_tokens_details<"u"?{input_tokens_details:t.usage.input_tokens_details}:{},...typeof t.usage?.output_tokens_details<"u"?{output_tokens_details:t.usage.output_tokens_details}:{}},user:e.user??null,metadata:l(e.metadata)?e.metadata:{}}}function g(t){const n=t.sequenceNumber;return t.sequenceNumber+=1,n}function x(t){return t.eventSequence+=1,`compat-${t.eventSequence}`}function P(t){return t.createdEmitted?[]:(t.createdEmitted=!0,[{type:"response.created",sequence_number:g(t),response:E(t,"in_progress")}])}function $(t){return t.textItem||(t.textItem={id:`msg_${I()}`,outputIndex:t.nextOutputIndex,text:"",added:!1,done:!1},t.nextOutputIndex+=1),t.textItem}function N(t){return t.reasoningItem||(t.reasoningItem={id:`rs_${I()}`,outputIndex:t.nextOutputIndex,text:"",added:!1,done:!1},t.nextOutputIndex+=1),t.reasoningItem}function D(t,n){const e=t.toolCallsByIndex.get(n);if(e)return e;const s={id:`fc_${I()}`,callId:`call_${I()}`,name:`tool_${n}`,arguments:"",outputIndex:t.nextOutputIndex,added:!1,done:!1};return t.nextOutputIndex+=1,t.toolCallsByIndex.set(n,s),s}function X(t){return typeof t=="string"?t:S(t)}function G(t,n,e){return(n??"GET").toUpperCase()!=="POST"||!new URL(e,"http://grix.internal").pathname.endsWith("/responses")?!1:T(t[O])===M}function K(t){const n={...t};return delete n[O],delete n["X-Grix-OpenAI-Wire-Compat"],n}function Q(t){const n=new URL(t,"http://grix.internal");return n.pathname=n.pathname.replace(/\/responses$/,"/chat/completions"),`${n.pathname}${n.search}`}function Y(t,n){const e=l(t)?t:{},s=[],o=[];let u="";const d=p(e.instructions);d&&s.push({role:"system",content:d});const m=j(e.model);m&&s.push({role:"system",content:m});const r=Array.isArray(e.input)?e.input:[];for(const c of r){if(!l(c))continue;const a=p(c.type);if(a==="message"||!a&&c.role){const f=W(p(c.role)),C=J(c.content);if(f==="assistant"&&o.length>0){b(s,o,u,C),u="";continue}(b(s,o,u)||f!=="assistant")&&(u="");const y={role:f,content:C};f==="assistant"&&u.trim()&&(y.reasoning_content=u,u=""),s.push(y);continue}if(a==="reasoning"){u+=L(c.summary);continue}if(a==="function_call"){const f=p(c.name);if(!f)continue;o.push({id:p(c.call_id)||`call_${I()}`,type:"function",function:{name:f,arguments:p(c.arguments)}});continue}a==="function_call_output"&&(b(s,o,u),u="",s.push({role:"tool",tool_call_id:p(c.call_id),content:U(c.output)}))}b(s,o,u);const h={model:e.model,messages:s,stream:e.stream===!0},i=V(e.tools);return i&&(h.tools=i),!n?.omitToolChoice&&typeof e.tool_choice<"u"&&(h.tool_choice=H(e.tool_choice)),typeof e.parallel_tool_calls=="boolean"&&(h.parallel_tool_calls=e.parallel_tool_calls),typeof e.max_output_tokens=="number"&&(h.max_tokens=e.max_output_tokens),typeof e.temperature=="number"&&(h.temperature=e.temperature),typeof e.top_p=="number"&&(h.top_p=e.top_p),h}class Z{state;constructor(n){this.state={responseId:n?.responseId?.trim()||`resp_${I()}`,model:n?.model?.trim()||"",createdAt:n?.createdAt??Math.floor(Date.now()/1e3),sequenceNumber:0,eventSequence:0,nextOutputIndex:0,requestContext:z(n?.requestBody),reasoningItem:null,textItem:null,toolCallsByIndex:new Map,createdEmitted:!1,completedEmitted:!1}}consumeChatCompletionChunk(n){const e=l(n)?n:{};typeof e.id=="string"&&e.id.trim()&&(this.state.responseId=e.id),typeof e.model=="string"&&e.model.trim()&&(this.state.model=e.model),typeof e.created=="number"&&(this.state.createdAt=e.created),e.usage&&R(this.state,e.usage);const s=P(this.state);for(const o of e.choices??[]){const u=o.delta,d=p(u?.reasoning_content);if(d.length>0){const r=N(this.state);r.added||(r.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:r.outputIndex,item:k(r,"in_progress")})),r.text+=d,s.push({type:"response.reasoning_summary_text.delta",item_id:r.id,output_index:r.outputIndex,summary_index:0,delta:d,sequence_number:g(this.state)})}const m=u?.content??"";if(this.state.reasoningItem?.added&&!this.state.reasoningItem.done&&(typeof m=="string"&&m.length>0||(u?.tool_calls?.length??0)>0)&&s.push(...this.completePendingReasoningSummary()),typeof m=="string"&&m.length>0){const r=$(this.state);r.added||(r.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:r.outputIndex,item:{id:r.id,type:"message",status:"in_progress",role:"assistant",content:[]}})),r.text+=m,s.push({type:"response.output_text.delta",sequence_number:g(this.state),output_index:r.outputIndex,item_id:r.id,content_index:0,delta:m,logprobs:[]})}for(const r of u?.tool_calls??[]){const h=typeof r.index=="number"&&Number.isFinite(r.index)?r.index:0,i=D(this.state,h);typeof r.id=="string"&&r.id.trim()&&(i.callId=r.id);const c=r.function,a=p(c?.name);a&&(i.name=i.name.startsWith("tool_")&&i.arguments.length===0?a:i.name===a?i.name:`${i.name}${a}`),i.added||(i.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:i.outputIndex,item:{id:i.id,type:"function_call",status:"in_progress",call_id:i.callId,name:i.name,arguments:""}}));const f=p(c?.arguments);f&&(i.arguments+=f,s.push({type:"response.function_call_arguments.delta",event_id:x(this.state),response_id:this.state.responseId,item_id:i.id,output_index:i.outputIndex,call_id:i.callId,delta:f}))}o.finish_reason&&(s.push(...this.completePendingReasoningSummary()),s.push(...this.completePendingItems()))}return s}consumeChatCompletion(n){const e=l(n)?n:{};typeof e.id=="string"&&e.id.trim()&&(this.state.responseId=e.id),typeof e.model=="string"&&e.model.trim()&&(this.state.model=e.model),typeof e.created=="number"&&(this.state.createdAt=e.created),e.usage&&R(this.state,e.usage);const s=P(this.state),u=e.choices?.[0],d=l(u?.message)?u.message:{},m=p(d.reasoning_content);if(m.length>0){const i=N(this.state);i.added||(i.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:i.outputIndex,item:k(i,"in_progress")})),i.text+=m,s.push({type:"response.reasoning_summary_text.delta",item_id:i.id,output_index:i.outputIndex,summary_index:0,delta:m,sequence_number:g(this.state)})}const r=X(d.content),h=Array.isArray(d.tool_calls)?d.tool_calls:[];if(m.length>0&&(r||h.length>0)&&s.push(...this.completePendingReasoningSummary()),r){const i=$(this.state);i.added||(i.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:i.outputIndex,item:{id:i.id,type:"message",status:"in_progress",role:"assistant",content:[]}})),i.text+=r,s.push({type:"response.output_text.delta",sequence_number:g(this.state),output_index:i.outputIndex,item_id:i.id,content_index:0,delta:r,logprobs:[]})}return h.forEach((i,c)=>{if(!l(i))return;const a=D(this.state,c),f=p(i.id);f&&(a.callId=f);const C=l(i.function)?i.function:{},A=p(C.name);A&&(a.name=A),a.added||(a.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:a.outputIndex,item:{id:a.id,type:"function_call",status:"in_progress",call_id:a.callId,name:a.name,arguments:""}}));const y=p(C.arguments);y&&(a.arguments=y,s.push({type:"response.function_call_arguments.delta",event_id:x(this.state),response_id:this.state.responseId,item_id:a.id,output_index:a.outputIndex,call_id:a.callId,delta:y}))}),s.push(...this.completePendingItems()),s}finalize(){if(this.state.completedEmitted)return[];const n=[...this.completePendingReasoningSummary(),...this.completePendingItems()];return this.state.completedEmitted=!0,n.push({type:"response.completed",sequence_number:g(this.state),response:E(this.state,"completed")}),n}completePendingReasoningSummary(){const n=this.state.reasoningItem;return!n?.added||n.done?[]:(n.done=!0,[{type:"response.reasoning_summary_text.done",item_id:n.id,output_index:n.outputIndex,summary_index:0,text:n.text,sequence_number:g(this.state)},{type:"response.output_item.done",event_id:x(this.state),response_id:this.state.responseId,output_index:n.outputIndex,item:k(n,"completed")}])}completePendingItems(){const n=[];for(const e of[...this.state.toolCallsByIndex.values()].sort((s,o)=>s.outputIndex-o.outputIndex))!e.added||e.done||(e.done=!0,n.push({type:"response.function_call_arguments.done",event_id:x(this.state),response_id:this.state.responseId,item_id:e.id,output_index:e.outputIndex,call_id:e.callId,arguments:e.arguments}),n.push({type:"response.output_item.done",event_id:x(this.state),response_id:this.state.responseId,output_index:e.outputIndex,item:{id:e.id,type:"function_call",status:"completed",call_id:e.callId,name:e.name,arguments:e.arguments}}));return this.state.textItem?.added&&!this.state.textItem.done&&(this.state.textItem.done=!0,n.push({type:"response.output_text.done",event_id:x(this.state),response_id:this.state.responseId,output_index:this.state.textItem.outputIndex,item_id:this.state.textItem.id,content_index:0,text:this.state.textItem.text,logprobs:[],sequence_number:g(this.state)}),n.push({type:"response.output_item.done",event_id:x(this.state),response_id:this.state.responseId,output_index:this.state.textItem.outputIndex,item:{id:this.state.textItem.id,type:"message",status:"completed",role:"assistant",content:[{type:"output_text",text:this.state.textItem.text,annotations:[]}]}})),n}}function w(t){return Buffer.from(`data: ${JSON.stringify(t)}
|
|
1
|
+
import{randomUUID as I}from"node:crypto";const D="x-grix-openai-wire-compat",z="chat-completions";function m(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function j(t){return Array.isArray(t)?t[0]?.trim().toLowerCase()??"":t?.trim().toLowerCase()??""}const S=["<||DSML||tool_calls>","<|DSML|tool_calls>"];function P(t){return t.replaceAll("\uFF5C","|")}function O(t){return t.replaceAll(""",'"').replaceAll("'","'").replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&")}function R(t){const n=P(t),e=/<\|{1,2}DSML\|{1,2}tool_calls>([\s\S]*?)<\/\|{1,2}DSML\|{1,2}tool_calls>/.exec(n);if(!e||typeof e.index!="number")return null;const s=[],o=/<\|{1,2}DSML\|{1,2}invoke\b([^>]*)>([\s\S]*?)<\/\|{1,2}DSML\|{1,2}invoke>/g;for(const i of e[1].matchAll(o)){const p=/\bname\s*=\s*["']([^"']+)["']/.exec(i[1])?.[1]?.trim();if(!p)continue;const l={},f=/<\|{1,2}DSML\|{1,2}parameter\b([^>]*)>([\s\S]*?)<\/\|{1,2}DSML\|{1,2}parameter>/g;for(const a of i[2].matchAll(f)){const u=/\bname\s*=\s*["']([^"']+)["']/.exec(a[1])?.[1]?.trim();if(!u)continue;const r=O(a[2].trim());if(/\bstring\s*=\s*["']true["']/i.test(a[1])){l[u]=r;continue}try{l[u]=JSON.parse(r)}catch{l[u]=r}}s.push({name:O(p),arguments:JSON.stringify(l)})}return s.length===0?null:{calls:s,visibleText:`${t.slice(0,e.index)}${t.slice(e.index+e[0].length)}`}}function B(t){const n=P(t),e=Math.min(n.length,Math.max(...S.map(s=>s.length-1)));for(let s=e;s>0;s-=1){const o=n.slice(-s);if(S.some(i=>i.startsWith(o)))return s}return 0}function c(t){return typeof t=="string"?t:""}function h(t){if(!(typeof t>"u"))try{return JSON.parse(JSON.stringify(t))}catch{return}}function U(t){const n=c(t).trim();return n?[`Runtime model disclosure: the actual upstream model selected for this turn is "${n}".`,"If the user asks what model is being used, answer with this exact model id instead of inferring from Codex CLI, OpenAI, or fallback model lists."].join(" "):null}function J(){return{instructions:null,max_output_tokens:null,parallel_tool_calls:void 0,previous_response_id:null,reasoning:{effort:null,summary:null},store:!1,temperature:1,text:{format:{type:"text"}},tool_choice:"auto",tools:[],top_p:1,truncation:"disabled",user:null,metadata:{}}}function W(t){const n=J();return m(t)?{instructions:typeof t.instructions>"u"?n.instructions:h(t.instructions),max_output_tokens:typeof t.max_output_tokens>"u"?n.max_output_tokens:h(t.max_output_tokens),parallel_tool_calls:typeof t.parallel_tool_calls>"u"?n.parallel_tool_calls:h(t.parallel_tool_calls),previous_response_id:typeof t.previous_response_id>"u"?n.previous_response_id:h(t.previous_response_id),reasoning:typeof t.reasoning>"u"?n.reasoning:h(t.reasoning),store:typeof t.store>"u"?n.store:h(t.store),temperature:typeof t.temperature>"u"?n.temperature:h(t.temperature),text:typeof t.text>"u"?n.text:h(t.text),tool_choice:typeof t.tool_choice>"u"?n.tool_choice:h(t.tool_choice),tools:typeof t.tools>"u"?n.tools:h(t.tools),top_p:typeof t.top_p>"u"?n.top_p:h(t.top_p),truncation:typeof t.truncation>"u"?n.truncation:h(t.truncation),user:typeof t.user>"u"?n.user:h(t.user),metadata:typeof t.metadata>"u"?n.metadata:h(t.metadata)}:n}function E(t,n){const e=n.prompt_tokens??t.usage?.input_tokens,s=n.completion_tokens??t.usage?.output_tokens;t.usage={input_tokens:e,output_tokens:s,total_tokens:n.total_tokens??(typeof e=="number"&&typeof s=="number"?e+s:t.usage?.total_tokens),input_tokens_details:typeof n.prompt_tokens_details>"u"?t.usage?.input_tokens_details:n.prompt_tokens_details,output_tokens_details:typeof n.completion_tokens_details>"u"?t.usage?.output_tokens_details:n.completion_tokens_details}}function M(t){if(typeof t=="string")return t;if(Array.isArray(t))return t.map(e=>M(e)).filter(Boolean).join("");if(!m(t))return"";const n=c(t.type);return(n==="text"||n==="output_text"||n==="input_text")&&typeof t.text=="string"?t.text:""}function H(t){if(typeof t=="string")return t;if(t===null||typeof t>"u")return"";try{return JSON.stringify(t)}catch{return String(t)}}function V(t){return typeof t=="string"?t:Array.isArray(t)?t.map(n=>{if(!m(n))return"";const e=c(n.type);return(e==="summary_text"||e==="text")&&typeof n.text=="string"?n.text:""}).filter(Boolean).join(""):""}function X(t){return t==="developer"?"system":t==="system"||t==="user"||t==="assistant"||t==="tool"?t:"user"}function F(t){if(typeof t=="string")return t;if(!Array.isArray(t))return null;const n=[],e=[];let s=!1;for(const o of t){if(!m(o))continue;const i=c(o.type);if((i==="input_text"||i==="output_text"||i==="text")&&typeof o.text=="string"){e.push(o.text),n.push({type:"text",text:o.text});continue}if(i==="input_image"){const p=o.image_url;typeof p=="string"&&p.trim()?(n.push({type:"image_url",image_url:{url:p}}),s=!0):m(p)&&(n.push({type:"image_url",image_url:p}),s=!0)}}return n.length===0?null:s?n:e.join("")}function C(t,n,e="",s=null){if(n.length===0)return!1;const o={role:"assistant",content:s,tool_calls:[...n]};return e.trim()&&(o.reasoning_content=e),t.push(o),n.length=0,!0}function G(t){if(!m(t)||c(t.type)!=="function")return t;const n=c(t.name);return n?{type:"function",function:{name:n}}:t}function w(t){if(!Array.isArray(t))return;const n=t.flatMap(e=>{if(!m(e)||c(e.type)!=="function")return[];const s=c(e.name);if(!s)return[];const o={name:s};return typeof e.description=="string"&&e.description.trim()&&(o.description=e.description),(m(e.parameters)||Array.isArray(e.parameters))&&(o.parameters=e.parameters),typeof e.strict=="boolean"&&(o.strict=e.strict),[{type:"function",function:o}]});return n.length>0?n:void 0}function k(t,n){return{id:t.id,type:"reasoning",status:n,summary:t.text.length>0?[{type:"summary_text",text:t.text}]:[],content:[]}}function v(t,n){const e=t.requestContext,s=[];t.reasoningItem?.done&&s.push({outputIndex:t.reasoningItem.outputIndex,item:k(t.reasoningItem,"completed")}),t.textItem?.done&&s.push({outputIndex:t.textItem.outputIndex,item:{id:t.textItem.id,type:"message",status:"completed",role:"assistant",content:[{type:"output_text",text:t.textItem.text,annotations:[]}]}});for(const o of[...t.toolCallsByIndex.values()].sort((i,p)=>i.outputIndex-p.outputIndex))o.done&&s.push({outputIndex:o.outputIndex,item:{id:o.id,type:"function_call",status:"completed",call_id:o.callId,name:o.name,arguments:o.arguments}});return{id:t.responseId,object:"response",created_at:t.createdAt,status:n,error:null,incomplete_details:null,instructions:e.instructions??null,max_output_tokens:e.max_output_tokens??null,model:t.model,output:s.sort((o,i)=>o.outputIndex-i.outputIndex).map(o=>o.item),output_text:t.textItem?.text??"",parallel_tool_calls:typeof e.parallel_tool_calls=="boolean"?e.parallel_tool_calls:t.toolCallsByIndex.size>1,previous_response_id:e.previous_response_id??null,reasoning:m(e.reasoning)?e.reasoning:{effort:null,summary:null},store:typeof e.store=="boolean"?e.store:!1,temperature:typeof e.temperature=="number"?e.temperature:1,text:m(e.text)?e.text:{format:{type:"text"}},tool_choice:typeof e.tool_choice>"u"?"auto":e.tool_choice,tools:Array.isArray(e.tools)?e.tools:[],top_p:typeof e.top_p=="number"?e.top_p:1,truncation:typeof e.truncation=="string"?e.truncation:"disabled",usage:{input_tokens:t.usage?.input_tokens??0,output_tokens:t.usage?.output_tokens??0,total_tokens:t.usage?.total_tokens??0,...typeof t.usage?.input_tokens_details<"u"?{input_tokens_details:t.usage.input_tokens_details}:{},...typeof t.usage?.output_tokens_details<"u"?{output_tokens_details:t.usage.output_tokens_details}:{}},user:e.user??null,metadata:m(e.metadata)?e.metadata:{}}}function y(t){const n=t.sequenceNumber;return t.sequenceNumber+=1,n}function x(t){return t.eventSequence+=1,`compat-${t.eventSequence}`}function L(t){return t.createdEmitted?[]:(t.createdEmitted=!0,[{type:"response.created",sequence_number:y(t),response:v(t,"in_progress")}])}function $(t){return t.textItem||(t.textItem={id:`msg_${I()}`,outputIndex:t.nextOutputIndex,text:"",added:!1,done:!1},t.nextOutputIndex+=1),t.textItem}function N(t){return t.reasoningItem||(t.reasoningItem={id:`rs_${I()}`,outputIndex:t.nextOutputIndex,text:"",added:!1,done:!1},t.nextOutputIndex+=1),t.reasoningItem}function T(t,n){const e=t.toolCallsByIndex.get(n);if(e)return e;const s={id:`fc_${I()}`,callId:`call_${I()}`,name:`tool_${n}`,arguments:"",outputIndex:t.nextOutputIndex,added:!1,done:!1};return t.nextOutputIndex+=1,t.toolCallsByIndex.set(n,s),s}function K(t){return typeof t=="string"?t:M(t)}function Y(t,n,e){return(n??"GET").toUpperCase()!=="POST"||!new URL(e,"http://grix.internal").pathname.endsWith("/responses")?!1:j(t[D])===z}function Z(t){const n={...t};return delete n[D],delete n["X-Grix-OpenAI-Wire-Compat"],n}function q(t){const n=new URL(t,"http://grix.internal");return n.pathname=n.pathname.replace(/\/responses$/,"/chat/completions"),`${n.pathname}${n.search}`}function tt(t,n){const e=m(t)?t:{},s=[],o=[];let i="";const p=c(e.instructions);p&&s.push({role:"system",content:p});const l=U(e.model);l&&s.push({role:"system",content:l});const f=Array.isArray(e.input)?e.input:[];for(const r of f){if(!m(r))continue;const d=c(r.type);if(d==="message"||!d&&r.role){const _=X(c(r.role)),g=F(r.content);if(_==="assistant"&&o.length>0){C(s,o,i,g),i="";continue}(C(s,o,i)||_!=="assistant")&&(i="");const b={role:_,content:g};_==="assistant"&&i.trim()&&(b.reasoning_content=i,i=""),s.push(b);continue}if(d==="reasoning"){i+=V(r.summary);continue}if(d==="function_call"){const _=c(r.name);if(!_)continue;o.push({id:c(r.call_id)||`call_${I()}`,type:"function",function:{name:_,arguments:c(r.arguments)}});continue}d==="function_call_output"&&(C(s,o,i),i="",s.push({role:"tool",tool_call_id:c(r.call_id),content:H(r.output)}))}C(s,o,i);const a={model:e.model,messages:s,stream:e.stream===!0},u=w(e.tools);return u&&(a.tools=u),!n?.omitToolChoice&&typeof e.tool_choice<"u"&&(a.tool_choice=G(e.tool_choice)),typeof e.parallel_tool_calls=="boolean"&&(a.parallel_tool_calls=e.parallel_tool_calls),typeof e.max_output_tokens=="number"&&(a.max_tokens=e.max_output_tokens),typeof e.temperature=="number"&&(a.temperature=e.temperature),typeof e.top_p=="number"&&(a.top_p=e.top_p),a}class et{state;constructor(n){this.state={responseId:n?.responseId?.trim()||`resp_${I()}`,model:n?.model?.trim()||"",createdAt:n?.createdAt??Math.floor(Date.now()/1e3),sequenceNumber:0,eventSequence:0,nextOutputIndex:0,requestContext:W(n?.requestBody),reasoningItem:null,textItem:null,textProbeBuffer:"",dsmlTextBuffer:null,toolCallsByIndex:new Map,createdEmitted:!1,completedEmitted:!1}}consumeChatCompletionChunk(n){const e=m(n)?n:{};typeof e.id=="string"&&e.id.trim()&&(this.state.responseId=e.id),typeof e.model=="string"&&e.model.trim()&&(this.state.model=e.model),typeof e.created=="number"&&(this.state.createdAt=e.created),e.usage&&E(this.state,e.usage);const s=L(this.state);for(const o of e.choices??[]){const i=o.delta,p=c(i?.reasoning_content);if(p.length>0){const a=N(this.state);a.added||(a.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:a.outputIndex,item:k(a,"in_progress")})),a.text+=p,s.push({type:"response.reasoning_summary_text.delta",item_id:a.id,output_index:a.outputIndex,summary_index:0,delta:p,sequence_number:y(this.state)})}const l=i?.content??"";this.state.reasoningItem?.added&&!this.state.reasoningItem.done&&(typeof l=="string"&&l.length>0||(i?.tool_calls?.length??0)>0)&&s.push(...this.completePendingReasoningSummary()),typeof l=="string"&&l.length>0&&s.push(...this.consumeTextDelta(l));const f=i?.tool_calls??[];f.length>0&&s.push(...this.flushTextCompatibilityBuffers(!1));for(const a of f){const u=typeof a.index=="number"&&Number.isFinite(a.index)?a.index:0,r=T(this.state,u);typeof a.id=="string"&&a.id.trim()&&(r.callId=a.id);const d=a.function,_=c(d?.name);_&&(r.name=r.name.startsWith("tool_")&&r.arguments.length===0?_:r.name===_?r.name:`${r.name}${_}`),r.added||(r.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:r.outputIndex,item:{id:r.id,type:"function_call",status:"in_progress",call_id:r.callId,name:r.name,arguments:""}}));const g=c(d?.arguments);g&&(r.arguments+=g,s.push({type:"response.function_call_arguments.delta",event_id:x(this.state),response_id:this.state.responseId,item_id:r.id,output_index:r.outputIndex,call_id:r.callId,delta:g}))}o.finish_reason&&(s.push(...this.flushTextCompatibilityBuffers(!0)),s.push(...this.completePendingReasoningSummary()),s.push(...this.completePendingItems()))}return s}consumeChatCompletion(n){const e=m(n)?n:{};typeof e.id=="string"&&e.id.trim()&&(this.state.responseId=e.id),typeof e.model=="string"&&e.model.trim()&&(this.state.model=e.model),typeof e.created=="number"&&(this.state.createdAt=e.created),e.usage&&E(this.state,e.usage);const s=L(this.state),i=e.choices?.[0],p=m(i?.message)?i.message:{},l=c(p.reasoning_content);if(l.length>0){const u=N(this.state);u.added||(u.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:u.outputIndex,item:k(u,"in_progress")})),u.text+=l,s.push({type:"response.reasoning_summary_text.delta",item_id:u.id,output_index:u.outputIndex,summary_index:0,delta:l,sequence_number:y(this.state)})}let f=K(p.content),a=Array.isArray(p.tool_calls)?p.tool_calls:[];if(f&&a.length===0){const u=R(f);u&&(f=u.visibleText,a=u.calls.map(r=>({id:`call_${I()}`,type:"function",function:{name:r.name,arguments:r.arguments}})))}if(l.length>0&&(f||a.length>0)&&s.push(...this.completePendingReasoningSummary()),f){const u=$(this.state);u.added||(u.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:u.outputIndex,item:{id:u.id,type:"message",status:"in_progress",role:"assistant",content:[]}})),u.text+=f,s.push({type:"response.output_text.delta",sequence_number:y(this.state),output_index:u.outputIndex,item_id:u.id,content_index:0,delta:f,logprobs:[]})}return a.forEach((u,r)=>{if(!m(u))return;const d=T(this.state,r),_=c(u.id);_&&(d.callId=_);const g=m(u.function)?u.function:{},A=c(g.name);A&&(d.name=A),d.added||(d.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:d.outputIndex,item:{id:d.id,type:"function_call",status:"in_progress",call_id:d.callId,name:d.name,arguments:""}}));const b=c(g.arguments);b&&(d.arguments=b,s.push({type:"response.function_call_arguments.delta",event_id:x(this.state),response_id:this.state.responseId,item_id:d.id,output_index:d.outputIndex,call_id:d.callId,delta:b}))}),s.push(...this.completePendingItems()),s}finalize(){if(this.state.completedEmitted)return[];const n=[...this.flushTextCompatibilityBuffers(!0),...this.completePendingReasoningSummary(),...this.completePendingItems()];return this.state.completedEmitted=!0,n.push({type:"response.completed",sequence_number:y(this.state),response:v(this.state,"completed")}),n}emitTextDelta(n){if(!n)return[];const e=$(this.state),s=[];return e.added||(e.added=!0,s.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:e.outputIndex,item:{id:e.id,type:"message",status:"in_progress",role:"assistant",content:[]}})),e.text+=n,s.push({type:"response.output_text.delta",sequence_number:y(this.state),output_index:e.outputIndex,item_id:e.id,content_index:0,delta:n,logprobs:[]}),s}consumeTextDelta(n){if(this.state.dsmlTextBuffer!==null)return this.state.dsmlTextBuffer+=n,[];this.state.textProbeBuffer+=n;const e=P(this.state.textProbeBuffer),s=S.map(l=>e.indexOf(l)).filter(l=>l>=0);if(s.length>0){const l=Math.min(...s),f=this.state.textProbeBuffer.slice(0,l);return this.state.dsmlTextBuffer=this.state.textProbeBuffer.slice(l),this.state.textProbeBuffer="",this.emitTextDelta(f)}const o=B(this.state.textProbeBuffer),i=this.state.textProbeBuffer.length-o;if(i<=0)return[];const p=this.state.textProbeBuffer.slice(0,i);return this.state.textProbeBuffer=this.state.textProbeBuffer.slice(i),this.emitTextDelta(p)}emitParsedDsmlToolCalls(n){const e=[];return n.forEach((s,o)=>{const i=T(this.state,o);i.name=s.name,i.arguments=s.arguments,i.added||(i.added=!0,e.push({type:"response.output_item.added",event_id:x(this.state),response_id:this.state.responseId,output_index:i.outputIndex,item:{id:i.id,type:"function_call",status:"in_progress",call_id:i.callId,name:i.name,arguments:""}})),e.push({type:"response.function_call_arguments.delta",event_id:x(this.state),response_id:this.state.responseId,item_id:i.id,output_index:i.outputIndex,call_id:i.callId,delta:i.arguments})}),e}flushTextCompatibilityBuffers(n){const e=[];if(this.state.dsmlTextBuffer!==null){const s=this.state.dsmlTextBuffer;this.state.dsmlTextBuffer=null;const o=n&&this.state.toolCallsByIndex.size===0?R(s):null;o?(e.push(...this.emitParsedDsmlToolCalls(o.calls)),e.push(...this.emitTextDelta(o.visibleText))):e.push(...this.emitTextDelta(s))}return this.state.textProbeBuffer&&(e.push(...this.emitTextDelta(this.state.textProbeBuffer)),this.state.textProbeBuffer=""),e}completePendingReasoningSummary(){const n=this.state.reasoningItem;return!n?.added||n.done?[]:(n.done=!0,[{type:"response.reasoning_summary_text.done",item_id:n.id,output_index:n.outputIndex,summary_index:0,text:n.text,sequence_number:y(this.state)},{type:"response.output_item.done",event_id:x(this.state),response_id:this.state.responseId,output_index:n.outputIndex,item:k(n,"completed")}])}completePendingItems(){const n=[];for(const e of[...this.state.toolCallsByIndex.values()].sort((s,o)=>s.outputIndex-o.outputIndex))!e.added||e.done||(e.done=!0,n.push({type:"response.function_call_arguments.done",event_id:x(this.state),response_id:this.state.responseId,item_id:e.id,output_index:e.outputIndex,call_id:e.callId,arguments:e.arguments}),n.push({type:"response.output_item.done",event_id:x(this.state),response_id:this.state.responseId,output_index:e.outputIndex,item:{id:e.id,type:"function_call",status:"completed",call_id:e.callId,name:e.name,arguments:e.arguments}}));return this.state.textItem?.added&&!this.state.textItem.done&&(this.state.textItem.done=!0,n.push({type:"response.output_text.done",event_id:x(this.state),response_id:this.state.responseId,output_index:this.state.textItem.outputIndex,item_id:this.state.textItem.id,content_index:0,text:this.state.textItem.text,logprobs:[],sequence_number:y(this.state)}),n.push({type:"response.output_item.done",event_id:x(this.state),response_id:this.state.responseId,output_index:this.state.textItem.outputIndex,item:{id:this.state.textItem.id,type:"message",status:"completed",role:"assistant",content:[{type:"output_text",text:this.state.textItem.text,annotations:[]}]}})),n}}function nt(t){return Buffer.from(`data: ${JSON.stringify(t)}
|
|
2
2
|
|
|
3
|
-
`,"utf8")}function
|
|
3
|
+
`,"utf8")}function st(t){const n=t.replaceAll(`\r
|
|
4
4
|
`,`
|
|
5
5
|
`),e=[];let s=0;for(;;){const o=n.indexOf(`
|
|
6
6
|
|
|
7
|
-
`,s);if(o<0)break;e.push(n.slice(s,o)),s=o+2}return{frames:e,remaining:n.slice(s)}}function
|
|
7
|
+
`,s);if(o<0)break;e.push(n.slice(s,o)),s=o+2}return{frames:e,remaining:n.slice(s)}}function ot(t){const n=t.split(`
|
|
8
8
|
`).filter(e=>e.startsWith("data:")).map(e=>e.slice(5).trimStart());return n.length===0?null:n.join(`
|
|
9
|
-
`)}export{
|
|
9
|
+
`)}export{D as CODEX_OPENAI_WIRE_COMPAT_HEADER,z as CODEX_OPENAI_WIRE_COMPAT_MODE,et as CodexResponsesEventTranslator,nt as encodeResponsesSseEvent,ot as parseSseData,st as parseSseFrames,q as resolveCodexOpenaiChatCompatPath,Y as shouldUseCodexOpenaiChatCompat,Z as stripCodexOpenaiChatCompatHeaders,tt as translateResponsesRequestToChatCompletions};
|
package/dist/core/proxy/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ProxyManager as
|
|
1
|
+
import{ProxyManager as s}from"./proxy-manager.js";import{ProxyManager as g,ProxyNoRelayRouteError as E}from"./proxy-manager.js";import{RelayFetchError as A,RelayToggleCoordinator as d,deriveGatewayBaseUrls as h,fetchRelayCredentialWithRetry as m}from"./relay-credential-fetch.js";import{relayHostsForClientType as Y}from"./relay-hosts.js";import{buildGatewayRoute as w}from"./gateway-route.js";import{ensureKiroRelay as K,stopKiroRelay as T,stopAllKiroRelays as b,getKiroRelaySpawnEnv as L,getKiroRelayDebug as M,kiroRelayHomeDir as X}from"./kiro-relay.js";let e=null;function c(r){return e||(e=new s(r)),e}function p(){return e}function u(){e=null}class y extends Error{agentName;code="RELAY_PROXY_UNAVAILABLE";constructor(o){super(`agent "${o}" has Grix relay enabled but the local MITM proxy is not running; refusing to start it (it would silently fall back to your own account). Fix the proxy or turn relay off.`),this.agentName=o,this.name="ProxyRelayUnavailableError"}}const i="localhost,127.0.0.1,::1",x="grix-relay-placeholder";function P(r,o,n){if(e?.isRelayExpectedButUnavailable(o))throw new y(o);const l=e?.getInjectionEnv(o);if(!l)return r;const t={...r,...l};n?.trim().toLowerCase()==="claude"&&!t.ANTHROPIC_API_KEY&&!t.ANTHROPIC_AUTH_TOKEN&&(t.ANTHROPIC_API_KEY=x),n?.trim().toLowerCase()==="codex"&&(t.GRIX_RELAY_PROXY="1");const a=r?.NO_PROXY??r?.no_proxy??process.env.NO_PROXY??process.env.no_proxy;return t.NO_PROXY=a&&a.trim()?`${a},${i}`:i,t}export{x as GRIX_RELAY_ANTHROPIC_API_KEY,g as ProxyManager,E as ProxyNoRelayRouteError,y as ProxyRelayUnavailableError,A as RelayFetchError,d as RelayToggleCoordinator,P as applyProxyEnv,w as buildGatewayRoute,h as deriveGatewayBaseUrls,K as ensureKiroRelay,m as fetchRelayCredentialWithRetry,M as getKiroRelayDebug,L as getKiroRelaySpawnEnv,p as getProxyManager,c as initProxyManager,X as kiroRelayHomeDir,Y as relayHostsForClientType,u as resetProxyManagerForTest,b as stopAllKiroRelays,T as stopKiroRelay};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function a(
|
|
1
|
+
function a(t){const o=new Set([`http://127.0.0.1:${t.serverPort}`,`http://localhost:${t.serverPort}`,...t.allowedOrigins]),e=new Set([`127.0.0.1:${t.serverPort}`,`localhost:${t.serverPort}`,...t.allowedHosts]);return{validateRequest(s){const r=i(s,o);if(!r.ok)return r;const n=l(s,e);return n.ok?{ok:!0}:n}}}function i(t,o){const e=t.headers.origin;return e?o.has(e)?{ok:!0}:{ok:!1,statusCode:403,message:`Origin not allowed: ${e}`}:{ok:!0}}function l(t,o){const e=t.headers.host;return e?o.has(e)?{ok:!0}:{ok:!1,statusCode:403,message:`Host not allowed: ${e}`}:{ok:!1,statusCode:403,message:"Missing Host header"}}export{a as createSecurityPolicy};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "grix-connector",
|
|
3
|
-
"version": "3.19.
|
|
3
|
+
"version": "3.19.7",
|
|
4
4
|
"description": "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.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|