@pen.dev/cli 0.2.8 → 0.3.0

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.
Files changed (113) hide show
  1. package/dist/all-BRgnaRVf.mjs +2 -0
  2. package/dist/anthropic-messages-B0UGUOMk.mjs +40 -0
  3. package/dist/anthropic-messages-Bdjz4-4h.mjs +40 -0
  4. package/dist/azure-openai-responses-DGGHC-S9.mjs +2 -0
  5. package/dist/azure-openai-responses-Dcn9uJAW.mjs +2 -0
  6. package/dist/browserAll-B9bGRQuq.mjs +2 -0
  7. package/dist/deferred-tools-B1EgE_tY.mjs +2 -0
  8. package/dist/deferred-tools-DowE4eb1.mjs +2 -0
  9. package/dist/diagnostics-D0oRYjyK.mjs +2 -0
  10. package/dist/diagnostics-DZacjHpY.mjs +2 -0
  11. package/dist/{dist-BMO4tFTj.mjs → dist-YY0wuD4v.mjs} +361 -416
  12. package/dist/error-body-RPMBLEAJ.mjs +2 -0
  13. package/dist/event-stream-BrGAtXMV.mjs +2 -0
  14. package/dist/event-stream-CXocIcc6.mjs +2 -0
  15. package/dist/google-generative-ai-6QyLi6xj.mjs +2 -0
  16. package/dist/google-generative-ai-BG0mJ2Yd.mjs +2 -0
  17. package/dist/{google-shared-YCDndJGN.mjs → google-shared-BIfd6JKP.mjs} +2 -2
  18. package/dist/{google-shared-TkwodIGJ.mjs → google-shared-CgKgcf0q.mjs} +2 -2
  19. package/dist/google-vertex-CBwir-qy.mjs +2 -0
  20. package/dist/google-vertex-DlS7-xf8.mjs +2 -0
  21. package/dist/index.mjs +2 -2
  22. package/dist/{mistral-conversations-DIR6EyvH.mjs → mistral-conversations-BS3W7xJY.mjs} +2 -2
  23. package/dist/{mistral-conversations-JED5QLUZ.mjs → mistral-conversations-Bm5cpZKX.mjs} +1 -1
  24. package/dist/models-BZPNtJp1.mjs +2 -0
  25. package/dist/models-bnt621e8.mjs +2 -0
  26. package/dist/{multipart-parser-CYJPmLQW.mjs → multipart-parser-Ce015IGH.mjs} +1 -1
  27. package/dist/{multipart-parser-4wzMiNnD.mjs → multipart-parser-u0QlX_zW.mjs} +1 -1
  28. package/dist/openai-codex-responses-BJOfgqHD.mjs +8 -0
  29. package/dist/openai-codex-responses-DstMs9PK.mjs +8 -0
  30. package/dist/openai-completions-D81vzTqd.mjs +6 -0
  31. package/dist/openai-completions-mzPR2_al.mjs +6 -0
  32. package/dist/openai-responses-BpQ7bzV4.mjs +2 -0
  33. package/dist/openai-responses-BsyyuOSg.mjs +2 -0
  34. package/dist/openai-responses-shared-DujHRX-u.mjs +11 -0
  35. package/dist/openai-responses-shared-Nr5Yi_N5.mjs +11 -0
  36. package/dist/{openrouter-images-NEnwWNeg.mjs → openrouter-images-DEF66Jtk.mjs} +1 -1
  37. package/dist/openrouter-images-XPGQk4Yu.mjs +2 -0
  38. package/dist/{otel-BIqiVgiM.mjs → otel-BUSnyV78.mjs} +1 -1
  39. package/dist/{otel-BbTSxAZp.mjs → otel-Bv5u_Lik.mjs} +1 -1
  40. package/dist/out/mcp-server-darwin-arm64 +0 -0
  41. package/dist/out/mcp-server-darwin-x64 +0 -0
  42. package/dist/out/mcp-server-linux-arm64 +0 -0
  43. package/dist/out/mcp-server-linux-x64 +0 -0
  44. package/dist/out/mcp-server-windows-arm64.exe +0 -0
  45. package/dist/out/mcp-server-windows-x64.exe +0 -0
  46. package/dist/pi-messages-BMuD5Lsm.mjs +8 -0
  47. package/dist/pi-messages-Gq9Ttvbd.mjs +8 -0
  48. package/dist/session-resources-SNa1tEPO.mjs +2 -0
  49. package/dist/{src-Bk9f60_P.mjs → src-BxDQmPZ6.mjs} +1 -1
  50. package/dist/{src-CbkJodKR.mjs → src-C1Ztzxmo.mjs} +1 -1
  51. package/dist/transform-messages-C0FNxyyM.mjs +2 -0
  52. package/dist/transform-messages-s3jcHssz.mjs +2 -0
  53. package/dist/webworkerAll-B7UInSs7.mjs +2 -0
  54. package/package.json +3 -3
  55. package/dist/all-Bd-ariyL.mjs +0 -2
  56. package/dist/anthropic-messages-D9L1s6pn.mjs +0 -40
  57. package/dist/anthropic-messages-OUY8OJj7.mjs +0 -40
  58. package/dist/azure-openai-responses-DJKVhgL-.mjs +0 -2
  59. package/dist/azure-openai-responses-DSoXDHyP.mjs +0 -2
  60. package/dist/browserAll-CGZu5S9C.mjs +0 -2
  61. package/dist/diagnostics-hlO-DFfk.mjs +0 -2
  62. package/dist/google-generative-ai-BqfOLKon.mjs +0 -2
  63. package/dist/google-generative-ai-CZCmY9Gg.mjs +0 -2
  64. package/dist/google-vertex-COsje8-Z.mjs +0 -2
  65. package/dist/google-vertex-Cz5Ddo09.mjs +0 -2
  66. package/dist/models-CtsqYGxn.mjs +0 -2
  67. package/dist/models-DVeZ-5Ql.mjs +0 -2
  68. package/dist/openai-codex-responses-Cq8yFwfN.mjs +0 -8
  69. package/dist/openai-codex-responses-CzFfnGCe.mjs +0 -8
  70. package/dist/openai-completions-DT4sdoVc.mjs +0 -6
  71. package/dist/openai-completions-iO6yRDuR.mjs +0 -6
  72. package/dist/openai-responses-Cr3SvtkS.mjs +0 -2
  73. package/dist/openai-responses-Dtr2Vk2j.mjs +0 -2
  74. package/dist/openai-responses-shared-BLDoTd9K.mjs +0 -13
  75. package/dist/openai-responses-shared-C4PQs_0V.mjs +0 -11
  76. package/dist/openrouter-images-Dk-x2ke6.mjs +0 -2
  77. package/dist/transform-messages-DSEUXL48.mjs +0 -2
  78. package/dist/transform-messages-j96k5V_T.mjs +0 -2
  79. package/dist/webworkerAll-Dy6-Qx-T.mjs +0 -2
  80. /package/dist/{completionchunk-c1fsGiUK.mjs → completionchunk-CL_VFmtq.mjs} +0 -0
  81. /package/dist/{completionchunk-BaC49qbM.mjs → completionchunk-Dyma-JoP.mjs} +0 -0
  82. /package/dist/{dist-BupqiQep.mjs → dist-BgzWr9oi.mjs} +0 -0
  83. /package/dist/{dist-CCiXmKIu.mjs → dist-BtZHKnO9.mjs} +0 -0
  84. /package/dist/{dist-Dq7S86ex.mjs → dist-C3aEr0_q.mjs} +0 -0
  85. /package/dist/{emscripten-module.browser-F76W5DM6-3XbeCXXF.mjs → emscripten-module.browser-F76W5DM6-B_MffdHf.mjs} +0 -0
  86. /package/dist/{emscripten-module.browser-XIKQQPVU-JPkxo8p_.mjs → emscripten-module.browser-XIKQQPVU-ChFl3_k2.mjs} +0 -0
  87. /package/dist/{error-body-D-jnPxbB.mjs → error-body-3m883nGr.mjs} +0 -0
  88. /package/dist/{ffi-D6Fxg1d3.mjs → ffi-DEs9OsLe.mjs} +0 -0
  89. /package/dist/{ffi-u92ceo2s.mjs → ffi-jngwuqKl.mjs} +0 -0
  90. /package/dist/{from-BRY6g9CG.mjs → from-CeVGfYjJ.mjs} +0 -0
  91. /package/dist/{from-Bra_AO5N.mjs → from-DizeILWM.mjs} +0 -0
  92. /package/dist/{github-copilot-headers-ByQsj8SR.mjs → github-copilot-headers-Co77A9iu.mjs} +0 -0
  93. /package/dist/{github-copilot-headers-C4gA1Pjv.mjs → github-copilot-headers-Di-B2QFr.mjs} +0 -0
  94. /package/dist/{hash-BFdQp5Bn.mjs → hash-BJLGFTk8.mjs} +0 -0
  95. /package/dist/{hash-DFXd8wf4.mjs → hash-Dx9oN2Lv.mjs} +0 -0
  96. /package/dist/{headers-BkXFKypW.mjs → headers-8nMK0zm-.mjs} +0 -0
  97. /package/dist/{headers-DtjIrAKV.mjs → headers-Gh3dvZSc.mjs} +0 -0
  98. /package/dist/{html-DwPxy9Y2.mjs → html-De9v6PsV.mjs} +0 -0
  99. /package/dist/{init-BaeOBiNV.mjs → init-BwjB5mke.mjs} +0 -0
  100. /package/dist/{json-parse-BEWPMC87.mjs → json-parse-BjxNFuy6.mjs} +0 -0
  101. /package/dist/{json-parse-qcO5FIDw.mjs → json-parse-CoJ2PRW2.mjs} +0 -0
  102. /package/dist/{module-ES6BEMUI-DGywGVC7.mjs → module-ES6BEMUI-CiRafcvD.mjs} +0 -0
  103. /package/dist/{module-asyncify-2EFITU5U-BU2CORSO.mjs → module-asyncify-2EFITU5U-Bvf6Er23.mjs} +0 -0
  104. /package/dist/{openai-CJ1JzbCY.mjs → openai-Clqf3tig.mjs} +0 -0
  105. /package/dist/{openai-Cv91uXJB.mjs → openai-DtotRKm7.mjs} +0 -0
  106. /package/dist/{openai-prompt-cache-CjAED4AP.mjs → openai-prompt-cache-BbVvSxhO.mjs} +0 -0
  107. /package/dist/{openai-prompt-cache-tVxLccHG.mjs → openai-prompt-cache-ChV-9Dro.mjs} +0 -0
  108. /package/dist/{photon_rs-D_fXqzJa.mjs → photon_rs-DziCqNI5.mjs} +0 -0
  109. /package/dist/{provider-env-D0o9FEJi.mjs → provider-env-CgV7Mc0a.mjs} +0 -0
  110. /package/dist/{provider-env-DTh1Xe-B.mjs → provider-env-p-MKZrBX.mjs} +0 -0
  111. /package/dist/{sanitize-unicode-B5GgPEiu.mjs → sanitize-unicode-BU6jSNzJ.mjs} +0 -0
  112. /package/dist/{sanitize-unicode-DVHYNBlY.mjs → sanitize-unicode-C8aKmv6o.mjs} +0 -0
  113. /package/dist/{standalone-BGhJUGyg.mjs → standalone-NMu-shOx.mjs} +0 -0
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./event-stream-BrGAtXMV.mjs";import{n as t}from"./models-BZPNtJp1.mjs";import{t as n}from"./deferred-tools-B1EgE_tY.mjs";import{t as r}from"./headers-Gh3dvZSc.mjs";import"./json-parse-BjxNFuy6.mjs";import{t as i}from"./provider-env-CgV7Mc0a.mjs";import{r as a}from"./transform-messages-s3jcHssz.mjs";import{n as o,t as s}from"./error-body-3m883nGr.mjs";import{t as c}from"./openai-prompt-cache-BbVvSxhO.mjs";import{n as l,r as u,t as d}from"./openai-responses-shared-DujHRX-u.mjs";import{n as f,r as p,t as m}from"./diagnostics-DZacjHpY.mjs";const h=new Set;function g(e){return h.add(e),()=>{h.delete(e)}}function _(e){let t=e.filter(e=>e!==void 0);if(t.length===0)return{cleanup:()=>{}};if(t.length===1)return{signal:t[0],cleanup:()=>{}};let n=new AbortController,r=[],i=e=>{n.signal.aborted||n.abort(e.reason)};for(let e of t){if(e.aborted){i(e);break}let t=()=>i(e);e.addEventListener(`abort`,t,{once:!0}),r.push({signal:e,listener:t})}return{signal:n.signal,cleanup:()=>{for(let{signal:e,listener:t}of r)e.removeEventListener(`abort`,t)}}}const v={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443};function y(e,t){let n=e.toLowerCase(),r=e.toUpperCase();return t?.[n]||t?.[r]||i(n)||i(r)||``}function b(e){if(e instanceof URL)return e;try{return new URL(e)}catch{return}}function x(e,t,n){let r=y(`no_proxy`,n).toLowerCase();return r?r===`*`?!1:r.split(/[,\s]/).every(n=>{if(!n)return!0;let r=n.match(/^(.+):(\d+)$/),i=r?r[1]:n,a=r?Number.parseInt(r[2],10):0;return a&&a!==t?!0:/^[.*]/.test(i)?(i.startsWith(`*`)&&(i=i.slice(1)),!e.endsWith(i)):e!==i}):!0}function S(e,t){let n=b(e);if(!n?.protocol||!n.host)return``;let r=n.protocol.split(`:`,1)[0];if(!x(n.host.replace(/:\d*$/,``),Number.parseInt(n.port,10)||v[r]||0,t))return``;let i=y(`${r}_proxy`,t)||y(`all_proxy`,t);return i&&!i.includes(`://`)&&(i=`${r}://${i}`),i}function C(e,t){let n=S(e,t);if(!n)return;let r;try{r=new URL(n)}catch(e){throw Error(`Invalid proxy URL ${JSON.stringify(n)}: ${e instanceof Error?e.message:String(e)}`)}if(r.protocol!==`http:`&&r.protocol!==`https:`)throw Error(`Unsupported proxy protocol. SOCKS and PAC proxy URLs are not supported; use an HTTP or HTTPS proxy URL. Got ${r.protocol}`);return r}function w(){return typeof process>`u`||!(process.versions?.node||process.versions?.bun)?null:process.getBuiltinModule?.(`node:os`)??null}const T=w(),E=1e3,D=new Set([`openai`,`openai-codex`,`opencode`]),O=new Set([`completed`,`incomplete`,`failed`,`cancelled`,`queued`,`in_progress`]);function ee(e){return/GoUsageLimitError|FreeUsageLimitError|Monthly usage limit reached|available balance|insufficient_quota|out of budget|quota exceeded|billing/i.test(e)}function te(e,t){return e===429&&ee(t)?!1:e===429||e===500||e===502||e===503||e===504?!0:/rate.?limit|overloaded|service.?unavailable|upstream.?connect|connection.?refused/i.test(t)}function ne(e){let t=e.get(`retry-after-ms`);if(t!==null){let e=Number(t);if(Number.isFinite(e))return Math.max(0,e)}let n=e.get(`retry-after`);if(!n)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r*1e3);let i=Date.parse(n);if(!Number.isNaN(i))return Math.max(0,i-Date.now())}function re(e,t){let n=t?.maxRetryDelayMs??6e4;return n>0?Math.min(e,n):e}function k(e,t){return new Promise((n,r)=>{if(t?.aborted){r(Error(`Request was aborted`));return}let i=setTimeout(n,e);t?.addEventListener(`abort`,()=>{clearTimeout(i),r(Error(`Request was aborted`))})})}function A(e){if(e!==void 0){if(!Number.isFinite(e)||e<0)throw Error(`Invalid timeoutMs: ${String(e)}`);return Math.floor(e)}}function ie(){return typeof process>`u`||!(process.versions?.node||process.versions?.bun)?null:process.getBuiltinModule?.(`node:zlib`)??null}function ae(e){let t=ie();if(!t||typeof t.zstdCompressSync!=`function`)return null;try{let n=t.zstdCompressSync(e,{params:{[t.constants.ZSTD_c_compressionLevel]:3}});return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}catch{return null}}const j=(t,n,i)=>{let a=new e;return(async()=>{let e={role:`assistant`,content:[],api:`openai-codex-responses`,provider:t.provider,model:t.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let o=i?.apiKey;if(!o)throw Error(`No API key for provider: ${t.provider}`);let s=Ne(o),l=se(t,n,i),u=await i?.onPayload?.(l,t);u!==void 0&&(l=u);let d=c(i?.sessionId),p=d||Pe(),h=Fe(t.headers,i?.headers,s,o,d),g=Ie(t.headers,i?.headers,s,o,p),v=JSON.stringify(l),y=A(i?.timeoutMs),b=A(i?.websocketConnectTimeoutMs),x=i?.transport||`auto`,S=x!==`sse`&&U(i?.sessionId);if(S&&W(i?.sessionId),x!==`sse`&&!S){let n=!1,r=!1;for(;;){n=!1;try{if(await je(le(t.baseUrl),l,g,e,a,t,()=>{n=!0},y,b,i),i?.signal?.aborted)throw Error(`Request was aborted`);a.push({type:`done`,reason:e.stopReason,message:e}),a.end();return}catch(t){let a=i?.signal?.aborted,o=!n&&fe(t);if(!a&&o&&!r){r=!0;continue}if(a||de(t)&&!o||(m(e,f(`provider_transport_failure`,t,{configuredTransport:x,fallbackTransport:n?void 0:`sse`,eventsEmitted:n,phase:n?`after_message_stream_start`:`before_message_stream_start`,requestBytes:new TextEncoder().encode(v).byteLength})),ve(i?.sessionId,t),n))throw t;W(i?.sessionId);break}}}let C=ae(v);C&&h.set(`content-encoding`,`zstd`);let w=C??v,T,D,O=i?.maxRetries??0;for(let e=0;e<=O;e++){if(i?.signal?.aborted)throw Error(`Request was aborted`);try{let n=y!==void 0&&y>0?AbortSignal.timeout(y):void 0,a=_([i?.signal,n]);try{T=await fetch(P(t.baseUrl),{method:`POST`,headers:h,body:w,signal:a.signal})}catch(e){throw n?.aborted&&!i?.signal?.aborted?Error(`Codex SSE response headers timed out after ${y}ms`):e}finally{a.cleanup()}if(await i?.onResponse?.({status:T.status,headers:r(T.headers)},t),T.ok)break;let o=await T.text();if(e<O&&te(T.status,o)){let t=ne(T.headers);await k(t===void 0?E*2**e:T.status===429?re(t,i):t,i?.signal);continue}let s=await Me(new Response(o,{status:T.status,statusText:T.statusText}));throw Error(s.friendlyMessage||s.message)}catch(t){if(t instanceof Error&&(t.name===`AbortError`||t.message===`Request was aborted`))throw Error(`Request was aborted`);if(D=t instanceof Error?t:Error(String(t)),e<O&&!D.message.includes(`usage limit`)){await k(E*2**e,i?.signal);continue}throw D}}if(!T?.ok)throw D??Error(`Failed after retries`);if(!T.body)throw Error(`No response body`);if(a.push({type:`start`,partial:e}),await ue(T,e,a,t,i),i?.signal?.aborted)throw Error(`Request was aborted`);a.push({type:`done`,reason:e.stopReason,message:e}),a.end()}catch(t){for(let t of e.content)delete t.partialJson;e.stopReason=i?.signal?.aborted?`aborted`:`error`,e.errorMessage=s(o(t)),a.push({type:`error`,reason:e.stopReason,error:e}),a.end()}})(),a},oe=(e,n,r)=>{let i=r?.apiKey;if(!i)throw Error(`No API key for provider: ${e.provider}`);let o=a(e,n,r,i),s=r?.reasoning?t(e,r.reasoning):void 0,c=s===`off`?void 0:s;return j(e,n,{...o,reasoningEffort:c})};function se(e,t,r){let i=n(t,e.compat?.supportsToolSearch??!1),a=d(e,t,D,{includeSystemPrompt:!1,deferredTools:i.deferred}),o={model:e.id,store:!1,stream:!0,instructions:t.systemPrompt||`You are a helpful assistant.`,input:a,text:{verbosity:r?.textVerbosity||`low`},include:[`reasoning.encrypted_content`],prompt_cache_key:c(r?.sessionId),tool_choice:r?.toolChoice??`auto`,parallel_tool_calls:!0};if(r?.temperature!==void 0&&(o.temperature=r.temperature),r?.serviceTier!==void 0&&(o.service_tier=r.serviceTier),i.immediate.length>0&&(o.tools=l(i.immediate,{strict:null})),r?.reasoningEffort!==void 0){let t=r.reasoningEffort===`none`?e.thinkingLevelMap?.off??`none`:e.thinkingLevelMap?.[r.reasoningEffort]??r.reasoningEffort;t!==null&&(o.reasoning={effort:t,summary:r.reasoningSummary??`auto`})}return o}function ce(e,t){switch(t){case`flex`:return .5;case`priority`:return e.id===`gpt-5.5`?2.5:2;default:return 1}}function M(e,t,n){let r=ce(n,t);r!==1&&(e.cost.input*=r,e.cost.output*=r,e.cost.cacheRead*=r,e.cost.cacheWrite*=r,e.cost.total=e.cost.input+e.cost.output+e.cost.cacheRead+e.cost.cacheWrite)}function N(e,t){return e===`default`&&(t===`flex`||t===`priority`)?t:e??t}function P(e){let t=(e&&e.trim().length>0?e:`https://chatgpt.com/backend-api`).replace(/\/+$/,``);return t.endsWith(`/codex/responses`)?t:t.endsWith(`/codex`)?`${t}/responses`:`${t}/codex/responses`}function le(e){let t=new URL(P(e));return t.protocol===`https:`&&(t.protocol=`wss:`),t.protocol===`http:`&&(t.protocol=`ws:`),t.toString()}async function ue(e,t,n,r,i){await u(L(he(e,i?.signal)),t,n,r,{serviceTier:i?.serviceTier,resolveServiceTier:N,applyServiceTierPricing:(e,t)=>M(e,t,r)})}var F=class extends Error{code;payload;constructor(e,t){super(e),this.name=`CodexApiError`,this.code=t?.code,this.payload=t?.payload,this.cause=t?.cause}},I=class extends Error{payload;constructor(e,t){super(e),this.name=`CodexProtocolError`,this.payload=t?.payload,this.cause=t?.cause}};function de(e){return e instanceof F||e instanceof I}function fe(e){return e instanceof F&&e.code===`websocket_connection_limit_reached`}function pe(e){let t=e.error&&typeof e.error==`object`?e.error:void 0;return{code:typeof e.code==`string`?e.code:typeof t?.code==`string`?t.code:void 0,message:typeof e.message==`string`?e.message:typeof t?.message==`string`?t.message:void 0}}async function*L(e){for await(let t of e){let e=typeof t.type==`string`?t.type:void 0;if(e){if(e===`error`){let{code:e,message:n}=pe(t);throw new F(`Codex error: ${n||e||JSON.stringify(t)}`,{code:e,payload:t})}if(e===`response.failed`){let e=t.response,n=e?.error?.code,r=e?.error?.message;throw new F(r||`Codex response failed`,{code:n,payload:t})}if(e===`response.done`||e===`response.completed`||e===`response.incomplete`){let e=t.response,n=e&&{...e,status:me(e.status)};yield{...t,type:`response.completed`,response:n};return}yield t}}}function me(e){if(typeof e==`string`)return O.has(e)?e:void 0}async function*he(e,t){if(!e.body)return;let n=e.body.getReader(),r=new TextDecoder,i=``,a=()=>{n.cancel().catch(()=>{})};t?.addEventListener(`abort`,a,{once:!0});try{for(;;){if(t?.aborted)throw Error(`Request was aborted`);let{done:e,value:a}=await n.read();if(t?.aborted)throw Error(`Request was aborted`);if(e)break;i+=r.decode(a,{stream:!0});let o=i.indexOf(`
3
+
4
+ `);for(;o!==-1;){let e=i.slice(0,o);i=i.slice(o+2);let t=e.split(`
5
+ `).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trim());if(t.length>0){let e=t.join(`
6
+ `).trim();if(e&&e!==`[DONE]`)try{yield JSON.parse(e)}catch(t){throw new I(`Invalid Codex SSE JSON: ${p(t)}`,{cause:t,payload:e})}}o=i.indexOf(`
7
+
8
+ `)}}}finally{t?.removeEventListener(`abort`,a);try{await n.cancel()}catch{}try{n.releaseLock()}catch{}}}const R=new Map,z=new Map,B=new Set;function V(e){let t=z.get(e);return t||(t={requests:0,connectionsCreated:0,connectionsReused:0,cachedContextRequests:0,storeTrueRequests:0,fullContextRequests:0,deltaRequests:0,lastInputItems:0,websocketFailures:0,sseFallbacks:0},z.set(e,t)),t}function ge(e){let t=z.get(e);return t?{...t}:void 0}function _e(e){if(e){z.delete(e),B.delete(e);return}z.clear(),B.clear()}function H(e){let t=e=>{e.idleTimer&&clearTimeout(e.idleTimer),q(e.socket,1e3,`debug_close`)};if(e){let n=R.get(e);n&&t(n),R.delete(e);return}for(let e of R.values())t(e);R.clear()}g(H);function U(e){return e?B.has(e):!1}function W(e){if(!e)return;let t=V(e);t.sseFallbacks++,t.websocketFallbackActive=U(e)}function ve(e,t){if(!e)return;B.add(e);let n=V(e);n.websocketFailures++,n.lastWebSocketError=p(t),n.websocketFallbackActive=!0}let G=null;async function ye(e){if(!e&&G)return G;if(typeof process<`u`&&process.versions?.bun){let t=class extends WebSocket{constructor(t,n){let r={};r=Array.isArray(n)||typeof n==`string`?{protocols:n}:{...n};let i=C(t.toString().replace(/^wss:/,`https:`).replace(/^ws:/,`http:`),e);super(t,{...r,...i?{proxy:i.toString()}:{}})}};return e||(G=t),t}let t=globalThis.WebSocket;return typeof t==`function`?t:null}var be=class extends Error{code;reason;wasClean;constructor(e,t){super(e),this.name=`WebSocketCloseError`,this.code=t?.code,this.reason=t?.reason,this.wasClean=t?.wasClean}};function xe(e){let t=e.readyState;return typeof t==`number`?t:void 0}function K(e){let t=xe(e);return t===void 0||t===1}function Se(e){return Date.now()-e.createdAt>=33e5}function q(e,t=1e3,n=`done`){try{e.close(t,n)}catch{}}function J(e,t){t.idleTimer&&clearTimeout(t.idleTimer),t.idleTimer=setTimeout(()=>{t.busy||(q(t.socket,1e3,`idle_timeout`),R.delete(e))},3e5)}async function Y(e,t,n,i=15e3,a){let o=await ye(a);if(!o)throw Error(`WebSocket transport is not available in this runtime`);let s=r(t);return delete s[`OpenAI-Beta`],new Promise((t,r)=>{let a=!1,c,l;try{l=new o(e,{headers:s})}catch(e){r(e instanceof Error?e:Error(String(e)));return}let u=()=>{c&&=(clearTimeout(c),void 0),l.removeEventListener(`open`,f),l.removeEventListener(`error`,p),l.removeEventListener(`close`,m),n?.removeEventListener(`abort`,h)},d=(e,t)=>{a||(a=!0,u(),t&&q(l,1e3,t),r(e))},f=()=>{a||(a=!0,u(),t(l))},p=e=>{d(X(e))},m=e=>{d(Z(e))},h=()=>{d(Error(`Request was aborted`),`aborted`)};l.addEventListener(`open`,f),l.addEventListener(`error`,p),l.addEventListener(`close`,m),n?.addEventListener(`abort`,h),i>0&&(c=setTimeout(()=>{d(Error(`WebSocket connect timeout after ${i}ms`),`connect_timeout`)},i)),n?.aborted&&h()})}async function Ce(e,t,n,r,i,a){if(!n){let n=await Y(e,t,r,i,a);return{socket:n,reused:!1,release:()=>q(n)}}let o=R.get(n);if(o){if(o.idleTimer&&=(clearTimeout(o.idleTimer),void 0),!o.busy&&Se(o))q(o.socket,1e3,`connection_age_limit`),R.delete(n);else if(!o.busy&&K(o.socket))return o.busy=!0,{socket:o.socket,entry:o,reused:!0,release:({keep:e}={})=>{if(!e||!K(o.socket)){q(o.socket),R.delete(n);return}o.busy=!1,J(n,o)}};if(o.busy){let n=await Y(e,t,r,i,a);return{socket:n,reused:!1,release:()=>{q(n)}}}K(o.socket)||(q(o.socket),R.delete(n))}let s=await Y(e,t,r,i,a),c={socket:s,busy:!0,createdAt:Date.now()};return R.set(n,c),{socket:s,entry:c,reused:!1,release:({keep:e}={})=>{if(!e||!K(c.socket)){q(c.socket),c.idleTimer&&clearTimeout(c.idleTimer),R.get(n)===c&&R.delete(n);return}c.busy=!1,J(n,c)}}}function X(e){if(e&&typeof e==`object`){let t=`message`in e?e.message:void 0;if(typeof t==`string`&&t.length>0)return Error(t);let n=`error`in e?e.error:void 0;if(n instanceof Error&&n.message.length>0)return n;if(n&&typeof n==`object`&&`message`in n){let e=n.message;if(typeof e==`string`&&e.length>0)return Error(e)}}return Error(`WebSocket error`)}function Z(e){if(e&&typeof e==`object`){let t=`code`in e?e.code:void 0,n=`reason`in e?e.reason:void 0,r=`wasClean`in e?e.wasClean:void 0,i=typeof t==`number`?` ${t}`:``,a=typeof n==`string`&&n.length>0?` ${n}`:``;return!a&&t===1009&&(a=` message too big`),new be(`WebSocket closed${i}${a}`.trim(),{code:typeof t==`number`?t:void 0,reason:typeof n==`string`&&n.length>0?n:void 0,wasClean:typeof r==`boolean`?r:void 0})}return Error(`WebSocket closed`)}async function we(e){if(typeof e==`string`)return e;if(e instanceof ArrayBuffer)return new TextDecoder().decode(new Uint8Array(e));if(ArrayBuffer.isView(e)){let t=e;return new TextDecoder().decode(new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}if(e&&typeof e==`object`&&`arrayBuffer`in e){let t=await e.arrayBuffer();return new TextDecoder().decode(new Uint8Array(t))}return null}async function*Te(e,t,n){let r=[],i=null,a=!1,o=null,s=!1,c=()=>{if(!i)return;let e=i;i=null,e()},l=e=>{(async()=>{let t=null;try{if(!e||typeof e!=`object`||!(`data`in e)||(t=await we(e.data),!t))return;let n=JSON.parse(t),i=typeof n.type==`string`?n.type:``;(i===`response.completed`||i===`response.done`||i===`response.incomplete`)&&(s=!0,a=!0),r.push(n),c()}catch(e){o=new I(`Invalid Codex WebSocket JSON: ${p(e)}`,{cause:e,payload:t}),a=!0,c()}})()},u=e=>{o=X(e),a=!0,c()},d=e=>{if(s){a=!0,c();return}o||=Z(e),a=!0,c()},f=()=>{o=Error(`Request was aborted`),a=!0,c()};e.addEventListener(`message`,l),e.addEventListener(`error`,u),e.addEventListener(`close`,d),t?.addEventListener(`abort`,f);try{for(;;){if(t?.aborted)throw Error(`Request was aborted`);if(r.length>0){yield r.shift();continue}if(a)break;let s;await new Promise((t,r)=>{i=t,n!==void 0&&n>0&&(s=setTimeout(()=>{let t=Error(`WebSocket idle timeout after ${n}ms`);o=t,a=!0,i=null,q(e,1e3,`idle_timeout`),r(t)},n))}).finally(()=>{s&&clearTimeout(s)})}if(o)throw o;if(!s)throw Error(`WebSocket stream closed before response.completed`)}finally{e.removeEventListener(`message`,l),e.removeEventListener(`error`,u),e.removeEventListener(`close`,d),t?.removeEventListener(`abort`,f)}}function Q(e){let{input:t,previous_response_id:n,...r}=e;return r}function Ee(e,t){return JSON.stringify(e??[])===JSON.stringify(t??[])}function De(e,t){return JSON.stringify(Q(e))===JSON.stringify(Q(t))}function Oe(e,t){if(!De(e,t.lastRequestBody))return;let n=e.input??[],r=[...t.lastRequestBody.input??[],...t.lastResponseItems];if(!(n.length<r.length)&&Ee(n.slice(0,r.length),r))return n.slice(r.length)}function ke(e,t){let n=e.continuation;if(!n)return t;let r=Oe(t,n);return!r||!n.lastResponseId?(e.continuation=void 0,t):{...t,previous_response_id:n.lastResponseId,input:r}}async function*Ae(e,t,n,r){let i=!1;for await(let a of e)i||(i=!0,r(),n.push({type:`start`,partial:t})),yield a}async function je(e,t,n,r,i,a,o,s,c,l){let{socket:f,entry:p,reused:m,release:h}=await Ce(e,n,l?.sessionId,l?.signal,c,l?.env),g=!0,_=l?.transport===`websocket-cached`||l?.transport===`auto`,v=t,y=_&&p?ke(p,v):v,b=l?.sessionId?V(l.sessionId):void 0;b&&(b.requests++,m?b.connectionsReused++:b.connectionsCreated++,_&&b.cachedContextRequests++,y.store===!0&&b.storeTrueRequests++,b.lastInputItems=y.input?.length??0,y.previous_response_id?(b.deltaRequests++,b.lastDeltaInputItems=y.input?.length??0,b.lastPreviousResponseId=y.previous_response_id):(b.fullContextRequests++,b.lastDeltaInputItems=void 0,b.lastPreviousResponseId=void 0));try{if(f.send(JSON.stringify({type:`response.create`,...y})),await u(Ae(L(Te(f,l?.signal,s)),r,i,o),r,i,a,{serviceTier:l?.serviceTier,resolveServiceTier:N,applyServiceTierPricing:(e,t)=>M(e,t,a)}),l?.signal?.aborted)g=!1;else if(_&&p&&r.responseId){let e=d(a,{messages:[r]},D,{includeSystemPrompt:!1}).filter(e=>e.type!==`function_call_output`);p.continuation={lastRequestBody:v,lastResponseId:r.responseId,lastResponseItems:e}}}catch(e){throw p&&(p.continuation=void 0),g=!1,e}finally{h({keep:g})}}async function Me(e){let t=await e.text(),n=t||e.statusText||`Request failed`,r;try{let i=JSON.parse(t)?.error;if(i){let t=i.code||i.type||``;if(/usage_limit_reached|usage_not_included|rate_limit_exceeded/i.test(t)||e.status===429){let e=i.plan_type?` (${i.plan_type.toLowerCase()} plan)`:``,t=i.resets_at?Math.max(0,Math.round((i.resets_at*1e3-Date.now())/6e4)):void 0;r=`You have hit your ChatGPT usage limit${e}.${t===void 0?``:` Try again in ~${t} min.`}`.trim()}n=i.message||r||n}}catch{}return{message:n,friendlyMessage:r}}function Ne(e){try{let t=e.split(`.`);if(t.length!==3)throw Error(`Invalid token`);let n=JSON.parse(atob(t[1]))?.[`https://api.openai.com/auth`]?.chatgpt_account_id;if(!n)throw Error(`No account ID in token`);return n}catch{throw Error(`Failed to extract accountId from token`)}}function Pe(){return typeof globalThis.crypto?.randomUUID==`function`?globalThis.crypto.randomUUID():`codex_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}function $(e,t,n,r){let i=new Headers(e);for(let[e,n]of Object.entries(t||{}))n===null?i.delete(e):i.set(e,n);i.set(`Authorization`,`Bearer ${r}`),i.set(`chatgpt-account-id`,n),i.set(`originator`,`pi`);let a=T?`pi (${T.platform()} ${T.release()}; ${T.arch()})`:`pi (browser)`;return i.set(`User-Agent`,a),i}function Fe(e,t,n,r,i){let a=$(e,t,n,r);return a.set(`OpenAI-Beta`,`responses=experimental`),a.set(`accept`,`text/event-stream`),a.set(`content-type`,`application/json`),i&&(a.set(`session-id`,i),a.set(`x-client-request-id`,i)),a}function Ie(e,t,n,r,i){let a=$(e,t,n,r);return a.delete(`accept`),a.delete(`content-type`),a.delete(`OpenAI-Beta`),a.delete(`openai-beta`),a.set(`OpenAI-Beta`,`responses_websockets=2026-02-06`),a.set(`x-client-request-id`,i),a.set(`session-id`,i),a}export{H as closeOpenAICodexWebSocketSessions,ge as getOpenAICodexWebSocketDebugStats,_e as resetOpenAICodexWebSocketDebugStats,j as stream,oe as streamSimple};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./event-stream-CXocIcc6.mjs";import{n as t}from"./models-bnt621e8.mjs";import{t as n}from"./provider-env-p-MKZrBX.mjs";import{n as r}from"./session-resources-SNa1tEPO.mjs";import{i,n as a,t as o}from"./diagnostics-D0oRYjyK.mjs";import"./json-parse-CoJ2PRW2.mjs";import{t as s}from"./deferred-tools-DowE4eb1.mjs";import{t as c}from"./headers-8nMK0zm-.mjs";import{r as l}from"./transform-messages-C0FNxyyM.mjs";import{n as u,t as d}from"./error-body-RPMBLEAJ.mjs";import{t as f}from"./openai-prompt-cache-ChV-9Dro.mjs";import{n as p,r as m,t as h}from"./openai-responses-shared-Nr5Yi_N5.mjs";function g(e){let t=e.filter(e=>e!==void 0);if(t.length===0)return{cleanup:()=>{}};if(t.length===1)return{signal:t[0],cleanup:()=>{}};let n=new AbortController,r=[],i=e=>{n.signal.aborted||n.abort(e.reason)};for(let e of t){if(e.aborted){i(e);break}let t=()=>i(e);e.addEventListener(`abort`,t,{once:!0}),r.push({signal:e,listener:t})}return{signal:n.signal,cleanup:()=>{for(let{signal:e,listener:t}of r)e.removeEventListener(`abort`,t)}}}const _={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443};function v(e,t){let r=e.toLowerCase(),i=e.toUpperCase();return t?.[r]||t?.[i]||n(r)||n(i)||``}function y(e){if(e instanceof URL)return e;try{return new URL(e)}catch{return}}function b(e,t,n){let r=v(`no_proxy`,n).toLowerCase();return r?r===`*`?!1:r.split(/[,\s]/).every(n=>{if(!n)return!0;let r=n.match(/^(.+):(\d+)$/),i=r?r[1]:n,a=r?Number.parseInt(r[2],10):0;return a&&a!==t?!0:/^[.*]/.test(i)?(i.startsWith(`*`)&&(i=i.slice(1)),!e.endsWith(i)):e!==i}):!0}function x(e,t){let n=y(e);if(!n?.protocol||!n.host)return``;let r=n.protocol.split(`:`,1)[0];if(!b(n.host.replace(/:\d*$/,``),Number.parseInt(n.port,10)||_[r]||0,t))return``;let i=v(`${r}_proxy`,t)||v(`all_proxy`,t);return i&&!i.includes(`://`)&&(i=`${r}://${i}`),i}function S(e,t){let n=x(e,t);if(!n)return;let r;try{r=new URL(n)}catch(e){throw Error(`Invalid proxy URL ${JSON.stringify(n)}: ${e instanceof Error?e.message:String(e)}`)}if(r.protocol!==`http:`&&r.protocol!==`https:`)throw Error(`Unsupported proxy protocol. SOCKS and PAC proxy URLs are not supported; use an HTTP or HTTPS proxy URL. Got ${r.protocol}`);return r}function C(){return typeof process>`u`||!(process.versions?.node||process.versions?.bun)?null:process.getBuiltinModule?.(`node:os`)??null}const w=C(),T=1e3,E=new Set([`openai`,`openai-codex`,`opencode`]),D=new Set([`completed`,`incomplete`,`failed`,`cancelled`,`queued`,`in_progress`]);function O(e){return/GoUsageLimitError|FreeUsageLimitError|Monthly usage limit reached|available balance|insufficient_quota|out of budget|quota exceeded|billing/i.test(e)}function ee(e,t){return e===429&&O(t)?!1:e===429||e===500||e===502||e===503||e===504?!0:/rate.?limit|overloaded|service.?unavailable|upstream.?connect|connection.?refused/i.test(t)}function te(e){let t=e.get(`retry-after-ms`);if(t!==null){let e=Number(t);if(Number.isFinite(e))return Math.max(0,e)}let n=e.get(`retry-after`);if(!n)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r*1e3);let i=Date.parse(n);if(!Number.isNaN(i))return Math.max(0,i-Date.now())}function ne(e,t){let n=t?.maxRetryDelayMs??6e4;return n>0?Math.min(e,n):e}function k(e,t){return new Promise((n,r)=>{if(t?.aborted){r(Error(`Request was aborted`));return}let i=setTimeout(n,e);t?.addEventListener(`abort`,()=>{clearTimeout(i),r(Error(`Request was aborted`))})})}function A(e){if(e!==void 0){if(!Number.isFinite(e)||e<0)throw Error(`Invalid timeoutMs: ${String(e)}`);return Math.floor(e)}}function re(){return typeof process>`u`||!(process.versions?.node||process.versions?.bun)?null:process.getBuiltinModule?.(`node:zlib`)??null}function ie(e){let t=re();if(!t||typeof t.zstdCompressSync!=`function`)return null;try{let n=t.zstdCompressSync(e,{params:{[t.constants.ZSTD_c_compressionLevel]:3}});return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}catch{return null}}const j=(t,n,r)=>{let i=new e;return(async()=>{let e={role:`assistant`,content:[],api:`openai-codex-responses`,provider:t.provider,model:t.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let s=r?.apiKey;if(!s)throw Error(`No API key for provider: ${t.provider}`);let l=Me(s),u=oe(t,n,r),d=await r?.onPayload?.(u,t);d!==void 0&&(u=d);let p=f(r?.sessionId),m=p||Ne(),h=Pe(t.headers,r?.headers,l,s,p),_=Fe(t.headers,r?.headers,l,s,m),v=JSON.stringify(u),y=A(r?.timeoutMs),b=A(r?.websocketConnectTimeoutMs),x=r?.transport||`auto`,S=x!==`sse`&&U(r?.sessionId);if(S&&W(r?.sessionId),x!==`sse`&&!S){let n=!1,s=!1;for(;;){n=!1;try{if(await Ae(ce(t.baseUrl),u,_,e,i,t,()=>{n=!0},y,b,r),r?.signal?.aborted)throw Error(`Request was aborted`);i.push({type:`done`,reason:e.stopReason,message:e}),i.end();return}catch(t){let i=r?.signal?.aborted,c=!n&&de(t);if(!i&&c&&!s){s=!0;continue}if(i||ue(t)&&!c||(o(e,a(`provider_transport_failure`,t,{configuredTransport:x,fallbackTransport:n?void 0:`sse`,eventsEmitted:n,phase:n?`after_message_stream_start`:`before_message_stream_start`,requestBytes:new TextEncoder().encode(v).byteLength})),_e(r?.sessionId,t),n))throw t;W(r?.sessionId);break}}}let C=ie(v);C&&h.set(`content-encoding`,`zstd`);let w=C??v,E,D,O=r?.maxRetries??0;for(let e=0;e<=O;e++){if(r?.signal?.aborted)throw Error(`Request was aborted`);try{let n=y!==void 0&&y>0?AbortSignal.timeout(y):void 0,i=g([r?.signal,n]);try{E=await fetch(P(t.baseUrl),{method:`POST`,headers:h,body:w,signal:i.signal})}catch(e){throw n?.aborted&&!r?.signal?.aborted?Error(`Codex SSE response headers timed out after ${y}ms`):e}finally{i.cleanup()}if(await r?.onResponse?.({status:E.status,headers:c(E.headers)},t),E.ok)break;let a=await E.text();if(e<O&&ee(E.status,a)){let t=te(E.headers);await k(t===void 0?T*2**e:E.status===429?ne(t,r):t,r?.signal);continue}let o=await je(new Response(a,{status:E.status,statusText:E.statusText}));throw Error(o.friendlyMessage||o.message)}catch(t){if(t instanceof Error&&(t.name===`AbortError`||t.message===`Request was aborted`))throw Error(`Request was aborted`);if(D=t instanceof Error?t:Error(String(t)),e<O&&!D.message.includes(`usage limit`)){await k(T*2**e,r?.signal);continue}throw D}}if(!E?.ok)throw D??Error(`Failed after retries`);if(!E.body)throw Error(`No response body`);if(i.push({type:`start`,partial:e}),await le(E,e,i,t,r),r?.signal?.aborted)throw Error(`Request was aborted`);i.push({type:`done`,reason:e.stopReason,message:e}),i.end()}catch(t){for(let t of e.content)delete t.partialJson;e.stopReason=r?.signal?.aborted?`aborted`:`error`,e.errorMessage=d(u(t)),i.push({type:`error`,reason:e.stopReason,error:e}),i.end()}})(),i},ae=(e,n,r)=>{let i=r?.apiKey;if(!i)throw Error(`No API key for provider: ${e.provider}`);let a=l(e,n,r,i),o=r?.reasoning?t(e,r.reasoning):void 0,s=o===`off`?void 0:o;return j(e,n,{...a,reasoningEffort:s})};function oe(e,t,n){let r=s(t,e.compat?.supportsToolSearch??!1),i=h(e,t,E,{includeSystemPrompt:!1,deferredTools:r.deferred}),a={model:e.id,store:!1,stream:!0,instructions:t.systemPrompt||`You are a helpful assistant.`,input:i,text:{verbosity:n?.textVerbosity||`low`},include:[`reasoning.encrypted_content`],prompt_cache_key:f(n?.sessionId),tool_choice:n?.toolChoice??`auto`,parallel_tool_calls:!0};if(n?.temperature!==void 0&&(a.temperature=n.temperature),n?.serviceTier!==void 0&&(a.service_tier=n.serviceTier),r.immediate.length>0&&(a.tools=p(r.immediate,{strict:null})),n?.reasoningEffort!==void 0){let t=n.reasoningEffort===`none`?e.thinkingLevelMap?.off??`none`:e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort;t!==null&&(a.reasoning={effort:t,summary:n.reasoningSummary??`auto`})}return a}function se(e,t){switch(t){case`flex`:return .5;case`priority`:return e.id===`gpt-5.5`?2.5:2;default:return 1}}function M(e,t,n){let r=se(n,t);r!==1&&(e.cost.input*=r,e.cost.output*=r,e.cost.cacheRead*=r,e.cost.cacheWrite*=r,e.cost.total=e.cost.input+e.cost.output+e.cost.cacheRead+e.cost.cacheWrite)}function N(e,t){return e===`default`&&(t===`flex`||t===`priority`)?t:e??t}function P(e){let t=(e&&e.trim().length>0?e:`https://chatgpt.com/backend-api`).replace(/\/+$/,``);return t.endsWith(`/codex/responses`)?t:t.endsWith(`/codex`)?`${t}/responses`:`${t}/codex/responses`}function ce(e){let t=new URL(P(e));return t.protocol===`https:`&&(t.protocol=`wss:`),t.protocol===`http:`&&(t.protocol=`ws:`),t.toString()}async function le(e,t,n,r,i){await m(L(me(e,i?.signal)),t,n,r,{serviceTier:i?.serviceTier,resolveServiceTier:N,applyServiceTierPricing:(e,t)=>M(e,t,r)})}var F=class extends Error{code;payload;constructor(e,t){super(e),this.name=`CodexApiError`,this.code=t?.code,this.payload=t?.payload,this.cause=t?.cause}},I=class extends Error{payload;constructor(e,t){super(e),this.name=`CodexProtocolError`,this.payload=t?.payload,this.cause=t?.cause}};function ue(e){return e instanceof F||e instanceof I}function de(e){return e instanceof F&&e.code===`websocket_connection_limit_reached`}function fe(e){let t=e.error&&typeof e.error==`object`?e.error:void 0;return{code:typeof e.code==`string`?e.code:typeof t?.code==`string`?t.code:void 0,message:typeof e.message==`string`?e.message:typeof t?.message==`string`?t.message:void 0}}async function*L(e){for await(let t of e){let e=typeof t.type==`string`?t.type:void 0;if(e){if(e===`error`){let{code:e,message:n}=fe(t);throw new F(`Codex error: ${n||e||JSON.stringify(t)}`,{code:e,payload:t})}if(e===`response.failed`){let e=t.response,n=e?.error?.code,r=e?.error?.message;throw new F(r||`Codex response failed`,{code:n,payload:t})}if(e===`response.done`||e===`response.completed`||e===`response.incomplete`){let e=t.response,n=e&&{...e,status:pe(e.status)};yield{...t,type:`response.completed`,response:n};return}yield t}}}function pe(e){if(typeof e==`string`)return D.has(e)?e:void 0}async function*me(e,t){if(!e.body)return;let n=e.body.getReader(),r=new TextDecoder,a=``,o=()=>{n.cancel().catch(()=>{})};t?.addEventListener(`abort`,o,{once:!0});try{for(;;){if(t?.aborted)throw Error(`Request was aborted`);let{done:e,value:o}=await n.read();if(t?.aborted)throw Error(`Request was aborted`);if(e)break;a+=r.decode(o,{stream:!0});let s=a.indexOf(`
3
+
4
+ `);for(;s!==-1;){let e=a.slice(0,s);a=a.slice(s+2);let t=e.split(`
5
+ `).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trim());if(t.length>0){let e=t.join(`
6
+ `).trim();if(e&&e!==`[DONE]`)try{yield JSON.parse(e)}catch(t){throw new I(`Invalid Codex SSE JSON: ${i(t)}`,{cause:t,payload:e})}}s=a.indexOf(`
7
+
8
+ `)}}}finally{t?.removeEventListener(`abort`,o);try{await n.cancel()}catch{}try{n.releaseLock()}catch{}}}const R=new Map,z=new Map,B=new Set;function V(e){let t=z.get(e);return t||(t={requests:0,connectionsCreated:0,connectionsReused:0,cachedContextRequests:0,storeTrueRequests:0,fullContextRequests:0,deltaRequests:0,lastInputItems:0,websocketFailures:0,sseFallbacks:0},z.set(e,t)),t}function he(e){let t=z.get(e);return t?{...t}:void 0}function ge(e){if(e){z.delete(e),B.delete(e);return}z.clear(),B.clear()}function H(e){let t=e=>{e.idleTimer&&clearTimeout(e.idleTimer),q(e.socket,1e3,`debug_close`)};if(e){let n=R.get(e);n&&t(n),R.delete(e);return}for(let e of R.values())t(e);R.clear()}r(H);function U(e){return e?B.has(e):!1}function W(e){if(!e)return;let t=V(e);t.sseFallbacks++,t.websocketFallbackActive=U(e)}function _e(e,t){if(!e)return;B.add(e);let n=V(e);n.websocketFailures++,n.lastWebSocketError=i(t),n.websocketFallbackActive=!0}let G=null;async function ve(e){if(!e&&G)return G;if(typeof process<`u`&&process.versions?.bun){let t=class extends WebSocket{constructor(t,n){let r={};r=Array.isArray(n)||typeof n==`string`?{protocols:n}:{...n};let i=S(t.toString().replace(/^wss:/,`https:`).replace(/^ws:/,`http:`),e);super(t,{...r,...i?{proxy:i.toString()}:{}})}};return e||(G=t),t}let t=globalThis.WebSocket;return typeof t==`function`?t:null}var ye=class extends Error{code;reason;wasClean;constructor(e,t){super(e),this.name=`WebSocketCloseError`,this.code=t?.code,this.reason=t?.reason,this.wasClean=t?.wasClean}};function be(e){let t=e.readyState;return typeof t==`number`?t:void 0}function K(e){let t=be(e);return t===void 0||t===1}function xe(e){return Date.now()-e.createdAt>=33e5}function q(e,t=1e3,n=`done`){try{e.close(t,n)}catch{}}function J(e,t){t.idleTimer&&clearTimeout(t.idleTimer),t.idleTimer=setTimeout(()=>{t.busy||(q(t.socket,1e3,`idle_timeout`),R.delete(e))},3e5)}async function Y(e,t,n,r=15e3,i){let a=await ve(i);if(!a)throw Error(`WebSocket transport is not available in this runtime`);let o=c(t);return delete o[`OpenAI-Beta`],new Promise((t,i)=>{let s=!1,c,l;try{l=new a(e,{headers:o})}catch(e){i(e instanceof Error?e:Error(String(e)));return}let u=()=>{c&&=(clearTimeout(c),void 0),l.removeEventListener(`open`,f),l.removeEventListener(`error`,p),l.removeEventListener(`close`,m),n?.removeEventListener(`abort`,h)},d=(e,t)=>{s||(s=!0,u(),t&&q(l,1e3,t),i(e))},f=()=>{s||(s=!0,u(),t(l))},p=e=>{d(X(e))},m=e=>{d(Z(e))},h=()=>{d(Error(`Request was aborted`),`aborted`)};l.addEventListener(`open`,f),l.addEventListener(`error`,p),l.addEventListener(`close`,m),n?.addEventListener(`abort`,h),r>0&&(c=setTimeout(()=>{d(Error(`WebSocket connect timeout after ${r}ms`),`connect_timeout`)},r)),n?.aborted&&h()})}async function Se(e,t,n,r,i,a){if(!n){let n=await Y(e,t,r,i,a);return{socket:n,reused:!1,release:()=>q(n)}}let o=R.get(n);if(o){if(o.idleTimer&&=(clearTimeout(o.idleTimer),void 0),!o.busy&&xe(o))q(o.socket,1e3,`connection_age_limit`),R.delete(n);else if(!o.busy&&K(o.socket))return o.busy=!0,{socket:o.socket,entry:o,reused:!0,release:({keep:e}={})=>{if(!e||!K(o.socket)){q(o.socket),R.delete(n);return}o.busy=!1,J(n,o)}};if(o.busy){let n=await Y(e,t,r,i,a);return{socket:n,reused:!1,release:()=>{q(n)}}}K(o.socket)||(q(o.socket),R.delete(n))}let s=await Y(e,t,r,i,a),c={socket:s,busy:!0,createdAt:Date.now()};return R.set(n,c),{socket:s,entry:c,reused:!1,release:({keep:e}={})=>{if(!e||!K(c.socket)){q(c.socket),c.idleTimer&&clearTimeout(c.idleTimer),R.get(n)===c&&R.delete(n);return}c.busy=!1,J(n,c)}}}function X(e){if(e&&typeof e==`object`){let t=`message`in e?e.message:void 0;if(typeof t==`string`&&t.length>0)return Error(t);let n=`error`in e?e.error:void 0;if(n instanceof Error&&n.message.length>0)return n;if(n&&typeof n==`object`&&`message`in n){let e=n.message;if(typeof e==`string`&&e.length>0)return Error(e)}}return Error(`WebSocket error`)}function Z(e){if(e&&typeof e==`object`){let t=`code`in e?e.code:void 0,n=`reason`in e?e.reason:void 0,r=`wasClean`in e?e.wasClean:void 0,i=typeof t==`number`?` ${t}`:``,a=typeof n==`string`&&n.length>0?` ${n}`:``;return!a&&t===1009&&(a=` message too big`),new ye(`WebSocket closed${i}${a}`.trim(),{code:typeof t==`number`?t:void 0,reason:typeof n==`string`&&n.length>0?n:void 0,wasClean:typeof r==`boolean`?r:void 0})}return Error(`WebSocket closed`)}async function Ce(e){if(typeof e==`string`)return e;if(e instanceof ArrayBuffer)return new TextDecoder().decode(new Uint8Array(e));if(ArrayBuffer.isView(e)){let t=e;return new TextDecoder().decode(new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}if(e&&typeof e==`object`&&`arrayBuffer`in e){let t=await e.arrayBuffer();return new TextDecoder().decode(new Uint8Array(t))}return null}async function*we(e,t,n){let r=[],a=null,o=!1,s=null,c=!1,l=()=>{if(!a)return;let e=a;a=null,e()},u=e=>{(async()=>{let t=null;try{if(!e||typeof e!=`object`||!(`data`in e)||(t=await Ce(e.data),!t))return;let n=JSON.parse(t),i=typeof n.type==`string`?n.type:``;(i===`response.completed`||i===`response.done`||i===`response.incomplete`)&&(c=!0,o=!0),r.push(n),l()}catch(e){s=new I(`Invalid Codex WebSocket JSON: ${i(e)}`,{cause:e,payload:t}),o=!0,l()}})()},d=e=>{s=X(e),o=!0,l()},f=e=>{if(c){o=!0,l();return}s||=Z(e),o=!0,l()},p=()=>{s=Error(`Request was aborted`),o=!0,l()};e.addEventListener(`message`,u),e.addEventListener(`error`,d),e.addEventListener(`close`,f),t?.addEventListener(`abort`,p);try{for(;;){if(t?.aborted)throw Error(`Request was aborted`);if(r.length>0){yield r.shift();continue}if(o)break;let i;await new Promise((t,r)=>{a=t,n!==void 0&&n>0&&(i=setTimeout(()=>{let t=Error(`WebSocket idle timeout after ${n}ms`);s=t,o=!0,a=null,q(e,1e3,`idle_timeout`),r(t)},n))}).finally(()=>{i&&clearTimeout(i)})}if(s)throw s;if(!c)throw Error(`WebSocket stream closed before response.completed`)}finally{e.removeEventListener(`message`,u),e.removeEventListener(`error`,d),e.removeEventListener(`close`,f),t?.removeEventListener(`abort`,p)}}function Q(e){let{input:t,previous_response_id:n,...r}=e;return r}function Te(e,t){return JSON.stringify(e??[])===JSON.stringify(t??[])}function Ee(e,t){return JSON.stringify(Q(e))===JSON.stringify(Q(t))}function De(e,t){if(!Ee(e,t.lastRequestBody))return;let n=e.input??[],r=[...t.lastRequestBody.input??[],...t.lastResponseItems];if(!(n.length<r.length)&&Te(n.slice(0,r.length),r))return n.slice(r.length)}function Oe(e,t){let n=e.continuation;if(!n)return t;let r=De(t,n);return!r||!n.lastResponseId?(e.continuation=void 0,t):{...t,previous_response_id:n.lastResponseId,input:r}}async function*ke(e,t,n,r){let i=!1;for await(let a of e)i||(i=!0,r(),n.push({type:`start`,partial:t})),yield a}async function Ae(e,t,n,r,i,a,o,s,c,l){let{socket:u,entry:d,reused:f,release:p}=await Se(e,n,l?.sessionId,l?.signal,c,l?.env),g=!0,_=l?.transport===`websocket-cached`||l?.transport===`auto`,v=t,y=_&&d?Oe(d,v):v,b=l?.sessionId?V(l.sessionId):void 0;b&&(b.requests++,f?b.connectionsReused++:b.connectionsCreated++,_&&b.cachedContextRequests++,y.store===!0&&b.storeTrueRequests++,b.lastInputItems=y.input?.length??0,y.previous_response_id?(b.deltaRequests++,b.lastDeltaInputItems=y.input?.length??0,b.lastPreviousResponseId=y.previous_response_id):(b.fullContextRequests++,b.lastDeltaInputItems=void 0,b.lastPreviousResponseId=void 0));try{if(u.send(JSON.stringify({type:`response.create`,...y})),await m(ke(L(we(u,l?.signal,s)),r,i,o),r,i,a,{serviceTier:l?.serviceTier,resolveServiceTier:N,applyServiceTierPricing:(e,t)=>M(e,t,a)}),l?.signal?.aborted)g=!1;else if(_&&d&&r.responseId){let e=h(a,{messages:[r]},E,{includeSystemPrompt:!1}).filter(e=>e.type!==`function_call_output`);d.continuation={lastRequestBody:v,lastResponseId:r.responseId,lastResponseItems:e}}}catch(e){throw d&&(d.continuation=void 0),g=!1,e}finally{p({keep:g})}}async function je(e){let t=await e.text(),n=t||e.statusText||`Request failed`,r;try{let i=JSON.parse(t)?.error;if(i){let t=i.code||i.type||``;if(/usage_limit_reached|usage_not_included|rate_limit_exceeded/i.test(t)||e.status===429){let e=i.plan_type?` (${i.plan_type.toLowerCase()} plan)`:``,t=i.resets_at?Math.max(0,Math.round((i.resets_at*1e3-Date.now())/6e4)):void 0;r=`You have hit your ChatGPT usage limit${e}.${t===void 0?``:` Try again in ~${t} min.`}`.trim()}n=i.message||r||n}}catch{}return{message:n,friendlyMessage:r}}function Me(e){try{let t=e.split(`.`);if(t.length!==3)throw Error(`Invalid token`);let n=JSON.parse(atob(t[1]))?.[`https://api.openai.com/auth`]?.chatgpt_account_id;if(!n)throw Error(`No account ID in token`);return n}catch{throw Error(`Failed to extract accountId from token`)}}function Ne(){return typeof globalThis.crypto?.randomUUID==`function`?globalThis.crypto.randomUUID():`codex_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}function $(e,t,n,r){let i=new Headers(e);for(let[e,n]of Object.entries(t||{}))n===null?i.delete(e):i.set(e,n);i.set(`Authorization`,`Bearer ${r}`),i.set(`chatgpt-account-id`,n),i.set(`originator`,`pi`);let a=w?`pi (${w.platform()} ${w.release()}; ${w.arch()})`:`pi (browser)`;return i.set(`User-Agent`,a),i}function Pe(e,t,n,r,i){let a=$(e,t,n,r);return a.set(`OpenAI-Beta`,`responses=experimental`),a.set(`accept`,`text/event-stream`),a.set(`content-type`,`application/json`),i&&(a.set(`session-id`,i),a.set(`x-client-request-id`,i)),a}function Fe(e,t,n,r,i){let a=$(e,t,n,r);return a.delete(`accept`),a.delete(`content-type`),a.delete(`OpenAI-Beta`),a.delete(`openai-beta`),a.set(`OpenAI-Beta`,`responses_websockets=2026-02-06`),a.set(`x-client-request-id`,i),a.set(`session-id`,i),a}export{H as closeOpenAICodexWebSocketSessions,he as getOpenAICodexWebSocketDebugStats,ge as resetOpenAICodexWebSocketDebugStats,j as stream,ae as streamSimple};
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./event-stream-CXocIcc6.mjs";import{n as t,t as n}from"./models-bnt621e8.mjs";import{t as r}from"./provider-env-p-MKZrBX.mjs";import{n as i}from"./json-parse-CoJ2PRW2.mjs";import{t as a}from"./headers-8nMK0zm-.mjs";import{t as o}from"./sanitize-unicode-BU6jSNzJ.mjs";import{n as s,t as c}from"./github-copilot-headers-Co77A9iu.mjs";import{r as l,t as u}from"./transform-messages-C0FNxyyM.mjs";import{n as d}from"./openai-DtotRKm7.mjs";import{n as f,t as p}from"./error-body-RPMBLEAJ.mjs";import{t as m}from"./openai-prompt-cache-ChV-9Dro.mjs";function h(e,t){if(!e)return!1;let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n&&r!==null&&r.trim().length>0)return!0;return!1}function g(e,t,n){if(t)return t;if(h(n,`authorization`)||h(n,`cf-aig-authorization`))return`unused`;throw Error(`No API key for provider: ${e}`)}function _(e){for(let t of e)if(t.role===`toolResult`||t.role===`assistant`&&t.content.some(e=>e.type===`toolCall`))return!0;return!1}function v(e){let t=new Set;for(let n of e)if(n.role===`toolResult`)for(let e of n.addedToolNames??[])t.add(e);return t}function y(e,t){if(!e)return[];let n=new Map(e.map(e=>[e.name,e]));return Array.from(t).map(e=>n.get(e)).filter(e=>e!==void 0)}function b(e){return e.type===`text`}function x(e){return e.type===`thinking`}function S(e){return e.type===`toolCall`}function C(e){return e.type===`image`}function w(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`reasoning.encrypted`&&typeof t.id==`string`&&t.id.length>0&&typeof t.data==`string`&&t.data.length>0}function T(e,t){return e||(r(`PI_CACHE_RETENTION`,t)===`long`?`long`:`short`)}const E=(t,n,r)=>{let o=new e;return(async()=>{let e={role:`assistant`,content:[],api:t.api,provider:t.provider,model:t.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let s=g(t.provider,r?.apiKey,r?.headers),c=G(t),l=T(r?.cacheRetention,r?.env),u=l===`none`?void 0:r?.sessionId,d=O(t,n,s,r?.headers,u,c),f=k(t,n,r,c,l),p=await r?.onPayload?.(f,t);p!==void 0&&(f=p);let m={...r?.signal?{signal:r.signal}:{},...r?.timeoutMs===void 0?{}:{timeout:r.timeoutMs},maxRetries:r?.maxRetries??0},{data:h,response:_}=await d.chat.completions.create(f,m).withResponse();await r?.onResponse?.({status:_.status,headers:a(_.headers)},t),o.push({type:`start`,partial:e});let v=null,y=null,b=!1,x=new Map,S=new Map,C=new Map,E=e.content,D=e=>E.indexOf(e),A=t=>{let n=D(t);n!==-1&&(t.type===`text`?o.push({type:`text_end`,contentIndex:n,content:t.text,partial:e}):t.type===`thinking`?o.push({type:`thinking_end`,contentIndex:n,content:t.thinking,partial:e}):t.type===`toolCall`&&(t.arguments=i(t.partialArgs),delete t.partialArgs,delete t.streamIndex,o.push({type:`toolcall_end`,contentIndex:n,toolCall:t,partial:e})))},j=()=>(v||(v={type:`text`,text:``},E.push(v),o.push({type:`text_start`,contentIndex:D(v),partial:e})),v),M=t=>(y||(y={type:`thinking`,thinking:``,thinkingSignature:t},E.push(y),o.push({type:`thinking_start`,contentIndex:D(y),partial:e})),y),N=e=>{if(!e.id)return;let t=C.get(e.id);t&&(e.thoughtSignature=t,C.delete(e.id))},P=t=>{let n=typeof t.index==`number`?t.index:void 0,r=n===void 0?void 0:x.get(n);return!r&&t.id&&(r=S.get(t.id)),r||(r={type:`toolCall`,id:t.id||``,name:t.function?.name||``,arguments:{},partialArgs:``,streamIndex:n},n!==void 0&&x.set(n,r),t.id&&S.set(t.id,r),E.push(r),o.push({type:`toolcall_start`,contentIndex:D(r),partial:e})),n!==void 0&&r.streamIndex===void 0&&(r.streamIndex=n,x.set(n,r)),t.id&&S.set(t.id,r),N(r),r};for await(let n of h){if(!n||typeof n!=`object`)continue;e.responseId||=n.id,typeof n.model==`string`&&n.model.length>0&&n.model!==t.id&&(e.responseModel||=n.model),n.usage&&(e.usage=H(n.usage,t));let r=Array.isArray(n.choices)?n.choices[0]:void 0;if(r){if(!n.usage&&r.usage&&(e.usage=H(r.usage,t)),r.finish_reason){let t=U(r.finish_reason);e.stopReason=t.stopReason,t.errorMessage&&(e.errorMessage=t.errorMessage),b=!0}if(r.delta){if(r.delta.content!==null&&r.delta.content!==void 0&&r.delta.content.length>0){let t=j();t.text+=r.delta.content,o.push({type:`text_delta`,contentIndex:D(t),delta:r.delta.content,partial:e})}let n=[`reasoning_content`,`reasoning`,`reasoning_text`],a=r.delta,s=null;for(let e of n){let t=a[e];if(typeof t==`string`&&t.length>0){s=e;break}}if(s){let n=a[s];if(typeof n==`string`&&n.length>0){let r=M(t.provider===`opencode-go`&&s===`reasoning`?`reasoning_content`:s);r.thinking+=n,o.push({type:`thinking_delta`,contentIndex:D(r),delta:n,partial:e})}}if(r?.delta?.tool_calls)for(let t of r.delta.tool_calls){let n=P(t);!n.id&&t.id&&(n.id=t.id,S.set(t.id,n)),!n.name&&t.function?.name&&(n.name=t.function.name);let r=``;t.function?.arguments&&(r=t.function.arguments,n.partialArgs=(n.partialArgs??``)+t.function.arguments,n.arguments=i(n.partialArgs)),o.push({type:`toolcall_delta`,contentIndex:D(n),delta:r,partial:e})}let c=r.delta.reasoning_details;if(Array.isArray(c)){for(let e of c)if(w(e)){let t=JSON.stringify(e),n=S.get(e.id);n?n.thoughtSignature=t:C.set(e.id,t)}}}}}for(let e of E)A(e);if(r?.signal?.aborted||e.stopReason===`aborted`)throw Error(`Request was aborted`);if(e.stopReason===`error`)throw Error(e.errorMessage||`Provider returned an error stop reason`);if(!b)throw Error(`Stream ended without finish_reason`);o.push({type:`done`,reason:e.stopReason,message:e}),o.end()}catch(t){for(let t of e.content)delete t.index,delete t.partialArgs,delete t.streamIndex;e.stopReason=r?.signal?.aborted?`aborted`:`error`,e.errorMessage=p(f(t));let n=t?.error?.metadata?.raw;n&&!e.errorMessage.includes(String(n))&&(e.errorMessage+=`\n${n}`),o.push({type:`error`,reason:e.stopReason,error:e}),o.end()}})(),o},D=(e,n,r)=>{g(e.provider,r?.apiKey,r?.headers);let i=l(e,n,r,r?.apiKey),a=r?.reasoning?t(e,r.reasoning):void 0,o=a===`off`?void 0:a,s=r?.toolChoice;return E(e,n,{...i,reasoningEffort:o,toolChoice:s})};function O(e,t,n,r,i,a=G(e)){let o={...e.headers};if(e.provider===`github-copilot`){let e=s(t.messages),n=c({messages:t.messages,hasImages:e});Object.assign(o,n)}return i&&a.sendSessionAffinityHeaders&&(a.sessionAffinityFormat===`openrouter`?o[`x-session-id`]=i:(a.sessionAffinityFormat===`openai`&&(o.session_id=i),o[`x-client-request-id`]=i,o[`x-session-affinity`]=i)),r&&Object.assign(o,r),new d({apiKey:n,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:o})}function k(e,t,n,r=G(e),i=T(n?.cacheRetention,n?.env)){let a=B(e,t,r),o=M(r,i),s={model:e.id,messages:a,stream:!0,prompt_cache_key:e.baseUrl.includes(`api.openai.com`)&&i!==`none`||i===`long`&&r.supportsLongCacheRetention?m(n?.sessionId):void 0,prompt_cache_retention:i===`long`&&r.supportsLongCacheRetention?`24h`:void 0};r.supportsUsageInStreaming!==!1&&(s.stream_options={include_usage:!0}),r.supportsStore&&(s.store=!1),n?.maxTokens&&(r.maxTokensField===`max_tokens`?s.max_tokens=n.maxTokens:s.max_completion_tokens=n.maxTokens),n?.temperature!==void 0&&(s.temperature=n.temperature);let c=r.deferredToolsMode===`kimi`?v(t.messages):new Set,l=t.tools?.filter(e=>!c.has(e.name));if(l&&l.length>0?(s.tools=V(l,r),r.zaiToolStream&&(s.tool_stream=!0)):_(t.messages)&&(s.tools=[]),o&&N(a,s.tools,o),n?.toolChoice&&(s.tool_choice=n.toolChoice),r.thinkingFormat===`zai`&&e.reasoning){let t=s;if(t.thinking=n?.reasoningEffort?{type:`enabled`,clear_thinking:!1}:{type:`disabled`},n?.reasoningEffort&&r.supportsReasoningEffort){let r=e.thinkingLevelMap?.[n.reasoningEffort],i=r===void 0?n.reasoningEffort:r;typeof i==`string`&&(t.reasoning_effort=i)}}else if(r.thinkingFormat===`qwen`&&e.reasoning)s.enable_thinking=!!n?.reasoningEffort;else if(r.thinkingFormat===`qwen-chat-template`&&e.reasoning)s.chat_template_kwargs={enable_thinking:!!n?.reasoningEffort,preserve_thinking:!0};else if(r.thinkingFormat===`chat-template`&&e.reasoning){let t=A(e,n,r);t&&(s.chat_template_kwargs=t)}else if(r.thinkingFormat===`deepseek`&&e.reasoning)n?.reasoningEffort?s.thinking={type:`enabled`}:e.thinkingLevelMap?.off!==null&&(s.thinking={type:`disabled`}),n?.reasoningEffort&&r.supportsReasoningEffort&&(s.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort);else if(r.thinkingFormat===`openrouter`&&e.reasoning){let t=s;n?.reasoningEffort?t.reasoning={effort:e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort}:e.thinkingLevelMap?.off!==null&&(t.reasoning={effort:e.thinkingLevelMap?.off??`none`})}else if(r.thinkingFormat===`ant-ling`&&e.reasoning&&n?.reasoningEffort){let t=e.thinkingLevelMap?.[n.reasoningEffort];typeof t==`string`&&(s.reasoning={effort:t})}else if(r.thinkingFormat===`together`&&e.reasoning){let t=s;t.reasoning={enabled:!!n?.reasoningEffort},n?.reasoningEffort&&r.supportsReasoningEffort&&(t.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort)}else if(r.thinkingFormat===`string-thinking`&&e.reasoning){let t=s;n?.reasoningEffort?t.thinking=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort:e.thinkingLevelMap?.off!==null&&(t.thinking=e.thinkingLevelMap?.off??`none`)}else if(n?.reasoningEffort&&e.reasoning&&r.supportsReasoningEffort)s.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort;else if(!n?.reasoningEffort&&e.reasoning&&r.supportsReasoningEffort){let t=e.thinkingLevelMap?.off;typeof t==`string`&&(s.reasoning_effort=t)}if(e.compat?.openRouterRouting&&(s.provider=e.compat.openRouterRouting),e.compat?.vercelGatewayRouting){let t=e.compat.vercelGatewayRouting;if(t.only||t.order){let e={};t.only&&(e.only=t.only),t.order&&(e.order=t.order),s.providerOptions={gateway:e}}}return s}function A(e,t,n){let r={};for(let[i,a]of Object.entries(n.chatTemplateKwargs)){let n=j(e,t,a);n!==void 0&&(r[i]=n)}return Object.keys(r).length>0?r:void 0}function j(e,t,n){if(typeof n!=`object`||!n)return n;let r=t?.reasoningEffort;if(!r&&n.omitWhenOff)return;if(n.$var===`thinking.enabled`)return!!r;let i=r?e.thinkingLevelMap?.[r]:e.thinkingLevelMap?.off;return i===void 0?r:typeof i==`string`?i:void 0}function M(e,t){if(e.cacheControlFormat!==`anthropic`||t===`none`)return;let n=t===`long`&&e.supportsLongCacheRetention?`1h`:void 0;return{type:`ephemeral`,...n?{ttl:n}:{}}}function N(e,t,n){P(e,n),I(t,n),F(e,n)}function P(e,t){for(let n of e)if(n.role===`system`||n.role===`developer`){L(n,t);return}}function F(e,t){for(let n=e.length-1;n>=0;n--){let r=e[n];if((r.role===`user`||r.role===`assistant`)&&R(r,t))return}}function I(e,t){if(!e||e.length===0)return;let n=e[e.length-1];n.cache_control=t}function L(e,t){return z(e,t)}function R(e,t){return e.role===`user`||e.role===`assistant`?z(e,t):!1}function z(e,t){let n=e.content;if(typeof n==`string`)return n.length===0?!1:(e.content=[{type:`text`,text:n,cache_control:t}],!0);if(!Array.isArray(n))return!1;for(let e=n.length-1;e>=0;e--){let r=n[e];if(r?.type===`text`){let e=r;return e.cache_control=t,!0}}return!1}function B(e,t,n){let r=[],i=t=>{if(t.includes(`|`)){let[e]=t.split(`|`);return e.replace(/[^a-zA-Z0-9_-]/g,`_`).slice(0,40)}return e.provider===`openai`&&t.length>40?t.slice(0,40):t},a=u(t.messages,e,e=>i(e));if(t.systemPrompt){let i=e.reasoning&&n.supportsDeveloperRole?`developer`:`system`;r.push({role:i,content:o(t.systemPrompt)})}let s=null;for(let i=0;i<a.length;i++){let c=a[i];if(n.requiresAssistantAfterToolResult&&s===`toolResult`&&c.role===`user`&&r.push({role:`assistant`,content:`I have processed the tool results.`}),c.role===`user`)if(typeof c.content==`string`)r.push({role:`user`,content:o(c.content)});else{let e=c.content.map(e=>e.type===`text`?{type:`text`,text:o(e.text)}:{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}});if(e.length===0)continue;r.push({role:`user`,content:e})}else if(c.role===`assistant`){let t={role:`assistant`,content:n.requiresAssistantAfterToolResult?``:null},i=c.content.filter(b).filter(e=>e.text.trim().length>0).map(e=>({type:`text`,text:o(e.text)})),a=i.map(e=>e.text).join(``),s=c.content.filter(x).filter(e=>e.thinking.trim().length>0);if(s.length>0)if(n.requiresThinkingAsText)t.content=[{type:`text`,text:s.map(e=>o(e.thinking)).join(`
3
+
4
+ `)},...i];else{a.length>0&&(t.content=a);let n=s[0].thinkingSignature;e.provider===`opencode-go`&&n===`reasoning`&&(n=`reasoning_content`),n&&n.length>0&&(t[n]=s.map(e=>e.thinking).join(`
5
+ `))}else a.length>0&&(t.content=a);let l=c.content.filter(S);if(l.length>0){t.tool_calls=l.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.arguments)}}));let e=l.filter(e=>e.thoughtSignature).map(e=>{try{return JSON.parse(e.thoughtSignature)}catch{return null}}).filter(Boolean);e.length>0&&(t.reasoning_details=e)}n.requiresReasoningContentOnAssistantMessages&&e.reasoning&&t.reasoning_content===void 0&&(t.reasoning_content=``);let u=t.content;if(!(u!=null&&u.length>0)&&!t.tool_calls)continue;r.push(t)}else if(c.role===`toolResult`){let c=[],l=new Set,u=i;for(;u<a.length&&a[u].role===`toolResult`;u++){let t=a[u],i=t.content.filter(b).map(e=>e.text).join(`
6
+ `),s=t.content.some(e=>e.type===`image`),d={role:`tool`,content:o(i.length>0?i:s?`(see attached image)`:`(no tool output)`),tool_call_id:t.toolCallId};if(n.requiresToolResultName&&t.toolName&&(d.name=t.toolName),r.push(d),n.deferredToolsMode===`kimi`)for(let e of t.addedToolNames??[])l.add(e);if(s&&e.input.includes(`image`))for(let e of t.content)C(e)&&c.push({type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}})}if(i=u-1,c.length>0?(n.requiresAssistantAfterToolResult&&r.push({role:`assistant`,content:`I have processed the tool results.`}),r.push({role:`user`,content:[{type:`text`,text:`Attached image(s) from tool result:`},...c]}),s=`user`):s=`toolResult`,l.size>0){let e=y(t.tools,l);if(e.length>0){let t={role:`system`,tools:V(e,n)};r.push(t)}}continue}s=c.role}return r}function V(e,t){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters,...t.supportsStrictMode!==!1&&{strict:!1}}}))}function H(e,t){let r=e.prompt_tokens||0,i=e.prompt_tokens_details?.cached_tokens??e.prompt_cache_hit_tokens??0,a=e.prompt_tokens_details?.cache_write_tokens||0,o=Math.max(0,r-i-a),s=e.completion_tokens||0,c={input:o,output:s,cacheRead:i,cacheWrite:a,reasoning:e.completion_tokens_details?.reasoning_tokens||0,totalTokens:o+s+i+a,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};return n(t,c),c}function U(e){if(e===null)return{stopReason:`stop`};switch(e){case`stop`:case`end`:return{stopReason:`stop`};case`length`:return{stopReason:`length`};case`function_call`:case`tool_calls`:return{stopReason:`toolUse`};case`content_filter`:return{stopReason:`error`,errorMessage:`Provider finish_reason: content_filter`};case`network_error`:return{stopReason:`error`,errorMessage:`Provider finish_reason: network_error`};default:return{stopReason:`error`,errorMessage:`Provider finish_reason: ${e}`}}}function W(e){let t=e.provider,n=e.baseUrl,r=t===`zai`||t===`zai-coding-cn`||n.includes(`api.z.ai`)||n.includes(`open.bigmodel.cn`),i=t===`together`||n.includes(`api.together.ai`)||n.includes(`api.together.xyz`),a=t===`moonshotai`||t===`moonshotai-cn`||n.includes(`api.moonshot.`),o=t===`openrouter`||n.includes(`openrouter.ai`),s=t===`cloudflare-workers-ai`||n.includes(`api.cloudflare.com`),c=t===`cloudflare-ai-gateway`||n.includes(`gateway.ai.cloudflare.com`),l=t===`nvidia`||n.includes(`integrate.api.nvidia.com`),u=t===`ant-ling`||n.includes(`api.ant-ling.com`),d=l||t===`cerebras`||n.includes(`cerebras.ai`)||t===`xai`||n.includes(`api.x.ai`)||i||n.includes(`chutes.ai`)||n.includes(`deepseek.com`)||r||a||t===`opencode`||n.includes(`opencode.ai`)||s||c||u,f=n.includes(`chutes.ai`)||a||c||i||l||u,p=t===`xai`||n.includes(`api.x.ai`),m=t===`deepseek`||n.includes(`deepseek.com`),h=o&&(e.id.startsWith(`anthropic/`)||e.id.startsWith(`openai/`)),g=t===`openrouter`&&e.id.startsWith(`anthropic/`)?`anthropic`:void 0;return{supportsStore:!d,supportsDeveloperRole:h||!d&&!o,supportsReasoningEffort:!p&&!r&&!a&&!i&&!c&&!l&&!u,supportsUsageInStreaming:!0,maxTokensField:f?`max_tokens`:`max_completion_tokens`,requiresToolResultName:!1,requiresAssistantAfterToolResult:!1,requiresThinkingAsText:!1,requiresReasoningContentOnAssistantMessages:m,thinkingFormat:m?`deepseek`:r?`zai`:i?`together`:u?`ant-ling`:o?`openrouter`:`openai`,openRouterRouting:{},vercelGatewayRouting:{},chatTemplateKwargs:{},zaiToolStream:!1,supportsStrictMode:!a&&!i&&!c&&!l,cacheControlFormat:g,sendSessionAffinityHeaders:!1,deferredToolsMode:void 0,sessionAffinityFormat:o?`openrouter`:`openai`,supportsLongCacheRetention:!(i||s||c||l||u)}}function G(e){let t=W(e);return e.compat?{supportsStore:e.compat.supportsStore??t.supportsStore,supportsDeveloperRole:e.compat.supportsDeveloperRole??t.supportsDeveloperRole,supportsReasoningEffort:e.compat.supportsReasoningEffort??t.supportsReasoningEffort,supportsUsageInStreaming:e.compat.supportsUsageInStreaming??t.supportsUsageInStreaming,maxTokensField:e.compat.maxTokensField??t.maxTokensField,requiresToolResultName:e.compat.requiresToolResultName??t.requiresToolResultName,requiresAssistantAfterToolResult:e.compat.requiresAssistantAfterToolResult??t.requiresAssistantAfterToolResult,requiresThinkingAsText:e.compat.requiresThinkingAsText??t.requiresThinkingAsText,requiresReasoningContentOnAssistantMessages:e.compat.requiresReasoningContentOnAssistantMessages??t.requiresReasoningContentOnAssistantMessages,thinkingFormat:e.compat.thinkingFormat??t.thinkingFormat,openRouterRouting:e.compat.openRouterRouting??{},vercelGatewayRouting:e.compat.vercelGatewayRouting??t.vercelGatewayRouting,chatTemplateKwargs:e.compat.chatTemplateKwargs??t.chatTemplateKwargs,zaiToolStream:e.compat.zaiToolStream??t.zaiToolStream,supportsStrictMode:e.compat.supportsStrictMode??t.supportsStrictMode,cacheControlFormat:e.compat.cacheControlFormat??t.cacheControlFormat,sendSessionAffinityHeaders:e.compat.sendSessionAffinityHeaders??t.sendSessionAffinityHeaders,deferredToolsMode:e.compat.deferredToolsMode??t.deferredToolsMode,sessionAffinityFormat:e.compat.sessionAffinityFormat??t.sessionAffinityFormat,supportsLongCacheRetention:e.compat.supportsLongCacheRetention??t.supportsLongCacheRetention}:t}export{B as convertMessages,E as stream,D as streamSimple};
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./event-stream-BrGAtXMV.mjs";import{n as t,t as n}from"./models-BZPNtJp1.mjs";import{t as r}from"./headers-Gh3dvZSc.mjs";import{n as i}from"./json-parse-BjxNFuy6.mjs";import{t as a}from"./provider-env-CgV7Mc0a.mjs";import{t as o}from"./sanitize-unicode-C8aKmv6o.mjs";import{n as s,t as c}from"./github-copilot-headers-Di-B2QFr.mjs";import{r as l,t as u}from"./transform-messages-s3jcHssz.mjs";import{n as d}from"./openai-Clqf3tig.mjs";import{n as f,t as p}from"./error-body-3m883nGr.mjs";import{t as m}from"./openai-prompt-cache-BbVvSxhO.mjs";function h(e,t){if(!e)return!1;let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n&&r!==null&&r.trim().length>0)return!0;return!1}function g(e,t,n){if(t)return t;if(h(n,`authorization`)||h(n,`cf-aig-authorization`))return`unused`;throw Error(`No API key for provider: ${e}`)}function _(e){for(let t of e)if(t.role===`toolResult`||t.role===`assistant`&&t.content.some(e=>e.type===`toolCall`))return!0;return!1}function v(e){let t=new Set;for(let n of e)if(n.role===`toolResult`)for(let e of n.addedToolNames??[])t.add(e);return t}function y(e,t){if(!e)return[];let n=new Map(e.map(e=>[e.name,e]));return Array.from(t).map(e=>n.get(e)).filter(e=>e!==void 0)}function b(e){return e.type===`text`}function x(e){return e.type===`thinking`}function S(e){return e.type===`toolCall`}function C(e){return e.type===`image`}function w(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`reasoning.encrypted`&&typeof t.id==`string`&&t.id.length>0&&typeof t.data==`string`&&t.data.length>0}function T(e,t){return e||(a(`PI_CACHE_RETENTION`,t)===`long`?`long`:`short`)}const E=(t,n,a)=>{let o=new e;return(async()=>{let e={role:`assistant`,content:[],api:t.api,provider:t.provider,model:t.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let s=g(t.provider,a?.apiKey,a?.headers),c=G(t),l=T(a?.cacheRetention,a?.env),u=l===`none`?void 0:a?.sessionId,d=O(t,n,s,a?.headers,u,c),f=k(t,n,a,c,l),p=await a?.onPayload?.(f,t);p!==void 0&&(f=p);let m={...a?.signal?{signal:a.signal}:{},...a?.timeoutMs===void 0?{}:{timeout:a.timeoutMs},maxRetries:a?.maxRetries??0},{data:h,response:_}=await d.chat.completions.create(f,m).withResponse();await a?.onResponse?.({status:_.status,headers:r(_.headers)},t),o.push({type:`start`,partial:e});let v=null,y=null,b=!1,x=new Map,S=new Map,C=new Map,E=e.content,D=e=>E.indexOf(e),A=t=>{let n=D(t);n!==-1&&(t.type===`text`?o.push({type:`text_end`,contentIndex:n,content:t.text,partial:e}):t.type===`thinking`?o.push({type:`thinking_end`,contentIndex:n,content:t.thinking,partial:e}):t.type===`toolCall`&&(t.arguments=i(t.partialArgs),delete t.partialArgs,delete t.streamIndex,o.push({type:`toolcall_end`,contentIndex:n,toolCall:t,partial:e})))},j=()=>(v||(v={type:`text`,text:``},E.push(v),o.push({type:`text_start`,contentIndex:D(v),partial:e})),v),M=t=>(y||(y={type:`thinking`,thinking:``,thinkingSignature:t},E.push(y),o.push({type:`thinking_start`,contentIndex:D(y),partial:e})),y),N=e=>{if(!e.id)return;let t=C.get(e.id);t&&(e.thoughtSignature=t,C.delete(e.id))},P=t=>{let n=typeof t.index==`number`?t.index:void 0,r=n===void 0?void 0:x.get(n);return!r&&t.id&&(r=S.get(t.id)),r||(r={type:`toolCall`,id:t.id||``,name:t.function?.name||``,arguments:{},partialArgs:``,streamIndex:n},n!==void 0&&x.set(n,r),t.id&&S.set(t.id,r),E.push(r),o.push({type:`toolcall_start`,contentIndex:D(r),partial:e})),n!==void 0&&r.streamIndex===void 0&&(r.streamIndex=n,x.set(n,r)),t.id&&S.set(t.id,r),N(r),r};for await(let n of h){if(!n||typeof n!=`object`)continue;e.responseId||=n.id,typeof n.model==`string`&&n.model.length>0&&n.model!==t.id&&(e.responseModel||=n.model),n.usage&&(e.usage=H(n.usage,t));let r=Array.isArray(n.choices)?n.choices[0]:void 0;if(r){if(!n.usage&&r.usage&&(e.usage=H(r.usage,t)),r.finish_reason){let t=U(r.finish_reason);e.stopReason=t.stopReason,t.errorMessage&&(e.errorMessage=t.errorMessage),b=!0}if(r.delta){if(r.delta.content!==null&&r.delta.content!==void 0&&r.delta.content.length>0){let t=j();t.text+=r.delta.content,o.push({type:`text_delta`,contentIndex:D(t),delta:r.delta.content,partial:e})}let n=[`reasoning_content`,`reasoning`,`reasoning_text`],a=r.delta,s=null;for(let e of n){let t=a[e];if(typeof t==`string`&&t.length>0){s=e;break}}if(s){let n=a[s];if(typeof n==`string`&&n.length>0){let r=M(t.provider===`opencode-go`&&s===`reasoning`?`reasoning_content`:s);r.thinking+=n,o.push({type:`thinking_delta`,contentIndex:D(r),delta:n,partial:e})}}if(r?.delta?.tool_calls)for(let t of r.delta.tool_calls){let n=P(t);!n.id&&t.id&&(n.id=t.id,S.set(t.id,n)),!n.name&&t.function?.name&&(n.name=t.function.name);let r=``;t.function?.arguments&&(r=t.function.arguments,n.partialArgs=(n.partialArgs??``)+t.function.arguments,n.arguments=i(n.partialArgs)),o.push({type:`toolcall_delta`,contentIndex:D(n),delta:r,partial:e})}let c=r.delta.reasoning_details;if(Array.isArray(c)){for(let e of c)if(w(e)){let t=JSON.stringify(e),n=S.get(e.id);n?n.thoughtSignature=t:C.set(e.id,t)}}}}}for(let e of E)A(e);if(a?.signal?.aborted||e.stopReason===`aborted`)throw Error(`Request was aborted`);if(e.stopReason===`error`)throw Error(e.errorMessage||`Provider returned an error stop reason`);if(!b)throw Error(`Stream ended without finish_reason`);o.push({type:`done`,reason:e.stopReason,message:e}),o.end()}catch(t){for(let t of e.content)delete t.index,delete t.partialArgs,delete t.streamIndex;e.stopReason=a?.signal?.aborted?`aborted`:`error`,e.errorMessage=p(f(t));let n=t?.error?.metadata?.raw;n&&!e.errorMessage.includes(String(n))&&(e.errorMessage+=`\n${n}`),o.push({type:`error`,reason:e.stopReason,error:e}),o.end()}})(),o},D=(e,n,r)=>{g(e.provider,r?.apiKey,r?.headers);let i=l(e,n,r,r?.apiKey),a=r?.reasoning?t(e,r.reasoning):void 0,o=a===`off`?void 0:a,s=r?.toolChoice;return E(e,n,{...i,reasoningEffort:o,toolChoice:s})};function O(e,t,n,r,i,a=G(e)){let o={...e.headers};if(e.provider===`github-copilot`){let e=s(t.messages),n=c({messages:t.messages,hasImages:e});Object.assign(o,n)}return i&&a.sendSessionAffinityHeaders&&(a.sessionAffinityFormat===`openrouter`?o[`x-session-id`]=i:(a.sessionAffinityFormat===`openai`&&(o.session_id=i),o[`x-client-request-id`]=i,o[`x-session-affinity`]=i)),r&&Object.assign(o,r),new d({apiKey:n,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:o})}function k(e,t,n,r=G(e),i=T(n?.cacheRetention,n?.env)){let a=B(e,t,r),o=M(r,i),s={model:e.id,messages:a,stream:!0,prompt_cache_key:e.baseUrl.includes(`api.openai.com`)&&i!==`none`||i===`long`&&r.supportsLongCacheRetention?m(n?.sessionId):void 0,prompt_cache_retention:i===`long`&&r.supportsLongCacheRetention?`24h`:void 0};r.supportsUsageInStreaming!==!1&&(s.stream_options={include_usage:!0}),r.supportsStore&&(s.store=!1),n?.maxTokens&&(r.maxTokensField===`max_tokens`?s.max_tokens=n.maxTokens:s.max_completion_tokens=n.maxTokens),n?.temperature!==void 0&&(s.temperature=n.temperature);let c=r.deferredToolsMode===`kimi`?v(t.messages):new Set,l=t.tools?.filter(e=>!c.has(e.name));if(l&&l.length>0?(s.tools=V(l,r),r.zaiToolStream&&(s.tool_stream=!0)):_(t.messages)&&(s.tools=[]),o&&N(a,s.tools,o),n?.toolChoice&&(s.tool_choice=n.toolChoice),r.thinkingFormat===`zai`&&e.reasoning){let t=s;if(t.thinking=n?.reasoningEffort?{type:`enabled`,clear_thinking:!1}:{type:`disabled`},n?.reasoningEffort&&r.supportsReasoningEffort){let r=e.thinkingLevelMap?.[n.reasoningEffort],i=r===void 0?n.reasoningEffort:r;typeof i==`string`&&(t.reasoning_effort=i)}}else if(r.thinkingFormat===`qwen`&&e.reasoning)s.enable_thinking=!!n?.reasoningEffort;else if(r.thinkingFormat===`qwen-chat-template`&&e.reasoning)s.chat_template_kwargs={enable_thinking:!!n?.reasoningEffort,preserve_thinking:!0};else if(r.thinkingFormat===`chat-template`&&e.reasoning){let t=A(e,n,r);t&&(s.chat_template_kwargs=t)}else if(r.thinkingFormat===`deepseek`&&e.reasoning)n?.reasoningEffort?s.thinking={type:`enabled`}:e.thinkingLevelMap?.off!==null&&(s.thinking={type:`disabled`}),n?.reasoningEffort&&r.supportsReasoningEffort&&(s.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort);else if(r.thinkingFormat===`openrouter`&&e.reasoning){let t=s;n?.reasoningEffort?t.reasoning={effort:e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort}:e.thinkingLevelMap?.off!==null&&(t.reasoning={effort:e.thinkingLevelMap?.off??`none`})}else if(r.thinkingFormat===`ant-ling`&&e.reasoning&&n?.reasoningEffort){let t=e.thinkingLevelMap?.[n.reasoningEffort];typeof t==`string`&&(s.reasoning={effort:t})}else if(r.thinkingFormat===`together`&&e.reasoning){let t=s;t.reasoning={enabled:!!n?.reasoningEffort},n?.reasoningEffort&&r.supportsReasoningEffort&&(t.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort)}else if(r.thinkingFormat===`string-thinking`&&e.reasoning){let t=s;n?.reasoningEffort?t.thinking=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort:e.thinkingLevelMap?.off!==null&&(t.thinking=e.thinkingLevelMap?.off??`none`)}else if(n?.reasoningEffort&&e.reasoning&&r.supportsReasoningEffort)s.reasoning_effort=e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort;else if(!n?.reasoningEffort&&e.reasoning&&r.supportsReasoningEffort){let t=e.thinkingLevelMap?.off;typeof t==`string`&&(s.reasoning_effort=t)}if(e.compat?.openRouterRouting&&(s.provider=e.compat.openRouterRouting),e.compat?.vercelGatewayRouting){let t=e.compat.vercelGatewayRouting;if(t.only||t.order){let e={};t.only&&(e.only=t.only),t.order&&(e.order=t.order),s.providerOptions={gateway:e}}}return s}function A(e,t,n){let r={};for(let[i,a]of Object.entries(n.chatTemplateKwargs)){let n=j(e,t,a);n!==void 0&&(r[i]=n)}return Object.keys(r).length>0?r:void 0}function j(e,t,n){if(typeof n!=`object`||!n)return n;let r=t?.reasoningEffort;if(!r&&n.omitWhenOff)return;if(n.$var===`thinking.enabled`)return!!r;let i=r?e.thinkingLevelMap?.[r]:e.thinkingLevelMap?.off;return i===void 0?r:typeof i==`string`?i:void 0}function M(e,t){if(e.cacheControlFormat!==`anthropic`||t===`none`)return;let n=t===`long`&&e.supportsLongCacheRetention?`1h`:void 0;return{type:`ephemeral`,...n?{ttl:n}:{}}}function N(e,t,n){P(e,n),I(t,n),F(e,n)}function P(e,t){for(let n of e)if(n.role===`system`||n.role===`developer`){L(n,t);return}}function F(e,t){for(let n=e.length-1;n>=0;n--){let r=e[n];if((r.role===`user`||r.role===`assistant`)&&R(r,t))return}}function I(e,t){if(!e||e.length===0)return;let n=e[e.length-1];n.cache_control=t}function L(e,t){return z(e,t)}function R(e,t){return e.role===`user`||e.role===`assistant`?z(e,t):!1}function z(e,t){let n=e.content;if(typeof n==`string`)return n.length===0?!1:(e.content=[{type:`text`,text:n,cache_control:t}],!0);if(!Array.isArray(n))return!1;for(let e=n.length-1;e>=0;e--){let r=n[e];if(r?.type===`text`){let e=r;return e.cache_control=t,!0}}return!1}function B(e,t,n){let r=[],i=t=>{if(t.includes(`|`)){let[e]=t.split(`|`);return e.replace(/[^a-zA-Z0-9_-]/g,`_`).slice(0,40)}return e.provider===`openai`&&t.length>40?t.slice(0,40):t},a=u(t.messages,e,e=>i(e));if(t.systemPrompt){let i=e.reasoning&&n.supportsDeveloperRole?`developer`:`system`;r.push({role:i,content:o(t.systemPrompt)})}let s=null;for(let i=0;i<a.length;i++){let c=a[i];if(n.requiresAssistantAfterToolResult&&s===`toolResult`&&c.role===`user`&&r.push({role:`assistant`,content:`I have processed the tool results.`}),c.role===`user`)if(typeof c.content==`string`)r.push({role:`user`,content:o(c.content)});else{let e=c.content.map(e=>e.type===`text`?{type:`text`,text:o(e.text)}:{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}});if(e.length===0)continue;r.push({role:`user`,content:e})}else if(c.role===`assistant`){let t={role:`assistant`,content:n.requiresAssistantAfterToolResult?``:null},i=c.content.filter(b).filter(e=>e.text.trim().length>0).map(e=>({type:`text`,text:o(e.text)})),a=i.map(e=>e.text).join(``),s=c.content.filter(x).filter(e=>e.thinking.trim().length>0);if(s.length>0)if(n.requiresThinkingAsText)t.content=[{type:`text`,text:s.map(e=>o(e.thinking)).join(`
3
+
4
+ `)},...i];else{a.length>0&&(t.content=a);let n=s[0].thinkingSignature;e.provider===`opencode-go`&&n===`reasoning`&&(n=`reasoning_content`),n&&n.length>0&&(t[n]=s.map(e=>e.thinking).join(`
5
+ `))}else a.length>0&&(t.content=a);let l=c.content.filter(S);if(l.length>0){t.tool_calls=l.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.arguments)}}));let e=l.filter(e=>e.thoughtSignature).map(e=>{try{return JSON.parse(e.thoughtSignature)}catch{return null}}).filter(Boolean);e.length>0&&(t.reasoning_details=e)}n.requiresReasoningContentOnAssistantMessages&&e.reasoning&&t.reasoning_content===void 0&&(t.reasoning_content=``);let u=t.content;if(!(u!=null&&u.length>0)&&!t.tool_calls)continue;r.push(t)}else if(c.role===`toolResult`){let c=[],l=new Set,u=i;for(;u<a.length&&a[u].role===`toolResult`;u++){let t=a[u],i=t.content.filter(b).map(e=>e.text).join(`
6
+ `),s=t.content.some(e=>e.type===`image`),d={role:`tool`,content:o(i.length>0?i:s?`(see attached image)`:`(no tool output)`),tool_call_id:t.toolCallId};if(n.requiresToolResultName&&t.toolName&&(d.name=t.toolName),r.push(d),n.deferredToolsMode===`kimi`)for(let e of t.addedToolNames??[])l.add(e);if(s&&e.input.includes(`image`))for(let e of t.content)C(e)&&c.push({type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}})}if(i=u-1,c.length>0?(n.requiresAssistantAfterToolResult&&r.push({role:`assistant`,content:`I have processed the tool results.`}),r.push({role:`user`,content:[{type:`text`,text:`Attached image(s) from tool result:`},...c]}),s=`user`):s=`toolResult`,l.size>0){let e=y(t.tools,l);if(e.length>0){let t={role:`system`,tools:V(e,n)};r.push(t)}}continue}s=c.role}return r}function V(e,t){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters,...t.supportsStrictMode!==!1&&{strict:!1}}}))}function H(e,t){let r=e.prompt_tokens||0,i=e.prompt_tokens_details?.cached_tokens??e.prompt_cache_hit_tokens??0,a=e.prompt_tokens_details?.cache_write_tokens||0,o=Math.max(0,r-i-a),s=e.completion_tokens||0,c={input:o,output:s,cacheRead:i,cacheWrite:a,reasoning:e.completion_tokens_details?.reasoning_tokens||0,totalTokens:o+s+i+a,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};return n(t,c),c}function U(e){if(e===null)return{stopReason:`stop`};switch(e){case`stop`:case`end`:return{stopReason:`stop`};case`length`:return{stopReason:`length`};case`function_call`:case`tool_calls`:return{stopReason:`toolUse`};case`content_filter`:return{stopReason:`error`,errorMessage:`Provider finish_reason: content_filter`};case`network_error`:return{stopReason:`error`,errorMessage:`Provider finish_reason: network_error`};default:return{stopReason:`error`,errorMessage:`Provider finish_reason: ${e}`}}}function W(e){let t=e.provider,n=e.baseUrl,r=t===`zai`||t===`zai-coding-cn`||n.includes(`api.z.ai`)||n.includes(`open.bigmodel.cn`),i=t===`together`||n.includes(`api.together.ai`)||n.includes(`api.together.xyz`),a=t===`moonshotai`||t===`moonshotai-cn`||n.includes(`api.moonshot.`),o=t===`openrouter`||n.includes(`openrouter.ai`),s=t===`cloudflare-workers-ai`||n.includes(`api.cloudflare.com`),c=t===`cloudflare-ai-gateway`||n.includes(`gateway.ai.cloudflare.com`),l=t===`nvidia`||n.includes(`integrate.api.nvidia.com`),u=t===`ant-ling`||n.includes(`api.ant-ling.com`),d=l||t===`cerebras`||n.includes(`cerebras.ai`)||t===`xai`||n.includes(`api.x.ai`)||i||n.includes(`chutes.ai`)||n.includes(`deepseek.com`)||r||a||t===`opencode`||n.includes(`opencode.ai`)||s||c||u,f=n.includes(`chutes.ai`)||a||c||i||l||u,p=t===`xai`||n.includes(`api.x.ai`),m=t===`deepseek`||n.includes(`deepseek.com`),h=o&&(e.id.startsWith(`anthropic/`)||e.id.startsWith(`openai/`)),g=t===`openrouter`&&e.id.startsWith(`anthropic/`)?`anthropic`:void 0;return{supportsStore:!d,supportsDeveloperRole:h||!d&&!o,supportsReasoningEffort:!p&&!r&&!a&&!i&&!c&&!l&&!u,supportsUsageInStreaming:!0,maxTokensField:f?`max_tokens`:`max_completion_tokens`,requiresToolResultName:!1,requiresAssistantAfterToolResult:!1,requiresThinkingAsText:!1,requiresReasoningContentOnAssistantMessages:m,thinkingFormat:m?`deepseek`:r?`zai`:i?`together`:u?`ant-ling`:o?`openrouter`:`openai`,openRouterRouting:{},vercelGatewayRouting:{},chatTemplateKwargs:{},zaiToolStream:!1,supportsStrictMode:!a&&!i&&!c&&!l,cacheControlFormat:g,sendSessionAffinityHeaders:!1,deferredToolsMode:void 0,sessionAffinityFormat:o?`openrouter`:`openai`,supportsLongCacheRetention:!(i||s||c||l||u)}}function G(e){let t=W(e);return e.compat?{supportsStore:e.compat.supportsStore??t.supportsStore,supportsDeveloperRole:e.compat.supportsDeveloperRole??t.supportsDeveloperRole,supportsReasoningEffort:e.compat.supportsReasoningEffort??t.supportsReasoningEffort,supportsUsageInStreaming:e.compat.supportsUsageInStreaming??t.supportsUsageInStreaming,maxTokensField:e.compat.maxTokensField??t.maxTokensField,requiresToolResultName:e.compat.requiresToolResultName??t.requiresToolResultName,requiresAssistantAfterToolResult:e.compat.requiresAssistantAfterToolResult??t.requiresAssistantAfterToolResult,requiresThinkingAsText:e.compat.requiresThinkingAsText??t.requiresThinkingAsText,requiresReasoningContentOnAssistantMessages:e.compat.requiresReasoningContentOnAssistantMessages??t.requiresReasoningContentOnAssistantMessages,thinkingFormat:e.compat.thinkingFormat??t.thinkingFormat,openRouterRouting:e.compat.openRouterRouting??{},vercelGatewayRouting:e.compat.vercelGatewayRouting??t.vercelGatewayRouting,chatTemplateKwargs:e.compat.chatTemplateKwargs??t.chatTemplateKwargs,zaiToolStream:e.compat.zaiToolStream??t.zaiToolStream,supportsStrictMode:e.compat.supportsStrictMode??t.supportsStrictMode,cacheControlFormat:e.compat.cacheControlFormat??t.cacheControlFormat,sendSessionAffinityHeaders:e.compat.sendSessionAffinityHeaders??t.sendSessionAffinityHeaders,deferredToolsMode:e.compat.deferredToolsMode??t.deferredToolsMode,sessionAffinityFormat:e.compat.sessionAffinityFormat??t.sessionAffinityFormat,supportsLongCacheRetention:e.compat.supportsLongCacheRetention??t.supportsLongCacheRetention}:t}export{B as convertMessages,E as stream,D as streamSimple};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./event-stream-BrGAtXMV.mjs";import{n as t}from"./models-BZPNtJp1.mjs";import{t as n}from"./deferred-tools-B1EgE_tY.mjs";import{t as r}from"./headers-Gh3dvZSc.mjs";import"./json-parse-BjxNFuy6.mjs";import{t as i}from"./provider-env-CgV7Mc0a.mjs";import{n as a,t as o}from"./github-copilot-headers-Di-B2QFr.mjs";import{r as s}from"./transform-messages-s3jcHssz.mjs";import{n as c}from"./openai-Clqf3tig.mjs";import{n as l,t as u}from"./error-body-3m883nGr.mjs";import{t as d}from"./openai-prompt-cache-BbVvSxhO.mjs";import{n as f,r as p,t as m}from"./openai-responses-shared-DujHRX-u.mjs";const h=new Set([`openai`,`openai-codex`,`opencode`]);function g(e,t){if(!e)return!1;let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n&&r!==null&&r.trim().length>0)return!0;return!1}function _(e,t,n){if(t)return t;if(g(n,`authorization`)||g(n,`cf-aig-authorization`))return`unused`;throw Error(`No API key for provider: ${e}`)}function v(e){return e.provider===`openrouter`||e.baseUrl.includes(`openrouter.ai`)?`openrouter`:`openai`}function y(e,t){return e||(i(`PI_CACHE_RETENTION`,t)===`long`?`long`:`short`)}function b(e){return{supportsDeveloperRole:e.compat?.supportsDeveloperRole??!0,sessionAffinityFormat:e.compat?.sessionAffinityFormat??v(e),supportsLongCacheRetention:e.compat?.supportsLongCacheRetention??!0,supportsToolSearch:e.compat?.supportsToolSearch??!1}}function x(e,t){return t===`long`&&e.supportsLongCacheRetention?`24h`:void 0}function S(e){return u(l(e),`OpenAI API error`)}const C=(t,n,i)=>{let a=new e;return(async()=>{let e={role:`assistant`,content:[],api:t.api,provider:t.provider,model:t.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let o=_(t.provider,i?.apiKey,i?.headers),s=y(i?.cacheRetention,i?.env)===`none`?void 0:i?.sessionId,c=T(t,n,o,i?.headers,s),l=E(t,n,i),u=await i?.onPayload?.(l,t);u!==void 0&&(l=u);let d={...i?.signal?{signal:i.signal}:{},...i?.timeoutMs===void 0?{}:{timeout:i.timeoutMs},maxRetries:i?.maxRetries??0},{data:f,response:m}=await c.responses.create(l,d).withResponse();if(await i?.onResponse?.({status:m.status,headers:r(m.headers)},t),a.push({type:`start`,partial:e}),await p(f,e,a,t,{serviceTier:i?.serviceTier,applyServiceTierPricing:(e,n)=>O(e,n,t)}),i?.signal?.aborted)throw Error(`Request was aborted`);if(e.stopReason===`aborted`||e.stopReason===`error`)throw Error(`An unknown error occurred`);a.push({type:`done`,reason:e.stopReason,message:e}),a.end()}catch(t){for(let t of e.content)delete t.index,delete t.partialJson;e.stopReason=i?.signal?.aborted?`aborted`:`error`,e.errorMessage=S(t),a.push({type:`error`,reason:e.stopReason,error:e}),a.end()}})(),a},w=(e,n,r)=>{_(e.provider,r?.apiKey,r?.headers);let i=s(e,n,r,r?.apiKey),a=r?.reasoning?t(e,r.reasoning):void 0,o=a===`off`?void 0:a;return C(e,n,{...i,reasoningEffort:o})};function T(e,t,n,r,i){let s=b(e),l={...e.headers};if(e.provider===`github-copilot`){let e=a(t.messages),n=o({messages:t.messages,hasImages:e});Object.assign(l,n)}return i&&(s.sessionAffinityFormat===`openrouter`?l[`x-session-id`]=i:(s.sessionAffinityFormat===`openai`&&(l.session_id=i),l[`x-client-request-id`]=i)),r&&Object.assign(l,r),new c({apiKey:n,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:l})}function E(e,t,r){let i=b(e),a=n(t,i.supportsToolSearch),o=m(e,t,h,{deferredTools:a.deferred}),s=y(r?.cacheRetention,r?.env),c={model:e.id,input:o,stream:!0,prompt_cache_key:s===`none`?void 0:d(r?.sessionId),prompt_cache_retention:x(i,s),store:!1};return r?.maxTokens&&(c.max_output_tokens=Math.max(r.maxTokens,16)),r?.temperature!==void 0&&(c.temperature=r?.temperature),r?.serviceTier!==void 0&&(c.service_tier=r.serviceTier),a.immediate.length>0&&(c.tools=f(a.immediate)),r?.toolChoice!==void 0&&(c.tool_choice=r.toolChoice),e.reasoning&&(r?.reasoningEffort||r?.reasoningSummary?(c.reasoning={effort:r?.reasoningEffort?e.thinkingLevelMap?.[r.reasoningEffort]??r.reasoningEffort:`medium`,summary:r?.reasoningSummary||`auto`},c.include=[`reasoning.encrypted_content`]):e.provider!==`github-copilot`&&e.thinkingLevelMap?.off!==null&&(c.reasoning={effort:e.thinkingLevelMap?.off??`none`}),e.provider===`xai`&&(c.include=[`reasoning.encrypted_content`])),c}function D(e,t){switch(t){case`flex`:return .5;case`priority`:return e.id===`gpt-5.5`?2.5:2;default:return 1}}function O(e,t,n){let r=D(n,t);r!==1&&(e.cost.input*=r,e.cost.output*=r,e.cost.cacheRead*=r,e.cost.cacheWrite*=r,e.cost.total=e.cost.input+e.cost.output+e.cost.cacheRead+e.cost.cacheWrite)}export{C as stream,w as streamSimple};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./event-stream-CXocIcc6.mjs";import{n as t}from"./models-bnt621e8.mjs";import{t as n}from"./provider-env-p-MKZrBX.mjs";import"./json-parse-CoJ2PRW2.mjs";import{t as r}from"./deferred-tools-DowE4eb1.mjs";import{t as i}from"./headers-8nMK0zm-.mjs";import{n as a,t as o}from"./github-copilot-headers-Co77A9iu.mjs";import{r as s}from"./transform-messages-C0FNxyyM.mjs";import{n as c}from"./openai-DtotRKm7.mjs";import{n as l,t as u}from"./error-body-RPMBLEAJ.mjs";import{t as d}from"./openai-prompt-cache-ChV-9Dro.mjs";import{n as f,r as p,t as m}from"./openai-responses-shared-Nr5Yi_N5.mjs";const h=new Set([`openai`,`openai-codex`,`opencode`]);function g(e,t){if(!e)return!1;let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n&&r!==null&&r.trim().length>0)return!0;return!1}function _(e,t,n){if(t)return t;if(g(n,`authorization`)||g(n,`cf-aig-authorization`))return`unused`;throw Error(`No API key for provider: ${e}`)}function v(e){return e.provider===`openrouter`||e.baseUrl.includes(`openrouter.ai`)?`openrouter`:`openai`}function y(e,t){return e||(n(`PI_CACHE_RETENTION`,t)===`long`?`long`:`short`)}function b(e){return{supportsDeveloperRole:e.compat?.supportsDeveloperRole??!0,sessionAffinityFormat:e.compat?.sessionAffinityFormat??v(e),supportsLongCacheRetention:e.compat?.supportsLongCacheRetention??!0,supportsToolSearch:e.compat?.supportsToolSearch??!1}}function x(e,t){return t===`long`&&e.supportsLongCacheRetention?`24h`:void 0}function S(e){return u(l(e),`OpenAI API error`)}const C=(t,n,r)=>{let a=new e;return(async()=>{let e={role:`assistant`,content:[],api:t.api,provider:t.provider,model:t.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let o=_(t.provider,r?.apiKey,r?.headers),s=y(r?.cacheRetention,r?.env)===`none`?void 0:r?.sessionId,c=T(t,n,o,r?.headers,s),l=E(t,n,r),u=await r?.onPayload?.(l,t);u!==void 0&&(l=u);let d={...r?.signal?{signal:r.signal}:{},...r?.timeoutMs===void 0?{}:{timeout:r.timeoutMs},maxRetries:r?.maxRetries??0},{data:f,response:m}=await c.responses.create(l,d).withResponse();if(await r?.onResponse?.({status:m.status,headers:i(m.headers)},t),a.push({type:`start`,partial:e}),await p(f,e,a,t,{serviceTier:r?.serviceTier,applyServiceTierPricing:(e,n)=>O(e,n,t)}),r?.signal?.aborted)throw Error(`Request was aborted`);if(e.stopReason===`aborted`||e.stopReason===`error`)throw Error(`An unknown error occurred`);a.push({type:`done`,reason:e.stopReason,message:e}),a.end()}catch(t){for(let t of e.content)delete t.index,delete t.partialJson;e.stopReason=r?.signal?.aborted?`aborted`:`error`,e.errorMessage=S(t),a.push({type:`error`,reason:e.stopReason,error:e}),a.end()}})(),a},w=(e,n,r)=>{_(e.provider,r?.apiKey,r?.headers);let i=s(e,n,r,r?.apiKey),a=r?.reasoning?t(e,r.reasoning):void 0,o=a===`off`?void 0:a;return C(e,n,{...i,reasoningEffort:o})};function T(e,t,n,r,i){let s=b(e),l={...e.headers};if(e.provider===`github-copilot`){let e=a(t.messages),n=o({messages:t.messages,hasImages:e});Object.assign(l,n)}return i&&(s.sessionAffinityFormat===`openrouter`?l[`x-session-id`]=i:(s.sessionAffinityFormat===`openai`&&(l.session_id=i),l[`x-client-request-id`]=i)),r&&Object.assign(l,r),new c({apiKey:n,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:l})}function E(e,t,n){let i=b(e),a=r(t,i.supportsToolSearch),o=m(e,t,h,{deferredTools:a.deferred}),s=y(n?.cacheRetention,n?.env),c={model:e.id,input:o,stream:!0,prompt_cache_key:s===`none`?void 0:d(n?.sessionId),prompt_cache_retention:x(i,s),store:!1};return n?.maxTokens&&(c.max_output_tokens=Math.max(n.maxTokens,16)),n?.temperature!==void 0&&(c.temperature=n?.temperature),n?.serviceTier!==void 0&&(c.service_tier=n.serviceTier),a.immediate.length>0&&(c.tools=f(a.immediate)),n?.toolChoice!==void 0&&(c.tool_choice=n.toolChoice),e.reasoning&&(n?.reasoningEffort||n?.reasoningSummary?(c.reasoning={effort:n?.reasoningEffort?e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort:`medium`,summary:n?.reasoningSummary||`auto`},c.include=[`reasoning.encrypted_content`]):e.provider!==`github-copilot`&&e.thinkingLevelMap?.off!==null&&(c.reasoning={effort:e.thinkingLevelMap?.off??`none`}),e.provider===`xai`&&(c.include=[`reasoning.encrypted_content`])),c}function D(e,t){switch(t){case`flex`:return .5;case`priority`:return e.id===`gpt-5.5`?2.5:2;default:return 1}}function O(e,t,n){let r=D(n,t);r!==1&&(e.cost.input*=r,e.cost.output*=r,e.cost.cacheRead*=r,e.cost.cacheWrite*=r,e.cost.total=e.cost.input+e.cost.output+e.cost.cacheRead+e.cost.cacheWrite)}export{C as stream,w as streamSimple};
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./models-BZPNtJp1.mjs";import{n as t}from"./json-parse-BjxNFuy6.mjs";import{t as n}from"./sanitize-unicode-C8aKmv6o.mjs";import{t as r}from"./transform-messages-s3jcHssz.mjs";import{t as i}from"./hash-BJLGFTk8.mjs";function a(e,t){let n={v:1,id:e};return t&&(n.phase=t),JSON.stringify(n)}function o(e){if(e){if(e.startsWith(`{`))try{let t=JSON.parse(e);if(t.v===1&&typeof t.id==`string`)return t.phase===`commentary`||t.phase===`final_answer`?{id:t.id,phase:t.phase}:{id:t.id}}catch{}return{id:e}}}function s(e,t,a,s){let l=[],u=new Set,d=e=>{let t=e.replace(/[^a-zA-Z0-9_-]/g,`_`);return(t.length>64?t.slice(0,64):t).replace(/_+$/,``)},f=e=>{let t=`fc_${i(e)}`;return t.length>64?t.slice(0,64):t},p=r(t.messages,e,(t,n,r)=>{if(!a.has(e.provider)||!t.includes(`|`))return d(t);let[i,o]=t.split(`|`),s=d(i),c=r.provider!==e.provider||r.api!==e.api?f(o):d(o);return c.startsWith(`fc_`)||(c=d(`fc_${c}`)),`${s}|${c}`});if((s?.includeSystemPrompt??!0)&&t.systemPrompt){let r=e.compat,i=e.reasoning&&r?.supportsDeveloperRole!==!1?`developer`:`system`;l.push({role:i,content:n(t.systemPrompt)})}let m=0;for(let t of p){if(t.role===`user`)if(typeof t.content==`string`)l.push({role:`user`,content:[{type:`input_text`,text:n(t.content)}]});else{let e=t.content.map(e=>e.type===`text`?{type:`input_text`,text:n(e.text)}:{type:`input_image`,detail:`auto`,image_url:`data:${e.mimeType};base64,${e.data}`});if(e.length===0)continue;l.push({role:`user`,content:e})}else if(t.role===`assistant`){let r=[],a=t,s=a.model!==e.id&&a.provider===e.provider&&a.api===e.api,c=0;for(let e of t.content)if(e.type===`thinking`){if(e.thinkingSignature){let t=JSON.parse(e.thinkingSignature);r.push(t)}}else if(e.type===`text`){let t=e,a=o(t.textSignature),s=c===0?`msg_pi_${m}`:`msg_pi_${m}_${c}`;c++;let l=a?.id;l?l.length>64&&(l=`msg_${i(l)}`):l=s,r.push({type:`message`,role:`assistant`,content:[{type:`output_text`,text:n(t.text),annotations:[]}],status:`completed`,id:l,phase:a?.phase})}else if(e.type===`toolCall`){let t=e,[n,i]=t.id.split(`|`),a=i;s&&a?.startsWith(`fc_`)&&(a=void 0),r.push({type:`function_call`,id:a,call_id:n,name:t.name,arguments:JSON.stringify(t.arguments)})}if(r.length===0)continue;l.push(...r)}else if(t.role===`toolResult`){let r=t.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
3
+ `),a=t.content.some(e=>e.type===`image`),o=r.length>0,[d]=t.toolCallId.split(`|`),f;if(a&&e.input.includes(`image`)){let e=[];o&&e.push({type:`input_text`,text:n(r)});for(let n of t.content)n.type===`image`&&e.push({type:`input_image`,detail:`auto`,image_url:`data:${n.mimeType};base64,${n.data}`});f=e}else f=n(o?r:a?`(see attached image)`:`(no tool output)`);l.push({type:`function_call_output`,call_id:d,output:f});let p=[];for(let e of t.addedToolNames??[]){let t=s?.deferredTools?.get(e);!t||u.has(e)||(u.add(e),p.push(t))}if(p.length>0){let e=p.map(e=>e.name),n=`pi_tool_load_${i(`${t.toolCallId}:${e.join(`,`)}`)}`;l.push({type:`tool_search_call`,call_id:n,execution:`client`,status:`completed`,arguments:{query:e.join(` `),limit:e.length}}),l.push({type:`tool_search_output`,call_id:n,execution:`client`,status:`completed`,tools:c(p,{deferLoading:!0})})}}m++}return l}function c(e,t){let n=t?.strict===void 0?!1:t.strict;return e.map(e=>({type:`function`,name:e.name,description:e.description,parameters:e.parameters,strict:n,...t?.deferLoading?{defer_loading:!0}:{}}))}async function l(n,r,i,o,s){let c=!1,l=new Map,d=new Map,f=(e,t)=>{let n=l.get(e);return n?.type===t?n:void 0},p=(e,t)=>{if(t.type===`reasoning`){let t={type:`thinking`,thinking:``};r.content.push(t);let n={type:`thinking`,block:t,contentIndex:r.content.length-1};return l.set(e,n),i.push({type:`thinking_start`,contentIndex:n.contentIndex,partial:r}),n}if(t.type===`message`){let t={type:`text`,text:``};r.content.push(t);let n={type:`text`,block:t,contentIndex:r.content.length-1};return l.set(e,n),i.push({type:`text_start`,contentIndex:n.contentIndex,partial:r}),n}if(t.type===`function_call`){let n={type:`toolCall`,id:`${t.call_id}|${t.id}`,name:t.name,arguments:{},partialJson:t.arguments||``};r.content.push(n);let a={type:`toolCall`,block:n,contentIndex:r.content.length-1};return l.set(e,a),i.push({type:`toolcall_start`,contentIndex:a.contentIndex,partial:r}),a}},m=(e,t)=>l.get(e)??p(e,t),h=e=>{for(let t of e){if(t.type!==`reasoning`||!t.encrypted_content)continue;let e=d.get(t.id);if(!e?.thinkingSignature)continue;let n=JSON.parse(e.thinkingSignature);n.encrypted_content||(e.thinkingSignature=JSON.stringify({...n,encrypted_content:t.encrypted_content}))}},g=t=>{if(c=!0,h(t.output??[]),t?.id&&(r.responseId=t.id),t?.usage){let e=t.usage.input_tokens_details,n=e?.cached_tokens||0,i=e?.cache_write_tokens||0;r.usage={input:Math.max(0,(t.usage.input_tokens||0)-n-i),output:t.usage.output_tokens||0,cacheRead:n,cacheWrite:i,reasoning:t.usage.output_tokens_details?.reasoning_tokens||0,totalTokens:t.usage.total_tokens||0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}}}if(e(o,r.usage),s?.applyServiceTierPricing){let e=s.resolveServiceTier?s.resolveServiceTier(t?.service_tier,s.serviceTier):t?.service_tier??s.serviceTier;s.applyServiceTierPricing(r.usage,e)}r.stopReason=u(t?.status),r.content.some(e=>e.type===`toolCall`)&&r.stopReason===`stop`&&(r.stopReason=`toolUse`)};for await(let e of n)if(e.type===`response.created`)r.responseId=e.response.id;else if(e.type===`response.output_item.added`)p(e.output_index,e.item);else if(e.type===`response.reasoning_summary_text.delta`){let t=f(e.output_index,`thinking`);if(!t)continue;t.block.thinking+=e.delta,i.push({type:`thinking_delta`,contentIndex:t.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.reasoning_summary_part.done`){let t=f(e.output_index,`thinking`);if(!t)continue;t.block.thinking+=`
4
+
5
+ `,i.push({type:`thinking_delta`,contentIndex:t.contentIndex,delta:`
6
+
7
+ `,partial:r})}else if(e.type===`response.reasoning_text.delta`){let t=f(e.output_index,`thinking`);if(!t)continue;t.block.thinking+=e.delta,i.push({type:`thinking_delta`,contentIndex:t.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.output_text.delta`){let t=f(e.output_index,`text`);if(!t)continue;t.block.text+=e.delta,i.push({type:`text_delta`,contentIndex:t.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.refusal.delta`){let t=f(e.output_index,`text`);if(!t)continue;t.block.text+=e.delta,i.push({type:`text_delta`,contentIndex:t.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.function_call_arguments.delta`){let n=f(e.output_index,`toolCall`);if(!n)continue;n.block.partialJson+=e.delta,n.block.arguments=t(n.block.partialJson),i.push({type:`toolcall_delta`,contentIndex:n.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.function_call_arguments.done`){let n=f(e.output_index,`toolCall`);if(!n)continue;let a=n.block.partialJson;if(n.block.partialJson=e.arguments,n.block.arguments=t(n.block.partialJson),e.arguments.startsWith(a)){let t=e.arguments.slice(a.length);t.length>0&&i.push({type:`toolcall_delta`,contentIndex:n.contentIndex,delta:t,partial:r})}}else if(e.type===`response.output_item.done`){let n=e.item,o=m(e.output_index,n);if(n.type===`reasoning`&&o?.type===`thinking`){let t=n.summary?.map(e=>e.text).join(`
8
+
9
+ `)||``,a=n.content?.map(e=>e.text).join(`
10
+
11
+ `)||``;o.block.thinking=t||a||o.block.thinking,o.block.thinkingSignature=JSON.stringify(n),d.set(n.id,o.block),i.push({type:`thinking_end`,contentIndex:o.contentIndex,content:o.block.thinking,partial:r}),l.delete(e.output_index)}else n.type===`message`&&o?.type===`text`?(o.block.text=n.content?.map(e=>e.type===`output_text`?e.text:e.refusal).join(``)||``,o.block.textSignature=a(n.id,n.phase??void 0),i.push({type:`text_end`,contentIndex:o.contentIndex,content:o.block.text,partial:r}),l.delete(e.output_index)):n.type===`function_call`&&o?.type===`toolCall`&&(o.block.arguments=t(n.arguments||o.block.partialJson||`{}`),delete o.block.partialJson,i.push({type:`toolcall_end`,contentIndex:o.contentIndex,toolCall:o.block,partial:r}),l.delete(e.output_index))}else if(e.type===`response.completed`||e.type===`response.incomplete`)g(e.response);else if(e.type===`error`)throw Error(`Error Code ${e.code}: ${e.message}`||`Unknown error`);else if(e.type===`response.failed`){c=!0;let t=e.response?.error,n=e.response?.incomplete_details,r=t?`${t.code||`unknown`}: ${t.message||`no message`}`:n?.reason?`incomplete: ${n.reason}`:`Unknown error (no error details in response)`;throw Error(r)}if(!c)throw Error(`OpenAI Responses stream ended before a terminal response event`)}function u(e){if(!e)return`stop`;switch(e){case`completed`:return`stop`;case`incomplete`:return`length`;case`failed`:case`cancelled`:return`error`;case`in_progress`:case`queued`:return`stop`;default:{let t=e;throw Error(`Unhandled stop reason: ${t}`)}}}export{c as n,l as r,s as t};
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./models-bnt621e8.mjs";import{n as t}from"./json-parse-CoJ2PRW2.mjs";import{t as n}from"./sanitize-unicode-BU6jSNzJ.mjs";import{t as r}from"./transform-messages-C0FNxyyM.mjs";import{t as i}from"./hash-Dx9oN2Lv.mjs";function a(e,t){let n={v:1,id:e};return t&&(n.phase=t),JSON.stringify(n)}function o(e){if(e){if(e.startsWith(`{`))try{let t=JSON.parse(e);if(t.v===1&&typeof t.id==`string`)return t.phase===`commentary`||t.phase===`final_answer`?{id:t.id,phase:t.phase}:{id:t.id}}catch{}return{id:e}}}function s(e,t,a,s){let l=[],u=new Set,d=e=>{let t=e.replace(/[^a-zA-Z0-9_-]/g,`_`);return(t.length>64?t.slice(0,64):t).replace(/_+$/,``)},f=e=>{let t=`fc_${i(e)}`;return t.length>64?t.slice(0,64):t},p=r(t.messages,e,(t,n,r)=>{if(!a.has(e.provider)||!t.includes(`|`))return d(t);let[i,o]=t.split(`|`),s=d(i),c=r.provider!==e.provider||r.api!==e.api?f(o):d(o);return c.startsWith(`fc_`)||(c=d(`fc_${c}`)),`${s}|${c}`});if((s?.includeSystemPrompt??!0)&&t.systemPrompt){let r=e.compat,i=e.reasoning&&r?.supportsDeveloperRole!==!1?`developer`:`system`;l.push({role:i,content:n(t.systemPrompt)})}let m=0;for(let t of p){if(t.role===`user`)if(typeof t.content==`string`)l.push({role:`user`,content:[{type:`input_text`,text:n(t.content)}]});else{let e=t.content.map(e=>e.type===`text`?{type:`input_text`,text:n(e.text)}:{type:`input_image`,detail:`auto`,image_url:`data:${e.mimeType};base64,${e.data}`});if(e.length===0)continue;l.push({role:`user`,content:e})}else if(t.role===`assistant`){let r=[],a=t,s=a.model!==e.id&&a.provider===e.provider&&a.api===e.api,c=0;for(let e of t.content)if(e.type===`thinking`){if(e.thinkingSignature){let t=JSON.parse(e.thinkingSignature);r.push(t)}}else if(e.type===`text`){let t=e,a=o(t.textSignature),s=c===0?`msg_pi_${m}`:`msg_pi_${m}_${c}`;c++;let l=a?.id;l?l.length>64&&(l=`msg_${i(l)}`):l=s,r.push({type:`message`,role:`assistant`,content:[{type:`output_text`,text:n(t.text),annotations:[]}],status:`completed`,id:l,phase:a?.phase})}else if(e.type===`toolCall`){let t=e,[n,i]=t.id.split(`|`),a=i;s&&a?.startsWith(`fc_`)&&(a=void 0),r.push({type:`function_call`,id:a,call_id:n,name:t.name,arguments:JSON.stringify(t.arguments)})}if(r.length===0)continue;l.push(...r)}else if(t.role===`toolResult`){let r=t.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
3
+ `),a=t.content.some(e=>e.type===`image`),o=r.length>0,[d]=t.toolCallId.split(`|`),f;if(a&&e.input.includes(`image`)){let e=[];o&&e.push({type:`input_text`,text:n(r)});for(let n of t.content)n.type===`image`&&e.push({type:`input_image`,detail:`auto`,image_url:`data:${n.mimeType};base64,${n.data}`});f=e}else f=n(o?r:a?`(see attached image)`:`(no tool output)`);l.push({type:`function_call_output`,call_id:d,output:f});let p=[];for(let e of t.addedToolNames??[]){let t=s?.deferredTools?.get(e);!t||u.has(e)||(u.add(e),p.push(t))}if(p.length>0){let e=p.map(e=>e.name),n=`pi_tool_load_${i(`${t.toolCallId}:${e.join(`,`)}`)}`;l.push({type:`tool_search_call`,call_id:n,execution:`client`,status:`completed`,arguments:{query:e.join(` `),limit:e.length}}),l.push({type:`tool_search_output`,call_id:n,execution:`client`,status:`completed`,tools:c(p,{deferLoading:!0})})}}m++}return l}function c(e,t){let n=t?.strict===void 0?!1:t.strict;return e.map(e=>({type:`function`,name:e.name,description:e.description,parameters:e.parameters,strict:n,...t?.deferLoading?{defer_loading:!0}:{}}))}async function l(n,r,i,o,s){let c=!1,l=new Map,d=new Map,f=(e,t)=>{let n=l.get(e);return n?.type===t?n:void 0},p=(e,t)=>{if(t.type===`reasoning`){let t={type:`thinking`,thinking:``};r.content.push(t);let n={type:`thinking`,block:t,contentIndex:r.content.length-1};return l.set(e,n),i.push({type:`thinking_start`,contentIndex:n.contentIndex,partial:r}),n}if(t.type===`message`){let t={type:`text`,text:``};r.content.push(t);let n={type:`text`,block:t,contentIndex:r.content.length-1};return l.set(e,n),i.push({type:`text_start`,contentIndex:n.contentIndex,partial:r}),n}if(t.type===`function_call`){let n={type:`toolCall`,id:`${t.call_id}|${t.id}`,name:t.name,arguments:{},partialJson:t.arguments||``};r.content.push(n);let a={type:`toolCall`,block:n,contentIndex:r.content.length-1};return l.set(e,a),i.push({type:`toolcall_start`,contentIndex:a.contentIndex,partial:r}),a}},m=(e,t)=>l.get(e)??p(e,t),h=e=>{for(let t of e){if(t.type!==`reasoning`||!t.encrypted_content)continue;let e=d.get(t.id);if(!e?.thinkingSignature)continue;let n=JSON.parse(e.thinkingSignature);n.encrypted_content||(e.thinkingSignature=JSON.stringify({...n,encrypted_content:t.encrypted_content}))}},g=t=>{if(c=!0,h(t.output??[]),t?.id&&(r.responseId=t.id),t?.usage){let e=t.usage.input_tokens_details,n=e?.cached_tokens||0,i=e?.cache_write_tokens||0;r.usage={input:Math.max(0,(t.usage.input_tokens||0)-n-i),output:t.usage.output_tokens||0,cacheRead:n,cacheWrite:i,reasoning:t.usage.output_tokens_details?.reasoning_tokens||0,totalTokens:t.usage.total_tokens||0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}}}if(e(o,r.usage),s?.applyServiceTierPricing){let e=s.resolveServiceTier?s.resolveServiceTier(t?.service_tier,s.serviceTier):t?.service_tier??s.serviceTier;s.applyServiceTierPricing(r.usage,e)}r.stopReason=u(t?.status),r.content.some(e=>e.type===`toolCall`)&&r.stopReason===`stop`&&(r.stopReason=`toolUse`)};for await(let e of n)if(e.type===`response.created`)r.responseId=e.response.id;else if(e.type===`response.output_item.added`)p(e.output_index,e.item);else if(e.type===`response.reasoning_summary_text.delta`){let t=f(e.output_index,`thinking`);if(!t)continue;t.block.thinking+=e.delta,i.push({type:`thinking_delta`,contentIndex:t.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.reasoning_summary_part.done`){let t=f(e.output_index,`thinking`);if(!t)continue;t.block.thinking+=`
4
+
5
+ `,i.push({type:`thinking_delta`,contentIndex:t.contentIndex,delta:`
6
+
7
+ `,partial:r})}else if(e.type===`response.reasoning_text.delta`){let t=f(e.output_index,`thinking`);if(!t)continue;t.block.thinking+=e.delta,i.push({type:`thinking_delta`,contentIndex:t.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.output_text.delta`){let t=f(e.output_index,`text`);if(!t)continue;t.block.text+=e.delta,i.push({type:`text_delta`,contentIndex:t.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.refusal.delta`){let t=f(e.output_index,`text`);if(!t)continue;t.block.text+=e.delta,i.push({type:`text_delta`,contentIndex:t.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.function_call_arguments.delta`){let n=f(e.output_index,`toolCall`);if(!n)continue;n.block.partialJson+=e.delta,n.block.arguments=t(n.block.partialJson),i.push({type:`toolcall_delta`,contentIndex:n.contentIndex,delta:e.delta,partial:r})}else if(e.type===`response.function_call_arguments.done`){let n=f(e.output_index,`toolCall`);if(!n)continue;let a=n.block.partialJson;if(n.block.partialJson=e.arguments,n.block.arguments=t(n.block.partialJson),e.arguments.startsWith(a)){let t=e.arguments.slice(a.length);t.length>0&&i.push({type:`toolcall_delta`,contentIndex:n.contentIndex,delta:t,partial:r})}}else if(e.type===`response.output_item.done`){let n=e.item,o=m(e.output_index,n);if(n.type===`reasoning`&&o?.type===`thinking`){let t=n.summary?.map(e=>e.text).join(`
8
+
9
+ `)||``,a=n.content?.map(e=>e.text).join(`
10
+
11
+ `)||``;o.block.thinking=t||a||o.block.thinking,o.block.thinkingSignature=JSON.stringify(n),d.set(n.id,o.block),i.push({type:`thinking_end`,contentIndex:o.contentIndex,content:o.block.thinking,partial:r}),l.delete(e.output_index)}else n.type===`message`&&o?.type===`text`?(o.block.text=n.content?.map(e=>e.type===`output_text`?e.text:e.refusal).join(``)||``,o.block.textSignature=a(n.id,n.phase??void 0),i.push({type:`text_end`,contentIndex:o.contentIndex,content:o.block.text,partial:r}),l.delete(e.output_index)):n.type===`function_call`&&o?.type===`toolCall`&&(o.block.arguments=t(n.arguments||o.block.partialJson||`{}`),delete o.block.partialJson,i.push({type:`toolcall_end`,contentIndex:o.contentIndex,toolCall:o.block,partial:r}),l.delete(e.output_index))}else if(e.type===`response.completed`||e.type===`response.incomplete`)g(e.response);else if(e.type===`error`)throw Error(`Error Code ${e.code}: ${e.message}`||`Unknown error`);else if(e.type===`response.failed`){c=!0;let t=e.response?.error,n=e.response?.incomplete_details,r=t?`${t.code||`unknown`}: ${t.message||`no message`}`:n?.reason?`incomplete: ${n.reason}`:`Unknown error (no error details in response)`;throw Error(r)}if(!c)throw Error(`OpenAI Responses stream ended before a terminal response event`)}function u(e){if(!e)return`stop`;switch(e){case`completed`:return`stop`;case`incomplete`:return`length`;case`failed`:case`cancelled`:return`error`;case`in_progress`:case`queued`:return`stop`;default:{let t=e;throw Error(`Unhandled stop reason: ${t}`)}}}export{c as n,l as r,s as t};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{n as e,t}from"./headers-BkXFKypW.mjs";import{t as n}from"./sanitize-unicode-DVHYNBlY.mjs";import{n as r}from"./openai-Cv91uXJB.mjs";import{n as i,t as a}from"./error-body-D-jnPxbB.mjs";const o=async(e,n,r)=>{let o={api:e.api,provider:e.provider,model:e.id,output:[],stopReason:`stop`,timestamp:Date.now()};try{let i=r?.apiKey;if(!i)throw Error(`No API key for provider: ${e.provider}`);let a=s(e,i,r?.headers),u=c(e,n),d=await r?.onPayload?.(u,e);d!==void 0&&(u=d);let f={...r?.signal?{signal:r.signal}:{},...r?.timeoutMs===void 0?{}:{timeout:r.timeoutMs},maxRetries:r?.maxRetries??0},{data:p,response:m}=await a.chat.completions.create(u,f).withResponse();await r?.onResponse?.({status:m.status,headers:t(m.headers)},e);let h=p;o.responseId=h.id,h.usage&&(o.usage=l(h.usage,e));let g=h.choices[0];if(g){let e=g.message.content;typeof e==`string`&&e.length>0&&o.output.push({type:`text`,text:e});for(let e of g.message.images??[]){let t=typeof e.image_url==`string`?e.image_url:e.image_url?.url;if(!t?.startsWith(`data:`))continue;let n=t.match(/^data:([^;]+);base64,(.+)$/);n&&o.output.push({type:`image`,mimeType:n[1],data:n[2]})}}return o}catch(e){return o.stopReason=r?.signal?.aborted?`aborted`:`error`,o.errorMessage=a(i(e)),o}};function s(t,n,i){return new r({apiKey:n,baseURL:t.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:e({...t.headers,...i})})}function c(e,t){let r=t.input.map(e=>e.type===`text`?{type:`text`,text:n(e.text)}:{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}});return{model:e.id,messages:[{role:`user`,content:r}],stream:!1,modalities:e.output.includes(`text`)?[`image`,`text`]:[`image`]}}function l(e,t){let n=e.prompt_tokens||0,r=e.prompt_tokens_details?.cached_tokens||0,i=e.prompt_tokens_details?.cache_write_tokens||0,a=i>0?Math.max(0,r-i):r,o=Math.max(0,n-a-i),s=e.completion_tokens||0,c={input:o,output:s,cacheRead:a,cacheWrite:i,totalTokens:o+s+a+i,cost:{input:t.cost.input/1e6*o,output:t.cost.output/1e6*s,cacheRead:t.cost.cacheRead/1e6*a,cacheWrite:t.cost.cacheWrite/1e6*i,total:0}};return c.cost.total=c.cost.input+c.cost.output+c.cost.cacheRead+c.cost.cacheWrite,c}export{o as generateImages};
2
+ import{n as e,t}from"./headers-Gh3dvZSc.mjs";import{t as n}from"./sanitize-unicode-C8aKmv6o.mjs";import{n as r}from"./openai-Clqf3tig.mjs";import{n as i,t as a}from"./error-body-3m883nGr.mjs";const o=async(e,n,r)=>{let o={api:e.api,provider:e.provider,model:e.id,output:[],stopReason:`stop`,timestamp:Date.now()};try{let i=r?.apiKey;if(!i)throw Error(`No API key for provider: ${e.provider}`);let a=s(e,i,r?.headers),u=c(e,n),d=await r?.onPayload?.(u,e);d!==void 0&&(u=d);let f={...r?.signal?{signal:r.signal}:{},...r?.timeoutMs===void 0?{}:{timeout:r.timeoutMs},maxRetries:r?.maxRetries??0},{data:p,response:m}=await a.chat.completions.create(u,f).withResponse();await r?.onResponse?.({status:m.status,headers:t(m.headers)},e);let h=p;o.responseId=h.id,h.usage&&(o.usage=l(h.usage,e));let g=h.choices[0];if(g){let e=g.message.content;typeof e==`string`&&e.length>0&&o.output.push({type:`text`,text:e});for(let e of g.message.images??[]){let t=typeof e.image_url==`string`?e.image_url:e.image_url?.url;if(!t?.startsWith(`data:`))continue;let n=t.match(/^data:([^;]+);base64,(.+)$/);n&&o.output.push({type:`image`,mimeType:n[1],data:n[2]})}}return o}catch(e){return o.stopReason=r?.signal?.aborted?`aborted`:`error`,o.errorMessage=a(i(e)),o}};function s(t,n,i){return new r({apiKey:n,baseURL:t.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:e({...t.headers,...i})})}function c(e,t){let r=t.input.map(e=>e.type===`text`?{type:`text`,text:n(e.text)}:{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}});return{model:e.id,messages:[{role:`user`,content:r}],stream:!1,modalities:e.output.includes(`text`)?[`image`,`text`]:[`image`]}}function l(e,t){let n=e.prompt_tokens||0,r=e.prompt_tokens_details?.cached_tokens||0,i=e.prompt_tokens_details?.cache_write_tokens||0,a=i>0?Math.max(0,r-i):r,o=Math.max(0,n-a-i),s=e.completion_tokens||0,c={input:o,output:s,cacheRead:a,cacheWrite:i,totalTokens:o+s+a+i,cost:{input:t.cost.input/1e6*o,output:t.cost.output/1e6*s,cacheRead:t.cost.cacheRead/1e6*a,cacheWrite:t.cost.cacheWrite/1e6*i,total:0}};return c.cost.total=c.cost.input+c.cost.output+c.cost.cacheRead+c.cost.cacheWrite,c}export{o as generateImages};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{n as e,t}from"./headers-8nMK0zm-.mjs";import{t as n}from"./sanitize-unicode-BU6jSNzJ.mjs";import{n as r}from"./openai-DtotRKm7.mjs";import{n as i,t as a}from"./error-body-RPMBLEAJ.mjs";const o=async(e,n,r)=>{let o={api:e.api,provider:e.provider,model:e.id,output:[],stopReason:`stop`,timestamp:Date.now()};try{let i=r?.apiKey;if(!i)throw Error(`No API key for provider: ${e.provider}`);let a=s(e,i,r?.headers),u=c(e,n),d=await r?.onPayload?.(u,e);d!==void 0&&(u=d);let f={...r?.signal?{signal:r.signal}:{},...r?.timeoutMs===void 0?{}:{timeout:r.timeoutMs},maxRetries:r?.maxRetries??0},{data:p,response:m}=await a.chat.completions.create(u,f).withResponse();await r?.onResponse?.({status:m.status,headers:t(m.headers)},e);let h=p;o.responseId=h.id,h.usage&&(o.usage=l(h.usage,e));let g=h.choices[0];if(g){let e=g.message.content;typeof e==`string`&&e.length>0&&o.output.push({type:`text`,text:e});for(let e of g.message.images??[]){let t=typeof e.image_url==`string`?e.image_url:e.image_url?.url;if(!t?.startsWith(`data:`))continue;let n=t.match(/^data:([^;]+);base64,(.+)$/);n&&o.output.push({type:`image`,mimeType:n[1],data:n[2]})}}return o}catch(e){return o.stopReason=r?.signal?.aborted?`aborted`:`error`,o.errorMessage=a(i(e)),o}};function s(t,n,i){return new r({apiKey:n,baseURL:t.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:e({...t.headers,...i})})}function c(e,t){let r=t.input.map(e=>e.type===`text`?{type:`text`,text:n(e.text)}:{type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}});return{model:e.id,messages:[{role:`user`,content:r}],stream:!1,modalities:e.output.includes(`text`)?[`image`,`text`]:[`image`]}}function l(e,t){let n=e.prompt_tokens||0,r=e.prompt_tokens_details?.cached_tokens||0,i=e.prompt_tokens_details?.cache_write_tokens||0,a=i>0?Math.max(0,r-i):r,o=Math.max(0,n-a-i),s=e.completion_tokens||0,c={input:o,output:s,cacheRead:a,cacheWrite:i,totalTokens:o+s+a+i,cost:{input:t.cost.input/1e6*o,output:t.cost.output/1e6*s,cacheRead:t.cost.cacheRead/1e6*a,cacheWrite:t.cost.cacheWrite/1e6*i,total:0}};return c.cost.total=c.cost.input+c.cost.output+c.cost.cacheRead+c.cost.cacheWrite,c}export{o as generateImages};